pax_global_header00006660000000000000000000000064140734453320014517gustar00rootroot0000000000000052 comment=d38d93fad9eb43cf98600fccb8f673e48615d041 eclipse-collections-11.0.0.M3/000077500000000000000000000000001407344533200160145ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/.gitattributes000066400000000000000000000007101407344533200207050ustar00rootroot00000000000000# Auto detect text files and perform LF normalization * text=auto *.md text *.java text *.scala text *.properties text *.xml text *.txt text *.sh text *.iml text *.classpath text *.project text *.yml text *.header text *.properties text *.prefs text *.stg text *.sh text *.sed text *.bat text # These files are binary and should be left untouched # (binary is a macro for -text -diff) *.class binary *.jar binary *.zip binary eclipse-collections-11.0.0.M3/.github/000077500000000000000000000000001407344533200173545ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/.github/dependabot.yml000066400000000000000000000003171407344533200222050ustar00rootroot00000000000000version: 2 updates: - package-ecosystem: "maven" directory: "/" schedule: interval: "weekly" - package-ecosystem: "github-actions" directory: "/" schedule: interval: "weekly" eclipse-collections-11.0.0.M3/.github/workflows/000077500000000000000000000000001407344533200214115ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/.github/workflows/acceptance.yml000066400000000000000000000017011407344533200242210ustar00rootroot00000000000000# This workflow will build a Java project with Maven # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven name: Acceptance Tests on: [push, pull_request] jobs: applications: name: Acceptance Tests ${{ matrix.java-version }} strategy: matrix: os: [ubuntu-latest] java-version: [8] runs-on: ${{ matrix.os }} steps: - name: Git Checkout uses: actions/checkout@v2 - name: Set Maven Wrapper run: mvn -N io.takari:maven:0.7.7:wrapper -Dmaven=3.6.3 - name: Set JDK ${{ matrix.java-version }} uses: actions/setup-java@v2 with: distribution: 'zulu' java-version: ${{ matrix.java-version }} - name: Acceptance Tests run: ./mvnw install --projects acceptance-tests --also-make --activate-profiles all --no-transfer-progress env: MAVEN_OPTS: "-Xmx1g" eclipse-collections-11.0.0.M3/.github/workflows/checkstyle.yml000066400000000000000000000016521407344533200242760ustar00rootroot00000000000000# This workflow will build a Java project with Maven # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven name: Checkstyle on: [push, pull_request] jobs: applications: name: Checkstyle ${{ matrix.java-version }} strategy: matrix: os: [ubuntu-latest] java-version: [11] runs-on: ${{ matrix.os }} steps: - name: Git Checkout uses: actions/checkout@v2 - name: Set Maven Wrapper run: mvn -N io.takari:maven:0.7.7:wrapper -Dmaven=3.6.3 - name: Set JDK ${{ matrix.java-version }} uses: actions/setup-java@v2 with: distribution: 'zulu' java-version: ${{ matrix.java-version }} - name: Checkstyle run: ./mvnw install checkstyle:check --activate-profiles all -DskipTests=true --no-transfer-progress env: MAVEN_OPTS: "-Xmx1g" eclipse-collections-11.0.0.M3/.github/workflows/coverage.yaml000066400000000000000000000020151407344533200240660ustar00rootroot00000000000000# This workflow will build a Java project with Maven # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven name: Coverage Report on: schedule: - cron: '0 0 * * 0' jobs: applications: name: Coverage Report ${{ matrix.java-version }} if: github.repository == 'eclipse/eclipse-collections' strategy: matrix: os: [ubuntu-latest] java-version: [8] runs-on: ${{ matrix.os }} env: JAVA_VERSION: ${{ matrix.java-version }} steps: - uses: actions/checkout@v2 - name: Set JDK ${{ matrix.java-version }} uses: actions/setup-java@v2 with: distribution: 'zulu' java-version: ${{ matrix.java-version }} - name: Generate Coverage Report run: mvn clean verify - name: Archive Jacoco reports uses: actions/upload-artifact@v2.2.3 with: name: jacoco-reports path: test-coverage/target/site/jacoco-aggregate eclipse-collections-11.0.0.M3/.github/workflows/earlyaccess-javadoc.yml000066400000000000000000000034411407344533200260410ustar00rootroot00000000000000# This workflow will build a Java project with Maven # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven name: JDK-EA Javadoc on: [push, pull_request] jobs: applications: name: Unit Test EA strategy: fail-fast: false matrix: os: [ubuntu-latest] java-version: [17] runs-on: ${{ matrix.os }} steps: - name: Git Checkout uses: actions/checkout@v2 - name: 'Download JDK' uses: sormuras/download-jdk@v1 id: download-jdk with: feature: ${{ matrix.java-version }} - name: 'Print outputs' shell: bash run: | echo 'Outputs' echo "steps.download-jdk.outputs.file = ${{ steps.download-jdk.outputs.file }}" echo "steps.download-jdk.outputs.version = ${{ steps.download-jdk.outputs.version }}" echo "env.JDK_FILE = ${{ env.JDK_FILE }}" echo "env.JDK_VERSION = ${{ env.JDK_VERSION }}" - name: 'Set up JDK' uses: actions/setup-java@v2 with: java-version: ${{ steps.download-jdk.outputs.version }} distribution: jdkfile jdkFile: "${{ steps.download-jdk.outputs.file }}" - name: Set Maven Wrapper run: mvn -N io.takari:maven:0.7.7:wrapper -Dmaven=3.6.3 - name: 'JDK Version' run: java --version - name: Javadoc run: ./mvnw -Dsurefire.useFile=false -DskipTests -Denforcer.skip=true clean install javadoc:aggregate -pl '!unit-tests,!serialization-tests,!jcstress-tests,!junit-trait-runner,!unit-tests-java8,!test-coverage,!p2-repository,!org.eclipse.collections:org.eclipse.collections' --no-transfer-progress env: MAVEN_OPTS: "-Xmx2g" eclipse-collections-11.0.0.M3/.github/workflows/earlyaccess-unit.yml000066400000000000000000000031551407344533200254130ustar00rootroot00000000000000# This workflow will build a Java project with Maven # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven name: JDK-EA Unit Tests on: [push, pull_request] jobs: applications: name: Unit Test EA strategy: fail-fast: false matrix: os: [ubuntu-latest] java-version: [17] runs-on: ${{ matrix.os }} steps: - name: Git Checkout uses: actions/checkout@v2 - name: 'Download JDK' uses: sormuras/download-jdk@v1 id: download-jdk with: feature: ${{ matrix.java-version }} - name: 'Print outputs' shell: bash run: | echo 'Outputs' echo "steps.download-jdk.outputs.file = ${{ steps.download-jdk.outputs.file }}" echo "steps.download-jdk.outputs.version = ${{ steps.download-jdk.outputs.version }}" echo "env.JDK_FILE = ${{ env.JDK_FILE }}" echo "env.JDK_VERSION = ${{ env.JDK_VERSION }}" - name: 'Set up JDK' uses: actions/setup-java@v2 with: java-version: ${{ steps.download-jdk.outputs.version }} distribution: jdkfile jdkFile: "${{ steps.download-jdk.outputs.file }}" - name: Set Maven Wrapper run: mvn -N io.takari:maven:0.7.7:wrapper -Dmaven=3.6.3 - name: 'JDK Version' run: java --version - name: Unit-Test run: ./mvnw verify -pl '!p2-repository,!org.eclipse.collections:org.eclipse.collections' --no-transfer-progress env: MAVEN_OPTS: "-Xmx2g" eclipse-collections-11.0.0.M3/.github/workflows/findbugs.yml000066400000000000000000000017731407344533200237450ustar00rootroot00000000000000# This workflow will build a Java project with Maven # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven name: Findbugs on: [push, pull_request] jobs: applications: name: Findbugs ${{ matrix.java-version }} strategy: matrix: os: [ubuntu-latest] java-version: [8] runs-on: ${{ matrix.os }} steps: - name: Git Checkout uses: actions/checkout@v2 - name: Set Maven Wrapper run: mvn -N io.takari:maven:0.7.7:wrapper -Dmaven=3.6.3 - name: Set JDK ${{ matrix.java-version }} uses: actions/setup-java@v2 with: distribution: 'zulu' java-version: ${{ matrix.java-version }} - name: Findbugs run: ./mvnw install findbugs:check --projects '!scala-unit-tests,!jmh-scala-tests,!jmh-tests,!jcstress-tests,!p2-repository' --activate-profiles all -DskipTests=true --no-transfer-progress env: MAVEN_OPTS: "-Xmx1g" eclipse-collections-11.0.0.M3/.github/workflows/javadoc.yml000066400000000000000000000021451407344533200235450ustar00rootroot00000000000000# This workflow will build a Java project with Maven # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven name: JavaDoc on: [push, pull_request] jobs: applications: name: Javadoc ${{ matrix.java-version }} strategy: matrix: os: [ubuntu-latest] java-version: [16] runs-on: ${{ matrix.os }} steps: - name: Git Checkout uses: actions/checkout@v2 - name: Set Maven Wrapper run: mvn -N io.takari:maven:0.7.7:wrapper -Dmaven=3.6.3 - name: Set JDK ${{ matrix.java-version }} uses: actions/setup-java@v2 with: distribution: 'zulu' java-version: ${{ matrix.java-version }} - name: JavaDoc run: ./mvnw -Dsurefire.useFile=false -DskipTests -Denforcer.skip=true clean install javadoc:aggregate -pl '!unit-tests,!serialization-tests,!jcstress-tests,!junit-trait-runner,!unit-tests-java8,!test-coverage,!p2-repository,!org.eclipse.collections:org.eclipse.collections' --no-transfer-progress env: MAVEN_OPTS: "-Xmx1g" eclipse-collections-11.0.0.M3/.github/workflows/mutation.yml000066400000000000000000000027371407344533200240050ustar00rootroot00000000000000# This workflow will build a Java project with Maven # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven name: Mutation tests on: schedule: - cron: '0 13 * * 5' jobs: applications: name: Mutation Test ${{ matrix.java-version }} if: github.repository == 'eclipse/eclipse-collections' strategy: matrix: os: [ubuntu-latest] java-version: [8] runs-on: ${{ matrix.os }} env: JAVA_VERSION: ${{ matrix.java-version }} steps: - name: Git Checkout uses: actions/checkout@v2 - name: Set JDK ${{ matrix.java-version }} uses: actions/setup-java@v2 with: distribution: 'zulu' java-version: ${{ matrix.java-version }} - name: Enable Maven Cache uses: actions/cache@v2.1.5 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | ${{ runner.os }}-maven- - name: Maven Install run: mvn clean install -DskipTests=true env: MAVEN_OPTS: "-Xmx1g" - name: Mutation Test run: mvn eu.stamp-project:pitmp-maven-plugin:run -DwithHistory -DtimeoutConstant=8000 env: MAVEN_OPTS: "-Xmx1g" - name: Archive pitest reports uses: actions/upload-artifact@v2.2.3 with: name: pit-reports path: unit-tests/target/pit-reports eclipse-collections-11.0.0.M3/.github/workflows/performance.yml000066400000000000000000000017261407344533200244430ustar00rootroot00000000000000# This workflow will build a Java project with Maven # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven name: Performance Tests on: [push, pull_request] jobs: applications: name: Performance Tests ${{ matrix.java-version }} strategy: matrix: os: [ubuntu-latest] java-version: [8] runs-on: ${{ matrix.os }} steps: - name: Git Checkout uses: actions/checkout@v2 - name: Set Maven Wrapper run: mvn -N io.takari:maven:0.7.7:wrapper -Dmaven=3.6.3 - name: Set JDK ${{ matrix.java-version }} uses: actions/setup-java@v2 with: distribution: 'zulu' java-version: ${{ matrix.java-version }} - name: Performance Tests run: ./mvnw install --projects performance-tests --also-make --activate-profiles all -DskipTests=true --no-transfer-progress env: MAVEN_OPTS: "-Xmx1g" eclipse-collections-11.0.0.M3/.github/workflows/unit-no-p2.yml000066400000000000000000000017661407344533200240560ustar00rootroot00000000000000# This workflow will build a Java project with Maven # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven name: Unit Tests No P2 on: [push, pull_request] jobs: applications: name: Unit Test ${{ matrix.java-version }} strategy: matrix: os: [ubuntu-latest] java-version: [15, 16] runs-on: ${{ matrix.os }} env: JAVA_VERSION: ${{ matrix.java-version }} steps: - name: Git Checkout uses: actions/checkout@v2 - name: Set Maven Wrapper run: mvn -N io.takari:maven:0.7.7:wrapper -Dmaven=3.6.3 - name: Set JDK ${{ matrix.java-version }} uses: actions/setup-java@v2 with: distribution: 'zulu' java-version: ${{ matrix.java-version }} - name: Unit-Test run: ./mvnw verify -pl '!p2-repository,!org.eclipse.collections:org.eclipse.collections' --no-transfer-progress env: MAVEN_OPTS: "-Xmx1g" eclipse-collections-11.0.0.M3/.github/workflows/unit.yml000066400000000000000000000016551407344533200231220ustar00rootroot00000000000000# This workflow will build a Java project with Maven # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven name: Unit tests on: [push, pull_request] jobs: applications: name: Unit Test ${{ matrix.java-version }} strategy: matrix: os: [ubuntu-latest] java-version: [8, 11, 14] runs-on: ${{ matrix.os }} env: JAVA_VERSION: ${{ matrix.java-version }} steps: - name: Git Checkout uses: actions/checkout@v2 - name: Set Maven Wrapper run: mvn -N io.takari:maven:0.7.7:wrapper -Dmaven=3.6.3 - name: Set JDK ${{ matrix.java-version }} uses: actions/setup-java@v2 with: distribution: 'zulu' java-version: ${{ matrix.java-version }} - name: Unit-Test run: ./mvnw verify --no-transfer-progress env: MAVEN_OPTS: "-Xmx1g" eclipse-collections-11.0.0.M3/.gitignore000066400000000000000000000030341407344533200200040ustar00rootroot00000000000000# maven target/ .maven/ .m2/ dependency-reduced-pom.xml pom.xml.versionsBackup .mvn/wrapper/ mvnw mvnw.cmd jmh-scala-tests/.cache-main scala-unit-tests/.cache-tests test-coverage/** # https://raw.githubusercontent.com/github/gitignore/master/Global/JetBrains.gitignore # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 # User-specific stuff .idea/**/workspace.xml .idea/**/tasks.xml .idea/**/usage.statistics.xml .idea/**/shelf # Sensitive or high-churn files .idea/**/dataSources/ .idea/**/dataSources.ids .idea/**/dataSources.local.xml .idea/**/sqlDataSources.xml .idea/**/dynamic.xml .idea/**/uiDesigner.xml .idea/**/dbnavigator.xml # Gradle .idea/**/gradle.xml .idea/**/libraries # Gradle and Maven with auto-import # When using Gradle or Maven with auto-import, you should exclude module files, # since they will be recreated, and may cause churn. Uncomment if using # auto-import. .idea/scala_compiler.xml # CMake cmake-build-*/ # Mongo Explorer plugin .idea/**/mongoSettings.xml # File-based project format *.iws # IntelliJ out/ # mpeltonen/sbt-idea plugin .idea_modules/ # JIRA plugin atlassian-ide-plugin.xml # Cursive Clojure plugin .idea/replstate.xml # Crashlytics plugin (for Android Studio and IntelliJ) com_crashlytics_export_strings.xml crashlytics.properties crashlytics-build.properties fabric.properties # Editor-based Rest Client .idea/httpRequests # Eclipe .project .settings/ .classpath eclipse-collections-11.0.0.M3/.idea/000077500000000000000000000000001407344533200167745ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/.idea/.gitignore000066400000000000000000000000161407344533200207610ustar00rootroot00000000000000workspace.xml eclipse-collections-11.0.0.M3/.idea/codeStyleSettings.xml000066400000000000000000000220721407344533200231750ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/codeStyles/000077500000000000000000000000001407344533200211125ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/.idea/codeStyles/Project.xml000066400000000000000000000226711407344533200232520ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/codeStyles/codeStyleConfig.xml000066400000000000000000000002161407344533200247140ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/compiler.xml000066400000000000000000000064201407344533200213320ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/copyright/000077500000000000000000000000001407344533200210045ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/.idea/copyright/Eclipse.xml000066400000000000000000000013001407344533200231040ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/copyright/profiles_settings.xml000066400000000000000000000011351407344533200252710ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/eclipse-collections-parent.iml000066400000000000000000000010761407344533200247320ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/encodings.xml000066400000000000000000000032201407344533200214640ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/inspectionProfiles/000077500000000000000000000000001407344533200226535ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/.idea/inspectionProfiles/1_Severe.xml000066400000000000000000006121011407344533200250470ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/inspectionProfiles/2_Inconsistent_Constructs.xml000066400000000000000000006120471407344533200305370ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/inspectionProfiles/3_Consistent_Style.xml000066400000000000000000006514061407344533200271440ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/inspectionProfiles/4_No_Auto_fix.xml000066400000000000000000006272531407344533200260510ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/inspectionProfiles/IDE.xml000066400000000000000000004734141407344533200240130ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/inspectionProfiles/profiles_settings.xml000066400000000000000000000023431407344533200271420ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/libraries/000077500000000000000000000000001407344533200207505ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/.idea/libraries/Maven__com_google_code_findbugs_jsr305_3_0_2.xml000066400000000000000000000010251407344533200317320ustar00rootroot00000000000000 Maven__com_google_errorprone_error_prone_annotations_2_1_3.xml000066400000000000000000000012001407344533200351740ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/.idea/libraries eclipse-collections-11.0.0.M3/.idea/libraries/Maven__com_google_j2objc_j2objc_annotations_1_1.xml000066400000000000000000000010771407344533200326350ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/libraries/Maven__org_checkerframework_checker_qual_2_0_0.xml000066400000000000000000000010571407344533200325400ustar00rootroot00000000000000 Maven__org_codehaus_mojo_animal_sniffer_annotations_1_14.xml000066400000000000000000000011761407344533200345710ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/.idea/libraries eclipse-collections-11.0.0.M3/.idea/mavenProjectSettings.xml000066400000000000000000000004551407344533200237000ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/misc.xml000066400000000000000000000050461407344533200204560ustar00rootroot00000000000000 http://www.w3.org/1999/xhtml eclipse-collections-11.0.0.M3/.idea/modules.xml000066400000000000000000000065731407344533200212010ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/projectCodeStyle.xml000066400000000000000000000132771407344533200230120ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/runConfigurations/000077500000000000000000000000001407344533200225135ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/.idea/runConfigurations/All_Unit_Tests.xml000066400000000000000000000035511407344533200261320ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/runConfigurations/JMH.xml000066400000000000000000000020301407344533200236460ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/runConfigurations/JMHTestRunner_runTests.xml000066400000000000000000000025221407344533200276150ustar00rootroot00000000000000 JMHTestRunner_runTests___XX__UnlockDiagnosticVMOptions__XX__PrintCompilation_.xml000066400000000000000000000026761407344533200424120ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/.idea/runConfigurations eclipse-collections-11.0.0.M3/.idea/runConfigurations/JMHTestRunner_runTests___verbose_class_.xml000066400000000000000000000025621407344533200331700ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/runConfigurations/clean_install_checkstyle_check.xml000066400000000000000000000020221407344533200314140ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/runConfigurations/dependency_go_offline.xml000066400000000000000000000016761407344533200275540ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/runConfigurations/versions_display_dependency_updates.xml000066400000000000000000000021361407344533200325570ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/scala_compiler.xml000066400000000000000000000003201407344533200224660ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/scopes/000077500000000000000000000000001407344533200202705ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/.idea/scopes/No_package_info_java.xml000066400000000000000000000002331407344533200250530ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/scopes/api.xml000066400000000000000000000001771407344533200215700ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/scopes/impl.xml000066400000000000000000000002011407344533200217440ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/scopes/scope_settings.xml000066400000000000000000000003151407344533200240420ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.idea/vcs.xml000066400000000000000000000002641407344533200203130ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/.mvn/000077500000000000000000000000001407344533200166725ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/.mvn/jvm.config000066400000000000000000000001401407344533200206500ustar00rootroot00000000000000-Dorg.slf4j.simpleLogger.showDateTime=true -Dorg.slf4j.simpleLogger.dateTimeFormat=HH:mm:ss:SSS eclipse-collections-11.0.0.M3/.mvn/maven.config000066400000000000000000000000301407344533200211600ustar00rootroot00000000000000--show-version --errors eclipse-collections-11.0.0.M3/CONTRIBUTING.md000066400000000000000000000127121407344533200202500ustar00rootroot00000000000000Contributor License ------------------- If this is your first time contributing to an Eclipse Foundation project, you'll need to sign the [Eclipse Contributor Agreement][ECA]. - [Create an account](https://dev.eclipse.org/site_login/createaccount.php) on dev.eclipse.org - Open your [Account Settings tab](https://dev.eclipse.org/site_login/myaccount.php#open_tab_accountsettings), enter your GitHub ID and click Update Account - Read and [sign the ECA](https://dev.eclipse.org/site_login/myaccount.php#open_tab_cla) - Your git commits must be [signed off](https://wiki.eclipse.org/Development_Resources/Contributing_via_Git#Signing_off_on_a_commit) - Use the exact same email address for your Eclipse account, your commit author, and your commit sign-off. Issues ------ Search the [issue tracker](https://github.com/eclipse/eclipse-collections/issues) for a relevant issue or create a new one. Making changes -------------- Fork the repository in GitHub and make changes in your fork. Please add a description of your changes to the [draft release notes](RELEASE_NOTE_DRAFT.md). Finally, submit a pull request. Details on [working with GitHub for Eclipse Collections](https://github.com/eclipse/eclipse-collections/wiki/Working-with-GitHub) is located at the Wiki. Contact us ---------- [Join the mailing list][mailing-list] and email the community at collections-dev@eclipse.org to discuss your ideas and get help. Build ----- The Eclipse Collections build requires below as dependencies. - Java 1.8 - Maven 3.1.0+ The Eclipse Collections build performs code generation to create primitive collections. Run the full build once before opening your IDE. ```bash $ mvn install -DskipTests=true ``` Now you can open the project in your IDE and it won't complain about missing files. You'll be able to use the IDE to perform incremental builds and run tests. You should rarely need to run the maven build, except when: - you want to force a clean build - you work on [JMH][jmh] tests - your changes affect code generation - you want to see if your changes will pass [the same builds that GitHub Actions runs][github] Semantic Versioning ------------------- Eclipse Collections version numbers follow [Semantic Versioning][semver]. This means we increment the major version when we make incompatible API changes. This includes any changes which - break binary compatibility - break source compatibility - break serialization compatibility Normally, collections will have the same serialized form across major releases, indefinitely. But if we have to break serialization for some reason, it will be in a major release. Eclipse Collections includes a suite of serialization tests to prevent accidental changes. While preparing a minor release, the master branch won't contain any compatibility breaking changes. Feel free to work on major, compatibility-breaking changes whenever you'd like. However, if you submit a pull request to master while we're preparing a minor release, you'll have to be patient and you'll need to rebase your changes once the release is complete. Coding Style ------------ Eclipse Collections follows a coding style that is similar to [Google's Style Guide for Java][style-guide], but with curly braces on their own lines. Many aspects of the style guide are enforced by CheckStyle, but not all, so please take care. ```bash $ mvn clean install checkstyle:check findbugs:check --projects "!scala-unit-tests,!jmh-scala-tests,!jmh-tests" -DskipTests=true ``` Avoid changing whitespace on lines that are unrelated to your pull request. This helps preserve the accuracy of the git blame view, and makes code reviews easier. Commit messages --------------- - [Use the imperative mood][imperative-mood] as in "Fix bug" or "Add feature" rather than "Fixed bug" or "Added feature" - [Mention the GitHub issue][github-issue] when relevant - It's a good idea to follow the [advice in Pro Git](https://git-scm.com/book/ch5-2.html) - Sign-off your commits using `git commit --signoff` or `git commit -s` for short Pull requests ------------- Excessive branching and merging can make git history confusing. With that in mind - Squash your commits down to a few commits, or one commit, before submitting a pull request - [Rebase your pull request changes on top of the current master][rebase]. Pull requests shouldn't include merge commits. Submit your pull request when ready. Three checks will be kicked off automatically. - IP Validation: Checks that all committers signed the Eclipse CLA and signed their commits. - Continuous integration: [GitHub Actions][github] that run JUnit tests, CheckStyle, and FindBugs. - The standard GitHub check that the pull request has no conflicts with the base branch. Make sure all the checks pass. One of the committers will take a look and provide feedback or merge your contribution. That's it! Thanks for contributing to Eclipse Collections! [ECA]: https://www.eclipse.org/legal/ECA.php [jmh]: http://openjdk.java.net/projects/code-tools/jmh/ [semver]: http://semver.org/ [style-guide]: https://google.github.io/styleguide/javaguide.html [rebase]: https://github.com/edx/edx-platform/wiki/How-to-Rebase-a-Pull-Request [github]: https://github.com/eclipse/eclipse-collections/actions [imperative-mood]: https://github.com/git/git/blob/master/Documentation/SubmittingPatches [github-issue]: https://help.github.com/articles/closing-issues-via-commit-messages/ [mailing-list]: https://dev.eclipse.org/mailman/listinfo/collections-dev eclipse-collections-11.0.0.M3/LICENSE-EDL-1.0.txt000066400000000000000000000030311407344533200205320ustar00rootroot00000000000000Eclipse Distribution License - v 1.0 Copyright (c) 2007, Eclipse Foundation, Inc. and its licensors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of the Eclipse Foundation, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. eclipse-collections-11.0.0.M3/LICENSE-EPL-1.0.txt000066400000000000000000000257401407344533200205610ustar00rootroot00000000000000Eclipse Public License - v 1.0 THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. 1. DEFINITIONS "Contribution" means: a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and b) in the case of each subsequent Contributor: i) changes to the Program, and ii) additions to the Program; where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. "Contributor" means any person or entity that distributes the Program. "Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. "Program" means the Contributions distributed in accordance with this Agreement. "Recipient" means anyone who receives the Program under this Agreement, including all Contributors. 2. GRANT OF RIGHTS a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form. b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. 3. REQUIREMENTS A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: a) it complies with the terms and conditions of this Agreement; and b) its license agreement: i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. When the Program is made available in source code form: a) it must be made available under this Agreement; and b) a copy of this Agreement must be included with each copy of the Program. Contributors may not remove or alter any copyright notices contained within the Program. Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. 4. COMMERCIAL DISTRIBUTION Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. 5. NO WARRANTY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. 6. DISCLAIMER OF LIABILITY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. GENERAL If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. eclipse-collections-11.0.0.M3/README.md000066400000000000000000000255651407344533200173100ustar00rootroot00000000000000 [![][maven img]][maven] [![][release img]][release] [![][javadoc api img]][javadoc api] [![][javadoc impl img]][javadoc impl] [![][license-epl img]][license-epl] [![][license-edl img]][license-edl] [![][snyk-badge img]][snyk-badge] [![][actions unit-tests img]][actions unit-tests] [![][actions acceptance-tests img]][actions acceptance-tests] [![][actions performance-tests img]][actions performance-tests] [![][actions checkstyle img]][actions checkstyle] [![][actions findbugs img]][actions findbugs] [![][actions javadoc img]][actions javadoc] #### [English](https://www.eclipse.org/collections/) | [中文](https://www.eclipse.org/collections/cn/index.html) | [Deutsch](https://www.eclipse.org/collections/de/index.html) | [Español](https://www.eclipse.org/collections/es/index.html) | [Ελληνικά](https://www.eclipse.org/collections/el/index.html) | [Français](https://www.eclipse.org/collections/fr/index.html) | [日本語](https://www.eclipse.org/collections/ja/index.html) | [Norsk (bokmÃ¥l)](https://www.eclipse.org/collections/no-nb/index.html) | [Português-Brasil](https://www.eclipse.org/collections/pt-br/index.html) | [РуÑÑкий](https://www.eclipse.org/collections/ru/index.html) | [हिंदी](https://www.eclipse.org/collections/hi/index.html) Eclipse Collections is a comprehensive collections library for Java. The library enables productivity and performance by delivering an expressive and efficient set of APIs and types. The iteration protocol was inspired by the Smalltalk collection framework, and the collections are compatible with the Java Collection Framework types. Eclipse Collections is compatible with Java 8+. Eclipse Collections is a part of the OpenJDK [Quality Outreach](https://wiki.openjdk.java.net/display/quality/Quality+Outreach) program, and it is validated for different versions of the OpenJDK. ## Why Eclipse Collections? * Productivity * [Rich][RichIterable], functional, and fluent APIs with great symmetry * [`List`][ListIterable], [`Set`][SetIterable], [`Bag`][Bag], [`Stack`][StackIterable], [`Map`][MapIterable], [`Multimap`][Multimap], [`BiMap`][BiMap], [`Interval`][Interval] Types * [Readable][RichIterable], [`Mutable`][MutableCollection], and [`Immutable`][ImmutableCollection] Types * Mutable and Immutable Collection [Factories][Factories] * [Adapters][Adapters] and [Utility][Utilities] classes for JCF Types * Performance * Memory Efficient Containers * Optimized Eager, [`Lazy`][LazyIterable] and [`Parallel`][ParallelIterable] APIs * [Primitive][PrimitiveIterable] Collections for all primitive types ## Learn Eclipse Collections * [Some Quick Code Examples](./README_EXAMPLES.md) * [Eclipse Collections Katas](https://github.com/eclipse/eclipse-collections-kata), a fun way to help you learn idiomatic Eclipse Collections usage. * Start Here - [Pet Kata](http://eclipse.github.io/eclipse-collections-kata/pet-kata/#/) * Continue Here - [Company Kata](http://eclipse.github.io/eclipse-collections-kata/company-kata/#/) * [Eclipse Collections Reference Guide](https://github.com/eclipse/eclipse-collections/blob/master/docs/guide.md) and [Javadoc](https://www.eclipse.org/collections/javadoc/10.4.0/overview-summary.html) * [Serializing Eclipse Collections with Jackson](./docs/jackson.md) * [Articles](https://github.com/eclipse/eclipse-collections/wiki/Articles) and [Blogs](https://medium.com/tag/eclipse-collections/latest) ## Eclipse Collections and JDK Compatibility Matrix |EC | 7.x.x | 8.x.x | 9.x.x |[10.0.0][10-0-Release] |[10.1.0][10-1-Release] |[10.2.0][10-2-Release] |[10.3.0][10-3-Release] |[10.4.0][10-4-Release] | |-------|-------|-------|-------|-------|-------|-------|-------|-------| |JDK 5 - 7 |✓| | | | | | | | |JDK 8 |✓|✓|✓|✓|✓|✓|✓|✓| |JDK 9 - 14 | | |✓|✓|✓|✓|✓|✓| |JDK 15 - 16| | | | | | | |✓| ## Acquiring Eclipse Collections ### Maven ```xml org.eclipse.collections eclipse-collections-api 10.4.0 org.eclipse.collections eclipse-collections 10.4.0 ``` ### Gradle ```groovy implementation 'org.eclipse.collections:eclipse-collections-api:10.4.0' implementation 'org.eclipse.collections:eclipse-collections:10.4.0' ``` ### OSGi Bundle Eclipse software repository location: http://download.eclipse.org/collections/10.4.0/repository ## How to Contribute We welcome contributions! We accept contributions via pull requests here in GitHub. Please see [How To Contribute](CONTRIBUTING.md) to get started. ## Additional information * Project Website: http://www.eclipse.org/collections * Eclipse PMI: https://projects.eclipse.org/projects/technology.collections * StackOverflow: http://stackoverflow.com/questions/tagged/eclipse-collections * Mailing lists: https://dev.eclipse.org/mailman/listinfo/collections-dev * Forum: https://www.eclipse.org/forums/index.php?t=thread&frm_id=329 * Working with GitHub: https://github.com/eclipse/eclipse-collections/wiki/Working-with-GitHub [actions acceptance-tests]:https://github.com/eclipse/eclipse-collections/actions?query=workflow%3A%22Acceptance+Tests%22 [actions acceptance-tests img]:https://github.com/eclipse/eclipse-collections/workflows/Acceptance%20Tests/badge.svg?branch=master [actions unit-tests]:https://github.com/eclipse/eclipse-collections/actions?query=workflow%3A%22Unit+tests%22 [actions unit-tests img]:https://github.com/eclipse/eclipse-collections/workflows/Unit%20tests/badge.svg?branch=master [actions performance-tests]:https://github.com/eclipse/eclipse-collections/actions?query=workflow%3A%22Performance+Tests%22 [actions performance-tests img]:https://github.com/eclipse/eclipse-collections/workflows/Performance%20Tests/badge.svg?branch=master [actions checkstyle]:https://github.com/eclipse/eclipse-collections/actions?query=workflow%3A%22Checkstyle%22 [actions checkstyle img]:https://github.com/eclipse/eclipse-collections/workflows/Checkstyle/badge.svg?branch=master [actions findbugs]:https://github.com/eclipse/eclipse-collections/actions?query=workflow%3A%22Findbugs%22 [actions findbugs img]:https://github.com/eclipse/eclipse-collections/workflows/Findbugs/badge.svg?branch=master [actions javadoc]:https://github.com/eclipse/eclipse-collections/actions?query=workflow%3A%22JavaDoc%22 [actions javadoc img]:https://github.com/eclipse/eclipse-collections/workflows/JavaDoc/badge.svg?branch=master [maven]:http://search.maven.org/#search|gav|1|g:"org.eclipse.collections"%20AND%20a:"eclipse-collections" [maven img]:https://maven-badges.herokuapp.com/maven-central/org.eclipse.collections/eclipse-collections/badge.svg [release]:https://github.com/eclipse/eclipse-collections/releases [release img]:https://img.shields.io/github/release/eclipse/eclipse-collections.svg [javadoc api]:https://javadoc.io/doc/org.eclipse.collections/eclipse-collections-api [javadoc api img]:https://javadoc.io/badge2/org.eclipse.collections/eclipse-collections-api/javadoc_eclipse_collections_api.svg [javadoc impl]:https://javadoc.io/doc/org.eclipse.collections/eclipse-collections [javadoc impl img]:https://javadoc.io/badge2/org.eclipse.collections/eclipse-collections/javadoc_eclipse_collections.svg [license-epl]:LICENSE-EPL-1.0.txt [license-epl img]:https://img.shields.io/badge/License-EPL-blue.svg [license-edl]:LICENSE-EDL-1.0.txt [license-edl img]:https://img.shields.io/badge/License-EDL-blue.svg [snyk-badge]:https://snyk.io/vuln/maven:org.eclipse.collections:eclipse-collections@10.4.0?utm_medium=referral&utm_source=badge&utm_campaign=snyk-widget [snyk-badge img]:https://snyk-widget.herokuapp.com/badge/mvn/org.eclipse.collections/eclipse-collections/10.4.0/badge.svg [RichIterable]: https://www.eclipse.org/collections/javadoc/10.4.0/org/eclipse/collections/api/RichIterable.html [ListIterable]: https://www.eclipse.org/collections/javadoc/10.4.0/org/eclipse/collections/api/list/ListIterable.html [SetIterable]: https://www.eclipse.org/collections/javadoc/10.4.0/org/eclipse/collections/api/set/SetIterable.html [Bag]: https://www.eclipse.org/collections/javadoc/10.4.0/org/eclipse/collections/api/bag/Bag.html [StackIterable]: https://www.eclipse.org/collections/javadoc/10.4.0/org/eclipse/collections/api/stack/StackIterable.html [MapIterable]: https://www.eclipse.org/collections/javadoc/10.4.0/org/eclipse/collections/api/map/MapIterable.html [Multimap]: https://www.eclipse.org/collections/javadoc/10.4.0/org/eclipse/collections/api/multimap/Multimap.html [BiMap]: https://www.eclipse.org/collections/javadoc/10.4.0/org/eclipse/collections/api/bimap/BiMap.html [Interval]: https://www.eclipse.org/collections/javadoc/10.4.0/org/eclipse/collections/impl/list/Interval.html [MutableCollection]: https://www.eclipse.org/collections/javadoc/10.4.0/org/eclipse/collections/api/collection/MutableCollection.html [ImmutableCollection]: https://www.eclipse.org/collections/javadoc/10.4.0/org/eclipse/collections/api/collection/ImmutableCollection.html [LazyIterable]: https://www.eclipse.org/collections/javadoc/10.4.0/org/eclipse/collections/api/LazyIterable.html [ParallelIterable]: https://www.eclipse.org/collections/javadoc/10.4.0/org/eclipse/collections/api/ParallelIterable.html [PrimitiveIterable]: https://www.eclipse.org/collections/javadoc/10.4.0/org/eclipse/collections/api/PrimitiveIterable.html [Utilities]: https://www.eclipse.org/collections/javadoc/10.4.0/org/eclipse/collections/impl/utility/package-summary.html [Adapters]: https://www.eclipse.org/collections/javadoc/10.4.0/org/eclipse/collections/impl/collection/mutable/AbstractCollectionAdapter.html [Factories]: https://www.eclipse.org/collections/javadoc/10.4.0/org/eclipse/collections/impl/factory/package-summary.html [10-0-Release]: https://github.com/eclipse/eclipse-collections/releases/tag/10.0.0 [10-1-Release]: https://github.com/eclipse/eclipse-collections/releases/tag/10.1.0 [10-2-Release]: https://github.com/eclipse/eclipse-collections/releases/tag/10.2.0 [10-3-Release]: https://github.com/eclipse/eclipse-collections/releases/tag/10.3.0 [10-4-Release]: https://github.com/eclipse/eclipse-collections/releases/tag/10.4.0 eclipse-collections-11.0.0.M3/README_EXAMPLES.md000066400000000000000000000131271407344533200205750ustar00rootroot00000000000000 ## Some Quick Code Examples Eclipse Collections puts iteration methods directly on the container types. Here's several code examples that demonstrate the simple and flexible style of programming with Eclipse Collections. First, we will define a simple class named `Person` with a first and last name, getters and a constructor. ```java public class Person { private final String firstName, lastName; ... public boolean lastNameEquals(String name) { return name.equals(this.lastName); } } ``` #### Example 1: `Collect` (aka `map`, `transform`) First we will create a `MutableList` with three instances of the `Person` class. ```java MutableList people = Lists.mutable.with( new Person("Sally", "Smith"), new Person("Ted", "Watson"), new Person("Mary", "Williams")); ``` Then we will `collect` their last names into a new `MutableList`, and finally output the names to a comma delimited String using `makeString`. ```java MutableList lastNames = people.collect(person -> person.getLastName()); Assert.assertEquals("Smith, Watson, Williams", lastNames.makeString()); ``` The lambda in the example above can also be replaced with a method reference. ```java MutableList lastNames = people.collect(Person::getLastName); ``` Eclipse Collections has support for both [Mutable][MutableCollection] and [Immutable][ImmutableCollection] collections, and the return types of methods are covariant. Here we use the same [Lists][Lists] factory to create an `ImmutableList`. ```java ImmutableList people = Lists.immutable.with( new Person("Sally", "Smith"), new Person("Ted", "Watson"), new Person("Mary", "Williams")); ``` While the `collect` method on a `MutableList` returned a `MutableList`, the `collect` method on an `ImmutableList` will return an `ImmutableList`. ```java ImmutableList lastNames = people.collect(Person::getLastName); Assert.assertEquals("Smith, Watson, Williams", lastNames.makeString()); ``` Eclipse Collections has a [lazy API][LazyIterable] as well, which is available by calling the method `asLazy`. The method `collect` will now return a [`LazyIterable`][LazyIterable]. The `LazyIterable` that is returned does not evaluate anything until the call to a terminal method is made. In this case, the call to `makeString` will force the `LazyIterable` to collect the last names. ```java LazyIterable lastNames = people.asLazy().collect(Person::getLastName); Assert.assertEquals("Smith, Watson, Williams", lastNames.makeString()); ``` #### Example 2: `Select` / `Reject` (aka `filter` / `!filter`) We can find all of the people with the last name "Smith" using the method named `select`. ```java MutableList people = Lists.mutable.with( new Person("Sally", "Smith"), new Person("Ted", "Watson"), new Person("Mary", "Williams")); MutableList smiths = people.select(person -> person.lastNameEquals("Smith")); Assert.assertEquals("Smith", smiths.collect(Person::getLastName).makeString()); ``` If we want to use a method reference, we can use the method `selectWith`. ```java MutableList smiths = people.selectWith(Person::lastNameEquals, "Smith"); Assert.assertEquals("Smith", smiths.collect(Person::getLastName).makeString()); ``` We can find all the people who do not have a last name of "Smith" using the method named `reject`. ```java MutableList notSmiths = people.reject(person -> person.lastNameEquals("Smith")); Assert.assertEquals("Watson, Williams", notSmiths.collect(Person::getLastName).makeString()); ``` If we want to use a method reference, we can use the method `rejectWith`. ```java MutableList notSmiths = people.rejectWith(Person::lastNameEquals, "Smith"); Assert.assertEquals("Watson, Williams", notSmiths.collect(Person::getLastName).makeString()); ``` #### Example 3: `Any` / `All` / `None` We can test whether any, all or none of the elements of a collection satisfy a given condition. ```java // Any Assert.assertTrue(people.anySatisfy(person -> person.lastNameEquals("Smith")); Assert.assertTrue(people.anySatisfyWith(Person::lastNameEquals, "Smith")); // All Assert.assertFalse(people.allSatisfy(person -> person.lastNameEquals("Smith")); Assert.assertFalse(people.allSatisfyWith(Person::lastNameEquals, "Smith")); // None Assert.assertFalse(people.noneSatisfy(person -> person.lastNameEquals("Smith")); Assert.assertFalse(people.noneSatisfyWith(Person::lastNameEquals, "Smith")); ``` ## [Back to README](./README.md) [MutableCollection]: https://www.eclipse.org/collections/javadoc/10.4.0/org/eclipse/collections/api/collection/MutableCollection.html [ImmutableCollection]: https://www.eclipse.org/collections/javadoc/10.4.0/org/eclipse/collections/api/collection/ImmutableCollection.html [LazyIterable]: https://www.eclipse.org/collections/javadoc/10.4.0/org/eclipse/collections/api/LazyIterable.html [Lists]: https://www.eclipse.org/collections/javadoc/10.4.0/org/eclipse/collections/api/factory/Lists.html eclipse-collections-11.0.0.M3/RELEASE_NOTE_DRAFT.md000066400000000000000000000042001407344533200211570ustar00rootroot0000000000000011.0.0 ==================== This is the 11.0.0 major release. The Eclipse Collections team gives a huge thank you to everyone who participated in this release. # New Functionality ----------------- * # Tech Debt Reduction --------------------- * # OSGi Integration Improvements ------------------------------- * # Build Changes ----------------- * # Note ------- _We have taken all the measures to ensure all features are captured in the release notes. However, release notes compilation is manual, so it is possible that a commit might be missed. For a comprehensive list of commits please go through the commit log._ Acquiring Eclipse Collections ----------------------------- ### Maven ```xml org.eclipse.collections eclipse-collections-api 11.0.0 org.eclipse.collections eclipse-collections 11.0.0 org.eclipse.collections eclipse-collections-testutils 11.0.0 test org.eclipse.collections eclipse-collections-forkjoin 11.0.0 ``` ### Gradle ```groovy implementation 'org.eclipse.collections:eclipse-collections-api:11.0.0' implementation 'org.eclipse.collections:eclipse-collections:11.0.0' testImplementation 'org.eclipse.collections:eclipse-collections-testutils:11.0.0' implementation 'org.eclipse.collections:eclipse-collections-forkjoin:11.0.0' ``` ### Ivy ```xml ``` ### OSGi Bundle Eclipse software repository location: http://download.eclipse.org/collections/11.0.0/repository eclipse-collections-11.0.0.M3/about.html000066400000000000000000000042061407344533200200160ustar00rootroot00000000000000 About Eclipse Collections 7.0

Eclipse Collections 7.0

Eclipse Collections initial release

Dec 24 2015

About

Eclipse Collections is a collections framework for Java. It has JDK-compatible List, Set and Map implementations with a rich API, additional types not found in the JDK like Bags, Multimaps and set of utility classes that work with any JDK compatible Collections, Arrays, Maps or Strings. The iteration protocol was inspired by the Smalltalk collection framework.

License

The Eclipse Foundation makes available all content in this module ("Content"). Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the Eclipse Public License Version 1.0 ("EPL") and Eclipse Distribution License Version 1.0 (“EDLâ€). A copy of the EPL is available at http://www.eclipse.org/legal/epl-v10.html and a copy of the EDL is available at http://www.eclipse.org/org/documents/edl-v10.php. For purposes of the EPL, "Program" will mean the Content.

If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party ("Redistributor") and different terms and conditions may apply to your use of any object code in the Content. Check the Redistributor’s license that was provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise indicated below, the terms and conditions of the EPL and EDL still apply to any source code in the Content and such source code may be obtained at http://www.eclipse.org.

eclipse-collections-11.0.0.M3/acceptance-tests/000077500000000000000000000000001407344533200212425ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/acceptance-tests.iml000066400000000000000000000026051407344533200251760ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/acceptance-tests/pom.xml000066400000000000000000000110011407344533200225500ustar00rootroot00000000000000 eclipse-collections-parent org.eclipse.collections 11.0.0.M3 4.0.0 acceptance-tests Eclipse Collections Acceptance Test Suite true true org.eclipse.collections eclipse-collections-api ${project.version} test org.eclipse.collections eclipse-collections ${project.version} test org.eclipse.collections eclipse-collections-testutils ${project.version} test org.eclipse.collections eclipse-collections-forkjoin ${project.version} test junit junit test org.slf4j slf4j-api test org.slf4j slf4j-simple test maven-surefire-plugin maven-source-plugin org.codehaus.mojo sonar-maven-plugin maven-checkstyle-plugin org.codehaus.mojo findbugs-maven-plugin maven-enforcer-plugin maven-dependency-plugin 3.1.2 analyze analyze-only true com.google.code.findbugs:jsr305:jar org.slf4j:slf4j-simple:jar eclipse-collections-11.0.0.M3/acceptance-tests/src/000077500000000000000000000000001407344533200220315ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/000077500000000000000000000000001407344533200230105ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/000077500000000000000000000000001407344533200237315ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/000077500000000000000000000000001407344533200245205ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/000077500000000000000000000000001407344533200261445ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/000077500000000000000000000000001407344533200304625ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/api/000077500000000000000000000000001407344533200312335ustar00rootroot00000000000000IntIterableAcceptanceTest.java000066400000000000000000000041161407344533200370320ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/api/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api; import org.eclipse.collections.api.list.primitive.MutableIntList; import org.eclipse.collections.impl.factory.primitive.IntLists; import org.junit.Assert; import org.junit.Test; /** * JUnit test for {@link IntIterable}. */ public class IntIterableAcceptanceTest { @Test public void testContainsAllWithMillionElementIterables() { MutableIntList list1 = IntLists.mutable.withInitialCapacity(1_000_000); MutableIntList list2 = IntLists.mutable.withInitialCapacity(1_000_000); for (int i = 0; i < 1_000_000 - 1; i++) { list1.add(i); list2.add(i); } list1.add(1_000_000); Assert.assertTrue(list1.containsAll(list2)); } @Test public void testContainsAnyWithMillionElementIterable() { MutableIntList list = IntLists.mutable.withInitialCapacity(1_000_000); int[] source = new int[32]; for (int i = 0; i < 1_000_000; i++) { if (i < source.length) { source[i] = 1_000_030 - i; } list.add(i); } Assert.assertTrue(list.containsAny(source)); } @Test public void testContainsNoneWithMillionElementIterable() { MutableIntList list = IntLists.mutable.withInitialCapacity(1_000_000); int[] source = new int[32]; for (int i = 0; i < 1_000_000; i++) { if (i < source.length) { source[i] = 1_000_030 - i; } list.add(i); } Assert.assertFalse(list.containsNone(source)); } } eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/000077500000000000000000000000001407344533200314235ustar00rootroot00000000000000CollidingInt.java000066400000000000000000000031241407344533200345660ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.impl; import java.io.Serializable; public class CollidingInt implements Serializable, Comparable { private static final long serialVersionUID = 1L; private final int value; private final int shift; public CollidingInt(int value, int shift) { this.shift = shift; this.value = value; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || this.getClass() != o.getClass()) { return false; } CollidingInt that = (CollidingInt) o; return this.value == that.value && this.shift == that.shift; } @Override public int hashCode() { return this.value >> this.shift; } public int getValue() { return this.value; } @Override public int compareTo(CollidingInt o) { int result = Integer.valueOf(this.value).compareTo(o.value); if (result != 0) { return result; } return Integer.valueOf(this.shift).compareTo(o.shift); } } concurrent/000077500000000000000000000000001407344533200335265ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/implMultiReaderUnifiedSetAcceptanceTest.java000066400000000000000000000376001407344533200434030ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/concurrent/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.impl.concurrent; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.set.MutableSet; import org.eclipse.collections.impl.CollidingInt; import org.eclipse.collections.impl.block.factory.Procedures; import org.eclipse.collections.impl.factory.Lists; import org.eclipse.collections.impl.list.mutable.FastList; import org.eclipse.collections.impl.set.mutable.MultiReaderUnifiedSet; import org.eclipse.collections.impl.test.SerializeTestHelper; import org.eclipse.collections.impl.test.Verify; import org.junit.Assert; import org.junit.Test; public class MultiReaderUnifiedSetAcceptanceTest { @Test public void testUnifiedSet() { MultiReaderUnifiedSet set = MultiReaderUnifiedSet.newSet(); int size = 100000; for (int i = 0; i < size; i++) { Assert.assertTrue(set.add(i)); } Verify.assertSize(size, set); for (int i = 0; i < size; i++) { Verify.assertContains(i, set); } for (int i = 0; i < size; i += 2) { Assert.assertTrue(set.remove(i)); } Verify.assertSize(size / 2, set); for (int i = 1; i < size; i += 2) { Verify.assertContains(i, set); } } @Test public void testUnifiedSetClear() { assertUnifiedSetClear(0); assertUnifiedSetClear(1); assertUnifiedSetClear(2); assertUnifiedSetClear(3); } private static void assertUnifiedSetClear(int shift) { MultiReaderUnifiedSet set = MultiReaderUnifiedSet.newSet(); int size = 100000; for (int i = 0; i < size; i++) { Assert.assertTrue(set.add(new CollidingInt(i, shift))); } set.clear(); Verify.assertEmpty(set); for (int i = 0; i < size; i++) { Verify.assertNotContains(new CollidingInt(i, shift), set); } } @Test public void testUnifiedSetForEach() { assertUnifiedSetForEach(0); assertUnifiedSetForEach(1); assertUnifiedSetForEach(2); assertUnifiedSetForEach(3); } private static void assertUnifiedSetForEach(int shift) { MultiReaderUnifiedSet set = MultiReaderUnifiedSet.newSet(); int size = 100000; for (int i = 0; i < size; i++) { Assert.assertTrue(set.add(new CollidingInt(i, shift))); } MutableList keys = FastList.newList(size); set.forEach(Procedures.cast(keys::add)); Verify.assertSize(size, keys); Collections.sort(keys); for (int i = 0; i < size; i++) { Verify.assertItemAtIndex(new CollidingInt(i, shift), i, keys); } } @Test public void testUnifiedSetForEachWith() { assertUnifiedSetForEachWith(0); assertUnifiedSetForEachWith(1); assertUnifiedSetForEachWith(2); assertUnifiedSetForEachWith(3); } private static void assertUnifiedSetForEachWith(int shift) { MultiReaderUnifiedSet set = MultiReaderUnifiedSet.newSet(); int size = 100000; for (int i = 0; i < size; i++) { Assert.assertTrue(set.add(new CollidingInt(i, shift))); } MutableList keys = FastList.newList(size); set.forEachWith((key, s) -> { Assert.assertEquals("foo", s); keys.add(key); }, "foo"); Verify.assertSize(size, keys); Collections.sort(keys); for (int i = 0; i < size; i++) { Verify.assertItemAtIndex(new CollidingInt(i, shift), i, keys); } } @Test public void testUnifiedSetForEachWithIndex() { assertUnifiedSetForEachWithIndex(0); assertUnifiedSetForEachWithIndex(1); assertUnifiedSetForEachWithIndex(2); assertUnifiedSetForEachWithIndex(3); } private static void assertUnifiedSetForEachWithIndex(int shift) { MultiReaderUnifiedSet set = MultiReaderUnifiedSet.newSet(); int size = 100000; for (int i = 0; i < size; i++) { Assert.assertTrue(set.add(new CollidingInt(i, shift))); } MutableList keys = FastList.newList(size); int[] prevIndex = new int[1]; set.forEachWithIndex((key, index) -> { Assert.assertEquals(prevIndex[0], index); prevIndex[0]++; keys.add(key); }); Verify.assertSize(size, keys); Collections.sort(keys); for (int i = 0; i < size; i++) { Verify.assertItemAtIndex(new CollidingInt(i, shift), i, keys); } } @Test public void testUnifiedSetAddAll() { assertUnifiedSetAddAll(0); assertUnifiedSetAddAll(1); assertUnifiedSetAddAll(2); assertUnifiedSetAddAll(3); } private static void assertUnifiedSetAddAll(int shift) { MultiReaderUnifiedSet set = MultiReaderUnifiedSet.newSet(); int size = 100000; for (int i = 0; i < size; i++) { set.add(new CollidingInt(i, shift)); } MultiReaderUnifiedSet newSet = MultiReaderUnifiedSet.newSet(size); newSet.addAll(set); Verify.assertSize(size, newSet); for (int i = 0; i < size; i++) { Verify.assertContains(new CollidingInt(i, shift), newSet); } } @Test public void testUnifiedSetAddAllWithHashSet() { assertUnifiedSetAddAllWithHashSet(0); assertUnifiedSetAddAllWithHashSet(1); assertUnifiedSetAddAllWithHashSet(2); assertUnifiedSetAddAllWithHashSet(3); } private static void assertUnifiedSetAddAllWithHashSet(int shift) { Set set = new HashSet<>(); int size = 100000; for (int i = 0; i < size; i++) { set.add(new CollidingInt(i, shift)); } MultiReaderUnifiedSet newSet = MultiReaderUnifiedSet.newSet(size); newSet.addAll(set); Verify.assertSize(size, newSet); for (int i = 0; i < size; i++) { Verify.assertContains(new CollidingInt(i, shift), newSet); } MultiReaderUnifiedSet newSet2 = MultiReaderUnifiedSet.newSet(); newSet2.addAll(set); Verify.assertSize(size, newSet2); for (int i = 0; i < size; i++) { Verify.assertContains(new CollidingInt(i, shift), newSet2); } } @Test public void testUnifiedSetReplace() { assertUnifiedSetReplace(0); assertUnifiedSetReplace(1); assertUnifiedSetReplace(2); assertUnifiedSetReplace(3); } private static void assertUnifiedSetReplace(int shift) { MultiReaderUnifiedSet set = MultiReaderUnifiedSet.newSet(); int size = 100000; for (int i = 0; i < size; i++) { set.add(new CollidingInt(i, shift)); } for (int i = 0; i < size; i++) { set.add(new CollidingInt(i, shift)); } Verify.assertSize(size, set); for (int i = 0; i < size; i++) { Verify.assertContains(new CollidingInt(i, shift), set); } } @Test public void testUnifiedSetRetainAllFromList() { runUnifiedSetRetainAllFromList(0); runUnifiedSetRetainAllFromList(1); runUnifiedSetRetainAllFromList(2); runUnifiedSetRetainAllFromList(3); } private static void runUnifiedSetRetainAllFromList(int shift) { MultiReaderUnifiedSet set = MultiReaderUnifiedSet.newSet(); MutableList toRetain = Lists.mutable.of(); int size = 100000; for (int i = 0; i < size; i++) { set.add(new CollidingInt(i, shift)); if (i % 2 == 0) { toRetain.add(new CollidingInt(i, shift)); } } Verify.assertSize(size, set); Assert.assertTrue(set.containsAll(toRetain)); Assert.assertTrue(set.retainAll(toRetain)); Assert.assertTrue(set.containsAll(toRetain)); Assert.assertFalse(set.retainAll(toRetain)); // a second call should not modify the set Verify.assertSize(size / 2, set); for (int i = 0; i < size; i += 2) { Verify.assertContains(new CollidingInt(i, shift), set); } } @Test public void testUnifiedSetRetainAllFromSet() { runUnifiedSetRetainAllFromSet(0); runUnifiedSetRetainAllFromSet(1); runUnifiedSetRetainAllFromSet(2); runUnifiedSetRetainAllFromSet(3); } private static void runUnifiedSetRetainAllFromSet(int shift) { MultiReaderUnifiedSet set = MultiReaderUnifiedSet.newSet(); Set toRetain = new HashSet<>(); int size = 100000; for (int i = 0; i < size; i++) { set.add(new CollidingInt(i, shift)); if (i % 2 == 0) { toRetain.add(new CollidingInt(i, shift)); } } Verify.assertSize(size, set); Assert.assertTrue(set.containsAll(toRetain)); Assert.assertTrue(set.retainAll(toRetain)); Assert.assertTrue(set.containsAll(toRetain)); Assert.assertFalse(set.retainAll(toRetain)); // a second call should not modify the set Verify.assertSize(size / 2, set); for (int i = 0; i < size; i += 2) { Verify.assertContains(new CollidingInt(i, shift), set); } } @Test public void testUnifiedSetToArray() { runUnifiedSetToArray(0); runUnifiedSetToArray(1); runUnifiedSetToArray(2); runUnifiedSetToArray(3); } private static void runUnifiedSetToArray(int shift) { MultiReaderUnifiedSet set = MultiReaderUnifiedSet.newSet(); int size = 100000; for (int i = 0; i < size; i++) { set.add(new CollidingInt(i, shift)); } Verify.assertSize(size, set); Object[] keys = set.toArray(); Assert.assertEquals(size, keys.length); Arrays.sort(keys); for (int i = 0; i < size; i++) { Verify.assertItemAtIndex(new CollidingInt(i, shift), i, keys); } } @Test public void testUnifiedSetSerialize() { runUnifiedSetSerialize(0); runUnifiedSetSerialize(1); runUnifiedSetSerialize(2); runUnifiedSetSerialize(3); } private static void runUnifiedSetSerialize(int shift) { MultiReaderUnifiedSet set = MultiReaderUnifiedSet.newSet(); int size = 100000; for (int i = 0; i < size; i++) { set.add(new CollidingInt(i, shift)); } set.add(null); set = SerializeTestHelper.serializeDeserialize(set); Verify.assertSize(size + 1, set); for (int i = 0; i < size; i++) { Verify.assertContains(new CollidingInt(i, shift), set); } Verify.assertContains(null, set); } @Test public void testUnifiedSetKeySetToArrayDest() { MutableSet set = MultiReaderUnifiedSet.newSetWith(1, 2, 3, 4); // deliberately to small to force the method to allocate one of the correct size Integer[] dest = new Integer[2]; Integer[] result = set.toArray(dest); Verify.assertSize(4, result); Arrays.sort(result); Assert.assertArrayEquals(new Integer[]{1, 2, 3, 4}, result); } @Test public void testUnifiedSetEqualsAndHashCode() { assertUnifiedSetEqualsAndHashCode(0); assertUnifiedSetEqualsAndHashCode(1); assertUnifiedSetEqualsAndHashCode(2); assertUnifiedSetEqualsAndHashCode(3); } private static void assertUnifiedSetEqualsAndHashCode(int shift) { MutableSet set1 = MultiReaderUnifiedSet.newSet(); Set set2 = new HashSet<>(); MutableSet set3 = MultiReaderUnifiedSet.newSet(); MutableSet set4 = MultiReaderUnifiedSet.newSet(); int size = 100000; for (int i = 0; i < size; i++) { set1.add(new CollidingInt(i, shift)); set2.add(new CollidingInt(i, shift)); set3.add(new CollidingInt(i, shift)); set4.add(new CollidingInt(size - i - 1, shift)); } Assert.assertEquals(set1, set2); Assert.assertEquals(set1.hashCode(), set2.hashCode()); Verify.assertSetsEqual(set1, set3); Verify.assertEqualsAndHashCode(set1, set3); Verify.assertSetsEqual(set2, set4); Assert.assertEquals(set4, set2); Assert.assertEquals(set2.hashCode(), set4.hashCode()); } @Test public void testUnifiedSetRemoveAll() { runUnifiedSetRemoveAll(0); runUnifiedSetRemoveAll(1); runUnifiedSetRemoveAll(2); runUnifiedSetRemoveAll(3); } private static void runUnifiedSetRemoveAll(int shift) { MultiReaderUnifiedSet set = MultiReaderUnifiedSet.newSet(); List toRemove = new ArrayList<>(); int size = 100000; for (int i = 0; i < size; i++) { set.add(new CollidingInt(i, shift)); if (i % 2 == 0) { toRemove.add(new CollidingInt(i, shift)); } } Verify.assertSize(size, set); Assert.assertTrue(set.removeAll(toRemove)); Assert.assertFalse(set.removeAll(toRemove)); // a second call should not modify the set Verify.assertSize(size / 2, set); for (int i = 1; i < size; i += 2) { Verify.assertContains(new CollidingInt(i, shift), set); } } @Test public void testUnifiedSetPutDoesNotReplace() { this.assertUnifiedSetPutDoesNotReplace(0); this.assertUnifiedSetPutDoesNotReplace(1); this.assertUnifiedSetPutDoesNotReplace(2); this.assertUnifiedSetPutDoesNotReplace(3); this.assertUnifiedSetPutDoesNotReplace(4); } private void assertUnifiedSetPutDoesNotReplace(int shift) { MultiReaderUnifiedSet set = MultiReaderUnifiedSet.newSet(); for (int i = 0; i < 1000; i++) { Assert.assertTrue(set.add(new CollidingIntWithFlag(i, shift, false))); } Assert.assertEquals(1000, set.size()); for (int i = 0; i < 1000; i++) { Assert.assertFalse(set.add(new CollidingIntWithFlag(i, shift, true))); } Assert.assertEquals(1000, set.size()); set.withReadLockAndDelegate(delegate -> { for (CollidingIntWithFlag ciwf : delegate) { Assert.assertFalse(ciwf.isFlag()); } }); } private static final class CollidingIntWithFlag extends CollidingInt { private static final long serialVersionUID = 1L; private final boolean flag; private CollidingIntWithFlag(int value, int shift, boolean flag) { super(value, shift); this.flag = flag; } public boolean isFlag() { return this.flag; } } } eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/forkjoin/000077500000000000000000000000001407344533200332445ustar00rootroot00000000000000FJIterateAcceptanceTest.java000066400000000000000000000671031407344533200404630ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/forkjoin/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.impl.forkjoin; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.atomic.AtomicInteger; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.bag.Bag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.block.procedure.primitive.ObjectIntProcedure; import org.eclipse.collections.api.list.ImmutableList; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.map.MapIterable; import org.eclipse.collections.api.map.MutableMap; import org.eclipse.collections.api.set.MutableSet; import org.eclipse.collections.impl.bag.mutable.HashBag; import org.eclipse.collections.impl.block.factory.Functions; import org.eclipse.collections.impl.block.factory.HashingStrategies; import org.eclipse.collections.impl.block.factory.Predicates; import org.eclipse.collections.impl.block.factory.Procedures; import org.eclipse.collections.impl.factory.Lists; import org.eclipse.collections.impl.list.Interval; import org.eclipse.collections.impl.list.mutable.ArrayListAdapter; import org.eclipse.collections.impl.list.mutable.CompositeFastList; import org.eclipse.collections.impl.list.mutable.FastList; import org.eclipse.collections.impl.list.mutable.ListAdapter; import org.eclipse.collections.impl.map.mutable.UnifiedMap; import org.eclipse.collections.impl.parallel.AbstractProcedureCombiner; import org.eclipse.collections.impl.parallel.ParallelIterate; import org.eclipse.collections.impl.parallel.PassThruCombiner; import org.eclipse.collections.impl.parallel.PassThruObjectIntProcedureFactory; import org.eclipse.collections.impl.parallel.PassThruProcedureFactory; import org.eclipse.collections.impl.parallel.ProcedureFactory; import org.eclipse.collections.impl.set.mutable.MultiReaderUnifiedSet; import org.eclipse.collections.impl.set.mutable.UnifiedSet; import org.eclipse.collections.impl.set.strategy.mutable.UnifiedSetWithHashingStrategy; import org.eclipse.collections.impl.test.Verify; import org.eclipse.collections.impl.utility.ArrayIterate; import org.eclipse.collections.impl.utility.LazyIterate; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; public class FJIterateAcceptanceTest { private static final Procedure EXCEPTION_PROCEDURE = value -> { throw new RuntimeException("Thread death on its way!"); }; private static final ObjectIntProcedure EXCEPTION_OBJECT_INT_PROCEDURE = (object, index) -> { throw new RuntimeException("Thread death on its way!"); }; private static final Function> INT_TO_TWO_STRINGS = integer -> Lists.fixedSize.of(integer.toString(), integer.toString()); private static final Function EVEN_OR_ODD = value -> value % 2 == 0 ? "Even" : "Odd"; private int count; private final MutableSet threadNames = MultiReaderUnifiedSet.newSet(); private ImmutableList> iterables; private final ForkJoinPool executor = new ForkJoinPool(2); @Before public void setUp() { Interval interval = Interval.oneTo(20000); this.iterables = Lists.immutable.of( interval.toList(), interval.toList().asUnmodifiable(), interval.toList().asSynchronized(), interval.toList().toImmutable(), interval.toSet(), interval.toSet().asUnmodifiable(), interval.toSet().asSynchronized(), interval.toSet().toImmutable(), interval.toBag(), interval.toBag().asUnmodifiable(), interval.toBag().asSynchronized(), interval.toBag().toImmutable(), interval.toSortedSet(), interval.toSortedSet().asUnmodifiable(), interval.toSortedSet().asSynchronized(), interval.toSortedSet().toImmutable(), interval.toMap(Functions.getPassThru(), Functions.getPassThru()), interval.toMap(Functions.getPassThru(), Functions.getPassThru()).asUnmodifiable(), interval.toMap(Functions.getPassThru(), Functions.getPassThru()).asSynchronized(), interval.toMap(Functions.getPassThru(), Functions.getPassThru()).toImmutable(), ArrayListAdapter.newList().withAll(interval), ArrayListAdapter.newList().withAll(interval).asUnmodifiable(), ArrayListAdapter.newList().withAll(interval).asSynchronized(), new CompositeFastList().withAll(interval.toList()), new CompositeFastList().withAll(interval.toList()).asUnmodifiable(), new CompositeFastList().withAll(interval.toList()).asSynchronized(), new CompositeFastList().withAll(interval.toList()).toImmutable(), ListAdapter.adapt(new LinkedList()).withAll(interval), ListAdapter.adapt(new LinkedList()).withAll(interval).asUnmodifiable(), ListAdapter.adapt(new LinkedList()).withAll(interval).asSynchronized(), UnifiedSetWithHashingStrategy.newSet(HashingStrategies.defaultStrategy()).withAll(interval), UnifiedSetWithHashingStrategy.newSet(HashingStrategies.defaultStrategy()).withAll(interval).asUnmodifiable(), UnifiedSetWithHashingStrategy.newSet(HashingStrategies.defaultStrategy()).withAll(interval).asSynchronized(), UnifiedSetWithHashingStrategy.newSet(HashingStrategies.defaultStrategy()).withAll(interval).toImmutable()); } @After public void tearDown() { this.executor.shutdown(); } @Test public void testOneLevelCall() { new RecursiveProcedure().value(1); synchronized (this) { Assert.assertEquals("all iterations completed", 20000, this.count); } } @Test public void testNestedCall() { new RecursiveProcedure().value(2); synchronized (this) { Assert.assertEquals("all iterations completed", 419980, this.count); } Assert.assertTrue("uses multiple threads", this.threadNames.size() > 1); } @Test public void testForEachUsingSet() { //Tests the default batch size calculations IntegerSum sum = new IntegerSum(0); MutableSet set = Interval.toSet(1, 10000); FJIterate.forEach(set, new SumProcedure(sum), new SumCombiner(sum)); Assert.assertEquals(50005000, sum.getSum()); //Testing batch size 1 IntegerSum sum2 = new IntegerSum(0); UnifiedSet set2 = UnifiedSet.newSet(Interval.oneTo(100)); FJIterate.forEach(set2, new SumProcedure(sum2), new SumCombiner(sum2), 1, set2.getBatchCount(set2.size())); Assert.assertEquals(5050, sum2.getSum()); //Testing an uneven batch size IntegerSum sum3 = new IntegerSum(0); UnifiedSet set3 = UnifiedSet.newSet(Interval.oneTo(100)); FJIterate.forEach(set3, new SumProcedure(sum3), new SumCombiner(sum3), 1, set3.getBatchCount(13)); Assert.assertEquals(5050, sum3.getSum()); //Testing divideByZero exception by passing 1 as batchSize IntegerSum sum4 = new IntegerSum(0); UnifiedSet set4 = UnifiedSet.newSet(Interval.oneTo(100)); FJIterate.forEach(set4, new SumProcedure(sum4), new SumCombiner(sum4), 1); Assert.assertEquals(5050, sum4.getSum()); } @Test public void testForEachUsingMap() { //Test the default batch size calculations IntegerSum sum1 = new IntegerSum(0); MutableMap map1 = Interval.fromTo(1, 10000).toMap(String::valueOf, Functions.getIntegerPassThru()); FJIterate.forEach(map1, new SumProcedure(sum1), new SumCombiner(sum1)); Assert.assertEquals(50005000, sum1.getSum()); //Testing batch size 1 IntegerSum sum2 = new IntegerSum(0); UnifiedMap map2 = (UnifiedMap) Interval.fromTo(1, 100).toMap(String::valueOf, Functions.getIntegerPassThru()); FJIterate.forEach(map2, new SumProcedure(sum2), new SumCombiner(sum2), 1, map2.getBatchCount(map2.size())); Assert.assertEquals(5050, sum2.getSum()); //Testing an uneven batch size IntegerSum sum3 = new IntegerSum(0); UnifiedMap set3 = (UnifiedMap) Interval.fromTo(1, 100).toMap(String::valueOf, Functions.getIntegerPassThru()); FJIterate.forEach(set3, new SumProcedure(sum3), new SumCombiner(sum3), 1, set3.getBatchCount(13)); Assert.assertEquals(5050, sum3.getSum()); } @Test public void testForEach() { IntegerSum sum1 = new IntegerSum(0); List list1 = FJIterateAcceptanceTest.createIntegerList(16); FJIterate.forEach(list1, new SumProcedure(sum1), new SumCombiner(sum1), 1, list1.size() / 2); Assert.assertEquals(16, sum1.getSum()); IntegerSum sum2 = new IntegerSum(0); List list2 = FJIterateAcceptanceTest.createIntegerList(7); FJIterate.forEach(list2, new SumProcedure(sum2), new SumCombiner(sum2)); Assert.assertEquals(7, sum2.getSum()); IntegerSum sum3 = new IntegerSum(0); List list3 = FJIterateAcceptanceTest.createIntegerList(15); FJIterate.forEach(list3, new SumProcedure(sum3), new SumCombiner(sum3), 1, list3.size() / 2); Assert.assertEquals(15, sum3.getSum()); IntegerSum sum4 = new IntegerSum(0); List list4 = FJIterateAcceptanceTest.createIntegerList(35); FJIterate.forEach(list4, new SumProcedure(sum4), new SumCombiner(sum4)); Assert.assertEquals(35, sum4.getSum()); IntegerSum sum5 = new IntegerSum(0); MutableList list5 = FastList.newList(list4); FJIterate.forEach(list5, new SumProcedure(sum5), new SumCombiner(sum5)); Assert.assertEquals(35, sum5.getSum()); IntegerSum sum6 = new IntegerSum(0); List list6 = FJIterateAcceptanceTest.createIntegerList(40); FJIterate.forEach(list6, new SumProcedure(sum6), new SumCombiner(sum6), 1, list6.size() / 2); Assert.assertEquals(40, sum6.getSum()); IntegerSum sum7 = new IntegerSum(0); MutableList list7 = FastList.newList(list6); FJIterate.forEach(list7, new SumProcedure(sum7), new SumCombiner(sum7), 1, list6.size() / 2); Assert.assertEquals(40, sum7.getSum()); } @Test public void testForEachImmutableList() { IntegerSum sum1 = new IntegerSum(0); ImmutableList list1 = Lists.immutable.ofAll(FJIterateAcceptanceTest.createIntegerList(16)); FJIterate.forEach(list1, new SumProcedure(sum1), new SumCombiner(sum1), 1, list1.size() / 2); Assert.assertEquals(16, sum1.getSum()); IntegerSum sum2 = new IntegerSum(0); ImmutableList list2 = Lists.immutable.ofAll(FJIterateAcceptanceTest.createIntegerList(7)); FJIterate.forEach(list2, new SumProcedure(sum2), new SumCombiner(sum2)); Assert.assertEquals(7, sum2.getSum()); IntegerSum sum3 = new IntegerSum(0); ImmutableList list3 = Lists.immutable.ofAll(FJIterateAcceptanceTest.createIntegerList(15)); FJIterate.forEach(list3, new SumProcedure(sum3), new SumCombiner(sum3), 1, list3.size() / 2); Assert.assertEquals(15, sum3.getSum()); IntegerSum sum4 = new IntegerSum(0); ImmutableList list4 = Lists.immutable.ofAll(FJIterateAcceptanceTest.createIntegerList(35)); FJIterate.forEach(list4, new SumProcedure(sum4), new SumCombiner(sum4)); Assert.assertEquals(35, sum4.getSum()); IntegerSum sum5 = new IntegerSum(0); ImmutableList list5 = FastList.newList(list4).toImmutable(); FJIterate.forEach(list5, new SumProcedure(sum5), new SumCombiner(sum5)); Assert.assertEquals(35, sum5.getSum()); IntegerSum sum6 = new IntegerSum(0); ImmutableList list6 = Lists.immutable.ofAll(FJIterateAcceptanceTest.createIntegerList(40)); FJIterate.forEach(list6, new SumProcedure(sum6), new SumCombiner(sum6), 1, list6.size() / 2); Assert.assertEquals(40, sum6.getSum()); IntegerSum sum7 = new IntegerSum(0); ImmutableList list7 = FastList.newList(list6).toImmutable(); FJIterate.forEach(list7, new SumProcedure(sum7), new SumCombiner(sum7), 1, list6.size() / 2); Assert.assertEquals(40, sum7.getSum()); } @Test public void testForEachWithException() { Verify.assertThrows(RuntimeException.class, () -> FJIterate.forEach( FJIterateAcceptanceTest.createIntegerList(5), new PassThruProcedureFactory<>(EXCEPTION_PROCEDURE), new PassThruCombiner<>(), 1, 5)); } @Test public void testForEachWithIndexToArrayUsingFastListSerialPath() { Integer[] array = new Integer[200]; FastList list = (FastList) Interval.oneTo(200).toList(); Assert.assertTrue(ArrayIterate.allSatisfy(array, Predicates.isNull())); FJIterate.forEachWithIndex(list, (each, index) -> array[index] = each); Assert.assertArrayEquals(array, list.toArray(new Integer[]{})); } @Test public void testForEachWithIndexToArrayUsingFastList() { Integer[] array = new Integer[200]; FastList list = (FastList) Interval.oneTo(200).toList(); Assert.assertTrue(ArrayIterate.allSatisfy(array, Predicates.isNull())); FJIterate.forEachWithIndex(list, (each, index) -> array[index] = each, 10, 10); Assert.assertArrayEquals(array, list.toArray(new Integer[]{})); } @Test public void testForEachWithIndexToArrayUsingImmutableList() { Integer[] array = new Integer[200]; ImmutableList list = Interval.oneTo(200).toList().toImmutable(); Assert.assertTrue(ArrayIterate.allSatisfy(array, Predicates.isNull())); FJIterate.forEachWithIndex(list, (each, index) -> array[index] = each, 10, 10); Assert.assertArrayEquals(array, list.toArray(new Integer[]{})); } @Test public void testForEachWithIndexToArrayUsingArrayList() { Integer[] array = new Integer[200]; MutableList list = FastList.newList(Interval.oneTo(200)); Assert.assertTrue(ArrayIterate.allSatisfy(array, Predicates.isNull())); FJIterate.forEachWithIndex(list, (each, index) -> array[index] = each, 10, 10); Assert.assertArrayEquals(array, list.toArray(new Integer[]{})); } @Test public void testForEachWithIndexToArrayUsingFixedArrayList() { Integer[] array = new Integer[10]; Assert.assertTrue(ArrayIterate.allSatisfy(array, Predicates.isNull())); List list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); FJIterate.forEachWithIndex(list, (each, index) -> array[index] = each, 1, 2); Assert.assertArrayEquals(array, list.toArray(new Integer[list.size()])); } @Test public void testForEachWithIndexException() { Verify.assertThrows(RuntimeException.class, () -> FJIterate.forEachWithIndex( FJIterateAcceptanceTest.createIntegerList(5), new PassThruObjectIntProcedureFactory<>(EXCEPTION_OBJECT_INT_PROCEDURE), new PassThruCombiner<>(), 1, 5)); } @Test public void select() { this.iterables.forEach(Procedures.cast(this::basicSelect)); } private void basicSelect(RichIterable iterable) { Collection actual1 = FJIterate.select(iterable, Predicates.greaterThan(10000)); Collection actual2 = FJIterate.select(iterable, Predicates.greaterThan(10000), HashBag.newBag(), 3, this.executor, true); Collection actual3 = FJIterate.select(iterable, Predicates.greaterThan(10000), true); RichIterable expected = iterable.select(Predicates.greaterThan(10000)); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual1.getClass().getSimpleName(), expected, actual1); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual2.getClass().getSimpleName(), expected.toBag(), actual2); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual3.getClass().getSimpleName(), expected.toBag(), HashBag.newBag(actual3)); } @Test public void selectSortedSet() { RichIterable iterable = Interval.oneTo(20000).toSortedSet(); Collection actual1 = FJIterate.select(iterable, Predicates.greaterThan(10000)); Collection actual2 = FJIterate.select(iterable, Predicates.greaterThan(10000), true); RichIterable expected = iterable.select(Predicates.greaterThan(10000)); Assert.assertSame(expected.getClass(), actual1.getClass()); Assert.assertSame(expected.getClass(), actual2.getClass()); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual1.getClass().getSimpleName(), expected, actual1); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual2.getClass().getSimpleName(), expected, actual2); } @Test public void count() { this.iterables.forEach(Procedures.cast(this::basicCount)); } private void basicCount(RichIterable listIterable) { int actual1 = FJIterate.count(listIterable, Predicates.greaterThan(10000)); int actual2 = FJIterate.count(listIterable, Predicates.greaterThan(10000), 11, this.executor); Assert.assertEquals(10000, actual1); Assert.assertEquals(10000, actual2); } @Test public void reject() { this.iterables.forEach(Procedures.cast(this::basicReject)); } private void basicReject(RichIterable iterable) { Collection actual1 = FJIterate.reject(iterable, Predicates.greaterThan(10000)); Collection actual2 = FJIterate.reject(iterable, Predicates.greaterThan(10000), HashBag.newBag(), 3, this.executor, true); Collection actual3 = FJIterate.reject(iterable, Predicates.greaterThan(10000), true); RichIterable expected = iterable.reject(Predicates.greaterThan(10000)); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual1.getClass().getSimpleName(), expected, actual1); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual2.getClass().getSimpleName(), expected.toBag(), actual2); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual3.getClass().getSimpleName(), expected.toBag(), HashBag.newBag(actual3)); } @Test public void collect() { this.iterables.forEach(Procedures.cast(this::basicCollect)); } private void basicCollect(RichIterable iterable) { Collection actual1 = FJIterate.collect(iterable, String::valueOf); Collection actual2 = FJIterate.collect(iterable, String::valueOf, HashBag.newBag(), 3, this.executor, false); Collection actual3 = FJIterate.collect(iterable, String::valueOf, true); RichIterable expected = iterable.collect(String::valueOf); Verify.assertSize(20000, actual1); Verify.assertContains(String.valueOf(20000), actual1); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual1.getClass().getSimpleName(), expected, actual1); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual2.getClass().getSimpleName(), expected.toBag(), actual2); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual3.getClass().getSimpleName(), expected.toBag(), HashBag.newBag(actual3)); } @Test public void collectIf() { this.iterables.forEach(Procedures.cast(this::basicCollectIf)); } private void basicCollectIf(RichIterable collection) { Predicate greaterThan = Predicates.greaterThan(10000); Collection actual1 = FJIterate.collectIf(collection, greaterThan, String::valueOf); Collection actual2 = FJIterate.collectIf(collection, greaterThan, String::valueOf, HashBag.newBag(), 3, this.executor, true); Collection actual3 = FJIterate.collectIf(collection, greaterThan, String::valueOf, HashBag.newBag(), 3, this.executor, true); Bag expected = collection.collectIf(greaterThan, String::valueOf).toBag(); Verify.assertSize(10000, actual1); Verify.assertNotContains(String.valueOf(9000), actual1); Verify.assertNotContains(String.valueOf(21000), actual1); Verify.assertContains(String.valueOf(15976), actual1); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual1.getClass().getSimpleName(), expected, HashBag.newBag(actual1)); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual2.getClass().getSimpleName(), expected, actual2); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual3.getClass().getSimpleName(), expected, actual3); } @Test public void flatCollect() { this.iterables.forEach(Procedures.cast(this::basicFlatCollect)); } private void basicFlatCollect(RichIterable iterable) { Collection actual1 = FJIterate.flatCollect(iterable, INT_TO_TWO_STRINGS); Collection actual2 = FJIterate.flatCollect(iterable, INT_TO_TWO_STRINGS, HashBag.newBag(), 3, this.executor, false); Collection actual3 = FJIterate.flatCollect(iterable, INT_TO_TWO_STRINGS, true); RichIterable expected1 = iterable.flatCollect(INT_TO_TWO_STRINGS); RichIterable expected2 = iterable.flatCollect(INT_TO_TWO_STRINGS, HashBag.newBag()); Verify.assertContains(String.valueOf(20000), actual1); Assert.assertEquals(expected1.getClass().getSimpleName() + '/' + actual1.getClass().getSimpleName(), expected1, actual1); Assert.assertEquals(expected2.getClass().getSimpleName() + '/' + actual2.getClass().getSimpleName(), expected2, actual2); Assert.assertEquals(expected1.getClass().getSimpleName() + '/' + actual3.getClass().getSimpleName(), expected1.toBag(), HashBag.newBag(actual3)); } @Test public void aggregateInPlaceBy() { Procedure2 countAggregator = (aggregate, value) -> aggregate.incrementAndGet(); List list = Interval.oneTo(20000); MutableMap aggregation = FJIterate.aggregateInPlaceBy(list, EVEN_OR_ODD, AtomicInteger::new, countAggregator); Assert.assertEquals(10000, aggregation.get("Even").intValue()); Assert.assertEquals(10000, aggregation.get("Odd").intValue()); FJIterate.aggregateInPlaceBy(list, EVEN_OR_ODD, AtomicInteger::new, countAggregator, aggregation); Assert.assertEquals(20000, aggregation.get("Even").intValue()); Assert.assertEquals(20000, aggregation.get("Odd").intValue()); } @Test public void aggregateInPlaceByWithBatchSize() { MutableList list = LazyIterate.adapt(Collections.nCopies(1000, 1)) .concatenate(Collections.nCopies(2000, 2)) .concatenate(Collections.nCopies(3000, 3)) .toList() .shuffleThis(); MapIterable aggregation = FJIterate.aggregateInPlaceBy(list, String::valueOf, AtomicInteger::new, AtomicInteger::addAndGet, 100); Assert.assertEquals(1000, aggregation.get("1").intValue()); Assert.assertEquals(4000, aggregation.get("2").intValue()); Assert.assertEquals(9000, aggregation.get("3").intValue()); } private static List createIntegerList(int size) { return Collections.nCopies(size, Integer.valueOf(1)); } private class RecursiveProcedure implements Procedure { private static final long serialVersionUID = 1L; private final ForkJoinPool executorService = new ForkJoinPool(ParallelIterate.getDefaultMaxThreadPoolSize()); @Override public void value(Integer level) { if (level > 0) { FJIterateAcceptanceTest.this.threadNames.add(Thread.currentThread().getName()); this.executeFJIterate(level - 1, this.executorService); } else { this.simulateWork(); } } private void simulateWork() { synchronized (FJIterateAcceptanceTest.this) { FJIterateAcceptanceTest.this.count++; } } private void executeFJIterate(int level, ForkJoinPool executorService) { MutableList items = Lists.mutable.of(); for (int i = 0; i < 20000; i++) { items.add(i % 1000 == 0 ? level : 0); } FJIterate.forEach(items, new RecursiveProcedure(), executorService); } } public static final class IntegerSum { private int sum; public IntegerSum(int newSum) { this.sum = newSum; } public IntegerSum add(int value) { this.sum += value; return this; } public int getSum() { return this.sum; } } public static final class SumProcedure implements Procedure, Function2, ProcedureFactory { private static final long serialVersionUID = 1L; private final IntegerSum sum; public SumProcedure(IntegerSum newSum) { this.sum = newSum; } @Override public SumProcedure create() { return new SumProcedure(new IntegerSum(0)); } @Override public IntegerSum value(IntegerSum s1, Integer s2) { return s1.add(s2); } @Override public void value(Integer object) { this.sum.add(object); } public int getSum() { return this.sum.getSum(); } } public static final class SumCombiner extends AbstractProcedureCombiner { private static final long serialVersionUID = 1L; private final IntegerSum sum; public SumCombiner(IntegerSum initialSum) { super(true); this.sum = initialSum; } @Override public void combineOne(SumProcedure sumProcedure) { this.sum.add(sumProcedure.getSum()); } } } eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/list/000077500000000000000000000000001407344533200323765ustar00rootroot00000000000000mutable/000077500000000000000000000000001407344533200337505ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/listMultiReaderFastListAcceptanceTest.java000066400000000000000000000021461407344533200433140ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/list/mutable/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.impl.list.mutable; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.impl.list.Interval; import org.eclipse.collections.impl.test.Verify; import org.junit.Test; /** * JUnit test for {@link MultiReaderFastList}. */ public class MultiReaderFastListAcceptanceTest { @Test public void sortThisOnListWithMoreThan9Elements() { MutableList integers = MultiReaderFastList.newList(Interval.toReverseList(1, 10000)); Verify.assertStartsWith(integers.sortThis(), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10); Verify.assertEndsWith(integers, 9997, 9998, 9999, 10000); } } eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/map/000077500000000000000000000000001407344533200322005ustar00rootroot00000000000000mutable/000077500000000000000000000000001407344533200335525ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/mapConcurrentHashMapAcceptanceTest.java000066400000000000000000000247001407344533200426130ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/map/mutable/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.impl.map.mutable; import java.util.Collections; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org.eclipse.collections.api.bag.MutableBag; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.Function3; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.map.MutableMap; import org.eclipse.collections.impl.bag.mutable.HashBag; import org.eclipse.collections.impl.block.factory.Functions; import org.eclipse.collections.impl.factory.Maps; import org.eclipse.collections.impl.list.Interval; import org.eclipse.collections.impl.list.mutable.FastList; import org.eclipse.collections.impl.parallel.ParallelIterate; import org.eclipse.collections.impl.test.Verify; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; /** * JUnit test for {@link ConcurrentHashMap}. */ public class ConcurrentHashMapAcceptanceTest { private static final MutableMap> BAG_MUTABLE_MAP = Interval.oneTo(1000).groupBy(each -> each % 100).toMap(HashBag::new); private ExecutorService executor; @Before public void setUp() { this.executor = Executors.newFixedThreadPool(20); } @After public void tearDown() { this.executor.shutdown(); } @Test public void parallelGroupByIntoConcurrentHashMap() { MutableMap> actual = ConcurrentHashMap.newMap(); ParallelIterate.forEach( Interval.oneTo(1000000), each -> actual.getIfAbsentPut(each % 100000, () -> HashBag.newBag().asSynchronized()).add(each), 10, this.executor); Verify.assertEqualsAndHashCode(Interval.oneTo(1000000).groupBy(each -> each % 100000).toMap(HashBag::new), actual); } @Test public void parallelForEachValue() { ConcurrentHashMap source = ConcurrentHashMap.newMap(Interval.oneTo(1000).toMap(Functions.getIntegerPassThru(), Functions.getIntegerPassThru())); MutableMap> actual = ConcurrentHashMap.newMap(); Procedure procedure = each -> actual.getIfAbsentPut(each % 100, () -> HashBag.newBag().asSynchronized()).add(each); source.parallelForEachValue(FastList.newList(Collections.nCopies(5, procedure)), this.executor); Verify.assertEqualsAndHashCode(BAG_MUTABLE_MAP, actual); } @Test public void parallelForEachEntry() { ConcurrentHashMap source = ConcurrentHashMap.newMap(Interval.oneTo(1000).toMap(Functions.getIntegerPassThru(), Functions.getIntegerPassThru())); MutableMap> actual = ConcurrentHashMap.newMap(); Procedure2 procedure2 = (key, value) -> actual.getIfAbsentPut(value % 100, () -> HashBag.newBag().asSynchronized()).add(value); source.parallelForEachKeyValue(FastList.newList(Collections.nCopies(5, procedure2)), this.executor); Verify.assertEqualsAndHashCode(BAG_MUTABLE_MAP, actual); } @Test public void putAllInParallelSmallMap() { ConcurrentHashMap source = ConcurrentHashMap.newMap(Interval.oneTo(1000).toMap(Functions.getIntegerPassThru(), Functions.getIntegerPassThru())); ConcurrentHashMap target = ConcurrentHashMap.newMap(); target.putAllInParallel(source, 10, this.executor); Verify.assertEqualsAndHashCode(source, target); } @Test public void putAllInParallelLargeMap() { ConcurrentHashMap source = ConcurrentHashMap.newMap(Interval.oneTo(60000).toMap(Functions.getIntegerPassThru(), Functions.getIntegerPassThru())); ConcurrentHashMap target = ConcurrentHashMap.newMap(); target.putAllInParallel(source, 10, this.executor); Verify.assertEqualsAndHashCode(source, target); } @Test public void concurrentPutGetPutAllRemoveContainsKeyContainsValueGetIfAbsentPutTest() { ConcurrentHashMap map1 = ConcurrentHashMap.newMap(); ConcurrentHashMap map2 = ConcurrentHashMap.newMap(); ParallelIterate.forEach(Interval.oneTo(1000), each -> { map1.put(each, each); Assert.assertEquals(each, map1.get(each)); map2.putAll(Maps.mutable.of(each, each)); map1.remove(each); map1.putAll(Maps.mutable.of(each, each)); Assert.assertEquals(each, map2.get(each)); map2.remove(each); Assert.assertNull(map2.get(each)); Assert.assertFalse(map2.containsValue(each)); Assert.assertFalse(map2.containsKey(each)); Assert.assertEquals(each, map2.getIfAbsentPut(each, Functions.getIntegerPassThru())); Assert.assertTrue(map2.containsValue(each)); Assert.assertTrue(map2.containsKey(each)); Assert.assertEquals(each, map2.getIfAbsentPut(each, Functions.getIntegerPassThru())); map2.remove(each); Assert.assertEquals(each, map2.getIfAbsentPutWith(each, Functions.getIntegerPassThru(), each)); Assert.assertEquals(each, map2.getIfAbsentPutWith(each, Functions.getIntegerPassThru(), each)); Assert.assertEquals(each, map2.getIfAbsentPut(each, Functions.getIntegerPassThru())); }, 10, this.executor); Verify.assertEqualsAndHashCode(map1, map2); } @Test public void concurrentPutIfAbsentGetIfPresentPutTest() { ConcurrentHashMap map1 = ConcurrentHashMap.newMap(); ConcurrentHashMap map2 = ConcurrentHashMap.newMap(); ParallelIterate.forEach(Interval.oneTo(1000), each -> { map1.put(each, each); map1.put(each, each); Assert.assertEquals(each, map1.get(each)); map2.putAll(Maps.mutable.of(each, each)); map2.putAll(Maps.mutable.of(each, each)); map1.remove(each); Assert.assertNull(map1.putIfAbsentGetIfPresent(each, new KeyTransformer(), new ValueFactory(), null, null)); Assert.assertEquals(each, map1.putIfAbsentGetIfPresent(each, new KeyTransformer(), new ValueFactory(), null, null)); }, 10, this.executor); Assert.assertEquals(map1, map2); } @Test public void concurrentClear() { ConcurrentHashMap map = ConcurrentHashMap.newMap(); ParallelIterate.forEach(Interval.oneTo(1000), each -> { for (int i = 0; i < each; i++) { map.put(each + i * 1000, each); } map.clear(); for (int i = 0; i < 100; i++) { map.put(each + i * 1000, each); } map.clear(); }, 10, this.executor); Verify.assertEmpty(map); } @Test public void concurrentRemoveAndPutIfAbsent() { ConcurrentHashMap map1 = ConcurrentHashMap.newMap(); ParallelIterate.forEach(Interval.oneTo(1000), each -> { Assert.assertNull(map1.put(each, each)); map1.remove(each); Assert.assertNull(map1.get(each)); Assert.assertEquals(each, map1.getIfAbsentPut(each, Functions.getIntegerPassThru())); map1.remove(each); Assert.assertNull(map1.get(each)); Assert.assertEquals(each, map1.getIfAbsentPutWith(each, Functions.getIntegerPassThru(), each)); map1.remove(each); Assert.assertNull(map1.get(each)); for (int i = 0; i < each; i++) { Assert.assertNull(map1.putIfAbsent(each + i * 1000, each)); } for (int i = 0; i < each; i++) { Assert.assertEquals(each, map1.putIfAbsent(each + i * 1000, each)); } for (int i = 0; i < each; i++) { Assert.assertEquals(each, map1.remove(each + i * 1000)); } }, 10, this.executor); } private static class KeyTransformer implements Function2 { private static final long serialVersionUID = 1L; @Override public Integer value(Integer key, Integer value) { return key; } } private static class ValueFactory implements Function3 { private static final long serialVersionUID = 1L; @Override public Integer value(Object argument1, Object argument2, Integer key) { return key; } } @Test public void size() { ConcurrentHashMap map = ConcurrentHashMap.newMap(); ParallelIterate.forEach(Interval.oneTo(10_000), each -> map.put(each, each)); Assert.assertEquals(10_000, map.size()); Assert.assertEquals(10_000, map.keySet().size()); Assert.assertEquals(10_000, map.values().size()); Assert.assertEquals(10_000, map.entrySet().size()); } @Test public void size_entrySet() { ConcurrentHashMap map = ConcurrentHashMap.newMap(); ParallelIterate.forEach(Interval.oneTo(10_000), each -> map.put(each, each)); Assert.assertEquals(10_000, map.entrySet().size()); } @Test public void size_keySet() { ConcurrentHashMap map = ConcurrentHashMap.newMap(); ParallelIterate.forEach(Interval.oneTo(10_000), each -> map.put(each, each)); Assert.assertEquals(10_000, map.keySet().size()); } @Test public void size_values() { ConcurrentHashMap map = ConcurrentHashMap.newMap(); ParallelIterate.forEach(Interval.oneTo(10_000), each -> map.put(each, each)); Assert.assertEquals(10_000, map.values().size()); } } ConcurrentHashMapUnsafeAcceptanceTest.java000066400000000000000000000226131407344533200437560ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/map/mutable/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.impl.map.mutable; import java.util.Collections; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org.eclipse.collections.api.bag.MutableBag; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.Function3; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.map.MutableMap; import org.eclipse.collections.impl.bag.mutable.HashBag; import org.eclipse.collections.impl.block.factory.Functions; import org.eclipse.collections.impl.factory.Maps; import org.eclipse.collections.impl.list.Interval; import org.eclipse.collections.impl.list.mutable.FastList; import org.eclipse.collections.impl.parallel.ParallelIterate; import org.eclipse.collections.impl.test.Verify; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; /** * JUnit test for {@link ConcurrentHashMapUnsafe}. */ public class ConcurrentHashMapUnsafeAcceptanceTest { private static final MutableMap> BAG_MUTABLE_MAP = Interval.oneTo(1000).groupBy(each -> each % 100).toMap(HashBag::new); private ExecutorService executor; @Before public void setUp() { this.executor = Executors.newFixedThreadPool(20); } @After public void tearDown() { this.executor.shutdown(); } @Test public void parallelGroupByIntoConcurrentHashMap() { MutableMap> actual = ConcurrentHashMapUnsafe.newMap(); ParallelIterate.forEach( Interval.oneTo(1000000), each -> actual.getIfAbsentPut(each % 100000, () -> HashBag.newBag().asSynchronized()).add(each), 10, this.executor); Verify.assertEqualsAndHashCode(Interval.oneTo(1000000).groupBy(each -> each % 100000).toMap(HashBag::new), actual); } @Test public void parallelForEachValue() { ConcurrentHashMapUnsafe source = ConcurrentHashMapUnsafe.newMap(Interval.oneTo(1000).toMap(Functions.getIntegerPassThru(), Functions.getIntegerPassThru())); MutableMap> actual = ConcurrentHashMapUnsafe.newMap(); Procedure procedure = each -> actual.getIfAbsentPut(each % 100, () -> HashBag.newBag().asSynchronized()).add(each); source.parallelForEachValue(FastList.newList(Collections.nCopies(5, procedure)), this.executor); Verify.assertEqualsAndHashCode(BAG_MUTABLE_MAP, actual); } @Test public void parallelForEachEntry() { ConcurrentHashMapUnsafe source = ConcurrentHashMapUnsafe.newMap(Interval.oneTo(1000).toMap(Functions.getIntegerPassThru(), Functions.getIntegerPassThru())); MutableMap> actual = ConcurrentHashMapUnsafe.newMap(); Procedure2 procedure2 = (key, value) -> actual.getIfAbsentPut(value % 100, () -> HashBag.newBag().asSynchronized()).add(value); source.parallelForEachKeyValue(FastList.newList(Collections.nCopies(5, procedure2)), this.executor); Verify.assertEqualsAndHashCode(BAG_MUTABLE_MAP, actual); } @Test public void putAllInParallelSmallMap() { ConcurrentHashMapUnsafe source = ConcurrentHashMapUnsafe.newMap(Interval.oneTo(1000).toMap(Functions.getIntegerPassThru(), Functions.getIntegerPassThru())); ConcurrentHashMapUnsafe target = ConcurrentHashMapUnsafe.newMap(); target.putAllInParallel(source, 10, this.executor); Verify.assertEqualsAndHashCode(source, target); } @Test public void putAllInParallelLargeMap() { ConcurrentHashMapUnsafe source = ConcurrentHashMapUnsafe.newMap(Interval.oneTo(600000).toMap(Functions.getIntegerPassThru(), Functions.getIntegerPassThru())); ConcurrentHashMapUnsafe target = ConcurrentHashMapUnsafe.newMap(); target.putAllInParallel(source, 10, this.executor); Verify.assertEqualsAndHashCode(source, target); } @Test public void concurrentPutGetPutAllRemoveContainsKeyContainsValueGetIfAbsentPutTest() { ConcurrentHashMapUnsafe map1 = ConcurrentHashMapUnsafe.newMap(); ConcurrentHashMapUnsafe map2 = ConcurrentHashMapUnsafe.newMap(); ParallelIterate.forEach(Interval.oneTo(1000), each -> { map1.put(each, each); Assert.assertEquals(each, map1.get(each)); map2.putAll(Maps.mutable.of(each, each)); map1.remove(each); map1.putAll(Maps.mutable.of(each, each)); Assert.assertEquals(each, map2.get(each)); map2.remove(each); Assert.assertNull(map2.get(each)); Assert.assertFalse(map2.containsValue(each)); Assert.assertFalse(map2.containsKey(each)); Assert.assertEquals(each, map2.getIfAbsentPut(each, Functions.getIntegerPassThru())); Assert.assertTrue(map2.containsValue(each)); Assert.assertTrue(map2.containsKey(each)); Assert.assertEquals(each, map2.getIfAbsentPut(each, Functions.getIntegerPassThru())); map2.remove(each); Assert.assertEquals(each, map2.getIfAbsentPutWith(each, Functions.getIntegerPassThru(), each)); Assert.assertEquals(each, map2.getIfAbsentPutWith(each, Functions.getIntegerPassThru(), each)); Assert.assertEquals(each, map2.getIfAbsentPut(each, Functions.getIntegerPassThru())); }, 10, this.executor); Verify.assertEqualsAndHashCode(map1, map2); } @Test public void concurrentPutIfAbsentGetIfPresentPutTest() { ConcurrentHashMapUnsafe map1 = ConcurrentHashMapUnsafe.newMap(); ConcurrentHashMapUnsafe map2 = ConcurrentHashMapUnsafe.newMap(); ParallelIterate.forEach(Interval.oneTo(1000), each -> { map1.put(each, each); map1.put(each, each); Assert.assertEquals(each, map1.get(each)); map2.putAll(Maps.mutable.of(each, each)); map2.putAll(Maps.mutable.of(each, each)); map1.remove(each); Assert.assertNull(map1.putIfAbsentGetIfPresent(each, new KeyTransformer(), new ValueFactory(), null, null)); Assert.assertEquals(each, map1.putIfAbsentGetIfPresent(each, new KeyTransformer(), new ValueFactory(), null, null)); }, 10, this.executor); Assert.assertEquals(map1, map2); } @Test public void concurrentClear() { ConcurrentHashMapUnsafe map = ConcurrentHashMapUnsafe.newMap(); ParallelIterate.forEach(Interval.oneTo(1000), each -> { for (int i = 0; i < each; i++) { map.put(each + i * 1000, each); } map.clear(); for (int i = 0; i < 100; i++) { map.put(each + i * 1000, each); } map.clear(); }, 10, this.executor); Verify.assertEmpty(map); } @Test public void concurrentRemoveAndPutIfAbsent() { ConcurrentHashMapUnsafe map1 = ConcurrentHashMapUnsafe.newMap(); ParallelIterate.forEach(Interval.oneTo(1000), each -> { Assert.assertNull(map1.put(each, each)); map1.remove(each); Assert.assertNull(map1.get(each)); Assert.assertEquals(each, map1.getIfAbsentPut(each, Functions.getIntegerPassThru())); map1.remove(each); Assert.assertNull(map1.get(each)); Assert.assertEquals(each, map1.getIfAbsentPutWith(each, Functions.getIntegerPassThru(), each)); map1.remove(each); Assert.assertNull(map1.get(each)); for (int i = 0; i < each; i++) { Assert.assertNull(map1.putIfAbsent(each + i * 1000, each)); } for (int i = 0; i < each; i++) { Assert.assertEquals(each, map1.putIfAbsent(each + i * 1000, each)); } for (int i = 0; i < each; i++) { Assert.assertEquals(each, map1.remove(each + i * 1000)); } }, 10, this.executor); } private static class KeyTransformer implements Function2 { private static final long serialVersionUID = 1L; @Override public Integer value(Integer key, Integer value) { return key; } } private static class ValueFactory implements Function3 { private static final long serialVersionUID = 1L; @Override public Integer value(Object argument1, Object argument2, Integer key) { return key; } } } ParallelMapIteratePutAcceptanceTest.java000066400000000000000000000141151407344533200434270ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/map/mutable/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.impl.map.mutable; import java.util.Arrays; import java.util.Collections; import java.util.Map; import java.util.Random; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import org.eclipse.collections.impl.set.mutable.UnifiedSet; import org.eclipse.collections.impl.test.Verify; import org.junit.After; import org.junit.Assert; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ParallelMapIteratePutAcceptanceTest { private static final Logger LOGGER = LoggerFactory.getLogger(ParallelMapIteratePutAcceptanceTest.class); private static final long SEED = 0x12345678ABCDL; private static final long PUT_REPEAT = 100; private static final int CHUNK_SIZE = 16000; private static final int MAX_THREADS = 48; @After public void tearDown() { ParallelMapIteratePutAcceptanceTest.fullGc(); } private static void fullGc() { System.gc(); Thread.yield(); System.gc(); try { Thread.sleep(100); } catch (InterruptedException e) { throw new RuntimeException(e); } } @Test public void testMapIteratePut() { int constSize = 100000; int size = 10000000; Integer[] contents = new Integer[size]; Integer[] constContents = new Integer[constSize]; for (int i = 0; i < size; i++) { contents[i] = i; if (i < constSize / 2) { constContents[i] = i; } else if (i < constSize) { constContents[i] = size - i; } } Collections.shuffle(Arrays.asList(contents), new Random(SEED)); this.runAllPutTests(contents, constContents); } private void runAllPutTests(Integer[] contents, Integer[] constContents) { ExecutorService executorService = new ThreadPoolExecutor(MAX_THREADS, MAX_THREADS, 0, TimeUnit.SECONDS, new LinkedBlockingDeque<>(MAX_THREADS)); int threads = 10; this.runPutTest1(threads, contents, constContents, executorService, false); executorService.shutdown(); } private void runPutTest1(int threadCount, Integer[] contents, Integer[] constContents, ExecutorService executorService, boolean warmup) { long ops = ((warmup ? 1000000 : 1000000 * PUT_REPEAT) / contents.length) + 1; Future[] futures = new Future[threadCount]; for (int i = 0; i < ops; i++) { ConcurrentHashMap map = new ConcurrentHashMap<>(constContents.length); UnifiedSet setToRemove = UnifiedSet.newSet(constContents.length); for (Integer x : constContents) { map.put(x, x); setToRemove.put(x); } AtomicInteger currentPos = new AtomicInteger(); for (int t = 0; t < threadCount; t++) { futures[t] = executorService.submit(new PutRunner1(map, contents, currentPos)); } int count = 0; UnifiedSet setToAdd = UnifiedSet.newSet(constContents.length); for (Integer next : map.keySet()) { setToRemove.remove(next); Assert.assertTrue(setToAdd.add(next)); count++; } Assert.assertTrue(count >= constContents.length); Verify.assertEmpty(setToRemove); for (Future future : futures) { try { future.get(); } catch (ExecutionException | InterruptedException e) { throw new RuntimeException("unexpected", e); } } if (map.size() != contents.length) { throw new AssertionError(); } } } private static final class PutRunner1 implements Runnable { private final Map map; private final Integer[] contents; private long total; private final AtomicInteger queuePosition; private PutRunner1(Map map, Integer[] contents, AtomicInteger queuePosition) { this.map = map; this.contents = contents; this.queuePosition = queuePosition; } @Override public void run() { while (this.queuePosition.get() < this.contents.length) { int end = this.queuePosition.addAndGet(CHUNK_SIZE); int start = end - CHUNK_SIZE; if (start < this.contents.length) { if (end > this.contents.length) { end = this.contents.length; } for (int i = start; i < end; i++) { if (this.map.put(this.contents[i], this.contents[i]) != null) { this.total++; } } } LOGGER.info("Processed chunk ending at: {}", end); } if (this.total < 0) { throw new AssertionError("never gets here, but it can't be optimized away"); } } } } ParallelUnsafeMapIteratePutAcceptanceTest.java000066400000000000000000000141021407344533200445650ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/map/mutable/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.impl.map.mutable; import java.util.Arrays; import java.util.Collections; import java.util.Map; import java.util.Random; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import org.eclipse.collections.impl.set.mutable.UnifiedSet; import org.eclipse.collections.impl.test.Verify; import org.junit.After; import org.junit.Assert; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ParallelUnsafeMapIteratePutAcceptanceTest { private static final Logger LOGGER = LoggerFactory.getLogger(ParallelUnsafeMapIteratePutAcceptanceTest.class); private static final long SEED = 0x12345678ABCDL; private static final long PUT_REPEAT = 100; private static final int CHUNK_SIZE = 16000; private static final int MAX_THREADS = 48; @After public void tearDown() { fullGc(); } private static void fullGc() { System.gc(); Thread.yield(); System.gc(); try { Thread.sleep(100); } catch (InterruptedException e) { throw new RuntimeException(e); } } @Test public void testMapIteratePut() { int constSize = 100000; int size = 10000000; Integer[] contents = new Integer[size]; Integer[] constContents = new Integer[constSize]; for (int i = 0; i < size; i++) { contents[i] = i; if (i < constSize / 2) { constContents[i] = i; } else if (i < constSize) { constContents[i] = size - i; } } Collections.shuffle(Arrays.asList(contents), new Random(SEED)); this.runAllPutTests(contents, constContents); } private void runAllPutTests(Integer[] contents, Integer[] constContents) { ExecutorService executorService = new ThreadPoolExecutor(MAX_THREADS, MAX_THREADS, 0, TimeUnit.SECONDS, new LinkedBlockingDeque<>(MAX_THREADS)); int threads = 10; this.runPutTest1(threads, contents, constContents, executorService, false); executorService.shutdown(); } private void runPutTest1(int threadCount, Integer[] contents, Integer[] constContents, ExecutorService executorService, boolean warmup) { long ops = ((warmup ? 1000000 : 1000000 * PUT_REPEAT) / contents.length) + 1; Future[] futures = new Future[threadCount]; for (int i = 0; i < ops; i++) { ConcurrentHashMapUnsafe map = new ConcurrentHashMapUnsafe<>(constContents.length); UnifiedSet setToRemove = UnifiedSet.newSet(constContents.length); for (Integer x : constContents) { map.put(x, x); setToRemove.put(x); } AtomicInteger currentPos = new AtomicInteger(); for (int t = 0; t < threadCount; t++) { futures[t] = executorService.submit(new PutRunner1(map, contents, currentPos)); } int count = 0; UnifiedSet setToAdd = UnifiedSet.newSet(constContents.length); for (Integer next : map.keySet()) { setToRemove.remove(next); Assert.assertTrue(setToAdd.add(next)); count++; } Assert.assertTrue(count >= constContents.length); Verify.assertEmpty(setToRemove); for (Future future : futures) { try { future.get(); } catch (ExecutionException | InterruptedException e) { throw new RuntimeException("unexpected", e); } } if (map.size() != contents.length) { throw new AssertionError(); } } } private static final class PutRunner1 implements Runnable { private final Map map; private final Integer[] contents; private long total; private final AtomicInteger queuePosition; private PutRunner1(Map map, Integer[] contents, AtomicInteger queuePosition) { this.map = map; this.contents = contents; this.queuePosition = queuePosition; } @Override public void run() { while (this.queuePosition.get() < this.contents.length) { int end = this.queuePosition.addAndGet(CHUNK_SIZE); int start = end - CHUNK_SIZE; if (start < this.contents.length) { if (end > this.contents.length) { end = this.contents.length; } for (int i = start; i < end; i++) { if (this.map.put(this.contents[i], this.contents[i]) != null) { this.total++; } } } LOGGER.info("Processed chunk ending at: {}", end); } if (this.total < 0) { throw new AssertionError("never gets here, but it can't be optimized away"); } } } } UnifiedMapAcceptanceTest.java000066400000000000000000001735001407344533200412530ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/map/mutable/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.impl.map.mutable; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; import org.eclipse.collections.api.map.MutableMap; import org.eclipse.collections.impl.CollidingInt; import org.eclipse.collections.impl.test.SerializeTestHelper; import org.eclipse.collections.impl.test.Verify; import org.junit.Assert; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class UnifiedMapAcceptanceTest { private static final Logger LOGGER = LoggerFactory.getLogger(UnifiedMapAcceptanceTest.class); private static final Comparator> ENTRY_COMPARATOR = (o1, o2) -> o1.getKey().compareTo(o2.getKey()); private static final Comparator VALUE_COMPARATOR = (o1, o2) -> Integer.parseInt(o1.substring(1)) - Integer.parseInt(o2.substring(1)); @Test public void forEachWithIndexWithChainedValues() { UnifiedMap map = UnifiedMap.newMap(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, 3), UnifiedMapAcceptanceTest.createVal(i)); } int[] intArray = new int[1]; intArray[0] = -1; map.forEachWithIndex((value, index) -> { Assert.assertEquals(index, intArray[0] + 1); intArray[0] = index; }); } @Test public void getMapMemoryUsedInWords() { UnifiedMap map = UnifiedMap.newMap(); Assert.assertEquals(34, map.getMapMemoryUsedInWords()); map.put("1", "1"); Assert.assertEquals(34, map.getMapMemoryUsedInWords()); } @Test public void getCollidingBuckets() { UnifiedMap map = UnifiedMap.newMap(); Assert.assertEquals(0, map.getCollidingBuckets()); } private static String createVal(int i) { return "X" + i; } //todo: tests with null values //todo: keyset.removeAll(some collection where one of the keys is associated with null in the map) == true //todo: entryset.add(key associated with null) == true //todo: entryset.contains(entry with null value) == true @Test public void unifiedMapWithCollisions() { UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisions(0, 2); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisions(1, 2); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisions(2, 2); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisions(3, 2); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisions(4, 2); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisions(0, 4); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisions(1, 4); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisions(2, 4); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisions(3, 4); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisions(4, 4); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisions(0, 8); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisions(1, 8); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisions(2, 8); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisions(3, 8); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisions(4, 8); } private static void assertUnifiedMapWithCollisions(int shift, int removeStride) { UnifiedMap map = UnifiedMap.newMap(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } Verify.assertSize(size, map); for (int i = 0; i < size; i++) { Verify.assertContainsKey(new CollidingInt(i, shift), map); Verify.assertContainsKeyValue(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i), map); } for (int i = 0; i < size; i += removeStride) { Assert.assertEquals(UnifiedMapAcceptanceTest.createVal(i), map.remove(new CollidingInt(i, shift))); } Verify.assertSize(size - size / removeStride, map); for (int i = 0; i < size; i++) { if (i % removeStride == 0) { Verify.assertNotContainsKey(new CollidingInt(i, shift), map); Assert.assertNull(map.get(new CollidingInt(i, shift))); } else { Verify.assertContainsKey(new CollidingInt(i, shift), map); Verify.assertContainsKeyValue(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i), map); } } for (int i = 0; i < size; i++) { map.remove(new CollidingInt(i, shift)); } Verify.assertSize(0, map); } @Test public void unifiedMapWithCollisionsAndNullKey() { UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisionsAndNullKey(0, 2); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisionsAndNullKey(1, 2); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisionsAndNullKey(2, 2); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisionsAndNullKey(3, 2); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisionsAndNullKey(4, 2); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisionsAndNullKey(0, 4); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisionsAndNullKey(1, 4); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisionsAndNullKey(2, 4); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisionsAndNullKey(3, 4); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisionsAndNullKey(4, 4); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisionsAndNullKey(0, 8); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisionsAndNullKey(1, 8); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisionsAndNullKey(2, 8); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisionsAndNullKey(3, 8); UnifiedMapAcceptanceTest.assertUnifiedMapWithCollisionsAndNullKey(4, 8); } private static void assertUnifiedMapWithCollisionsAndNullKey(int shift, int removeStride) { UnifiedMap map = UnifiedMap.newMap(); Assert.assertTrue(map.isEmpty()); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } map.put(null, "Y"); Verify.assertSize(size + 1, map); for (int i = 0; i < size; i++) { Verify.assertContainsKey(new CollidingInt(i, shift), map); Verify.assertContainsKeyValue(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i), map); } Assert.assertTrue(map.containsKey(null)); Assert.assertEquals("Y", map.get(null)); for (int i = 0; i < size; i += removeStride) { Assert.assertEquals(UnifiedMapAcceptanceTest.createVal(i), map.remove(new CollidingInt(i, shift))); } Verify.assertSize(size - size / removeStride + 1, map); for (int i = 0; i < size; i++) { if (i % removeStride != 0) { Verify.assertContainsKey(new CollidingInt(i, shift), map); Verify.assertContainsKeyValue(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i), map); } } Assert.assertTrue(map.containsKey(null)); Assert.assertEquals("Y", map.get(null)); map.remove(null); Assert.assertFalse(map.containsKey(null)); Assert.assertNull(map.get(null)); } @Test public void unifiedMap() { UnifiedMap map = UnifiedMap.newMap(); int size = 100000; for (int i = 0; i < size; i++) { map.put(i, UnifiedMapAcceptanceTest.createVal(i)); } Verify.assertSize(size, map); for (int i = 0; i < size; i++) { Assert.assertTrue(map.containsKey(i)); Assert.assertEquals(UnifiedMapAcceptanceTest.createVal(i), map.get(i)); } for (int i = 0; i < size; i += 2) { Assert.assertEquals(UnifiedMapAcceptanceTest.createVal(i), map.remove(i)); } Verify.assertSize(size / 2, map); for (int i = 1; i < size; i += 2) { Assert.assertTrue(map.containsKey(i)); Assert.assertEquals(UnifiedMapAcceptanceTest.createVal(i), map.get(i)); } } @Test public void unifiedMapClear() { UnifiedMapAcceptanceTest.assertUnifiedMapClear(0); UnifiedMapAcceptanceTest.assertUnifiedMapClear(1); UnifiedMapAcceptanceTest.assertUnifiedMapClear(2); UnifiedMapAcceptanceTest.assertUnifiedMapClear(3); } private static void assertUnifiedMapClear(int shift) { UnifiedMap map = UnifiedMap.newMap(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } map.clear(); Verify.assertSize(0, map); for (int i = 0; i < size; i++) { Verify.assertNotContainsKey(new CollidingInt(i, shift), map); Assert.assertNull(map.get(new CollidingInt(i, shift))); } } @Test public void unifiedMapForEachEntry() { UnifiedMapAcceptanceTest.assertUnifiedMapForEachEntry(0); UnifiedMapAcceptanceTest.assertUnifiedMapForEachEntry(1); UnifiedMapAcceptanceTest.assertUnifiedMapForEachEntry(2); UnifiedMapAcceptanceTest.assertUnifiedMapForEachEntry(3); } private static void assertUnifiedMapForEachEntry(int shift) { UnifiedMap map = UnifiedMap.newMap(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } int[] count = new int[1]; map.forEachKeyValue((key, value) -> { Assert.assertEquals(UnifiedMapAcceptanceTest.createVal(key.getValue()), value); count[0]++; }); Assert.assertEquals(size, count[0]); } @Test public void unifiedMapForEachKey() { UnifiedMapAcceptanceTest.assertUnifiedMapForEachKey(0); UnifiedMapAcceptanceTest.assertUnifiedMapForEachKey(1); UnifiedMapAcceptanceTest.assertUnifiedMapForEachKey(2); UnifiedMapAcceptanceTest.assertUnifiedMapForEachKey(3); } private static void assertUnifiedMapForEachKey(int shift) { UnifiedMap map = UnifiedMap.newMap(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } List keys = new ArrayList<>(size); map.forEachKey(keys::add); Verify.assertSize(size, keys); Collections.sort(keys); for (int i = 0; i < size; i++) { Assert.assertEquals(new CollidingInt(i, shift), keys.get(i)); } } @Test public void unifiedMapForEachValue() { UnifiedMapAcceptanceTest.assertUnifiedMapForEachValue(0); UnifiedMapAcceptanceTest.assertUnifiedMapForEachValue(1); UnifiedMapAcceptanceTest.assertUnifiedMapForEachValue(2); UnifiedMapAcceptanceTest.assertUnifiedMapForEachValue(3); } private static void assertUnifiedMapForEachValue(int shift) { UnifiedMap map = UnifiedMap.newMap(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } List values = new ArrayList<>(size); map.forEachValue(values::add); Verify.assertSize(size, values); Collections.sort(values, UnifiedMapAcceptanceTest.VALUE_COMPARATOR); for (int i = 0; i < size; i++) { Assert.assertEquals(UnifiedMapAcceptanceTest.createVal(i), values.get(i)); } } @Test public void equalsWithNullValue() { MutableMap map1 = UnifiedMap.newWithKeysValues(1, null, 2, 2); MutableMap map2 = UnifiedMap.newWithKeysValues(2, 2, 3, 3); Assert.assertNotEquals(map1, map2); } @Test public void unifiedMapEqualsAndHashCode() { UnifiedMapAcceptanceTest.assertUnifiedMapEqualsAndHashCode(0); UnifiedMapAcceptanceTest.assertUnifiedMapEqualsAndHashCode(1); UnifiedMapAcceptanceTest.assertUnifiedMapEqualsAndHashCode(2); UnifiedMapAcceptanceTest.assertUnifiedMapEqualsAndHashCode(3); } private static void assertUnifiedMapEqualsAndHashCode(int shift) { MutableMap map1 = UnifiedMap.newMap(); Map map2 = new HashMap<>(); MutableMap map3 = UnifiedMap.newMap(); MutableMap map4 = UnifiedMap.newMap(); int size = 100000; for (int i = 0; i < size; i++) { map1.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); map2.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); map3.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); map4.put(new CollidingInt(size - i - 1, shift), UnifiedMapAcceptanceTest.createVal(size - i - 1)); } Assert.assertEquals(map2, map1); Assert.assertEquals(map1, map2); Assert.assertEquals(map2.hashCode(), map1.hashCode()); Assert.assertEquals(map1, map3); Assert.assertEquals(map1.hashCode(), map3.hashCode()); Assert.assertEquals(map2, map4); Assert.assertEquals(map4, map2); Assert.assertEquals(map2.hashCode(), map4.hashCode()); Verify.assertSetsEqual(map2.entrySet(), map1.entrySet()); Verify.assertSetsEqual(map1.entrySet(), map2.entrySet()); Assert.assertEquals(map2.entrySet().hashCode(), map1.entrySet().hashCode()); Verify.assertSetsEqual(map1.entrySet(), map3.entrySet()); Assert.assertEquals(map1.entrySet().hashCode(), map3.entrySet().hashCode()); Verify.assertSetsEqual(map2.entrySet(), map4.entrySet()); Verify.assertSetsEqual(map4.entrySet(), map2.entrySet()); Assert.assertEquals(map2.entrySet().hashCode(), map4.entrySet().hashCode()); Verify.assertSetsEqual(map2.keySet(), map1.keySet()); Verify.assertSetsEqual(map1.keySet(), map2.keySet()); Assert.assertEquals(map2.keySet().hashCode(), map1.keySet().hashCode()); Verify.assertSetsEqual(map1.keySet(), map3.keySet()); Assert.assertEquals(map1.keySet().hashCode(), map3.keySet().hashCode()); Verify.assertSetsEqual(map2.keySet(), map4.keySet()); Verify.assertSetsEqual(map4.keySet(), map2.keySet()); Assert.assertEquals(map2.keySet().hashCode(), map4.keySet().hashCode()); } @Test public void unifiedMapPutAll() { UnifiedMapAcceptanceTest.assertUnifiedMapPutAll(0); UnifiedMapAcceptanceTest.assertUnifiedMapPutAll(1); UnifiedMapAcceptanceTest.assertUnifiedMapPutAll(2); UnifiedMapAcceptanceTest.assertUnifiedMapPutAll(3); } private static void assertUnifiedMapPutAll(int shift) { UnifiedMap map = UnifiedMap.newMap(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } UnifiedMap newMap = UnifiedMap.newMap(size); newMap.putAll(map); Verify.assertSize(size, newMap); for (int i = 0; i < size; i++) { Verify.assertContainsKey(new CollidingInt(i, shift), newMap); Verify.assertContainsKeyValue(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i), newMap); } } @Test public void unifiedMapPutAllWithHashMap() { UnifiedMapAcceptanceTest.assertUnifiedMapPutAllWithHashMap(0); UnifiedMapAcceptanceTest.assertUnifiedMapPutAllWithHashMap(1); UnifiedMapAcceptanceTest.assertUnifiedMapPutAllWithHashMap(2); UnifiedMapAcceptanceTest.assertUnifiedMapPutAllWithHashMap(3); } private static void assertUnifiedMapPutAllWithHashMap(int shift) { Map map = new HashMap<>(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } UnifiedMap newMap = UnifiedMap.newMap(size); newMap.putAll(map); Verify.assertSize(size, newMap); for (int i = 0; i < size; i++) { Verify.assertContainsKey(new CollidingInt(i, shift), newMap); Verify.assertContainsKeyValue(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i), newMap); } } @Test public void unifiedMapReplace() { UnifiedMapAcceptanceTest.assertUnifiedMapReplace(0); UnifiedMapAcceptanceTest.assertUnifiedMapReplace(1); UnifiedMapAcceptanceTest.assertUnifiedMapReplace(2); UnifiedMapAcceptanceTest.assertUnifiedMapReplace(3); } private static void assertUnifiedMapReplace(int shift) { UnifiedMap map = UnifiedMap.newMap(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), "Y" + i); } Verify.assertSize(size, map); for (int i = 0; i < size; i++) { Assert.assertEquals("Y" + i, map.get(new CollidingInt(i, shift))); } } @Test public void unifiedMapContainsValue() { UnifiedMapAcceptanceTest.runUnifiedMapContainsValue(0); UnifiedMapAcceptanceTest.runUnifiedMapContainsValue(1); UnifiedMapAcceptanceTest.runUnifiedMapContainsValue(2); UnifiedMapAcceptanceTest.runUnifiedMapContainsValue(3); } private static void runUnifiedMapContainsValue(int shift) { UnifiedMap map = UnifiedMap.newMap(); int size = 1000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } for (int i = 0; i < size; i++) { Assert.assertTrue(map.containsValue(UnifiedMapAcceptanceTest.createVal(i))); } } @Test public void unifiedMapKeySet() { UnifiedMapAcceptanceTest.runUnifiedMapKeySet(0); UnifiedMapAcceptanceTest.runUnifiedMapKeySet(1); UnifiedMapAcceptanceTest.runUnifiedMapKeySet(2); UnifiedMapAcceptanceTest.runUnifiedMapKeySet(3); } private static void runUnifiedMapKeySet(int shift) { UnifiedMap map = UnifiedMap.newMap(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } Verify.assertSize(size, map); Set keySet = map.keySet(); Verify.assertSize(size, keySet); for (int i = 0; i < size; i++) { Verify.assertContains(new CollidingInt(i, shift), keySet); } for (int i = 0; i < size; i += 2) { Assert.assertTrue(keySet.remove(new CollidingInt(i, shift))); } Verify.assertSize(size / 2, map); Verify.assertSize(size / 2, keySet); for (int i = 1; i < size; i += 2) { Verify.assertContainsKey(new CollidingInt(i, shift), map); Verify.assertContains(new CollidingInt(i, shift), keySet); Verify.assertContainsKeyValue(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i), map); } } @Test public void unifiedMapKeySetRetainAll() { UnifiedMapAcceptanceTest.runUnifiedMapKeySetRetainAll(0); UnifiedMapAcceptanceTest.runUnifiedMapKeySetRetainAll(1); UnifiedMapAcceptanceTest.runUnifiedMapKeySetRetainAll(2); UnifiedMapAcceptanceTest.runUnifiedMapKeySetRetainAll(3); } private static void runUnifiedMapKeySetRetainAll(int shift) { UnifiedMap map = UnifiedMap.newMap(); List toRetain = new ArrayList<>(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); if (i % 2 == 0) { toRetain.add(new CollidingInt(i, shift)); } } Verify.assertSize(size, map); Set keySet = map.keySet(); Assert.assertTrue(keySet.containsAll(toRetain)); Assert.assertTrue(keySet.retainAll(toRetain)); Assert.assertTrue(keySet.containsAll(toRetain)); Assert.assertFalse(keySet.retainAll(toRetain)); // a second call should not modify the set Verify.assertSize(size / 2, map); Verify.assertSize(size / 2, keySet); for (int i = 0; i < size; i += 2) { Verify.assertContainsKey(new CollidingInt(i, shift), map); Verify.assertContains(new CollidingInt(i, shift), keySet); Verify.assertContainsKeyValue(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i), map); } } @Test public void unifiedMapKeySetRemoveAll() { UnifiedMapAcceptanceTest.runUnifiedMapKeySetRemoveAll(0); UnifiedMapAcceptanceTest.runUnifiedMapKeySetRemoveAll(1); UnifiedMapAcceptanceTest.runUnifiedMapKeySetRemoveAll(2); UnifiedMapAcceptanceTest.runUnifiedMapKeySetRemoveAll(3); } private static void runUnifiedMapKeySetRemoveAll(int shift) { UnifiedMap map = UnifiedMap.newMap(); List toRemove = new ArrayList<>(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); if (i % 2 == 0) { toRemove.add(new CollidingInt(i, shift)); } } Verify.assertSize(size, map); Set keySet = map.keySet(); Assert.assertTrue(keySet.removeAll(toRemove)); Assert.assertFalse(keySet.removeAll(toRemove)); // a second call should not modify the set Verify.assertSize(size / 2, map); Verify.assertSize(size / 2, keySet); for (int i = 1; i < size; i += 2) { Verify.assertContainsKey(new CollidingInt(i, shift), map); Verify.assertContains(new CollidingInt(i, shift), keySet); Verify.assertContainsKeyValue(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i), map); } } @Test public void unifiedMapKeySetToArray() { UnifiedMapAcceptanceTest.runUnifiedMapKeySetToArray(0); UnifiedMapAcceptanceTest.runUnifiedMapKeySetToArray(1); UnifiedMapAcceptanceTest.runUnifiedMapKeySetToArray(2); UnifiedMapAcceptanceTest.runUnifiedMapKeySetToArray(3); } private static void runUnifiedMapKeySetToArray(int shift) { UnifiedMap map = UnifiedMap.newMap(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } Verify.assertSize(size, map); Set keySet = map.keySet(); Object[] keys = keySet.toArray(); Arrays.sort(keys); for (int i = 0; i < size; i++) { Assert.assertEquals(new CollidingInt(i, shift), keys[i]); } } @Test public void unifiedMapKeySetIterator() { UnifiedMapAcceptanceTest.runUnifiedMapKeySetIterator(0); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIterator(1); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIterator(2); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIterator(3); } private static void runUnifiedMapKeySetIterator(int shift) { UnifiedMap map = UnifiedMap.newMap(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } Verify.assertSize(size, map); Set keySet = map.keySet(); CollidingInt[] keys = new CollidingInt[size]; int count = 0; for (CollidingInt collidingInt : keySet) { keys[count++] = collidingInt; } Arrays.sort(keys); for (int i = 0; i < size; i++) { Assert.assertEquals(new CollidingInt(i, shift), keys[i]); } } @Test public void unifiedMapKeySetIteratorRemove() { UnifiedMapAcceptanceTest.runUnifiedMapKeySetIteratorRemove(0, 2); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIteratorRemove(1, 2); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIteratorRemove(2, 2); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIteratorRemove(3, 2); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIteratorRemove(0, 3); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIteratorRemove(1, 3); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIteratorRemove(2, 3); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIteratorRemove(3, 3); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIteratorRemove(0, 4); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIteratorRemove(1, 4); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIteratorRemove(2, 4); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIteratorRemove(3, 4); } private static void runUnifiedMapKeySetIteratorRemove(int shift, int removeStride) { UnifiedMap map = UnifiedMap.newMap(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } Verify.assertSize(size, map); Set keySet = map.keySet(); int count = 0; for (Iterator it = keySet.iterator(); it.hasNext(); ) { CollidingInt key = it.next(); count++; if (key.getValue() % removeStride == 0) { it.remove(); } } Assert.assertEquals(size, count); for (int i = 0; i < size; i++) { if (i % removeStride != 0) { Assert.assertTrue("map contains " + i + "for shift " + shift + " and remove stride " + removeStride, map .containsKey(new CollidingInt(i, shift))); Verify.assertContainsKeyValue(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i), map); } } } @Test public void unifiedMapKeySetIteratorRemoveFlip() { UnifiedMapAcceptanceTest.runUnifiedMapKeySetIteratorRemoveFlip(0, 2); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIteratorRemoveFlip(1, 2); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIteratorRemoveFlip(2, 2); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIteratorRemoveFlip(3, 2); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIteratorRemoveFlip(0, 3); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIteratorRemoveFlip(1, 3); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIteratorRemoveFlip(2, 3); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIteratorRemoveFlip(3, 3); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIteratorRemoveFlip(0, 4); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIteratorRemoveFlip(1, 4); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIteratorRemoveFlip(2, 4); UnifiedMapAcceptanceTest.runUnifiedMapKeySetIteratorRemoveFlip(3, 4); } private static void runUnifiedMapKeySetIteratorRemoveFlip(int shift, int removeStride) { UnifiedMap map = UnifiedMap.newMap(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } Verify.assertSize(size, map); Set keySet = map.keySet(); int count = 0; for (Iterator it = keySet.iterator(); it.hasNext(); ) { CollidingInt key = it.next(); count++; if (key.getValue() % removeStride != 0) { it.remove(); } } Assert.assertEquals(size, count); for (int i = 0; i < size; i++) { if (i % removeStride == 0) { Assert.assertTrue("map contains " + i + "for shift " + shift + " and remove stride " + removeStride, map .containsKey(new CollidingInt(i, shift))); Verify.assertContainsKeyValue(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i), map); } } } //entry set tests @Test public void unifiedMapEntrySet() { UnifiedMapAcceptanceTest.runUnifiedMapEntrySet(0); UnifiedMapAcceptanceTest.runUnifiedMapEntrySet(1); UnifiedMapAcceptanceTest.runUnifiedMapEntrySet(2); UnifiedMapAcceptanceTest.runUnifiedMapEntrySet(3); } private static void runUnifiedMapEntrySet(int shift) { UnifiedMap map = UnifiedMap.newMap(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } Verify.assertSize(size, map); Set> entrySet = map.entrySet(); Verify.assertSize(size, entrySet); for (int i = 0; i < size; i++) { Verify.assertContains(new Entry(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)), entrySet); } for (int i = 0; i < size; i += 2) { Assert.assertTrue(entrySet.remove(new Entry(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)))); } Verify.assertSize(size / 2, map); Verify.assertSize(size / 2, entrySet); for (int i = 1; i < size; i += 2) { Verify.assertContainsKey(new CollidingInt(i, shift), map); Verify.assertContains(new Entry(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)), entrySet); Verify.assertContainsKeyValue(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i), map); } } @Test public void unifiedMapEntrySetRetainAll() { UnifiedMapAcceptanceTest.runUnifiedMapEntrySetRetainAll(0); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetRetainAll(1); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetRetainAll(2); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetRetainAll(3); } private static void runUnifiedMapEntrySetRetainAll(int shift) { UnifiedMap map = UnifiedMap.newMap(); List toRetain = new ArrayList<>(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); if (i % 2 == 0) { toRetain.add(new Entry(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i))); } } Verify.assertSize(size, map); Set> entrySet = map.entrySet(); Assert.assertTrue(entrySet.containsAll(toRetain)); Assert.assertTrue(entrySet.retainAll(toRetain)); Assert.assertTrue(entrySet.containsAll(toRetain)); Assert.assertFalse(entrySet.retainAll(toRetain)); // a second call should not modify the set Verify.assertSize(size / 2, map); Verify.assertSize(size / 2, entrySet); for (int i = 0; i < size; i += 2) { Verify.assertContainsKey(new CollidingInt(i, shift), map); Verify.assertContains(new Entry(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)), entrySet); Verify.assertContainsKeyValue(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i), map); } } @Test public void unifiedMapEntrySetRemoveAll() { UnifiedMapAcceptanceTest.runUnifiedMapEntrySetRemoveAll(0); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetRemoveAll(1); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetRemoveAll(2); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetRemoveAll(3); } private static void runUnifiedMapEntrySetRemoveAll(int shift) { UnifiedMap map = UnifiedMap.newMap(); List toRemove = new ArrayList<>(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); if (i % 2 == 0) { toRemove.add(new Entry(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i))); } } Verify.assertSize(size, map); Set> entrySet = map.entrySet(); Assert.assertTrue(entrySet.removeAll(toRemove)); Assert.assertFalse(entrySet.removeAll(toRemove)); // a second call should not modify the set Verify.assertSize(size / 2, map); Verify.assertSize(size / 2, entrySet); for (int i = 1; i < size; i += 2) { Verify.assertContainsKey(new CollidingInt(i, shift), map); Verify.assertContains(new Entry(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)), entrySet); Verify.assertContainsKeyValue(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i), map); } } @Test public void unifiedMapEntrySetToArray() { UnifiedMapAcceptanceTest.runUnifiedMapEntrySetToArray(0); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetToArray(1); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetToArray(2); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetToArray(3); } private static void runUnifiedMapEntrySetToArray(int shift) { UnifiedMap map = UnifiedMap.newMap(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } Verify.assertSize(size, map); Set> entrySet = map.entrySet(); Map.Entry[] entries = entrySet.toArray(new Map.Entry[0]); Arrays.sort(entries, UnifiedMapAcceptanceTest.ENTRY_COMPARATOR); for (int i = 0; i < size; i++) { Assert.assertEquals(new Entry(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)), entries[i]); } } @Test public void unifiedMapEntrySetIterator() { UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIterator(0); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIterator(1); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIterator(2); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIterator(3); } private static void runUnifiedMapEntrySetIterator(int shift) { UnifiedMap map = UnifiedMap.newMap(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } Verify.assertSize(size, map); Set> entrySet = map.entrySet(); Map.Entry[] entries = new Map.Entry[size]; int count = 0; for (Map.Entry collidingIntStringEntry : entrySet) { entries[count++] = collidingIntStringEntry; } Arrays.sort(entries, UnifiedMapAcceptanceTest.ENTRY_COMPARATOR); for (int i = 0; i < size; i++) { Assert.assertEquals(new Entry(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)), entries[i]); } } @Test public void unifiedMapEntrySetIteratorSetValue() { UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorSetValue(0); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorSetValue(1); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorSetValue(2); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorSetValue(3); } private static void runUnifiedMapEntrySetIteratorSetValue(int shift) { UnifiedMap map = UnifiedMap.newMap(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } Verify.assertSize(size, map); Set> entrySet = map.entrySet(); for (Map.Entry entry : entrySet) { CollidingInt key = entry.getKey(); entry.setValue("Y" + key.getValue()); } Map.Entry[] entries = new Map.Entry[size]; int count = 0; for (Map.Entry collidingIntStringEntry : entrySet) { entries[count++] = collidingIntStringEntry; } Arrays.sort(entries, UnifiedMapAcceptanceTest.ENTRY_COMPARATOR); for (int i = 0; i < size; i++) { Assert.assertEquals(new Entry(new CollidingInt(i, shift), "Y" + i), entries[i]); } } @Test public void unifiedMapEntrySetIteratorRemove() { UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorRemove(0, 2); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorRemove(1, 2); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorRemove(2, 2); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorRemove(3, 2); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorRemove(0, 3); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorRemove(1, 3); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorRemove(2, 3); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorRemove(3, 3); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorRemove(0, 4); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorRemove(1, 4); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorRemove(2, 4); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorRemove(3, 4); } private static void runUnifiedMapEntrySetIteratorRemove(int shift, int removeStride) { UnifiedMap map = UnifiedMap.newMap(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } Verify.assertSize(size, map); Set> entrySet = map.entrySet(); int count = 0; for (Iterator> it = entrySet.iterator(); it.hasNext(); ) { CollidingInt entry = it.next().getKey(); count++; if (entry.getValue() % removeStride == 0) { it.remove(); } } Assert.assertEquals(size, count); for (int i = 0; i < size; i++) { if (i % removeStride != 0) { Assert.assertTrue("map contains " + i + "for shift " + shift + " and remove stride " + removeStride, map .containsKey(new CollidingInt(i, shift))); Verify.assertContainsKeyValue(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i), map); } } } @Test public void unifiedMapEntrySetIteratorRemoveFlip() { UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorRemoveFlip(0, 2); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorRemoveFlip(1, 2); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorRemoveFlip(2, 2); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorRemoveFlip(3, 2); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorRemoveFlip(0, 3); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorRemoveFlip(1, 3); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorRemoveFlip(2, 3); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorRemoveFlip(3, 3); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorRemoveFlip(0, 4); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorRemoveFlip(1, 4); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorRemoveFlip(2, 4); UnifiedMapAcceptanceTest.runUnifiedMapEntrySetIteratorRemoveFlip(3, 4); } private static void runUnifiedMapEntrySetIteratorRemoveFlip(int shift, int removeStride) { UnifiedMap map = UnifiedMap.newMap(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } Verify.assertSize(size, map); Set> entrySet = map.entrySet(); int count = 0; for (Iterator> it = entrySet.iterator(); it.hasNext(); ) { CollidingInt entry = it.next().getKey(); count++; if (entry.getValue() % removeStride != 0) { it.remove(); } } Assert.assertEquals(size, count); for (int i = 0; i < size; i++) { if (i % removeStride == 0) { Assert.assertTrue("map contains " + i + "for shift " + shift + " and remove stride " + removeStride, map .containsKey(new CollidingInt(i, shift))); Verify.assertContainsKeyValue(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i), map); } } } // values collection @Test public void unifiedMapValues() { UnifiedMapAcceptanceTest.runUnifiedMapValues(0); UnifiedMapAcceptanceTest.runUnifiedMapValues(1); UnifiedMapAcceptanceTest.runUnifiedMapValues(2); UnifiedMapAcceptanceTest.runUnifiedMapValues(3); } private static void runUnifiedMapValues(int shift) { UnifiedMap map = UnifiedMap.newMap(); int size = 1000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } Verify.assertSize(size, map); Collection values = map.values(); Assert.assertEquals(size, values.size()); for (int i = 0; i < size; i++) { Verify.assertContains(UnifiedMapAcceptanceTest.createVal(i), values); } for (int i = 0; i < size; i += 2) { Assert.assertTrue(values.remove(UnifiedMapAcceptanceTest.createVal(i))); } Verify.assertSize(size / 2, map); Verify.assertSize(size / 2, values); for (int i = 1; i < size; i += 2) { Verify.assertContainsKey(new CollidingInt(i, shift), map); Verify.assertContains(UnifiedMapAcceptanceTest.createVal(i), values); Verify.assertContainsKeyValue(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i), map); } } @Test public void unifiedMapValuesRetainAll() { UnifiedMapAcceptanceTest.runUnifiedMapValuesRetainAll(0); UnifiedMapAcceptanceTest.runUnifiedMapValuesRetainAll(1); UnifiedMapAcceptanceTest.runUnifiedMapValuesRetainAll(2); UnifiedMapAcceptanceTest.runUnifiedMapValuesRetainAll(3); } private static void runUnifiedMapValuesRetainAll(int shift) { UnifiedMap map = UnifiedMap.newMap(); List toRetain = new ArrayList<>(); int size = 1000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); if (i % 2 == 0) { toRetain.add(UnifiedMapAcceptanceTest.createVal(i)); } } Verify.assertSize(size, map); Collection values = map.values(); Assert.assertTrue(values.containsAll(toRetain)); Assert.assertTrue(values.retainAll(toRetain)); Assert.assertTrue(values.containsAll(toRetain)); Assert.assertFalse(values.retainAll(toRetain)); // a second call should not modify the set Verify.assertSize(size / 2, map); Verify.assertSize(size / 2, values); for (int i = 0; i < size; i += 2) { Verify.assertContainsKey(new CollidingInt(i, shift), map); Verify.assertContains(UnifiedMapAcceptanceTest.createVal(i), values); Verify.assertContainsKeyValue(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i), map); } } @Test public void unifiedMapValuesRemoveAll() { UnifiedMapAcceptanceTest.runUnifiedMapValuesRemoveAll(0); UnifiedMapAcceptanceTest.runUnifiedMapValuesRemoveAll(1); UnifiedMapAcceptanceTest.runUnifiedMapValuesRemoveAll(2); UnifiedMapAcceptanceTest.runUnifiedMapValuesRemoveAll(3); } private static void runUnifiedMapValuesRemoveAll(int shift) { UnifiedMap map = UnifiedMap.newMap(); List toRemove = new ArrayList<>(); int size = 1000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); if (i % 2 == 0) { toRemove.add(UnifiedMapAcceptanceTest.createVal(i)); } } Verify.assertSize(size, map); Collection values = map.values(); Assert.assertTrue(values.removeAll(toRemove)); Assert.assertFalse(values.removeAll(toRemove)); // a second call should not modify the set Verify.assertSize(size / 2, map); Verify.assertSize(size / 2, values); for (int i = 1; i < size; i += 2) { Verify.assertContainsKey(new CollidingInt(i, shift), map); Verify.assertContains(UnifiedMapAcceptanceTest.createVal(i), values); Verify.assertContainsKeyValue(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i), map); } } @Test public void unifiedMapValuesToArray() { UnifiedMapAcceptanceTest.runUnifiedMapValuesToArray(0); UnifiedMapAcceptanceTest.runUnifiedMapValuesToArray(1); UnifiedMapAcceptanceTest.runUnifiedMapValuesToArray(2); UnifiedMapAcceptanceTest.runUnifiedMapValuesToArray(3); } private static void runUnifiedMapValuesToArray(int shift) { UnifiedMap map = UnifiedMap.newMap(); int size = 1000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } Verify.assertSize(size, map); Collection values = map.values(); String[] entries = values.toArray(new String[0]); Arrays.sort(entries, UnifiedMapAcceptanceTest.VALUE_COMPARATOR); for (int i = 0; i < size; i++) { Assert.assertEquals(UnifiedMapAcceptanceTest.createVal(i), entries[i]); } } @Test public void unifiedMapValuesIterator() { UnifiedMapAcceptanceTest.runUnifiedMapValuesIterator(0); UnifiedMapAcceptanceTest.runUnifiedMapValuesIterator(1); UnifiedMapAcceptanceTest.runUnifiedMapValuesIterator(2); UnifiedMapAcceptanceTest.runUnifiedMapValuesIterator(3); } private static void runUnifiedMapValuesIterator(int shift) { UnifiedMap map = UnifiedMap.newMap(); int size = 1000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } Verify.assertSize(size, map); Collection values = map.values(); String[] valuesArray = new String[size]; int count = 0; for (String value : values) { valuesArray[count++] = value; } Arrays.sort(valuesArray, UnifiedMapAcceptanceTest.VALUE_COMPARATOR); for (int i = 0; i < size; i++) { Assert.assertEquals(UnifiedMapAcceptanceTest.createVal(i), valuesArray[i]); } } @Test public void unifiedMapValuesIteratorRemove() { UnifiedMapAcceptanceTest.runUnifiedMapValuesIteratorRemove(0, 2); UnifiedMapAcceptanceTest.runUnifiedMapValuesIteratorRemove(1, 2); UnifiedMapAcceptanceTest.runUnifiedMapValuesIteratorRemove(2, 2); UnifiedMapAcceptanceTest.runUnifiedMapValuesIteratorRemove(3, 2); UnifiedMapAcceptanceTest.runUnifiedMapValuesIteratorRemove(0, 3); UnifiedMapAcceptanceTest.runUnifiedMapValuesIteratorRemove(1, 3); UnifiedMapAcceptanceTest.runUnifiedMapValuesIteratorRemove(2, 3); UnifiedMapAcceptanceTest.runUnifiedMapValuesIteratorRemove(3, 3); UnifiedMapAcceptanceTest.runUnifiedMapValuesIteratorRemove(0, 4); UnifiedMapAcceptanceTest.runUnifiedMapValuesIteratorRemove(1, 4); UnifiedMapAcceptanceTest.runUnifiedMapValuesIteratorRemove(2, 4); UnifiedMapAcceptanceTest.runUnifiedMapValuesIteratorRemove(3, 4); } private static void runUnifiedMapValuesIteratorRemove(int shift, int removeStride) { UnifiedMap map = UnifiedMap.newMap(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } Verify.assertSize(size, map); Collection values = map.values(); int count = 0; for (Iterator it = values.iterator(); it.hasNext(); ) { String value = it.next(); int x = Integer.parseInt(value.substring(1)); count++; if (x % removeStride == 0) { it.remove(); } } Assert.assertEquals(size, count); for (int i = 0; i < size; i++) { if (i % removeStride != 0) { Assert.assertTrue("map contains " + i + "for shift " + shift + " and remove stride " + removeStride, map .containsKey(new CollidingInt(i, shift))); Verify.assertContainsKeyValue(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i), map); } } } @Test public void unifiedMapValuesIteratorRemoveFlip() { UnifiedMapAcceptanceTest.runUnifiedMapValuesIteratorRemoveFlip(0, 2); UnifiedMapAcceptanceTest.runUnifiedMapValuesIteratorRemoveFlip(1, 2); UnifiedMapAcceptanceTest.runUnifiedMapValuesIteratorRemoveFlip(2, 2); UnifiedMapAcceptanceTest.runUnifiedMapValuesIteratorRemoveFlip(3, 2); UnifiedMapAcceptanceTest.runUnifiedMapValuesIteratorRemoveFlip(0, 3); UnifiedMapAcceptanceTest.runUnifiedMapValuesIteratorRemoveFlip(1, 3); UnifiedMapAcceptanceTest.runUnifiedMapValuesIteratorRemoveFlip(2, 3); UnifiedMapAcceptanceTest.runUnifiedMapValuesIteratorRemoveFlip(3, 3); UnifiedMapAcceptanceTest.runUnifiedMapValuesIteratorRemoveFlip(0, 4); UnifiedMapAcceptanceTest.runUnifiedMapValuesIteratorRemoveFlip(1, 4); UnifiedMapAcceptanceTest.runUnifiedMapValuesIteratorRemoveFlip(2, 4); UnifiedMapAcceptanceTest.runUnifiedMapValuesIteratorRemoveFlip(3, 4); } private static void runUnifiedMapValuesIteratorRemoveFlip(int shift, int removeStride) { UnifiedMap map = UnifiedMap.newMap(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } Verify.assertSize(size, map); Collection values = map.values(); int count = 0; for (Iterator it = values.iterator(); it.hasNext(); ) { String value = it.next(); int x = Integer.parseInt(value.substring(1)); count++; if (x % removeStride != 0) { it.remove(); } } Assert.assertEquals(size, count); for (int i = 0; i < size; i++) { if (i % removeStride == 0) { Assert.assertTrue("map contains " + i + "for shift " + shift + " and remove stride " + removeStride, map .containsKey(new CollidingInt(i, shift))); Verify.assertContainsKeyValue(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i), map); } } } @Test public void unifiedMapSerialize() { UnifiedMapAcceptanceTest.runUnifiedMapSerialize(0); UnifiedMapAcceptanceTest.runUnifiedMapSerialize(1); UnifiedMapAcceptanceTest.runUnifiedMapSerialize(2); UnifiedMapAcceptanceTest.runUnifiedMapSerialize(3); } private static void runUnifiedMapSerialize(int shift) { UnifiedMap map = UnifiedMap.newMap(); int size = 100000; for (int i = 0; i < size; i++) { map.put(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)); } String nullVal = "Y99999999"; map.put(null, nullVal); map = SerializeTestHelper.serializeDeserialize(map); Verify.assertSize(size + 1, map); for (int i = 0; i < size; i++) { Verify.assertContainsKey(new CollidingInt(i, shift), map); Verify.assertContainsKeyValue(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i), map); } Assert.assertTrue(map.containsKey(null)); Assert.assertEquals(nullVal, map.get(null)); Set keySet = SerializeTestHelper.serializeDeserialize(map.keySet()); Verify.assertSize(size + 1, keySet); for (int i = 0; i < size; i++) { Verify.assertContains(new CollidingInt(i, shift), keySet); } Verify.assertContains(null, keySet); Set> entrySet = SerializeTestHelper.serializeDeserialize(map.entrySet()); Verify.assertSize(size + 1, entrySet); for (int i = 0; i < size; i++) { Verify.assertContains(new Entry(new CollidingInt(i, shift), UnifiedMapAcceptanceTest.createVal(i)), entrySet); } Verify.assertContains(new Entry(null, nullVal), entrySet); for (Map.Entry e : entrySet) { CollidingInt key = e.getKey(); if (key == null) { Assert.assertEquals(nullVal, e.getValue()); } else { Assert.assertEquals(UnifiedMapAcceptanceTest.createVal(key.getValue()), e.getValue()); } } List values = new ArrayList<>(SerializeTestHelper.serializeDeserialize(map.values())); Collections.sort(values, UnifiedMapAcceptanceTest.VALUE_COMPARATOR); Verify.assertSize(size + 1, values); for (int i = 0; i < size; i++) { Assert.assertEquals(UnifiedMapAcceptanceTest.createVal(i), values.get(i)); } Assert.assertEquals(nullVal, values.get(values.size() - 1)); } public void perfTestUnifiedMapGet() { for (int i = 1000000; i > 10; i /= 10) { this.runGetTest(new UnifiedMap<>(), "Unified Map", i); } } public void perfTestJdkHashMapGet() { for (int i = 1000000; i > 10; i /= 10) { this.runGetTest(new HashMap<>(), "JDK HashMap", i); } } public void perfTestUnifiedMapCollidingGet() { this.runCollidingGetTest(new UnifiedMap<>(), "Unified Map", 1); this.runCollidingGetTest(new UnifiedMap<>(), "Unified Map", 2); this.runCollidingGetTest(new UnifiedMap<>(), "Unified Map", 3); } public void perfTestJdkHashMapCollidingGet() { this.runCollidingGetTest(new HashMap<>(), "JDK HashMap", 1); this.runCollidingGetTest(new HashMap<>(), "JDK HashMap", 2); this.runCollidingGetTest(new HashMap<>(), "JDK HashMap", 3); } private void runGetTest(Map map, String mapName, int size) { Integer[] keys = UnifiedMapAcceptanceTest.createMap((Map) (Map) map, size); UnifiedMapAcceptanceTest.sleep(100L); int n = 10000000 / size; int max = 4; for (int i = 0; i < max; i++) { long startTime = System.nanoTime(); UnifiedMapAcceptanceTest.runMapGet(map, keys, n); long runTimes = System.nanoTime() - startTime; LOGGER.info("{} get: {} ns per get on map size {}", mapName, (double) runTimes / (double) n / size, size); } map = null; System.gc(); Thread.yield(); System.gc(); Thread.yield(); } private static Integer[] createMap(Map map, int size) { Integer[] keys = new Integer[size]; for (int i = 0; i < size; i++) { keys[i] = i; map.put(i, UnifiedMapAcceptanceTest.createVal(i)); } Verify.assertSize(size, map); return keys; } private static void runMapGet(Map map, Object[] keys, int n) { for (int i = 0; i < n; i++) { for (Object key : keys) { map.get(key); } } } private void runCollidingGetTest(Map map, String mapName, int shift) { int size = 100000; Object[] keys = UnifiedMapAcceptanceTest.createCollidingMap(map, size, shift); UnifiedMapAcceptanceTest.sleep(100L); int n = 100; int max = 5; for (int i = 0; i < max; i++) { long startTime = System.nanoTime(); UnifiedMapAcceptanceTest.runMapGet(map, keys, n); long runTimes = System.nanoTime() - startTime; LOGGER.info("{} with {} collisions. get: {} ns per get", mapName, 1 << shift, (double) runTimes / (double) n / size); } } private static CollidingInt[] createCollidingMap(Map map, int size, int shift) { CollidingInt[] keys = new CollidingInt[size]; for (int i = 0; i < size; i++) { keys[i] = new CollidingInt(i, shift); map.put(keys[i], UnifiedMapAcceptanceTest.createVal(i)); } Assert.assertEquals(size, map.size()); return keys; } private static void sleep(long millis) { long now = System.currentTimeMillis(); long target = now + millis; while (now < target) { try { Thread.sleep(target - now); } catch (InterruptedException ignored) { Assert.fail("why were we interrupted?"); } now = System.currentTimeMillis(); } } public static final class Entry implements Map.Entry { private final CollidingInt key; private String value; private Entry(CollidingInt key, String value) { this.key = key; this.value = value; } @Override public CollidingInt getKey() { return this.key; } @Override public String getValue() { return this.value; } @Override public String setValue(String value) { String ret = this.value; this.value = value; return ret; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof Map.Entry)) { return false; } Map.Entry entry = (Map.Entry) o; if (!Objects.equals(this.key, entry.getKey())) { return false; } return Objects.equals(this.value, entry.getValue()); } @Override public int hashCode() { return this.key == null ? 0 : this.key.hashCode(); } } @Test public void unifiedMapToString() { UnifiedMap map = UnifiedMap.newWithKeysValues(1, "One", 2, "Two"); Verify.assertContains("1=One", map.toString()); Verify.assertContains("2=Two", map.toString()); map.put("value is 'self'", map); Verify.assertContains("value is 'self'=(this Map)", map.toString()); } } primitive/000077500000000000000000000000001407344533200355625ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/map/mutableIntIntMapProbeTest.java000066400000000000000000000211321407344533200421170ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/map/mutable/primitive/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.impl.map.mutable.primitive; import java.util.Random; import org.eclipse.collections.api.list.primitive.MutableIntList; import org.eclipse.collections.api.map.primitive.MutableIntIntMap; import org.eclipse.collections.api.set.primitive.MutableIntSet; import org.eclipse.collections.impl.SpreadFunctions; import org.eclipse.collections.impl.list.mutable.primitive.IntArrayList; import org.eclipse.collections.impl.set.mutable.primitive.IntHashSet; import org.junit.Assert; import org.junit.Test; public class IntIntMapProbeTest { private static final int SMALL_COLLIDING_KEY_COUNT = 500; private static final int LARGE_COLLIDING_KEY_COUNT = 40000; private int smallMask(int spread) { return spread & ((1 << 11) - 1); } private int largeMask(int spread) { return spread & ((1 << 20) - 1); } @Test public void randomNumbers_get() { MutableIntIntMap intIntSmallNonPresized = new IntIntHashMap(); this.testRandomGet(intIntSmallNonPresized, SMALL_COLLIDING_KEY_COUNT); MutableIntIntMap intIntSmallPresized = new IntIntHashMap(1_000); this.testRandomGet(intIntSmallPresized, SMALL_COLLIDING_KEY_COUNT); MutableIntIntMap intIntLargeNonPresized = new IntIntHashMap(); this.testRandomGet(intIntLargeNonPresized, LARGE_COLLIDING_KEY_COUNT); MutableIntIntMap intIntLargePresized = new IntIntHashMap(1_000_000); this.testRandomGet(intIntLargePresized, LARGE_COLLIDING_KEY_COUNT); } @Test public void nonRandomNumbers_get() { MutableIntIntMap intIntMapSmall = new IntIntHashMap(1_000); int[] intKeysForSmallMap = this.getSmallCollidingNumbers().toArray(); this.testNonRandomGet(intIntMapSmall, SMALL_COLLIDING_KEY_COUNT, intKeysForSmallMap); MutableIntIntMap intIntMapLarge = new IntIntHashMap(1_000_000); int[] intKeysForLargeMap = this.getLargeCollidingNumbers().toArray(); this.testNonRandomGet(intIntMapLarge, LARGE_COLLIDING_KEY_COUNT, intKeysForLargeMap); } @Test public void nonRandomNumbers_remove() { MutableIntIntMap intIntMapSmallNonPresized = new IntIntHashMap(); int[] intKeysForMap = this.getSmallCollidingNumbers().toArray(); this.testNonRandomRemove(intIntMapSmallNonPresized, SMALL_COLLIDING_KEY_COUNT, intKeysForMap); MutableIntIntMap intIntMapSmallPresized = new IntIntHashMap(1_000); int[] intKeysForMap2 = this.getSmallCollidingNumbers().toArray(); this.testNonRandomRemove(intIntMapSmallPresized, SMALL_COLLIDING_KEY_COUNT, intKeysForMap2); MutableIntIntMap intIntMapLargeNonPresized = new IntIntHashMap(); int[] intKeysForMap3 = this.getLargeCollidingNumbers().toArray(); this.testNonRandomRemove(intIntMapLargeNonPresized, LARGE_COLLIDING_KEY_COUNT, intKeysForMap3); MutableIntIntMap intIntMapLargePresized = new IntIntHashMap(1_000_000); int[] intKeysForMap4 = this.getLargeCollidingNumbers().toArray(); this.testNonRandomRemove(intIntMapLargePresized, LARGE_COLLIDING_KEY_COUNT, intKeysForMap4); } @Test public void randomNumbers_remove() { MutableIntIntMap intIntMapSmallNonPresized = new IntIntHashMap(); this.testRandomRemove(intIntMapSmallNonPresized, SMALL_COLLIDING_KEY_COUNT); MutableIntIntMap intIntMapSmallPresized = new IntIntHashMap(1_000); this.testRandomRemove(intIntMapSmallPresized, SMALL_COLLIDING_KEY_COUNT); MutableIntIntMap intIntMapLargeNonPresized = new IntIntHashMap(); this.testRandomRemove(intIntMapLargeNonPresized, LARGE_COLLIDING_KEY_COUNT); MutableIntIntMap intIntMapLargePresized = new IntIntHashMap(1_000_000); this.testRandomRemove(intIntMapLargePresized, LARGE_COLLIDING_KEY_COUNT); } private void testNonRandomGet(MutableIntIntMap intIntMap, int keyCount, int[] intKeysForMap) { Random random = new Random(0x123456789ABCDL); this.shuffle(intKeysForMap, random); for (int i = 0; i < keyCount; i++) { intIntMap.put(intKeysForMap[i], intKeysForMap[i] * 10); } for (int i = 0; i < intIntMap.size(); i++) { Assert.assertEquals((long) (intKeysForMap[i] * 10), intIntMap.get(intKeysForMap[i])); } } private void testRandomGet(MutableIntIntMap intIntMap, int keyCount) { Random random = new Random(0x123456789ABCDL); MutableIntSet set = new IntHashSet(keyCount); while (set.size() < keyCount) { set.add(random.nextInt()); } int[] randomNumbersForMap = set.toArray(); this.shuffle(randomNumbersForMap, random); for (int i = 0; i < keyCount; i++) { intIntMap.put(randomNumbersForMap[i], randomNumbersForMap[i] * 10); } for (int i = 0; i < intIntMap.size(); i++) { Assert.assertEquals((long) (randomNumbersForMap[i] * 10), intIntMap.get(randomNumbersForMap[i])); } } private void testNonRandomRemove(MutableIntIntMap intIntMap, int keyCount, int[] intKeysForMap) { Random random = new Random(0x123456789ABCDL); this.shuffle(intKeysForMap, random); for (int i = 0; i < keyCount; i++) { intIntMap.put(intKeysForMap[i], intKeysForMap[i] * 10); } this.shuffle(intKeysForMap, random); for (int i = 0; i < intKeysForMap.length; i++) { intIntMap.remove(intKeysForMap[i]); for (int j = i + 1; j < intKeysForMap.length; j++) { Assert.assertEquals((long) (intKeysForMap[j] * 10), intIntMap.get(intKeysForMap[j])); } } } private void testRandomRemove(MutableIntIntMap intIntMap, int keyCount) { Random random = new Random(0x123456789ABCDL); MutableIntSet set = new IntHashSet(keyCount); while (set.size() < keyCount) { set.add(random.nextInt()); } int[] intKeysForMap = set.toArray(); this.shuffle(intKeysForMap, random); for (int i = 0; i < keyCount; i++) { intIntMap.put(intKeysForMap[i], intKeysForMap[i] * 10); } this.shuffle(intKeysForMap, random); for (int i = 0; i < intKeysForMap.length; i++) { intIntMap.remove(intKeysForMap[i]); for (int j = i + 1; j < intKeysForMap.length; j++) { Assert.assertEquals((long) (intKeysForMap[j] * 10), intIntMap.get(intKeysForMap[j])); } } } private MutableIntList getSmallCollidingNumbers() { int lower = Integer.MIN_VALUE; int upper = Integer.MAX_VALUE; MutableIntList collidingNumbers = new IntArrayList(); int numberOne = this.smallMask(SpreadFunctions.intSpreadOne(0xABCDEF1)); int numberTwo = this.smallMask(SpreadFunctions.intSpreadTwo(0xABCDEF1)); for (int i = lower; i < upper && collidingNumbers.size() < SMALL_COLLIDING_KEY_COUNT; i++) { if (this.smallMask(SpreadFunctions.intSpreadOne(i)) == numberOne && this.smallMask(SpreadFunctions.intSpreadTwo(i)) == numberTwo) { collidingNumbers.add(i); } } return collidingNumbers; } private MutableIntList getLargeCollidingNumbers() { int lower = Integer.MIN_VALUE; int upper = Integer.MAX_VALUE; int number = 23; MutableIntList collidingNumbers = new IntArrayList(); for (int i = lower; i < upper && collidingNumbers.size() < LARGE_COLLIDING_KEY_COUNT; i++) { int index = this.largeMask(SpreadFunctions.intSpreadOne(i)); if (index >= number && index <= number + 100) { collidingNumbers.add(i); } } return collidingNumbers; } public void shuffle(int[] array, Random rnd) { for (int i = array.length; i > 1; i--) { IntIntMapProbeTest.swap(array, i - 1, rnd.nextInt(i)); } } private static void swap(int[] arr, int i, int j) { int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } } IntLongMapProbeTest.java000066400000000000000000000213251407344533200422700ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/map/mutable/primitive/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.impl.map.mutable.primitive; import java.util.Random; import org.eclipse.collections.api.list.primitive.MutableIntList; import org.eclipse.collections.api.map.primitive.MutableIntLongMap; import org.eclipse.collections.api.set.primitive.MutableIntSet; import org.eclipse.collections.impl.SpreadFunctions; import org.eclipse.collections.impl.list.mutable.primitive.IntArrayList; import org.eclipse.collections.impl.set.mutable.primitive.IntHashSet; import org.junit.Assert; import org.junit.Test; public class IntLongMapProbeTest { private static final int SMALL_COLLIDING_KEY_COUNT = 500; private static final int LARGE_COLLIDING_KEY_COUNT = 40000; private int smallMask(int spread) { return spread & ((1 << 11) - 1); } private int largeMask(int spread) { return spread & ((1 << 20) - 1); } @Test public void randomNumbers_get() { MutableIntLongMap intlongSmallNonPresized = new IntLongHashMap(); this.testRandomGet(intlongSmallNonPresized, SMALL_COLLIDING_KEY_COUNT); MutableIntLongMap intlongSmallPresized = new IntLongHashMap(1_000); this.testRandomGet(intlongSmallPresized, SMALL_COLLIDING_KEY_COUNT); MutableIntLongMap intlongLargeNonPresized = new IntLongHashMap(); this.testRandomGet(intlongLargeNonPresized, LARGE_COLLIDING_KEY_COUNT); MutableIntLongMap intlongLargePresized = new IntLongHashMap(1_000_000); this.testRandomGet(intlongLargePresized, LARGE_COLLIDING_KEY_COUNT); } @Test public void nonRandomNumbers_get() { MutableIntLongMap intlongMapSmall = new IntLongHashMap(1_000); int[] intKeysForSmallMap = this.getSmallCollidingNumbers().toArray(); this.testNonRandomGet(intlongMapSmall, SMALL_COLLIDING_KEY_COUNT, intKeysForSmallMap); MutableIntLongMap intlongMapLarge = new IntLongHashMap(1_000_000); int[] intKeysForLargeMap = this.getLargeCollidingNumbers().toArray(); this.testNonRandomGet(intlongMapLarge, LARGE_COLLIDING_KEY_COUNT, intKeysForLargeMap); } @Test public void nonRandomNumbers_remove() { MutableIntLongMap intlongMapSmallNonPresized = new IntLongHashMap(); int[] intKeysForMap = this.getSmallCollidingNumbers().toArray(); this.testNonRandomRemove(intlongMapSmallNonPresized, SMALL_COLLIDING_KEY_COUNT, intKeysForMap); MutableIntLongMap intlongMapSmallPresized = new IntLongHashMap(1_000); int[] intKeysForMap2 = this.getSmallCollidingNumbers().toArray(); this.testNonRandomRemove(intlongMapSmallPresized, SMALL_COLLIDING_KEY_COUNT, intKeysForMap2); MutableIntLongMap intlongMapLargeNonPresized = new IntLongHashMap(); int[] intKeysForMap3 = this.getLargeCollidingNumbers().toArray(); this.testNonRandomRemove(intlongMapLargeNonPresized, LARGE_COLLIDING_KEY_COUNT, intKeysForMap3); MutableIntLongMap intlongMapLargePresized = new IntLongHashMap(1_000_000); int[] intKeysForMap4 = this.getLargeCollidingNumbers().toArray(); this.testNonRandomRemove(intlongMapLargePresized, LARGE_COLLIDING_KEY_COUNT, intKeysForMap4); } @Test public void randomNumbers_remove() { MutableIntLongMap intlongMapSmallNonPresized = new IntLongHashMap(); this.testRandomRemove(intlongMapSmallNonPresized, SMALL_COLLIDING_KEY_COUNT); MutableIntLongMap intlongMapSmallPresized = new IntLongHashMap(1_000); this.testRandomRemove(intlongMapSmallPresized, SMALL_COLLIDING_KEY_COUNT); MutableIntLongMap intlongMapLargeNonPresized = new IntLongHashMap(); this.testRandomRemove(intlongMapLargeNonPresized, LARGE_COLLIDING_KEY_COUNT); MutableIntLongMap intlongMapLargePresized = new IntLongHashMap(1_000_000); this.testRandomRemove(intlongMapLargePresized, LARGE_COLLIDING_KEY_COUNT); } private void testNonRandomGet(MutableIntLongMap intlongMap, int keyCount, int[] intKeysForMap) { Random random = new Random(0x123456789ABCDL); this.shuffle(intKeysForMap, random); for (int i = 0; i < keyCount; i++) { intlongMap.put(intKeysForMap[i], (long) (intKeysForMap[i] * 10)); } for (int i = 0; i < intlongMap.size(); i++) { Assert.assertEquals((long) (intKeysForMap[i] * 10), intlongMap.get(intKeysForMap[i])); } } private void testRandomGet(MutableIntLongMap intlongMap, int keyCount) { Random random = new Random(0x123456789ABCDL); MutableIntSet set = new IntHashSet(keyCount); while (set.size() < keyCount) { set.add(random.nextInt()); } int[] randomNumbersForMap = set.toArray(); this.shuffle(randomNumbersForMap, random); for (int i = 0; i < keyCount; i++) { intlongMap.put(randomNumbersForMap[i], (long) (randomNumbersForMap[i] * 10)); } for (int i = 0; i < intlongMap.size(); i++) { Assert.assertEquals((long) (randomNumbersForMap[i] * 10), intlongMap.get(randomNumbersForMap[i])); } } private void testNonRandomRemove(MutableIntLongMap intlongMap, int keyCount, int[] intKeysForMap) { Random random = new Random(0x123456789ABCDL); this.shuffle(intKeysForMap, random); for (int i = 0; i < keyCount; i++) { intlongMap.put(intKeysForMap[i], (long) (intKeysForMap[i] * 10)); } this.shuffle(intKeysForMap, random); for (int i = 0; i < intKeysForMap.length; i++) { intlongMap.remove(intKeysForMap[i]); for (int j = i + 1; j < intKeysForMap.length; j++) { Assert.assertEquals((long) (intKeysForMap[j] * 10), intlongMap.get(intKeysForMap[j])); } } } private void testRandomRemove(MutableIntLongMap intlongMap, int keyCount) { Random random = new Random(0x123456789ABCDL); MutableIntSet set = new IntHashSet(keyCount); while (set.size() < keyCount) { set.add(random.nextInt()); } int[] intKeysForMap = set.toArray(); this.shuffle(intKeysForMap, random); for (int i = 0; i < keyCount; i++) { intlongMap.put(intKeysForMap[i], (long) (intKeysForMap[i] * 10)); } this.shuffle(intKeysForMap, random); for (int i = 0; i < intKeysForMap.length; i++) { intlongMap.remove(intKeysForMap[i]); for (int j = i + 1; j < intKeysForMap.length; j++) { Assert.assertEquals((long) (intKeysForMap[j] * 10), intlongMap.get(intKeysForMap[j])); } } } private MutableIntList getSmallCollidingNumbers() { int lower = Integer.MIN_VALUE; int upper = Integer.MAX_VALUE; MutableIntList collidingNumbers = new IntArrayList(); int numberOne = this.smallMask(SpreadFunctions.intSpreadOne(0xABCDEF1)); int numberTwo = this.smallMask(SpreadFunctions.intSpreadTwo(0xABCDEF1)); for (int i = lower; i < upper && collidingNumbers.size() < SMALL_COLLIDING_KEY_COUNT; i++) { if (this.smallMask(SpreadFunctions.intSpreadOne(i)) == numberOne && this.smallMask(SpreadFunctions.intSpreadTwo(i)) == numberTwo) { collidingNumbers.add(i); } } return collidingNumbers; } private MutableIntList getLargeCollidingNumbers() { int lower = Integer.MIN_VALUE; int upper = Integer.MAX_VALUE; int number = 23; MutableIntList collidingNumbers = new IntArrayList(); for (int i = lower; i < upper && collidingNumbers.size() < LARGE_COLLIDING_KEY_COUNT; i++) { int index = this.largeMask(SpreadFunctions.intSpreadOne(i)); if (index >= number && index <= number + 100) { collidingNumbers.add(i); } } return collidingNumbers; } public void shuffle(int[] intArray, Random rnd) { for (int i = intArray.length; i > 1; i--) { IntLongMapProbeTest.swap(intArray, i - 1, rnd.nextInt(i)); } } private static void swap(int[] arr, int i, int j) { int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } } eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/parallel/000077500000000000000000000000001407344533200332175ustar00rootroot00000000000000ParallelArrayIterateAcceptanceTest.java000066400000000000000000000055311407344533200426670ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/parallel/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.impl.parallel; import java.util.concurrent.ExecutorService; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.set.MutableSet; import org.eclipse.collections.impl.factory.Lists; import org.eclipse.collections.impl.set.mutable.MultiReaderUnifiedSet; import org.junit.Assert; import org.junit.Test; public class ParallelArrayIterateAcceptanceTest { private int count = 0; private final MutableSet threadNames = MultiReaderUnifiedSet.newSet(); @Test public void oneLevelCall() { new RecursiveProcedure().value(1); synchronized (this) { Assert.assertEquals("all iterations completed", 20000, this.count); } } @Test public void nestedCall() { new RecursiveProcedure().value(2); synchronized (this) { Assert.assertEquals("all iterations completed", 419980, this.count); } Assert.assertTrue("uses multiple threads", this.threadNames.size() > 1); } private class RecursiveProcedure implements Procedure { private static final long serialVersionUID = 1L; private final ExecutorService executorService = ParallelIterate.newPooledExecutor("ParallelArrayIterateAcceptanceTest", false); @Override public void value(Integer object) { int level = object.intValue(); if (level > 0) { ParallelArrayIterateAcceptanceTest.this.threadNames.add(Thread.currentThread().getName()); this.executeParallelIterate(level - 1, this.executorService); } else { this.simulateWork(); } } private void simulateWork() { synchronized (ParallelArrayIterateAcceptanceTest.this) { ParallelArrayIterateAcceptanceTest.this.count++; } } private void executeParallelIterate(int level, ExecutorService executorService) { MutableList items = Lists.mutable.of(); for (int i = 0; i < 20000; i++) { items.add(i % 1000 == 0 ? level : 0); } ParallelIterate.forEach(items, new RecursiveProcedure(), executorService); } } } ParallelIterateAcceptanceTest.java000066400000000000000000001005061407344533200416660ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/parallel/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.impl.parallel; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicInteger; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.bag.Bag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.block.procedure.primitive.ObjectIntProcedure; import org.eclipse.collections.api.list.ImmutableList; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.map.MapIterable; import org.eclipse.collections.api.map.MutableMap; import org.eclipse.collections.api.multimap.Multimap; import org.eclipse.collections.api.set.MutableSet; import org.eclipse.collections.impl.bag.mutable.HashBag; import org.eclipse.collections.impl.block.factory.Functions; import org.eclipse.collections.impl.block.factory.HashingStrategies; import org.eclipse.collections.impl.block.factory.Predicates; import org.eclipse.collections.impl.block.factory.Procedures; import org.eclipse.collections.impl.factory.Lists; import org.eclipse.collections.impl.list.Interval; import org.eclipse.collections.impl.list.mutable.ArrayListAdapter; import org.eclipse.collections.impl.list.mutable.CompositeFastList; import org.eclipse.collections.impl.list.mutable.FastList; import org.eclipse.collections.impl.list.mutable.ListAdapter; import org.eclipse.collections.impl.map.mutable.UnifiedMap; import org.eclipse.collections.impl.multimap.bag.HashBagMultimap; import org.eclipse.collections.impl.multimap.bag.MultiReaderHashBagMultimap; import org.eclipse.collections.impl.multimap.bag.SynchronizedPutHashBagMultimap; import org.eclipse.collections.impl.multimap.list.MultiReaderFastListMultimap; import org.eclipse.collections.impl.multimap.set.MultiReaderUnifiedSetMultimap; import org.eclipse.collections.impl.multimap.set.SynchronizedPutUnifiedSetMultimap; import org.eclipse.collections.impl.set.mutable.MultiReaderUnifiedSet; import org.eclipse.collections.impl.set.mutable.UnifiedSet; import org.eclipse.collections.impl.set.strategy.mutable.UnifiedSetWithHashingStrategy; import org.eclipse.collections.impl.test.Verify; import org.eclipse.collections.impl.utility.ArrayIterate; import org.eclipse.collections.impl.utility.LazyIterate; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; public class ParallelIterateAcceptanceTest { private static final Procedure EXCEPTION_PROCEDURE = value -> { throw new RuntimeException("Thread death on its way!"); }; private static final ObjectIntProcedure EXCEPTION_OBJECT_INT_PROCEDURE = (object, index) -> { throw new RuntimeException("Thread death on its way!"); }; private static final Function> INT_TO_TWO_STRINGS = integer -> Lists.fixedSize.of(integer.toString(), integer.toString()); private static final Function0 ATOMIC_INTEGER_NEW = AtomicInteger::new; private static final Function EVEN_OR_ODD = value -> value % 2 == 0 ? "Even" : "Odd"; private int count; private final MutableSet threadNames = MultiReaderUnifiedSet.newSet(); private ImmutableList> iterables; private final ExecutorService executor = Executors.newFixedThreadPool(2); @Before public void setUp() { Interval interval = Interval.oneTo(20000); this.iterables = Lists.immutable.of( interval.toList(), interval.toList().asUnmodifiable(), interval.toList().asSynchronized(), interval.toList().toImmutable(), interval.toSet(), interval.toSet().asUnmodifiable(), interval.toSet().asSynchronized(), interval.toSet().toImmutable(), interval.toBag(), interval.toBag().asUnmodifiable(), interval.toBag().asSynchronized(), interval.toBag().toImmutable(), interval.toSortedSet(), interval.toSortedSet().asUnmodifiable(), interval.toSortedSet().asSynchronized(), interval.toSortedSet().toImmutable(), interval.toMap(Functions.getPassThru(), Functions.getPassThru()), interval.toMap(Functions.getPassThru(), Functions.getPassThru()).asUnmodifiable(), interval.toMap(Functions.getPassThru(), Functions.getPassThru()).asSynchronized(), interval.toMap(Functions.getPassThru(), Functions.getPassThru()).toImmutable(), ArrayListAdapter.newList().withAll(interval), ArrayListAdapter.newList().withAll(interval).asUnmodifiable(), ArrayListAdapter.newList().withAll(interval).asSynchronized(), new CompositeFastList().withAll(interval.toList()), new CompositeFastList().withAll(interval.toList()).asUnmodifiable(), new CompositeFastList().withAll(interval.toList()).asSynchronized(), new CompositeFastList().withAll(interval.toList()).toImmutable(), ListAdapter.adapt(new LinkedList()).withAll(interval), ListAdapter.adapt(new LinkedList()).withAll(interval).asUnmodifiable(), ListAdapter.adapt(new LinkedList()).withAll(interval).asSynchronized(), UnifiedSetWithHashingStrategy.newSet(HashingStrategies.defaultStrategy()).withAll(interval), UnifiedSetWithHashingStrategy.newSet(HashingStrategies.defaultStrategy()).withAll(interval).asUnmodifiable(), UnifiedSetWithHashingStrategy.newSet(HashingStrategies.defaultStrategy()).withAll(interval).asSynchronized(), UnifiedSetWithHashingStrategy.newSet(HashingStrategies.defaultStrategy()).withAll(interval).toImmutable()); } @After public void tearDown() { this.executor.shutdown(); } @Test public void testOneLevelCall() { new RecursiveProcedure().value(1); synchronized (this) { Assert.assertEquals("all iterations completed", 20000, this.count); } } @Test public void testNestedCall() { new RecursiveProcedure().value(2); synchronized (this) { Assert.assertEquals("all iterations completed", 419980, this.count); } Assert.assertTrue("uses multiple threads", this.threadNames.size() > 1); } @Test public void testForEachUsingSet() { //Tests the default batch size calculations IntegerSum sum = new IntegerSum(0); MutableSet set = Interval.toSet(1, 10000); ParallelIterate.forEach(set, new SumProcedure(sum), new SumCombiner(sum)); Assert.assertEquals(50005000, sum.getSum()); //Testing batch size 1 IntegerSum sum2 = new IntegerSum(0); UnifiedSet set2 = UnifiedSet.newSet(Interval.oneTo(100)); ParallelIterate.forEach(set2, new SumProcedure(sum2), new SumCombiner(sum2), 1, set2.getBatchCount(set2.size())); Assert.assertEquals(5050, sum2.getSum()); //Testing an uneven batch size IntegerSum sum3 = new IntegerSum(0); UnifiedSet set3 = UnifiedSet.newSet(Interval.oneTo(100)); ParallelIterate.forEach(set3, new SumProcedure(sum3), new SumCombiner(sum3), 1, set3.getBatchCount(13)); Assert.assertEquals(5050, sum3.getSum()); //Testing divideByZero exception by passing 1 as batchSize IntegerSum sum4 = new IntegerSum(0); UnifiedSet set4 = UnifiedSet.newSet(Interval.oneTo(100)); ParallelIterate.forEach(set4, new SumProcedure(sum4), new SumCombiner(sum4), 1); Assert.assertEquals(5050, sum4.getSum()); } @Test public void testForEachUsingMap() { //Test the default batch size calculations IntegerSum sum1 = new IntegerSum(0); MutableMap map1 = Interval.fromTo(1, 10000).toMap(String::valueOf, Functions.getIntegerPassThru()); ParallelIterate.forEach(map1, new SumProcedure(sum1), new SumCombiner(sum1)); Assert.assertEquals(50005000, sum1.getSum()); //Testing batch size 1 IntegerSum sum2 = new IntegerSum(0); UnifiedMap map2 = (UnifiedMap) Interval.fromTo(1, 100).toMap(String::valueOf, Functions.getIntegerPassThru()); ParallelIterate.forEach(map2, new SumProcedure(sum2), new SumCombiner(sum2), 1, map2.getBatchCount(map2.size())); Assert.assertEquals(5050, sum2.getSum()); //Testing an uneven batch size IntegerSum sum3 = new IntegerSum(0); UnifiedMap set3 = (UnifiedMap) Interval.fromTo(1, 100).toMap(String::valueOf, Functions.getIntegerPassThru()); ParallelIterate.forEach(set3, new SumProcedure(sum3), new SumCombiner(sum3), 1, set3.getBatchCount(13)); Assert.assertEquals(5050, sum3.getSum()); } @Test public void testForEach() { IntegerSum sum1 = new IntegerSum(0); List list1 = ParallelIterateAcceptanceTest.createIntegerList(16); ParallelIterate.forEach(list1, new SumProcedure(sum1), new SumCombiner(sum1), 1, list1.size() / 2); Assert.assertEquals(16, sum1.getSum()); IntegerSum sum2 = new IntegerSum(0); List list2 = ParallelIterateAcceptanceTest.createIntegerList(7); ParallelIterate.forEach(list2, new SumProcedure(sum2), new SumCombiner(sum2)); Assert.assertEquals(7, sum2.getSum()); IntegerSum sum3 = new IntegerSum(0); List list3 = ParallelIterateAcceptanceTest.createIntegerList(15); ParallelIterate.forEach(list3, new SumProcedure(sum3), new SumCombiner(sum3), 1, list3.size() / 2); Assert.assertEquals(15, sum3.getSum()); IntegerSum sum4 = new IntegerSum(0); List list4 = ParallelIterateAcceptanceTest.createIntegerList(35); ParallelIterate.forEach(list4, new SumProcedure(sum4), new SumCombiner(sum4)); Assert.assertEquals(35, sum4.getSum()); IntegerSum sum5 = new IntegerSum(0); MutableList list5 = FastList.newList(list4); ParallelIterate.forEach(list5, new SumProcedure(sum5), new SumCombiner(sum5)); Assert.assertEquals(35, sum5.getSum()); IntegerSum sum6 = new IntegerSum(0); List list6 = ParallelIterateAcceptanceTest.createIntegerList(40); ParallelIterate.forEach(list6, new SumProcedure(sum6), new SumCombiner(sum6), 1, list6.size() / 2); Assert.assertEquals(40, sum6.getSum()); IntegerSum sum7 = new IntegerSum(0); MutableList list7 = FastList.newList(list6); ParallelIterate.forEach(list7, new SumProcedure(sum7), new SumCombiner(sum7), 1, list6.size() / 2); Assert.assertEquals(40, sum7.getSum()); } @Test public void testForEachImmutableList() { IntegerSum sum1 = new IntegerSum(0); ImmutableList list1 = Lists.immutable.ofAll(ParallelIterateAcceptanceTest.createIntegerList(16)); ParallelIterate.forEach(list1, new SumProcedure(sum1), new SumCombiner(sum1), 1, list1.size() / 2); Assert.assertEquals(16, sum1.getSum()); IntegerSum sum2 = new IntegerSum(0); ImmutableList list2 = Lists.immutable.ofAll(ParallelIterateAcceptanceTest.createIntegerList(7)); ParallelIterate.forEach(list2, new SumProcedure(sum2), new SumCombiner(sum2)); Assert.assertEquals(7, sum2.getSum()); IntegerSum sum3 = new IntegerSum(0); ImmutableList list3 = Lists.immutable.ofAll(ParallelIterateAcceptanceTest.createIntegerList(15)); ParallelIterate.forEach(list3, new SumProcedure(sum3), new SumCombiner(sum3), 1, list3.size() / 2); Assert.assertEquals(15, sum3.getSum()); IntegerSum sum4 = new IntegerSum(0); ImmutableList list4 = Lists.immutable.ofAll(ParallelIterateAcceptanceTest.createIntegerList(35)); ParallelIterate.forEach(list4, new SumProcedure(sum4), new SumCombiner(sum4)); Assert.assertEquals(35, sum4.getSum()); IntegerSum sum5 = new IntegerSum(0); ImmutableList list5 = FastList.newList(list4).toImmutable(); ParallelIterate.forEach(list5, new SumProcedure(sum5), new SumCombiner(sum5)); Assert.assertEquals(35, sum5.getSum()); IntegerSum sum6 = new IntegerSum(0); ImmutableList list6 = Lists.immutable.ofAll(ParallelIterateAcceptanceTest.createIntegerList(40)); ParallelIterate.forEach(list6, new SumProcedure(sum6), new SumCombiner(sum6), 1, list6.size() / 2); Assert.assertEquals(40, sum6.getSum()); IntegerSum sum7 = new IntegerSum(0); ImmutableList list7 = FastList.newList(list6).toImmutable(); ParallelIterate.forEach(list7, new SumProcedure(sum7), new SumCombiner(sum7), 1, list6.size() / 2); Assert.assertEquals(40, sum7.getSum()); } @Test public void testForEachWithException() { Verify.assertThrows(RuntimeException.class, () -> ParallelIterate.forEach( ParallelIterateAcceptanceTest.createIntegerList(5), new PassThruProcedureFactory<>(EXCEPTION_PROCEDURE), new PassThruCombiner<>(), 1, 5)); } @Test public void testForEachWithIndexToArrayUsingFastListSerialPath() { Integer[] array = new Integer[200]; FastList list = (FastList) Interval.oneTo(200).toList(); Assert.assertTrue(ArrayIterate.allSatisfy(array, Predicates.isNull())); ParallelIterate.forEachWithIndex(list, (each, index) -> array[index] = each); Assert.assertArrayEquals(array, list.toArray(new Integer[]{})); } @Test public void testForEachWithIndexToArrayUsingFastList() { Integer[] array = new Integer[200]; FastList list = (FastList) Interval.oneTo(200).toList(); Assert.assertTrue(ArrayIterate.allSatisfy(array, Predicates.isNull())); ParallelIterate.forEachWithIndex(list, (each, index) -> array[index] = each, 10, 10); Assert.assertArrayEquals(array, list.toArray(new Integer[]{})); } @Test public void testForEachWithIndexToArrayUsingImmutableList() { Integer[] array = new Integer[200]; ImmutableList list = Interval.oneTo(200).toList().toImmutable(); Assert.assertTrue(ArrayIterate.allSatisfy(array, Predicates.isNull())); ParallelIterate.forEachWithIndex(list, (each, index) -> array[index] = each, 10, 10); Assert.assertArrayEquals(array, list.toArray(new Integer[]{})); } @Test public void testForEachWithIndexToArrayUsingArrayList() { Integer[] array = new Integer[200]; List list = new ArrayList<>(Interval.oneTo(200)); Assert.assertTrue(ArrayIterate.allSatisfy(array, Predicates.isNull())); ParallelIterate.forEachWithIndex(list, (each, index) -> array[index] = each, 10, 10); Assert.assertArrayEquals(array, list.toArray(new Integer[]{})); } @Test public void testForEachWithIndexToArrayUsingFixedArrayList() { Integer[] array = new Integer[10]; Assert.assertTrue(ArrayIterate.allSatisfy(array, Predicates.isNull())); List list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); ParallelIterate.forEachWithIndex(list, (each, index) -> array[index] = each, 1, 2); Assert.assertArrayEquals(array, list.toArray(new Integer[list.size()])); } @Test public void testForEachWithIndexException() { Verify.assertThrows(RuntimeException.class, () -> ParallelIterate.forEachWithIndex( ParallelIterateAcceptanceTest.createIntegerList(5), new PassThruObjectIntProcedureFactory<>(EXCEPTION_OBJECT_INT_PROCEDURE), new PassThruCombiner<>(), 1, 5)); } @Test public void select() { this.iterables.forEach(Procedures.cast(this::basicSelect)); } private void basicSelect(RichIterable iterable) { Collection actual1 = ParallelIterate.select(iterable, Predicates.greaterThan(10000)); Collection actual2 = ParallelIterate.select(iterable, Predicates.greaterThan(10000), HashBag.newBag(), 3, this.executor, true); Collection actual3 = ParallelIterate.select(iterable, Predicates.greaterThan(10000), true); RichIterable expected = iterable.select(Predicates.greaterThan(10000)); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual1.getClass().getSimpleName(), expected, actual1); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual2.getClass().getSimpleName(), expected.toBag(), actual2); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual3.getClass().getSimpleName(), expected.toBag(), HashBag.newBag(actual3)); } @Test public void selectSortedSet() { RichIterable iterable = Interval.oneTo(20000).toSortedSet(); Collection actual1 = ParallelIterate.select(iterable, Predicates.greaterThan(10000)); Collection actual2 = ParallelIterate.select(iterable, Predicates.greaterThan(10000), true); RichIterable expected = iterable.select(Predicates.greaterThan(10000)); Assert.assertSame(expected.getClass(), actual1.getClass()); Assert.assertSame(expected.getClass(), actual2.getClass()); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual1.getClass().getSimpleName(), expected, actual1); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual2.getClass().getSimpleName(), expected, actual2); } @Test public void count() { this.iterables.forEach(Procedures.cast(this::basicCount)); } private void basicCount(RichIterable listIterable) { int actual1 = ParallelIterate.count(listIterable, Predicates.greaterThan(10000)); int actual2 = ParallelIterate.count(listIterable, Predicates.greaterThan(10000), 11, this.executor); Assert.assertEquals(10000, actual1); Assert.assertEquals(10000, actual2); } @Test public void reject() { this.iterables.forEach(Procedures.cast(this::basicReject)); } private void basicReject(RichIterable iterable) { Collection actual1 = ParallelIterate.reject(iterable, Predicates.greaterThan(10000)); Collection actual2 = ParallelIterate.reject(iterable, Predicates.greaterThan(10000), HashBag.newBag(), 3, this.executor, true); Collection actual3 = ParallelIterate.reject(iterable, Predicates.greaterThan(10000), true); RichIterable expected = iterable.reject(Predicates.greaterThan(10000)); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual1.getClass().getSimpleName(), expected, actual1); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual2.getClass().getSimpleName(), expected.toBag(), actual2); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual3.getClass().getSimpleName(), expected.toBag(), HashBag.newBag(actual3)); } @Test public void collect() { this.iterables.forEach(Procedures.cast(this::basicCollect)); } private void basicCollect(RichIterable iterable) { Collection actual1 = ParallelIterate.collect(iterable, String::valueOf); Collection actual2 = ParallelIterate.collect(iterable, String::valueOf, HashBag.newBag(), 3, this.executor, false); Collection actual3 = ParallelIterate.collect(iterable, String::valueOf, true); RichIterable expected = iterable.collect(String::valueOf); Verify.assertSize(20000, actual1); Verify.assertContains(String.valueOf(20000), actual1); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual1.getClass().getSimpleName(), expected, actual1); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual2.getClass().getSimpleName(), expected.toBag(), actual2); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual3.getClass().getSimpleName(), expected.toBag(), HashBag.newBag(actual3)); } @Test public void collectIf() { this.iterables.forEach(Procedures.cast(this::basicCollectIf)); } private void basicCollectIf(RichIterable collection) { Predicate greaterThan = Predicates.greaterThan(10000); Collection actual1 = ParallelIterate.collectIf(collection, greaterThan, String::valueOf); Collection actual2 = ParallelIterate.collectIf(collection, greaterThan, String::valueOf, HashBag.newBag(), 3, this.executor, true); Collection actual3 = ParallelIterate.collectIf(collection, greaterThan, String::valueOf, HashBag.newBag(), 3, this.executor, true); Bag expected = collection.collectIf(greaterThan, String::valueOf).toBag(); Verify.assertSize(10000, actual1); Verify.assertNotContains(String.valueOf(9000), actual1); Verify.assertNotContains(String.valueOf(21000), actual1); Verify.assertContains(String.valueOf(15976), actual1); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual1.getClass().getSimpleName(), expected, HashBag.newBag(actual1)); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual2.getClass().getSimpleName(), expected, actual2); Assert.assertEquals(expected.getClass().getSimpleName() + '/' + actual3.getClass().getSimpleName(), expected, actual3); } @Test public void flatCollect() { this.iterables.forEach(Procedures.cast(this::basicFlatCollect)); } private void basicFlatCollect(RichIterable iterable) { Collection actual1 = ParallelIterate.flatCollect(iterable, INT_TO_TWO_STRINGS); Collection actual2 = ParallelIterate.flatCollect(iterable, INT_TO_TWO_STRINGS, HashBag.newBag(), 3, this.executor, false); Collection actual3 = ParallelIterate.flatCollect(iterable, INT_TO_TWO_STRINGS, true); RichIterable expected1 = iterable.flatCollect(INT_TO_TWO_STRINGS); RichIterable expected2 = iterable.flatCollect(INT_TO_TWO_STRINGS, HashBag.newBag()); Verify.assertContains(String.valueOf(20000), actual1); Assert.assertEquals(expected1.getClass().getSimpleName() + '/' + actual1.getClass().getSimpleName(), expected1, actual1); Assert.assertEquals(expected2.getClass().getSimpleName() + '/' + actual2.getClass().getSimpleName(), expected2, actual2); Assert.assertEquals(expected1.getClass().getSimpleName() + '/' + actual3.getClass().getSimpleName(), expected1.toBag(), HashBag.newBag(actual3)); } @Test public void groupBy() { FastList iterable = FastList.newWithNValues(10000000, new Function0() { private int current; public Integer value() { if (this.current < 4) { return Integer.valueOf(this.current++); } this.current = 0; return Integer.valueOf(4); } }); iterable.shuffleThis(); Multimap expected = iterable.toBag().groupBy(String::valueOf); Multimap expectedAsSet = iterable.toSet().groupBy(String::valueOf); Multimap result1 = ParallelIterate.groupBy(iterable.toList(), String::valueOf, 100); Assert.assertEquals(expected, HashBagMultimap.newMultimap(result1)); Multimap result2 = ParallelIterate.groupBy(iterable.toList(), String::valueOf); Assert.assertEquals(expected, HashBagMultimap.newMultimap(result2)); Multimap result3 = ParallelIterate.groupBy(iterable.toSet(), String::valueOf, SynchronizedPutUnifiedSetMultimap.newMultimap(), 100); Assert.assertEquals(expectedAsSet, result3); Multimap result4 = ParallelIterate.groupBy(iterable.toSet(), String::valueOf, SynchronizedPutUnifiedSetMultimap.newMultimap()); Assert.assertEquals(expectedAsSet, result4); Multimap result5 = ParallelIterate.groupBy(iterable.toSortedSet(), String::valueOf, SynchronizedPutUnifiedSetMultimap.newMultimap(), 100); Assert.assertEquals(expectedAsSet, result5); Multimap result6 = ParallelIterate.groupBy(iterable.toSortedSet(), String::valueOf, SynchronizedPutUnifiedSetMultimap.newMultimap()); Assert.assertEquals(expectedAsSet, result6); Multimap result7 = ParallelIterate.groupBy(iterable.toBag(), String::valueOf, SynchronizedPutHashBagMultimap.newMultimap(), 100); Assert.assertEquals(expected, result7); Multimap result8 = ParallelIterate.groupBy(iterable.toBag(), String::valueOf, SynchronizedPutHashBagMultimap.newMultimap()); Assert.assertEquals(expected, result8); Multimap result9 = ParallelIterate.groupBy(iterable.toList().toImmutable(), String::valueOf); Assert.assertEquals(expected, HashBagMultimap.newMultimap(result9)); Multimap result10 = ParallelIterate.groupBy(iterable.toSortedList(), String::valueOf, 100); Assert.assertEquals(expected, HashBagMultimap.newMultimap(result10)); Multimap result11 = ParallelIterate.groupBy(iterable.toSortedList(), String::valueOf); Assert.assertEquals(expected, HashBagMultimap.newMultimap(result11)); Multimap result12 = ParallelIterate.groupBy(iterable, String::valueOf, MultiReaderFastListMultimap.newMultimap(), 100); Assert.assertEquals(expected, HashBagMultimap.newMultimap(result12)); Multimap result13 = ParallelIterate.groupBy(iterable, String::valueOf, MultiReaderFastListMultimap.newMultimap()); Assert.assertEquals(expected, HashBagMultimap.newMultimap(result13)); Multimap result14 = ParallelIterate.groupBy(iterable, String::valueOf, MultiReaderHashBagMultimap.newMultimap(), 100); Assert.assertEquals(expected, result14); Multimap result15 = ParallelIterate.groupBy(iterable, String::valueOf, MultiReaderHashBagMultimap.newMultimap()); Assert.assertEquals(expected, result15); Multimap result16 = ParallelIterate.groupBy(iterable, String::valueOf, MultiReaderUnifiedSetMultimap.newMultimap(), 100); Assert.assertEquals(expectedAsSet, result16); Multimap result17 = ParallelIterate.groupBy(iterable, String::valueOf, MultiReaderUnifiedSetMultimap.newMultimap()); Assert.assertEquals(expectedAsSet, result17); } @Test public void aggregateInPlaceBy() { Procedure2 countAggregator = (aggregate, value) -> aggregate.incrementAndGet(); List list = Interval.oneTo(20000); MutableMap aggregation = ParallelIterate.aggregateInPlaceBy(list, EVEN_OR_ODD, ATOMIC_INTEGER_NEW, countAggregator); Assert.assertEquals(10000, aggregation.get("Even").intValue()); Assert.assertEquals(10000, aggregation.get("Odd").intValue()); ParallelIterate.aggregateInPlaceBy(list, EVEN_OR_ODD, ATOMIC_INTEGER_NEW, countAggregator, aggregation); Assert.assertEquals(20000, aggregation.get("Even").intValue()); Assert.assertEquals(20000, aggregation.get("Odd").intValue()); } @Test public void aggregateInPlaceByWithBatchSize() { MutableList list = LazyIterate.adapt(Collections.nCopies(1000, 1)) .concatenate(Collections.nCopies(2000, 2)) .concatenate(Collections.nCopies(3000, 3)) .toList() .shuffleThis(); MapIterable aggregation = ParallelIterate.aggregateInPlaceBy(list, String::valueOf, ATOMIC_INTEGER_NEW, AtomicInteger::addAndGet, 100); Assert.assertEquals(1000, aggregation.get("1").intValue()); Assert.assertEquals(4000, aggregation.get("2").intValue()); Assert.assertEquals(9000, aggregation.get("3").intValue()); } private static List createIntegerList(int size) { return Collections.nCopies(size, Integer.valueOf(1)); } private class RecursiveProcedure implements Procedure { private static final long serialVersionUID = 1L; private final ExecutorService executorService = ParallelIterate.newPooledExecutor("ParallelIterateTest", false); @Override public void value(Integer level) { if (level > 0) { ParallelIterateAcceptanceTest.this.threadNames.add(Thread.currentThread().getName()); this.executeParallelIterate(level - 1, this.executorService); } else { this.simulateWork(); } } private void simulateWork() { synchronized (ParallelIterateAcceptanceTest.this) { ParallelIterateAcceptanceTest.this.count++; } } private void executeParallelIterate(int level, ExecutorService executorService) { MutableList items = Lists.mutable.of(); for (int i = 0; i < 20000; i++) { items.add(i % 1000 == 0 ? level : 0); } ParallelIterate.forEach(items, new RecursiveProcedure(), executorService); } } public static final class IntegerSum { private int sum; public IntegerSum(int newSum) { this.sum = newSum; } public IntegerSum add(int value) { this.sum += value; return this; } public int getSum() { return this.sum; } } public static final class SumProcedure implements Procedure, Function2, ProcedureFactory { private static final long serialVersionUID = 1L; private final IntegerSum sum; public SumProcedure(IntegerSum newSum) { this.sum = newSum; } @Override public SumProcedure create() { return new SumProcedure(new IntegerSum(0)); } @Override public IntegerSum value(IntegerSum s1, Integer s2) { return s1.add(s2); } @Override public void value(Integer object) { this.sum.add(object); } public int getSum() { return this.sum.getSum(); } } public static final class SumCombiner extends AbstractProcedureCombiner { private static final long serialVersionUID = 1L; private final IntegerSum sum; public SumCombiner(IntegerSum initialSum) { super(true); this.sum = initialSum; } @Override public void combineOne(SumProcedure sumProcedure) { this.sum.add(sumProcedure.getSum()); } } } eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/set/000077500000000000000000000000001407344533200322165ustar00rootroot00000000000000mutable/000077500000000000000000000000001407344533200335705ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/setUnifiedSetAcceptanceTest.java000066400000000000000000000624541407344533200413140ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/set/mutable/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.impl.set.mutable; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Random; import java.util.Set; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.set.MutableSet; import org.eclipse.collections.impl.CollidingInt; import org.eclipse.collections.impl.block.factory.Procedures; import org.eclipse.collections.impl.factory.Lists; import org.eclipse.collections.impl.list.mutable.FastList; import org.eclipse.collections.impl.test.SerializeTestHelper; import org.eclipse.collections.impl.test.Verify; import org.junit.Assert; import org.junit.Test; /** * JUnit test suite for {@link UnifiedSet}. */ public class UnifiedSetAcceptanceTest { @Test public void testUnifiedSetWithCollisions() { for (int removeStride = 2; removeStride < 9; removeStride++) { assertUnifiedSetWithCollisions(0, removeStride); assertUnifiedSetWithCollisions(1, removeStride); assertUnifiedSetWithCollisions(2, removeStride); assertUnifiedSetWithCollisions(3, removeStride); assertUnifiedSetWithCollisions(4, removeStride); } } private static void assertUnifiedSetWithCollisions(int shift, int removeStride) { UnifiedSet set = UnifiedSet.newSet(); int size = 84000; // divisible by every integer between 2 and 8 for (int i = 0; i < size; i++) { Assert.assertTrue(set.add(new CollidingInt(i, shift))); } Verify.assertSize(size, set); for (int i = 0; i < size; i++) { Verify.assertContains(new CollidingInt(i, shift), set); } for (int i = 0; i < size; i += removeStride) { Assert.assertTrue(set.remove(new CollidingInt(i, shift))); } Verify.assertSize(size - size / removeStride, set); for (int i = 0; i < size; i++) { if (i % removeStride == 0) { Verify.assertNotContains(new CollidingInt(i, shift), set); } else { Verify.assertContains(new CollidingInt(i, shift), set); } } for (int i = 0; i < size; i++) { set.remove(new CollidingInt(i, shift)); } Verify.assertEmpty(set); } @Test public void testUnifiedSetWithCollisionsAndNullKey() { for (int removeStride = 2; removeStride < 9; removeStride++) { setupAndAssertUnifiedSetWithCollisionsAndNullKey(0, removeStride); setupAndAssertUnifiedSetWithCollisionsAndNullKey(1, removeStride); setupAndAssertUnifiedSetWithCollisionsAndNullKey(2, removeStride); setupAndAssertUnifiedSetWithCollisionsAndNullKey(3, removeStride); setupAndAssertUnifiedSetWithCollisionsAndNullKey(4, removeStride); } } private static void setupAndAssertUnifiedSetWithCollisionsAndNullKey(int shift, int removeStride) { UnifiedSet set = UnifiedSet.newSet(); Verify.assertEmpty(set); int size = 84000; for (int i = 0; i < size; i++) { Assert.assertTrue(set.add(new CollidingInt(i, shift))); } set.add(null); UnifiedSet clone = set.clone(); assertUnifiedSetWithCollisionsAndNullKey(shift, removeStride, clone, size); assertUnifiedSetWithCollisionsAndNullKey(shift, removeStride, set, size); } private static void assertUnifiedSetWithCollisionsAndNullKey( int shift, int removeStride, UnifiedSet set, int size) { Verify.assertSize(size + 1, set); for (int i = 0; i < size; i++) { Verify.assertContains(new CollidingInt(i, shift), set); } Verify.assertContains(null, set); for (int i = 0; i < size; i += removeStride) { Assert.assertTrue(set.remove(new CollidingInt(i, shift))); } Verify.assertSize(size - size / removeStride + 1, set); for (int i = 0; i < size; i++) { if (i % removeStride != 0) { Verify.assertContains(new CollidingInt(i, shift), set); } } Verify.assertContains(null, set); set.remove(null); Verify.assertNotContains(null, set); } @Test public void testUnifiedSet() { UnifiedSet set = UnifiedSet.newSet(); int size = 100000; for (int i = 0; i < size; i++) { Assert.assertTrue(set.add(i)); } Verify.assertSize(size, set); for (int i = 0; i < size; i++) { Verify.assertContains(i, set); } for (int i = 0; i < size; i += 2) { Assert.assertTrue(set.remove(i)); } Verify.assertSize(size / 2, set); for (int i = 1; i < size; i += 2) { Verify.assertContains(i, set); } } @Test public void testUnifiedSetClear() { assertUnifiedSetClear(0); assertUnifiedSetClear(1); assertUnifiedSetClear(2); assertUnifiedSetClear(3); } private static void assertUnifiedSetClear(int shift) { UnifiedSet set = UnifiedSet.newSet(); int size = 100000; for (int i = 0; i < size; i++) { Assert.assertTrue(set.add(new CollidingInt(i, shift))); } set.clear(); Verify.assertEmpty(set); for (int i = 0; i < size; i++) { Verify.assertNotContains(new CollidingInt(i, shift), set); } } @Test public void testUnifiedSetForEach() { assertUnifiedSetForEach(0); assertUnifiedSetForEach(1); assertUnifiedSetForEach(2); assertUnifiedSetForEach(3); } private static void assertUnifiedSetForEach(int shift) { UnifiedSet set = UnifiedSet.newSet(); int size = 100000; for (int i = 0; i < size; i++) { Assert.assertTrue(set.add(new CollidingInt(i, shift))); } MutableList keys = FastList.newList(size); set.forEach(Procedures.cast(keys::add)); Verify.assertSize(size, keys); Collections.sort(keys); for (int i = 0; i < size; i++) { Verify.assertItemAtIndex(new CollidingInt(i, shift), i, keys); } } @Test public void testUnifiedSetForEachWith() { assertUnifiedSetForEachWith(0); assertUnifiedSetForEachWith(1); assertUnifiedSetForEachWith(2); assertUnifiedSetForEachWith(3); } private static void assertUnifiedSetForEachWith(int shift) { UnifiedSet set = UnifiedSet.newSet(); int size = 100000; for (int i = 0; i < size; i++) { Assert.assertTrue(set.add(new CollidingInt(i, shift))); } MutableList keys = FastList.newList(size); set.forEachWith((key, s) -> { Assert.assertEquals("foo", s); keys.add(key); }, "foo"); Verify.assertSize(size, keys); Collections.sort(keys); for (int i = 0; i < size; i++) { Verify.assertItemAtIndex(new CollidingInt(i, shift), i, keys); } } @Test public void testUnifiedSetForEachWithIndex() { assertUnifiedSetForEachWithIndex(0); assertUnifiedSetForEachWithIndex(1); assertUnifiedSetForEachWithIndex(2); assertUnifiedSetForEachWithIndex(3); } private static void assertUnifiedSetForEachWithIndex(int shift) { UnifiedSet set = UnifiedSet.newSet(); int size = 100000; for (int i = 0; i < size; i++) { Assert.assertTrue(set.add(new CollidingInt(i, shift))); } MutableList keys = FastList.newList(size); int[] prevIndex = new int[1]; set.forEachWithIndex((key, index) -> { Assert.assertEquals(prevIndex[0], index); prevIndex[0]++; keys.add(key); }); Verify.assertSize(size, keys); Collections.sort(keys); for (int i = 0; i < size; i++) { Verify.assertItemAtIndex(new CollidingInt(i, shift), i, keys); } } @Test public void testUnifiedSetAddAll() { assertUnifiedSetAddAll(0); assertUnifiedSetAddAll(1); assertUnifiedSetAddAll(2); assertUnifiedSetAddAll(3); } private static void assertUnifiedSetAddAll(int shift) { UnifiedSet set = UnifiedSet.newSet(); int size = 100000; for (int i = 0; i < size; i++) { set.add(new CollidingInt(i, shift)); } UnifiedSet newSet = UnifiedSet.newSet(size); newSet.addAll(set); Verify.assertSize(size, newSet); for (int i = 0; i < size; i++) { Verify.assertContains(new CollidingInt(i, shift), newSet); } } @Test public void testUnifiedSetAddAllWithHashSet() { assertUnifiedSetAddAllWithHashSet(0); assertUnifiedSetAddAllWithHashSet(1); assertUnifiedSetAddAllWithHashSet(2); assertUnifiedSetAddAllWithHashSet(3); } private static void assertUnifiedSetAddAllWithHashSet(int shift) { Set set = new HashSet<>(); int size = 100000; for (int i = 0; i < size; i++) { set.add(new CollidingInt(i, shift)); } UnifiedSet newSet = UnifiedSet.newSet(size); newSet.addAll(set); Verify.assertSize(size, newSet); for (int i = 0; i < size; i++) { Verify.assertContains(new CollidingInt(i, shift), newSet); } UnifiedSet newSet2 = UnifiedSet.newSet(); newSet2.addAll(set); Verify.assertSize(size, newSet2); for (int i = 0; i < size; i++) { Verify.assertContains(new CollidingInt(i, shift), newSet2); } } @Test public void testUnifiedSetReplace() { assertUnifiedSetReplace(0); assertUnifiedSetReplace(1); assertUnifiedSetReplace(2); assertUnifiedSetReplace(3); } private static void assertUnifiedSetReplace(int shift) { UnifiedSet set = UnifiedSet.newSet(); int size = 100000; for (int i = 0; i < size; i++) { set.add(new CollidingInt(i, shift)); } for (int i = 0; i < size; i++) { set.add(new CollidingInt(i, shift)); } Verify.assertSize(size, set); for (int i = 0; i < size; i++) { Verify.assertContains(new CollidingInt(i, shift), set); } } @Test public void testUnifiedSetRetainAllFromList() { runUnifiedSetRetainAllFromList(0); runUnifiedSetRetainAllFromList(1); runUnifiedSetRetainAllFromList(2); runUnifiedSetRetainAllFromList(3); } private static void runUnifiedSetRetainAllFromList(int shift) { UnifiedSet set = UnifiedSet.newSet(); MutableList toRetain = Lists.mutable.of(); int size = 100000; for (int i = 0; i < size; i++) { set.add(new CollidingInt(i, shift)); if (i % 2 == 0) { toRetain.add(new CollidingInt(i, shift)); } } Verify.assertSize(size, set); Assert.assertTrue(set.containsAll(toRetain)); Assert.assertTrue(set.retainAll(toRetain)); Assert.assertTrue(set.containsAll(toRetain)); Assert.assertFalse(set.retainAll(toRetain)); // a second call should not modify the set Verify.assertSize(size / 2, set); for (int i = 0; i < size; i += 2) { Verify.assertContains(new CollidingInt(i, shift), set); } } @Test public void testUnifiedSetRetainAllFromSet() { runUnifiedSetRetainAllFromSet(0); runUnifiedSetRetainAllFromSet(1); runUnifiedSetRetainAllFromSet(2); runUnifiedSetRetainAllFromSet(3); } private static void runUnifiedSetRetainAllFromSet(int shift) { UnifiedSet set = UnifiedSet.newSet(); Set toRetain = new HashSet<>(); int size = 100000; for (int i = 0; i < size; i++) { set.add(new CollidingInt(i, shift)); if (i % 2 == 0) { toRetain.add(new CollidingInt(i, shift)); } } Verify.assertSize(size, set); Assert.assertTrue(set.containsAll(toRetain)); Assert.assertTrue(set.retainAll(toRetain)); Assert.assertTrue(set.containsAll(toRetain)); Assert.assertFalse(set.retainAll(toRetain)); // a second call should not modify the set Verify.assertSize(size / 2, set); for (int i = 0; i < size; i += 2) { Verify.assertContains(new CollidingInt(i, shift), set); } } @Test public void testUnifiedSetToArray() { runUnifiedSetToArray(0); runUnifiedSetToArray(1); runUnifiedSetToArray(2); runUnifiedSetToArray(3); } private static void runUnifiedSetToArray(int shift) { UnifiedSet set = UnifiedSet.newSet(); int size = 100000; for (int i = 0; i < size; i++) { set.add(new CollidingInt(i, shift)); } Verify.assertSize(size, set); Object[] keys = set.toArray(); Assert.assertEquals(size, keys.length); Arrays.sort(keys); for (int i = 0; i < size; i++) { Verify.assertItemAtIndex(new CollidingInt(i, shift), i, keys); } } @Test public void testUnifiedSetIterator() { runUnifiedSetIterator(0); runUnifiedSetIterator(1); runUnifiedSetIterator(2); runUnifiedSetIterator(3); } private static void runUnifiedSetIterator(int shift) { UnifiedSet set = UnifiedSet.newSet(); int size = 100000; for (int i = 0; i < size; i++) { set.add(new CollidingInt(i, shift)); } Verify.assertSize(size, set); CollidingInt[] keys = new CollidingInt[size]; int count = 0; for (CollidingInt collidingInt : set) { keys[count++] = collidingInt; } Arrays.sort(keys); for (int i = 0; i < size; i++) { Assert.assertEquals(new CollidingInt(i, shift), keys[i]); } } @Test public void testUnifiedSetIteratorRemove() { for (int removeStride = 2; removeStride < 9; removeStride++) { runUnifiedSetIteratorRemove(0, removeStride); runUnifiedSetIteratorRemove(1, removeStride); runUnifiedSetIteratorRemove(2, removeStride); runUnifiedSetIteratorRemove(3, removeStride); } } private static void runUnifiedSetIteratorRemove(int shift, int removeStride) { UnifiedSet set = UnifiedSet.newSet(); int size = 100000; for (int i = 0; i < size; i++) { set.add(new CollidingInt(i, shift)); } Verify.assertSize(size, set); int count = 0; for (Iterator it = set.iterator(); it.hasNext(); ) { CollidingInt key = it.next(); count++; if (key.getValue() % removeStride == 0) { it.remove(); } } Assert.assertEquals(size, count); for (int i = 0; i < size; i++) { if (i % removeStride != 0) { Verify.assertContains( "set contains " + i + "for shift " + shift + " and remove stride " + removeStride, new CollidingInt(i, shift), set); } } } @Test public void testUnifiedSetIteratorRemoveFlip() { for (int removeStride = 2; removeStride < 9; removeStride++) { runUnifiedSetKeySetIteratorRemoveFlip(0, removeStride); runUnifiedSetKeySetIteratorRemoveFlip(1, removeStride); runUnifiedSetKeySetIteratorRemoveFlip(2, removeStride); runUnifiedSetKeySetIteratorRemoveFlip(3, removeStride); } } private static void runUnifiedSetKeySetIteratorRemoveFlip(int shift, int removeStride) { UnifiedSet set = UnifiedSet.newSet(); int size = 100000; for (int i = 0; i < size; i++) { set.add(new CollidingInt(i, shift)); } Verify.assertSize(size, set); int count = 0; for (Iterator it = set.iterator(); it.hasNext(); ) { CollidingInt key = it.next(); count++; if (key.getValue() % removeStride != 0) { it.remove(); } } Assert.assertEquals(size, count); for (int i = 0; i < size; i++) { if (i % removeStride == 0) { Verify.assertContains( "set contains " + i + "for shift " + shift + " and remove stride " + removeStride, new CollidingInt(i, shift), set); } } } @Test public void testUnifiedSetSerialize() { runUnifiedSetSerialize(0); runUnifiedSetSerialize(1); runUnifiedSetSerialize(2); runUnifiedSetSerialize(3); } private static void runUnifiedSetSerialize(int shift) { UnifiedSet set = UnifiedSet.newSet(); int size = 100000; for (int i = 0; i < size; i++) { set.add(new CollidingInt(i, shift)); } set.add(null); set = SerializeTestHelper.serializeDeserialize(set); Verify.assertSize(size + 1, set); for (int i = 0; i < size; i++) { Verify.assertContains(new CollidingInt(i, shift), set); } Verify.assertContains(null, set); } public static T[] shuffle(T[] array) { Object[] result = new Object[array.length]; Random rand = new Random(12345678912345L); int left = array.length; for (int i = 0; i < array.length; i++) { int chosen = rand.nextInt(left); result[i] = array[chosen]; left--; array[chosen] = array[left]; array[left] = null; } System.arraycopy(result, 0, array, 0, array.length); return array; } @Test public void testUnifiedSetEqualsAndHashCode() { assertUnifiedSetEqualsAndHashCode(0); assertUnifiedSetEqualsAndHashCode(1); assertUnifiedSetEqualsAndHashCode(2); assertUnifiedSetEqualsAndHashCode(3); } private static void assertUnifiedSetEqualsAndHashCode(int shift) { MutableSet set1 = UnifiedSet.newSet(); Set set2 = new HashSet<>(); MutableSet set3 = UnifiedSet.newSet(); MutableSet set4 = UnifiedSet.newSet(); int size = 100000; for (int i = 0; i < size; i++) { set1.add(new CollidingInt(i, shift)); set2.add(new CollidingInt(i, shift)); set3.add(new CollidingInt(i, shift)); set4.add(new CollidingInt(size - i - 1, shift)); } Verify.assertSetsEqual(set2, set1); Verify.assertSetsEqual(set1, set2); Verify.assertEqualsAndHashCode(set2, set1); Verify.assertSetsEqual(set1, set3); Verify.assertEqualsAndHashCode(set1, set3); Verify.assertSetsEqual(set2, set4); Verify.assertSetsEqual(set4, set2); Verify.assertEqualsAndHashCode(set2, set4); } @Test public void testUnifiedSetRemoveAll() { runUnifiedSetRemoveAll(0); runUnifiedSetRemoveAll(1); runUnifiedSetRemoveAll(2); runUnifiedSetRemoveAll(3); } private static void runUnifiedSetRemoveAll(int shift) { UnifiedSet set = UnifiedSet.newSet(); List toRemove = new ArrayList<>(); int size = 100000; for (int i = 0; i < size; i++) { set.add(new CollidingInt(i, shift)); if (i % 2 == 0) { toRemove.add(new CollidingInt(i, shift)); } } Verify.assertSize(size, set); Assert.assertTrue(set.removeAll(toRemove)); Assert.assertFalse(set.removeAll(toRemove)); // a second call should not modify the set Verify.assertSize(size / 2, set); for (int i = 1; i < size; i += 2) { Verify.assertContains(new CollidingInt(i, shift), set); } } @Test public void testUnifiedSetPutDoesNotReplace() { this.assertUnifiedSetPutDoesNotReplace(0); this.assertUnifiedSetPutDoesNotReplace(1); this.assertUnifiedSetPutDoesNotReplace(2); this.assertUnifiedSetPutDoesNotReplace(3); this.assertUnifiedSetPutDoesNotReplace(4); } private void assertUnifiedSetPutDoesNotReplace(int shift) { UnifiedSet set = UnifiedSet.newSet(); for (int i = 0; i < 1000; i++) { Assert.assertTrue(set.add(new CollidingIntWithFlag(i, shift, false))); } Assert.assertEquals(1000, set.size()); for (int i = 0; i < 1000; i++) { Assert.assertFalse(set.add(new CollidingIntWithFlag(i, shift, true))); } Assert.assertEquals(1000, set.size()); for (CollidingIntWithFlag ciwf : set) { Assert.assertFalse(ciwf.flag); } } @Test public void testUnifiedSetAsPool() { this.runUnifiedSetAsPool(0); this.runUnifiedSetAsPool(1); this.runUnifiedSetAsPool(2); this.runUnifiedSetAsPool(3); } private void runUnifiedSetAsPool(int shift) { CollidingInt[] toPool = new CollidingInt[5000]; UnifiedSet set = new UnifiedSet<>(); for (int i = 0; i < toPool.length; i++) { toPool[i] = new CollidingInt(i, shift); Assert.assertSame(toPool[i], set.put(toPool[i])); } for (int i = 0; i < toPool.length; i++) { Assert.assertSame(toPool[i], set.put(new CollidingInt(i, shift))); } Random random = new Random(); for (int i = 0; i < toPool.length * 4; i++) { int x = random.nextInt(toPool.length); Assert.assertSame(toPool[x], set.put(new CollidingInt(x, shift))); } for (int i = 0; i < toPool.length; i++) { Assert.assertSame(toPool[i], set.get(toPool[i])); } for (int i = 0; i < toPool.length * 4; i++) { int x = random.nextInt(toPool.length); Assert.assertSame(toPool[x], set.removeFromPool(new CollidingInt(x, shift))); toPool[x] = null; } } @Test public void testUnifiedSetAsPoolRandomInput() { this.runUnifiedSetAsPoolRandomInput(0); this.runUnifiedSetAsPoolRandomInput(1); this.runUnifiedSetAsPoolRandomInput(2); this.runUnifiedSetAsPoolRandomInput(3); } private void runUnifiedSetAsPoolRandomInput(int shift) { CollidingInt[] toPool = new CollidingInt[5000]; for (int i = 0; i < toPool.length; i++) { toPool[i] = new CollidingInt(i, shift); } toPool = shuffle(toPool); UnifiedSet set = new UnifiedSet<>(); for (int i = 0; i < toPool.length; i++) { Assert.assertSame(toPool[i], set.put(toPool[i])); } for (int i = 0; i < toPool.length; i++) { Assert.assertSame(toPool[i], set.put(new CollidingInt(toPool[i].getValue(), shift))); } Random random = new Random(); for (int i = 0; i < toPool.length * 4; i++) { int x = random.nextInt(toPool.length); Assert.assertSame(toPool[x], set.put(new CollidingInt(toPool[x].getValue(), shift))); } for (int i = 0; i < toPool.length; i++) { Assert.assertSame(toPool[i], set.get(toPool[i])); } } private static final class CollidingIntWithFlag extends CollidingInt { private static final long serialVersionUID = 1L; private final boolean flag; private CollidingIntWithFlag(int value, int shift, boolean flag) { super(value, shift); this.flag = flag; } } } eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/utility/000077500000000000000000000000001407344533200331265ustar00rootroot00000000000000ArrayListIterateAcceptanceTest.java000066400000000000000000000021061407344533200417500ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/acceptance-tests/src/test/java/org/eclipse/collections/impl/utility/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.impl.utility; import java.util.ArrayList; import org.eclipse.collections.impl.list.Interval; import org.eclipse.collections.impl.test.Verify; import org.junit.Test; /** * JUnit test for {@link ArrayListIterate}. */ public class ArrayListIterateAcceptanceTest { @Test public void testSortOnListWithMoreThan10Elements() { ArrayList integers = new ArrayList<>(Interval.toReverseList(1, 10000)); Verify.assertStartsWith(ArrayListIterate.sortThis(integers), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10); Verify.assertEndsWith(integers, 9997, 9998, 9999, 10000); } } eclipse-collections-11.0.0.M3/artwork/000077500000000000000000000000001407344533200175055ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/artwork/eclipse-collections-logo.pdf000066400000000000000000000144321407344533200251020ustar00rootroot00000000000000%PDF-1.5 %µí®û 3 0 obj << /Length 4 0 R /Filter /FlateDecode >> stream xœ…[Ir%;rÜç)Þ”Â<CG=Sõ_<.ºûþfr÷Éb}ëÚ3‘@ wêŸW¸cOµÌ~Éü‡_²ýò¯¼þûÃëÿ¾r÷Ìå•{½SI¯¯Wªý.³ížzF˜¯Ü&HhÏ»÷Žv¹FK-ß%¤ ñŽ%¾Þèêw诶ŠWz¼ûÄ+µÞ34´û]O/Œz·TWÏõJ3ß¡â£uÜ2Íy6ù­¤7VOwé™óœíŽ!½r÷lítãyÌ«tØ_ãne mò³åž\J©wHíp7¬½Ø€ÓƬf\íK+÷ý<‚ å>5 fØ]“è)óŠo´ª‰ÖsñçÀ¹ÖœÊ+•y‡ŒZ¸CÓÚ0ÁšÌÂ\cÂà kÌ[ˆŸv£y5¯Õ5ìVÑîØX¬vl©ùN\ÌVK׼ƱK¨wÁ^¤VïÆ…³x/wˆi5i«t§÷ßaÌŽð}È k±ë#¶×Å-æJC ü\Ά9b„ã{íîcâ]ôµÞ`>|¬bv_úÎà¦yÏG=•öðTÌ ágxgÂýæÔ¦–Q.­KçÔ£m<C¥>î*=¾ pS¼KûH—ú(ŽGŸÌy”ž0iüŒL&_R›¡ˆ‰ù”óH²dÇ´ÒbáN_3™)Ì3¼/GÖ%·€½­(¡…ß§ÃÒßfÎ`F>ÇgX0#º.ó€4¦eczuÎ y& "áÊÜí·|E™r=Qç~iˆÈýæ§ô矾 FÃÂ_6AL¾"rHœ¯ÿbÈâ‘ýžAh£aïa…2,†ŠçARA¡¢™²dÁ¤ã`@XÐy›V­t#}`íCC;8e]f!L½$”­å‚~^`‹úÕ®zóýè)ª 6šØ4®ó X~LyÚšE„{·¸çÈ*í¬ÁÛxaÐäô½õȰ=Ú# ÷ÿó „sŒ¦ÑùDÑz4K†Önïuìd1zÒ5 ?¾‘ƒ*Ô{Íâ2s2GÛ<µ¿m†vý÷ýùõgÁcœF¬l¹Ü‰AÁmøZÌøxĘÞÁWX‚>Z·÷уÌÇpX=…5tZp¤7މ½å®¿ÑÂÂÍUa%L`Yi¦tÚ<¸##{w5.iˆI§«–0 ‹,S*ª¢¤ ú=SRÚ°I+?Oùiji·ßZZ>ÜîY ¢¤,‰Í0Ìì6«Õ%sUØâ¯ ÛŒ]±ð ±¿ÎSÞó9=¬CÖ“"¦¢Þ|?] iqÐÚpœÉÕxßÎM+ö'°¾LÄ„\0ð³–Ö&lË]n•øÊ™JDãà§ ³§ªç½Ø ¸m¡8:<‚L6mB‘tgn_©ò<ƒa&m¦F ÂDgžÞdÉfÃÜß”¤»ÜŸ%yëws¾ÿhb8.r0=–%z¨¤ï@F&Œ&I>Yz²O³Ú"DJ'ÆðT«ªT°rþÆ}ÑXxd–Ñ1;]z²·ù·vmÓ ,‘« AÇ…!{ܦޙ¾Ëô\‡Yð'Ût&ºv=mùi¿¢G¸4&?´…E°±5Ã}`Þè…©{# ™3~&PUAv)L+KïZ«N§³‡*ÈF"#uÈV,¡pJÀt™6­Va2D»¢™QÌ´RY8)bÿO›®05©ÝÓY—1+Ì&2µ¹Uw!-!;Y)ݳ}0Çãþ-¬Ràˆ±,(m¯Èàñ<2‡â„CÐ6YªW}# z³+–qÑo¦3ø›üªBô]ÜŠ_U¢ð6½1Òã ¤@'´‰ÑŽ–ÔiE ›öQr µB¶bFxpÚfºëýè –1Ð&Û`Ù 4¥eŽèŽî˜IœG¥‡ÑŽ)ŠÁp¿dC ƒ©ú—µZ3]fœa¶ æl“´—ô µBcyJéuÚ‘ðUÆ´x;)J%TÞTi|²Ó¬¨Ci¸¿ÒÛIëP9 ÊÑ4v­õ³¹2ÌõM­Ý3ØãšÆuÔNãe§’M›^àöÜ!}ìÇïÉDIçG‚ùuÕÆí¬t —-_bm›Ã×D¬V7‡¯Gµ<9|%JLisøJjQ6EË"ˆÇƒÄ#îŒM/j`ÞH<¼Î$~÷l_ÇÜ$¾âU`˜Câ+é´ØÏ"ñü¬ÄI<ØèÂØ½"ûV>Y<è#Ši9pùy“øš”%‡¯(Œ9æÍák$³(‡Ã×Hò‘¾ÆäXÁ8|ÑÖ8üio¿»œÃW&m¬søÝ¥6‡ç¶N'áDô@uæ·NÒk±´¿I|Å’vüï˜>óæ"ñÜ0i‡ÄWÎ_éÑH¼y[\$~7$^Î&ö»ˆ-¿#¼I<·Qáâ$¾21³;® #§‡çÌS‹‚W†Ui›³¯•Ï=¯]¾fÎ>Qp/$+†{4®R‘‘x_Öõz’øŸkýu%˜ªJ*Euìëµ{q jIÄèÔeÈý¨­¨…°æ*­I¯_.©Q>Z`«¤aÈ”²é0×Y%!õË AEH#1ÛE"@ˆ*­žâ£Ü1jO¦ôQvˆR·¬K¢`0Õ¨+¹Su2©Ï¿JÑŽŸj…‰‚" V™´²t½oV×ì%6V‰u؈ЇÉajô“|~äÕ¶u2òßç‘^%“r¦Á$JoŠ*Á¢Œ)‰€¿ ý%1_c°ž¤"Py’ ºo‘·ß2czôHýŒ]CDIªòÉk»©4©® OBÂ*Žý@Îü’6#5×:$žR6’È«ØE;kUo•À´„?åhAø”)œ½ÛA6{Ÿžn•AC„¡‰˜ê> ´PådÄ'œ¦Ä7FL£ðâ6ô6•‰7×y$L;Á•…l 7¾a`‘ à­ˆàÑ\\²ôí&ÙÚ;°·»‡vعè§'¿ÁÔHk™2ÅZÌ›iG›¸­ý}7DÁ™¸ˆÝƒÂ/iBCëñÒ›yïô‚ÍD‰ºE5Í¢*3²=€Šž¤{"5ôn™è}zºóÁ@è¢+—pr7¶W0.ÒÜA]Uò’v-Ž*õj¿¥Uáéë<’Úh"šbœ‚)Ò$XÅY¼8$ÉY¬$¶q%¾áJ¡õ±ç¨ÝÛEÛû4W&g–¹Ü¢9 bÒàܳç–äô7Ûtô1ɈTÇŒ¹š¿¢8qär’Q}ÃÅÞñQGeðt244»DX©Ü%ŠöÇ®ìÞ•Ö>™`d‡0X,býžY¦rzT1²àD§*¡ÉTí tŸ¹íƉ'Ì*,2D‘"0©3#Õ´bD(NŒìˆðYD% Ã7²?V¤HÙi [ïK,ž|Èÿœ¢åíÊ9Ã(MŸ7z¹ö¢ dšBc\c&4wË:8aKj²ŒkhO™ÊÍÕDÐÕF!Fô ºà‡1Œ ܦIƒ ÙÓ”–ËzKb¨/©CÕ”œ3»ÏZ‡´)®µzhGî‡à ¥:¸ÅG¨äqoȼ›Röv1ÌÓ¶s¹œ1'Q8•KÖ=òÒ/“àI¼ç£ž¤äG”_%1¨YMu—¢­¾d€QÖì«¢^*5R×a;žJj½¤Þ^Ú~â’˜Œ÷ÒTÇó#”ÂR=󀕳ª¼ÏÓÖví¥üyÁàbÑÔºS?wφ~•ÇiA¿ `Aiá:©*­>¡e•õˆNOô“BâúQÓPwèWZÖºôÛí ývC?ôã7T*ôã4$"9ô“ÜÀbîP¯ˆ¶<¡=Åý ük9+¡™½I-è'¤èG*/µÌ¡Ÿ8ÕÙý¼ë@¿ƒ:ôÓWÍednÜ…äºÙLÉ ×Sø)‡~3F{B?Z€™|A? Cõ@?o?¡ß~Ä¡‡9ô£&cpA?î~Œý@?jy+Ñ´ª‚hC? åÑ#ëqC?÷ÉïÐï§ëÒ-1”hŠ/©Räœ}NOL.Å“³ÇÜOÏuºBTiz¼ö£‡¦øÞÑÄÐ*ª°Af`@}æÕÕ6)eù<ÁâBÒ¬¿R¼$îi.ʼO¹¤æûiáÙ††,Ä|•AðõLåD,™'„Uª HQ¢Uà¼ÔúÉMƒØrªhš¸¨’@U‰»ÔA!U“3ÉN‡–D,J<† þÑÑ3–ÈörƒÐä³-UÛeBFvð‘E˜û²Û=»b¸z›²= ZIøÈU~w ¸ wAF|6ˆn*…íšwR–ª5‘ ¥½JÖEÞùSÛÇÄ–‰sQÆœ”îKH]f7£’Óûô$»Cá#Jf‘ÞI&í¼Ï4xNJ…iM“Ue/ÄÛt‘Éê|GÀÅ‹† *×¾}Dxµyt>‘ÉÅ5MBÐÕ> Y¦"î÷³iéû .j¼×.3g™k–sßÅx³‚™_2˜ô‹½ÞCï%Lø¼Ö[»çúãP¿®‹ä±Í[²#)ïh¬Õµl¦2Áp3Å@çÎïðDCÚ9pÒE' ùmÙÌÃóz³ñB—ê¤"ål5”y`ØÝwŠ­Én ×á—i»ß*¥'ñ’B&Ù)Æå1¬®z†©Èóª¤XR"ж2’tsÿ&@‚qtª*ìx¸‰uñ‚µ,Þq®DšMÇu¦ÐE^ú’¤2‹¦Ð,Hºù<¡CMˆ8ü*€Šü67ÓBTw¦]ØgâÁÎÖ‹¥0ÞäRN *¸ÆjVõ(ŸŒ'Oû¨4ÜÄ3× ,QWÁ(íÓFÝà!:¢pn†-™Q:o:\ûÚµü#êJVH&ºF^ت²<“⳺úÅÙ˜YœvâÏØ2uˆö_3Rö{()'»ô©G’Ky`Ze‘À•ý.ÚU ¶u[,çÈÄ:T >êYü„¹†ïL»Îù$qA£‚ÂðIšˆÉ‰Ô1Bj5$Br?“] ceÖq eÃàú»ÈÇ ­ñ$3Ê"!ØÕòh > >> >> endobj 5 0 obj << /Type /Page /Parent 1 0 R /MediaBox [ 0 0 792 612 ] /Contents 3 0 R /Group << /Type /Group /S /Transparency /I true /CS /DeviceRGB >> /Resources 2 0 R >> endobj 1 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 6 0 obj << /Creator (cairo 1.15.2 (http://cairographics.org)) /Producer (cairo 1.15.2 (http://cairographics.org)) >> endobj 7 0 obj << /Type /Catalog /Pages 1 0 R >> endobj xref 0 8 0000000000 65535 f 0000005940 00000 n 0000005654 00000 n 0000000015 00000 n 0000005631 00000 n 0000005726 00000 n 0000006005 00000 n 0000006132 00000 n trailer << /Size 8 /Root 7 0 R /Info 6 0 R >> startxref 6184 %%EOF eclipse-collections-11.0.0.M3/artwork/eclipse-collections-logo.png000066400000000000000000001316051407344533200251170ustar00rootroot00000000000000‰PNG  IHDR²ŒµsBIT|dˆ pHYsÄÄ•+tEXtSoftwarewww.inkscape.org›î< IDATxœìÝ{xTÕõ7ðï:3If’€ ŠÉ$™DPg‚¼¡V±µõ~ÃL@Q«ÖB5 Þê«VkÓZjk©B¢µ*^¸ bÕ¶Z«-´V¬«¹€Ð\'‘Š (Ì$™Ùëý#hQ!™™³Ï\’õyžGÈ>k/"f³÷Ú1$ðÜ0"¼¹;bl}CÛ§‰ÿ] !„B!†#|ˆH¼hrFoß– ÀCý?àfP>Àc’œÞg6‚°L˜yƒm3Â}éÆÎ`’sB!„B !RȦ(^4>;Ôc›Ì@ÀQ<&ÈHrj±jvVJ’„B!„bè°';ѯ{ÞAy0Œ“šBÀ”PŽ€ŒtÒ@DõÉÎA!„B1´H!›"Èf»ŒK“‡nÌ\ó5Õ0¨ÊŠ|„B!„éO ÙTÁ´à!XÈRÌ…lhÿ‚ß„jx3~O6Ûǵ­¬ÈM!„B‘žÒ}åêš—_Ì5%;Ý(¢&8®ëüO´ã™A¡× ¸Û/¯#àE&üÞqmàD` RB!„B¤ )d-\XX輦­-æëj\ùú3JšnÇØÀH*G$Ú ºj Ž2ÀkÒ¢Å`c±³²µ]CŽB·®ùùGÛˆN`¢±PJ‘a|!^“}Màyè&„BXG YMx^IVzÏ#³Àø–2pLε ²¯ Ö¸¸Ì¢“á-geà¸X.ÎÏ¿D?b¨°†€ÅYNçúÞ†ñ¥(„HGwù uT¼×ð—ú–Ås-3(X›?@?P¼—a¾'+cìohöÚ¾xóB!ÄžÉY“zæ!uM½—°ïçÏßm —ˆ©ó_A4t YâØ;åHÀ‰ œ ¬q­Pjb}x „HOþ&@çÄ{½btˆ¹åEã³{d››·ïàW !ÄÀ˜A=}¶§L‰ãòñ@äE^4>[w^B!Äp%…lxnž3Tãš2z›~€'ªë؈ç8Uq\“’ú8ÓY"ŽvYq4Ñ\Ü›™it„j\¿îZTpàà×!Äž…\  M„( õeܨ-!!„b˜“BvüËq9¡ù®ëB™FÈ‹1Ä…\;&7ÆkVÅ8>Uuެüàãh3ƒ:Ý‚<²¸Þèã¶`kQ÷¼ƒ,˜C1„1ƒÀ|—†H7óc…óq„B!…ìð¢É¡׬3«‰ g¨ì;cz‚ÏþKœs¥š˜ÞÆöÍ/šÀÊ"3À,Š-RÐ !b¬-8@‘†P#{ºø›â!„Þ²»au×äÏõmYÏÀ"˜Š˜–gWlêÐbzÞ$#BC,ãÃFDã²â}^Ð6…j\¿àEî}4¯"}¤+3«+–B1œI!»K°&ÿäP­ë--ÁÞÏŒá[±ïÏäUÚæOFl‹‰éL«rÙ 7‡ú"ÿ ÍÏÿA즅ñ¾¤á©B!¤íšŸ?>XãZ Ð*G[0…úÔű]B«,È#¡ C½íXžW2Ä'X™Ï³a¢…¡ý]õ¡WÜgR !†.ƒ??!\ÒK!„Ɔm!ËÕžÌ`­ëVƒh€ËUsD1-/fù«U¹$Hoææ‘£´õ Ùç¾ÂÀ‹Á×Bæœä\„)Dj ¶Y[,!„b–…l°&ÿäÐþ;ëÁ¸@¬]…cÆŒ#{j\QÙÙs>èÐdaJ–bÐûTÝØíxR:Ý1í,¶uÁ×m¼hr²‹k!D ðšTŒ%„B gêåEã³C5®{ú+À9·Š±éÒøG½¬¸ÿ¶âØ3þ/Ô·emwMÞqÉNF‘\ޱÿ€†·² |šÅY«Ìg$„BˆaSȆjóÎõÙÖ3p ’ñû&\ÆÕ1ÌKé»O–AõÑŽíY˜ïÈee>&”Œ7‚5®EüèÄÉNF‘TŽÝ­!Ô½4§©GC!„bØò…,×ŽÉ Ö¸a6^JrÁtPhLÁ)ÑVJ¥í>Yƒ"Q²‘°‘JËŠ÷Ä0+ ÖäEýÿO1´dÙ÷_à­x¯gP³WÍÓ˜’B1¬ éB¶«6ÿ˜g¯pu²sé§fF;2§ªc@Q7LJ%»-ê¥ÅDœècwâUeüµ»Æõ W{2“Œ"±höÚ>Å|!€â¸|3Ùè|º±3¨;/!„b¸’…,/‡­»Æu‹Áôz¢÷ˆÉÇsóœ1\°Ê²\¬³5gvû£È¿—àD‹óщ˜ÚÇëÒÙXˆá'§ªcÛÔq¬á²z0Mq^ÓÖfU^B!Äp4ä Ùµ…„6¼FÀ½RíÍÙÈ`¦qn´ƒœŽË‹£^VÜëÌ< @–…¹Xå¶kƒ5®ï&;!Dbe_ÓùAVFød€~ `çC·ƒùGFøxgU{k¢òB!† {²Ð)8/ÿPj&;—\ `y4ÙVÙX1,<ãV7&ÔE;V¶2Kðx°&ÿ;ŽŒÈ÷iö¦îd'$„HŒ]ßο÷ë Ãq†a¨ãta€6‘7²B‘¿ÈRb!„Â:C¦ Õ¸f1P ¥Ïþ$àŒí‹Æï?rö¦­ƒÍ­hû0XãÚद1E]È‚ñ SIº$Ø—á -p]è¸6Ð’ìl„‰C7oîðì®B!„H !QÈn¯9h?ÅØ`&ÁAÀ{Qh€ Psÿ÷5Î%ÐçůA„}¾øÃIÇ1FÑ®·£Ü¿ly€±1¦›‘Ù—1@mtÃ鯧M!«HEµ´¸§¶àPÅì¶:ŸD ð$Vx+TãºØQøs²óB!„b¨…ìÈÊ>àOô¼ÝµÓˆ9æ'ñ ž‰( Yfµšˆ®‰9¹äˆdÛ#Q du&¥ÏŠéhìÇÀKÝ5®Û_¥ñ¢i!„B!RÜkö”H†B¼ûŸŽÕæ•D3PEì«€´)Šš¢Ý+J T??66î ÖºHv"B!„B eRÈšÀ x Ybe\ÍÀÜë[7Xç<‰Õù±»ŽÝù†Å¹$KPÏ$; !„B!†2)dM` Çß‘’p)stkkÓçŠn¬3ëT`·½ÇC3øªìÊÎ&;!„B!†2)dM°q/-€âàüÂã¢I´ÊÄ< C¬¢êX¬ÀCqY1Üž]Ù±4ÙI!„B1ÔI!k3ÌjD¢Z^‰ô®Fì“e»-ªBvHîe,vVîIvB!„B RÈš Ì½‘.æjOæ`ãFÌùp QuN¢Ž´µ6(TsÐÅ È'‘^wpæ¬d'!„B!ÄpaúøàüüÛAtÕn¿ÔE@ïç?a¶/¾¢ÐCÆÿÞb2x;˜"ÀLaƒxÇÿ¾†nz>ÿ¹ÿÅa g÷·¡ÆîqlQÄÛ¿ø 2u3ñqB»ÅÙÇËîžôÌ´ о=ûm?À ƒ dÂ_ ðššÍZõÑ9cjoc›û2Â:gz*„B!„ÐÁt!ë¬ê¸;T“?šA7}þk_ªfvÿ ü¥/þ¯×­ Ú½Ò×¾F»þ7˜ÆnƒøKgí#¤ìÖ¸v»ƒ€ð®ù" üÊY¸{1†ööÅht)¢(dA´ ÌUf§³ !ªeÅ :3 VIG…OmD玜½ik²sB!„b8Ѳ´ØQÙñC0ߥ#V’``4£ìÏŠpô !˜¬Ê˜qî¶_Žl\_Odef.+ó …,ÏÍs|r"òI€ˆaÐ¥Yíér4’B!„C†¶=²ÎªŽ;þ¹®x©€ 8üzÿRZ³/e;_4Ø }nìü„ÁQo“ Lƒ½Ó“a› Ûúl¬Gà*ǵíˆ÷zžW’šç:MgNB!„B ¦—ïÎYÙñãî×Nöº7­ðÀ…ì.A ªq{GêR>ŽVq¸©¹¬ÁŽHæ odñQœ›â˜ð ³¢caÜ×ÏÍs†¨÷w |«{~Áôìªöguæ7œQxÁ¨°a+ÛÜdð(0rœÅÀ>`ôdt1x;‚ ÔN0šš—vb¨¬o×hòäY=Ÿ}æBD¹Ùà ƒɤF EÀgŠ“¢ÉÆ[[áæÆ6ÿ‡ÉÎ_+MœxÞˆ¬ˆó`¥"ã‰pØ¥He€‘ PêfB¡>²)|ÀüÁ!v?ü‘dçžSò|Ι(Án0cƒNE &à30w)pÈ0ðA˜¹){ô~mk×>Ü—ìÜ…éKk! Ù•ûºç»˜÷éŽh]jªsñ®™N .,,t^ÓÖ6Ð(V¼Šˆ®3?Ÿvm4§iû`ƒˆpfú—ô²sKû㽚Ï…çÁ8 ˆø©à‚¼­Îk;WëËqhòx|¹è¢ɦNf¦ophØ@¼Ûþ{êß2OÀç;ï™þxݾ€ ~ŒÕdDV×5?÷QâGÉ3%ÏçìÊࣙèDNàéÙ¶-€ïêÜFýß¿þïhÿw“¸¿'+êÿž€×íÛ à}€ÞbÂ[†-ò÷ú϶$ë÷'„Yžb_ 1Â7Á|úàVPЮ{ ÷ÿ]Ø…wõã Ö»ÑSʾuLÜÈl¼iÿ­¾ÅÓT§ì6¡hLž<+£çÓOŽ!¦“ø€I;€ƒ€ÏóÀ÷‹Ýþ»¿Iÿ÷ÏB϶ma¯Û×Â(¬f«›ýMIùM !Ò’e/Ⱥk n"æû­ŠŸô²³²ýÌFk\ÿPb~*Ü6Pc)ølnÞ¾™™Æ¤Ø±I <Ÿ]¸` 1ÁùE N÷¶ëöhvËgñ\̵crCì|À©_ùÒv:5§²ýó)-'ž7"3œu—1p2,xøüS£—–6vú?±bŽd+u]2ZÙz/"¢éèÿ^šë¹>F ¯ÂÀsŽQ£_ÓýæÅëö½àœx¯gÆÃ­þÙÑŽ/-¼è6Œ¿Ç;€lG54/íl˜×]þÀ妿ŠCè¿·ýï´O@ø™7›Xñ&Ñîu7®Ýô¢¹sÔS·èâq@ä2_`’EÓ|Ð+LêùŒHøåwÛ~÷©Eóh5yò¬ŒžmŸœÂe`:ÖmjøI#B‹ëÚý­Í!„",ùPÙí¿ê®ÉgÝ fkñ 7juGuêÌà.Å K²÷¹±ó“P­ë=fEÄ€ÿ€ÐAŠ6±mÄüŸ)æÏlL;¿v•A™Š9‡ Œ"…l60 ŒOÀÆïúñÅÿS"j,"œ•æ/c7¶³â-b·ýºpTˆùe€Û×Gà?†jóNrTtÊÓhÞ¢‹&èfôÑ4NÀ¾jŽ#ÐqÈÄÜRwÙʈÁw¯kz6ÕÏnŽ•—ÁL×2ú¾C k‹×/Í 7³À˜Õ³mÛ6¯»üw õ›†æo$,Èf·3«ýÍİG`‹n¤Êh´™¹bÖGßïk¿¾ë-#˜w ÐãpD«"-YVÈ@veÇÜP+ÌÀHÏbvХŤei1ÀÓ5¯àÈœ9íÿpÓ_Þ½í# Žu 4@# ¬Ëú( êþ£„tãE㳻™ ™HD™1è?2Ì|fZþ èbÐ…Ù•­íñ\¼½æ ý2¡^aਆc6^Ùù@Ñ”Üë[7Ç™gÚ;¬ä¢# eÜ à|$瞑Š‹ EÓKÝeˈé§u­þ IÈäjÃS´îl"þ13ŽIv6F|%˜®ôº}ïèqÕË Õ·ßÀ€ `ž@ Ÿktu{‹}'Æ+1^jh_–òÝ'?7»7Ëy[˜"?„õìžd8‡ç8Tî'wÙ¶ÍO…7‘“J¦åEØv qäjpR¾7àTNõ¸}'ƒïlhZ±* y!RXB>(†jò¯aPm¢æÓ†Ñଠ”4$X“ÿW€¦ê˜Ž@s•í7 4&4ÏulT¡oñGZK7vê*¦-Á:B]j+€œdçfâ™ÙKâ¹xÇÂâ±öHß«üs´›7*ó›4§)åžÌ[É“çÛ×Èà¹Lt9Rë>ÑðÝY£÷ý¿tiJâ-*ûˆjœì\±“ˆ—´¨¾Ù¿6Ö‹½´xRñt¯beªs¼]ÙŠÞm[Ú6Ø8¯»ìI€.53W XG ÅD}¥ât{ú1µ@q²sùŠ€çÉÀýõMþ5‰ž|òäY¡O?¹…˜nGrŠûÐÓÜËsä˜âs Ùké¨ìXÂl¤ð9¨{DQ4{"modÁÌóò—ž9æ^uT´_˜]ÙþKgEàõT/b ´“$ ßj`ü,Þ"¶k~þx{¤o¢/bà„Ñ»(žùÒ•·Ø72±Ž‰¾‹Ô*b  êžmÛÞòMOÅŽá_˜˜?c¼·È·DBê±ËLßgÆÛ^·/›Ø scð½ŠíÞâò凕\Í–˜„(-òUÔëH½"l¦±Â^·ïO¥%¾)‰šØSä;¶gÛ¶µÄtR®ˆžI™h,-);?Ù™!RCš9+ô}¤S1˃ïÍ#¥¯áÀž-ùßÒ/E8«Ú[•ÉˆØ ˆ1Àk€5Ëžõ¢¥ŽÊÀOã¹²»v|¾aÐ*‡Æqùw»çÄÝ9]LÉó9½îò§ÀX `\²óÄDj·Ø7=Ù‰ìIiQ™/##²„”Ìo0L<"Ù9Ëd‚Ùg(ã¯Û÷gO‘ïØ$æBÞ"ß/˜0V7;Óã;» Úk,ž‡JÝå·á Äöà5`E¿ó—ÝÔ{ð)„H°„v¿uV¶ÿ–˜Läœfpod™HãQú'Ù%¥ÎëZŽªÀ|geà´HØ–Çà›˜Zªgæ79t%ÅÑÉ+8¿ ˆØ¾ÿ[1"¾7´ àìx¯Ou‡Oð´#«ž™ì\bàc‰Ç]v/RäÔÔ©SíwÙ½L´ ÀÈdç#Ä N#Â?½nß³‡Oð”èÉ=nßý ÜœèyÍbâ¯7áÒ¤°ð ‡·¨üqß DÛŒ,0ýÈëöù'?×òf€BˆÔ•ÐB64/¿X_™È9ÍHÐ9²ÛAx(BÆ‘ÎÊöã‡Ëy¢¹×·nήì˜ë¬ LR É ®°#ÙyíÒ‰Ø/ +ÛbîÀz0ï`¯Pd2+~¦gžë0“qRŽÇ=ý˜Hk”hB+"Ð-ž"ßCHr1;©øÂ±[cVè–dç"DŒ¦EÂØPê.¿Å_BŠ'»ìznLÄ\éÂ[tñ¸Ôõˆ/Ov.qº¨'ËñªÇãËMv"BˆäHX!Ë:`#?£5§Y\=ð÷ˆã/d›˜í àAΊÀ5¹mïÆ'íåT¶¿“]ÙQéȰç3p€æ$¦³Ã`un<ƒ{j eÃX _S.#•üËqéØ$k+¹èH‚z©¿”x@D˜å-*OÚêO¡ïÅöל¬„0)‡Á÷®/Âß-šV`åD^÷EGèVΑn&_8~•)ªãüRa ñ”<_4/„CL ÙP—šåù§©%gÜ€7GˆíPxF˜f:ÆqT¦Š-_?Ëu˜¢Ù-ŸeWpl LPÌx;Á)D4#«ª3æåÎ= ò&)æU ¨9§CCάÍ1“¢´Ø7ÙPÆköMv.ZWyܾ¸öP›áqû\dào¼‰ž[íSl°­-u—ŸfEø’’3³c úºè/b™íÁй‡œº#þÉ“gÉÿc!†™„²Á×w\ˆ¹tÛ1Ò6`!ËÑw-~[1_è¨ LrVµ?CåˆhHoH¢j¨œªŽß9+Çp.€%d^ÆMŽÊö?Æz]WMÁQJ0Ö‚´àŠ`ë2‹b'Ĥ"ßçç Nv.:p§Ç]~q¢æ›˜?c<€ÕH®ÄBD‡°ƒ_.u—ߢ;´#’S  DwÜt5qây#ÛÿÌ€'Ù¹hvvÏ'ŸÜŸì$„‰ey!Û³0ß `ÕóXÅxŸ,Þµ¸Á;*ÇæTuü.žæAÙ£2ð{geàX2è0,›ˆð£*óRÑîš¼ãüËšqì² ´ h¢ÅsX¢¤dæHEX‰!VÄ~ŽÀVr‘å §äùœ™‘•Z=—I`cð½wÙ\]û—›Òmºâ ”v< `R²±ÑoQyºŸ¿,„ˆ¥…,Ï+ÉŠDŒ§Á±IUÓÀK‹ {kÔÆO½êÐìÊŽ¥RÀšã¸¶ýއƒð]1ï_ÓjÇ–1Ÿc¬uD0^Iоï\ŽDVðܼ´ÚäƒÏæP½~V7­Ú  ÀïAäÑozš€^Ð Xöw0ÇPÆrkŽT;2ñ4ÇY7‡ÉG t³;³0dÑCFÆÇþ`%1?Æ2^ðbÝr” Þbß]`öYÛ2À8šTà+Tâ© |+Ù+)JKÊÎg…YZxLÏ3Ñj8Õ{þÿ=’çsnÏ¢£ à›Ì< Àó¡¿p¬{x)„H–²Ýµ'€9íÎkû*#Ç€ÁÝn•­¾ï¬ ¼fqZÃÍnù Àÿ뙟÷¤= ¢ãã õ1EÔù£o|ËE¡Ú¼3˜y%¢;žI+"ªÍs=ï˜x5ÑsÇÊSä;Ð~ø/¿æ<ÚÐéÿ$– ëÏlð§þÕ7yŠÖMÄ·BSç_UyЦ?ÑØºì=ñ>ç-.;™-_I„MÌô'&µJ1¯É½_ÛÚµðæ¤Úð¸óÀt8|' ÿ{)Å­0€K‹|­õ­þ¸šÝMœxÞôië꽓™nSðÑ¢U«V…£ÏuíþVô&x èïœ 6ÊA˜½ÑåÉóíË º ëfà!2Œ MËb:i`M§?à»~ÜåqO?†(òC0ù4åx‚·ÈwUC«ÿQ ±„)Ì’B–9.'~ét¸ö^ñ od¤þ'’¿qPð&éBœ8YUõ\{öw]ÍÀýFÄpyˆ|Žë:ÿËœ¡š‚³˜ùY`Ö!6ð0׎™”ÊÖJJÎÌ"…Ç ïÓËÀ½¶.Ç/ê6?Ùe>\µjlÅ‹~ï).›NLóŒ1ÔNP ê“{;­Iã.ËQzÖÝK# ~–#ÆomãWýXCºjÕØ‚€€þâÁÞ›u:ŸÐ…HäŠñ%¬è Ⱥ©`&Xå€(„\Ål7`Œ°¯çQáå0¯äÚæzܾw[ü¯Çz­½Çq ÖÑÅöCV8³±mù»h?HC˳ox¨¾µÔ½î ÏfÆÙHÀç$ʤy /"?e³Ó­ïmô #Zc˲˜^Zâ{€(Õö¾ .~~ãÆ%[5ÄB¤(KþA egÝ]5É6ð[7{ÄhƒOÌžÓöf¢rÿ³k¹ñÃÁ……¯ ¢žDÿr¢h|ßYÑþ×Xæêž_pƒSᇢ ;ïó¾ÞDqFFÜÁĺöÅ¾Ï 7¶ù­8k™›W,=´`Új›Ý¶ŒSLE#Lñ¸×MolÁ-ÉåïÈŠŽ«ÌÀãgu-+6@£† 6¼°ýû’W””Ì™é)7ˆ®–½½‰7¦ð£×¢|{µÉ“geôlûøpMa¦ã©ÿ~kåÛÅ ;ƒ¢N IDATü‡OðkÑdìѰ®T1Ñ%mË5Þ{ªU} þàGÎ(Œá2è*X´ÂÇëö ðLMá¶ð½†æÏiŠ÷%õMþ5……W›C]a–©`„ý2ûú~ŒþwRažöfOÁÚ‚SÁ˜­;n²(æÿqÉœÓúž±É缦­Í160ÀO öáígeà‰Xâç\BÄK‘ü"@@ep^þ7’ÇžLÌŸ1ž‰µìeà5»ê›bQû…õí+ÿ¢§xÖl,ÿ–Ç•º}¥ úÙ8{Ð Æé-þ™u­þ Ä45=½½±uÅoê[üÇáhž䨱t¶víÃ} -ϾÝмb~c‹fC‹¿€G3ãa;,šö€H1/eÐ sÿ±±yyL÷i ×LJÐÐì·¤ˆý\[Ûã¡ÆVÿl0î0ŒèjoÑÅã4¤%„HQZ Y®öd‚yôîÃH*JãŽËà •#⬠üŒA'{^FÌ+[1ý¬Í¿Ä‹‘À%uQ0`£GyÑø”û󙑹zþÞ¼Ú¥rÎy·íw1íaŽWSÓK=‡¶`:^0Ê[Z\~¾Ù|¸š—°Âèr”6´úÿ¬3î`ê›ýkšý—d¡áû+RH}³mc«¶Ñå8L·ÃŠ‚–qziQYlÝv ûšž–Øo6F4ꚟû¨¡yÅí…‹Á<@ޏëŠéRMçÅ"ùV}Û³ïkˆ•†VÿÝ Üm2L6Søz- !R’ÖB6´ÿÎÿà1“’ÐÐG˜“]Ù¾¦·WþÆ>_ `mVfä²þåÈÑ ÕºfƒéQ¤â~oÆÁ¡^û“ÆîJ'\äpµ†Pk³B¡óÛÚßÛñV–ðÃéµ÷\ºëøˆ¸™mÎTZè;ÀÙfb|?©oñ—ëÙcŸºæe õÍþóA|"ú½ˆ!¢nó“] ­Ëÿl?À£ÐÝ1Ö JJfŽŒv83›>˦ÌìŠ]]ós5´®¸.‘‰-…‰ï¡ÇãË$柘NŠñ1ÙÕ©ë[W¶›Ž£†fÿ¬4ƒ€ŠÉnß>šRB¤m…l°¦¨à[uÅK*iM}„ ûÜØù‰£"p&·¢ÿÃÀ&¥"ÐìMQŸïšŸÿf,„Åç-›B¸1TsŽ%tZpØø!Ì.¿f|áÈEk7½˜”³7lxaAÍ„¹³-uûânX¢ Üebî¯!à¦úÿÏ"ÇQ44¯x£¡Åÿ &Ö.´Hª†Ö%›ZüW3ñ%Ðxž*3Æ;"½æ—›Æ4'%åÞ¿¾ue{CËò‹™q<ñm] ñ E&SQ_2ÈQCVâpfx6™ˆ1"ÄT®-#!DJÑx“Vav¨d’¥Å銜]¸ÓèÜì9tF{mwMÁÍL´©¿L>“Ù67ÙI€ÇãË`º©U%ãéÿîZž}L™‰ÁÄ—Çs§húáhÛÿLÀmõ-þ”ø3òÜØ¼b±]õBÌ/';¡WcóŠ¥ÊP'èДp'ÏÕ’a0½ò€ :Ôl 3[ýo54{NTJ=ëµÄ¤£WÉü†Ö¯hˆ·÷ßîcVt‹™ç½X‘ú´²Ýµ®2€ÏÐ+å ÒìI¤¾ìª€?§²ýhÇk î ð/¬ÌI+ÂÙ¡Z—¡Æ¥›gˆzéßž0ðRcËr-ÍêͰý fš¯0Íœ:ujûªÕµqÏùÕ€Çë[ü÷êŠg…wÛ~÷鮣Iij®éÙ3á›>Ò2×ÈDe4™é¿¦g#ža:†iÕ*Ö{»Vƒ˜=C·ÃèrÜn2† ­ËŸ&Æ¿M„8Ñ[2½X[BBˆ”aºåjO&1Rúƒ’dÈÙá$8ßU °Öe‰ÀŠäy%YÉÌÈôe¦ž¼ë´qã’­`zÌDˆ?ŒË%%3Gásþc œC§ƒ¼HOÍþ&†q4¼!fÌÙµúc`ÄÍæ'Ã)¥ÅegšŽ“`ÊìÑ5Àøi2÷ÓƒøW&®'Dxº¶l„)Ãt!³½À}Ò¥X Ùá"X[ðsÌ7ÇHŽâ­÷†dM~DáŒBG› B¼¢¾Å_¯%!Mˆ# Ì\ÏÌ߉e¼Cõ•0ݤ@w„Ôwý½b aJc˲5%EØÏò Œ™HË[~fzxbþŒñ:b%ã"S-ûl‰éˆ:«eŽÞw9€­q0b» !Òƒ©BvÛ¯ GQ»ý!‹`ÈÙ!ŽÔ=?>˜ÓûÏ2ãGÛß?S‡másÍÆ0"¶_ëÈE§]ÇMÔÅ{=§Å2ž™Ï‹w®/Åݱ¾åÙÿèˆ%„ ­ËŸbÆó:b1Ñ o×Föð;ÐÓl*/##òÇt9Ôãž~4€ÍÄ`âù«V­ì<ö„Z»öá>fŒS¢z“/„H+¦ Yg¦º À~šrIM,]‹‡2fP°6>Eµï*ÅÈ Û’²4—e2Ä»umËâëÎi1fŽûÃ7Ž˜T|áØhÆNÉó9‰ðíxçÚM+œ\«!ŽZ…ök˜?šñ­#K|c²¦Ód†®ó’g ¿9©xºWS<ËØl¿„P† ?®#ÝLžAIAœ¢-!DJˆ»í®ŸÏŒ9:“IEL,od‡°žW%*’‡.ÌTÑ5??¡Ëà&»,‡ §š‰ÁÄ)ÑàiOl„Õ&.§gDÕx{˜ï’ÎÄ?’%Å"mèXº L¿ÔÊÞ¡ dô¸†¹*Vÿòº}×!¥»Ù³Ù‡Š/½Ûö;ó,22ÿ w–BVˆ¡&îB–ØV ý·•${d‡´¬\ã€W%;œ =k1’:€©FS†WhJG¿.ç›TÜ׳:<šaóoch;¬™üfãa•-£ÞÊñ M˜ê›{fçÚÀ^·ïÅI>³g´j7%Ïçp¤™ŒÔ½45=½@CÜQÝ‹…é#®B6ø ÛÐ¥º“IIÒµxH£+ÛB•u>QÏ“úøêЗ;ó™kòü§~ã³-ZR±@Ýæ'»Àh‹?MŠj˜ÁÇÄ?Ç®À"?üñ¿±ÂbýÅ-ÔêÄÁ‡T+Y±÷þleC£×]^]XxEÊ<Ðﲇˆãȯ/¨Lƒ_Õ•h4qyt÷b!DÚˆï¬=|€L½©¤&bóKýDj£9MÛÃaÛY •æ8¬pg¢&#¢£ÌEà×ôdb!Â:×ú`êÔ©v°é·*‰¤T§Q!ö„σ™%¢ýÆzŠ}%ƒ ÑËO0Ì<ˆÚ+'À?É5ºê<ž3,ˆ³ñd3×ã½7ù·èÊÇÄëM\}@´= „é!æB¶{aÞA`\iE2©ˆ!od‡ƒÜë[7GÎ!`[²sÑäÒ„½•e˜ûð¼¥+ëpg¼WP0X·Ì-mc¼0{¯aüs}ûÊÿšŠ!D4¶ù?dà ó‘ø„ÁF¬éô Ð÷°ùùöè`b¼äuûž=´hZEsD…Èܽ˜‰Rþ^l€â¾@ö”oØ%„ˆ^ìKP”q3Lî‡K3RÈŽÊ6†æ¹Êaà%˜[ž• l*Â7¨²všjh4uŽ41šJ]—ŒÖ•‘z?3ÑÝ…lÝ8À†½Ž°Ñá`“Ÿ³‰_4@ˆD¢çŽªÚ^#(L°x°qõ-Ë_õù!Â,3ó bšlçx‹Ê Ù²~¼k?gB1¸ÄL*6¤ü½Xõí$S­¶8OW.Bˆä‹éÃúΊÆG¾oU2)J ÙaÄ1'ðj¨Æu&;³ˆèªí‹ÆÿtäìMñ"?ˆC êÆ6S¶Ñß`ïÓ•’%Èd“Òˆ1p!K Óc˜Œ¿™!D¢Ø"ü;eÃ\SAˆ¢þ{Óc˼١z¿ÀÔƒ·Ad‚hŽCõúJÝe·×·xŸªão#L½&ð\¶÷™ûb1³í¢‰q–D„)!¦¥Å6{¸އH3RÈ3ŽÊÀ<?šì<4ÈÎèËø•†-ßÊøC)ìH$—É)"¶Y!DÂÔµû[|d2La´›šžÞÃ8]ÜÑ8A¿õºÿUZèKÈ‘/>ølLÄ\i ù 1„D]Èò¼’,ôï3n¤†Ù¶J¿—ì<Ìã*~¬Ð²®šD²L+l¨A Y6û@`CÝæ'»LÆ"ÑêL^ÓJ††¦eÍD8 ŒMέ£ØÀ*Û÷ô¡Ó,- êòmãdX9Ç@,od…B¢.dC¶ÞéÆY˜KªÊäê´ß/)bDW¶…lŠ.Ðì\Lêb Ê¢áxOˆ±1j ¯³ù7²m&¯"á\o2Dî„ ïËõÍþµD8À‡&玗Øl¶õÞⲪ]oNµ³eõɽ8  x/B¤—è—3*,Ì#1ˆ}YþDy+; eÍ ¬ÈâfI‰À7Xš‡ÛVƒ¸0Ô€oÅ ˆéÃø´›¼^ˆÄcÃÌQ*[¸7ææDõ-þzȃÄvLßLóÖ»ñ–§Èw¬îàÄ6¹GYVÙ 1”DUÈv×ä@û7ÁÖ9úÔuŽ`ÏYþË…;{Ãr㦜•í¿%`E²ó0é°`­ë$+³! ¢AƒoQ0¹ü›7›»^ˆÄ3 >5ƒíqpuM+;CÆÎ“‰ø³9Äè("¬ñ•=8yò,mK )ТB¦ïµBˆTU!K0Òý­TŸ"¾‚nì ÒÍ›»½êlŽöb{/ËoëÍ_ƒÄ4±ã{V„¢@4Ð=„`öò?V¤>3ð©¸ßD65½ÔSß¼bfè5›K ÍéÙ¶íuoÉt-]”•²Qa’ï“CÉ …ìgsóöP–€\¬CtWNEÇ¿¾øéAG¯: —£¹Ü0âÿ‡R¤¿‘³7meðuÉÎär^äÞGwPæ 4± ð!³°ðŠ,ÄØAþ«š¹^ˆd0Øfþ¬UE9fCÔ7û6”q €&ÓùÄæX(õ¶·¨¼Ül y¨–7²B )ƒ~xÊÊ¢L™d‘Œ_|õéÆÎ ckîù Ñj-¹¤0fzso_ëËÉ“É÷©ò6F¤#Åp&?_Œžl€5þ €[½Åe/€é·&êŠ=(¢9¥îÆñ;Ô—µµ=óïIzL~+# Zi.D`Þšì„ú XȆjšÀ ã•ŒvŒG•×BÕ½¼hòôžÞ–2Ñ´=1"Ò™U¹mk]÷€qO²s‰“{æ{³®éhÐÖl!ÛÑмÜô²ºtÖØèéöºMÅP$÷(‘~ÈfË›{‘Ȥ´‘Öмâ)y¾#·gòOôC–™óU ”å]ã9äÂóÞÿ¹ØÎº5Ð sßJƒ|ic£?‘{……”—X0ŒË•ˆ¶G"¶G3f¯íË×QÂS{`Èž ÑϱeÄ\€6&;mb`ßÐ\Ä‚Àf÷¸ÉÙ‡¨VL½U" |N­)I!×lŽ%g}¯éôÜÊÀTïY1Ç^œ`ïµÿiâÄóFÄr‘†{1Ùz"cMÆBˆ„Úk!Ë èÒD&£ý,÷úÖ¨¤ rD[WüÌW¿¦yÛ!ô¿Á'ðMÉÎ# ;ÀXLÀwc®ìÊÀuΊW'ă[L†ëƒ/!o;RœÙfM.-Y‘X¦ÿÜ*CYÚ±»±ÅÿzC‹ç(&þ.`ú~­É}YÏ—”œuÛL/™¨ŒÍÆBˆDÚk!¬q 0q©hDøsKîü˜/«FØ1¶ãr09œì?ÿ㨠ü1žEœ aÓLGFøgU໎ÊÀŸ©ÜºÆ%d˜Þo”ÙàVn-ɤ7soS˜ õ¤!D‘Ê7ÂÎJÀžÇjÕØ¼b1…3&‚yÓ êT‡Ê]탾p¯2ý} V‡˜!„‰´×BÖ Þkó£TÇÌwRuc\û<¨Geà €~ñkÒµX|Ý‘ìv³Ž[#dä;+g;«ÚŸ¡Ù›,Yn÷5LfCØÈðêH%Íu˜¼~‚™Ž§B$JL†ø¬>ðÌ6-ÉD¡>ð̶†Ö×1“ø{¦¼`}1~ÍÀÆNÿ'vš™Œ‰=f®BˆDÛûÒbç&2m έËÍ„ ;*Ú+\ Ê7²â˲+ÚßðÇ$¦ÐÁÀ<›²ᬠx²+÷åV´}˜è$¨Ëјk1BŠŽÒ”NÚb `2Ä>Þ‚õ‰ë°*„ǘ¼¾MG±jl]ö^c‹ÿ]B„M–NƸÕ[\vB”£[ÍLE{±"½ì±í©qyžèdtPàS5LŸ©HvVtT10ŸX Yñu†¡nÌÿY‹Ÿx’¾í¨dW®ËœÓšÈ&$_S·ùÉ.QïEß&>US:i‹ˆÛLǰ«ã4¤"DBYâ“{d™“SÈ~>}cËò%´Ó1 Ÿè³h˜žŠ²ùS³É¹NŒe_®B$Û Yœ—èDt`ð{Ù•ÏëŠ×_Ì®3@ÚbŠ¡#ëÚÎ:þ`ñ4=ļ’AÓœ*ógeàrÇœÀ«D&ZЫÎäõÇÆÚ¡s¨!P»Ù¬p†Ž\„H„ÞN1ƒ þŽ\̨ÛüdWCËòjV8Œ5MS”Ù—9è±olþ^œí@Γ1„"aö¶´ø‚„f¡ á>Ýð‰ÀY•s‡<Š!‹ õ+Kâk‰q}Xõæ;ª:.Ê®lŽæ4õX1—Y ¼c2DFf_fZ><Ó…"†Ù áìÂÂ+ä¨0‘È0ÿÀœýSG.:4¶ùßmhõŸhUwcýÀ[0ýÐÆ›½cšéB‘ _+d¹vZ HXMÚœ[:üÉNB /Îk;Wø—¦pïƒùØŒ"GeàhGUàÁs>LÔq&ÐÛf#0Q:ŸYmÚv8ßWƒºÝäæÚºÎÔ‘Vš:uª g™C†-e Ù]¸±yÅâ^»ý0¾v”ŸI6ØÕm ¨µ¦g!¾xòäY¦ã!D|­¥j„Ycc˜qˆî&`-L6t±¿¦j„“‡~¸ßÄå›™ð b>ÆY8ÔYÕq·óš¶6]¹%‚úþ³÷Æi“ |Ez2J?mm‡`~Y ˆQ©!!,µ¥}Ì ìg&654/5ÛíÛ7.ÙÚØâŸ Æåvh ̘î-ºxÜÞ¾\×´²æ÷ÉîßûÉ'é¹*O1ììµk1•#’]ø‡³¢ýGeàèHØv ßÓ'0ÇhìÌʰ?‘ì$Äðäx@,ÇÐtxš˜Îrl äeW®Ï©ê0ýV3Yꚟû@ƒÉ06e£êÈ'}Ñ[f#0ðMOÑôÃud#„Uˆp­Ù¬rü) ­þ'1Žc}Ý•3Aá ⿘„‰~€ÌÆB«E}î`îõ­›ÅΪöK[c•£¸„W¤¿ }†f·|–äÄ0E刀ù±A†)ÿ `¶Ãé<ÀY¸ÔQÕþÒYE@ôŠù |Õ¤’iyæã¤'L"õsq„°Bi±o2€©fã0¥GƆöeëU$r]©Üꔎ{1Žðº}¦—~ !„Õ¢.dwGÕP9×ÖfWîsV¾Ý—>L3Ax ÀGšs”RôP¢çâKì¶ßbGñð.ƒoRÌùÎÊÀIŽÊÀÃô½ ú–šÅ!ø Û¬u]¬q=Ö3¿ð1‰øY aŠ Kšg¥G(øúßÖ›uNiq™ì•)‰÷ÂüÛ¾ž#ÃêŽñÚ¬o_ù_Œs g™ñq5usô„þ KÃ<Hó8!Dª‹«ýª‘³7muVµ?ã¬\æØ8P ¢;¬Ñ1ÇÞðNΜö[9‡ƒq^ÓÖÆ«»~ÚƽàuTŽÌ®ì˜›SÕ±)Y¹uÏ;(/Xãº,X“ÿh°ÆÕ [¸Œ'\Á†2}Ô7ùßDlË«÷Œ©|¸ak7½ØÍŒ?ëˆÅLó†û‘F"õx ËOpš†P¯65=½]Cœ„y¯eÙF"ú¥†PYÙØ±×ík7½Ø àe ó”äÝ·jˆ#„–ÑRÈ¡r*:þå¬h¿ËY8¡·Weæð¡îùñSºc &u'Ø8Õ±5Pè¬ Ü–¬c›ºæçÖÌ Ö¸ Ö¸þC†­Àb€®àþRÎ ]g2@Oj ÄôØ¡ÓÔ+Ù¼Å3òcZ.mÐsš¦.ÉgþFS,!L+)™9’ ^¤%c™–8 Ö—Ñ·îÛ *èëÌXlvŽ]‘n/-*?YO¬äš4î²oÑE“’‡B/í…ìWíscç'ÙUËœ•+• À»ÛÞZ³ÇMDlKtä)„YÙ•ÿtVµ­¢ê¯/1¶ÒŽ…Åc»ç»|Ý5®C5®· ¢N0?àj~àHW! #Â`Ë«ã0Îf³-õx|™b%Mi±ï p¤>¢l…Ñ^¶‡VÐ󦉩Ü[\>GK,!Lrp߯hõaȶsù@¼%eS½î²Ÿ¤Ú12ï¿ÿÜÇè?Âf0Ð×Çlù#t¬ì0xIº?Xô¸}'©œÐ{€í;ÉÎE¡—å…ìWeU?ß[ê3Æ1ÁâG|s0Æk¹mÚßò ‘Êv>P4®»ÆU¬)X¬q­³Gú6a9s˜Œ˜öŸñÁÛk2u ÆçêÚý­Ð³¤ N¦=åƒÏ¦)^ÂZ0í@¯Û÷3°O,×nØðƒ5‹ó¥Å¾+´Å"ýuøj±˜¸¶©é¥žE Pu϶moy }Gè˜Wâ6ó1;ЗW­Z&¢‡MÏ€ãm6Û+ž<ß¾:â%Òäñçf{‹Ëï'`5€âdç#„ÐÏžÌÉGßÐö)€»~ ´ÀåFç²sÀø€¬®'‚Ž3B¤´ó“aË<ŒœÆˆ€4íL™†ýxZ§0pzº]2ûÖQpò¾³®^»öá>-1-TRrf–S¸žÁ·ˆ{*jˆQ=‰—º}½õ-þg4Ä"&¥…¾S˜¡gI1Ê$Š%Ödà-¯»ü~£+ëîºÍOêh‚d )ÙüÁ6ƒ®fS=\K™¸&îE»ñR&^ž0áâ³6n\²UC<Ëy‹}Ó{¿³+Ù¹!¬“ð7²q\hqTtV¾íp:Ç0h€‡ìa8G˜Ÿè…°ÚöEã÷ï®-˜Ö]㚜覆™›™ñ·ÄþÆup÷É¢±Åÿ:«uÅñå=Û¶ýa²ÛÓ›ÍD+-);ß¡r|/L~pllö7Aç½-ƒ§<ÅewhŒ)Ä ¼Åe'°hÙ&Àà…ÿnòo‰ñ² €oãÜÐFOqÙåHòù¨LTd:ƒn?hìôÂàfçÚÍ1™áðšÃÝÓ'hŒ©Ý¤’éGyݾÕ`, E¬C\RßÈd×%ÏíúÑÿ¶Vá4œKÀ·z7§*´N°BèÂNÑÓ<Np÷áH€û2%â#ó‘:Ãá6füú²ÿvðO{úe-Ëþ¥)¦ՆǽîBÿˆŽÒ™`ÜÎPgе´šˆé.¯ÛwØ~uCë’ÍšâjqøßA*BW)¦—Sëÿ±ˆWiQùÉÜÿ°YO÷lÆÇF$ó®¸/gŒ'Ð¥nßwê–†–gßÖ’W &L¸x„ÃǘCG÷V´—~L|€®eÁ%¨7½Å¾kšý)Õp«´Ä7…~¤”:I~X!„Hœ”-d¿Êqm ÀÃæ_ŽËéÉÎHëæbøÚöëÂQN{äd `j(œ#™«#Ø«3Z}“Çí[BÀ%ÃN$¨xܾ{¡Ð}»Ž˜H Ç—‹nžAFã`jÅuÍ˼î²GúæÐç€ÂuÞ¢ò›Z{¨Nhc²/«6J‹Ng¦Y‘0ÎØ…·’—Ð¥´Ø7‹™çCÓ›X`ÐOÏl3ߌ·¼nßJDŒ7´/[¯#¿hdFÂ×pšÃÊx?šqþO¼Åå?óƒfçÜÍh0–zܾóT$òÃõí+ÿ«1vL¦NjßÒ>öL"¾NMVBˆä±ÏÍs†²Œ÷Hq=ƒêTo‘÷²¶t¶$ºk4èæÍ]š’‡ÑàEî}zúÂßèT€§2Ôá J¡&F”ÏóJFÒœ&mç2ÚŒÈ-JÙÎ0RWLÜÙãp\Uê.»3sô¾O%rﬧ¸üDbu‚(Q®ž-Ê{gPä'Ší#ƆQQ â'½îÆÀe·5´®ø34m¸ŽFiáE‡(•¿ÇL…‰šWX¯ÔuÉheï›ËŒ+4‡nSðÑ"´j‹GÙaD IDAT.‚M]àu—/e¦_6¶.{O[ô=ð•} 粆Gö©ÑÎ5ja϶mWØëÙ³ñ à›Ívž×]vèµ-þÏtÆÈáîéˆ\µ5@—±¼Ôb³@¯Cá`&:À4ƒÙ@hWW°†À\GÕ1Eê{`Ôº6`ú©¨CYpAÞ)Ät3M õ…`K`­+ "|€7u¬kZÙYZì»Yc“—Ýå1è·½ŸnûyiqùCa^¼¾ue»îI&»,‡GOS:‹g9/‘+ÖꚟûÈë.¿à…Mqˆþä-ö­'…}Yá%»ŽÑÊŸmSˆq0p0¥ì_…¡ck`ÌÚRwÙA£ë™A»üšVmxÜë¦3úæ>&=ÌÆ¥«V­ kŽ ôß—gñ%Þbß+Ät}Ëò× ùfí-ö]ˆþ³]u<À|sM§?íàµkî›T2ý*¥Ô?¡^.@Õ=À½îòŬø‘Æ6ÿ»šçÀÔ©Sí·9Åà³"P^’ÕÃB캩E”qÈ^n 9ÂqÌ °,Áù®ÿÂ@#3Öa­"4f;Fº²-”ÀÜ…H]Êø>3“F´ˆØ…,Ô7ûñº}e¾­3îç˜1àŸÙÈö3¯Û÷3ÿÁ0°¦/#òV¬Yÿra£Ø ÈQ ãh€QE™”ÄÏK -ËòùÎ Âù–MÂ8” óí½ö¼nß?@ø=ƒÞpƒÿŽg w©ë’Ѱ‡'3ñ‘P˜¼žðMÆÈç΄›Ä ß:Tî=^wÙB&zº±Ù¯u%ÓÔ©Sí[ÛÇN5Þ TgìÏ1è6«ß– 0Ngðé^·¯à'-Þu¤XÜŽ(¼`TŸa¿Œë¡ë)Ç~ÄY]Ó²wJ‹Êïeb«¾å|-øÿìÝy|\eÕÀñß¹“µ ‹´T Í2 Ýf–*PY,"(¼€2iÙQA₯¢_w–¦`Ad_šI)Jd+[š™.LÒ´ ´…ºd’ÌÜóþ‘€µt™Ì½3w&}¾óèÜ󜤙;÷YÏ…¨STxÖy1 oë°Îíª®>¾¸ÐVæSßA ŸBøÔÚ.>…ÅÈ 6 Ã#"2Ä BØeÏ£`)Ä7Ù}ÝeoˆU›%b±!:°·Õ0v)‚,T4:²È@XE ÎF¯âþ,ÍÖ‘ƒU¡ ·€ ?ôo.`¥­¼'h\…nQJ)Ø],J±§B9Ý|±Q„\{XJ'¾ZÐ[ð)`¿ 7åŽB9JPzJJ5þÐr…˜ ]ªÖ[ ï[–ö©-ëEìሪ-£ÔÒ}D)W¨Qú*€þ£é¼æ‚1 ¢4ý¡% KØÅ,ŠFÃ;-ã²µêêã‹K“#UìÓÖvÉLD÷ÎDÒGÛ›®ÍXüm«i°}ü$Xz›‡-Ÿõèâ¶yÿ"Å›C°jæ8ìä—Âe£\ÌÍ–BûÞt.Ü«|õUk»FOŽp1Ÿ¨@ä…KúCë€"t¾£jõ)öB”"2´a_”rl> fÙ†a)Xf¢n§^LVe2B¿X¡»±| èbQY¬Ø­¶O›Ù[c¨KZú‚•s»Ë·OÑLtd‰tÜûN *t¦(“ÝÃåöQØ8´Fu`!šü§o¥yÒÑZ¶ìwk*ëÏPÑ'pñðœhÿG@n¾¢ýþþð™3~œ»ºÉ “Õæ¥›¾`ÿ@Åb Y¬°ìõ¼¯"ëmŸ%²›ŠŽT• »JE‚Ø¢¢¥YøÛ^¦=œw#K‚rÂa¶mÿ<è­Fø—*ÿ²ÐÂ{ɤ¾×ÿBßøø¤¥¨è!hò0$ø O´¾>?­É–––D°jæhò sƒ·'°§*20PøÑ²`þzM¿Õ0Œ4ô?X*3ׄŽŽQÑc@°lˆo²“Ýe+–ˆ²H!ê–­íZš‹‡KÆ` [ÝõZ|TÙ&`¸×¹¤Dðg*t´=ü÷`eèÌTC]kGÓÓÁªÐ—Qî!Çêy« 8a\ú?€D@Ñþf‹‹ìX£ÂIÑUá÷²ÖâÎíò/|ø³°¬†Å>ü_FY¶^íäúHû}+ƒUuÓQù;PìRZ†ažùð(Û®}€_àD„ŸˆÐdC$>ªì½îƲg»ç”ÝŸ=î›g—®×W»yê©ad…4\?ô"ƒÆªfnŠ%Ò¾EÑk2WiÏSt–×yF†mû·÷ó÷/îh~ÆiH{óóŠ|̤aùÏZwMŸ["ÉÝÃQ¾¡"7ŠðlÜê]ßÝXÛÜXö`w㸟m¾~ì!^'i)ŠzÀ ”lüCÕèL65[•›2ÙÆP5ßr•×yF†l´Ð/Ebó_ñ:‘³>©ÉËÝ 5Ý+è×0 z ÃÈsÖ0Ÿ½¯×Iì„•_¹R|Öç¼NÈ0R!ʯs KûÆe¸ ÜÁ… ·e¸!-kjù*‰r$†á•÷lÛþüâXóß¼N$ç¨\àv‰±ÖXó­¢\‚é̆‘Ç,Û"¯ŠIÛ¶.ó:ÃH‰æÕŒ,$5ÓY„“ÑXø¼]h™ñk8*á±-‘XÓŸÄÒ:`Ðåq #­$i±¤sþ‹^'’kDå瑎¦¦LÄní7¢œÃ®1(ö¶ŠºZbÎ0 ïYˆdº,†« ,k¹×9F*’Å’WY’ñŽìÆš/á /KmfÛf«´”C^{=üf&hmkþ³eYGæžhä³§ÔæÈŠyK½N$ÝÒÚÑôãL6éß)*Ç«3ÙŽ‡áÎDQ"…Ÿõ:Ã0Üe©W3²‰¢5#Ú½NÂ0R1ìüoÝ^ç‘2‹±Ùl®µ=|“Š|x'›ífÁý “"±¦†têtÆâ¶yÿÙËA¨^ŸÉv #TÑ_MŠql´3ü¶«}² Ü_ ‘M‚\‰Î' K[;šž–{*ùu@a*^±m{j¤=üåeËx×ëd ÃpŸeI^ud»¤!šÑCÃp‹аÊëT¯ï+ì9 f[;šžU¶æ QfAί*Rà Г"±À„ÖX󭙘å7 #7#¼N"U ®î£1Œ,ÈŸÁõ´# À«®®˜8qú¯ z}ƒ| ²»ww'^Bµ ïŠÄîÍÙ½½‹ÛX |§¢âÜ+‡û6Ö‹Êw ×ym¥ ÕU$…ŸÃ”q—ò„é@µ‡Y¼'*7øôúµ5­ñ0¯wߟâý_¯èLEÎE9ÌÔúP¹×'rõkó^÷0iiiIÕÕÇß\ªÃÏU•ox×ÚGÂw× kö6#Ã0²®@`x¾<=ˆðo¯s0ŒÁPdäÏó¹çÙ ÌqUˆÐÏ—UéqØÌP‘€ÑYNe°P'%©MÂy£³ó¶8ppgÐÚÄ:E”S¤³xNEŸ±¿µ¶‡yÃ.cTùš´´´|/P9ãHžf‰œš¥¿÷M‚>d«Ü×ãÛøx¶g_S±(~˜ Ì –Ϙ$–žèô,¾/V)ÜUhûæ¾Úy_g–ÚLËÀßß\`nMUh *g)zP•åT‹lxJ°çGbó_Érû†aä Í£Yé2Œ¼a¡ïçM76‡:² NÒΣÀ£Ð`ÕV,=Ä–äá"r˜Â§r›Û,Ee)Ð*>}®h÷=_Y´è¦¡P"Hü^® T…ª±ušXÖ¡¨Bÿ¼ÏÅöâÀ ­ÏZb=³¸}Ò7÷¬‰È-jÛ-é^o‰õÚ`^ß[ØûïÂÞ‚o§ÛÀÆß{N®OG´cÞkÀkÀ'•Ÿº¯Àw*G úY…É€8l¢xYáYg‹ãñ§½µ oêÌæýøÑþã“ØÇƒú Ì¥flàUEŸ@¬Ç£í“ÿ‘û7Ÿߪ©8m¢Z¾iŠ*¡(ûÓ¿ÊÏ ½Àëˆ,Eí(ÊB&ÏG¢á\ßrbF–IwcÙJrkéÞö)g—ÎêºËë4 #U›ËêæyGŠzJ/î*ñ:‰Á˜²ïIÃâÅÃöËö«-ûŠØ£F#)ÖuÌ{½m‹"ºÉBÖ#úÂÛª¬‚•‘öûòf?³ÛjÇœ=<9¼w2hP&jW RFÿ@ç0 ØÅBØ@ÿLõ&DÖ£lDu­X´ÙÐ&øÞˆ´ß· ³T8mAÝ g9‰1ªlMáÀòÐí B#|=Öø¤­@' Rº0R”‘ »ü}÷¨²I„·P‰!vLÕ×Þãû`Y.κºaâÄé{& ÆcëD[©a4ÈúW†”(#6=(]%Xo!vL’¾×è.j]üΛ<üV2nÊ”ó ëÞ¯Lbï¯*ûbÙcDe”*¥"²²Å@™ÚT%!Hb¯·Õ ï¼Ý'úö˜²w;vö»k†ý£g#½N"U–è¯s0ŒÁ°D׫:ðÈ·FÓ³f`æçÃ'#MÙ/|»ˆhÿ ×?¾Œ­ lqX8ðeìÀÀʕ׾Ysža»‹þÑö¼ ¶ éMcèQ%îuƒ`y€a†a†a¤"¯\mŸä;Ã@$ŸöA‰ªãýr†a†a†‘qý‡ä;Öh€Úy¶O0œ_ƒ[†a†aÆ®)¯:²¢j²übI~ud×M1ï1Ã0 Ã0 #çY@Òë$RV`:²FžÑ<›‘íyᬀ Ã0 Ã0Œœ—W3²¨Ï°bfEÂJ¶9hµ¨¶…—8‰aFúj«fmìFl> Ê–ç&ƒ~±~ô‡þl%¹|ñŠp‡wÙ†±3–Àz¯“H•-b:²F^±É§ßY1Y#oˆàƒô¿Tñ ¦=[“â¤=À§Ø¦„œax¤¦ªîx[í…(ŸÝÉK8Ŷx¹Ö_wL6r3 #=–Âû^'‘*QÌÒb#¯XÊ>^ç*AÍÒbÃ0 cÈ©ñ×^Uþ ŒHù"a/y¸¦:45s™†á„%hÞÌÈ"ìçu †1*š7¿³f¬a†1ÔÔ–‡* …i\^¢6Ô”±§Ûy†áœ¥HÞÌÈc½NÀ0é“^'ª|Za†a©° äWàhEß-ìý[ù†áž¼Ú# Œó:ÃÉ£¥ÅÊÛ^ç`†an©šÕ:ÇT¾>eÊùéÌ膑A–мçuƒ0VsX†‘´”r¯óH™ðo¯S0 Ã0 ×$¬SÀ•çÆÝãë×éBÃ0\daÛ«¼NbJºÿ0v_¯“0ŒTôì9¶(ò:T‰ªéȆaC† 5nÅ•ñnÅ2 Ã"]^'1VÒšìu†‘’k¢×) Ò[^'`†aní^,ÝÛ­X†a¸Ã’+½Nb0lxƒa¤Â&¿Fo“–YZl†a %²Á­Hæ@DÃÈ=Vq¯¬ÔëDR%¦#kä mA¹JTïÚÛëœvDHšÃž Ã0Œ¡CÕµÉEòi+žaì äòUÝÝåkA][~‘a¦#kä…áv-}øï:gôˆn-ˆXµjk­`Õˆh­B.Ô§ë-]ó–™‘5 Ã0† Kôqù® ¡’É¢¾â†á¢AWª‹û2ì mIC´×ëD c0ä¢5¾>²iö¸}}*“*L˜¬ý6%YL¯]Hd±=Ã0 ÃȨÂ=?ñtϺu+Àq¿,[öÀ»näd†{ þ?ìe"ƒP²yô/{ˆa¸aø¬•oÑÐÒ“þ7mm½i²OíUj2U—VáõLÄ5 Ã0 ¯,ZtS_°2ô#„;„IZbýÀµ¤ ÃpM€Â¯ ŸÊTLGÖÂV¼:ðõ‘u×TìQRdE™lC@` p 0ÜI{–°ÜÉõ†a†‘‹"Ểþú@g¦s½Šþ`qû¼ˆÛy†á܇Ù¨Õ¢³E‘©Àõ^çaÙ¶ç·:×Ï|}dÓìqûú,™¢6SÄb²*`"`¥WULGÖ0 ÊÔÚTüµäðø~GîR¹!ÚþufÒ2 éŸMÄNéq×S¶¯aK‹ÂÃ^'c¹d‹åÉ >üoz}õnݾ¾ eÛµ*V-h ýÅáwÿXQ³´Ø0 ÃpÅÔ±¡Ò…«ÂÝ^çñ¡Åïܹ©ºúøcKìs€ó€Íßt#zE¤=<; 醑¦€¢âÑoÄûÖôEç³%[ÑVDZ|ªOu[òôv­ó:)ÃÈrIÛÀó_é¾±¢Bl»Fm­E¤¨M${ÍŒ¬a†áXMUhʪg—{Ë–ÚÚí¾VSºEm®ŽŠ·zÙjÐû-˾zqÛý¦ÜŽaä¸þS‹/XÔ×=»ìu„ ‡¹(Qx ¤%AâéÝ.~Óœgäø eþâM=ïÈwßÙäu.ÛRúÍÎN “-fo Ã0 é`UÝgTyÔRð:—íim /þg„“G%‹ƒ¨ŒQÛÞlûôÍ%m5K¡!§k¾†ñý“°²Þ‘O"<§–ý·aß\õf–Û7 שÍñÒâCºË^TX Oûf×?EP¯s3 Ã0ŒLTÕŽê_€Ý¼Î%Ë—?´Xøßÿu¾'¹†‘ž:² ÿ¨Ïp{ÿé¸&“vÉ›fÙ†1¤l¼¶r $£ÿ¥ÃâsÊÞén䯪,(-*ø«\{ßë\ Ã0 à µ•uGÚª#½ÎÅ0Œ]ÇGY±õy,×Ï.ŽÏ ê¸j²à±ÒKc]Ž34Œ<¢*§°ó>©Oa ÂËæ'ñ9e«ãsø‡ÂÃ=Âs¨™a†‘‚•uÇ©èƒ@©×¹†±ëùÏŒì嫺»Ë^>=ˆëÛmÁ–-°Ÿ2{\]Ùûíú¹4.Ý[•*VÝsÊ¢ ÅÀÝQ,„u@èFø·(m@›õÆ&»´µ³ó¶¸³\ó[uõñÅÅÉÝ&Šeû±ÕX~«Ê0‘(E »¼¯‚-ð¾"«Ut­Ø²B,Ú4!Ë#+&-‡Ï˪ÕTÕ] ª7ö§lÆÖ¬˜YÑ'ÉZ 2 å“#E©àCY×ï”u‚¾ŽèË=¾Â—_ýÞµ^çž®€?T&PZ ÖX‹2fà@ÞÝQ¬ïqkÅÖ·Õ’U]6-Q,Š…ßw3§ŒÝ zË g+œ ŒÉT;[SìÆ]¼êÅlµgìºâsƧ*{G:Dìýó­dUMÙ{Ú‰Ï}¸…|Fá`Ü+±xIDžUì¿·ö¥–––¼><®ºúøâáönå ÑýDíᢔ*²"…"¶¢ô¢lD¬MغI”®OT®Y™/ßwÐZœ˜îõªÜí_êëkËC•¶G%élË.i›uÉêêã‹Kí‘ÇŸUÑ£P>…óí8Ê ˆüC…'¢íMÏ3Ä…&L8ydAoñÑG |øîÕTݼ¢ðŒ¥ò7{˜¾†³ºz&à¯ÿ– ¿ÃÙ3â‚üÚ­œ¶ÇVYí˜÷ÚŽ^3~ü飊É´ÓkzÒÉõÙTQqnÉH6TØ>k_QöŸ{?E"$^lÝ„ÅFlkS‚ÄŠ`‡oU˜pÎW:¨­š¾·ja­“"}‹·?°z°×M›6­`MçÞLjð?ˆžT¥™B¢M*rw´-¼$ÍY1ul¨tC¡œ„ðEÐÏãUb Ï‚>Ïj‰´ÍkwÎÕŽl÷uþ2õ%N—þR$ãÝŒ=—^ÜõEÚ6v!ÝsÊžF9Òë<K„•\Ôu°×y¤"°º9Ya&ð (KM¿¯ðˆ%Ñ£/\îÎR»ih°ÕщbËaSQ$B¥*û0ø{|X t òš* -_âùÅm÷¯r?ogLG6u5U¡)jë—9•áæV*zX¾›> ä’©cC¥É ‚žœ@ÿÊlØ$ð¨ ÍZÂ#Ñhxc& VÖ}‘ßf² —=‰…§ïèÊú“Dô!mh$ÎÁåÕ VmÕÒÉI[§ŠØ‡L*}ÒÖ‡²R…à5AŸK&í…KWÜÿowsv&PªIa¹É(R5¥¼*-Xyúµú¾.*ßösÒöÖDù×OlçÎ\H¨ñ‡j.B0°²-s–(<„ò@´#üÒ`/vÜ‘ý q¿½Š°ê9 ˜êFLçô³¥¯|Úë,Œ¡+ÞXv¬Â_½Î#=rkÉÚ_“<_¾¶=ýùè¹ô/qôÒ{l+9wIÛüyœ 'Nß« ·ðK Ó#èß÷œI+Až±Ãv‰ü-Û3DÛb:²;"ä[æ×™*òC”IÙhs+6H“ØÉ«Z;ç/ó }W0>´_2)ßBõëdþngºæùlkîâÎy/¸äûôÒçÖ3N¿×@þ· ïik»û§ÁjüõW(úK7˲!ß‘­söp?S•™ÀQxUIyKûÖH{óó^¤ŽìÀŒËý_ö¶g‹À‹¢œ³¸#¼<›íN˜pòȾ⟑Ï^ m‘k£íMÏíè…)'« Xñ½Ç‰mսɮ“ÌϤO9rÓìq§ ŸµòA¯S1†žø^å_ÍÇN,Às%…¾{zû>›KØ NYÔWòS[í‹Ará&ºM ‡‚ÚSRòû`eÝjÉìh{8£{ƒ•§Iž»QôT÷Íd[)ÚSà\l97轪¢×”ìñ‰{-º©ÏëÄvuÁêUjÛscr`iÔ‡| g%œTSú^k{øfrxíÔ±¡Ò…òE¿‹{û^3áÐKìÞß*C÷ø,köâöy‘týõ ŠþÄí g¡OŠ%ß°5~1Ê^^烰ª_ùZÐú§Š^7zÜÚ{¼ž¥uS :4YlîVžñUá_5þú«Zc““ƒßj«gœì³ï%7>?T P'ªuAè%U®Žv„°ÏŽŽ0õÌ)ŸÔ=»¬!>ªìul«øZNwbX"¿Ó[+J¼ÎÃZtÎè ?ó:t Ü)ÄÞ/™µÒÉè´«•¡ºÂ¾â¥Š^FnŒ¦bD.;s5„ƒ•§ T†æ"‰.E©J.tb·v ¨ÜÞ³n][Ð_4äÄò»]Mˆ¯Æú>¶8Æë|¶cwUæý¡‡Ç?=ÓûtÓRSUwü†B"*z%¹Ý‰ÝÒη5yE:*ë~ŠéÄæ”Ƈö øC·ŠEèOèÄ~ÜÁ¢rûÚ£—×øëÎ$'¶:"5þÐåb³ïWÛ•*úË ?úà”}OÊèÖª@UÝLÛ¶ŸÏ‘Õ;ÛsˆúC/ýu[…µÃ‡ŽÍsög«F~Bú§syÅ߬ßõ: ch‰ké´RÈ=qËÙ’7UW_¬¬»n`™«(ä³@ Tô‡.EËE8ŸÜ\Ö¸µ2Ð[‚þè˵•uywZ>«®>s·eUܯð@> ÞžPÔ—x1X>Ë}»Û4mÚ´‚€¿î—ªò‚ßë|²%XUwµˆüÈë<Œ~SdžJküõW$,•þŠnÊŸ9‚_‘»‚þЋ5Õ¡©^§“Žêêã‹þÐ] ¿#·î¡'ÅKJ›âedys°ªn–¨ÜMþ ÚMiÞú?î°#;좷V⸖‡Tÿ·»±²Üë4Œ¡¡gvÅDàr¯óH—ÀÃ{\صÎë< ¿Y‰=âiD.ñ:—\¨ }N6³¸–,ïÍqÉÁ¶È?‚U¡;2õáküG°|Ƥb»÷eUNö:—AüøìçkýužÏ×VMß{M×èǹ‚üŸUJ•Ôøë¯Aå^'bô«©ª;~CËö)ô:Ÿ4|Zmž­©ª»)ð:™T+OSjø‡À^ç²-GöÀߪv3n?t*בÂÊÜ\·óo@å–,ä‘)¥hrŽ×IùO°l±ÿHþŒ\}LRõ.¯sVÕ}FàUà¯sÉÓ¦M+úëDybÌ ÊÙ=°8àáu2CUMuh*>û…_¶#{ØÈ#ÁÊб^%¬<­ÖÖ‚×rx9v&H°²îÚ­†Ç**Î-X ð0nÔèô–¥*_—n×VÌ8Ìëdv¦füi~•Ä ýg_ä´ƒ{mæO™r¾+3ô5•õG)ÜÆ¸ÛiG¶d„ܼ—…\2CøŸîÙegy†‘ßzF•“þ£îóÕêaïîö¯“¨©¬? •Ç€=½Î%WÔV†&¬íýâÀ>µ¼ÝB™ÀSÁÊÐÍÞYwõ×…å¼/ãT1ƒ5•õY¯2P[=ã`ÄúðÉl·í!©ñ×Í6+arCmÕŒàkÓË«†Ò=²Ò¶ìÔøC—“£¥`ÕÌqš°ž¨ð:—TÙ³nÝoœÆ9°â”=TôòaÙzŠvúÆ‘¯tÆrb&'mµçTìJV†‹º¯ó—)ú ¯ópèiˆzZû3Pú¢Š>F~.›Êˆ`UÝgláYà`¯sÉ„ŸýÑæ©cC¥^'3L®8íPUþÆÐ ¦¢+O«ÍVƒÿŒOÛ¶ý“‡NeˆýõŠ\äu"+CÇÚj?½Î%CŠ~¬ ÝîÖL¢[‹&Ÿ*½Îe.­ñ‡-NXE¿†Ô–Ë”F€|jÿ1Ó‰dØ^š¼Áë$Œü£Møð%î$¿g>’à›ëe5Õ¡©¢<˜ÎÌ€šÊº*c×x˜ž¾¡¿åêiµùâÀŠ™–e- ?÷OïÈîˆ5ÿÀŠS2^¡¶jFP°Ÿ>‘é¶rEˆ/àý ôB¯s1 è¯?+*vN9;¾nÝ£ÕÕgæÒ÷úkòï[T¹¾¦ìŒ´1k+C@¿êvN^K©#[¸zèG©NX…wÁ¥ˆãÇŸ>ÊVûAv…Ä€!ßÒJùÓÀ)¸†Çj*ëz ChiçÎSb÷>U[5}o¯sà´@xS <§ð °H¡ÈlM]a/õõ6¤s©-rùSâ0e)C*rÀ¼L&“y:»÷úÊ—‹.éxÍëLŒÜ·iö¸O!’÷õõ,QÏ<«®>s·„Ýû0Æ«rMÀ_wÙ@©”]ŽB ™à©`åéGF:î}Çë|òGƒÅæè]5ldð¢Ëº°y‹j“Ø]Å©h¹(!3ËòN øë.Æš¯u;pEŹ%E}›Bòs&&]KýrèL¯ó0 à]¥è•^çᑃm-x2064-º*œoçîØ ÏYð  /QÊ«Ñhxã¶^8mÚ´‚Õ«öš I™ r¢_ÄíCBE. T‡æFÛÂKR½äÀŠSöH 3\Í@yáiWºTõÁŠÛbï†ò ˯ª“¥¿6oFJW¦Ü‘-Ý»k~|uY òúDÍ’¤•¼Gçîûi¹à­Í^'cä®õ7”íiÙÌ#ÿGMÛŠ/\ùíŠ*±{o…Œ>|oÉ–ËmeX²e#ÂUJA÷@¤ ¥ å%šAýy ¿Ïf›9h$ñxMÙG·vÝ“å r]À¹D/e t•ÛÕÒ£íá¶Á\8©òÔrK¬é‚œ‡‹ïqA~ð‡îÆÂ]nÅéÛx½ªd«Î¥",CYŽòÈj±ôT7Ùj ‹RQÝÃî ¨’þ{Q†–:k}fâƒð×]&ðc¯óðXóH :v{Á³NàZ±’ZÜvÿªT.hiiIÐ?Sþ8qâô½ { /SÑ˷ʈJò{;!E'‚s©}^´U®.ùÄ-ZtS_*×ÔV†&¨¥ÓTå$àXœÏŒƒèÈJ=Éøl®Uáz7öÐäx_Áà+^'bä&mÀŠ«Þ ’σ6ˆè5"¨m+Cg§f¸™õª4<\¨½Ï¼ÚùàúÔ/m°Õщ’d*–‡ÊÉà’ÃþŸ‡ÞLvNq\¼Ò†Ú1,Y%¢qlk€b—ˆR 2F-©@µåÀ,–þ9À.èûóÔ±¡/,\îÎR›yi’ÿ´ý¹ÚÕ ÊBµä‡Ñö¦´ëÄ/í¸ýõޝ V†ŽEø5ý£îN G¹8Å…XÔøëOPÕLo-Ú(ªóÕ’?÷ú žyýõ{×âZ©­ OZz¨¨uèñ¸Ô±U•oX–úž£ÊùÀ”ôf¡XÜ–öõ©6ckg¦Ûp*è¯ÿF0ßCxYá KéPáMµé¶D6ØJ©…]¢ŸT¥RJà ²ur˜t3?†==€râ ¿.ß/Š…ßwhÙ²Þ~t`ÅÌ[VòvÜÚª¦:ýÀŠ™¯vÞ×™ân•9ëaVk{øf@éHýÂÅáåÀr`î§ì‘ôžb+ç é$¡A­•..JÜï+ø °—“FsÀ¹ñÙe¯–ÌêºÎëDŒÜUþ3T÷:¬.îÑ[½h¸¶úÔ±¶ÁA/a)¶üb£kîì¼-ž^;ÚÆúgqo BE²Y§!œ r.LðÏø4Ø7“¹ Šð¢ª4ùDžXÜ>i 4؃ ¬<} Òw8j} Ñ“Œ¾#pä†"™œ—©6ò_ƒe½pk$}*—D:šî÷¸"á'B„>µÌÏ¥Ëæ´‹ð¥ ¿îÄH¬ùa§¹Ɔ>¡èÉÔ’Sä—¾ÍÅ÷,~çÎMéFÙâ!ïŽiÓ¦¬Y¹÷‘¢öY !œôíhº9ë‚UõŸG5펬 ¯·¶7ß”îõCEÍNMæ0xÑy$|OFVÌ[FïíIå§îS`YGØ"§œHf÷‘'›å·@.–zE-Î̲ÝT¼Úy_g :Vºåv—–ú$}öÙÀÏRzµ¨«QzÂâöæ¿9 40épp[ :4Y’z"_!{Ý ªä‚·6#ò‡Á6’‹Tø]|ö¸/x‡‘[67–Oý_¯óp…p\¾Ê“Ù.ÛöÍ%3 ·=+ÒF:šîJ¿ûqÑh¸7ÒÑü×H¬ùìâþ½o8;~ü飻·÷ÉôÛ„êõXÖþ‘öðÔh¬éšÅíó"étb"÷¾‰5ßéh:GK#ªõÀó.ç¼ýJÿrkc[•Ç£Õ[xÙ²’µ‘ަ»p±û¡0ádk,ü{UŽV;(WãÂÿs-™Ù›õžªœ?ª|Í„hGÓÍ:±ÓÒÒ’ˆ¶7=‰5UKÙä«@Ä­øFvL*?uGfØÙ€Èï’š¬ŒÄÂGDÚ›gGVÌ[Jšïí¥+îÿwkGs8 Ÿ¹Ñ>FàLàwSÞ‚è¬`e}N-{WôšQek¦ºÝ‰ýP4îU¶úlà 7⩦¶m ºúøb\8Ó@UÿoqÌy'vkѶð’HGó¥’(,G¹’A~~ zv ‰4®=‚V̬ØÙ‹ŠuÄ8œ¦ôùd¶Ã;ÔÚuϺHGøê‘½T|Hi{Æ ;²#.ê|[aH,ØCíä#çT¸}£1òTñ¬Îe}$Cå^çâˆr£\s´·#Mb#¿r9f‘K#Mçdÿp ;k¾? *ȱÀ N<ú£³€ã\NêeÔž‰…/Ø“q‘öæç#áÃ9XãrøRëž)SÎÏ÷ƒÕ\5B6^ŒuG”ÇâÖÆºEo-ÈÚ‡Kcóß@퀜Äá‡N®·mûW¸»œ_A®ŠÄÂuÑÎðÛ.ÆM©íÖXÓ_"±ðgîE‹²Ü¾1=ï­ûž‹«)>ôIë€ÖXÓƒ;"}‘¶æ–H,p¨ çnþŽLbß"äs9î`$Q9£µ#ܘ­—-{à]®p#VÒJ½³×¨ØioMØBë¿ÚÂnöoÓÂUáîÖXø÷}…=~«€ ;z}Z7x;áûàÚ2UYš|Lçú‡Zy#M»]üæ»%ïŽ8Ä“ý¥.Ø”Lú\/_‘Š@UÝ œòq±ôØH{“ç‡ÌµÆšžœcÊÀ2¿Ž¦N*?uà*7sPå&-åˆHÇüÅnÆMµùh¬é^KAàWC ¾þ½o¹3Ÿ¡ˆ|ß…PKìa„ÚÚíq!Ö D:æ/F8ßa˜Cj*ëÓ:%X:ø¼Ãö·Ô£*_ŠÄšÈÀÒìÁh5=‰…?0“þ²IF9°bf‚›[”Õë‹÷ÜóèåÃYÖ`·ÆšoE| ´¸üSKüzË1S¥ªòÍHGSS¶žØÎ(1§qk§ƒ%b[öd{àŽåËÚ‰55 ûƒþ‰þÊ“VGvÄeï dtŠ9›9 ÞÛ÷˜þfŒÙÆ ÑÞÒ‹Wœ'ÊelçÍ“³D®qY‡'5:Eå.†Û¬"'GÚš[\ŒéH˜p2kúSÝ7ÕëUHnïµ>Ÿ¯÷Êû$DøJ´#|×'=.n`u$> ÁÕ“tEåÇÈí%ØyÉŠë™À(‡a6[Ê©^–¹ˆ´‡ç z¯“*ö9i](¸Y¯³W•úhGÓc:¥‘öð¼âx|ÂÀ¬E®ž»ËIø’ÜzžìEef¤£ùÒTËœdJ¤ý¾•“:ø¼¢×¸W«ƒ•§g¿Ö¼Ê•醿T˜pRE]èGéÁ;}…m»ñ{³§ 1Ò2pvÇW-Ëú´Â³[ÿyÚKnzûìß^,]Ì ‘úKŠ=ª¶i䪒Y]×)RGþ¬@x/Þ+¿õ¢áÚʺ#q¯ždÕéNʃdÒ«®t4_êÛTú£mýy ¢þ ¸Wz¨GDB­íáÛ\Šç´‡¯T•óé߯ë†á»z]~®Îb Wœ„ë)«@¾‹£û§ÔMÙ÷¤AÚ¨MÆ­2 ¨œí?äR[¾ëR¬|õU§Tùa˜°Ó‘~×Ú×ã`æA±º!PäìtÛÚªÝG[Û›~îF,cè TÖŸ¨‚q*è­íͺ+cZÛ÷©¨{ù|’­{¿ü$[‡e팪þÝqÑ 80Èåx/½ˆü<06ô §qÜæ¨#+_]¾Aл•ŒGn*YÛužÔ;žÞ7ò€Îõïߨþ¬Ûê ëÜ))Ÿ”:|ÖÊ·Š G‰êý™Ì1]"üT.x+k'“þwã‰S""ý[{5¿—ȹ4"/ª·gó$E'¢±æPwŽæW¤>k#ó¹G,‹ƈD;¹´—“W;ïëœÔü\ª'›Êf9ØÍA[z_ÄwÏÚùC\êÔ zCk¬9/›Œ¶7ÿÚ­ƒ1UåËŒíçF¬¶ƒæL QAžq#)ÖNO·xÑi;À)â-eÎ6ÇÇÒï½ò&WÝH&ë„?”¬íú¦4äÙa>FZ6^[9¦'‘x ÑÏœÔÓ·zž6¤^_K.xksñÅ+ëPwO£uA´xM×-¶ïôáU.‰® ¿çF,/ÔVÍ ãB¨öÞ¢^·f9³B‡éw\ú°ôùÔ—Wß»[‚þÓ¦¨²¯“ªz9ØùRÕ°ƒË÷\R™âiè–ºr/Ñ+"í÷­t#–1ôÕVÌ8 øŒÓ8ѽùµ*ed¯^¸q’~q2!»ÔY5…>çý'±w<#  ˆ“Ä-Ulx`„“Ý(éã ÇY©'©Â,rðƒsGDô·¥™Nì®"~Cå_Aò9Õÿ^ö£Èôø^åwh)×1AKgu5çY/k± z¡4¸vèΠ¡Àç\õR´#<ß…8žIª}¦q,ô‚åËÚaí´\†{má,Àùh·èŒiÓ¦9-àž‡|N;a›&÷¹’ŠË|>ÛÑ^?ò±µ!6'8igÀò½Æ­õr`ÐÈ3IŸ+÷~ÛúÚÂUánbeÍÂUán³påà?=çqòÃ@mVgU&v²´ ¯Ïz—β8¾°¯ø™\Y9åJ¡ðÒ‹ºžÅáûY%ruÉE+Sñê™]1qscY}&S22'>{Ül;ùPµÍˆž_]öGmÜû¡ôâ®Û±õX<ß'®÷–^¼òi¯Z—n=(qÇB@ž ˆmE€™.Ĺq¬Ù­ÑӬж‡Û@Ü8}rï5{»1³_Dv*ú°—åvvdqÛý«€ö´‡íì%Ë*8a¯´ÛøÊ[ZZ<4òÏ´iÓ D 9¤rçâÎyNÿñDk,ÜŠÈu.„*TÕ;žÙÎ+B‡Ã;]޽|å}o)<î¬ÿr€ëŸ5U¡s]Œ™W:²Iñ}pãˆçÌJ/Z‘r}¹÷?ö¶e?$0¯»±lî`öTÞ‹7–¯" 챓—ž5îfÕÁ–^²ò±8X’~–ŽlPŸ~Ï£¶ˆe.–,Ž5;?ôÀC5•õG T8 cû°þ×|¼²ÑöKàM§q,±sá„Ĭ™2åüB”Ä•?»•OF(¯8¸ºv§¯ð9¿‰ðVñ'öxÀic×ñn×ÞÇNë öaYnÖ>κ¾‚øU(ï:cé®uïw¡"FJ0YˆÛgnŒPåÖ`Uè1/gg]ëÈŽ¸¨óm…_¸/ù^éE])ïmÔ†@QQ‘õʇAçÇkþòAã~ÎG|ŒÒߌÞÝXv›Â\Hu¬œ×=§lÐ#Š%vÅâ}ÖáÀƒ½Ö)U~>웫wJmïÚ¨Ê ä÷l,jÙ'9!ÂÃ¯Åæ½îF>^éì¼-îF=X9\ûŒÊuÝï¿ÄÙÊI<éV>™ âhÀ¯lâÄé;üìµmu|/B™»hÑM¦‚‘2Åù½_!œï{²—/hƒÎË~‰Lw!¼!j½å0DJŸ­±¦¿/9lëã”/ø°¢Áʺë¶še•« ¥…£Ÿ£?©(— »xÅosQ|Ô†¹l]T]ù|!¾EÝsÊŽp3AÃ==³ÇÖÄK‹_Îìµ³âsÆ ê÷`Ïou®/YÛuȃ½6]Š,öºöñÀI¢NË $û }óÜÈÇSê|6ÈF®u#¯Ù¥Ü¬sfÏ@Etç³pC„•´ÕŽX²¸ýÕnå“ ¶¨£AšÂxApG.§œÄH`çÏ6)#G¸±*É÷þ^G5UÙ7Pªv)¥Ü§8Ú"ƒµlëR”BÛBD.‘n–ªê¾œøÛåjGV.XÔgÙ¾s\ÍT¹¤dV× JCtÏ)û>ý‡ùlK9JK¼±ì—f©qnéžSöe[¬€IéÆP•ïÄÇýv°×I‰Ò‹W\(p®z°C Uû«^×>^^eM†; óÜë¯ß›×õ¨F!vèߌ¶Oþ‡ùx- oQÇõo-a—0TËÙ²bT,ÛÍ Ëv8óàcÂöþ(Pú$à¨t‡@tilþNb»–ñãO…ƒçoDcó^v#¯EW…ßô!§q,v¡{¿ØŽÊ&ê :²‹;ç½ ¨óYóí+*·ý¡Gj+CÛ½_»ÉõS!‹.éx­{ö¸_"ò#·c§!‰è×J.êºm0mn,ŸŽêÕ;y™OáŠxßš£â7”UraW,ý4 §6Í-ßGúô('»O‘owÏ)¿ô¢?ìµ%wÝŸ]¾REïÃz†§üvø¬•ž?¸Ú¶Nvz¾  q'ïÈfý "εTçCÃ9EÝÆºWЯ;‰¡– äE-]§Dí¯V‘‘5U¡ó]J'#Tí}œHª*Û-MdYT‡»TÉû{‘‘]E‰¾£@œ~ :ôË%¶Z÷Ѝ£}®ªz$p›;å:qÔ‘e[RJâ=Wö””œdr_ë ¶pl 2tk‘+NgΈŒ”7(ywåO{F—¸u©“,K_)½h價hÓõå z'©ÏVOU›ÈæÆ²«J÷îú­ÔgdÊÞØÍ³ËBÒ§7‚ §UnIõ§Ýe‰Ò‹»þo°—–ÌZñhÏã·“²çmmyÉ+'êØªeWˆ:ü ·5/OiÜ’ˆuó‡hkH=DOn×§—úYÏÎZÛ>•žT;„”9¼þTUNu%“Œqv¯±·²` IDATÛ‘UÕrÇE;$ÿïEFv‰Z©8¼÷£CêÞßãÛð×{DG{þw{¿ªn'c!:¸Ÿó¢·løgœ)Ø-À°ôÞ©BÎïKrZMe¨a¯ò5ÈÄið9HCH$…¯“ùå•ÛÓ«*3J/îT'vóc÷³,]Àà—J– ü2¾ºì…Þë+äµFšº¯ó—mn,[ BnwbÿãñƲKÒ¹°ø›+# _á¡ÀBó±Uä<ùJ§óZ®qØÝEÿr%©àt?Zvû‡0x(L8©Î÷ÇUTœë¸´Sžpú^òv4#‹8¾ ‰åFö¸pïïÛ­—E®$“#ÚÚíQpú^ªÚUû³Äጬ ~À ›÷²ªÌ$ý4a/f¯]9zq ¢ÞY‰¹mÈØ/Éð »þ2Sñw G„ºa³VÌÌEú›1í¤õÎöØ|*i%_‰7Žûíºk*ÒŸ…0vH?¶´»±ìÇøKNÌx{pm|ö¸o¤síÈo¶¯.n}ô7røÍ°‹V<ïF,WØÎ¾ºÚÚîÎý²];£ºíÅ©[ÚÚuÓÑrŽ Ï8 1B»+]I&‡ÕŽ9{8°§×yä}¶ÿG¶ÓŽì†|?5Öð‚ã{ÿ« W…»]I%‡ˆ8¾÷«–9Úóž/u:1‘Ö¶¦hGÓÐé@v&F”IbécAhAÀrºé#í(Y»ò* ›ÝÝ¢ú¥’‹º æ"mÀê)-ºSÁÑ©‘ ùvI¡ýF|θ µ!3Ë·wU›g—Ÿ/²–W‘Ù%[™Ó={ÜWÒºø+ñ’‹Vžüg%f^*. {Ï?"â¬#+à´~Z®p:*¿Ô•,rŒX.ÔWöÙ~RÉm#7™Nl vPÚÁÙŒìºÙåìÞ¯24ïýêüÞ/Éäп÷{,k~X…éÀ†,6{¢@4XY÷íiÓ¦9î#e´#+ $Hœ¼—ÉvlBäJf­||°öŒ*û…âzݪQª2'>ªìµxcÙ‰ªŽwïìÒºç”ÝÝXöÜÀI¨¤`!rs÷œò3Ó¹X-½¸ë§ªz:Îèëbë^ŸR¼ #]-¬p)/ OKE¤Ó•LrŒ¨¯Ý… Cþa¦Ï–R¯sÈ;,3!ÎîEʸYäÆJ ít'›Ü"¶ ÷~kèßûsA´=üjAvï#ùíڮы•¡CœÊøúóÒKc]bÉ—q6µ3›9©ô¢O öÂîÆ²s®ÈDR&+,èžSþêæÙe!Ó¡œÍ×=dscÙTÿ|Æãt|¨Þ¾¹qÜÌt ›µržb ¼=¨ E.üÿöÎ=<®²ÚÿŸµ'—Iš…Ú4™„:“€”»(å"ŠÈEȤ€¢pTzlÓ‚â…zê£EE¤M9У‚\ÚiA©ŠJÅ")`2Ci›L. Z -m’ÉeÞõû#)V¤Í${Ïì™Éþƒöo¶Æv¹lE[?›µßs‘ùO|Ån{Èö÷>Ùš‹ÔX¹?yd–AËöÜo‰É˹¿éõ»{°»ˆ©Æ d36ÇWÜ$*g™Î<39È‹5úæE deq¬•zà ‡$·ZjΜÐÐñüh_¸ã¶òIªÖjÒײ%*EõG‰Á®ž¥Ó—ußV>ÛE/®’¸­rf¢±ü‰É»6£üRÐZ·=¥@±Š®êm,?{¬òÙ »Jí¼XTnyÏïÃv±Ì'dÁ¶Ýc·™vl-©æ~fÂ`¡±½c(’ý¾±÷³iþ²j·ZÕåö¥%÷ç"Ì’4öç~CÞ. (ÐoG`<,bf+Ím+ž˜ØO¢7asAb”LVô¡`eý‚T_ÑŠº% ;Úz§] ò(vn:Ê«–%g7tºÚ›Þ>»01¸mpô˜Çw–2/†ù½å1Uù…qÏ„y¯ºm,ÝtßV>Û2üXMòƒ“g‡K€‡z§WÒ°ù‰±H=IèøR¢±üe…FþYFÝ òICW‹cnÓC7±r?¥²Ð $mÎóª’ϽRm=ìé80é³_DB>+j2Yy2ã±ö÷A³äü\ä‘Y Œ±7÷[˜<û[³•i¢äÿÜŸÍ ·…º!TU÷ªü\`F††ö‰hc¨²nF´-ôEX¼ßYÆ[Ô4l~¢wYy:泩›Å˜³‹vmˋۖçŒqìtÑÊßïm,Bà׊ï7% myY  À0ð!·}ؤä·=Ó?RÚÐñÔXEü wô6–· D&~ÿ°óa'¦‰쬚ª•ûç L·í–âV¾ž]lAÌn€Í Ž X}js1ć¬ýGÛÊYÊ=„[%%5_?ƒi#iºí.Á›|¸¾3g>?b{ïŽäÿÜŸ D[Wþ­ö°+7¥}ßCt™ÊæY ¼thñ¤k>½nÝûìØ‘±Ôâ½)YÐy§2¦âOm¨œá¿vlAlϲi_æåµÆœ©p+$Ûåëún›š é¶£¢¸¡3& nûp€‰‚>ܽtÚ vDJ:ÿ„å;UTnñ/Øü=§Ì¥[R=Ô)#n!ýÝv5,#8á%ÛN„Ýl ±l¿¿ÙN_¿Ø®˜;ˆÉùÏ’-Ôf±&a|¿£Ç—´?÷còrî/(¶_qXóîÏš^¿»;Ú¶b‘eY'ËÜÈzYÿö·~¹¿ŠÆ®²%ot^òHÊ/6© žQ²°£m,ã%Ë?.*?ËkÝFá¸þÂ×Ýö1úó ÏÒòô,›~}¢±|e*•}ê¯2á-h‰ü±Iå±vDüóÛ6øv|I$­íªœCìòQwz;ŠïCmßlÕÒéNxÉ6¬b*m‹hþ¯Êt v„L³¯‘ÓØ-šSá„ ñƒöûíÏýXù9÷oîÏGšZ–?GNWÑÏ0Ú6’cD‘ËkÑ}n~ºÈÊbƒÖ\à¥._o äŒÒ[6e¬¾Û¦Ö*ÜKîæÛ?_v]Û~ÙÝË*ŽëmœþõžÆòúÝË*ŽÓÛH[ºŠ.¦ q[y ÑXþñžÆò¯õ6–ß•h,_—è6o‹°VT¤p©.Q«ÐºÌ–ùN''-óh_cyÐm#CyÓ¦BÎßćS^vØQÉËÆïÆ‡Aí·qÈrb±H?6Ûpˆ˜Cvrµ?M ÎÕg8ºsàm Ï–ˆh^Îýø˜û­üŸûsµ®¼+aÍTø1°Ï´_ÇD«ê¾ú^ßËøÙ½™ôÅö=KŽüˆX¾µìãV‘¦¤¯àÃçµnË»—UnLr50ÑŽWwÑ?Œt…eôD¿-€O ‰ím,xEá5-¯ŠaB¯Q¶[ ’ÿžŽ•-³Då •ƒTôH`*0=‡c†öä ¾çö¡Ê™#ùž0¯ãÕÞ¥åB8w¤ksbà±Äm•süóÛ6¸í&ýHèé6¦;#|ä?6F^qÌ’;´v*ÏrÊHv¡µv3‹mwÆKÖÓ7Ö«‘ñ³€öÚaów­ð峈Óì”'ü&B$"Ü̳ˆæçÜoTkÅîÜoÆÍÜŸ“´´Üó6pý1Kÿׇõ`TmsF‹¨|/X~.ÖùóÞ_w5(]ôJWbÙÔsT­µÀa{O„ Î=`^ǘҮôçþÄî䃈”;bÖ%T¬‹þˆ¥Ç¾+šààˆw¦þ‹¨òž{òÖðä³çZ•1g¹z+§X¬Êâ4_YW“üSbÉ´3ü‹6gºWfÓñÎ/ÊI&9 xÐC.!ÚŠŠ@v挗OÞ¸ñ>§Ú“e"bg‘cHSM„$Ž@V„Sš÷sãX‚ÈH‡Ýܨž ^ ë1*Z±ȱÁ`¸,‹äU­`î·Ì¸™ûsšõñU›€óCUáO Ü ¤ë˜‹%ÊÿÍ„]¼“ÁäZjñÞøtµX–9W÷JÏX××gÎ9`Þ–±±Š$º“?Cäçœfí%Û:žé:UÉÎbP’ÞÛX™óç@÷‰Jܶ„Ê…NXqcº§õ»±,3â™ò\Bzù00Á¦Ì+붬¶[Ä'7^´+¡jò)³eT¨•´=žï“õ b¥Tçe¿X*ù5÷'8(´)É—ú)ã†u[V÷Dã+ËÌFøK:ÆP‘ÏÔêßi£š5,@ÉÂö5Xæ£þ޾ʢ–1òî]:ý àZs‘‘ÏÇö›­3¢ ˜:â9Y“/Õ‹ßÍtHþq÷²ŠÃÝ6’L¿>ÍTFµUssºPMÁÐÑ[¨JÝð.f~ Ro[C4ƒeþÝ¥@}ÏÛÕP¸Ü /¹HɇD±Ù 8ôå l§Dæš7EÓŠà{Ò®†¢s÷×^$çPìÏýŒŸ¹?y©eU,Ú9s¸º±ã]Wý>ÃE²îƒS2¿ë/Ã;tc¢{é´½»F²5fäEÆX¶Z¾¤™ŠÞÿ©¨é¢â)]’¡RÞ.0Ó§fM>³±®È[ØO«%©ÉO9`Ç5^l¿¿l§AM^ÉÎyŽ«¸ø D?aWGõ„~rÄiìö“=!4}î1NøÉ5Ö­»cávuÔ'9=9…¨IWj`^ÑÔº<Ø­mð¾Peìl'ü¸M¨òòÃp èÊø™ûóµ®¼K Xé°öìPeøÈÂ@Ö½•Ó-‘ßik=“IDxqÂÂÍ[F¼Nµ&~ÆŒIÎé©')pܸÅLKõo7yˆÛFœGF<Ã=¢rMíaWÚMCuµãUnpÀˆë Z_ÀJñêK®±ï&WXlÀT,Ÿ6Ø÷’£µ=¡zåðÃøøÆ¢ßm 9‚¶3r¾lßJ` .üveŒ\cߌG6ÐÜyïöæx$¬*×0t|Ô@²º¤ú4ù[ÞUù8—QeÄ´b…,dGnôÈ×ôb hÁ·}8Ž˜gP™¤¥‰«Ðq ë1dNª­¬û :®1´ ! ÚúRË*ÛçÏr ÑÇí‹èggN»ìû:¹‡ˆ81#ÿé€NNc[;²Š•Yq)¡*NÌý®­ž{¼:®q\ÅÅ¡|Á©¶õm8PHÒ#›ˆµ­¸Ó2Ö™À6'ôD8¯¦üŠIyÈê |½Vÿ¯rúœÝ¿atĶ;Ãdsj1)²æw®bivãý W”.ìXå¶§)H¬vBG…oWqñANh¹AŸ>ˆý3z‘ŸärÁSÖ{#ð>»:‚Fg­dħ¿s@¦¸¨pðFtrŽ¢Á?Âþ‹#¦†|y¼.ìAl²XÆö®\®PäÓÀ€M1ÆÜJ‹”‚oÛÕQt…v<²¦öåO[–õQ`ÌGH÷¢H}ƒ΋@¶wkù-yUõ xÛ_|èÓ#]´óÇSŽÌ€;LKÜVHíR½7½V\¡[D/(mèÌËÉyø|h“RS¬‚o: ã --÷¼¨Aýñëòyt2α¹3P¹Þ -1¾¼ÎÐx/š7®Šëìê(ò…`e8¯Zz¤ÂË/?ø&ðW¤Ê Ì÷ÐÉ]Ô^j±9À)+ÙÎ -‘mÀ£Hª¬ÿ¤:'Tyi-"óÐòÉø›ûÇM-ËŸÁ©#0§ç| ÛÛ8ýsN¤±eȼu#®ðû²{7v5#·á Yø+À¤ÕLfyKuŽÁæ‹vå6ò #*ȵµºœ-z!‚C 1úÃ\+Ú3{ö5…I1¿Škij_îDšhÎ!HÄK„ÿ©®>ω‹ÜBÔ‘¹ÑO‡ªÂ¶ –å.öŠ=©0nYqj^tIíôpNõŸ¯¨¸ÊXwvµDy¡©uyÔ[YLskð. Ù¶¥µ9È&–M;ôÜö‘T%¥ó±b47Ò©%µ6<%ׯ;QqbE=èËwZé¢öwÖsAJ™¶ òË÷W‡§8¤—QŠ<ø÷Àf¤Êð™ûO.q@+#ô½µãf”SœQÓÿcœ¥ïa09xöÓŽ/1nv@Çuj«ç ÔÿG*×ZbÄ©ÅPågÁ@¸Ü­Ãvj1LuÄHŽP”è{Øê€Ô$õq_.µb+³zná#njéÏÐñø'ÙY¼n±AÅ~W¥*gÙ¾¥G•å8°”¨5ÒžZš;²(g¥|­¥÷¤ÑIfP}ÚÊ©þùmܶ’ šã‘fÀ©¾oGVƒá2‡ô2ÆP ù‘Crµ»ŠX>gΜ¬Ÿã‚ºùˆ:•³³À æåe*¬ïxàUà!'´Yj˜Ìž}Ma(P÷_Ƙ§“R†BSË]€g& ü.85lûÜ_b·jqùŒ—OvÄI°nËêTnuBKádéå¾\¨•ª¬¿Ô©Bo¨_¼@ÖidpeM üÍÙ³¯)tÛÊÞX'6­r·Ø“Šž-p Û>ÒDsé‚-©íê¨dwÅârDâÖ©G¥ra¢ßŠà`‰n¸Û_æ;s¼ŽWÝ6’Qº‰ÃМ^VäÒªô&öé8³2pÁ›“ ‹³v®ê/d©Sz ·¾ØþëNéå"¢²Ä95½#¨¿Ô9½Ì \zBßöíO,Fõf¡ŽÍE@HŠxhöäE[¿”µ]Œ¥x0yœVr…bÑe€Ss×%버,.þ¬¬û¢ßqLPøA,Ù혞… ßêkû3ÁʹY³ù5 úš2þ¬}8 CÇ2A>®ÎMYƒ)U+ÖÅX@0ÍvC ¬9©\7é‹í;ĹõL¢(ß*ièü´\ÝžËø˜˜<}ë8“V €ÀyV/çZ%㧺"½‚üØ)=ùL¨*z_EÅUYW4Aлq®•ÛÛÖ`áOÒÊYšÛV<¡Î-ð zoM .'ŠÈ+‡‡õÿÖ3Àì±h4ÅWþ g Ðíá}~ÿãÙ™¢—±½§ÂGð’+¬‹GvŠJ£sŠ:¿¦²îçÙ¶“ª¬»^DîÀ¹@û õ3n3q2 ï1Ï…*ën»¾X€åÄ3Mwβþ†Žß[IsyÖ²E•R Û7ùÈj`Bší8‡êœT/MªæZÕºÝFõ’’…‹Ý6âkÖ¬Tä'5ÎJZ…kƒUáj'uæÝ;Ç»Lé­@‹c¨Ô—YÝ+‡;¦iƒ9sæÔêonKSÑï6wÞ»Ý)½\F”o;(W¤ÈÝ5ð7ÉÒžêêOª¬¿Q,6 §*Úz>Qqn1i˜“Á§já¬Î‚r.‹E_·/¡Wfc–Nú‹?ºœÒS‘Ï$¶o8[Ò´ƒÁpQ°*¼tøcs‰¢ÿåíÆf„DõÁË¡Êð•¸x?0ÊLdvåt à¿¶k“ß&"¿vÛ‹Cìò¿9!¥³†F ²ú†úo¨¤Tð  ôÍ~¼™F7N²Þ‚S&,Üœ/¿ƒc§D—›œ”TŠÒ „¯%‹Â+*®ò×TÖ…Cð£Ò#õ{¯½ý T8<äÄ¢©¦ºî"‡uGE0.ßÖ9åÏŠ~Õaé&ÿA;º’ËDÛ"*©e礈(|+?ªºlšƒº¶˜1ãòÉ¡@ýb¿éoCô»àLµÛX묻çœÐÚ‹J…¿×ê¿–MéþÕÕç¿3%ä?П#i‡&¶ï¨s@'%fU\zr(Pïê"ø† íRä:'5Î.Œ†áóÔ-ÇU\V!=¬u¬u ÏÄâ¡ÿuRÓcDG¸+?]¨?Ç "\e[DéÌš‰Ø²¨åíâù—€|G𡻇ˆüIÇR*² ¢µéöã(Âû·U¦´3ôH.ô]ý…¿·ïÄâ†Î¼Ê +±X¤ô†4H—?© „«­ž{|ôS&X9÷ØP |[™ÕýºŠ¬Þó&m[ù8P•ï_™¢F~]¨»7ÓÕT««Ï+U…¿"Ð,ðA‡å“Šõ¹uëîp¢ZoÞ Iëzœ©`üOM8M6u×¹y}VÅ¥'+÷ ¶ƒþàpA¥ÅF _vV€bE¿ªŠ=¬ªÿ@ôS¦¦âÒ£ƒºûMÙ–wæ"UGûŽÞhu½vuýqMù“°´Oj+Ã3CUõ+,Ëz RÏüJ±øŠUÀo–= X „>sÚeG8¬½_N. VÕ}}ÐJFNuX¾_Äú,Χ¶‹¹ÄIŠ> „›UqéÉ™t¸Íây¶…D^΋@@-ièøŽbNZÝö3fTS^‘Ü d49'åK5««ïF¹²¤¡ójùÊë¶‹bäÑøÊPÖ¤C[á,cÌßCúû‚•á“Ò1Æ{š>÷˜š@ý×Bð³"æEà ¤²s¤¾ë'v6þU¹\àåPUÝÓÐVWŸW Ôÿ‡ß”EQ~€C;fÿ‚è-±øò¿;®›ãD;–¯GøA¤äé%ª 6SmžBÕs«já/ÕÂQ˲žáÒx<¦¹=òà´ˆ+§ˆêÚ`eø×5•õJËïÁž÷0ÿU-ë%A¾ˆã‹!’^r@êp-¸3Õ׃UáêPUýFˆ¢&‹2v Žg•‰ÀU……É¡ªºï¦; =uj¸¤¦ªnÞ®"Ö‹Ê·IËgUÿÛëë>g[–õtM ü§`Uø£¤ñ³tl`î 3´Èo?^Ìú¶£¥´¡ë]R}|Â׿ åSnû-Šï)_«9¶# ¨ÊàöT®-]Øùdï²òM()U;Î 1 æ/ôva÷‰ÏúƼLLƒºz™—…áçDùå ÉÕëÛèpj€0a߆J=ÍX\ˆÊE`ŽKSÓhÛ}¯×T„/S‹Çp¾UX *_¸®&þµ ÷÷&þ¸nËê'ă•sµÐ:5ú9ÐôÍþR|ÐÁ7¦M?ÇIÈîoûµìÀ¬4ÈW#ütW!7uwù”g¶É߆ƒÛWqñAŒ¥ç œ133Ý8™L6ø|¾iéM-ÂEŠ^ „›~a„‡b­çÎdzؚUÑ|¢eù.ôB5&˜±÷PåoˆŽ©àÖ»¸t[Ç”•ÕÕçÍmiyØVÚ9sæ¼Ñ9å#À¢| 4+7dbñHg°*ü)Q~‡sÅðö0• “_© Ô­4jÝ×­¥¶·ÿ‘"“µÕsOšdý.øTÒÖÓ]”?4·…¾ +Ó5„Ç(Q8K”³BpÊ’„¯(ÒÒrÏÛNé×êÏIb–ãÐâ›$“ä] C©ÆÀ•½å¤c!=¼TÒЖÒø.›R–P*Òì' èUD„ÔîÅÊ}À7Óë)eŒ KKJ­ÆcUâÑmYÞª /@¸+ÍC Â >|KCð?]‹ÈsjÌóVOikÓëw¸[>{ö5…;wÖ˜¤y?"Ç#züz¥¤4ÅßÒýÒÜùK¨*|ãðnf:(P¨C©ëóû{BðŸQž¶DŸN‰ÅÚ##îŸ:5\Ò]lU©&O4*§ˆp˜ê <0wa æz)Åû¦¥åᾚªð§Uy(NË Â!‚|Ñ_\`[PÃäYµôy´:&&MûS]‘}¤™.¶fN{ùð‚"S‰RnA9˜c9aªgR]ÇÊúŽ^ ÂW«IïŽ]Â͢ܪ ¯Gå Uóœút]Ò7вaÃC»F˜3gNÁ‡ÌË:^ÍGÄŽ«l¨(~fX©àHh.ò›²hMeÝÍm+WBê?Îì#.(í/)>åü7:% ê„§tkü!GÒ÷ SSÆIDAT¨Èå"zy™tïV†ÿd O«¥O[š|©©õÁ+OÏ>â‚Ò¾â¢j°NN>ËS)éßÜn%Yx…—RœµÔ"üÔoú—„õ¢æ®âƒ~|¬÷ê`Eøp±øŽ:PÈï”xsûª—ó2ÝCICç݉ÛÊŸTÃ]€«gYRAH=­¸WKk$KW"Gàðþ¥åÇ@gJ)K’4¿RŸ• l Fÿ£tÑf§Zbä=ѶÈÝ¡@ýG@3ÕöãXEŽE±0„*Ão"¼¢°S Ø¥à(åÞ×·}ûaÀð}[Gñx•:ÑÖÈBUõ'§¿¥“Ràã7bA(îEhv¢ìV¥[,ü€_ ¨ð¾]p8jA2v$Œ1u/µßg¿:jžÓÜY „¿d¢5Ñ.½Hðvù ïBév"e@)Ć‚ëáÏÍв&Àh<ò»PeÝRDed@åÐcDdžÁ2Å„á µ'{›¡³§»ê[ LŽx£“Ã,UÈäq_4·ÍZ Ä^œÊȨV‘¡@¸UÐ?(üYD:Œ²Í,Ü5( ‘¯pâ ˜©¢RZ œÐ³Q²®ýX*ÄâÁo…±Ù@º 5• epF0 „{€v”Ý ýΕ"ÏýGö¹³(°5—xês‚RÐO"òɾíÛwÖÂ*òp’ä_×ÇkZ÷· †‹|½úA£Ö§½ÇSÓågà|ª[ÖáŸßW僉ÛʯD¹…4œ%q ERd-5ÇjÜèÆ‚Zz)ž½ñ_Ûµ©·qú3 ;„þ.¸Ó/½×Ë¢m^iøQ2P˜øBá@ñÑŒ±¤m„C€Cä_¾4D†÷‰Týú)ée𱌎 %CÖCˆðϠý)¤4üRûªg\scDã‘%¡@ý) —¹daâð‡ç—Æ·EÂ×ýU²¬aŽKþ“C,6BÝ*Eœ®À^5¬¹@uhNÖ‚|øHb…´¬(ºÂb3±?ÞUÌÃ(gdxðR`Ö¿­+©«s¯Š\‹¯r²Ï³Gf8P¡´Î‡E(Ûá&ÍÀ[ŠÙ%X3I‘£è¥Ö EÃh§I¨êÿóyûY‰Z² ó.S(!ÉÞdün¿)Z›êÅ+·Zïì¤Þ†@Ü+úG­³J:çÉ/ˆ 6<´«Ðâ<…n{q›X,Ò?±Ÿ:à ·½¸L•+£ñ•NWõÌwt·)½ái·ä"--÷%|E/ºí%—PËw 9Þ ÂmžêŠô&¤èBœo•kôáXëŠÇÝ6âá -®ê|A¾:_‘Ë€´UÅdÉžcSã"ÝÄy¯ú:Ã*„Q^uÛÏÞ(üYµ¤\A,ÍÙ@V•3TSÏ=Ðþûq¸Å$@¿ãï7¡’…ík28n^òBKd›U`ÎÆ} éS]‘Þb¸xÖm/.1ˆðÉhÛŠ\h­•u´·ÿ"a1x°Ám/¹HKË=o øÎWhwÛK®mYÞ êt±qGKË=o ~ø‡Û^\¢_Uê¢ñÈïÜ6â‘ólõ™þïíù˸ d÷Pº sebК¥°”ÌHûÄýCª×ª"ªäl Úÿ¿Ó‚©^‹EvO.ßvèÿºí%Cl²”Ó¢-+׸mÄ#P]k‹üË&À¸ d÷àoxe£Ag½À¹@³K66Œ&x’¹¼;„êœÑ\^2 1TíÑY°CE¾ì/˜ô7tŒ·UÒŒ³aóý[d°ðL”5n{q›‘d´mÅ"D‘ß»õœk‰¤TàÍ#56l¾K¡ÅYÀßÝö’nTù:¼è늼euû?ÂP[ˆ¶®X<à¶|`Íš5ƒÑøÊ/¨è×È’¬À4ñÛ3pRS[Ä; áá¿<ýëßýÅqÈîÁßÐù¨ÿÐÎ÷‹ðŸ™>?+rµb*IŸÓ(œ¡‹SÿýJóU' uußë·”.è¸Yæ­Ëç›IVÑÜyïöcÚ8GÈï›xJD[W.5–™MþíT÷ rC4üÈÆ÷½á¶™|䅖ȶ„µûƒ¢úK·½¤¶ˆj}¬-rq,étZ¿éõ»»£ñÈEÀuä÷b’#'Wºí#_ˆµ®ü˜Óò°bp]4¹pïP<6±Ÿú5kÖü[á9/Ý ©'é_Ðy»ÿ͉ó€W23pêýc‡®—œdÉý‡N êj9Q½¸¸ÃÊQ% 74¿Óëcæ"ÉæøŠ›T9hqÛÛ¼Ô²*6±ŸSUhò¡Aü³–òþæøŠ›¼†÷饥åá¾æ¶•W!r-pÛCt#|Wvûg4·­L÷ÑÆ#·/&y-Aöú-«{Öî ðv±#_õ%ÌFä§äAÏ!…¿J©‰Æ#·’?O> ðmàonû3Êr-áü§º"ïY·Æ dßYë÷7tÞáï7G \ lIãp=Å¥¾ÑµãÈíBOï IkTmxüov¬a¨¡üX@¹Se°º¤¡sÞ„yYUµz¼k‹<;PØw<È÷ÈŸ‡ð1ñTW¤7ÖYhYÖ‰ uÛÏyE„yÇÄ9ÍK'Ë,ÑÖKPs2î‘q‚~T–¢UÑÖÈ×›^¿»;S/&‚òuÀk·¶ZZî›\¾íEorÛK¾‹EvG[W|^±N&wŽÍ"̋Ńsš7®òêŒdÑxäwÑxä–±NnAštÛSŠ ªè7¢mÁ+b±Hÿ¾.òÙý _êêõ7t.ñO°ª†ÚtT\]#W·§ü¯?¯ð3Òà#óX2g4—ËbŒÀ½£åmAoV¬*YØyMé‚-c „=ÒĆ íŠÆWÜhYÉ£T¹ƒüØ‘3M-ËŸÅ#g \–CmBv‚Þ8±Ÿ£š[#wDˆäÊ2¯ˆ¶­j*ž4i¶Àõ U‰Îv¡²4©ÉѶ‹¢m÷¹Òªë©®Ho´-òÝþ‚‚JT—;|eÍš5ƒ±øÊP>Gvýž½üÐmc%_þ÷h‹ Ãæ/{löÓÔò@W¬-25ïN³ÊööG¯‚ܦÂÙÇ´é}kk´5²<V©Ê…(O9¬ï­‚Ü ý¢ñ•ßÛWêGæX·îŽæxäÇ– V ò²ûaep]Â*šm[±h}Ûnظñ¾7¢m+¯õaÍN÷Ïæ÷à D~ªÂyÅ“&Ý–©A£m‘Ÿ%5Y#JÊ]ÒÄk(_(ì §´æ2k]y—–P%ªõϸmhlä†3Pm[ysKËÃÞó¡©#ÒG®+†i_Ͳóùæn3¡&¬Måye YŒÎÕÀêîeÓN´T®Â@ÑØU“£ºX†Ñ+Ínî9xú±ÐñBª/(^ÔùR¢±üE…ãÞëûÏ«r‹¿hÊr¯€Snm[Õ|þè£?qCaÁçUø4Ê1nûf³ « º*þmÏJa,mÃ-6±6V«ƒðéÀ>¶!G¦ø£ ?mŽÏúƒ·Ÿ4µ>¸øZpjø&ŠôÓ‚|²âþñŠ 1²¼©}ù3dñ9ºÄ—o΄¿ž@¯ä*àX—míá5àAVÎjå/V¸²{<¼øp^¨²î\D¾œ˜±Á•§DôÎ^«ûÞ| ¤†S)#@$XU¦‡ðq`‚‹¶v#ò0FE#‹?»#³.Ù üß ÄNC¹R„+€2ììBõçƒ7mØ|ÿ¨Žszì™°`óßOuß>ý+V¿ÎC¸ ˜>J™ÿ‚®Qº¤Vóh¤È‘_‰êÞìN„ûŒðÓ ó;× }Éñ—æå—|ø>ðýÚÊðL¹XE/F9ðeÈÆ&…'-ô ߓöÃd¶ýôðêäÚŠŠ«ü¤û\A.EôcÀä ¿MTeýº¨·÷‘u[V÷d`LˆuEÞ~üdVõ¥ï÷ë… €ãÉLVÖ.…µ‚þÕ2¾Ç›Úy6×?†ø~ü¤vz¸2é“‹Eô"”¡ç(…vþ*°Ökc-‘õ é[HKhÛÊG€Gj*ë?dDç \øFçDdµAï‹Å#ã¢P`¬uÅãÀã§N —ì*æ£ªÔ |88ÿüNU~Ó­¥¶·ÿb\ײÈO›XœµÀÚ™3/ürá`ñÇ@/Aå<`bNO¨È/ñëªXlå˜jˆÃ¦Æ-º+1¥ü4”+ËIá_aiiCç¢ÑŒÓ»¬üQ”sÆê3ÛPx¨´¡ó¢Ñ¼¦{é´#,‘N;Š¥÷^Y°Í+Î1NÃeV7³ÕÇI('µ@9PlCö-MŠ´€Ù¤XQŒ>k¼æŒë´!µ•áIKNÁèi"œ€ƒlh¾´¢úœˆxP|c~P.+Lv()&ìkšæ;l¬ã¼¯êµ­ïÕ>À ª«?y@‰8IUOF$zpcÛíW`+ðºÀF£º^,‰aÌúcÚ¬X¾ž™ž}Ä¥‰’’÷£œ$pèq@ö¸@‹ ›ŒÒ"–Ä,I>ÙÔò@®œ™ ö°+'hY߇ÑóD8˜ÅèƒþëQžQѧIÊš±Ìɳ¸ ´¿¬èðѾno²°€‘„¦Ï=Ÿž zš(Ç«´¡ùТèßž-L<ýbûýíÎØu†ÚöØš‡egéë™,$7v&é³´©#Òæ¤'€Ù³¯)ì}óÍã-Ë:EГ9†¡=¥c”ìahÝí9UþÌ^hµ…Ȧ]6¥,AÉ%(Wg°UoAÎ÷7tü~4ڽ寶>ÄÙ„ÂŽ’C;'KýèŠjô,;bšwîÕcoŽ™~Éû ¥pzÒÒ#-ÑC0!2Á¨™€P$j½h·ªv[°ÓX²K“f» Z›œ˜L³‰šò+&%‹ú*|H¹&e²Š[X Z Z,°¥_,Ù¥†^UÙj‘ì(´:¼s®ã›`0\&}Öa‚9#°Ì’ÿ<>c,Ùe© Šš>ƒîLÝêðmÍ×`u,„*/?Lœ.G L1F -¡ìÏŸÊ.íF­n ³‹Ýˆì(€–Z"ÛÜöŸfqAi¢¸ô(Ðr ŽÈ”2#¦ÐRka7ªÝFäUÐ×|ñѦz -ðYÅT‚L3ÆL«ØÊöÜ-d‡ª ÍýÒf«…t¼­:¼ÝVPÕeS­¤™b‰™l„)–Zòγ–µÞV5ƒ`½.ª›WfµÒ–Žû„Ȧ™·o?brá`ÁÇT |˜î%ü…ƒ‡È¼-)§èí^Vq¸OMÞµ1Èì Ï»íÃÃÃÃÃÃÃÃÃÃÃ#7ðÎȦ™æmy¸ ¸K6sbooïy‚|ÔM P ¦&NÇþμ@ÖÃÃÃÃÃÃÃÃÃÃ#%¼@6ƒÈg7ìV ÿ5FåX‘< eUç7»mÃÃÃÃÃÃÃÃÃÃÃ#7ðÙBD³¡u‚ üè>%–õ´Xò¤Û†<<<<<<<<<< image/svg+xml eclipse-collections-11.0.0.M3/checkstyle-configuration.xml000066400000000000000000000402371407344533200235470ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/checkstyle-suppressions.xml000066400000000000000000000200661407344533200234530ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/deploy.properties000066400000000000000000000016341407344533200214320ustar00rootroot00000000000000# # Copyright (c) 2021 Goldman Sachs. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # and Eclipse Distribution License v. 1.0 which accompany this distribution. # The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html # and the Eclipse Distribution License is available at # http://www.eclipse.org/org/documents/edl-v10.php. # #Tue, 09 Aug 2011 09:54:18 -0400 build.major=7 build.minor=0 build.fix=0 build.version=${build.major}.${build.minor}.${build.fix} build.version.full=${build.version}${deploy.suffix} artifact.name=${ant.project.name}-${build.version.full} jar.name=target/${artifact.name}.jar pom.name=target/${artifact.name}.pom source.jar.name=target/${artifact.name}-sources.jar javadoc.jar.name=target/${artifact.name}-javadoc.jar deploy.development=0 deploy.date=2015/06/09 09\:26 eclipse-collections-11.0.0.M3/docs/000077500000000000000000000000001407344533200167445ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/docs/EclipseCollectionDiagram.png000066400000000000000000010765311407344533200243540ustar00rootroot00000000000000‰PNG  IHDR°oBŒ´ìgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYsÃÃÇo¨d€IDATxÚìuXTMÀÏÝݰt—‚”"v`w ØÝ˜ØÝ(v¡  ‚Ò’ÒÝݰ»÷ûcôº.!Æ+ïû9¿ÇÇgïܹ3gb—9÷œ9C!0 ƒÁ`0#--íãÇ ]-ƒÁüBBBݺu£`…ƒÁ`0 ¦“´´´Ü¿ŸÍfwµ  ó¡vµ  ƒÁ`0ÿ°6ˆÁ`þo¨©©¡wµ  ƒÁ`0ÿIÄÄÄÄÄĺZ ƒùaJKKëëëÑg¬b0 ƒÁü ***ÆÆÆ]-ƒÁü0ÁÁÁÙÙÙè3vÅ`0 ƒÁ`0˜¿¬b0 ƒÁ`0Ì_ V1 ƒÁ`0 æ/+„ ƒÁ`0 ó—‚B ƒÁ`0 ƒùKÁ !ƒÁ`0 ƒÁü¥`…ƒÁ`0 ƒÁ`þR°BˆÁ`0 ƒÁ`0)X!Ä`0 ƒÁ`0˜¿¬b0 ƒÁ`0Ì_ V1 ƒÁ`0 æ/+„ ƒÁ`0ÿn= s[s±¼²®«i—Ô¬âeÛ½Vì¼YP\ùs%lØoæÚK÷|ÃÛËPTZ½p‹çœõW¢²‹Ì[<š¹ö’×ãЮè0LÛ<ÿ|Áækÿt-›Ü?zùEW·õ_½«À`0 ƒùÛ¹xûmlRN{w9šôëeä÷6îâí·+fêjyÛ&8<åðE?èÛÓPAVüG'b׉'P^Y7j E›ySóO\}ÚŠfª¿.óžÓ> Í9ùå†Yuiça¾rÇçCHTÚ‰mSþÑZ]ôSW–^ìÚ·«›Ûõ`…ƒÁ`0 ¦‹yô"êyàGô™Éb³Xl:J¥ 1Á~½ŒºZF̿ȸ¬;>æNrTS’êjY:Ë]ßð¸äÜ‹†Ñiÿv¿Å­Gé¨Ëÿ_¾8À !ƒÁ`0LóèÜbòóÆ÷w÷ö::·=+Ó&!I»O=µí®õR¯Ý÷øeÔò™ýE…ºZ–Ž`²Øî‡:Ûü_*„ÿv]ƒÁ`0 ÃAU5 d¨©klnav²´ªš†±YyemV”ž]ŸUWßÔæ³l6‘’Ÿ_ÖqÅ•3kê;߯òʺ¨´²ŠÚNæohlŽŠÏJË*f±ØíuZZVqøÇÌöÚ‚hnavœÁb±¿»Ÿ“Í&J;”¿©™Yû=aJÊk¸«k*ª~f+iÉb± Š+ÛëºÖbW×6tœç»S´“´0YGEU]'ÅF¥uÜáL»¨´ºó’R\VMį··KÀB ƒÁ`0˜ÿ Í-ÌÕ·/Þy[VQ«£.bûg;Î '®¾:|Ñ/-»„N£šê«Ü4¡—¥N{¥ÅÊ›½þò»ˆTti¬«|óØ<mE¨®mX±ãæMïP´€¦P(–&êg=\MõUÈÇ/ß Zì~©y=L5:·®â¡_äÂ-žy…èÒ¶»ÖŽnºò´‘Éd­ÚuëÈ¥-L…B±ï¡óàÌ" ±vwNF|Ìœ·ñjd|ZÇóñÒÝÆÙïY;VXe`³‰Ãý¶y„Ô^úÂiN6Œo]ÔÎãÞ›> â¨û¤EӜ۬Îÿ}âú}÷bs›å¤Eô6>¸q¹±óÆ£ù›®F=ÝúàyäžÓ>ÅeÕrÒ¢®£{z¬M¡PÈBüÞÆ­Ù}'.9—Å&´rkç ž>¦'ºE„L÷Ås&:t3T›µîrEUݪÙ÷®Ó°ó¸÷Ÿ™¹¥ %!¼`ŠÓÆECy贼 K—mµu0uù9>^:Fýøl’ª¸¬zÁ¦k/ƒ*«ë¥%„‡:›Þ<‘´Èeç—-ÚrýÙ›Í-L1y“ûx¬Ý^W_¾tè‚_bj~ “ÅP–ž0ÌjË’á|¼ŸŠ ûï½zhþ{Wî—”×h©ÉÛ:y@ï6&Æýgó7]­¬®m‡µ èk)ú{­!3TÕ4,Ü|í_dcSK7CµËûg¢™‰ha²6|àùà]na… ¯M7­“ۧ訷;¯2rJ¦¯º•Æd±mÌ5/ìÑz¢ºà•ÖÜÂäå¡÷ê¡stË$T£Ûš‹O_Ç@`Ø'yË%°röÀ•³qúzÀ¹›ob³ÙlBP€×¥¯ùÁäeÄà?V1 ƒÁ`þ3Œ™¢¾±yúèž,6ûÄÕ׃\~òßÍP–Fw—ïð:tÁoÜ{ÖŽ­¨ªÛ{Æ×qž×7VÛ÷Ðm]TFN‰Å°­M-@£QY,öÇä\¯Ç!ÛWŒlljé>Ä=5«vQßГn9lkì³ízš p×7|úª dia1éa1é\U\º4cõÐÓT ‰J{‘j;jGÚ›½â¢‚íµñÉëïWÑè3AoB“‡Ï>öæÖÚ63û½<ý“ÅqQÁªš†¦fæÉk¯cs‚î¬GyVîºyè‚úL£Q›[˜Ï?ߺl©1"^'l>ô€ sC5×Ñ=Û¬îòÝ ·5Õ”¤WÍ(.*–|å^ðëw‰ /w¡Òªkªj¦,?“={¢ƒ¸¨àG!{Nû0YìýëÇ¡B®?|?eù9ksÍKûgÒ¨Ôó·ÞÌX}¡º¶aÉô¾@PVQû2(aß_ÛîZšj²H¯;våå¹›o&·±0Qonaž½°íè#1å3ûKˆ Mt±‹Nûá“}]ui^º¨ˆ”UÔšÞRWß´aáP=M… )Ï?‹IÌùðh Ú¤:bαÔÌâ£î“T%#Ⲟ|éùÖ¬ÜuëÀ¹gÆŒ­ËFP(ðäuŒÇɧï"Rn~šŠªºÒŠZçIûR2‹¦Œ´¥R(Ç®¼âv8ñå.m†Wizš ã‡Zy¿ŠNÏ.5°;/]ëÛ<CÝi4ꊙ²òJ¯Ü î3qOfÐ~~>tw¨ÛáAñ §:;Ùégä”î<îÝ}ˆ{ÂË]* ’­%/«¨µ±£´¢fÊ[5%黾z¸lC3Q]Û0rîqG½½ëÆÊHŠ„F§Ÿ¸öÊeÖ‘ø;yyè}{ ò½üBNZtä€îÐÃTÞG¦-r÷ѯۜ‰‚¼>þ±^C«kŸ\XÚé/ô¿ƒÁ`0 Ó9ªªªn|!66öŸ¨bÃþ{Àp½ëó+}Æê Àp5ì·¡¨´ ¥<ÿ®[=@—ñŸòhš3&.9M>’”V W‡ñ»Û¬hÌüÀp†ë’­×‹Ëªó‹*–l½~å^¢}2\áºlûæf “E¦Œœ{ =n>x 0\)êÓÏÝ|“_¶ýØcŠút”Ç7 – ˆêÚÙî‹á:|öQ‹MÄóÀ(ƒûᇭåa³Ùè.z$=»8èÃ'9‹Å(%&1› ÿ÷‰èòðE?‚ ˜L–Q¿ Àp2˜óú]A%å56#w <žG‘œ^À£å Wõ^«úE¶0Y/ƒâ'ìa³ÙAè͆k¿)ûó‹*P]Œž+ Š+Ûì±êÚió…ò–KÈ! bÉÖëÀpÝzäs‹Ny¾†«´ùÂØ¤”RTZ%e¾PPvEUAµu =–ô]ßÜÂD˜L–„é)ó… ÍA°XŸûÁmÍEÎÚ3sKQ ˆâ²jºæ ÛQ;È”çžÃõñË(Χ»_†kЇOdÊ¢-žÀp½ãó ˆ¼Â `¸ÎÝpå»ÓÍ.«áÛA´0Y}'ï†ëC¿H”2oã`¸êöY›_TRN\} ×µ{î´Wì°™G€áZUSÏ™h=b;0\ûOÝOÖå¶æ"0\o= E—žGÃuDZÇä#÷Ÿ…Ãuþ¦«mÖ²åÐ`¸zœ|‚.›[˜£ç†«Q¿ äÜCŒdêòsÀpý›A6®Î“öræ©©kLÍ,âL1¼…¢>ûßLPPùS†÷b0 ƒÁüg¸z`–¬”(ú< ·ä~ñƼãóÅbÏ™è@fÖÕWS’ ‰J#ÚÚÝä Ò‡7O”‘Q?¼yâÔ‘vàõ8$Å…7òÐä,šû½ÂÛäáÙÅd]_ÊùÜØB`Î$G2³“F}™ÖvQ~‘tuî—üÅåò—œ^ˆ>Œ[x’öåP´#1·Ãu¶š’4yA7#5ô¡Í¥yê ʘA&š~~¹¼¦e£ËžmµšŒ”ÆaÎfìoLÉ,„/ª‰’¼„¤¸§.œÊèk) >€Ô¬"8s#àŽÏ2êÜ‚rRTQ”ä*›ZúEF'd•V746—WÖŠµïy Õµ %å5-L–õˆídbS3“ìO~>ž«F­ö¸­ã¸vÂ0«…SÉoÕö"à:û)Q)ß´½)ZûÁ„Ú,Gús9_¦zV1•J2ãg~Úžþ–SP®ú­:M£QÉc]Hbs¼_EW–WÖ}Ê(&“Õ±A¼ M~ý.±°¤ª¦®ñCl°Ø?“¦ËÁ !ƒÁ`0ÌN  ŽVfœ _G}I.mÈè—­÷\5·0[àÛ9ðò|^7"g9ô™Ô[ƒâ…€¢œ„ÿ7EÚ£“m$5ÃÖËwÎ*ø8D%åüÜÒ/Q:UÛ=ŒÁÎB»¨´:15ÿʽ`·±öví¨Ž(¬¨Ð·;@Ÿ·â‹$m‚T;4^h˜ ´õµ9óðñÒíÚWY 15ßqž²ŠZk=¤ÞP©ßñõCuIŠ !ó)É€ÞÆÃœÍÐ畳ؘk8ÿüÚýw—î­ž3hÏÚ1íµ]Pà]2ÛÉI¡ÀokªW×6P)k=ÎDk=£/ê4Õ5 ¤Ñ²M‚p]yáêý`m†œ… CLD µ6ÞšÚú¦Ó‡§t7fh)Љpͽÿ ÿI¡1 ƒÁ`0\h¨ÊÀŒ±½,MÔ¿›YUñ³˜–]Âu‹—‡.'-ZXR…lY$Èl().$#)"+%‚‘!QßÐÌ™Ÿ uslë¤~½Œ:ßú†¯ PPS’nSíK©:Ò$ˆl}ª_åKË*V–—h³F^ú9×^c=ØlbæÚKÑ>ÛÚTt‘ (È'I “UTZͳ5èXe ÐP‘€~½ŒæOéÓù>€¹®–UÔ~x¼…4Ó½ NhàˆŒÒ%9 ^º”¸pCÀÎBÛÎB;5«xô¼ã{Ïø s6k­š¢³ ³òÊ85+ähÚ:`Ì?º²tZVñ¦EÃZ+çm¢ +žWXA¥ õþ³ˆ«÷ƒgOp8½s*Êsüê+äâË —ãõþ³¾Áá)œig¯»œ˜šÿ‡{ã×Á{1 ƒÁ`þ@zÂ=ßðÎd@K|¿·qèØ 6›¸xûíÅÛoÉ¢Ò³KÈÒ|bÑÆ¿¾= @]EFLDúE"gÂÐèôîqVaòŵòœ×6ûëZº¢ªŽKuäây`ÜþsÏØl¢ª¦áÈ¥(ÅuäÂ@KíÄ»r/íWd³‰]'Ÿ »H %÷†yœ|‚¼%ó‹*'/;Ûø­*eg¡={BoHJ+ØvôQ›‚!wÊÛOÃ8=¼oa²P·\¹L¶±…ɺÿ,‚—‡Ž$ùx‹z¯U×¾o}´úžµc‘ùkïiŸè„ìÖÕõ¶Òu°Ö{ý.qöºË±I9y…—î-r÷\7ÿ›€:þïûOÝï÷6.þSÞä¥g3sK§Œ´E±j u”Æîñú]âüMW3rJØl¢¸¬ú®oøª]·:_=M…œ‚òËwƒ›Z>&ç:MÚ˼™ˆ=¾‹û”÷&4¹¹… Û–ha²†Í:žÒØÔRßЕ¶j×-Ô±_F-Ü♘šÏfy…×… '[×>k|o%y‰£—_ì<îšUœž]²ã¸÷±+/MôT&¹Øüô¤E2ºð<#§äí‡O|jåì"Bü‹Ý¯{=­¨ªka²’Ò öŸ{ƹ-“·qöàºò|@HRNAùÎãÞÓVœãtEî»§¯ûgç—•WÖí=ã³íècÎ(ŠºŠtJfÑG!©YÅñŸòȧœV^Y—WX1ÓÕ»{óo»Œb0 ƒÁü?ÀC§=<»hÚŠó+vÞ\±ó&…BA>r› k3ÿôÑ=3rJvŸzÊb±c“r@HYÕ,Œ7ŽÌY¸Å³¬¢–<¶^›!wõà,´‚€+F%¤ä?Œka²Só¥$„½ŽÎu™u´Ãluf×4*•rÏ7<&1'&1% ðóª)IµßØ»vì)ÏפÊXWùêÁYè3©p’ŠçΕ£šš™gn”WÖ={ó%Nt±>±m úL£QïZ8~ѩɹ¥µhód/Ki ²FTš˜ˆÀ1÷I£çŸ`²Ø‹Ý¯Þ^×Z¶G渮¼pîæ›s7ß mÅ[Çç“Ó#–Ïìÿàydÿ©Ðå>¦7Ž'ïžÜ>…ÍfŸòô?åé† úÚG·Lâvxúª 3×^b±ØCú˜ŽÐ=4úëÙ}{ÚtÓz‘jÜ#…‘•è`rbÛ”Õ»o÷³‹¬KJBéH2’"—ï¸úŠJ¥°Ù/}ÿúqmº¿ ðóú^^>qñéîoý¼à322266þíUäVÄ$æØYh#ŸL’ôì’O…Nväql6ñ28^UQ YÀ,;:!;9½°¦®QAVÌÊLSNZ´ƒêR2‹>Äd䔫)Iõ·7’ûªØTTÕ…Åd$¥ ðë*›ªqí¬c±Øá3C£ÓÔUdì{芉¼‹H­ª©·ï¡Ë¹¹+:!;!%?;¿LP€WG]¾§¥Žp;[¿‚ÂSjë{YêP(”‡~‘yE&z*½,uHcNs 3 $‰ÉdÛtÓä59½0&1;+¯L]EÆDOYG;RhS338<åcr.X™iX›k¢ô°˜ôâ²=M­/ç„F§—U+ÊŠwçˆ\Ê Añ)ùñŸòš[˜ÆºÊ†:JäˆÀéëþó6^½¼æØÁ–Þ¯¢ëê›»«ë*·Þ½–˜šŸ˜ZPTZ--)ln¨¦Åq€ÿûD) a®ƒЈ¼~—XUÓ`n¨jf š’YTRVùßÉb¿x—™[f¢§Ì™^ZQ“–]ÌËC×Q—·4U'e®ªixý.¡ ¸JFJĶ›–R;Û,-LVLbNBJž?¯±®²®†ñ¬‡«¬”(JILÍ_íq{ÊHÛ±ƒ{$¤ä¯ÝsgöD‡!}LŸ¼Žñ|ð.3·´¾¡õ§…‰úÊYÈ¢X,ö‘K/½ˆ"¢o/Ãuó‡ M®Þö~”V ©&Û¯—ѼɎ …l”×ã'¯bSóùùx u”VÏd ýŽ“~ÊÓ?þSNìh²xz_!~Î çn¾¹óôCM]£}Ý-K\xÛ#2.ËýðÃÅÓû:ÛÜõ ¿ëó¡°¤ŠÅ&Pí,´MsF9s Ê÷Ÿ}—ÙÒÂêf¤¶Ì­9ˆ-LÖøE§F´4ÕWY±ófNAùÚyƒ'·€Ç/£îú„LÎ%BG]~ñô¾=-´ ¸¬zÉÖñŸò`çqïó7ßÐé´ {fðñÒo< ¹õ$ìø¶É* ’¤œ×¼{÷1)WVJÄÜPmŬrÒ¢äÝñ‹N9÷4œäb½ï¬ïóÀ8~>žÁަËÜú‘]ú_ï!Ä`0 ƒùW°ñÀý!n‡“Ò œìôyyèÜ·¹£¡±¹½ü‹Ý¯ž"3·´o/C6›Xµë–ÃøÝLÝû”÷èEÔ®“Oœ&îMN/¤Ñ¨—ï9Œßíý*ºÛà-!I²Ò¢w}ÃíÇz õ1" $ÉlÐæ;>Œu•t•½‡šÞò>2Ý­oh~èéåÚÃeÛÉk¯%Ä„>ÄfÌ^wyÇqo”!· <=»*«ë“Ò ’Ò Ú“ÇqïÓ~LÎíc«/$Èç~øa—mµõM ¯¥˜•[ºvϰ˜Ïº¶yäõ8ÔÚ\]>yóày„ݨÛ>–•-)¯9pî™ýXªš²üeÛ½Ï8䧪(Åb³Ïz½1´åþ³t·±©¥÷8×^ë*t0NHÉß~ô1ùìæƒM?”˜šïd§ÏÏdzéà›‘;È-g,{À´›ÜOÍ,àçÙwÆ×fäŽÆ¦–ö†©¨´úØ•—œáa÷Ÿõ}ô"Êûe4™rëIØ“×1B|™[êý*:*>‹ìƦf&‹ÍFýYTRE>UߨÜwÊþu{ïòðÐ2sK7|0qñé&ØÄ%§§­8_ZQÛÏÞ¨º¶qÁækÃf!ï.ÜìéºòB^Q…µ¹¦’¼Äõ‡ï» Ù’’YDf8s#ÀvÔÎÇ/£dÅiTÊæC&pTGĨyÇçm¼ÚÜÂ,-¯Ù{ƧÿÔýíI’šUäý*úcR.TTÕ%¥4·°˜Ljciy-Êö."ÕlÐf¯Ç!ZЦú*w}>tâþ&ôs(š–ÖýgžGôç^Wß›Î=s™u46)ÇÜPU_KÑ' ¶×˜](H“Éþ”QXR^9åIi)EH} Nü2ª øó0µ0Y#矺ü\Xtº¶º\EuýóÏ ûmàÜdxÏ7ü®Ï»Ñ»vŸòà‹ÿ”·bçÍEî×á?Á`0 ƒéUUU7¾ûKÍ ¨OŸ¼ô ‹ÅF){ÏøÃußY_tyæ†?0\/Þ~‹.ýß'ÃuÞÆ+löçü÷߆ë™þœÓ5gÜ~F›Í1ç0\áº|‡ªåäµ×Àp³þ2z¤¹…©ã¸VÅfyaIJIÍ,¢¨O·±]––× †Ï>ZßÐDDv~™ˆá\Q£yM-ä#Àpu[s±ƒÆ~LÎ¥iÎ3ÿ“ÉB)Ç®¼†ëöcÑeЇOõé݇º³XìØ¤ºæŒa3«Ú®†k÷¡îÅ•(eÂâSÀp=pîºô{ ×¾“÷!! ‚ KЛ­d½¬¡±™Ìpø¢YfnA9ú—IQŸ>qÉir öŸõ†ëžÓOÑåõ‡ïá:rî1”!¯°Â¨ß`¸jõ^Ýfc÷õ†ë¹›oÐebj>êÑs‘yz¸l6˜ƒúðéë`¸n;úˆ¼k6h³˜ñ<®b­–ÃÕlÐæ¢Ò*‚ jêõ×Ã5)­ M1n= †ë¦÷É”Ùë.ÃõÁótyÇçCü§<òîµï€áºbçMtYP\)l0GÛa Ùç±I9[‘å„ŤÃuÈŒCdÊŽcáú"(ž³ºÅî×á†.O\} ׫/ÓÀëq0\­†o#¡kΆkïq•ÕõA”–×(Z-åÑr+.«&þõ‘?eØBˆÁ`0 Óõ¹ô‚ ˆí+FR©ŸýÍF´€'¯¢ÛÌø¢…BÙ¾|$éŸ6z%þ±Ÿ2 —LïKúÅiªÉšª†D¥•UÔ’eš¨Þ>1¹wª(Ht0©®m M+áè¥,{Ûò´/þ£tçl¬…¶ÛØ^3Oz¾ž»á ?Ïñm“9Kâve…¼Œº\¿`(Ü~ú92çþ³Ïàðæ‰HHèe©3nH¼Â ߀¯g÷¥e“Ÿ•ä%¾ˆåñmÇ^¸»VFåÄýo®äk¯±.}ÍQߢ˗Á  Ŷ»Ö‹·ñ-L””ׄÌèßÛ¸c÷àÖˆ‹ ¾º¾ù òMr±€äô‚v&Ì !A¾ ¿z·ŽdO^n×蜢ýí 3·]ÞzV[ß´|f²Ïu•7/v!óS(”€›kw1/}ú˜^”VøC-âäÕ»„¸Oy ¦:)ʉ£I+3è„ìÜ 2›”„ðíó‘ç*NvÈAai¢..*H6¤“ì?÷LHü¦Àø¡VvÚ¡Ñé“sÉljJRO/.@’ŒhÙÂdqΫÿx!ƒÁ`0Lדœ^H§QO_÷çLäçãA˜­IJ+àÝwÖ—L! Ñ¨éßž÷ÀP–&?ËH‰€š’™"$È'ÀÏ[Y]ÿE†N_»ç™‡Åb@zN‰”„0JQ’—@+oZ¯—UÔrÖõÝÆR(”Kw‚87[ òq6vÏÚ±^D-ÝvƒÅbÞ<‘sg ñK‘Œt”øyI=!>%OFR„kÿ[O íËwƒ’Ó  —¥Ž¾–â±+/S2‹»:èmLêÕȽö¬Wç³ü¼dÇfä”JIëj|ÝŽ(-!̹à m†œ¾–â‹·qÍ-L^ú‹·ñfªSGÚÍÝpåmا>¶úÏãØlbx¿nì=!~Iq!Ž€òʺvú¼@ŸwË¡d rsåš`Éé…)™EE%Uu M@zü"ßÑîßn7å„J¥¨*~ZhV”WÖÂÏ’”V‘qYœ³±©™ éÙÅÊ_xS}RGå$§ <.9·¨´5³ŸÞÖÔ74gæ–Z›kríJíe©žò)½ÐXW¥HKŠp¾ Pë`þµ`…ƒÁ`0 ¦ëÉ/ª ÈýQ3Õ¦íä¯d2Y\ù-MÔ9CùsÑf¬ Î4´Ï-îS^NA9™(ÀÏÛÇV_]E¦½bQâK¡À›Ð$ÎDC%sC5òRR\h@oãkÞQ(”!}L¿[¦¸¨ ÚæÇfùE•úZ \B‹Lü|ê(]?<ÇT_…쮎5ÕW±4QGŸ‹J«”ä$~¤¹0ÌÙlÏiŸ·aŸz[ë„$Íä8ÐÁ|bûØêûøÇÐiÔÁŽ¿zàNEÍo}«©™Y^Y'$ÈÇÕ.ksM$ ¤g—L\r:4:]TX@NZ”k¶ää—€„˜tŽŸ˜\ HHÉã4>óÐiÖzÚ ¹¬¬®Ÿ´ôŒoÀG~Yq:Z[×Èùúà»äU!#)Â•Ž¦PiE»Z.zQÂ&~¥Ý]V1 ƒÁ`º%y‰‚’ª ;ëi´NíèQ’—((®|ãï•v¬9r@÷º±©YÅ7×v`X ‹I¿þè½™jtBö"÷ë>—–uP A啵Z 9 R)²R"E¥Õ\yP(R³•:¹}êî5c_ôÛvôñ é3Þîãå¡+ÉKä–¿½³¾½pÒ"¨mâÒ×|ÏiŸ§þ1ü¼Õµ Î= T¥ ´Ÿ¾ŽÙ»vìóÀ8{+ÝÎëZ?/]JBXBT°ƒ 3tæáÌÜÒ'–îc õ ÍBsȻȋ¸´¼FKMöŸ““47/v™èbýCN_uÁ7àã™]Ó¦é…QÙfù•€LŽE¥U\é%e5@Ýý¿ï!Ä`0 ƒéztÔåY,6g ÃŽÑÕ¯ªiˆãú[d€àˆ”_)„N§@EUG^sº ð."µ½ -LÖÌ5—D„øŸ_]1ÌÙÜ7 ö¦w(g†Êêzäü‰Ijjf’nœ:êòeµ39AQ=-Lœ‰¢Â›»Ln“_T™šY :êrl6•ÖžlZ ÙŠª:ΞOLͯ©mì ½VfšrÒ¢O_Ǿ ŽççãAçp t0IJ+¸éZ^Y×±¿(F­«ojnaþʸè¨Ëgå•qî¾ã$;¿,!%¿oOÃÁ_Œ±Ä·f.-†,êç_‘¡xxèUÕõœ•¢Ñ ÿôCå°Ù„ßÛ8] ùYã{“*=W[¾;EE„øåeÄ"ã²ÐK²'¯£yè4Ò_ôÿ¬b0 ƒÁt=K¦÷¥P(ó7]ÍÎ/#?Äf ãZ³tF?˜µöRá—s‚x‘ú+*â GuùSžþO_L“_TéÝN`›6‘—£P(b2JÊk‚hsïÖ"Wgºxëõ Ž‘qYb3Ðç½§}>&çn_1RVJô¨û$~Þ¥Ûnp®à›ÆïO€’òšÅî×`áT'tw™[?˜³á r;DA#Ÿ¼Žè`‚\p<@Ï@ “•”V@£QÑîJ4 6]ËÊû:á3#ã>Ä$XºíòP Nï;eÇÚ•Jâdö)£ðÒ ; mdØÛÖì¾ ÃœÍ;x\QN‚Ébû½òô‹e™[¿&ËmõE²Ùlâõ»D´‡P\TB¡¼L««o€Úú¦‰KÎp>>y¸-?ÏþsϪÌb±Ñ)&?'L[m¯­oB­¨N¶F:Jn½}èIf+,©zô"ªã®LÍ,BÃÇb±mñä<ó¾ìo|Çb±ÛëOÔ]ÓW]¨®m@å¬ò¸’?orŸ6·,¶IXLºQÿûÏ=û]½ô]F1 ƒÁ`ºžîÆŒ]«Fm:p_Ûa­¾–‚°jfQQiõÞuc9wÖ‘8XëmX8Ôãäõ^« ´ùùx>¥–VÔžÙ5ÍHGéçdà¡Ó.î1váÉ!n‡ÕUdT% Š«R2‹z˜ªu2ëd!|¼ô1ƒ,o? SïµJH€oë²ás'9rå1ÒQÚ·nܚݷuû¬Ó×RæOÍ*.,©Ú¶|„¥‰zrzáöcMôTæOîjJRݰÿÞjÛçvOG%Hˆ i3äzŽÙ¥ +^\VÍb±»öu´ÑGwGôï¾hšó±+/•m–k3äŠËª+«ë­Ì4Î욆2|ˆÍð8ùTKMVYA2)­ °¤jÇŠ‘(:ˆ¹¡Úî5£7ì»§ã¸V_KADˆ?%³¨¨´z÷š1ÝŒÔ`¢‹õŸÏÞ|”4[ ¬ ™–U·Qs˜sLMIŠ¡,]TZœ^h¢§Œ·¶Çºùƒ»_×q\kiªž˜š/.*hi¢Îù6aHSqQÁ ·Ÿ¾Ž©¬®Ï=ÔÚ_w±kߨôÏ#¤Ìj«Ëgç—ÕÕ7 s6ß¶|Dç“ÿ)Ï/0n嬿«£þ hîîî]-ƒÁ`0̃¦¦¦””Ï–%YYY99¹_+ïzZê¸ôí¦('ÎÃCp°ÖÛ°`è”¶(¼//]H€oˆ“  }lõ9š(ÈŠÓ¨T QA瞆›»Œhòóñòˆ‹îcJ¢äãå¡e£É7› p°Ö³ø=RUQÊm¬½’¼„¤¸…B1ÑSž?¥ÏŽ#‘Q‹N§²ÙD{#C“‡N““äh‚ÎU€aÎæbB¢"ÆŒécz¡ ü\ØtÓ1 »¢œ//]Xˆ¿·•ÞºùC¦îI¥Râ’sEE¶.¡ +Ž2[™k¢"‚(dÎá‹~T*%Úw›¢¬8Azo^ì²pšgùLœì ÊRü|<Vz ¦8íß0ž\÷Û[颤tͶ»Ö¾õã&·!Ÿµ³ÐÞ¯›¢ì71u¤êX:6~¨•6CNZBÄTOeËR—enýyyè†:JÖæší ®š’Fµ0QŸ=ÁATXh4ªª’CYjÎDGÎy¼¼t:mHSå/U µ•,LÔ…ù”ä$æNúœ™ÛîZœ5òòÐøy÷1EQ´fHÓ>¶úвâ*EFRd ƒÉŽ#ûÙ}é1c}-E¹ÔmœýQ÷IB|ÆêÆzŸ=${˜j t0‘—â³í¦µmùHRÏ¡Q©æ†jÖzœ­ Ó¨LT%[KÂÇÇÃÏË3¤)9Äæ†ª&z*ÂBüªŠ’s&: ­žJrnãì•å%¤Ä…)Š‘®òÜIŽ«G£ÓDh4*‹Íî×ÓÐDO…³p+3ž–:B‚|B|ã‡ZÜ>UI^BWCžì+~Þ1ƒ,yyèâ¢B†Y;ÙP(^š¼Œøà>¦hÓé´qCzX˜¨«)I ðó r0Y>s€ûÒá\»^ûØè£×Ÿ¿ <4qQÁAŽ&h¦)ÈŠ ðMÓSM©³xÿ999UUŸ (Ä- ƒÁ`0LWQ]]ýôéSôÙÈÈÈØØ¸«%úQ³[ÙÂdå‡êjA0˜ÿ*ÁÁÁÙÙÙè3ÞCˆÁ`0 ƒÁ`0)X!Ä`0 ƒÁ`0˜¿TƒÁ`0 ó_âÔŽ©ÿ¹³¿1˜-X!Ä`0 ƒÁü—ähÒÕ"`0ÿ?`—Q ƒÁ`0 ƒùKÁ !ƒÁ`0 ƒÁü¥`…ƒÁ`0 ƒÁ`þR°BˆÁ`0 ƒÁ`0)X!Ä`0 ƒÁ`0˜¿¬b0 ƒÁü¨«oÊ)(ïj)º6›ÈÎ/kljéjA>“SP^WßÔÕRüŸ_TY]ÛÐÕRü¥`…ƒÁ`0 ¦‹ilj©¬®oï_ “˶{©Ú®HJ+øG%))¯¹r/8;¿ì÷@d\ÖG!Í-Ìòø¿OT³[¹ç´Ï–­M’Ò TmW,ßq³ó„Ť{=e±Ø]-ûW½ˆzœÐÕR@ye’õ²©ËÏuµ )øB ƒÁ`0˜.fØÌ#/‚âÛ»»zΠ=kǰØl`³é@öæ&F¡PÚËpþfàú}w—Lï{xóÄ?Ù3×^ŠŠÏRS’²³ÐnOTtý¿D¡Bb Aé$“—žMÉ,2ÐV4ÕW!ÛÈËó‡VãH`í«5¨¤¼føì£B‚|µñ§ÿX¿“ŦR(Tê¿td» ‹MÐi]`®Ã !ƒÁ`0L3JŸ>¶úè³ßÛxÿ÷‰“†Ûé(¡”ÞVº¿¥–ؤÓ›7.º}ÅÈöò r4ù”Q8r@÷?Ü §:…D¥h+¢Ë„”|£þWϸ{͘?,É?Ç2·þ1‰ÙZj²èòClF—mÛWŒÜ¸pè¨ÝtÐæÆ¦–Ô€=dŠ´„ð’é}¥%Eþp?ˆεï¡ûüêŠ?\ï¿ÛQ;³óË Âÿùª±Bˆù[ ¢¥åß²ëƒÁ`0ÿQ˜Læ¯Òšáýº‘Ÿkë›üß'Žè×mÔ@‹ß[Ks :Þƒgª¯riŸÛ?ÑÆŽ™1¶×Œ±½ÈË&‹ ˆÏvÁß¼Ɏœ—ÍÍLøÞpüFššZ¸ê¢P(ØüY’fæÿÙÈþšš[ºª[°Bˆù+ÈÍÍŒŒ¬««ëjA0 ƒùUò +î= ÏÌ-µ4Ñ3Ø’ÓǬ©™ùìÍǰ˜ôŠª:†²ôP'3}­Ï6·;>"ã² &1çôuêd¦$/ÁUxnaÅí'aƒMô4PJyeÝõGï“Ò D…9šô²Ôù®„©YÅžG t0!œAœ¸öZUQr˜³9™-0,94:}Þä>‚|þïc“rçNräã¥ßó JȀɹHÔÁ}LU$É[˜¬ûÏ"B¢Ò4TeFöïÞº\ >©¬®77Têd&.*HÞ"âMhòÛŸò‹*åĬõZ7ðcrî«à„ŒœRUEɉ.Ö ²âœw ‚ð~ý&4YQVÜ¥_7ÒØšçqŸ2 çOîC£Qo= ̀ȸ¬Ó×ý)Ê0g3²äÜ ߀ظä<%yñ^–:6Ý´ÈB’Ó }ücgŽ·ÏÈ)¹xû­ˆÿ깃D„ø âcæ«w 9¥2’"–¦êCÌÐ#Ñ Ù!QiU5 -LêO=Mk=¸xû­ˆ0ÿ˜A–œÍyõ.1âcfnA¹¾–¢ƒµi¶€ÌÜÒûÏ"¦²ãå¥?z›¡§©0z¥´„pg¦î›ÐäÄÔ|‚ Š+‘$Vfæ†jœyüÞÆ½ JâdFÎ’ȸ¬€¤Œœm¥þöFª2ßú±eµÝcYòóñ@lRÎË „É#ld¥DÉœgnÈJ‰ŒèÿÙ6~îæ-5Y; íSžþÉé£X8ÙäUÞô0̪±©å”§?…BY:£/9j!Qio?|ÊÉ/7ÒUähªÌ1-½_E×Ö5Mf•”VðèETye]OKmr€â>å}øTVQÛÔÌDÝ¢Ås¶3èL—þ°Bˆù+ˆŽŽÆÚ ƒÁ`þxò:z÷)ŸÚºF›Íf—î¼õ½¼m ËÎ/³µ3¯°B^FLP€73·tþ{—öÏœ<ÜÖ쾓‘S/‚âÑ~EE9ñÖªÔûÈÔ;oRRò{ŽÙÕÜÂ4ÒQÊ+¬Ø}êiȃMVf Y^Y»ÚãvT|Ö#sQJT|ö¢-ž’âBÅáGÉml˶{%¥,šæ '¯½¾ë>j …²¼Äº½wS2‹àõ»Ä×ïàîɤB˜[Xn?Ö#$*Ÿ§±©eÇ1ï×7V¶ÒU5 S–õ~­ª(%"ÌôòK%9‰‡g!%„ÉbÛŒØþ1SBLHFR$3·tóÁ+g Ø·~YÂæƒv|Âf’âBeµ›=xu}µµ¹æ—–Ö žqØ7  ³õÈ£§—–µ§3¹ôÂ7 vòp 1¡å;¼ò‹*À7 Ö7 Ô”¤jñàyÄôUšš™úZŠYy¥kvßY4Íù¨û$TÈË øå;¼øùxVì¼ÙÐØ .ýºY3Æ-»_/#d´á$ÆwÛÛ;ë`î$G$*çžÆKw‚D„ø^ì¬?í±ztqYõÆ÷Û“dÓûÞ¯¢¯˜™¼?îùŽÐ›JÊkÜÖ\"ZZ˜*ŠRon­->žüÚ#ûÝ] ùƒž“AVŸÆm?ö¸—¥NAØáÒÈc™Aû‡9›Ê($Ëð<¢¤¬:ÂÛ½>ñÌåý3kêWî¼Õ™qL ØóìÊ X1k@EÌ‰ÊØ“z@naŤ¥gõ4²ßˆ|â^øáȤá6Ç®¼|ü2ŠóñeÛo écšýî@Ø£ÍZŠÀÃC{xvqeìÉä×EáGì ½ˆBêô¶e#*bNh¨Ê(ÈŠ£þ¼r`f›R-Ø|íéë÷¥ÃkâOWÄœˆ÷Û©¡*»õÈ#¤‘ÌZwÉHG)=pom™³då•yœ|Ò™V_=8«"æ…B±í®…$!UMðŸñ1+øî†úÄ3Þ–¶0Y˶{‘Q”n? ó8ùtÞdÇâð£‘OÜ3Þîc(KÏZw©¸¬º½©ë»nþàê¸SÕq§ÞÞY/,Ä_Uó'[÷¾‹H7¤˜ê«\Ø3ƒÌi¤£älgøøeTye¤¸?¯ˆ°ðñÒ9}&;¦°¤Š——® +†.:gµ P(CÌÎz„D¥¡¨¡/ƒâÊÒ™¹¥>±(Å7à#Aœ›'Iøy‘d›¢Ú÷Ð}|~ R#WÏtäÒ‹÷‘©í úºÿP'³©#íPJwc†ƒµžo@lT|v7#5~Þû§¿®¼å¤E'ºXo9ô09½PUQ vxB¡P.ì™!'- jJR^GçrVa¤£ôÂsrÚ(»CžˆÍ`²Øß)ÀÏ+,Èü|<œmÜ}êiCcóÉíSe$E€‡N[4ÍùúÃ÷n½åTàu•¯™ÃC§‘†SÏC³É»Â‚|³Æ÷~œšßÇVŸF£Š‹ ¢Àž }BJþí§ì{ènYâ‚R ´Ïï™n?ÖcßYßþöFdΡNf7ÍC–ÞíËGœ¸úê]D*t^:ŠªJ§ÑZK¢ª(åïµFQN>›È ýÞÆ–T¡”-‡ÊˈÜ8Õ+/#6q˜õÆ÷oz‡.víËUTumÉ«¯t5äw­RzZhG>qïŒ$MÍÌg¡†sÚÒåeÄ[,*,@¦¸~¨¥&»cÅ(WUQjÔ@‹çž=z…ìóÀf·NÍC^P@råì³Ö^z™ji¢ŽˆF£R(”Î7#X!Äü]HHHXZZþz9 ƒù;©®®îZ…Ù‘Z 9()ç¶0YìâÒꚺF: •Õõ’âB?WÝà>¦o?|rœ°gתю6zœWÁ…K_ó³^Oýcì,´›Z‚ÂSÖÎ|ýá{ÿØ+G€o@,F%}ê:Oo+]Ò¨H¥RÔUdÂbÒÛÌù19·…É’–~öæ#™ˆT»”Ì¢nF_·®±ÙDYemye“ÉF=†ÒRò4Ue:بfe®É¹‚×bÈÅ$æ”–×Èˈý\‡GÅgñòЋJ«H™Ùl‚—‡Ž|hI¹:óÐim–P^YWVY[ßÐ U_ÒÂbÒ ‚5𛳽,uÄEcs8{’~¿ü¼Jò%å5?×^NLô”‘î÷¥3eýÞBIy¢œx}Csrz¡¥‰ºÿûD2¤dµ.*%£¨…ÉêÛÓðWäÑ×Rè`Ò:Ýmœ=§6˜_TYTZm¨£ä÷ö«UH€¯µlß|yÕd ¤ì7ôÛ¯ƒB ƒÁ`0˜ÿ$H/B: âéë˜=§}‚ÂSK䯳bÖ€ªšúÃ_8MÚ«§©°kÕ(r“UÇô±ÕäóñݵjtPxJcSKßž†å•uG/¿È/ª”•}ßÓB[ªsÁH:@€Ÿ‡Åb³Ùç¹v´gòÒ Kw‚8Ó9 eQñYÛy?}ÓÜÂ?¶º¶¡´¢VGCþ„A#ò çéeä”6·0M?Ä•.!öáˆJå¶@f啹~xÇçC]}ÓÏUž]œÁ{ ²â‰©ùM-­{ü|<•?¢yv¶3ùy€Éd@fn)Aa1é]re“oc ¥ç”€¬´è÷«iŸÖ3êsú·¯EÐ4#÷»rÂ5j\-LÖoï·Ÿ+„ ƒÁ`0ÿø½s™}ÔÌ@Õûü}-EAÞå;¼¼‡þJ™tuתÑ+f¸xçížÓ>#ç¿srÁèNœ‡ÁÏÇÓßÞèþ³ˆÜŠoãE…z˜iÔÔ5½üÂ' VWC¾²ºÞ¥o·NˆðóHˆ €ÇêÑKgôãL§R)Èq1#§ÄiÒ>~ž {gô0U¸|7hÝÞ»(›?/•J©©müñšqQÁêÚ†ÒÈc\éŸ__[ßÔg➢Òê=kÆ8ÚèKŠ †%[xꇪæ€Ö»ìjj$Ä„ÚÓÿ H³êdvûÄ|Ît …ÂÇÛFÏ ]{c‡ÔiæoRÆÐ4›2Âö¬‡kgdû‚ƒÊ`0 ƒÁü?põþ;‹}ýðœÁ}L5TeäeÄ…Ù5~â¬3) áU³ú{­€k÷ßuò)—¾æàãó28ÞÁZN£ö¶Òàçõñõñ€áýÚjƒl0¿x,›¦ª,|Ê(äçãáüG*Wý¢*ªêö­7y¸Žº¼¼Œ§+ ¦$'‘‘SRû³6·ŽAþ·\mÔR“­«o*.«æ’¹=kâMHRzvÉÊYLu2ÐV”—km7£P(÷§ºŠ „Fã›SP^PR¥¯õ;ã/P(?<² ²â‚¼Éé…|¼tÎniOãRW‘€Ø¤œ6ï"õ²¨ô«¯uYE-ûgêê*Ò %9{šý¨6H¡Pšš™¿Ë¶ÿC`…ƒÁ`0 æÿtAnA9ºLJ+xœÀ™AFJb“r;_&g¼¤,‰ ó£Ëè„ì)ËÎrî›âb°£)F½zÿ]T|vß^†ÀÏÇãh£÷2(þñË(c]e¤´ ©òC¢¶ÆT_Å@[ñÆ£t# :ïák~î±òÊ:¯Ç!œ9Gôï^[ß´ë„7™rýáû{_ºþ"È¡1&á›-©ã‡ZÀÚ=w8ýN›š™èƒö@úUna™ÿüÍ7Ü]*%RVQK¶½5ýí¤%„o< ‰ù²c°…ÉZ¾Ý‹Åb/sëßùv½~—8eÙÙˆ™íe‘IHÉûQÇÚñC­>ežõú¦]¥µmz]êj(èk)ú½IB) Ík÷ÜÉ)(‡/›ooz‡"í«¬¢Öyò>2œé"ÀÏ;¼_·°˜ô;>8Ó‹J«¨LY)цÆf®Í¢†ÿ†ƒÁ`0 Ó1“\lî?‹˜ºâÜØÁ=jêïú|ॾŠ_=gкùƒÛ+ÊÑF_^FìÚýwÕ5 šj²_Fµ´p«IN¶ï"R-]¶öíi().tpã® "Bü7M˜±ê‚ÝèN¶ò2bo?|JLÍ?Ôª3NÂ$žGx>|o¬§ÜݘÑf';ƒB ûnèaªnj ºrրλ}ùH¿À¸¹®<ô‹ìf¤ÖÜÌŒNÈ~š|oƒ¥‰:Wf*•²{ÍèQs÷›²¿¿½‘˜¨àË øÒŠÚ¹“ÀÉVßDOåÙ›6#w0”¥}ücMôUP”—ŸcÏÚ1A>[xÊÓ齉žr}csÄÇÌ ð”¤W/¶­¾ßÛ¸^c<9šðóœÜ>õ§åùQ°…ƒÁ`0 æ_„®†¼¥‰:g¸E„‘޲•™gLK~^›nZFºŸÏd9 ûµC³U$o? KÏ.9²eÒ©S{˜jˆ|±éQ©”{§ö·7JÍ*ÎÌ-E'+p¡,/ai¢®©& ¼<ô›Çæ ò]¾äõ8D_KáåõÕö=tQNÇÒ¢E?bþ”>ÆŒ¡Nfè˜{pékÞÓBÛ˜Áuž¸©ªµ¹¦ÀgW …rçÄ‚½Ó³KÒ³‹‘¨rÒ¢–&ê\Q^Ì ÕzZh·ýÔÉÎ ÆwÛ˜A–Ii…§¯ûû½ÓT•%÷¡éi*<¿ºÂÊLãy`Ü»ˆÔYzû][ii¢®(û¹óåÄ£}¶MÓ³¾¡ùÙ›89iQÏC³g޳qQA+3 #¥oÆHW™³\˜ªÚv×"uN:zÿô¾= “Ò r Ë•$QÃ}//?ê>IFRäþ³ˆËwƒòŠ*æMvt× =¥®"ci¢ÎúER\è¥çªÁ}LC£Ó}ücûõ2úðx‹M7- Õ¯ÚÈÚyƒMsàç I"Ó{Zj[™iy¦Œ° ¾·aƒIjVÑ‹ xMU™ {fpž´¡ª(ii¢®ñ­i·‡©ºm7-ò²®¡ Z+i$‡7Oœ<ܦ±©%4:%ÀÇcÛ]ËÌ@•3›®†|S ´CEœßÎenýªk.Þ~{×7œN§Ø8ž<מ‹aÎæon­ëooŸ’ôᓃµÞûûÊÒ¨“_ßXí:ºgEU}JfÑò™ýý½Öô±5ènôu2÷ê¡ËÙ31Kumu9®tm†\ÂË]ó&;•V»ùæ¡_¤ˆÿ©S5¿Ä§ínÌèi¡Mç +%!ÜÃTCGýëd^2½ïò™ýÅD^'t`<ÿ' t‰£*ó‡¹uë›Íeeå^½zuµ8 ƒù¯R]]ýôéSôÙÈÈÈØØø×Êû¯Âd±µz¯ ÷ÞÒÞù˜¿Šª:5»•¶Ýµž]YÑÕ²`:"88˜sæ “É|üøqhhhYY¥½3’~+G=yò$gJ]]]|||TTÔ?ZoHHÈúõë ~o±•••7n|ùòey233333?}úô6ó—°gÏž… Þ»w¯ eàúé R¹ÿR———oذÁßßÿ£±±ñãÇ111¤FµnݺÌÌÌ?Ð ---[¶l¹ÿ>gbqqqjjj||üƒÁ`þ°BˆÁt–ÊÊÊ'OžXYY€§§çwó§¥¥@Ïž=€FûCQ¹÷ïßàÀÎii餤¤´^???ß^K^^ÞÎ;>|ØAžÙ³ggffpæ)** kýgç§¥¥uÒ“¤¢¢"<<¼´´”+Íf““-)))""â»LDërÈZ( ßÉÆEÇ_[&“ٙﵔ””˜˜Xç+ýî¯bqq1“ÉäLiii)**êü@(++·Ù3ÍÍÍü :þÂ`0˜¿ƒù ¸yóæ7nܸøÓ…ôîÝ[RR²¹¹yÏž=pâĉörž9sFNNŽN§€œœœœœÜ¹sç‚X¶l™¸¸8Z# ÄÅÅ,X€.ËÊÊÄÅÅ:jeeE¥R…„„¦L™RWWÇY~BB‚³³³   (((ìÞ½›ÍfoݺUNNŽJ¥Òh4TéÂ… Q~UUÕ¾}ûr–hccƒJ••2eJII y÷öíÛ¢¢¢qqq'OžÔÐÐyyùÇ·ÙØ””yyyaaa““SRRB/\¸BBB6lØ ##šššOŸ>%Ÿe³ÙgΜéÖ­2AŒ;6//ݵ··—’’AAAÔ¢´àÍ›7"""äp°Ùì;vHKK•Jµ··ÏÍÍmýÔ±cÇ GQQQæææè÷PXXøøñãdžÈÈÈþýû£qDèéé½|ù’³j}}}ò®ººzff&ºuôèQ òÖÀɧªªª¦NÊËË‹n nß¾Éd’âããÉb%%%I#ÉÌ™3Û‚ˆˆˆ~ýúqÊ©¯¯ÿêÕ+2C@@—œYYY­ËiiiqwwWTT$sòòòÎ;·¹¹¹Íz‘sr÷îÝcbbºwïŽ:rä™'::zÀ€œ²éêêúùù‘ôôôàäÉ“ãÇGBCC ‚8r䈦¦&ù•J?~|xĈ åÍ›7~~~K–,C•Þ¿=ÂÇÇgffF–píÚ5¦¦¦¶iÓ¦C‡9+++Q† .@¯^½„„„¦OŸŽTM¸}ûvëÆVVV._¾ÜÚÚFµdÉ’5kÖ %&Rµ´´äää–-[¶råJ~~~–””„ž £Ñh#GŽ>>(…l/©ÂuëÖKR§jnnFJ€€@ß¾}ÉÎ_¿~=A»víjÝçhÊ!½EEEÅÑÑi›4íãǨd¤s¶âáÇmvš¿¿¿€€€¤¤äêÕ«=êêêJ¥R………SSS ‚ E?€æûæÍ4OΟ?÷îÝ1cÆÀâÅ‹Ûû)“––ÖÔÔ$¢¾¾~ÅŠööö0tèÐ%K–¬\¹iÚeeeJJJ¢¢¢{öìyüøñš5kxxxÌÌÌHEtÚ´i¼¼¼=zôPTTœ3gz9•——G¡Pú÷ïìØ±ëׯϛ7B¡˜˜˜ åüòåËsçÎEÍAm !"99¦NJJ¸nÝ:èÖ­ÛÎ;wïÞÝ«W/°µµ%µÜÅ‹£_3YYÙ¥K—®ZµŠŸŸŸJ¥ÆÇÇ?K*„ý"=W>yý'+ýçÈÊ+ma²~½œßÈå»AŒž+ƒ>|êjAÚ`±ûõîCÝ›š[ºZ?Çýgáfƒ6K˜.°ê^\VÝÕâ|ŸAñFý6x·ó }ò*šÑsåC¿È®ó3X!ÄüuüºBˆ‹¤ÕЮ=,--©T*gJ'B8tèJillTTT¤Ó餑pРALâïïü- ‚PQQÑÐÐà’„S!¬­­•“““‘‘á4T®\¹6n܈.‘B(..ŽôX‚ BBB€ËÌÈÉÖ­[àõëל‰H!ÔÑÑ!~§N€Õ«W£Ëºº:´–%éÑ£ÔÔԠ˸¸8 -¨mÂ¥öë×O@@ £)„ÈÌrõêÕ‚‚‚5kÖ ”>}ú <{öì9|ø0©º 6Ò¦Èph©JDBBÊ<{öld !í~ïÞ½C¾ h*666<é‡eeeAlß¾e˜8qbVVÖãÇ‘Y£…p÷îÝGŽ!åܲe Ê4á»wï¢Kr4ãããÉÌœdeeM›6lNqq1²DÙÛÛ·Y/¹[UPPðòåËhu½{÷FyöíÛwèСòòrt¹cÇ”Á××¥ …”””<==Ïœ9SQQQ[[;iÒ¤/^ q¬­­ÕÕÕ555ô©ÀºuëâââлİaÃ""">Œ.ÑSGŽ!uNÔùDúaEEECCCbb"rGìÙ³gbb"ú‚³ÙlKKK066F_ÃŒŒ d;v,*™4JII]¼xñüùóäœç„Íf#[V\\™ˆ ­'NäüoÚňZºt)g"RùøøÈ¾ÍÌ̤ÓéúúúdíæææœÚ8A&&&<<œ3—B˜œœL§Ó»wï^__O‹~!É·WH!ÔÒÒ"ÛxöìYX±bñ³t¡Bxæ†?0\/Þ~û'+ý‡¸r/®³×]îjA¾Áãä`¸þ{–ìœ8MÚ ×ںƮ䑚YDÓœ¡d½låΛ#çKÏ.îj‰¾šÕ'¯½nóîÅÛoázæ†W‹ùN…ï!Ä`:…§§§¼¼<}„ йÐ2?Á€Ð øøø™LfQQ0™L??¿nݺÙÚÚ’ùCfgxöìYQQÑÌ™3ÈÄ•+WR(¤Y‘lÛ¶ ­ƒÀÊÊJ\\<''ç'šsáÂÒ qÀ€@–#((¨¥¥Å™ÙÔÔòòò~º÷äåånܸÑÉü§OŸž2eм¼¼‡‡‡’’|Q¶`õêÕK–,!íu}ûöEýJ@@]îÛ·/;;ôõõQft«¬¬lÿþýhkr–€;w¡!2eðññ :-ëyxxŽ;¦ªª:tèP”ÒkÖ¬Y¼xqk9QlRν{÷"9 Ú4Bªªª^¾|¥@FF *§Nœ81mÚ4yyù]»v!ïÝ»whWØÊ•+—.]JzÏrõ!‰€€€ŸŸß¤I“fÏž-...$$äéééììŒbó ¡ Ÿ““õGqÙ²e»ví244ܶmJéÑ£ÇÝ»w»uë¶dÉd²#>AollŒâµßÐÐÀÏϯ§§GÖ¨§§‡,l™™™>|€)S¦ /kƒaaaáááœÂÐh4ooïéÓ§»¹¹qzÞ’DEEÅÄÄŒ9’ÓûtæÌ™’’’\ß¾ŸfÉ’%è[jjjzzzä×-)))**jܸqœ£ß¿ÿ–––ˆˆˆŸ®ÑËËËÀÀÍg²Lxÿþ=g¶S§Nqö Fãìø©ï¾§§'“É\¹r%9Éi4ÚòåË€«?/\¸€¾ÝðåWèŸ>ç/§¤¼¦ç˜]G.½è ª¢”ºŠŒž¦B§KýOÂfŽö¬Û{·«é,Å•=Çì:yíuW ÷ž…³XìÛ'î[?îÞ©…ê*]ç`~ú¯Áüß•°hÑ"2ÚÞ˜1c–,YrýúuÒóAÛ{H•…ÇÈÌÌd2™ÚÚÚ?]8:ž­½HÐ.ÔÔÔŽÅh/DG盃ÚRSSÙ!00ðÕ«W………ÕÕÕh…Ívâ‡X¿~½¯¯ïäÉ“Oœ81þüqãÆuׇôc¤P(æææyyyMMM¥¥¥HÇ ¼qãFZZZII „Å2qpp000HHH¸wïÞƒœ=<<¿¢››Û™3g×®]»}ûö)S¦lß¾9(¢þONN&ådcÑ ý¯««+))‰Ò¹tæ6iSNTrŸ>}ôõõïÞ½{ÿþý¾}ûzxxÛ&¹(--½~ý:²9WVV"ò»ÃÁ¹ÙÏÜÜ<;;»¥¥¥¸¸X^^Þ¾}Û^’èéép¦ÔÔÔܺu ½¿(//ÏÏÏ6›Íb±8¡Ír€êBÂ#.))™››KžŠìK‰‰‰­;¿=„<ÑÄÝÝ}çÎè3 ·Ãõ”‚‚©ù·IJJ ˜™™q&"Ú÷ïß!gÑ_¡õ×â( ú‚{{{sê±(°ÍOkG555EEEÈiÑÜÜܺLÖ‡‡‡ûøøTVV¢"?ôÝGýÉõk†\²Ñ­6»…óóQ]ÓžÒ±²ç`­—¸·«%ýÇa±Ù!I<ô?iüש¬®O1ÑSþõ¢~‘Ü‚ ÐR“íjAþ °BˆÁ|d ¼{÷®ŸŸ™H¡PRRRPô—´vÎ Q?òuøO€±Èía$ÈkŽÍf·>ô Ñ^ú !¾`¬¯¯4hЛ7oÌÍÍŒŒÄÄÄ~1²"èêêÆÅÅ9räÂ… S¦LÙ·oßóçÏIm¡cÈØ'èúuëvïÞ üüüœU??ÿÛ·o׬YsíÚµ¦¦&??¿€€€/^ØÛÛ¿{÷nÅŠþþþuuu§OŸöõõŽŽG???ƒÁà,MXXM$¤-ÿP?¬Y³yÀv,§§§gSSÓóçÏýýý_¾|ÉiÒA¤¦¦ÚÛÛ#¿e99¹ö¶2þPnܸ)QmÊÖ%%%½{÷NLL)))´‚ÿEˆ/&Ûì|ÒÞô•iiiÎ@Að£ß}Ô™9A)\Jòoók‹T Nå h4š‹‹ËÏ•¦«¤¤¤££#gzÿþý‘õµ=X,Ö¸qãîÝ»§¯¯onn.&&Æ¥Êv¾?¹~;ۙæHØ_ ˆ´ì’I9Šr&zÊü¼çg³‰”Ì¢øOyªJRƺÊ|¼_—vÕµ éÙ%¦ú* %)­ þS^7#5ÒÒ’šU“m¨£Ô¦æVZQŸÅb±»3d$¿Ù'“˜£¢ )).TS×ø6쓤¸¹¡Yo~QeZv1TU×'¥€ª¢” w+Z˜¬I¹šj²b"_ÿ¢%¦æ'¤ä ðóö´Ôîè/]}CsLbvaI•©¾ª†êWÛQd\–¬´¨²ü7_ÕÂ’ªü¢ÊnFjè²®¾)".³ ¸JI^ÂT_ED¨Ý¹W]ÛšYl¤«ÄËóµW“Ò øyÕ”¤8… ÿ˜ 4ÑS&%/.«..«€º†&Ô ²âœíÍ/ªŒŠÏà57Tåþe@]”SPne¦!/Ó©x¿-LVBJ~Jf‘¦ªŒ¶çd`²Ø“rtÔåøy_½Khhlv¶3䗼Šôì¨ü2vjJRü¼H}-^úËà„&ËÉVÍL6›ˆOÉKN/ä3ÐVTUüÚ-AÄ$樫Ȉ‰TÕ4¼ýðINZÔT_…³3QïEÆgåä—k«Ëu7R£P(-LVzvIAq%äVðóñÈHŠHI|ÝðŸ•W“˜-"Äoª¯*)þÍ/@jV1?²¼Dbj~lR®•™CYšl» _aIÕ»ˆT†²49J+jC“U%Í T[«îuõM1‰9ÅeÕ¦ú*mZ)³òÊ¢²ÊÒÆº? ELÎMJ+0ÕWÑQÿ¼>a³‰˜Äl9i1E9qΜ¹…•ÕõF:J/ü'À !óX,–———„„D¿~ý8Ó•””^¿~íééÙùE!Zåw|BÇ ¼_9ÿ•Àu´4“É,((ÐÔÔüE­øÁs#>üæÍ› //X¸pᯟ:-++»sçÎM›6mÚ´iÿþý7n<þ|{™9OVˆ ‰ââb¤ Ž9òÚµk‚‚‚ááá\jƒ¤¤ä¹sçÐVÃ;v4778pÞ077ýúuRRÒêÕ«½½½³²²¼¼¼æÍ›Ç`0’’’455£££Û¾¬¬,==4…‘§2´Iaa!ÒG}åÊAAÁ°°0®9)%%uþüù½{÷:thçÎÍÍÍl­îÛ·¯  €‡‡çÍ›7ÈÒ5`À€ï:¬¶Ù‡‚‚‚ÒÒÒ¥¥¥H>|¸§§§PTTTë /­9{ö,ÒïÝ»‡‚Í™3mýúi(ŠššZJJж¶vdddÇ™9SÕÕÕч¥K—.[¶ìWdPSSƒVß>ÈÉÉ$}ÿ!PC,,,<<<~W™ üüü’’’?Z¦§§ç½{÷–/_NîDõðð û¡BÈþ$w¢Âô_q£èZ2sKÇ/:ýÙO[TXଇë¸!=ÚËŸœ^8náɘÄÏŽÁR—ö¹ u2C—g½Þ¬ÚuëÃã-ë÷Þ} eÓ¢a ]´ÅóÌ”mÌ KÏóÉezs sµÇmN‡ÏSl´‹òÊ:³A›7,ª #¶|ÇÍæ&h¨Ê<¹°T_KL;ð19îú†ßõ €³®³Æ÷æ’<04Ùyò¾M‹†m[>êšGÏ?á‹î 𾹵ΘÑf«/ß Z¸Å³®þ³ñß¾‡î#s”ä%Z˜,‡ñ»ùùxòÃÓi_ÿœõ·;·°¼<ú/mé6¯³^M-dópÑ¿{›¹°Úã¶Ï¥eLÈÄîCݵÔäb|·AËwÜo†B¡ÌžÐûôÎiè2;¿Ü|ð–ÝkÆP©”õ{ï2YlÐÓTxra©æ»ŸÿûÄIKÏ"ÝzYêÞ^÷ú]â€iŸ†º€)#l¯œŸ2 Ç/:ŸEʤ@¯^½PëÈDAAÚØ)))¹mÛ6îÙ ‘›¢žžÞÁƒQ~t ù³ÅÆÆ¾{÷޳4ÒùùVTT ³Ñ+**Æ×üHxèÙ³g{r¢Ù"))¹}ûvdkó46ô „„ íS[[ÛÉ]£³fÍBþ~·nÝB®z¨9eCf.ÙÚe£Ñh(€*“Éäòü9PçÇÄÄ  I$È!**Š$ojjB‹ô*çêÕ« dÎúúzÒxØyètúýû÷94‚ƒƒ?}úäääÔyËÕÏ}/ôõõùùù=zÔùÃ-¿[/ “––öCE}÷» †·±Í_³K—.ÇnÕÿM-½ÇíÎÈ)}xvqÕÇ“‘OÜõµ&,>ñ1³ÍüÕµ ½Æì*«¨õ½¼¼:îTèÃMJr#æCkzøò’nëÁªš†‡gß?½PZBxû±Çöc=¿Œ>³kZàíuvÚw|>\¾D»d룗_º/^v8çýÁenýN\}µíè#Î2Ïy½Y³çÎæÅÃÞÝÛ°rÖ€ôì’Yë.£ ç÷L?µc*8Û<8³èÁ™Emª[Giàqò‰o@ìY×úÄ3™Aû×ÏÒÞé”w|>L_uÁÙÎ é•Gyôñ‹{ÝÂbÒÇ,8 8³hý‚!PR^ÓÃe[rzÁÉíSc|·=¿ºb@oãÓ×ýçm¼ÊÙŠ˜Äœ¥Ûn,˜ÒçÆ‘¹SGÚ’’¬ÝsçÖ“°3»¦½¹µÖ˜áë0~ÏÒm7ÖÌôîÞ†™ãìc“rÖî¹C–sãQÈ̵—9š$¿ö(‹:~n÷ôw)ã~]¶­ÝsçÆ£&¯®¯¾¼f]}Ó†ý÷à{lÜ?5«øáÙÅ·×dù."uÒÒ3 *,0¸iV^YPø×¿waÉùE•¼úmtu„ æOð+QF§L™߯Ð#Añ!Û;Òªu”QeASS3888**ÊÍÍŸŸŸN§sEå ¬‡BöEGŽbŒÞÄ÷èÑEç?w’y@Z`íÛ·/###<<%r;–JÓ§OŽŽÎËË»|ù²°°°¨¨(ªE={ö,§ÚÚÚŠŠŠíõÒ½{÷ÀÑÑ1>>þõë×(â<Š2úáÃ2²Ž<]®_¿fÍšURR’——‡â~°±±‘OJJêùóç±±±ä)œ´Ž2úäÉ“úúúÆÆF¤Œ‘AM9!£Œ…B!­@ä€"œœÜ¦M›ÜÜÜÈ­kè¬Â#GŽðóó7ÎÝÝ€-[¶ Q““›7ož»»;i¬CFÐ7^^Þ1cÆ,[¶lÊ”)jjj***H°  ¯Ë2MMMt*r¿l3ÊhAAL^^žKNttÛ¡C‡Z˹uëÖÖE¡@ÿàââ²mÛ6rSŸ¼¼|›ƒNÚvZ÷! DYRR‚$—••ݸqãÌ™3I‡Rò¬BdÛ177ç,™47988ìØ±ƒÓà‰ô42Ê(y¤i¥œ0aYމ‰ ¨««£Ë¸¸8òÔ;Ôù“'OVUUe0ä#dà(YYYt°Ä† P¢ººú¬Y³-Z4hÐ AAÁM›6¡§Èc'ˆï"Ð4($$¤°°ðáÇòòòœ'Xˆ2Z[[ËÃÃ#++ûâÅ‹˜˜˜ììl‚ãBΜȓ“ º‹Bé><11‘Éd–——?}útöìÙíEååŠ2Š|æmllbccÐX<{ö ëëëëêêBBBV­ZEžë€¢ŒrsâÄ $I^^^IIÉÖ­[‘>üüùs2¢¢"ßÝ»w“““Ñã\QFUUU)ÊÖ­[?}ú”žž¾k×.*•j``@øE¿*œ§w ©Ây4èòÏEÝ{Æ®w}¾þf¾Š†ë„ŧÐ%W”Ñ ûïÃõEÐ×#4îù†ÃuÎúËœÚÞI†¦]·ÏZtyÖ+®«=¾õô*8APv{QF›š[TmWÌ)-¯!ÃbÒáÚ}¨;ç%]s)[›$¤äÃuÞÆ+œ‰!IÀpåÕžññ›¿Â\mO†ëÒm7ÐeFN 0\ÅŒç…F§‘ytû¬†kCc3A¹åÀpµöR›’¸­¹ ׸ä¯1—l½ ׫÷¿FYonaêöYKÕ˜žœþy>«÷Z ×å;¼8‹z™ W…KÉl‘q™¨7î?û¼Rja²d»/5šG^ªÚ®Ð°_…¦=bðŒCÀpEÍ)«¨2˜£f·¢±éóT¬¨ªëá²í»QFMnª¬®'kÑq\KQŸž’YDÄC¿HÎï/AsÖ_期¿eƒé,Tik†jnnîïïohhèääÄéCØ«V­2119wî:ÎÞÇÇ©ˆ$|||«W¯.++ëß¿¿‰‰I``àwË,--2dˆ   €€ÀòåËííí7mÚÔAþiÓ¦ñððA/·mÛ6dÈ““Û¿?F+**Ú¾}û… \\\È&€·nÝrwwGs`ذaH~“¢¢¢S§N¹»»‡††òññíÞ½9aêëëߺuKAA¡¹¹ùÎ;‡ºvíZVVY²ÝÁƒÑâ8--­®®nãÆè¼¸6‘——ß·oF+,,DrŽ1‚3€‡AKK §œ...k×®m]ÔÖ­[‘£Ý£G6oÞ\TT4gΜΌ#:hŽìÃ-[¶ =iÒÒÒ¤ÑhÅÅÅ;vì8þü!C¸‚Ç´i[¼x1Úç°qãÆ?’qwÛ{ªÍr¸ oݺ%//ßÔÔ„:ßÓÓ3;;iA Œ™%%%ÅÅÅH{߸qãâÅ‹©T*zsìØ1Ÿ¦¦&2ÞOç{˜>}ºµµµ¼¼üðáÃѱFFF,„„„V¬XQ\\Ü·o_SSÓàààN>¸eË– xð u!|||>>>&&&[¶lÑÑÑÑÐÐX¿~}ïÞ½_¼xÁyè?Äëw‰tÕ¹§acS úgi¢ÎÏÇ—œ×^~aA>»îZd~ÛîZ45îÓ7ù—»õ'êÌ T`ìຟw.h+ÒiTÒg/0ì‹ÅìhJ–ÙÜÂt°Ö««oBî‹k½ÞV_¿8ÝPTúó¡zÌ T™,ö¼WË*:ÚU‘•W–ž]Ò¯—!›M:Úèju}YñÏ#‘/+Ü~&#)ÒÏþóWŒFûfé‹¶—ý¼ä?Qàëw 0°·1ÙaA>3Õ”Ì"$vpx pÚ…úØêÛtk7ÀXBJ~v~ÙÈœí,MÔõ4"ã²HÿX˜4ÜÆ¶û÷•µ‰Û¸^ä¾»6ÛÎP–nÝö&=L¿‹J@SEAV\VJô¦wèŸùò ø(,È7aØ×]РiÀd±ïù†k©ÉZ™i|·Ø_ï!Ä`:‚‡‡çöíÛ £ÍÅÍèÑ£EDDÚŒ/gΜi혷ÿ~WW×ÈÈHEEE;;;G‘¡åääž?ι–.]Ú¿Raàçç¿páÂòåËcccëêêºuëÆ¹)«OŸ>‰‰‰l6›Œ>ïççÇ©vÊÉÉ=}ú4>>>>>¾©©ÉÈÈÈÐЗ÷ëÎòáÇËÉÉqEž@Þ;è¨??¿œœœnݺ¡êV¬X1hР䧇òóó#{L\\<22òÕ«WYYYÚÚÚVVVvvvœû¶mÛ6tèÐèèhiiid’åÂÁÁáéÓ§dØÌððð÷ïßüø‘——W__Ÿ«­™={ö–-[?~,,,lccé®,]ºtÀ€---666111999HµsvvÎÌÌô÷÷ÏÍÍ•––¶´´$£îÞ½{üøñ!!!•••ªªªŽŽŽœñTFŒáääôþýûÔÔÔšš999 Î^Z¶l™‹‹ 2J;88¨««§§§Oœ8±=aÙ²eDrZZZZ[[GGGçææ¢£úõë‡äÌËË“––îÑ£²›µFVV6..ÎÛÛ;==]CC£wïÞüüüC‡%po777ww÷Ç ÚØØp'°hÑ¢~ýúùûû·´´tïÞÝÖÖ6666;;›—‡ææær//((ìë뛘˜¨¨¨hoo/''‡N˜DÕÁÁáÙ³gl6›<…ŸŸ?((¨¢¢‚³'¯_¿ž‘‘¡¢¢B¦Œ9ÒÙÙ™ì|yyy ÎŽuppHLLô÷÷/++377Gº"??ÿ‘#G-ZžžÎÃã®®nggG¾C¹råJzz:çÁôí!,,|ñâÅõë×ÇÅÅUTTs…™9}út›>½œxxx ><&&FVV}/ìììž>}ÊÂôðáÃ%%%äÏ—€€ÀñãÇW¬X—››+..nllÜ.úèÑ#Î ½T*ENÊÌÌ466&c5Í›7o̘1Èq”——WGGÇ‚üIÙ´iÓøñã9CÑ//¯¿¿```JJŠªªª F311áÄÆÆ&$$ðññëêêrî…^¾|ù€8#‘ ¼xñ¢“¦þ0©™EL[Üd>Wzí—Ír­ó×Ö7 ês¿¸©­kl¯ ~>î¨Ë …——ÞÒÂ"Ë€ÉËÎN^v¶óÅŠ ó§âñ£¬78,:ýâí·^CǶ\¿`¹vÿ¦ÉYEpþVàù[Üï‘xT*eÂ0«ƒçŸ?{óq˜³yøÇÌôì’EÓœÉ-…Uu—ï?y]P\UQU‡6"vòH›TV×_¹ìý*:¿¨²“¦f@Ï1»ZEm]“¤8=§ ´Õ;v8%³¨Íüšj²IiéÙ%ÚŠ_FêçƒÒµ~– ïWÑžÞ§f—”U753¿ÛvTš*T*Åëèܱ OŽ]pRCUfÁ§…Óœ¸BÎ0Y쌜] yú·Z(ÚŽˆºÁÇËÓ^!$T*¥uüôíha²àËá”§ÿ)O®lµõ€ÆH‹ñ«¡¡‘]XR¿k+_¿KV©¨ªë5Ö#5³hÚ¨žã†ôðñ½öà]Dzu áTV×ÛõHN/œ:Òvì`KQago>^¹÷£=êäó»§+} UJBÅÌd³ `2;»Ýåou¥ ýjøîöX¹ëÖÁóÏ{[éNi++%Z]ÛÀµï»ô±ÕÏx»ïòÝ c—_®Øyóþóˆ×7V·§Î± ‚Åæ ÔêßÞFômüP«i£¾ùËB£QÑLk¯Ï4»D„>+Û®£{¹ôÂóÁûaÎæ7½C`Òp›_)¿“`…ƒÁ`0 ¦ëÑT“MÉ,²2Óêdþ°èô>¶úßµ‡ü€ ª² /#6 ·ñ/Õ^T˜èc«ßÇVÿÙ›]î:ñÄçw\_MUàá¡u ž¹¡š¶âãQõ Íw|>h3äH—Å[OÂâ?åÙ2q±ëçW“ÅU(„èDŠŠê¯› ‚`sè$w|>|LÎ=¸qÛø€IDATÂ2·Ïo6‹Ëª[+„¬o»µÔUdúØê·Y/:6#%³ˆÓÙ²ýP]ERò9 ‚HN/àçãQQüÑ`±¾o2-¯¬;tÁ϶»–¿×¤>Wþ¨Bˆ:yÑ4çy“ûLXtê®o¸oÀG—¾m¼£Ó¨* ’™¹¥ Íœg± JmÚ“4F¼<ôöfš²Âç1âLd2¿?çÙßê´H~T˜¨šê«x¿Š.)¯yð<ÂÚ\óϜĈ÷b0˜¿ò ¿_?ùð¯÷!ó{AêÁñ«¯:™ßÑFŸÉb·viûzõСѨ§¯û3Áô!&*Ÿ2Š:ÿ§»©sOC>^z][޲ªŠRª2ý¢r ;Šñ;y¸mm}Ó¦ƒ÷³òÊ8 ,9¥ +%Š.Ùl"".³ƒrЉp_Â{1{ÝeNQ3rJ@FJ„Ìñ1‹³:MP€÷Ó—¸¯G›ï ´½•.\½ÿUS½r/80ìS{ùt”å¤E½_Egå•‘‰·Ÿ~HÏ.™èbýCgoЉB+=§M²òJ ‚–!Ëÿ›ÑùŠÅkAŸé4jÿÞÆ€¶ðµ‰“ACcó…ÛoÉ”’òšó7ßÈI‹:Ùý€FgÐT“US’º÷,œÜ^Ë…¥‰º?ïC¿H2Dmv~ÙÖ#¾[òŽãÞd÷–WÖÝ~&.*hmþÕÂutÏÆ¦–Ùë.WÕ4Lþ#æAÀB ów²xñâö\1dÁ‚ ,èj)0˜ÿMs>yíõ–Có‹*ûÛ ñ§d=yídk°|fNΫç <óÍò^9%Nvü|<Éé…_DlÙúÜ¿N¢£.?g¢ÃÉk¯{ó˜3ÑAUQª ¸* $)+¯ôÙ•,DZBXI^",:}µÇm5%)SÕÖΟ\¨Ú®˜<¦oOCú…[MÍÌaÎf­³ÑhÔ½kÇŽžÂjø¶uó‡h)ÖÔ5†Å¤ßó y°‰<Û}¢‹õ†ý÷_ôƒo=îmôöžñÙvô1‹Åä;ëõÆÿ}Ggáôëe$'-záv ˆ0¿Žº¼×ã¸Oyä1tàh£ïqòéÎãÞ "ÄÖ+àõ;îMõUßG¦ÎYÅÒT]NZt¨“™³Á@“Ï#†ºž4ÜF^F,+¯ìEP</ýž0a˜õ†}÷N\}Åb±{Zh„$]¾¤§©˜šß¦œ‚¼[—˜»áŠí¨ §:kªÉ„Çf¾è'%!¼mÙˆšò2brÒ¢Áá)ëöÞU’—èn¤Ö^0m%Y)Qÿ˜Ý§žZš¨¿z—pàÜó2Vßz¶÷´Ïü)NúZ ùE•;Ž=à VÄ…ûÒá·¼C—l½ž˜šßËR'¿¨òĵWe•u—ö¹ þæ÷’tu÷š1Ÿîá²mí¼ÁúZŠÕµ a1é÷ŸEDx» ò‰‹ Ni{æF@¿)ûgŒíU]۸ì—W@„ݨ3ÆöRU”:wóMIyÍÖeÑ-1ÑÅzÕ®[ý"yè´qC;{Òõ¯¶÷ÏTƒÁ`0 ƒé~>žÐ‡›lºvéÎÛÓ×ý€F£Z3zZ~Ö¦Ðj›—çs0 Qapo÷ù¯žòôGçÈÓiTksM2&!ŠÈËûu±÷¹Þo–¼Z«v5·0³óËdÄPOr‰ÑºÇ °¤ŠŸY QJN ;. hV^)?§uQP\Y]Û(/#FEÀIUMCcS‹œ´(êä¦ffë8±­)«¨e(K·V[}{ ž’bBäÐ×74 ð·ñ,AùE•T*5­©™I£}KmN•ƦÎY]^YWXR%#%"#)ÂU2WN’&++¯LQV¼õHµöÚÞzÚ³Xì&«u×Ö7åä—‰ p"ŸÊ)(WS’B…smql-º[TZ]Sר¡"Ó¦†¿aÿ½]'žÜ:>oìàðHúàààììlô+„˜¿¬b0 æ·ðB ó×ÒÂd©Ú®hlj)üpä»Ý_S!ÄAe0 ƒÁ`0 ¦ëyü"ª°¤jüP«Tä+„ ƒÁ`0 Óõ„F§ëk)Λìø'+ÅAe0 ƒÁ`0 ¦ëÙ»nìÞucÿp¥ØBˆÁü‹hnnöôôŒˆˆøí%'$$<|ø°¥¥å׋Âü^ZZZ=zßA&“éíí}ôèQoooò¬çÂÂBOOÏ'NÄÄÄtu#~__ß°°°®–âûÄÄÄpöüÿ ÉÉÉW¯^­ªªêjA0 Ó•`…ƒù‘““3eÊ”C‡ýö’÷ìÙ3bĈŒŒÎûèÑ£‡vuüäåå >|ÇŽè²²²rΜ9.\ 3°ÙlGGÇaÆ-Y²dذaQQQðñãGCCÃ)S¦,\¸pĈ;fêßÃ!C.\ØÕR|ŸM›6 6¬¬ìó‰Ï—.]š={vEEů•Úõ\»vmÚ´iááá]-ƒÁ`º¬b0]†¿¿rrrWKÑ6³gÏž1cyÙÒÒòâÅ 2Õ6›ýêÕ«´´´®¤]âââΞ={òäI2ÅÛÛ;((ÈÕÕµ¶¶öãÇzzz°gÏžòòòû÷ï×ÕÕÝ»w¯ke®®®~þü9©/ýßsìØ±sçÎ%$$tµ ?@IIÉóçÏkkk»Z ƒÁüëÀ !Ó5ÔÔÔôéÓgÕªU]-H§HJJêׯßþýû»Z_%//ÏÙÙyëÖ­]-H»XYY]¿~ýìÙ³d ò6mš‘‘‘J”––1b„   ¹¹y×Êìçç7`À€[·nu­ŒóçÏ_¿~ÝÒÒ²«ù¼¼¼ ðòåË®ƒÁ`0ÿ:pP ƒùÁÃÃ3qâDΔ’’áJäJérþžSm»uëÖ­[·®–âgø{ƃÁ`0[1˜ï³páÂÝ»w3™Ì½{÷ÚÙÙÙØØ>|-­<==ííí­­­×­[רØÈõà­[·Æobb2tèÐdzX,”¾oß¾éÓ§@DDÄøñãÇÿäÉÎËËËW®\iaa1dÈëׯsËb±Nœ81vìXccãAƒmÙ²¥ººš+Ï;wFmjj:cÆŒ_tL]½zõêÕ«àÙ³gHÚÐÐÐö2ߺukܸqæææ}ûö½té¹ýôéÓš5kìííõõõû÷ïäÈÎ7ׯ_5j“É|öìzÜÍÍ-33³½ZjjjFŒñèÑ£ÈÈHggg“w/_¾}:…BéÙ³§–– 0€ó©Y³f€ÝòåËûõ뎎Ž,‹ ˆeË–€¨¨¨©©©©©©——AhùkaaÁ`0$$$úõë'** ÇŽ#‹­¬¬´··ccãQ£F¡rTUUSRRÈ<»wïF…;;;‹‹‹‹ŠŠ@rrr'›,+++!!>7NWW¤¥¥‘´oÞ¼ió)¤&1ŒQ£F€‡‡A999¼¼¼ÒÒÒcÆŒ™9s&*mêÔ©äƒË–-€5kÖP(33³=z êŠ‹‹Û¬(//&Mš$***%%¥ªªºyóf‚ ØlöرcQW/_¾ÜÁÁ\\\ÐS3gÎDý !!âííMDPPlذ³ ggg¨©©A—C† QTTtqq¡Ó麺º***AÔÔÔÀðáÃõôô„……ûõë'%%›6mj¯c 455ÑðYXX€µµ5Œ?žÌ€Ê$">>ÞÌÌ •©££cjjêîî~øðaSSS:ÎËË‹ZŒ400àåå?~üâÅ‹utt(Ê‘#GȪMLLºuëÖ£G~~~]]]+++”~æÌԨŋ?ž‡‡‡Á`äåå¡»/^¼€9sæHHH(((ôíÛ—ŸŸŸJ¥>~ü˜ ‹ekkË`0@IIÉÔÔÔÜÜ<33³uÃëëëѰjjjöìÙ“J¥ZYYQ(KKK2O`` „„„¬¬ììÙ³gΜ)%%%""òöí[ræÀرc•••,''C‡%Khlltpp P(C† Y¶lêá ÆŒ#&&6þ| …bmm¾> džµk×¢Iâìì,"""--¾àäl=z4äää KWWW^^ÞåË—€¥¥%òàUVV&'OCCƒ‰‰ ÏÔ©SÇ/ ¦¦¦Ó§Oos’ÄÅÅ1 :nkk;bÄUUUôKÒØØˆ2ܽ{.\(,,¬¢¢âääÄÃÃC§Óýýý[—V^^naa¡¤¤„¾›¦¦¦UUUAlذFŒA£ÑŒmllPÃɦáëë+,,¬¤¤4oÞ¼éÓ§‹ŠŠJJJFFF~ÿGäÿ—ªªª_ˆý5.ßáµó¸wW·»#R2‹mñ Où¹ÇßG¦º®<ÝAžÕ··yø[¤mnaÎ^wù”çë?Ð3,{î†+G/¿ø-¥åUL_uþÁóˆ? ùŸáMh’ëÊó )y]-ÈßHPPùS†BÌ_Á¯+„h‡V„iiiüüü ..JDSSS÷îÝ &&=âëë Ë–-# Y±b\½z]¢7ôœkYâ‹BS¦Lijj""))‰——WNNŽÌƒV«HÿAìÙ³F. ùùùUUUÑš¾©©ÉÍÍ ûs !A±±±°hÑ¢AMvqqA’qÿþýëׯQVVvæÌ2½¥¥ÅÐÐB¡”——£¤ <þœ³»¶mÛÖf]H!DJx}}=AÍÍÍAxyy€»»;™sæÌ™€´‚ P\œ)S¦p–ÖI…éØaaaduH!€Áƒ×ÕÕ!ÁÄÅÅ…„„jkkÛ”© Û·oG—aaaHßkS!DÌŸ?""¾YÈÈÈhhhp¦¸¹¹Q©Tr†744 5•TcLLL@QQ½;@MÈËËtpp 5"¤lÌ›7]"…õz̪¤>IÄ;wàøñãLãÇ©¥¥¥!ŘT[ZZôôô””” PJFF•J%3vËQ£F¡A¯¯¯Gß»—/_¢<{÷î€ . K‹5pà@ …BöÞ˜1c@RRòÇA°Ùì &p>’ššJ£ÑôôôÊÊÊP7"õ¯c…ÄÄÄfŽÆ‚ó=Îùóçàüùóè288éØíõ•½½=•J}úô)Ù3¨ÆƒrŽìÙ³‡Ífqÿþ}ø{gÅöð³½,Kw/Ý"¥ˆ­Ø­ØØÝÝÝ…Ý­€]Ø ˆ  Hwwwîîüþ¸8ŽKˆñž¿÷Þ|?~ü윹}ï.sæœ{.@¿~ýZ+ÙœïÝ»G"…Åb=|øI6nÜkÖ¬ÁW‘¦¦¦¾¾~QQ’ Ÿ‚Þ½{cÿaþ~…PÂtŽIŸuºßmñðÕ'à¹î:áõsÙ_y <×k÷ß·‘FÎj^·U¿¥µ¥åÕÀsužrðo™ºúFà¹v»»4{N=Ñ=êtPx2ð\m¹ñ7´üïaß™§Às½ó4øO7ä¿Q!$]FIHÚ—Ë}ýúµ‚‚èèèôìÙ<<<уÉdŽ;ðÀƒ‡¦ÓéÄà%èITÄ5´Eºvízùòe&“ †††Ý»wÏÏÏG1î9¢®®ŽžÛ+W®ÔÒÒº{÷.zb¾qãF]]ÝâÅ‹UUUQÛÎ;׫W¯¿zˆÐSïŽ;PË`øðáh;œ¬¬ì¬Y³p9NïÑ£öE=ùpá2¥Àœ9s ..®UUUÝÝÝ‘½…Á` a—X»v-ž=I·gØÛÉ'P(TÂÔÔôÞ½{5iРAÕÕÕYYY-–páÂYYYÜ]ÓÆÆæ·ïQVVvéÒ%ggç®]»" ›Í4hPUU•¯¯/žŒB¡Ü¸qÙ»PΞ=[SS³qãFôŽ(&&&2b'Nܱc•J€=zèëëÿ¨ò… ¨Tê®]»Ð¥ŽŽÎÛ·o) žàÅ‹qqq .TVVFgmmœŸŸ'333óðð@“.&&†^%àñl>¬««‹È¥R©#FŒÀ0ìéÓ§ÄÆ‰ ÷÷è 8dNAö¿“ÌÌLiiéÖîîÝ»w÷îÝUUUÊÊÊ\.·yÐC?1Æw©©©)//çr¹"Ãnooß¿ÿ¿mÚhù_75999-Òw´G±íŒÄW <ÏÑÑ‘¨åŠ@\“í¡¡¡¡¬¬ÌÀÀà»-‰ŽŽÆý€ÅbõèÑ9—¶Zr555x ¥¥¥Í@r‘¾ 9 b?‡È˜8qâºuëV¯^ghhxâÄ >Ÿ?wîÜó"Ûr‹ßñ´´´ÊÊJ))©Ö:òCß—¡R©T*/ iDDñµÚœ¬¡¡ñ‹u‘ü5µ t:•Éhõù­¸´JN†ÛÎÒ„B¬¼²FZ’ÓüTÕÔÓiT6‹ÑZöòÊZ q6•Ji£ŠÒòjI®ÖÞ—G°¤¼ZA¶½Q”…B¬´¼ºí.—UÔpÅÙôv·á¯£ª¦žÍbˆ´„N£¶¦ ––WKIpZáòÊZI.»Å¹k‘ºúF¾@Èå°pIC#¿®¾Q’+ÖbúêšúºúÆö/§6à „Å¥Uò2Üv®„ü¢ ) ±×†a%eÕ¿¥UˆÚº†Šª:%yÉï¶=ÿH…„ä/AMM­¶¶öÇ¿·Xdy zÐ!~¥­­ È’YTT¤¯¯ÿwvYII))) ðæœîÞ½»fÍšáÇŸ9s=é®]»E¾ùp8iii%%¥v¤4ûÛÁ§æ·—Œ,ÀÆ C[õ~4ã­[·Ðâù‹`2™mwYJ·mÛ†œ«Û *YùP_:vìˆï{ü Ðþ¢NHäÑ£GT*ÕÁÁáÈ‘#ÀÜÜüÑ£G¸©ȈÚâw\VV¶5mð/ éÁƒ[k-Éod÷É'G.½,*­Â0LÙf1 ëÛñôÎ)x‚ôìâÙë.û|ˆ£P ‡ƒñå3ˆ°å•µ‹·Þxâý¹¨´JZ’Ó·«ÙñmÛP«â’sn¾þ!,¹º¦^YAjñÔ>«f@O½pû±Gî“Ò ¨TŠ>OiñÔ>s&ô f÷x´éн¤ô) ±IÃ;;ÙŠ”ßÈl:tÿúý÷Yy¥1¦CG½Û&ê(Cë…Â=§ž8÷¼¸´JMYf¦K·M‹†´¡í|üœ²bçͰèôªšzyn¯.&n›Æ++|ýŽ”UÔ¬ØuóáËOE¥Uâ–Ë`»ýkÇÈH‰7oê¸E§_¼¼qdöÞß9Öuò²sß„‡>Þ¢£ÙôÖæÂM¿%ÛÜm7ӥɰ_US¯×m•¥îÃs‹ðŒ±I9sÖ_ Md2è{t8¿wš”D“¶ïÌÓǽ¼ÝWY›ó$3·dÑ–Þïc+ªje¥ÅgºtÛ¶l8ñ-À뀘eÛ="㳤%9®£÷¯Ûšº;|ö±¢’ÊGçÏÝpõñ›ðšÚ†nv†×ÏR”“ÜpàîÉëÞµu¦úª—Ìèô¥öÚº†½§Ÿº? LLËiIδ1]·/Ác Be›Åšjr!6§fÄœã¾qÙ‡ÄØ¢o¼ütøÂËÀ°ä†F>“Aïjkptó}Õ[[SÛ°zÏ­+w*«ë˜ ú€<ŽÎÁÕÂÈ´å;þœ‘‘"èü?÷ƒƒö»“Bò[°³ÔqlÇå°8l¦Ë`;—Áv½Mñ»¹åÖƒ·”UÔlZ4¤W“ço#GÌ9†ß­­k°²õÖ“à…®½_¼dZßG¯Ãì‡o¯oà·XWlRŽÕÀÍaÉó'õrÛ4¾³µÞºýwß'†aÎSn=òP_[éàz—õóc6wÃÕÅ[¿žàâù8hüâÓ5u ëæ3Ðöúƒs7\©bÈŒ#{O?ÞÏúá¹E»VŽŠˆÍì4xKfn[»6¼¿ë„—ë(Ç-K†‰±[ܬ۷µÄ÷_„:ŽÚ•œQ°hj·Mã{;šÞôúhÞoCaIS¬¯†F¾Ý°ínú èaqlëÄÉ#:{>:rIôm†aSW^¸û,dúX§ïjƒ`k©SVQóøM8.yô:¼ª¦þÎÓ¯»‚ßÄäUØYêà’¸ä\Û¡Û¨TÊöe#l-´ï< ™²ü~·¤¬º¢ª¶ª¦é$žü¢ ‹þ›žúDLÙåè– ºw8tþ±üÇoÂN=¬ÇSÚµr”ª’´ÛÅ—Û>j­ÁÅ¥U‰iùvöGÄe­™;й›ùÛ ø± N œvøÊÝ€y{ΛÔ3&)§ÏÄýx®Þ{àÜóîöFöN»°wš…±Æ¡ó/¶{4Õ¡£Þ§¨ô÷¡_ÿDæ–?|õÉÂX£¹6X^Y;bÎq:ºݘn³çLèá7lÖцƖWæª=·Ž_}³tz¿g——Úà’šYXTZõeœÃ:Ø‘˜–¿hjŸ#›Ç÷éjzûi°¹ó†ü¢Š‹BCZQùÍΔ’ʂ/éó ËN;\]SïqtÎÃs‹†ö±òþ‹¯Š>¹ôÊe°ÝÃs‹¶.‘j=xKkuýøÓnHHþ~=Ê(1Î'ö%®`ll,.AÇ|¡Sï°/!7»víŠG& …~~~Ä,ÒÒÒ(V!Ššˆ” &ëBq2ñS%,XÓ¦MC1èkkkQà–ýû÷£ÙÙÙ4MAA!..ð‚‚0QF?~lbbríÚµÖº,eíÔÓÓ+..xø{">€Ž;¢è¦åååëׯ_´h†aèÃ={öàƒƒŽÓøðá’ Ð ïß 1‡©ëÛ·o‹ÍC^…(^eÔÙÙ¹´´Iø|þëׯSRRðK:®¬¬œ——' QhÍúúzEEE6›bQÆÇÇ[ZZ¢‰2ZXXH¬E‰¸ˆ"7úûû·Ør2tÉ’%|>5ÅGù-QF`Ó¦M((†aUUUè²C‡bbbÍG’Ãáhhhàr1 ‹‰‰ÁOAÖ¶ 6s!LÔ Ãй”={ö¬©©©¯¯ÇåD8ÇG‹ÇÛÛéáÄ(£ÆÆÆl6 ‹aXNNß kee•€aXTT”¼¼<‹ÅÂÉ@QF'Mš„Mmhhxôè>qÈü˜‘ñ5º=Úw7mÚ4t‰Àhhh¤§§c–™™‰c€ïE%~µóòò`ìØ±èEjéÚµë‚ V­ZµmÛ¶ëׯ£ƒš# ­­­©Tê‰'ÐTfggwìØð(¦(Ê(þ•GtêÔI\\ktP§‹‹KCCúµÁ×*£A£ÑÑgeTBB‚˜&##€úßä/2ªÛm•ºýR¡„éà¹ÎßÔô‹- FìžktBÓÊß~ìð\‰§ ɉ«oZ¬eà´ÃÀsõNÀ%>bó‹Ê1 ó||Ýåó†=×P´§æ6ý¬Þs x®¾qèræšKÀs½õä#^iHDjRZ>ö%Ê(]w~·°¤RÌh–Ší’ÖÜuô.ÔàºúF4}f}×ÏU³óòÔ̦ÆE[n£¼æä—Wà%T×ÔK™ÏÕï¾]Þy,2•G/¿žëyÏΣ …Ÿc¿9MdÒÒ³Às ‰HE—"QF5;/·°©y9 |§•\“Ùx›1 Ûqìð\ljùI欇/ð\o<ø@ªÚ-ÑpX†>ßô žëõ–bÛÞxðx®‡Î¿À%×￞늞í\'ÿÈ(£$$9ÎÎÎË—/÷÷÷×ÒÒêÔ©Š+èääD4Mœ8±²²ROOOMM =ȶ‡-[¶tëÖíâÅ‹RRR¦¦¦ÒÒÒîîîÓ§O_´¨É5EUUu÷îÝ………FFFºººšššÅÅÅÄSÈÀÏÏ/&&†²m¤¤¤ ”””¤¥¥¥¤¤„u$2dȉ'~úôICCCWWW^^~×®](ÆÌœ9s¤¤¤Ö¬Ycfffbb2dÈ\Gý½Œ;væÌ™ÏŸ?WWW·³³spp——ïÝ»7n ¥Ñh...yyyÚÚÚ***gΜ&“¹sçÎúúz---CCCS(”~Nf€Ü<*ÉKëÛO|øÔ‚§_ |ñ6ÒÊT«K§¯Û ºÛ)ÊIÀå;þ°qáü–Œ”øŒ±Ýøáó·‘›”Ÿ’çÜÍÜ@»ÉÿÓ@[ùðÆqÄ*<ÀìñÝqIÏÎÆtõç¶âí\9ÒÔ )þ™š²ÌÀž•Õu-vÁ70.=»xòˆÎÄ­wK¦õe2è¸íî‰O…B™?©'ž@GS÷ŠDì?ûìÐùó'÷:ºeB;'BSUÎÊTëmP\uM=| O©¨ª4¼s}·/=óÐÓR$zEÚYêlY2 }¦Ñ¨½M1 ËÎkÙbÿÔ7BEQz¤ó×àÆÖæ<]-EürÚ§ÑlÐgy®µ™V^a9_ЖßÍSóYL:P©dy>¾m"O]ŸHÏjòêWQ”&:sĘz<%<êàÞ–r2Ü[O‚ù$ñ|Äf1F}i …ÒÁè›ýÆÆÐZHUe©¸ä\¢ùñ6(>%£pÒˆÎx›`ÑÔ>lƒh­ý!w±Çã Úº‘[©TÊÌq_ƒ{õu2£P(Â~O€ºÿCÈ=„$$ßgéÒ¥D?5j”’’1ö ÍŠ+ˆOl9rä«W¯)JŸ>}zôèAŒñèææfll(..ŽN­PRRZ³f n‘@ >\NN*999ooïÛ·oúô);;{ìØ±]ºt‰™±råJ›/^9::Ž3E ÄWWW:ŽÎpo‘+V`߆ ¹uëÖ±cÇÂÃÃûôéÓb®k×®9Òßß?++kìØ±...èì;mmí¨¨¨3gΤ¤¤èèè >\VVVWWß·6hÐ ƒAŒÂ`0Ö¯_ollÜbE²²²k×®mîAG¡PΞ=;aÂt \ÿþý{÷îMœ— .X[[‡„„HKK: g̘¡££óäÉ“ÊÊÊnݺ¹¸¸øúú*++ã‡1Lš4©C‡Ȱ‰#&&¶~ýz‘X‹}ûömhhh-Šººz@@€§§gHHÇräHTT”‘‘Ñ AƒˆgB°X¬xyy}øð!%%…Íf1ÂÙÙ7ùŽ7NWW—¸?PQQqõêÕŽŽŽ¸d×®]NNNÞÞÞNNN£G Çgüøñúúúx!è×WJ@JJjíÚµxÃF%!!ñéÓ'”¦¾¾þâÅ‹óæÍÛ¾};~¢ KKËÏŸ?߸q#::ºªªjÆŒÎÎÎÄø½–––+W® ;kÖ¬æ;qÄÅŃƒƒOž<™ššjnnŽZÒ¯_¿††###bÊ 6[Ïž=£££oܸ_RRbaaaccƒSAò·žæqPDŠªZÀ0,%£F£ÚÿúöD(Ä ;¿¬yQéYE|PŸ×ò{¨„Ô<.‡%²Wªƒ‘:$¦æÃ-Tä)_¤yIéùT*eðt7¢F£¶¦!DõT · ¼ÅF€¥‰&Q(%!¦©*›šUÔÈ0è´¤´|ynóƒ8Ñ Ù/ü¢Ô•eÜ6ÿ¡¹ÒÛ2,:ýÍû˜!½­^ùG³YŒíËG\»ÿþ‰÷çÁ½,£²3sKVÌü&€œHp9i.TV·°q½¦¶!'¿¬‹µ^QLDK“ábVYUÛFg‰$!ÎnQR][Kù¯7áÁ©y…å5µ iYE|~“ÂÉdÐÇ ¶;~õÍ ¿¨A=-2rŠ?|Jélo‰lÎçØÌÇoÂsòKKËkÐÜ᥉°såÈ!3Ž8ŽÞÕ¿»ù¼‰=ôè€v*¢µgaüÍŒKˆ³µÔäÓòëø"+°=tµ1ÞÏúþ‹PžãÊéc»Î›ÔK]¹)nyRz•Bé=á›7õ4*¥íü†TIH¾n|Ã8p þÄŒ011Ù¿¿H2íŽF›7orDp¹ÜÝ»w‹$0`~"‚J¥Ž;é­Ñ½{wâó¢¥¥%þLŒZ‹Ÿ×"+W®‘ˆ‰‰!Ï϶6lذaÚËÕÕÕEL=D£hÏž=ÑÑŽ8 eÇŽ­ÕÂf³Ûh·nÝD¢öa2™K–,i.iC¯^½ˆjö˜1cšëÏ4­y#œœœœœÚ"YYY⤋Œvó®õë×OD€ç‚J¥N˜0a„–_u£÷ZDGG§ùŒ#Z4_Oœ8QD"//¿mÛ6h6›=mÚ4¢éµ¹VJJ 9E·„„Ć ÚH0hРÖ6é >|øðáD —ËmßÈÙÙ™Xä‹,RHó_â$&''‡„„¸ººâ#‹Åruu]°`AUUU}Dަ-¢««Û|RfΜÙö¸ijjŠô´k×®øÁ•8[¶l‘ÈËË/^¼HþŸ âyÔ7ðëꕤz8|ó­Wdù¡¤¼ÄØ-Ç--¯'D¡D U­‘χ/Zh¡G ¢²–J¡t·ÿæ]Cw{#3Ã8eGŒÅ€cÊ”–WG¬…v …˜@ dÐi%åÕHïj SµîöF×î¿ßxðÞîU£Úß°¡}¬¶yøÄ;bHo«×þÑŽô5Td;™k?ó€g¾0”`­mRö°–5—–WcÖöð6+í7»ûeäw»'#§¸«Ž¦‚´$G$bë(ÇãWßÜxðaPO‹[O‚1 ›8¼eÿ¡s]qþÚý÷ú<¥NxRbÍ÷éÝÅ$òùöƒçŸ_¿ÿá©OD?'³g±Y 4ãÍW&GŒ%b|¾à'B …r÷Ô|ÏÇ]y½ûä·‹¯.˜>f -”WÖ2t‘/Tc+Sͭ埩’üU¨¨¨°X,OOÏáÇwéÒENN.##cýúõB¡ð‡â©’´›ÅPQ”f1éíÔj4Td §%ã!hªÊFÄeÕÔ6pľ>¸#« >OT•d +¯­ð0Ú Iéiþß~²òJ@]¹…sz´Ôä =û›Àņeç—j¨È"mJCE65³P(ÄÚ0µÞ9åStúÞÓO:ê¶'¢ ÂÊTKCEö©ÏçÊêºÀ°ä+G@ÿîæ[<ŒJÈ~ê¡('Ù¹£ÞÏõZEQšA§å–ÿ\öß²žiYE>«q•>".+42 O`mÎ33P{ø*¬²ºÎóq¬´xÿîæ-uÿEèµûïgï~jÇddë;våu@Hbµëj)žÜ>y犑³×]¹ý4øÄÕ7Ëg:kªÉ@Z–h¨ê¬ÜU%é—R«jÚŠN¡PÆ ±7ÄÎû}ìèù'\W\ÜËRŒÍÔÑTøð)iûòÿG•ü=üWúIBBBBBò÷Ãáp®_¿.%%5tèPGKKëñãÇÛ·oGq€HHˆˆ±Å•øî¬vbeª™–UD|doe)Y ¿ñÅ_C&–WÖ–WÖ@G3- Ãn? &f¹tû…BéÕÅŒuUtÚó·Q‚/›ÖáÅ[ï¾mÜ}ò½¶|ÃõûïëêÑg¾@øàå'“nnÔ‚Qjm >|VRVÝ۱ɇßÜP½¾ÿèuž@ ЏüqĘwNÎcNY~>9½—WV×µuH«¬¼Ò£—^ñÂÞ]L ÷àñ(0 $qP/‹Ÿ>¶ŽJ¥ë©Æ$æÄ$~ —][×€GOý‰HårX]m ðqCfa"SF9ÖÖ5ì?ó,42mÌ@ÛÖÆ ‰LCƒƒŸQQRÖ®(Ð2R⛀¤ô°2Ñ€Ûßθ—÷çÂ’Ê>„`¼DОØÈ¸¯¡­ï=m-LhÏÎÆCz[ÕÖ5 %–&šB!öàå§¿mÌÿ8¤BHBBBBò@RRÒÝÝ}Ó¦Mº!?̨Q£233?|øpóæÍK—.}øð!++«m¯W’ÿ,:šŠ ügŸ§e…´OÁ€-K†Q(”ÑóO¾òF‡‰ŠJßxð^`+10–Ït®oàšæ’˜–UtᦟYßõÞïc`ÝüÁ :mÁ¦k—ïøgç•FÆgM[uámPü„¡öhß œ wXߎ©™…ÓW_ŒMÊ É4ÝíM@Ì·å÷“g/Þêîþ0°´¼º‘/ˆKÎ=xž)›€ç)_ùGG'dO^v6-«Èu”c‹G)v0ÒÞÏ:,:}Â’3Ÿ¢Òó Ë=M]yAŒÍܺ´É{Å,g˜½îÊg!™¹%O¼?;ŽÞµ÷ôS‘¢ŒtUÎïVVQ3jÞ \íïzH³óòϱ­Æ^ÚÇ öœz"/ÃEÚ©Mmy®ÛÅ—|Á°6ýE¿ËŠYΆ˜sìu@LFN±Ç£ «›ozý†ŠÚ‰±žjUMý‘K¯jjâSòÏ8-’fâ0ºë¤úÜzQ*pú†OfnIIYõ¾3OÑñ-’™[2|ö±€Ä†F~euÝ©>`k¡¦j£ØDÄeº,<™–WX~ÓëãäeçØ,>ã"t¶Ö“’»tÇÿöÓà¤ô‚Ý'Ÿ¸,<%FðÅÝqüñžSOr Ê0 Éxå­ +¡­¡kæc3箿rçYHyem#_“˜³÷ôSâû…¤Ë( É? …2nܸ_/çÀ`0ìíííííÿtCHþßY1Ëùu@ôºýwÖí¿3²§;'ç·'—Mík‡f.Ür£ï¤ YQ$ÄÙ GrY<µObZþ…›~Ž£›6»:tÔs´1=-ŇçM[uqêÊ xúY㺻múúí;¹crzvñ•»W±Æë«ˆ!må$_X2uå… KÎjƒN»¸¿-«ø#³WîºÕwÒtÙÏÉlßÚV#ŸÛíJ¡€Ç£ Ñt4<ÍÅã‚ØZèß:qùNÏÑóN ‰º²Ì¡ .Í‹;ÈÖ?8áøÕ7K·{œÚ1Ðáumläëno$É«¨ªÐÃÙ¾¨TJ¿næ7|ç°Z³Yµ“ C¢â³÷Ÿ}ÖgbS`3µÝ;ü\i¨yÄCä[’Qr`ÝØ°èôå;=Wí¹%»ÙNÙg„²‚”s7ó'ÞŸµ5ˆájE?ÔÁãQÐó·‘š—S©Y)ñÝ«F­Ú}«ÅÆp9¬àˆTÇÑ»ð5ÜyÜ+ÔkKsm„„HÏñû|>Ä&úîÕ#œ‘Hò‚¨’{IHHHHHHHHHíÛ¸h© ¶MBjžÏ‡Ø.ôImðß¹‡„„„„„„„„„êëÏï™:¸ÝGPüg¹zï=ÌëôË%‘ü_@*„$$$$$$$$$$ 'ÃÞÏúO·âÀê9æOê©¢(ý§Bò{ ]FIHHþ0 ==½¡¡á·—\[[[UUõ§û׆a%%%¿^ ÉŸEBœMjƒÿ&H…„äû¼xñÂËËëO·â+îîî¡¡¡º!¿‡Gñx¼'Nüö’»t颦öÿ²äìÙ³rrržžžº!$$$$$$$$_!]FIH¾CCCàAƒ„BaUU•˜XSÈìúúz‹õk·>ŸO¥R©Ô¯¯o'L˜`mmò§‡ç‡ihh`2™D +~{] ±±ñO÷¸ >ŸÿOBBBBBBBòi!$!ùL&sõêÕ+V¬ÀµÁëׯ³Ùì;wîü µ …B‡3dÈ¢ÐÜÜ|æÌ™óæÍûÓcóñX¬]»výé†B’ö°cÇâe}}=ÔÕÕý UcÖØØ(R—´´ôÙ³gÿô¨ü h£àß3t$$$$$$$$$ß…TIH¾‡‡GccãäÉ“Á¥K—Þ¾} ÞÞÞUUU eòäɸñ066öõë× úúú½zõ255Å ùðáChhè‚ |||îܹ£©©¹jÕ* …‚aØÛ·oýüürssUUU{ôèáè舲øøøÄÆÆ@vvöéÓ§ÀÁÁÁ¢¡¡áôéÓ¦¦¦½zõÂËohhxþüyxxxii©™™Yß¾}544ð»Ÿ>}z÷îݼyóJKKïß¿kii9vìX¼å"‚'NtîÜÙÚÚúÙ³goÞ¼‘––ž4iÇ€ÀÀÀÛ·oKII 0 S§N"y?}úäë뛚šjbbÒ¯_?$÷ôôD>®¡¡¡§OŸ¦P(C‡UVVÆ3ÖÕÕÝ»wïãÇ#GŽTRR)ÙÏÏ/888--ÍÀÀ k×®–––" BCC_¿~]PPеkסC‡¶=­îîîB¡pâĉ¸$--íÞ½{ƒÖ××G’‚‚ww÷„„™ÁƒÛÛÛKxõêUPPPqq±¥¥åàÁƒeee‰wKJJ>|øùóg==½Q£Fýµk”„„„„„„„äçÀHHþxzzº»»»»»ûùùýDv§¤¤„aXii)q/"55%sssc0;vär¹ ãÈ‘#x! ,€ .P(”±²²²±±±cÇŽ ##£¯¯6×­Zµ e>|¸H][¶lÁ0,''†Žž””dmm ,‹Ëå—˽též`ýúõpÿþ}EEEF§Ó S§NUUU-v¹¬¬ .\8zôhT,HHH„‡‡¯^½šB¡°Ùl ÓéîîîÄŒëÖ­£R©²²²VVVl6›ÃáܸqÝj®à½|ùÃ0ä|;wî\+++@%«««'%%áÅVTTŒ;¨TªŒŒ P(”¥K— …B<ÍñãÇi4ÞÚ¡C‡êêꊉ‰µ6­:::DÉÕ«Wàĉè244TRRRBBÂÎÎNUU"##Ñ­ÊÊÊ‘#G¢vš™™Ñh455µ   ¼¨„„]]]¼1JJJ&L€k×®ýöåMBBòwR^^îþ…ˆˆˆ?ۘ’ʻÏBr ÊÚHã÷1Þû}ÌŸmg{xâýÙëMøŸnÉßJ`Xò3ß?ü%j‘ϱWïÔÔÖÿ¥µ<óxô:ìOõÑßßÿ)#B’ÿ¿K!Ä0¬²²òèÑ£pæÌ™ÒÒÒŠŠ $÷îŒ5ª¦¦ð²²2GGG*•Óôg)„,kÅŠ¹¹¹þþþ†UUU1oU^^žFËÌÌÄ0¬¾¾¾¨¨ºuëVZZZZZÊçó±f ¡P(´²²b0—/_nll …oß¾•——g0¸N…B*•ºtéÒüüüêêêaÆÀáÇ[ì2R©Tª¡¡áÇÁöíÛ@ZZZ\\üÖ­[~~~L&S]]½±±åºuëRí$//ÏÄÄD\\}Šl¿¢0€Ãádee¡A~öìYQQºµbÅ 8{ö,º —055HÒ§O8pà@]]]RRÒ˜1cPI…„äŸÎÿ•Bxýþ{๻òº4ºÝVÉ[-À/·{´xë¶‹}çºâ|XtúßÙÍÎËUl—ü5’üqì†mžë_Z…P(\²Í}Ûч?”kÎú+Àsý«¿Ú]W*Z/úK«h¢BH•!!ù1¸\.‡Ã‡#---!!ä[¶la³ÙgΜAN˜RRR3fÌ …—/_&f6lØþýû•••»téâââwïÞíÚµ+º«¤¤4nÜ8@L&SZZètº´´´´´4²€‰ðàÁƒ°°°iÓ¦M™2…N§S(''§]»v566>|˜˜rÙ²e‡RTTäp8(²Ëû÷ïÛ謪ªª··· •J]½zµ´´tEE…——×èÑ£étz×®]ûö훕••™™‰ÒoÞ¼YIIéðáÃȉÌbÕÕÕ7oÞD#††‹ÅbIKKKIIëêß¿ÿ;wôôôètúæÍ›%$$>|ø€neee?ÞÜÜüðáÃhðutt®_¿ûöíCiŽ;&8`aaA§Óû÷ïÿöí[4z?M^^ž˜˜˜¢¢"P(ggg999(..>vìXŸ>}fΜ‰RZXXôêÕ+:::((bbb^½zÕ£GåË—³X,]]]Òk”„„ä#b»Nx¹ôª´¼IÊ+k_øE•”U“Ý~|ùŽÿËwQº½ÿ]’Ò ¼ßÇ …ØŸnÈŸ¤¬¢æ…_¾VŽÂ’J·‹/÷~ŠKò‹*^¾‹ª©ýý§·AD\æûФ¿³Æ‚TIH~aaaªªª?~|þtšBbb"1Ù²eËZÌ. ãããÑé È@×N2bÄ¢pðàÁI:;;ãŸõôô °°°’MMM‘«$0 uuuƒÑ½{w<ÚRˆ ©­­‹‹ÓÔÔôññÁ9Á&$$|·={öd0è3“ÉÔÔÔÄÛÖØØ(ÒASSSmm혘4ÎQQQ"400ÐÔÔüé €÷êÕ ™qbbbêëëŸPPP€/ÓÓ¯_?< •J%Ž ÉJ¥<>¿øÁÙE2RâHòÔ'ÂyÊÁ;Ï‚‰ÉVÍpùÀ ×QŽº½ÿ]¶¸=è5a_nAÙŸnÈŸä‰÷gç)ï=ÿ¥S—å$ïŸYøàì"\r宿Éý>Æÿ}™µör¯ ûþÎ2¨ Éo ¼¼¼¤¤¤¤¤¤ÿþ"·Ð†7œæ[?}ú´}ûö'Ožüô‰yÉÉÉ@ !JJJ4-##£µ\ ƒF£ýбxÈî×\‚T²´´4 ƒƒ›‚H´•ö &&†H‹UUÕÔÔÔ¼¼þüþýû ôäÉ“þýû£žnÞ¼yÍš5ÄôT*YDÅÅÅQóþ†a'!!ù7ñ& ÆãqPxLFC_§4ÓÅ©÷ÄŸc3\z¡¥&7Ã¥[ó„Bìàùç¯ýcŠËªºÛm\8D$ÁªÝ· K*/íŸÎ§®8ŸœQç<Þz¿¥P(×»¨*I¿ ˆ9réÕæÅC­ÍyxF/ïÏ÷ž‡|ŽÍcYk,šÚGŸ÷5TØ’mîò²kç<~õÍÃWa üžÆë f1¿>j>ó¸õ$øsl¦@ Ô×Vš7±gÏÎÆí™Ü‚²ó7ýÞÅg番(Jwµ1X9»?—ÓôÇÅ70îð…—§vL~æqìÊk q¶Ç±¹êÊ2ðèuØ•»Éé²Ò\E9  P(»VŽÔÖPxô:ì¼§ßõc ´¿Æ»·è´ž–âöåM>)“–žíl­ï:ªËÞÓOŸùF²˜ô)#»Lë„aØé¾WîúÓé´~Nfkç ¢Ó¾yá{á¦ßS߈„”<}måþÝÍgŒuÂCÊ]½ðèuøíóžùF^ºý.9£°£™Ö¦EC4Uå <&cïé§>%À¼×ÄØ %y©#›Ç@Mmá /^ûGç–›¨Í›Ø³Eõ>-«hñV÷‹†ÈËpwü!,™§.?¤·å¬qÝñ4Uµ—nû¿òNÉ(”•·6ã­7PYáëVÿÄ#_Æ&犋±œ»™¯šÝ_œÃ€Úº·‹¯^¾‹ÊÉ/3ÑW;±Gß®fx® ð”³¾á1’\1;KÕsà¶hĉ«ožúFä”w±ÖÛ¸h´B#_0må…¤ô8ãîûÊ?šB¡Úࢢ(Ü}òèuxD\¦´$ÇÒDsÉ´¾Zjr­•6uåY‰}kÇ—V-Ür=&1vŸ|rùŽ?F=¿gª›ÙZÞ»ÏBNÝð),®´·Ò]0¥—¹¡:|ŠJßtøþø!öã‡ÚÛt®ÃljÂÀÀ@06nïßÚ_GYYY\\<>>žÅbG€¨ 6ºö ­­ _úÆå–óBˆˆËzü&<3§„X×í§ÁÏß~ÝmqïEèÝç!]Çì>xî¹”„XxLÆŒ5—_x9|ö±…[®‹±™™9%›ÝŸ¾ê"žE(ÄFÌ9>cÍ¥ŠÊÚ¾NfE%•³Ö^»àž øsêÝg!ëöß4Ý-9£N£^¸ég3d[qiÔÕ7Æ%çVTÕ@Rz~\rnfn `6dæ‘mGòÔå÷²Ì/ªX¹ûV‹Ã•WXþèuØYwßÎ}ã4Tdýƒf¯»²Š¾ßäƒ+wÝlltµ1`1éG/¿ê4dkuM=ºûÊ?ÚiÌî„Ôü=,ŒtUŽ^~õ.8áË;¾éÐ= Ù¡}¬ŠK«–n÷À˼pÓ¯ëè]ï>&8v2PQ”:|á¥å€ÍYy¥x‚é«/.Ø|=$"MVZü­wÖƒ¶d–Ÿ“_F\œh¶1 ›¶ê¨y'ü>Ækk(ÔÖ5¿òڼ߆WþÑ­u÷YÈŸÏÀRó Š+ +¯$.9715WÔ›³fïíÑóO B6‹qþæ[ÇQ»‚ÂS@EQêùÛÈ­G¿zíñ(¨¾^ÔÛ«¢ª6.9·¶®à .97.97¿èë îú†Fç)Wì¼I¥R2rJ¶y8zÞIböù›®™2#§¤OWS@¸|§gÏq{!ü^þTd’¿“ßeðGÀÂ… ‰i6nÜ7n$ ËËËñsP”Ñàà`bºsÿþý貸¸¸sçÎpçÎ<¬¬¬´´4¾ke4!!N§ëèè x˜†•••ÙÚÚR©ÔÏŸ?# ²:¾~ýM$:æèèØb—‘*Õ¯_?¢ÐÒÒ’Åb%K–,€> ËéÓ§À©S§ˆi ëë›7ÇÅÅ5/EÅÑ©S'qqqô¹¾¾žÇã±X¬€€$¨®3gÎ ÉÅ‹`ìØ±è²¶¶ ÑF”ÑqãÆ€§§'º|üø1ÒèP”Q>ŸOîE•î0ïmP’œó| }úô¥K—ZZZ6·#õìÙ³¬¬ÌÔÔtâĉnnnÍ Ñ××_»vmJJŠ¥¥¥‹‹ËÔ©SÍÍ̓ƒƒ7nÜØ¡CøÙ¾}»ººúܹsׯ_¿råÊ>}ú¨ªªâ¶2]]]--­/^ôìÙsèС>>>í)–Éd¢Ž÷êÕkàÀèÄ .ôïß©…0vìX33³›7ovêÔiæÌ™&&&Ÿ>}êÖ­[Å.Z´ˆF£Mž{öìñãÇ;í Çg0ÁÁÁè8;‡ãàà€âClÛ¶ÍÆÆæüùó¡¡¡4ÍÖÖöôéÓ( ÂÐÐÐÆÆFähø®]»š››·Øe‹Õ¥KtR<Ž­­-Ú°‡cdddkk+//.UTT¢¢¢¶mÛxñâE6›mddtðàÁŽ›ösÓéôû÷ï¯Zµ***JMM …]QSS³±±A~˜8ÖÖÖÄP4C‡ ÙµkWTTTtt´‰‰ÉÌ™3çÏŸ{zp8œwïÞmذáÝ»wAAAC† Ù´iÓÕ«Wñȥͱ··öìÙ¾}û:tèàååejj§¥¥222W®\¹téÒÅ‹9Ž¥¥åÚµkmmmñ¡‹ŒŒÜ²eKTT”´´t‡V¯^ï`\½zµ¢¢¢‡‡‡¿¿§Nž?®££GFš!!!i›¼Âòϱ™ùEå5µ µuµuMÁñS2  ³µ1±†Ê7!»R3‹tšMm\"É“”+ÿÖkôG‰NÈVV2ÔQ& mô¯ÝkA Æf(ÉÝõ ª$ %ßžWŸ•_TQ[× ñÞµ¾@ø1<%§ ¬¤¬*øs*Ô}ëžçÜ훿hJòRð& fÂÁH’’ª?çLNšKT‡ä$€§.OH@iy `–š'%ÁÙxðž ª¦R2¿QD‰%¨*É€Èá"ê(w·7ºÿ"Ôqô®¥Óû ëÛ±ídÄòÀÆB²ó¿qÑü•žž]TTZ•”VµuMã9ÓÅéÁËOGîœ7©çìñÝñ¢´5ú8šzyv±céô~#œ­q­ é0_…y¿ÅË—’ËÉ/«­kc3›/`6‹!/ÃMN/ø¡éˆNÌÖÑPYù]m ¾ KHÍïáð;wÊ4C¬¡Ùù¥²ÒâCz[ÉH‰{>:¸Þ…F£>󨨪EêÜÁc_Ù¨*Ja%Ä'çrØÌ=§žà 0 ¨T Ìß©’|wwwI¿~ýˆ‡ Ølö¶mÛZ+dîܹètuºuë&bÈÙ ¨¤¤$Ò))©æç<5Ñ"“&Mš4i’ˆ° ›Íö÷÷ž9sFD2{öìÙ³g‹´íàÁƒm ¦••Õ«W¯ˆ{{{‘.ÀéÓ§E$fffÍ'‚ˆ´´ôñãlj’%K– §ÖÖèÓ§:A‡¸SqòäÉ“'On-¯¶¶ö•+WÚ(|êÔ©È¢Øbá$$$$"ÔÖ5L]yáî³:¦¢(ÍdÐ Š+ð‡~´ñINšÛF ùEåÒ’dú]ð¼ÂrKƒj ÚöÖ"t pSReuݤ¥g¿ g1*ŠR :­´¼©RíÁýaàŠ]7ó Ë•ä%¥$ÄÊ+k¿›EI^²Ÿ“ÙËwÑcæŸУCPxÊã7á‡9-?AógÄMh啵5µ 4*õmÐ7Ö*óo³±¢€°Íð— åÉÅ¥Û=:}Ãgô¼ZjrWÎìfgØÎfKKrß%è÷1~ÆêK‰iùò2\9®ˆjÝ¿{‡77Vn8xoÏ©'ûÏ>›éÒíÈæñ(ÒÉ£ó‹w|꺷ËÂSêÊ2—Ì@&k´ß/(<W@SUÎÞJ—Íb@Aq%FEÍøiJË««kê›/9.•üµ±Üd¤8€0d1é.ƒmO]÷yó>¦oW3ÏÇ) 1ÆÌÏA§S5§ L Ь%[ Þíˆücõþ¥GBBBBBBBBÒ–n÷¸éõq÷ªQK§÷CÁ9; ÙÿÅyL^† …m>òÊËHÄ$f …ØoÔ é4ª¼ 7¿¨BDŽZ¢­¡ÐÎrf¯»üðUر­gïŽtƒkªkëÛ“7<&còòsÖf¼€;ëP—nûO[u¡í\¹eaÉ=ŒüCo? VU’^¿`ðúùƒð4*ê~àø¥ï"-Éç°xêòîmøÅ"8bÌÝ«Fm^<ôüM¿U»o žî–ì·¯.ÁE%UðÅl[Z^=hš›´$ç“×+S- Kv±ƒ˜¾‡ƒqÀõá1‹·ºŸ¾á£ +±mÙp`³;–ظpÈ¥ÛïVìº9lÖÑï=ªJÒ(¦«ç±¹z­xÊËraIYµ¬´8ü,Ò’6‹ÑÚjÔÑüaÔ½þ@c®£O]÷¹ñ °‹µ¾—wx7;C»å¯£¦$S\VõW¬%È=„$$$$$$$$žço#e¤Ä×ÌˆÕ ~5éñ”öˆøø9•x©ÇSä „ï?%á’´¬¢‚fOÏDE¹;¶†ŽrAqEXt:Qˆv1Ï¥ø^ÔäLî…[°vŸ÷: F .žÚ×?Û“÷u@LyeíîU£r‚×'œË<¼cùâÈÐDÜ8™FóŸCŸ§”˜–_P\ñ+… Q*mÉ×—Íb,˜ÜkùŒ~•Õu¡‘i­•ÞÐøU×}áÈï7 4©²ºÎu”#ÒáÛ•FÄÒDóÉ¥¥4Õ70Ž(g1és&ôX3w`uM}Hd*è(€ÿ·ë“ˆž–è.(®h{)¢×1…BÑÓRLN/HúÖÑôñëp …ÒÑLëƶüû~ÔÄá­oàû}Lgã{/m-tŒõTï=¹éõ±¦¶aâ0‡¶+mhä#ëbû1ÐQ.)«ŽMÊù¡\?©’üyd¥¹¥åÕŸ¢Òð­Gu03µFÞïc=@C#ý»G/ã?a¨¬ØéYQU q™½&쫬n뤴gÉû}l]}c}¿ÅpöK§÷€Yk/甡¶½üê‰÷çA=-:µ[!”•ÏÈ)A{…Blå®›IíÞ<&#É€7ïcÐexLÆæÃ÷¿›KWS‘J¥Œš{bÆšKk÷ÝÙxðÞÉkÞÑ ÙxæäuïâÒ* Ã^¾‹ê3qûÕÔÖX:½o]}ãŒÕ—Ð,€@ |å‘SÜþBê‰÷gøâ£ø& æ™oº‹aXTB6´”åmPüèy'Ñ”½|uùŽ¿š² :¢§Ï‡X4ÝYy¥ó7]#æÝ}ò î -QEoƒâ½¼?£!Â0,2. ¾ØåfŒuârXÞ ÉÀˉKÎÅÝ' ³€uûï k^bZ~¯ñûòÛ|[_œHk]6æ­¼PTZB!¶ë„×»à—Á¶"Û\Û.ö…_$ÿ{»Xg¯¿rÆÝ·¡‘ÏWìô,-¯ž=¾;që¦ë¨.U5õ+wßd1飨´Q”Š¢´Pˆ¡l¿Z¸tZ_˜±æ>P†ù‡$¢£#¤Ë( ÉŸgÍÜcœ²¶ÍÖB'%£€B¡t³3$Ú(Žm0xú‘q‹N/ÛáYßÐ'·Ož·ñ*ž`H«Qý;Ýy"oµPKM.9£pì [ cÍw­G_´³ÒÕÓR|ù.JÃaY}ß×sMs3˨þæOîuâê5ûeú<¥‚⊲ЇŽz§vNù‘Þ œ¹æ’iŸõvVºñɹbl¦CG½ôìvE=Ðf÷©'o½{#/+>ª¿Í­'ÛÎåÐQ×¹›ùó·‘aÉ5µ å•5%eÕ eëÒa+S­ Ãn<ø Ñy¹”„X^aùê9%íW˜4¼³Ï‡¸ËwüUí–š¨@\rnyeíó+ËÑÑóíÁe°ÝÞÓO×ì½}âê!†e}8”š?oãUMU9M…ÔÌÂôìâÙã»ëó”Z+¡«Á»àu‡eÊ R9ùeâìó{¦¢}€õºÛùÆ©Ø.Ñã)…D¤îmIT•÷yºõÈKMú15«¨Ÿ“™µ9ïÊÝ€Öº`o¥«£©ðüm$Zœ~·ÖZšhNÑÙïcüå;þJh+çä—UTÕöp0vÛ4¾cÛ¿{Yiñ+w^øE•WÖ¦hÑí–Ť/œÒ{Îú+köÞ„•ÕuÌykæ$¦™8¬óºýwKʪGõï$%ÑÖÞÔ‰Ãn? 5ïO]^CEÖïÖÚö4µW“Õsì?ûŒç¸ÂD_•Íbħä—Vß3ÕD_µ=%´Ú–-[~cq$$ÿŸDGG£Z’’’(†$ ÉOP__Ÿ˜˜ˆ>+**ŠDoþL Ôú9™qØ,1c„s§S;&ê(k©ËãC´ÔäG 褦,#%!6víÑ-l-u„B̹›9rc£R)£úÛë©(ÈIë©®_0xݼAlC_[ÉÑÆB¥Rl:èt%\º ¶c3R’œþ=: ¸‘,&]’+6¨—%Ãf@=;k©É³ÙŒöÆó&õ<°Þ… „J¥ØZêté¤K˜ :“AÐõ­£™Vw{#.‡-ÆfŽ`sjÇdm =-Å.ÖMY(pè¨çÐQ¯ùȰ˜ŒÉ#ºHKrÄØLsCõmËFÌØC Àúw3W”“&“Îå°õ² >Ù¿úæèå×öN?·ÛuñÔ>«ç plwëIðS߈¥Óû²˜ Þ¯#O]^VšÛ©ƒö®•#g¸t£P(:h[›ñšJÁ »½ÑJ§Ñ t”û9™¡-ˆ¨§Ò’œ=-Ðî8 …2¬oG'[C;TQNrP/‹]+Gá§n04Eé=-Ð @£RùaGS³/Á{”ä%»™‹±˜r2ÜÙã»[šhv2çY›ó( ÅÚœ·yñPd¹mNV^é…›~#œ­o¸Í¦Q©2Rœ CÜ6·³Ôù2Ô”qCìU¥Å9,žšÜò™Î[— ã „½º#§ÜñCíe¥¹ |YÉ1ƒl/ퟶZ™jÚtЦÑi€AGS­ ‡¬šý5ž¹¹‘úø¡ö*ŠÒâbL‹aßQwùŒ~K¦õÅMjCz[Yk(+Hik*¬œÕÛ²\q6O]¾µÐ 4*Õe°‹Å–ä èÑa„³5N£R)Ãúvt´1à©É³ÙŒÞ]LºöÞ³z4WœÝúw‹âdkˆGße³cÚ Y;ȶoWÓægÓÓ¨]-Å+Fv¶Ökl˜iLÓõÈæ "ZŸ—ü95!5תQFº*m|» uTì,u¸âl©9zh+£5oo¥KŒ¼ÊdÒYLú€”¤¤·£©s7sU%i•*#ÉéÛÕlóâ¡#ûw‚_&33³¼¼¼i€~Ý2NBòÿÏÍ›7…B!¨««wíÚõO7‡„„„„äŸJEEÅ“'MQàÍÌÌZ;¼‡äã8zWHDjeôibÜËq‹N{>Ê >B’´ÁY·0ed—?Ý_…TIHHHHHHHHþm¨(JÜYŸ˜–Ÿ’WXR©¦,c¬§ŠöÂý»13T¿rpÆ×m$ §ô^>£_;»ø†TIHHHHHHHHþèó”ÚÅù¯„ËaMñ·Yý#ÚÇêO7á÷@î!$!ù²bÅ }}ý’’’¿´–òòr}}ý¥K—þéîþ$ýúõëÞ½ûŸnE{)**ª¨ø¥cŽÿÑŒ¿k¶7då£tWP³çMÆ…À¼?Ý. ÃÒÓÓÿl„¶€€€Î;ËÉÉ™ššFEýjÐ|’ÿ¤…„ä_HZZZRRRmmí_ZK]]]RRRjjêŸîîO___ÿ§[Ñ.JJJ”••åååóòþ/T (©áO¾—UV 0h i–³‘¬«­2ƒFùåâ¿¡¸ºÑãS8é6…áv>™^ZýeU¥˜v(vîܹqãÆ;v¬_¿þ4 ²²rРAB¡púôéõ› ’¤BHBBBòÿ‡Ã155USSûÓ ùÊ…ÀÜ'1ÅDIpF彈"O¯çYP«J’Y‰>tÒ€:¾0³¬Œ•8*’¿A¼ü1ïo–ƒúj®…$û‡#Åéééñx<]]ÝögyñâÅ–-[<عsç_oÿ«W¯ÊÊÊöìÙ³zõê_/„„„„ä¿©’ü¿Ãf³?þü§[ñ ¸’vl„ž¬8#&¯ú€OV=_è“Tö(ªh˜¹üo­« }°Öà›N ]n[Ñ`¯%IùšçЂÈÜji1ºëg↻¸¸¸¸¸üP–´´´ÀÀÀŒŒŒß¢fee€žžÞ/—DBBBBò_„TIHþ1”––†„„”––òx< ‹õÝ,|>ÿÝ»w;wVPPhž ¨¨(<<¼¾¾¾C‡Í‚øøøØØX 333‡óÝJóòò FÇŽeee›×Z^^®££caaÁ`0ð[999•••††††………åä䨨Ø()µ  ¤¤$%%ÅÌÌŒÍfå222x_ÒÓÓ#""ø|¾¾¾¾™™YÍNNNÆ0ŒøT][[khh(..Ž 1 KLLŒŠŠRWWïСƒHím)++K4ô•––¦¥¥™››ÓéM¿ÆŸ>}JMMUWWwpp ÑšT”øøx6›­¥¥…_JHH¨ªªÖ××P(.—+Rcvvvdd$†aZZZT*”••¥¥¥[lššŠŠ mmm‘©iNhVpY´yŽjÈX^'8þ.â j ´†ÿ!½BY‚ÙQë“Tö1½²¿±lÕ¦‘L-® ɬL-©S’`vÕ‘Ò‘ûf«ê>Ieqù52¬aæòÁ•À¦SM•Å ¼ŽŸWÙ@§R¸ýM ÄÞ§UDæVW× lµ$œt¤q]±ª^à—R_PÓAEÜIWº²^ð1£BY‚i©Æ-¨jŒÉ«Ë® iÖÛä2ÒE[ /6&¯&,»*»¼^MŠÕË@ZY¢ƒdmmmLLŒ±±1úv ecnnÎ`0²³³ƒƒƒ ŒŒ(_”˜˜ˆ\srrâââ¨Tª^ŸÏ‰‰ILLÔ××711Á˜ššy{{óx<›„„„´´4ÈÏÏ‹‹“’’RQQAésrrÂÂÂêêêtuu-,,(Í´ç’’’ˆˆˆòòr[[[<¾cbb’’’ ñuHBBBBò/#!ùàéééîîîîîîçç÷§Ûò3TVVŽ3†øL¦­­ØZú‘#GÀÇõõõñ,K—. …xšòòò±cÇ ºwïžššJ,çåË—ÊÊÊx6›}øða¼ôP;tèP<}uuõÔ©Sñô eíÚµènIIÉСC‘Z‚Ð××dz1BAA!..ÎÈÈ% Ñh‡n±—/_€5kÖ…>>>0oÞ< Ãbbblmm‰ìÚµkAAžXKKKYY¿ÔÕÕÕÐÐ –víÚ58qâ.ILLìØ±#^ ŒŒÌ½{÷Ú9‰hKgÿþý‰Bäã‡/ËÏŸ?§L[[[  [âââ:tÀ3***Ž1ÂËË ×îdddÞ¼yƒ'àóù3gÎ$Ž6bþüùÍÛV\\/^€sçΡ˛7oÀ³gϦLùzÖYÿþý+++1 ËÏÏoþ‡8%%å}ÿþ½¦¦&.çñxįùœ9sàãÇø{–˜˜‘¢0 KKKëÖ­QÞ©S'ùÑÐа~ýzü'…F£†¯¯/ñµ…žž^hhh;×ùòòr÷/DDDüéæ4QS[Ÿž]„ÿ>×Ö5¤g Â_+•äÿ…ÌÜ’ŠªÚß^l#_PZ^ý§;Gògð÷÷ÇÊÈ(£$$ÿ>þzäÈ‘¸¸¸ŒŒŒS§N¥§§OŸ>½í\£G677÷÷÷øð¡±±ñáÇ;†ßíÛ·ïÍ›7W¬X°xñb__ß¾}ûòù|”À××·_¿~L&óÎ;‘‘‘wïÞÕÔÔ\ºtééÓ§[«ÑÕÕõÚµk(((HMM:uêîÝ»=Šî~üø1..îÔ©Sñññééé‡NLLDϸ8¶¶¶FFFÏŸ?¿}û¶œœÜ²eË¢££›×5lØ0‹åééI¢gq¤èÞ¿ŸÍfß¾};---!!aΜ9ïÞ½Û²eK#†µ(VUUuíÚ577×ËË«¢¢"88X[[{Ô¨Q-6ï‡ ÇoMŸ>½¸¸888¸¶¶644´_¿~B¡OI,Ã0??¿aÆM›6íÝ»w¬¬¬œ8q"&gß¾}çÎ[³fMqq±···µµ5•JõððX³fMóf%$$œ9sMÍ¡C‡æÎÛZ_>eá>œèƒ¯/[ {HÃ?Ϩ¼ê“9HnÏ“b0þZìñwÙT Ì鬺½?OS†Õ(ÀV§">çTQ)`£)a«)5 BH(¬t®)üŒž¼›NõN,»û¹:ªs ¢^€»‰ÊrèJÌ!frb jMƒpàÙHϰ.‹¶¢‡ÆÆ¾Z2zuƒ`Ö­a³i™DôaÊ”)ïß¿¿pá»wïúôéóìÙ³€‚‚“'Oв_¾|ùýû÷?~Œ ¿)))Ý»w—”” ¨¨¨xõê•@ pvv.--%V7|øð:xxxìØ±COOïÑ£G'N€µk×Þ¿}ÇŸ?^SSsãÆääääääÕ«W‡„„¬Zµ /d÷îÝ;wî0`€ŸŸ_PPÐêÕ«Ï;WUUqqq½{÷VTT ª¨¨xöìYuuu¿~ý*++Û³ÎIþ›?Ðê²âãç¦(_{O?Õê²ÂçC,ºLË*ºr7 ¨´ê/ªýSTúùz¾òÌ7â™oÄŸnÅï!+¯TÃaÙìu—{Éó7^“±˜Ÿúÿ®Œäñ§µS’¿ƒº…Ã0ÜR„èÝ»7”——·˜Y‘¡  èòöíÛ0sæLb®É“'À¥K—Ð¥­­-•J‹‹Ãdff2 dô±À‚ ðôÕÕÕL&SEE] …B¢‰Ã0{{{*•ÚÐЀ.GŒ³fÍ“9svìØÑF7q ŸÏWPPÐÔÔDÙù|>1qCCƒ¸¸¸¥¥%.in!TWW'fAÂãǣ˭[·À“'Oð=€iÓ¦µgkjj ™…=£¿}ûNïÛ·o‹Ù9޹¹9~©  @¥RñÉÂ0 i¨( ÃÔÕÕñ‘Dšó¾}ûZ,¼ùÔØÚÚÒh4ܺ+¾7Èhv=$_(Ä’ kF_ŽF’Q—¢Q™uþHâx4,±°&¾ ð³ïsðNx“©m׫t$‰Ë¯Æ0lؓ݅À\ ÃÊkùv‡?%B!&¹æ²õ¡zü K|©K}G!É›„Ò¨Ü* ÃúŽ@y‘e¯¬¶7$Þý\ˆ¯yœ"boÄ…ôeo?¦W É Ïx$AöC".\€³gχÚÈÈ(77I  ÑÀ‹ÞªxxxË7nFKHHø:Îûög ©‘ÖÖÖµµß vïÞ <À%"?B¡PUU_Þ%%%âââDû3†aYYYèðaØLfZZ~ ­ücÇŽa$†ý¿Z—íðžk@H"ºÜxðð\_¾‹B—3×\ž«ÛÅ—Qímžë»à¯«·¾¡QäW寃Ï4ò¿YóUÕuT©tÝi üŸ-õÑÐÈ1í¦gÏuÌü“¿½®é«/Ï5*>ëOwšä@ZIHþyˆøþ!“BAAAYÖ®]‹622266NHH@F€çÏŸÀÌ™3‰é‘Bøþý{())ùøñ£“““¡¡!ž@]]½G¹¹¹-5Ü5 P÷*•êàà››‹âàS(‘]LZZZB¡°¸ø›`•›7oÆ“Y[[·ÑM¤áFBooï & ì"»ž †ªªj‹{íÄÛÛ›ÍfwëÖ ï ƒƒNÿ]ǾQ( ŸS§NávÚ6àñx®®®ø%+¼ƒèi ]¢˜­UÝ|jAk„f5‹¦zıVúéíüx;¼¬Ô¸§Fë@Jq]i T$™g˜éÉ‹(ˆaìx•:rleqÿ”òC¾Y|2@_AÌP‘“VR÷(ªúÉN³SI6m€q“{$ 1šTT[Q'€/ÆÉðìª7 ¥0ÞZi©JÙS_ÚTY<¾ æE\ Œ¶Tm©Rl:²^—ø4x_p{#”×ñ¾Ë€.ÚR&õmrÙ–çi×CòQÉbŒvýÝœ={6în­   ¡¡ñݵçíímll¬¡¡/0äö)²À:ôÝ«"? ESSÿEEEUWW5Š˜ ÷õööîСƒ’’Þ t\'y¼á?—Áv®£{u1ù‹Ê_0¹÷L—n¦úªè26)‡m8kÍÞ;Oﺌکf÷͉¸âÖÊYýWÍÀ ÿö¿64ò9F³FÎ=þ§Bòß‚ *CBòÏ ++ëܹs>>>yyy•••åååЊ"NóGüØØØüü|.—›˜˜ÄíjðEgHJJ€ài’““›ßB м%•••h×SZZÚ¹sçüüüòòòªªªÊÊÊÚî…¤¤$´v â€dddnß¾}ðàA*•zëÖ-˜0ažàÓ§OçÎ ËÏϯ­­-**j1²N;IJJª««k¸å7ºÒ]¸paèСóæÍÛ¾}û¬Y³–/_.!!Ñμh¬êêêÐ¥££ã™3gÎ;‡\‹‘¿¢½½}kÙSSSÏ;÷îÝ»öL î2Ú(hJ %Þn¯¼¬»º8“¡_b®è¡!-Öô‡&"·*£´RŠëLöã¥9êHݘh /ãK‘CækEün`z°éTe±jäóéÝô6ÁÕF4øÐ³Ø&mv|ǯ¥}H«yq†–L“N…šj¥öuZ½ËÇéÛä2³½!HH£R›Ê]`ôs3+)))òâC„ÊÊÊüüüüü|111‘[è%ŽÈD—èèè³gÏçååÕÔÔu{ôUm1ˆTaaaEEEHHHóf.£ÿhzv6îÙÙø¯+êhÇ©£ñKd¯««oü…"€†FAóºö¬ý÷Ôþ{ 1¾@ø·  ‚TIHþ$&&:::644LŸ>ÝÄÄ„Ãáœ;wÎÛÛû'ŠBúŒ@ ÀÿÇA—HA[ך۩¼¹R_ŒGŽ!†L)))dÏŒŠŠrrr¢R©Ó§O722;vì2HþL&s̘1gΜñ÷÷wpp¸w¥¥©©)º{ÿþýÑ£GkkkO™2EKK‹Á`,[¶¬mºm¨Tª¤¤$Ú¦H䇠k»ñññîîîÇŽÛºu«§§g```kAAÛÆÂÂæÌ™³aáPXZZº|ùòž={¶˜822ÒÉɉN§OŸ>ÝÐÐPLLìèÑ£>|h1qy?©¨ì´$OÖcPÕ¥YHÄÁMˆ¸ÕºÜpsy}1% ¦²$³3O’'Û¤›}ÎþFÙ€Ò>2Z¨qéT ±dku øF?՜òEoe”Ö#õ/?µ¸®¤†O”A›uµUV–`*K2U$™Ýt¥”$~Ù‡­¾>¦¦¦Huo>•?„··÷€§M›¦££Ãd27oÞŒöÑ÷ZäëOl†••Õ®]»DnYYYýuÝ'!’šYøümTBjž¼ wÌ [}^ÓË@øÊ?ú}hRaI¥¦ª\?'³ŽfZí,3&1çùÛH—ÁvªJÒŸ’÷Ô'b†‹“@ |ðòSxL†©Ú˜¶Rb"¹žúFd攨(JIKr€N§MåH£‰ÚÉ}>ÄFÄe͙ЃŤß{‘ñY§oøÀ€4U›~ r ÊžùFFÄe*ÉK9Úèwµùú÷"%£ðÁËO®£ Š+Îzø²YŒ3ûËJ‹ÀçØÌWþÑ)²ÒÜŽ¦ZÃûuDo<£²ß'•T64òQ]ºZŠ}Màúƒ€ Èíô Œ ‰LKÏ*2ÔUq²5è`ôõµHv^éM¯ã‡ÚKrŽ KÖç)ìßIYA ZÁýa ¤„Ø žÁ©_… ÂÎÖ6´ 9½àê½÷uõÝí ûwï ’1-«èùÛȘÄM5¹îöFÌyHþ& &&)2sKPwºtÒ77T'æ}êáý!VI^rp/K#]‘’£²ß}LˆIÌVW‘µé Ýü-@jfៈÄÔ|+SÍ1m„H…„äÁñãÇ ^¾|Ù§O$ñööþ®B(òÀÏd2@[[; 66ÖÑÑ‘˜¾Xµµµí<$-Yá‹^¤¡¡áììÜb{>\ZZúþý{‡¦¿Ð=ú…&L˜pæÌOOÏêêê’’’uëÖá·¶nÝÊf³ƒ‚‚ðŒ›7o®¨¨h­(.—›››K”ˆèúººoß¾urrjÏÙÍa³Ùt:]Ä ³ùC9‹Åš:uª««ë²eËÜÜÜ®^½ºhÑ¢Ÿ¨nË–-S§N=zôû÷便¥{ôèAŒ*¡C‡ÊÊÊíììäÁƒ­)„aYUH«íÌ“´T㶘Å}‘bÓõå¿>_"Õ tUë©/Ý<ž€þå`ûÕ^)  e(ɦéÉ‹³ð›{)®nº…Ÿ5¿ôAj9 ?M‘ؼÌÍý´peõ¯âââJJJÕÕÕ­}}~ˆ;w666¾ÿ^]½éQòرc¸BÈãñ %%¥yF999))©ÚÚÚßÒ ’ŸàüM¿Å[oÔÔ6ÈÉpKʪ7»=p?2{Ì@Û²Š›![“Ò d%¤$ÄÒ²ŠÖ¸{p½ËÒé}ÛSìã7áköÞÖÑTÖ·#¼ö^¶ÃCI^rÃÁ{iYE :­¡‘ðÜs¿[kåšLÐÇ®¼^¶ÝCZ’#+ÍŃŽÐiÔÑlDôF8uÝçöÓàÎÖ*²ëö߉OÉŸ±(ªÍí“ó‘BøümäÄ¥gïlã€IDAT+«êL Ô2sŠ×í¿3}¬ÓÙ]®T*üC–ïôd2ék÷Þ®ª©€>ަ=Œ§¯¾xñÖ;ŽS]Y6'¿´ª¦¾W“W×VP(”G¯Ã×íorL»á* ìiÂ5{oÂòÊÚ«/ÞyB£Q%¹b¥åÕT*eù ç}kÇ !‘iËwzб™gÜ}>Çf²YŒºúÆ]'½| QÛ£G¸¸¸×¯_ÿ®Î’´Ÿø”¼¹ë¯ðÔå|ö}:VztÁä^1‰9PY]שƒvȣ͡G}÷&úîU•ØpðnMmÃOW7iÙY'[ƒô€•ѧfŒuŠOÉ;x‘S¼|‡gW[Ã̇â½wÜYO¡P†÷³nLºÐ\!ìÉVÿÛë`öøî¥ŸO”~>1ÒÙ K*Ç.8¥¡"›únÿ'¯-yÁGfë~ᦟǣ@bö;=»Ù¡4Ö_Lg·OÎ/‹8ï½» ôèà^–ob¿ €U³û—~>an¨.ÉCuÝ=µ ÅV­ØéyçYÈÊYý+£N•„OôÝkª¯¶ÿì³»ÏBˆÉl¾¦®"›à³§*úô¦ECsò˶yØFgߏ]|yÿÌÂê˜3^–`ÌZ{yÊòs› ) ;žún¿†ŠìÁóÏÓ²š~|R󦮼`k¡“t8ôñ–ÜnCûXí>ùiÎwO/Èýè½»˜ î¬žóuÆó·‘ )yA6ÖÄž¹}r~m]ãÒíøÝ+w¶}Ø»‹iá§cEŸŽ‡=Àæñ›ðmG›ÚßÐÈŸ¼ü\}ÿá¹EÕ1g‚mf1é¯b€„„TIHþôèÑ/^üðáÃ7ntíÚõÓ§Omgáp8>|°³³sssÛ±c `¸~ýztwÒ¤I7oÞ5^^^W®\éܹsº:îQ‰ÛÙDÀ#ÊX«1vÓ•–bÓàì‡\ù –ûC•6¾×ßùÑ=´)ØICôaÛ‹tÝA'rð*ƒhê—’q]t°Y“ÚÞ7™rëL÷_ ÊCf½>†M–á7ãõv~¼’—†«—òâ ôa­WªÊ¦"‹` ‰,2Q®’ª¼é½Åþ¹ ûCÞ$”ýÄ\´:&þÌ™3nnnÛ·oGÛ wìØÁf³G½eË–çÏŸ?{ölÿþý¯^½úÑò{ôèQWW7cÆŒ/^œ9sÆÎή°°¿+//?oÞ¼ââb{{û£Gž>}ºOŸ>#FŒ@æëÝ»w3™Ì¡C‡nß¾ýŋϞ=Û»w¯­­í»wï~W÷IZãÀÙg|ððÆqÈMT^†ë¶iü–%Ã@CEÖãè\Aâ©ËëÛ±¦¶×4~‚ C.ퟮ¡"ËdÐ÷­C¡P>|JB·B"Òù‚y“z²Y èl­×ÙZÏëM¸@ ün±bl¦— ,&CZ’#-ÉA/"QQUë¶i}:ÞòW˜Á`())=|øpÒ¤IK—.UUUwww<¦•Jõóó[´hÑ;wEBEEeÿþýË—/Ç 0`À«W¯,X°}ûv ØL¦ÍùóçñSãét:•Je±Xx–«W¯êëë;v 7/èëëãÁNW¯^””tíڵׯ_³ÙìI“&Íž={áÂ…x/˜L&…B!v }f0m Îĉ÷íÛÇçó§NJ”Ÿ:uª¼¼üâÅ‹/^”’’Z·nˆù…Åb™cÇŽÝ·oßœ9s$%%çÍ›7qâD333&³É%..<þü³gÏ"ã*N·µµÅ=`‘}¨ã‰°aÆÌÌLww÷éÓ§+))>|XFFfôèѨƒfffÆÆÆ«W¯F~¤šššøþ1&“‰·5žx‰à#&>þ,))yèÐ!11±ššš¨¨(ww÷#F|øðÁÆÆF¤ak×®MNN¾~ýúË—/Ùlö”)SfÍšµxñâX\~ (K0 [vͯ œt¥‰rIæ©& î&ÅÔTÔ >çT@UñÙ›Ôø¡fò®¶Ê—?怃º´›º¹ªø¸«±JLQ&¶ •ÜM¯IWßQ1*·ú O&ò,cPgwVím c,¼¢‹=à @ŠM_ÙSC‘˘•Y©#ÇÆ#ʸtT8‘S ,ZcY°Tã^™`´òQrNyCaUcaU#…Ž:RãÁiš<>"—ƒA\ÆÆÆÆ7nܹsçÒ¥K9άY³@GG'$$döìÙ;vì@k€Íf÷èÑÃÄĤ’ñ/ñ›¸ÿþ¼¼¼[·nݺu‹Ëå.^¼Ã0777<Áž={X,–››ÛâÅ‹Ñb;wîœŠŠ }üøqöìÙ[·nEÍëÕ«—ÈÞ`’¿‚èÄ*•Ò«s[±@aaI%®”WþŒ¢¯“{LFJ\VZ¼°¤éuƒA€¸ä¯^ôB!Æg7ß=Ø~¢Ó)JEUí󷑸PBœøí!xó&6i¡Í)-¯.*­BÞ¤e?ÐñÐÈ4@8¢Ÿ5Qhi¢©®,•…a>=;3M¿{ :MKM.1­­øÀ\¶CG=üR[CÞ7ú:™ážº<7 짨4) ±¤´ü¤/ÅÖÕ7R©”„ÔïGÀîhÆSýúN§ä’XXR)%!–[P–‘S< G´åÁbÒû8šÞzò1!5ÏÊT+*> œ»™ã ¤$Äl,´#â2¿[5É¿R!$!ù@£ÑΜ9søðáììl---ôDèââÒÚf¶ëׯ &“žœœÌápУIIÉË—/_ºt)##ƒËåÊÉÉ5/§W¯^±±±ÕÕÕ¹¹¹(. ñ®œœ:i—0™ÌíÛ·oß¾=??¿´´TIIIFF†x÷Ê•+'NœÈÍÍåñx ð©S§â½¸qãÆ¥K—ˆ!õµµµkjjˆOºÍ166®©©©¯¯ u£¢¢âããSRRRVV¦­­M¡PÁáÇñ"aô)ÊÖ­[7mÚ”žž®¥¥…N­¨©©!†[TUU½ÿ¾@ ÈÈÈ …jjjÄÖ>|øV®\ÙZSÙlö•+WΜ9“——‡ëÕÕÕhdeeŸ>}ZQQ‘••%##£¬¬LŒ›ŸŸO<$ 99Y$Šìĉ‡...=òòò:~ü8 1а°°˜6mšOs…Éd^½zõäÉ“¹¹¹ÚÚÚt:ð3f45 ÁË:Ö6 Å™´oëÿÊ@¹ê½]iT`ÑEŸ{ÈĬ±É)¯Ï,«gÒ(Úrb¸›(P(piœág­ÂªFCE:2~ˆ©¼ƒŠê`,Û¼ä]µ7ôÑJ(¬c%~‹A£xL6v®›[Ñ€ËÇ[+ãßH±éa+:%ÖÔ6 ‰yÇwTc©YZŸ[Ñ Æ¤êÉ‹áç×7‡8ò0|øp|NqÞ¿OÜ1[·n]½z5ZlxbSSSÿÆÆÆ´´4ƒ¡®®NÔÉÝÜÜöìÙÓ|R–/_>wî\b222^^^eeeÅÅÅÚÚÚT*U(nܸO@£ÑvìØ±}ûöôôt*•ª©©I,ÐÂÂ"00°¡¡¹žŠ4ƒä¯#%£@NšÛšÒõ6(~× ¯7ïcÚc¦û ÄXŒF~Ó®æ®6r2ÜÓ7|t4môï< ùð)iòˆ.¿Ö»B ÆÌ8""G*ŽÈ¡)“_¶ÅíÁM¯UµðS$g€†ª¬ˆ\UI&+¯´¸¬YÕšÃf1ø|ÁwËÇ¡Óh-J„_^>¦fU×Ô÷w=$’Œ¨Èµ16ùhl@C¥y¥ #§ÄÊT+;¯Ô”d~°’ÿäO< É?‡CŒæÒFh†ŸÂ×v L …‚B€¶¸¸¸žž^‹·Z;MII©Å}†Àårñ^P(b/¨Tjó[ÔID1¿‘••ŃʇZ1<Òh4¶k§Ñh(è‘ÚÚÚC‡¹¸¸ 2¤íÖ²Ùl¢Qd%%%q‹‘í"à: ŠŽ#rð]ZZ´!25­òMíiöÝlQ¡âp8ÆÆ-œÀ`0Zœ¦6&¥Å_iii¯ƒ±—ÃÚ}òÉÑË?ìNÜN*«ëø|A…2aIÓ>ç‘ý;Û:áWÊ”‘§R)‘§D4^Ü"×"õ ü>“ö'§ì^5ºOWS9iñ°èŒÓà !.¸Y•ØM“.+õÃÊØÏ‚$GBœúNtçE‹ž®?ÐA.»µÂµPœÃÂ%$$" ! ÉoàÒ¥K 娱cº!Ü´iÓž={BCC---étzppðóçÏûôéó]}•„„äO¡­¡’Q˜˜–5ãñ(°®¾ñìnW'[C$çü…ç \½PQUWu*)-¿¨´ÊHWE]ù,KÈAä0=]-…ŸSÒ³‹MôUÛ_TPxrLbβýðxª9%"i(hhä=?EÐÑT€á)0å«°°¤2%£À@[™JmÅÛá/@WKñ]pBuM½\+6ɇî»hk(@pDªÈ | O¡Ñ¨h9!ûaxL†å×—žE?TÉ¿2¨ Éo`Ê”))))òòò¿^Ô¯£¥¥¼dÉ’ÊÊJOOϰÙìk×®=}ú”F£ýzù$$$èLˆïáN¡¯bN\}_4„¬Ü¦Å™¹%^‡ÿu-…†-Ü|=>%¯¾¾115/9½ ý縢­n"›ÓÆ ±€µûî44~=ѧ¡‘_TZÕFQµußtœ/žq÷i^]]}cÛðºÙª+ËÜ}ÞÜE(ÄVì¼YßÀ_:½ß_7ŒÍ7Ä^(ÄÖî»#$œ”SSÛ€o‰d1éâì¨ø,¡ðNÍ•gém•œ^pÆÝžºîŸ5u”# T3´oG8qõ Š1[F%dÛYêD'd…§¬š=\Û¾á³xë€ÐD Ãî< Á—û+X>ÃÙýaàå;þ—ïøãB}UÏcsEÎIo%yISµÀ°ä.£v*+HMÙeHo«Á½,G8[ß{j5psï.¦’\vRzÁ+ÿèY㺡SøZ¤K'}-5¹{ÏCFÌ9n¬§âõæseuˆÓiÏÎÆ/ü¢œÆìУ›Å8µC4Ô3›ÅpÛ4~üâ3=ÆííÙÙX]Yæ}hRd|ÖÞVSFþÒÆÈeÆX§k÷ߟó|û):½›!›ÅˆKÎ}õ.z÷ªQó'÷»óðU˜¹ó+S-{+Ý_äm³wÍèÀ°ä¹®z< 23T‹IÌñ Œ3ÑWݶl8J`f 6f í­';ôߨÝÞ("63>%odÿNă7Üž¼æ]U]ߥ“~{*%ù×@*„$$$$$$$$“ô`ÓÆƒ÷Þ'<ñþ¬£©xdóø¹{@Wƒgí;ýôÁËO:  éb­?{ÝeÜóÐHWÅÖBGáË9ã:Ê6´•ä›N™×ÓR´é ö’€¶†‚MmÍoƒ¬Ø[é2¿ìd»pË/>%ïðÆq†9ÔÔ6–T>ñþ¼ÅíëŠó¡·4o¹…±Ffn —Ó´7˜B¡Ü>1oùΛá1Õ5õZjM®wNÎ?çùöî³ÐG¯ÃùšªrÓFw]0¹7º«©*×ÉœÇSÿ&—Ãzu}åúýwƒ#RSóºÙíX>bÄœãD¯ÚÅSûW>~þ& fÁ”&õÉÁJ—ŸfdÿNyJ{N=‰NÈŽŠÏ25P›;±ç܉=ðªJÒ6´õ¾uÖµ6çqÄZu͵·ÒÙ¶gj fg©#CØ”¨®"cÓA¹tF}ë¹æðÅ—Ï|#n? Æ0L[CaÉ´¾ã‡ÚãYNí˜Ìf1Þ‡&…D¤Žb\ÛÞJ·ƒÑ7ª¸±žª­…Ž”_‘/¶oq{™þðU˜>OiÝüAëç&¶ßýÈl3Cµg¾‘~Añ]:é_=433·$3§DêËË…nv†>âöìð;—5É?JûHHþ¹Ü¼y…øSWWïÚµëŸn É?•ŠŠŠ'Ož Ïfffæææ¿VÞÿ#êˤ$Ä¢_î$ ÍúmHÏ*ªŒ>ý§[GBBòÈÈÈ@ŸÉ=„$$$$$$$$$_¡Q©‰©ùá1¸ä]pBbj>éIHBò¯„t%!!!!!!!!ùÊŽ#¦®¼ÐqÐM]MÅÜ‚²Èø,}žÒÙÝ®ºi$$$¿R!$!!!!!!!!ùʤá{8ß}’šYXQUÛÙZoÇŠƒzZþ'4üm ! É7¨+Ë,žÚçO·‚„„äï€ÜCHBBòK¸¹¹Í›7ïÿ-<•››ÛæÍ›ÿt+þs\¹reÅŠ?v¤2NAAÁôéÓïÞ½û§ûAò'©i~H«H-®ûÓ !!!!ù¯@*„$$$¿Ä;wN:…‚¸þÿpþüùC‡ýéVüçððð8xð`MMÍÏeÏÎξxñâ›7oÚHsâÄ mmí—/_þé¾þ /^ÔÖÖ~ôèÑŸnHù• 랤.¹ŸDü·ôAòŸUÆŽ|ê|$Ìp÷ÇÚÆÿ¯_’+¤Ë( Éÿ µµµ»ví²³³4hПnË‹mÛ¶ééé?þO7äûDEE¥¥¥åääü–ÒΞ=[YY¹|ùò¿§ññññiiiiiiOußåoÖ>ïÌæò)6J?^ØSU/Øý:£¼Ž?ÁZÉ×t\^^eCDN5(I0Ùtò5 Éß©’ü¿P\\¼cÇŽ‰'’ áßÌæÍ›»wïþP?¾víZMMÍßRÚ±cÇrssÿ6…p÷îÝóæÍû]ÿu‚Ò+€B¾†_(—ãÐ;¨rÿ†Ú}’Êv½Î€N¸B¨Äeî¬S\Óèb¥H!×ü- ! É?‰úúúòòrJëÏJB¡°ªªJRRò'Ê/..f2™-[VV&++Û΢AEE…ŒŒLk êêê~¨åååâââtzË?\ ººúç:Ž÷±´´TNN®í6Ðétqqñ6Òðùüªª*iiéï–••‰‹‹3Œ6J¨ªªb0, — ?L‡ÓFãKJJäååºûío  ÃÊËË[ëlk}·©………rrrTê7f"ÖšBU\\ÜÆÜaVVV&%%%Rà_GUUU]]±›T*UKK«µôeeem ciiiû_XXÈårÅÄÄÚHƒa–] ºrbÏg·p´zƒã 0ók!VÛ(ä²h_ûX/gÒ(h`ñ5tE_^ŒÖ,eƒ‹/¨i`¦ÊÖ»_XVú`£ùõ‡BùŽjt…Iû¦¾K+©+­áódÙ \ÑïNuƒ@ŒA£R@ Ä‹jùÌP‘à‘ % I» ý1HHþ`vêÔ©Ž;r8%%%.—;~üø¼¼<<Á’%K455ëëë-Z¤¨¨(--mddäããÓþ*8 ¤¤$///%%åèèHôjKJJêÛ·¯¤¤¤œœœššÚªU«Ú(*::ºG²²²ššš›7oÄÏž=³´´—’’233»wï <¸cÇŽpçÎeeeeeå«W¯¢ôB¡p÷îÝÚÚÚÒÒÒ\.×ÑÑ1,,ŒX`qqñСC¥¤¤¤¥¥­¬¬‚‚‚~t„ƒ‚‚œœœ$%%åååÆGÞ'OžHJJ~øðaîܹ²²²RRR-–`ooÏåreddôôô.]º„ߪ®®ž?¾–––ŒŒ —˵²²zøð!1¯±±ñÌ™3SSSûôé####..>f̘ÊÊÊ’’’I“&IIIIII999ed|=*úÒ¥K222YYY{÷îURRRPPPQQÙ¸q#1Ɔ††ˆÅõôéÓ’’’ÞÞÞ0kÖ,eeexÿþ=ö½{÷â)Ïž=k`` )))!!amm-²¢jjj&Ož,#####cddôìÙ³ïŽsrròÀeee¤¤¤œãââš'»ÿ¾¾¾¾¢¢¢œœÜ¤I“ªªªð[nnn’’’ïß¿Ç%Ó¦MSPP———‘‘3fLAA±´”””JJJÊÊÊ*++oÞ¼™Ï绹¹)++ÇÅÅ•”” ŽO™2¥=KåàÁƒ’’’Ÿ>}Â%†)**6 —xyyKJJ*((¾zõ ɯ^½*))ùôéStyëÖ-))©˜˜˜“'OêèèÈÈȨ¨¨=z”X]~~þ”)SPã¹\.jªššZaaaó¶ÅÆÆŽ7NVVVQQQ\\ÜÐÐðÎ;­u$±¨¶¢NÖ-ØŸÇ•°Wú‰¯~w;¼©¢‚ªFîj‰5þË&#ÉÈKÑkü7?O»Z µ-Ð|_ˆñî`ëƒŸŠª¿F*ªntuã®~×a_ˆõÁPÅï¯çgT2–ûm~ž†Ò˜í ¡,}{æ}.lxš*¾úgÕ;¼âêÆ%÷“$Vûëïüh{ø“âÆ÷naŸs¾.‰w¹«ýçÜNxS¬¿ë£ñî`ó}!&{‚ɰ4$$$$í„´’üøðáÃÂ… ‡>{öl‡óôéSŠŠ ///” ´´4//¯{÷î™™™Ó¦Mkll|XQQñþýûÛ¶mËÈÈÀU£ëׯOš4IGGgË–-t:ýÁƒ£G®©©mÚ´ÁƒçææîÞ½ÛÁÁ!88ØÜÜãââ†neeååååääÄd2Û?¼÷îÝsqqQTT\²d‰‚‚‡<==_¿~‹Ì;UUU•••«V­úøñã„ ***Z´R¾xñbÀ€JJJkÖ¬‘xúôé´iÓúöí«¦¦VSSckk3aÂ;;»¬¬¬k×® 6ìèÑ£ .DÙ‹‹‹ýýýmll ·nÝzÿþýÛ·o …˜˜˜ºººuëÖÅÇÇß¼ysРA(KEEEYY™‹‹Kddä¬Y³¸\î7vìØaØŽ;PšÂÂÂââbb;ËÊÊ*+++++ wïÞçÈ‘#ŠŠŠ#GŽ;;;”líÚµ{öì9räîÝ»ËËË<Ø»wï/^ôîÝ%0`ÀÛ·o{÷îݽ{÷7oÞ 4¨mólHHHÏž=`Ö¬Y</22òâÅ‹VVVx2//¯³gÏN˜0aæÌ™=º~ýzFFÆÛ·oñ¥^YY‰«ˆuuuvvviiik֬騱cXXØž={‚ƒƒcccÙl6¤§§[XX‚¹sçjii½ÿ~çÎÖÖÖ:urqq¹~ýzuuµ‹‹ ±ãmƒF8G(¡Ë¨¨¨#FtìØñÞ½{ÀËËëíÛ·}úôÁ_QQR¢ÏsæÌùôéÓ˜1c\]]Ož<¹xñbUUÕQ£FŸÏ:thDDĦM›x<ž»»ûãÇÑ&[))©æm›={vnnîâÅ‹ 233<èââJÞ¯_ÕÌJô¡“F ©è­‚‰r“Q:$³²Ž/¥&ó¸J9¼O«Øþ2Ïø9§êÌûÜõ}4 ¤†ïà–TT t*E€auŸ¤²ÒZ>_(—ØX‰o“Ë@FŒ./΀âêÆnÇ?GçU€8“Õ ‚ÀôŠ¡ç££VwB¶Êw)åXX;ä|^jRQí¡·YÇFèµgNIHHHþë`$$ÿ<==ÝÝÝÝÝÝýüüþt[~†ÊÊʤ¤$¢ÄÊÊŠB¡ÔÖÖ¢ËÉ“'€¹¹yaa!’ìÛ·¶oßÞžò‡ F£Ñšß4h‹ÅJMMÅ%€ÐÐPtÙ¥KàóùèÒÉÉIBB"//OïèèH¥Rããã1 «®®VUU•““+**Âܺu }ÈÌÌ€‰'àïï‹/Æ%ïÞ½€Ñ£G£K¤jΞ=O°dÉàr¹íé{]]¦¦¦¤¤dzz:.DGV,]º]zzz•J}úôikå‹•––† ‰¥èÖT÷¸Øüê¤Â ÃBŒ»ú,ñí{ê3*aÔ¥h”l¿w†@ˆ5 „c.7IEaVÛ( /{‹$Æ»?ú&•z|ÊG—}¾òÛ)//wÿBDDÄ_T É_Š¿¿?þSFºŒ’üàr¹ºººD‰……†a¹¹¹Dáõë×ñ KÎÎΕ•Õžò•••Á•+WDä•••^^^ýúõCÖB2ß¡'W²³³ýüü† ¦¤¤DL/ ?~üááá999ãÆ#îõ=ztmóðð€Ù³gã{{{)))¼<Ü·Ö××oçØúøøddd¸ººw¦-Y²„Á`<~ü˜˜röìÙýû÷o­œÔÔÔ˜˜˜!C†7‰ :Ù*/_¾Ìår‘¦ŠÐÖÖ=ztqq1ÑûQ]]ýäɓ賤¤¤½½=ܸq·¼! [zz:±êÝ»w£Ï***ÎÎÎ?á7KäÎ;ÄaçñxÁÁÁHÿAþ`Á|;ëŠ+zôèÑZ)))~~~}ûö%â\\\444^¼xA<ºpÒ¤IÈV L&sêÔ©ÐÚ9òòòxzh¶>Ÿ???_MM é*¸[ïw‡=11±ù8S(33³ÌÌÌ””CCßèZ¢Äõ†a|YŸ………;wþ•¡øQF}òäÉóçÏ¿zõjÖ¬Y³gÏn;Lq„@NNyó“ÿ±wÖÑQ\m¾ëÙ¸»;b$¸§¸(P´Ph––z)ÅJR´8w‡ˆ%î®Ù¬Ë|L˜ÌÎnBÐEÞçp8;wîܹsw’Ìo^;vìßØØØéììL9„LeeåñãÇóòòª««B”Þ§«„—ðBÆ\fO7c¢ýÓn6¡¢:Iu“ !ò4¼ÃPLQ#B(ÀNŸI§!„â‹›õäÏC]ñÄ3é•Í·eG[=„Љ¤jÜéô³î¶ê äh}K#1&Öˆ«A„ЧÝZF |MõØtò8ß rÆ eÀ3AïMMMƒ zðàApp°‘‘Ñ3íyR¶»¸¸¤¤¤lÙ²e÷îÝ3gÎüõ×_¯^½êàà€?PÚÙÙQ,?#FŒÀT)àZÑÑѱgÏž”ÉŒ?!„³µñ8ÛÚ˜=zô _rïÞ½q‰ØØØÈb±^8u$®WÕ³†r¹\¥R©T¶·46~ió:òù|…B¡~ }ðü¤¯dAڛ;sçΞ={þüóÏÕ«WoذáÔ©SmØN)ÐétìiN ŸË—/»¹¹õìÙóîÝ»•••'NœhíØƒþïÿÓ××ïÝ»7îYÚZÏœ§eú{™ŸîCÙKXÿˆð‡e RD’ˆx¢>‡ñ‘O³a0Ãz߀¢ÓPW áŽqÅ|„—EÇCq?=/n!Œ)jÞììhHêÓ|oK]b4h¡q¯›üü|J#€wü!¼lذáÁƒ[·nýì³Ïð–9s椧§¿ÂS˜™™}ûí·«W¯þþûïׯ_¿råÊÇ»ºº"„<<<ðH­g‚û¶ùûû·Öwˤxº>sL<§Ùm•ŒMNNN]]]%.ÚŸ¥V8†a¥¥¥­ÕZhmÓñü?OôÔ!°ýÞ­í–ðŠÔÑÑ!,Níÿ*§M›Ö½{wlllðsµ³àîI«^“½¸¸˜F£¹»·šü·-ÛÛÛ«ïb³ÙöööØÓHBuðEhû~kC5i——m/)‹Åš;wîܹsOœ81mÚ´éÓ§“söŸ .¤¥¥ýôÓOÑÑÑYYY={öŸ?kÖ,Gá>Æyyyx”¦:qO3ÊÛkPMDA\­aZs)o!T>B >QF"®ˆÒe7k¼òF)BˆÃ¤k¬/ 9=r ÜBh¢Ët5ÓAÕ e!.‹N”¾*°c U! }^ºŸ†›—pmûÒ^9€b±xç€BxˆG‘ã p»Ö+‡Ífûí·\.÷´³³377¿~ýz;]OÝÜÜ .^¼ØZŒ“ŸŸBˆ’ ŸxVÆmA”¸ÇÀÀ@„PkIMÑS/Ä‹/-wïÞÅÛþx'¶!Ïœ9SWWG¤ÓlÞÞÞ,ëìÙ³dcWyy9¾Ù©S§’’’»d2Ù¿ÿþ«¯¯Ovw|1öîÝK,¸D"9}ú´ŽŽŽ¯¯/ÞbiiYPP@¤åäñxx®2:::/¿ì©©©­Uã@uèÐËåž;wŽ|o¤¦¦ÆÆÆvïÞlÄ»zõ*D‡ b¡¡¡‡ ,))Á#TÕÑÕÕuuu‹‹# Ѧ¦&Ürˆw¨¯¯§<ÐK$’¼¼¼Ö„¢¥¥%>s¢å¯¿þjíªÇŽÛµk×’’‰DÒ¾/S|=‡~úôéÈÈÈ={ö´¦BÉÉÉ2™¬[·nDÄi¿%ˆ£kN”56ÏV UÊØg§²oçÔã-¸ ,©—T5ÉBÁd‡Ï>B¨“®ñŒt˜!‘Ly7·!$Wb;¢ÊðÏ5.¹L„¾ÒD]Ä §BÎÆƒ€gUbhÙ™üÀ½tšX®L«"ªß)!äfÎ5Ñ}]¯¼õôôÚÿªà-ÇÐÐ,„ðàíí}áÂ…ßÿýû￉D?üðCåÅ^€¡C‡Îž=»ÿþL&sÏž="‘ÏüA§Ó¿ùæ›… 6lóæÍ¾¾¾b±8..îäÉ“ßÿ½ºEŽËå®ZµjõêÕ#GŽÜ°aƒ···@ ˆ‰‰9uêÔ¦M›ttt¼¼¼†záÂ…iÓ¦­X±‚Édž8qâçŸ.((À‹ÎÅÅÅ?ÞÝÝÅb¹»»Ï›7oãÆ_ýµ¡¡á¨Q£LLLòóó¯\¹¢««û¿ÿý!4kÖ¬mÛ¶-Y²/BxþüùÏ?ÿ¼ý1„#GŽ>~Þ¼y†ýüóÏäžEEE={öüá‡BCC=züøqÞõ²µµµ>>>!<… §§çªU«BYYYx<¢/퀃û.Nœ8±=ãnøÃJ—.]ˆÊr¹ü믿ÆËî2ŽŽŽ<ï@);!‘H–/_Ž?­ý=<<„B!Þ¡¤¤?„8ãôéÓ‰ÒxÊ~œ­[·âqqqøåc2ŒÍ›7óß±c‘\‘ÉdnÚ´iÖ¬Yí,;aXMMͨQ£È¿ÝÜ܈JØÓ²üñÇ3¿&JÒ#FˆÅb|ï?ÿü£¯ßòÊ`0Ö­[§P(ˆÃ-,,\]]ÉâùW‰ †ýù矡à›xƒ+VÓfŽ=š¨9aXee%Ù¬4lØ0ÜBH.;qèÐ!bW®\‰7fee…‡‡“—F£{1 ÃM‘ÄÈ_}õÕÚµkQëe'D"áóŒcffvþüy¢^vâ·ß~#ß!Ä}Ž©•À0ìÈ‘#¦¦¦äûM__ÿÁƒø^©TJÎ@‹ *..Æ÷FGG_ÊàÁƒñF<ƒËáÇ[û¢7nÜHè1“«W¯úùùe'V®\‰ïÂûØÛÛ'&&’¿/JÙ‰¿ÿþ›<¸»»»ñÃâæææîî>þü3f :¿Rr2¿ÿþ;þ=2 :¾nÝ:;;»ÿýïê=VE¢%w\×?Ò8Γr^þ-¹C[zgîñ̵—òÑ’;Ý6'àðM´äNjyÞò_r5Þr0¶¹ä O ø5Ž(M–Üé¹5Q*oþIðWÑþ¿#†}\…oK¨Âû(”Ø”ÓÉ#°>¿;ïD–@ÒüSógd)Þ~#³ù×QT~Q¦{;ˆ'»…‚Þ*hØs†OÀ»È±cÇðì ööö=zôÐöt^¹\~óæÍ¢¢"OOÏÎ;ã–·~ýúá90srrrrrúõëGLW*•ׯ_wvv&’7¶MtttRR“Éôòò"?Žã”––&''êëëûøøÄÉÉÉ555x9‚¢¢¢”””¢¢"CCC??¿Ž;’ß‹Ëåòøøø´´4&“Ù£GJp`bbb\\œ±±ñG}D^¤RiBBBVV–H$²··ïܹ3%scEEETTF‹ˆˆ033ËÉÉ)--¥ä¶i›ôôô'Ož??????²I§¡¡áÁƒ!!!¸»``öøñã'Ož(•ÊððpÊâóx¼ÄÄļ¼##ãáÇç£>"Šž+•ÊÄÄÄÌÌ̆†›°°0}úöjüëëÖ­>2Ç{øðaxx8.óp¢££ nÞ>|øÍ›7333‰J>Ÿïîî. 4&RÊÉÉyôè“É wrrŠŒŒ´´´TOû ¿¡N(ï`Õ\ïAâzÉåtžX¦ìíaìo£WÀ§– ˆþø¦©.««ËS÷T¡üaa#›A‹p3f?5*”ص̺ôJ!‹A u4èâÔr¿ÉØ™”šâz‰½1ç#S=6£F ‹.lÔaÒ{º3I…IeMKšjšdnæÜPGã–ÌòFéã¾›ÑÓÍ¿ãRÅý¼BÝ]ðBöZçñãÇ™™™øçQ£F½áGí!ðAðBP‡„&LÐö\ÞŸ~úéÎ;SRRðxÔWÎùóç‡~ôèQP@À‡ÎÇ>Œ—åBåååû÷ï/..ÖöD-p?¯ádRu^­XÛ€7BøÐY¿~ýäÉ“ZëPXX8kÖ¬Ó§Ok{¦(::zæÌ™111¯õ,ׯ_Ÿ1cÆ… ´}¹ïÅõ’³©5gRjΤԜR•ß(’½/ Jê%[ÇîKÛU¦í¹ÀêÀDnnnAAA¯^½ž«ŽùƒöìÙÃãñF¥ÝùŸ>}zß¾}ŽŽŽaaaÚÉ;JTT”¾¾~ÇŽßäIùE§ ñµ¹Q—M_ÚÓþ»Á.ô·©È|l1ÿlo í¹À!|@¬_¿~ÿþýÏUÍ|ذa ÕöôÑ¢E‹:tè0`ÀmOä]eàÀ^^^qqqoò¤Ñ…¸´Ðg™ê²xBYu“L(Uþp½ÈÑDgN¸¶W¥…Ø¢§‚ÐA_Ûs€7BžÁÔ©Sµ= „²µµ>}º¶gñ¶PVV&•JŸÙÁ`888hqžñÅMø‡?FºO¶Ä0´ü\îÆ;%¡3)5o• Œ+æ#„Œt˜nf\mÏÞCï|>Ô¨QgÏžåñx+W® 2dÈÞ½{)Ý”JåÎ;'L˜àïï?hР5kÖÔÕÕá»RRR&Nœx÷î]„ÐÂ… 'L˜ðÙgŸQ?räÈG}ºxñbâ@„Pqqñˆ#>ŒoVTTŒ1âæÍ›åååË–- 6lØñãÇ)£Ýºuküøñ:uêٳ焧$%%µçzËÊÊ.\عsg__ßY³feddàí<6lXTT¾3|øðœœœÄÄÄ3føûû?>55!T^^>wî\ÿÑ£G߸qƒ<øÂ… ÿýw©Túûï¿wîܹK—.Ÿþ9ùzÉ:thøðá?&7æææ’D}ûö}üñÇþþþ#GŽü믿0 ÃÛÏž=;lذ'N=óòòF޹cÇ¢åÉ“'Ÿ~úiXXX=–.]Z^^NüæÍ›S§Nõóó³³³siŽŽŽ »wïž0a‚X,ÎËËÿ‹ƒcfddÌ›7¯sçÎÝ»w_¼xqIIIßNllìgŸ}Ö¥K__ßaÆ:tˆ¸@<.Q1»Ñhhb%Þ"*BåÒˆ­‰]7'T5É>9–i¸*ràŽd¼C“DñýµÂ¿|`±&*|S±„jÊø÷r>Ú•b¿î‘Ίû¡ŸLjéZ.·?Íã‡Ý/î{ü³â\^£XAì•*°o®øÿ§ûÅý  ñW3x¸ ²×§ÑBhÃíâÐûü™D\ߥt^—M ᛲ«E!‘LÙï¯äÎ<έ­8—gòÕÿ_›­¯ %¶í~i·- f«˜­~Ðckâ¥t^{n~xÀ €w>ŸæÌ™#GŽ„††îܹÓÔÔôáÇÿûßÿ~ûí7¢@ 8pà§Ÿ~š’’âååUQQñÃ?øûû§¥¥!„ÄbqFFž9&777##ƒ’Esîܹxj¡P¸eË–=zÈår|Wyyù¹s碣£ñÍÚÚÚsçÎ8p $$äÀæææwîÜ?~üîÝ»‰Ñþþûï¾}ûfeeEDDTTT;vìúõëí±hÕÕÕuîÜùСC;wîׯ_ddäæÍ›ñ]ééé.\HOOÇ7sssÏŸ?¿eË–®]»>zôH__ÿøñãW®\ øï¿ÿlll._¾==½óçÏo۶ܸgÏžsçÎéêêª÷Ç0lüøñ3gÎäñx ¨¯¯Ÿ?>{Ù¹sçÈÈȹsçVW7‹–yóæ]¾|9""ß|øðá{÷îi{./Biióð¸qãÄb1†ayyyººº¦¦¦2™ ïóí·ß"„V¬XAµuëV„ÐG}D´àþ–äÁŒ²²²JNNÆ0L¡PŒ1!tìØ1¼.-Z„oâ&8„ÐìÙ³¥R)†a))) ÃÉɉÓÄÄÄßߟ˜[xx8—Ë­¬¬lÏÅîÛ·|v…BQVV†þûï¿B»wïÆ7 ÝÖ­[ñ– à-“&M’H$†={–²...¡   bØÉ“'#„~ýõW|sÿþý¡íÛ·c&•JÍÍÍ E"1‚›››‰‰ >>…#GŽ „Ö­[G´|òÉ'¡sçÎá›Û·oGMŸ>ð£G"„Ö®]‹ïâóùVVV~~~õõõxËÇBÇÇ7ÓÓÓ™Lfhh(ÑáÁƒ7nÄ?›››ûúú’'ƒë؃-úúúÁÁÁä>ÀÎÎÎÛÛ›Çãá-ñññ¡Aƒiüv222Ž;¦P(ðMgbbbiiÙÚ·Y'”¡%wÐ’;[ð–z‘Ìÿ—X¼ñnN=†a_œËEKîЖÞAKîtß’0ûXæùÔ™Béós Zr‡¹ìîÏ7ŠRÊšŽ'Tq–ßCK~€u6¥§ÃO1'«ne×Ùûdö±L ÃîäÔ1–ÝEKîL;”Þ(– ¥Š¾Û“ð³$ ÖœÎÁí»=éP|åÜã™ø&Zrçèã* Ú$rúÒ;hɉÒˆË ü--¹ã²þ¾¹ùn 1óN¿ÅÍ;‘µ7ºð‘ÿ¤¢%w VÞ¿’^«Tb‘yõøÈ NfµçGxŸˆ?üò¯€·°À;CXXØ¡C‡8BÈÅÅ¥ÿþ<¯ªª !„aØÆ---ׯ_Oôÿì³Ï¼¼¼.^¼¨îv¨ÎåË—ýýýBt:×0„£¦Fú÷ï¿sçN‹…òóóëÖ­[aa¡X,FUTTÔÕÕõêÕ‹ÉlŽR1b„H$zòäIû/6/¯ÙÎC§ÓmlÚ 3[¶láþŠÏ<,,ìÀl6!4|øp¨ˆ£§§wåÊbØÕ«W#„Ô½^B,kÒ¤IçÏŸÇ[ââârssLJOá?þ000øòË/‰–?þ!D±˜;wnçÎ÷ïßáÂ…¥K—zzzâgG9r¤²²ò‹/¾022Â[ºtébooùòe…BÚ·oŸ\.ÿꫯˆ]»v]ºtiûWU'N”––._¾ÜÄÄo rqq¹víšFs®——׸qãèôæ¿&&&¡¡¡UUU"‘HãøKšE2åÏ7‹ŸÎñù96¥\€šjáf„žš1 M µº÷Yà®qžC}ÍöDW¤UBë‡8¯ìëàg£76Т‡1B¨F «È0 ­¾”2à0n-`ÑÛÝøä Ÿ]ã<BËÏæ)”˜›9w÷x/C®ÄBÈÆ­Ë¦Wò¥;”!„ümô.ÏñŸd¹c¬çØ@ |ª¸kkBI“C¡‡fƒ¡D®|R! ·Ä—ðñ™ô6}´4hûÇ3¬ïäÔŸI©A}?Äe ·)†?UWMÞ> © ¼3ØÛÛ !dkk‹âñx¶¶¶%%% ÇÇå"A÷îÝ333³²²ÚÖT!gggõ‘ÛèïèèHvY$OÆÔÔ”ÉdÞºu‹Ø›ÒžË6l˜­­íW_}õøñãÏ>ûŒp§l rÆT „¹®†™™Ymm-ù===¼'N‡ôôôZ œ›1cÆ–-[:4vìX„nÖ›2eŠÆÎ™™™\.÷믿&Zp¥DÖ·;wî 9r¤B¡ >zªÀoÞ¼IVÎ\.W&“•””899åää „‚ƒƒÛ³Œí$33!tçÎü;Âáp8J¥²°°ÐÃÃCãQuuuñññ%!‹¹\ j'þi!‡Ø">‘ÓNCs»ÚníŽoâA†–ú¬mc<ˆ{jlBHÍXØÃŽM‡Ùò3¶˜ŸZ.@Íìlmm "ÎJ›âžžwÒÁôê&Y\1_ UÐiè×an¡SÉ5b¹!´¬—=‹Ñ|JžPŽ2æ6g”!F ä_r™@¦ÀÈ-x¾&}Ï/öÓqþ~ØüþåjïzV]~­—‘mõ¦‡Z½Âï^ à]‡†!„p1C98fff!Šz®‘Ÿë¥R‰b³Ù'Nž¼‡ K—.ƒ "6|||’““---»téB´—••!„Èщfff®®®VVV!<ì“0å½ð“&%%ájÇØØ¸ÿþ¸È§ T*-ZôÏ?ÿ(•JŸY#„…ppS.‹nkÄq1Õ`îd¢ƒ·çÕŠñȽ, 8Í2^,W>*hD…9è±[´}fµ!¤Ïa˜ê²öDWàƒ¼M)'½ý4T/·F”[#2æ2M8ý}ÚÓÿ—_~ùóÏ?-ZôÃ?àÓ=zôéÓ§[ë;Upgûküþ C\„›1ÑXÝ$ÃÝ5LZ,Þ™UB܉t€— † xb¼ÝÁ˜C³°®yWÚªPW3“úF ¸^‚bÐivFÍÇî©É”¡à§Ö?ÜnébÆÅejƒX¾'º!D£=õ)-å+”Bw|Å‘)° ¾!4&ÀbÏ/£Ýw=hˆ!€÷û÷ï“C¹¤Réµk× ¼¼¼ð<䯵 ¯Š¨¨¨òòò•+WH$’ŠŠŠÍ›7aoíÇÜÜ|ãÆýû÷ONN~µsnll$GâëF¬’:“'Of2™‡:vìjÝ_!äå啟Ÿ›Ý4RYY¹|ùr??¿ÈÈHOOÏ 6ù<===B‘‘‘­ëîsçNkËE©LCéÃd2)+‰ŸôÁƒí\º+W® „¾ÿþ{B”¶aIn+rjD¡NOÍnê>¥äZð„©°´¡ùr”úâiúÐÏzØ!„èOL*4¯-_z?¯!DœªV SWƒ!™B‰R(›ÅÛ£ÂÆ¯.æã»wÐÜ1BÏ*‘+gÎ,k"„Ü͹¸¡¨¯Hž¹Ãð‰•ÔK u4«Á½1ÓglÐêMo„ð>Àd2.\ØÐÐ0{öl\J¥ÒO?ý´´´tÅŠ„ "îxñâE„P(|M“qrrb±XŸ|òÉÌ™3W­ZµfÍš­[·â¹+q$‰¿¿¯^½4~ðàAÂØÔÔ”ŸŸojjújý$ÅbqïÞ½qéUSS³páB„zaFKKËÁƒß¿ÿßÿ ööön­ç’%K¤Ré¬Y³ˆ¢ …âæÍ›ùùÍzcáÂ…uuuÛ¶mÓÓÓÛ¶m›\.Ÿ3gîj;qâD++«_~ù…¬ óóó¯^½Šž5kFûæ›oð C©TºeË–Ñ£Gã{CBB„Báï¿ÿŽÂË]8p€2=[[Ûüü|\ ã7Àرcíìì~ÿýw²Î,,,¼|ù²Æ Ä¿¢´ã®]»ˆ|9ê<.áãj1ÈÞ µ>¸g&¥¼1—éfÎEÝ̪[p2{ó½Ò^ÛÏ¥Ö"„&Yöv7FùXëáý—=÷xÖôÃ?Ä\Iç!„ülšw-ü/gÛýÒÿ’k6Ý-µçɆÛÍ¥V:X5ÿD|´+eüþ´ž[q[B(ø©ƒ(‡IC=©L>˜Þñ׸Ó)5úRË(C£¡Nv-WÇaÒ=,tBÑ…óOfŸLª>_µò|^ÀoqMB(³Jø¿#™b+¿¹\о»^/ à=᫯¾êׯߡC‡Œ}}}ŒŒöîÝ;eÊ”åË—}ÆÏd2׬Yãèèèææöšfâíí=iÒ¤ÊÊʘ˜˜³gÏîܹsÑ¢E!!!‹-Â;Ô××§¦¦¦¤¤h<üæÍ›¾¾¾½{÷vvvÎÍÍ%—[|%y{{÷èÑÃÖÖÖÆÆ&99yÁ‚ýúõkã3f`V__߆y_áÙ³g_¹rÅÞÞ¾sçÎáááæææýúõÃ/öܹs'Nœ˜4iRÏž=Býû÷7n\tt4^‹B__ïÞ½4-""ÂÓÓ³W¯^nnn®®®ø^„¯¯ï×_]\\ìçççââbll¼xñbÜćZµj•¹¹ùW_}egggmm}öìY\’™2e †aþþþNNNË–-CéêêîÝ»—ÅbõéÓÇÃãW¯^îîîÎÎÎDíG Ë—/g2™cÆŒ uvv^±bEÿþý[[ø§„„ÊR÷ÌT7!nÿØ7îmP¶ätÎý¼ Í ³>0¹YϵÆE#O(ßõ°ü@l¥X®áoŽšbh§J,mZø_Θ½O–žÉ=“Rƒ÷GÍïnǤÓBKšŽ'VÛqæ„Û ’E î`ŠÂ0tøqUVµhiO{s.RË(ãnÎ5ÔagþÛpWÜHø×ƒ²±ûÒ¦ü›þë­â&‰ד‰¥ÍöLBµ€va¬[·NÛs€×Γ'OpÇ6CCÃ6BÅÞZX,–R©8p ÑÈd2mllŒgwÔÑÑ™:uªŸŸŸ“““žžÞðáÿüòË+Vàn¢8ƒÖÑÑ133›={v§Nðq<== @dæÄ4h.Ùl6F2džÙ/·0xð`r JƒáììgÎÜbìææ6sæL[[[###&“Ù©S§… ®]»–’±ÇÑÑq̘1ºººl6{РA[·n 7554h9³+ŽX¦´Ðcõ÷2™bû^R+1‘Læh8§«³©y—›9wr°•‹neÀî`¥;Êß|Ó(÷O»ÙÒŸ Gƒ6³³µ‡a¢Ër1ãŽéhñ×Çž¸dÒi3ìmŒ8æz,K¶ŸÞ0_óï;ñ1õ3âD¸I䘛9÷­÷Lô2á²ÌõXs»Úú>5<é`ÆaÒõ9Œn.F›G¹ÏéjS'’‡8L µ2æ2By ­þœ®¶^–ºä™{YêŽ ´ä0éVlGN¸‹ÑÌ0ë#Ýq?XkC¶\uv2øv³¹ ï;åååDZ¯:3E¼%О+‘ ¼£;v ÷ʳ··ïÑ£‡¶§óžƒg©®®677'/^¼eË–””??¿)S¦\¸páÉ“'xF“7Œ«««@ POÀÓ6iii¾¾¾C† ÁnÚÃãÇñâ.¡Q£Féèè¼Üx¯pàƒÛ`?ÿüóôôt¥R)‰þû�{÷úøøøøøäåå=ztãÆZQƒ/ÌÎ;BÓ§O×öD^%àºÀ+æ›o¾IKK;pàÀØl6ž÷²oß¾;vì Óé999ëÖ­ûßÿþ§íi>b±øàÁƒÆÆÆ#FŒÐö\^% xÅ_½zµ   ==½²²ÒÚÚÚËË‹¨…8`À€hqzþù§\.®Ch4Ú–-[¼½½5†Õ¼»€ àµàììììì¬íYh€HQÓ~8NÛÉEÞQ †à!À B€„( >P@| € ø@Að‚à!À B€„( >P@| € ø@Að‚à!À B€„( >P˜Úž¼Qšššrrr´= ^&“ifff`` í‰¨©©©¯¯×ö,Þ"`5xûA|XÔ××ÇÆÆj{¼,\.×ÒÒÒÊÊÊÒÒÄá[Bbbbzzº¶g< ‡#‰´= ^"‘¨°°°°°!Äårqehee¥¯¯¯í©}¸”––j{ o/4Á`h{ a¦í9Àk'###!!A۳ൣ««KXA¾aRSSSRR´=‹·OOÏàà`mÏ@ @ ´= ^¡PXUUUYYÙÔÔÔvO]]]\‚8|c$%%¥¥¥‘[üýý---µ=/-£«« w o- €wBVUU=SêééáÊÐÊÊJOOOÛsŸ)((ˆŽŽV*•ø&N uuuÕö¼Í€ Þy„B!® Û)‰˜C]]]mÏý=¤ººúþýû‰„hñöö ¤ÑhÚž@!ð^!peXYYùLGq}}}Ârâð"îÞ½ÛÐÐ@´ØÙÙuíÚ•É„lvo €÷@€[+++…BaÛqqˆA¾<2™,**ª¬¬Œh166îÙ³'¬-À[Bàƒ ©©‰ˆ9l8$ÜJ¹\®¶çþ®‚aXBBBff&Ñ¢££aff¦í©Í€ >8žK–C‡/@NNN\\ñ¼Á`0:wîìää¤íy >pššš·R‘HÔvg¢”ˆÃöSYY)•J‰???mÏ AOáóù„åð™âÐÐÐHH££££í¹¿íðùü»wïòù|¢ÅÑѱK—. CÛSø AàóùD)‹vŠCÜxâ°5¤Ridddee%Ñbff+ E@À3hll$JYˆÅâ¶;n¥ u(`—““C´èêêFDD˜˜˜h{j( à9ÀÅ!n<|¦8422"ÜJ9޶çþ¶™™™@<0™Ìððp{{{mÏ àC!¼ „[i;Å!n<qX^^þàÁ™L†oÒh´€€€:h{^ àÐÐÐ@X%IÛŒŒ·ÒV644Ü»w¯©©‰hquu ¥ÓéÚžÀBxÅ444–ÃgŠCcccÜrhaañ¡‰C‰Drÿþýêêj¢Å¢GÚ:h„ðy^qHXÙl¶¶çþ&P*•111ùùùD‹¾¾~Ïž= µ=5€„ð†¨¯¯'ÜJÉUÚ5bbbbù”÷^¦¥¥%%%›,«[·n666ÚžÀûBÐõõõ„å°mqH£ÑÈn¥ï«8,))yøð¡\.'®:((ÈÓÓSÛóxÏAÚÃ0ÜrØ~qH¸•²X,mOÿURWWwïÞ=¡PH´xxxÓh4mO à½!¼-â°²²²ººú™âw+Å-‡ï‡8‰D÷îÝãñxD‹µµu·nÝÞW»(€ÖAo#¸8$ÜJ‰’}yŸÄ¡B¡xôèQQQÑbhhسgO}}}mO à=!¼í`VWWGXÛ#­¬¬¬¬¬ÌÍÍßQq˜’’’ššJlr8œîÝ»[ZZj{^ï à]‡¸å°=âÐÔÔ9´°°`2™ÚžþsPXX­P(ðM:êêêªíy¼W€ €wBVVVÖÔÔtpqˆ[Û#ÍÍÍqË¡™™Ù›‡MMMwïÞmll$Z»téò6Ø0Þ9@РˆCÂrH§ÓßÌ$e2YdddEEÑbff¡£££ÝÕxçA€f”JeMM îVZ[[Û¶8d0¸åð͈C Ã?~œ••E´èêêFDD˜˜˜h{ÙÞ%@ðlpqHX‰Ì.!Ä!îVúúÄavvv||<ñ0Ãd2ÃÃÃíííµ½Zï x> n9l¿8ÄÝJ_‡8¬¨¨xðàT*Å7i4Z@@@‡´½Hï xqqˆ»•>SZXXà–CSSÓW%ïÝ»Ççó‰WW×ÐÐÐ7Óðî‚€W.q·Ò7,%IdddUUÑbaaÑ£G‡£íUx«AÀ«G¡PTWWã–C×¶8d2™d·RögT*•qqq¹¹¹D‹¾¾~Ïž= µ½o/ x½ÈårÂrØqH¶>¯8ÌÈÈHLL$oX,V·nÝlll´½o) xsÅammmÛÏ!,‹°¶_–––FEEÉår|“F£yzzjûÒÞF@ är9Ù­ô™â°š˜˜´-ëëëïÞ½+ ‰àààsFxA€ö‘Édd·ÒöˆCÜrØš8‹Å÷ï߯©©!Z¬­­»wïÎb±´}­o x»Éd¸å°âÐÒÒ·“Å¡R©|ôèQaa!ÑbhhسgO}}}m_"ÀÛBÞ^pqˆ[ëêêÚ~na³Ù„[)!ŸPš³Œ* mÏèt:FÓö,€÷fqqqBB‚@ ÐöLPAGG'((ÈÉÉIÛÞ[è?5o!b±811ò¯ºP(ÔöÐŒP(T*•ÚžðÞÂ$>éééYZZj{> êêꦦ&mÏxÿi„fff]ºtÑö|@=AðúŠ¥Uu^ƒ°ž/R(•½‚ÝXL†¶'¼ÿ”T5¤çWê°™¦†ºfÆzÆz $ü´ó凞‰R$j¸¿îæÍÆGüΜaš˜´ÑYRRRófÝ,++· ´=÷—ÄYY >_ÏߟÎáh{6¯‹&!¯¦¡ÔÒÄIWÇPÛsù Q(ä‡NoîïáÒQ}oRVÙ‘k‰÷ò %BÈÞÒÈ×Õ:¢“«¶gý²ð…QÉ…QIõM¢í+G¿á³cÊ*ªzTø )x„¾/3Zu]STrფ%†mX<ô _ËóRQËJ.xT`¨§óÍìþmw®m^zž’SÁJB¦†ºÃ{úŽï`j¨«Þùî£óM‚†úNÑö%ï? x?‘–•5DEIKKe<ž¬¶VÑÐ@ãpúúlKK®»;×ÓSÏ×—Æb½¾ Èëê))‚'OOžRRøÑÑJ‰ß…Éd”΢œÁ“'´4Á“'MqqÂÌL¼Ý죴½/‹´¢"mܸ†û÷B;»‡EDh{R¯ a#ÿŒL8Ž!ŒAg ŸÝ3h’¶'õÒÈçý¼}QZV|Ÿ§.“sÊçÿòŸ\¡Dp¿™Ý¿kGgmOùá $9%5¹%µ¹%µiù•™…Ux²OÛ7pv Ce5 ¹Åµ¹¥µ¹%µ ™¥5õÍ Çö xÞÑêù¢¼ÒÚœ’ÚÜ’Ú'¹ÙÅ5x{÷@—7¶ží§®Q”SR“WR›SRû$¯"·¤oÿ¨{‡gàaóDz"‰ìàÅøÎÅð…ûÎÇ>L.ؽf›EµQŸ¾²§ 8#-+~Éì_XL¶¶¯xŸAÀ{EýíÛûö5Ü¿/ÎÏo»']W×°sgã>},FÖõñyå3IêÛ·)!Aó©utÈ›M‰‰ñ:µ§ç»Hæ¬Y¸DIJKŸ|üqXffÛÒwŽ˜Ôó÷ŽáŸJù¥Y™ºx;‡k{^U5¥«V][fnj=süJÊ^¡XúÕŸ—q5ˆú~Þ PmOùÙ1nû‰(»=Þ„ óÅþÒê»:ºÛ<×Pžxpàb¼Æ]oäZž‹‡î»žô’Îå°æŒîR^Ë¿ô !”YX½åXäò)=)Ýÿï§?Œ{wE âõÙ66ûÿs¼µ0ÆŒƒ222rttÔö|@%%%õõõøg___: ÚRYyð`æôéÅ¿þ*HJ’?]@¦‘ÛÎŽÆd*Åbô´’&“‰ êoß.Û¾½æ¿ÿlæÌ¡½Ò¥V46Ò9.«©¡ìrþî;£åe0Þ‡id¤”ª™Ÿõƒ‚,F¿iï¯ç“JÉ—£²MM™Ÿ|‚HÕS”B¡a—.ºÞÞÚžõ«äJÔ^c¹…É`úºöxæ ¥œF£ÑMÛWðQ(dtú›ÏŠøk7Ì(¯*¢Ñè«þioCõMÉ©8~£ùQÞÄûÅÔÞ´wvá9,¦¯›U׎ÎL£°¼Ž¼kúÐGkã×=#n׎Ξ¶å5üF˜h77ÖûtÌó½ Ñá°:ºÛtñsRbXI•ŠÈœ=²³µ™Áë¾–ç‚ÃfzÚvñs’Êäe5ä]ó?îªÑó³õ¡˜W6;ƒÔÔ & ¤¾412g0˜Éé+ª‹ J²z„ ¦½»·,ðvBÞy$¥¥Ó¦ÕߺEnäØÛ[Mj:dˆAhhKÜšRÙ”’RwíZùîÝ¢¬,¢³¬¦¦5IóÂ8¬Xá°b°ooò¹h ÅU•eiéµw/B¨!22±‡ŠŠ`p¹Ú^ݶ¨¿{·dÃ~\\xy¹æJ%R«¥‰ÉåÚžø+F‰)ŸÙBA,Ĥž‹L:Ñ=p\D§ Ú¾‚×BVQ̽ÇGëø+¦~ÝçR(¿n_R\–‹ú¨ïd_¯Põ>ùe<â³±>÷~´îàbÙÁÅ!4¸«w¯¹í4êèñ|ºcP¸þA‡ÍÜðï]¢Ýÿ9̓¡Žî6¸m­W°ÛGKþ!ÚÙLFW«7p-ÏE·]·B(Ì×qìªD»>—íjgö\C™µ¨Ç*^S“HªÏ¥ú…Ž<+*îJnaZlÒíC§·L½DÛ ¼Ÿ€ à݆wéRúÔ©r^Ë£Ëuþæ»Å‹5ø[ÒéúúöK—–ïÚ•ûùçJ±!¤çïÿºæG£“!½ugBï[)%%%UGV:Ô”˜ˆbÛ¶êÖÅ044îÕ«þöm¢…illܳg;Nò.áãÚ=·ä±j‹fó †)sK³®§äÜK!:í}s¨k¬H̺žy­’W€²4uz'=rfkbZ³ å>š8‹+ë‰Ïtú»,Iˆ%*¯W\íÌ tßhަꧡƒ8Ïë/J¦Ž/"ovp±d¿Å©_ëU¼9üÝmž÷åê Ëx¾nÖ”>4}pŸIÛö®A¼¸ÓÏ+4з›¶/xAÀ;LýíÛ©£FaR)ÑÂ23ó;Þ0ü>K4&Óvþ|ýNR†•óxz~~¯o’4¶ÊKß6Âélêëá·SÆvè  UFa™›·ÑÙkïÞÔaÃ))!¦‰I‡C‡XÚ¾‚WL·Žcʪ³ãÓ/#„hˆÖ3x’¿›fÑýäÜéÛ¿“[ô¸ÆÚžþ«D‰)Ù?C-fa=×~Åe¹§¯4[–:¸ÙZ9kì&•µh§÷Æõ®’Ç'o¾‘Œ2d ÊTV_Æ>Iñ}}3Ùq^òû„ÿ \¸êM(‘)4öê:x÷áÅ!BhëÞÕ›¿;§¯ yŒW BÞUš’’RGŽ$«A:‡ÓñúuýV´¨cnܳgÍéӇט[‚®ê Ú–Æ£ÓŽ”ÊvuÖ ==² d·)ðtœœ‚ãâcc•AHÓÔTÛÓõÐhôqý¾ê4‘×Xniâdfd×ZO6“ú…¾g‚N£3,¹¢å§RkôZψaØ_¿Q(šÅ^Ÿn£´½o”òZAø›/IÉ—Íbx9½øëž¬Âjòæ[˜Q†L‘ª |ÓhÛèpt»…ºùB¨¶®òßS|:õm_=ð¾ñ¾yªð¡ TfNŸ®hT‰éwùùçö«A¦±1BˆmiùúfJ±¶]ë‚b$¤¿ÎÂ/ C_Ÿ¼ÉlÓBˆ¯€Q·n&¼—jÀÊÔ¥ƒs×6Ô BˆÍR„:¯W/½y8l•k|ÝŠ7*îJZVKŽJ/÷@m/À¥¨BŪÖÁåÝÉÊR®ÑΖ¬—pòL/¨"o¾™`È&¯”§@£ù¾ÎpÇîAÄçë÷NTTiûê÷ „¼“T<Ø”¤’û[ÇÅÅ~Ѣ焯Չ‘¢ÛöU£ÊÅ·Ò±"YïW ‰× E,!„¸œ·+‰â+¸F–J¢Å×}nüK|fÐv­ø‹¾¯Ý,uuØNÖoô‡±°¼N¡hñhxû$†¡ô‚JbÓÑÚØPï­®²]ÔbÏt¶5ÕÕyuìÜ‰Ï ¥âØùíÚ¾zà}!ï Jeþ×_SÚì,@Ï_7°[7ó‘#_kjd`›ï¹:k ŠÍ“að¾Iš×ƒN5ùrØÏ‘§þ€NW‰F¡èÃWK~QFzNK:+gãÊ…! BogË7ü #§D¥¦ŽŸZN”öSTYÇHˆM_×ê Ð$’Vœu}^s6T7òfTÜU‰Tü¢ƒ€޽ߛwîÜÙ¿ÿÊ•+½½½B>ܵk×Ò¥K;vì¨í©½Fòòò¾ÿþû & 0@ÛsÞ70…‚Í»zµîêU«©Sm,@! «>y’Ó”œL£ÓY––ÆæÌ4RqoÛã·ž/º•QPUVÝXÉã›é9ÛšxÚéæMNWQËOÌ*Ë/ã‰$2G+cGk“B’˨K{]ß“sÊ£’ ²‹kjêvFÃ={½È@N±Š T×Eiù•S s‹kë›Da>Ó††´vÉ©9äÍökK‰T~+.'1³¬¬¦¡¬†¯§Ãv¶1ñr¶ÝÛŸËy>—{¨ù+®®k21Ôµ·4 óu´µÐÁ%WõÂýZ‘¯B±ôü½´¬¢ê¼Rž¾.g늑/°È!]®¾™‰um]ÅÓKÇ'ßí2ðÅFu^™ Œ‰‰Ù¶m›‰‰É† X¯3èåÑ£Gûöí9r$.ããã÷íÛׯ_¿×'{õêÕÔÔÍxÕeÊÚONNÎÞ½{Ú„ëׯ߷oßÑ£GCCCŸglàƒ“É¢¢DÂŒ azzct4QÆÝdÐ „‚ÏϘ6­æÌòQ•ä­Zåù2Q¡òÀ¬¹sñ² 85gή[çüí·Ž_}E1mÅ)‚6fe·p¡û–-øçô‰ÉŠ#oª£%HeŠ}bÿ½üX"¥–Ðôr²Ü¸t˜¹±žÆ3 ªöžLÌ—“ü*˪“sÊÏÝ{rüzÒª½}ÚõÇJöœ‹9q#Y&W´Ö§=„÷ò^ŠOÊn)šQPu36{d/¿/gôyæáÈ‚ÐÌH×Ê´åÝÄýÄüC—'d¶|¡ñé%2…röHÍ¿ŽRsU~ùø»?[Vñšþ9s=&K Rù‰Î,¬ºú(óèµÄe“{ön—ÐKå{ÏǾüXª¶¼\,ÿX6ÂÄ@ÅÙ;ûYJ!t9*cë±ÈÚ†æê/™uÆÁÖ„¡Ø¤Ûê‚°Iаïøo)Ñzºýz|<¸÷Ä÷&›.ðºye‚ðûï¿?þ#FŒÐöu½ ())ùꫯˆ¹\ž˜˜(‰¤R)÷­L÷G”””——WUUõòC!„þøã]]ݹsçjû²€WOCddRÍøé,–(;;uÄazºú^YMMò€aYYLcãÜÏ?/}ªßÈ` Eþš5 }}»Å‹Éí¶óç×ß½Û”@Ñ!]ƒòýմi:®®QQ¢ÜÜæ‰q¹fÆ cê®_§ bðÊ߃(•¹Ë——lÚDÔU×óõµ?^Ïϯ1:ºöÌaf&Þ.ÌÌLèÖÍcëV›vþ¼<—_k›Î%EE™³fÕݸ÷亻slmù D®~||RÏž>'Oš ÚÆ Ùóç×^¼ØêJ… Ãæwä²êêìyó(j­lûö²í-1-¾§Oë8;ç,\X}ò¤Æézz­«xÆü¯¾"n''ËÉ“ BC›kÏŸ'D¯¤´4壜V¯v^¿¾å` ‹kÍðH§# ËûòËâ_~Q߉Éd¹Ë— ÒÒ¼þù=©¹w^[¯q‹¥áïEZ~ä©[¿©œSîü¯%ðÕÌÈž"1„E%ºµWt:l=[ FAMM}³–“ÊD7bö•TeNú3¡ cÓ.»·IãÄh4ºT&Úsn¡BlVKå:¹Bv=zϽLJ•˜RãR™øÊÃ]†õ FÙÕ(¨9yó^C¹ñîã#w!6çŒÚL„å59Ç®ÿP^“ƒ¢Ó薦ζniU‘ª4»8vÛñ¹³GþakáA>P,•å[Œ ÛÊo¤ÄZŠaë·7>-æIÑÏûn—’R§)®¬76Ðð]‹¥òÿ=sJj[ÎþÔJ&‘ÊÚwërT†zÿS7“gÓh$$ B›énÿŒ¯òÔÍäí' ÅR[ ÕÓ{û¹Y7 ¥·âr^ŠÇëxM_n»¸ãËŸYŠ#*¹ð—ý·*Tóµ”V5©E3’!‡Ít·W)I/KWn½óDÅ¥“õeX ÃP몜"·à ¥ƒ\.[óëô‚’æ»kסõü¦úñÃç#h¯FÖÖÖ^¹r¥sçÎÑÑÑ|wáÎ;cccÉ‚Éd(•Ê·\ "„Ž9RQQáðвçÿòË/&&& ßK¸žžŽ«VɪŽ#×sG5DFÿö›¼¡!„h4¤ö÷I^W—³x±´´´þîÝ6N‘·j•õÌ™„Š@¹þú+B¨ä÷ßs—/'÷¤1™AQ|mæÌ±™3GðäIÜÓò€¯]3êÞè î/ÊzÕiB‹~ù¥ä?ˆMýNn߯=fÍGrZ½:¡[7¼¶B“ɲ,Ð 0ìÒåÕN£ AXûvêÈ‘¸öc™›û_º„«bL.Ϙ>½êða¼›R"ɘ2%8)IÇIC}ðªC‡²>ý¯!Ac±ô;uÒ766=~,Ên¶±mlð ç]º”1m𬶵‰Ž³3BÈrÒ$Ž““(3SÝœËhEV9’·b±Éqt ¼·Lšé´fMÊàÁÍê!„a…߯ױ£ÅرÄZ9û­ŒÇ«¿qCðDåiI)?=šbô¦P±w¯ýÒ¥ÏU‘ÒÞÒ«Wðd¡¸!1ë†T¦ÒÃf©<ê)1åÑ«ß%eßl{@SC•Çq¹Bvàâ—™…Ñøf·€1Ãz,¢Ñè¡Ü’Çû.¬$NšQððzô?»ÌÆ7]l;ö š„OŒ° 6ÏD©8pquiU¦ÊlIÅ0þ½´&½ !doémmæ‚­‚—_RI}Ct÷ñáðŽ£¹œ–ôB)9wNÞüY,mË!db¨b'yœqåäÍ_pé¹±ý'#þ01´FI¤Â½ç¿È/kN%7¼¼féÄ}ä4­Ùù)J¥Š=Ç@߸S“íHÖfÏösæ $›ŽÜ»™N§Ñ†öð ò²ór²¨¨å§æV½–(’ÈBa¾LõOM½`Á¯§ñz ƒ»z=»?.¬L 2ÔÇNoþÐÐ$^ÿÏû Íþ Fú:qÎÜMÝtä¾H,óv¶Ü¶b”!Ô;ØmðâÝIJ<É­x.AÈHªx-ågp9ZQËÿbË…ÂòºÁ]½C|öž‹)©jÑÒu|Q^I­»Uì‰$2r8¢·³%ƒÑê‹3©L±rëŨä¼çŽUc¸:ÍŽi^NÎ6&ëv]Ã71 ­ß}ýÐ÷“uØšwëù¢?ß»ò0“N§èéÛÉËÎÓÑ¢¬¦1%»üèõDÜ ÜÙÏ‘Xs²iÔÛÉ‚<Û:¾hñ†³™…U¡.–r…2-¿2Ô—úxflÀe2è„õ¸IÔ–ëåÞ.­È—Ê$äW9_'Ô ÎÉ‹;?þh·U ¼¯æ.9vì˜L&ûþûï/^|áÂ…úúzccãöØÐР«««ÑÅT.—óù|“—H^ÇãñLLLÚ0—×ÕÕÑŸõ¶¾µkÁ0¬¶¶ÖüYùÖÛ¿íðššsssÊ¥±X¬ÖÔ`mm­™™Yk*•ʆ†ccãv-ËåMMMm_fmm­¾¾>‡Ãiï ÀkƒcgçòÓO!Ë {ª”Ïæ]¹Â±·÷Ú»×°kWºŽNý{ëÖQ|q¥a5mšý’%\OO9Wùï¿k×bŠ–'3¥X\{é’¥ZPŸÝÂ…eýEØýB˜\.ÊÎÖ R›&jŒŠÂ?˜LVƒ˜B!U³„³^i=ƒÆG T“Öø=JŽŸdø_¸ãåExÌb EÆôé¡©©´7R(Bœœ:b„‚ßüJÛkÏÂFJc2;<Øøà¸°o‘74ÿü³Ç_© aù_}UôóÏøÇÁÁçÄ ²siÕáÃ3f`2™®§'Þ".*2Šˆ`èëó.]"ËB“~ýôƒƒ›ÏN§ãýÍG25 !”6aBõ±cä3k„â¼¼,Õ7Pž»v‘ýTiL¦ÏÉ“±>>Ò²TöüùÆ}ú°žþ~súúkü»x`jJ.IÂåÇÆêùûÛΫçï/)+«>z´æìYÊ‚”nÝê¹sgû¿ §Á]?E¹Ù¹úy¥Þ \.Q(å=úˆ%MYE1D;F …:Xu uäê·„t± ±„Øåf40|Îù{-Vúû ÇzŽÓÕ1BÙZxàÆ4'ÿ“7&yùᎺFªc0‹ôXÙ ¨Fî½¼³_Ë»ÝÂòÔÝg—Ie¢–ïK*xœqµ[@Küm¿ÂÝ!„ÍÒIË‹$ËBoçp"Ngë·¼»É(xxâÆO„)rÆÐŸMžJb[wúП¾ÿgá%Ëk(‹yr¾{à8âðêZS$BÈ@¯­ˆ>rþ•g=OÉ)ÿbËE^£!´xb ñvwóî.#{ù­Þ~95·"Ìבr`E-Á/ÿá*ÈÄ€»lrÅ 6kDç³wŸˆŸzŸÞO̯â5Yšê«Ï!21ÿ»ÝךġOFvîì§r.#}‰´ÅᢠÑýâ¶ŸŒB±˜Œß— ÃÕ BˆÃfxØD%›èy ¸MúºZÕÔ f­?Îå°~7ÉÑÚ!îï4dñnr·J^“º Lϯ"[;ÛÐ¥b©|ù¦ó±iÅ!:öåŒ>„Äî}àb|^ió/¨’ª†˜Ô¢ˆ ¾Ä ™¥_n»TÇ!„VLí5º·?ÞîfoÖ#ÐeD/ßÕÛ/§çWQ–!¤Ä°\M¦QüÛ_øÛ颊ú¡Ý;ÌjoeÜÆÒhÈß݆ðª-¯á·ÑY_WåÞV(å•…NöžDKU ÕÝZ&—ÖÖUZš¿ú` àýãÕdý÷ß---ìuŠÀ€IDAT{÷î=qâD‰Dr²7!‚¦¦¦ XYYM:µºº%{ïÅ‹CCC LMMíììæÍ›×¨Zj¬m„Báüùó­­­ÍÌÌŒGŒQZªòCRRR2jÔ(###SSS ‹•+WJ¥ÒÝ»w[[[ÇÆÆÊd2kkkkkë1OóLtëÖÍÇLJ{ölHHˆ¾¾¾‰‰‰½½ýgŸ}ÖD*W½yóf“üüü#F˜›››˜˜TVV"à­A××—Ò¶µ NH05ŠmeÅ4226Ìÿ¶5õo³ÝâÅÞû÷ëwêÄÐÓã888~ù¥ÕTj@‘0-MýŒ46ÛnáBJcÕ‘#H¼§NŒŽ$£=BHVSƒÔš^i¤Dñ/¿`ò–`!½Ž¹žž”>GGã^½È-¢¬¬úÛ·_á4Ú ï‹/5Èqp0ûè#•ÝtºåäÉä†Êÿ%_B¨ø·ß5ˆò9z”jh9i’ÃçŸããã-¶Ÿ~êûßÞPò™ îúóÏø?—¤ëª$Ñë "rP+‚°tëVâŠBLSS“¾})}˜FFæÃ‡“[d555§NQºÑ ]//J£ùèÑA11¶ EDXN˜à{ú´º‹¯(3½–&ΔŠ…ÍâNòýäAßRBïètÆà®ŸÿüÜZ^ÐdÇ¦æ¶ØáÃý¨õÖ=ûÑé-‘í2¹$)‹j´2¥N¬®±ÂÂÄiÒÀuK&î›0`-®Éf7¹BªÏ5 é0„|”“߸~_Q†ª®W1ÔGtš0uÈ÷ãû¯Ñ×Uy;àч¸À]fsVbÊs÷¶jÐÕ®“…‰Š›Ë1èàÒÜ—~‰¼)R ÉʖµGY™OëžÛ[éÖµNRVÙ gp5Ø;ÄPƒÖfa¾¡ªy\”öå¶K„Mlòà õÚ Fú:ŽªÅ! Uk â”×4®Þ~Wƒ:læè^þ”J%–žßòj¬ƒ³f/‰S·Rp5ˆîEqO-,¯'>»ØµúâX#¹$›†ÜÌ¿ØzÑÑÚdÏ×ãp5ˆ23Òµ0QѺ é1)„~­§ýãð=\ â_·ÚUÓhT=YP®ayãÒK–ü~Wƒ»xjÀÎÂ(ØÛirÄ-*¯ÃíÃ8DÂÚáÜOÖ6·®µö“þm«Aœ9£ºï ®<Ì ×ð ÀfSïí&¡Ê³±µ ¥ƒ.WßÜô­NÖ ¼=¼A˜››ûðáñcÇ2Œ‰'"„þý÷ß6ú+ŠˆˆˆíÛ·÷éÓgëÖ­Ÿ|òÉùóçúé'|ïæÍ›‡ Æçó¿üòË 6tìØqÇŽaaaRÕ­!—Ë»wï¾{÷îY³f;wnÕªU·oß&$eUUU@@À¥K—¦OŸ¾eË–!C†üñÇǘ0a‚¹¹9NŸ0a„ †> ¹©®®&˘›7o†……%%%Í›7oË–-Ç?w¿AAÞA ðùüõë×O™2Åßßÿ‡~011ùñÇÿ ¹ŸQ¸qãFçΓ““ñ1‡ vöìÙŽ;R4á¾}ûfÏž=dÈüÑÉÉiÇŽ“&M"öÖÖÖ666 …ÍáËuuu:uºråÊÊ•+Ï;7{öìÇ÷ìÙ“Ð¥ÉÉÉÁÁÁ?^´hѦM›BCC¿øâ‹GuïÞ}„ :::†††øRôîÝ[ã´7lØ0räH‘H´zõêß~ûÍÇÇçÏ?ÿìÒ¥‹üésgCCC}}ý´iÓîÞ½;{öì=z<Ó ¼I()CB¶óæ±T Ôl#U+"BÈAÕí!äôõ×”¬²š¤ Ë)S(E ªŽU÷M•ÕÔÔ^¾Œ2êÞlD­$Þ”½¢èY„¢±‘wù2¹Ål˜f‡.õ¤&5çνªi´ASRïêUbÓ 4T=.‘¢îMMM äå*øæ›–Îáá†]5$™äº»#„XÏòƒh&Åw€F£«{àcXõ‰äÓÁƒ©ùuž¶SZj5­9Å ™a`à¹k—J®TÍùÛoéª> bM¯áÚƒzžOŠ |îÆ&o:XûP:èsML TÜ/óË’)}Ô3|šZ6ng€g_s·N^>½mh÷ϬL[%§ ùaư_ ª¡Ûß½—©ª·g}£†Dí'5÷.9ŽÑÑÚW½ƒ•ÊUWÔä‰$-Ը>šûM©Ä*jùÇo$mŠT^ˆtîÔÇÇ3˜Ü2cì :]kÙw‹Wà2ŠË¿ & „ÜÜÜBCCïÝ»WTTäè許ÿž={V¬Xñ믿â-_|ñEqq1B¨ººzíÚµ...=Âý?ÿüó™3gîÛ·oÇŽ‹ÚQrz×®] {öì™9s&Bhذa†††Ÿ}öÙÖ­[W¯^úúë¯y<ÞÑ£GDztéRCCCww÷ÐÐÐØØØšššM›6µ6¾R©\²d †a÷ïß÷~Z¸,88xÑ¢EëÖ­Û·oÑ366öôéÓƒFM™2ÅÍÍíï¿ÿþüóÏÛ322Òëé[íàààÅ‹¯[·nïÞ½DϪªªË—/÷íÛ!´hÑ¢N:ý÷ß™™™^jïÂBßÿ}iiéÝ»w#""ð¥H$¸úÅ¿¬Ï?ÿ\*•FFFâYI/^|óæMOOO33³Aƒ=zÔÄĤ¥(//ÿæ›o<==>|hhhˆ8eʔÇÿóÏ?äàÃÄÄĨ¨(¼eИLD§“­m/9¶*¾Ut.—coOé£ãâÂ45•‘Lýdk–™™ùÈ‘ÕÇ-’’’ú»w)ֶʃñTöjâS]Ç"„¤¯Îø\{ñ¢R5 ¦Æè;„I¿~”–†;w^Õ4Ú þ¦Š!ˆ­)~’mCÍh'ÊÊ"ÜJ+öí#§‡%’pRÐqqA/ŸI)YAc0Ô͹ÑÑUWŽÖÖܸo_ÊM[¯iÍ骎»†áá,5·y¶••a—.ähØÖÞb<¦š|¢Ó^ê9L¡QÔ®† C}3²¦¢˜ì¦‡H—î:쇭ۣÓxrŠ™Nu—#¯±%;e“¨½9ÅñäM}¨§ò­a«m(±·lþã+6Qú«‡K-ß|þARþÙÒTÿË}ºvtn{bgî¤WÖãŸÙ,F¸¿æq·7Ÿ8°›ÙòE+Êÿ=$6}]­lÌ5õ骖CPO^ú ©àaJËë ÂòAR>y³ƒ¦š{ÎÅ¢ÑÅÖÔUÕøÇá{ÄçOÇ„«Gʵ 9꯺®éRdúÎÕ«Wz`2U´·Æ :©¹-÷•©¡nkžŒ"2quX][ùj¨Ë+£&=q#‰H!Ãå°Ôý~q<ÍÍŒtÕ£ÓIšßÄ€kka¨Ä°5]É(¨r¶5õ}N]êãpâ—iûÎÅî¿—^—^B£¡õŸê¯ú&‚¡ö‚L$V‰×¥Ñèë–ýsòâΤ´‡zº†"Æv ê÷̳Î+0×üûï¿Ýž>OLš4 ðÇ·ÖÿâÅ‹¡…$·1{{ûððp„ÐÉ“'ù|þgŸ}FŽF[±bBOaúLŽ9Âår§MkI}6pà@„Ðlj³[YY%’ äîÞÞÊEqqq©©©ü±7©Œõœ9sŒŒŒÎ©¾¥^´hÑà§o²;tèPRR¢qÌØØØ'OžŒ;–¬ëæÎkhhHsáÂ…}ŸúPéééMž<ðëj鉥ðööÆÕ úRˆÅâ›7ovéÒ…\£¢oß¾m„R8~ü¸P(\´h‘áÓÄ!4mùòå!Ê´¿ÿþ{Pƒo- ‰Æø7¶ª lÍ9“â¨Ñ¼ƒc3k¥¥‚ôâ§|÷n„×ÃÃ\Í:Gc³ÕÕ9®ì%!‡8â´¦ˆ¨+ƒ¤¼½Z4å#¢+›„É”UW+…B¢³R$ÂÔ¼j‰â"!²‘œB)÷éÓ­®Î”èå µ#rX¬¾æO‹RR`èé1 U²úÛÊÌjå7åF¢¿h3“É~±[£¤:“ȱ‰b0X"I“X* r¨(1¥PÜÈfªˆm±„*èj‚ÐÓ1ìŦ¤Ä”ú\ͦ®6Ÿ‹Âòò& !¡¸|ÕäE²…P݉N=3êÆ¥Ã¯n½vV?sÃ*^ÓÒçf¢µ|’8ÿ^n‰šóu¤„¨Œêí÷Ù8ŠGk Ó=°ÕB±ŠÓ“™šF:q#‰øl¨§ÒúN‰a—´¤ñ45¤zf"„”JìÊÃ/hŠÙjïùØèÔ"„†–LìÑ'ôùJ8bÊ-m±Š¥ò)C‚4VVhlR±w©Ï³¢–OÔf@­›ëø""'*B(ÌDZµ GJ ŠÅ0tøJ‹»D'6Kóë›±ý>£¡”+ÙSŸí¦Ã÷ðì>e<Â3¹ÜŽÏºäŸÎÅÈÊ®ÿZ5æÞ®ý[±K“a©ýÚa³8“F.úå«#_/Ù jx.^ÖB““óùçŸùHÆ÷ù矵ƒ DÒïv_¿Ÿ‹²25X8¾[{ä…²š«!Äf2¦Õ\û‡œ+ÅÄ€k¬OõOÉQùeÞš ¼—KN<ÓÖò U\<(‚0³°ª¦¾Å¶Ö=Ð=J%–UÔrëúºZŸ¸‘D¤E]}˜éådÑÎѦ®ÚÚ-of¤ûÃüAº:šß.)äT32—«àñ²‚÷=|øðRbq:ž–––ЩS'õCjkkuZù£ËãñBºª ètºŽŽŽL­v™F¸\.%æ­wïÞ¸²®®Ã0ý“ßÚ ‰¹Ú+A <_xÌ6*aà1“&&&”¥8p ‰Ÿôejihœ6‹Åb±XmÌx¡XémÜ]tºõÌ™…ß~K4(‚êãÇ­ŸZËÿþ!Ä27·ž1CãF¼+WÈ-˜\^{á‚zn›@]œ`­I8:ih('çjÂ0yc#ÅE©.Õv±)ê¹4u–74´r0¦¨:1GG=??=??Ó§qј\NAú¼†Í¶5íóókŽkTÕ`¿V䙨êÆö3_ k×ÒµQ¼A¡)TËÓë°õ¬L]¬Ì\\í_É$å Yrö­G©gŠ*Òˆ ê™ê™×Ôݘ­¶ïpI+׈aJªò¤3Mì¬M­Ì\ɉXõô¨™b‰µ‚ƒ•qg+<À¯¢–þ^Ú˜>\WÿRœ6T‡:1i*.»mT,ª¨'o:©F©E%’—P½~BhÿÅ8ò¦§£r;®E 2ô@OÛÇ%7b²oÅæÔñEÖf“êí§Q?“Üb•ò3Ý;¹ès5(™ºFQ%¯EvñwR¢ú¶²n”åm#«j±j’Êò>H. oú¸<ŸK|~OLrñmˆÿ9Ã`Љ|0We~6¾½}yÎvŸ‰&>OÜšD)Ô'+]„À+㥡\.?zô¨¹¹ù€Èí666wîÜù÷ß5 BGGǘ˜‘H¤®FœœœBIéêëë›šš‚ƒƒQ;puu-..&RÔP°²²b³Ùåm>ú´ý— Ÿ¡zþÏââb+«çøËÑž1 -[MŽû j´µZ[[s¹\“Ö–?ª¬M/»v.ù[®ªª’J¥/cxÞB°ö=ýSRÅ´í}g=sfáwß‘ÕNÅÞ½¸ ”×ÕU?޲7¯5Ui6thþWÔœ‡5§N½A¨ÁÙ’Çk­3ÓØXEÐé ªí0úµ¶WãâSTŸax¸ûæÍ414&“Æ`0tuézz ==&/¥úÐ,).FϹÄÈ+AÚ·^íPÝhÉj·¯{۴ǘù’(Û')U B“­37²§Ñèt:ƒF£3,6‹Ëfê°Y:4Ú+KÖ…!ìFôž‡)§¢æ»ÚPÏ<¼ãh—nÖf®×í¾»ŸèÌdh~xŰgßr…Œ²}#‚&Ði N§Óé4‹¥ÃaqÙLÖL‘FT˶F !¹!‘ñ%5·B£ Œ"©“áÚîÄ›|¡¤¬ºÅ´hga¤ž§Q &{–ºØšRLXäèA„P'/ªkzÌ“âÔœ ogËŒ§ÙM4Z‰z!&ƒ>þ˃µ B+ãÁݼû…z}ÊËËoݺ¥~Ô²eËètúâÅ‹>\TTtõêÕ>}ú¬]»!4|øp}úùóçù|¾D"INN^¿~=!ñ¬'cÆŒ¹~ýzQQÑÑ£G;uêtôèQ|¯««+Bè·ß~+(( òÐqvvž>}z^^Þ¨Q£bbb*++OŸ>=nÜ8&“ùÃ?¼Ø2º¸¸L›6-77—<æøñãÕÇLKKëÕ«×ÿý—½bÅŠÛ·o÷îÝ»5Ûé·ß~+—ËGŒqÿþ}‘H$‰¢££W®\ùäÉ„ƒÁXºt©P(:tèÇóóówíÚåëë{ÿþ}b)ø|þ–-[ «Ö%ÇùøãýüüŽ=úÅ_¤§§mÙ²å믿vppøì³Ï^æ¾Þ$”tššŸìÛgàÂÚW†ÀZcj +ûë/„ÅØ±ì6Mîv‹«]Œ2{Þ¼—÷fT^kC*E* ê5Ñkp¥„JJJJÈù]Ÿ Å¢TeàÇÇcÏãéM„m~õÊvÜ/³æ CCu‰K¹±[¥ªËûÂB…¢½7?E*1¥F'R]µH¿Òê¬×:1„P^i"Ùhaâ8¼ç’6ô«U !EjŽø Ôê(­zî 43±63Qù‰kÃe!DöâÓ˜Ù_$‘‘ 9é=‡ q%O%£±A«>óIÙ*¾9=:©ˆíšzA) ‹«Åùp÷™h±T>(Ü‹pÅd³NÖTÇ„ìârÄ]G›ˆ Wƒ¡@¶Úš¶VÆ#2±%jßPuWPÎ#'YmÍ1ùtºÏí%N¶ruXŸOé‰êâïD.§™”OSlFʯ)Z›^¦M*~°®Ž>^/.Á¹sçœ;«V»Â™j%—Iå¼+Wp;¡Ý³^+XMª§–½–_¼aÃK®Š~P¥E=fËU«æ·4&åõ%uR´µ© Ukiê¬×±#¥¥²Íê¯êèªþn‘W=}/Ö.TgÕ¶äÓðÒAMå꫽ØzÉ5o×›õ›¶õ· uuuÊÖ÷Ê•Ôñ[3ý©Ë?…RÃܬÍÜ(-É9·åÏ£îš'¦wD‰?$“WšHÞt¶ñ§·i~líÅåÚÕcŸplT­Ž" ?£à!zN¼ÝÉ›e•Ï;™ê:•û¡m‹ ÊýÆj{8ñ¤T™ÞΖ¡>*B²ý !äb§òK21«ìÀ¥ø•Ó{“]1ÝìÍÔÍ\Eªqt¦FT›óË “+ÈãÛZhöuLÊ*#,±t:í“2ÜRrr¶xIðÆíZ^}.{´ªcp•ªn×NA(–ÊÉîâŽkl&ƒNNÌ£P(ÏÞ{ò\#?“žŠcmX§>Ï<¤Ë€^&†Ãáœ:u 7©©3aÂ333{µbe83fÌ4hP|||qq±‹‹K¯^½8OÜœœîܹ“’’’––†a˜ŸŸŸ“ôÖvÆŒ;vìÑ£¾9~üxWW×®¤’Ê#FŒèÓ§OBBBvv6FÃ%+¡'étúO?ýôÉ'Ÿ$$$ðx<___rÒQ??¿ŒŒŒÛ·o755Nª‡’’w öïß¿víÚ”””úúz___²êÚµëÅ‹TýÙ6mÚTUUÕZvSCCì]»655µµ1/]ºÔ½{÷Y³f]ºt©²²Ò××7$$„C ÓÂ=NÉk5wîÜ1cÆ$%%åææ²ÙlOOÏöSo+.—»ÿþ+V$''‹D¢àà`rÊФ§§GFFb6X­4Ž««ëýû÷ñ/‹F£á_ƒTü“O> !¾,àmƒjEiMÅQ¡B)”2ô!E“ÊZr™;Ð9«É“K·n%Z$¥¥Ysæ „ BB I r5Bc2=¶oOìÙ“bÌ[¹’®«ûL=Ù†áá”Ü¡”" ²êjJ:‹qã4¬³êRµ£³qeþIn)X·ÎrÂõj­aÔ½;޶øçŸ­&OFíK„@±¤µm!ÄÔn3¥DBqgÕïØ‘®«Kn¬¿{W)kðzÅ0J]kN™R«‚PU[j¼ÿïÝ»7gΜÌÌL]]ÝÏ?ÿü›o¾a¨ßüjRM¦ M¨×‰–+dêÁx¦†6Fúä<œ¼†²;ñ‡û…Í@σ†‰É%­u.¯Q 1Pc¤<_Êåš¿wÊ5¶&A]첋U2£œ»·ÙÝ!„ù<ÉK#º }×’_ª 8³ýǪSU§òK¬A iÿ±ºªÕ)ÄÍ·\yM#Ù#tæ0jfÎ6,å5«¶^ß? ÔÇá·ƒwˆv eÈaŠ!ö«Œ­k‘ͶšË-'Ϙ94”âûŠ“¥êjëá¨9?'¥´ ¨•åU(”×µÜcûPRÝT©jþ†¦gü¢œ]&'9yz¶„wéê}òfKíгwžÌÚÎÔ2í¡´<øL£Ñƒ´Ö³¬²àaüõGoˆÄ‚?ÖýÇzÕEq€÷’ÿÁd2[Ó !‡3ôiF;X[[ôÑGwÑéô€€€µ!â@ ‡²°° oâDDDDh|UBÈÍÍÍÍÍMã.+++¼n;¹R»»{kÕ õôôÔ§ÔžB|­¥cÑ××'V{Ĉûàá…”$4æææ}ûöí«¬EÆÏÏêTÇÅÅÅÅåé˜ F`` ¥ø­­­­Z¡6àíA]lP &ÍÝÔu£DBSË‹K9Vý(u¬gÍ" B„¤¤!dGªSÚFÝ»»þøcžZ…›œ… 1©Ô~Ù²ö/…¬¦†¨@À±·70€,Åùù¢¬,®Z•¦„ò&ÇÁÁ¨{wõÁª.ŽØóBM?úˆib"¯kyC¯hlÌœ5ËçøqjñV°œ8±ä?È-‚'OŠýÕaåÊöN ù«9{ÖùÛo[«ô l‡ ¤±ÙVS§–ïÜÙÒG$j¸wÏdõ¡G”“C~õ@×Õ5×ô+‘rÒÖ^OP¡úOD~~þ!CBH(®_¿žÍf¯Y³†ÒM®¦yZSA:êô$÷^p L;y ¼¯bø½wÐÕ.ð¹R‰ªO¬ AØ(P±MeÅ(1%a$,¯Éy”ªRc¶5ÑËå¥ljÞ½ˆ ‰êÝ=û]ÞK™µ ¥çîmÙs©ºln°ÀÞV•ÕÍA°%™†Ñ^ô)\O5ÇcQEL®ÐF(Iwœzhj¤K(:w{•´.]Gpæîâ]Sg?ÇžAÔGŠ)LŸÛüÚ—×(\²ñ\pûEã{ ÕEg[„†¡+3:yÙáUÝ)Kr 7b²OßNÙôùˆöL6¨NRã‚ç•ÖÞŽo~wäm?k„昔T1Db•3wR¹:¬]¼ž^£)“A'Ä9s)™{‰ùDIC{K£Éƒ¨î«oayB¡dhòwå %ÛODÙYMÜ2H|†JÉŸŽ-O8¾nÖÎ6&D>›JÿRdúÐÍŽr…R(–j lׂ7Ö’]FÃû˜›RÃÒsŸ½º7§ •°%ø„ƒÚÉ+KMh‘ .lذáòåËnnnmd% ê¦á#ÕTý’*Ÿe!Dé¨ûg²ÌÌ,Ô"“[ÃaåJÛùóÕÛs?ÿî˃"Óqé…ãjgJöÛÌ(¨â«kêÇ®%⟽œ,~ùì#õ_MªEÕqåó¤hî'M ¸ßÌ€»/d“ª>Ði´ìâš9?œX·ë è`eL'21_(¦ÞÞ%•õK~?»zûeS#]²Åï™P*¹SÜSBJ ûyß-³>¸Í¬YÙªY‹¬fÌ ?O98?ÿäØÛ¬]K-u×®Åúøõèa6t¨AHˆŽ«+ÓÐÆfËd••üøø†x.àØ~Ù2²1îÓÇvÁ²[fɦMaa–[ u7nãîl,0Us ÀW†CnPðù‚ädõ8@„Pã£GÔ–‡š£ªœÖ®­»qƒÒ_”•õ84T?0Ð $DÏ×WRV&ÌȨ»vMÑÔd©êø€òüûïø  Š£oÑ?Tîßo>fŒž¯/ÓÐPR^.HN®>qÂïüyã^½ˆnAA¼K—ÈV7Ck.Ç@$i9/_P‹dG9Xuèì7÷™4Ð3ÓgÅÑkëɇ+1åµGÿD§žs°ê`oéÍ`°ªëŠ ËS+yùt½_ç™”Ó©M¬¤2£“—fg3s·¤ì›ä–´üÈ´üHü³»C°®YBæ5boiU–\!S÷ð´³ð,(K&·D§ž‹N=‡b2Ø6æîæÆÍá$#{.+®H«ã«<Ù–§n88ÉÎÒËÁÒÛÌȎǯ¨¬ÍÏ)ŽS(å=föwéÖ¡òªæ"uIé­-Ñ Áf2\íÌÈNŒÝe0h½ƒÝ•–QP•–_y!2½¤²>¤ƒýÚOú“!‡Íôw³NÊn®k%KwŸ^:©ÅSI,•½óªH"C…ù:~7w WGƒs¬‘ªéüý´¤¬²ü2ž›½Ùo‹‡â5K«êÉêîï3Ñ[ŽEèr~_2Œ(³ÞÑ]EÞWÔòçýüß°>\âìâš«3£S‹Lt[44"HsøOk8Z™êéÆÌØ'Å™…U^NÍJlÝ®køRŒìé·lr§‡U%†Q‚úæþxR,•;Y›ì^3–OâãKÊdóש‡— 'QÜxø^A!älkúãüÁöª’‡Ëa9Ú˜ò¯þzà6 ¡ˆ W…B™QPõ$¿òÂý´²êÆ.þN«göµ$ B±TNÝôp0§x„éê½ãäCåSp£@ârÔNŠ/(޽U‡Ù#ÿÐa«dP‹L<~1òÏöTðì;ià:üsVQÌÔÓuÕu…#!ƒÎ47¶7Ô³01´ÓGÅ.– ~=0ž¨9A¾–¾¡Óú…Íg&ƒ5}èÏžŽ*®ƒ•¼‚}VòÚ*Šûôpö—3OêsMÔw¥gÇõË4ÜpêâèýÇ7§5ŽðëÛ§n5›¯ÝÌ­Ÿ¤Þçüý´ïÿÑ\¹ ÇÄ€;gt—Q½üÕß¾&f•Íûé”’~Ü=Ð¥gO3#݇)…·bsÊk¹:¬y£ÃÇõlíåmTráÒg)ýÂ<Öü¯! ïÄç®Üz‘Ü!ÈÛ-LTÌYSÖÎVMQC†N§ ðýll7ƒçI¦J°jëEÂ#!d¨§3gTg7{³G)E—fTñš¬Í –MŽP÷‰%#IûÌ£:|Ü·ãÂñÝÕƒy±+-¨^N£ûø;Z™$e—ÝŽËÉ,¬¦Óicûv\0¶§õ˜ÉS·R~=p»Y™êÎû8|xUtÅ<)ZøÛbsH·ß̦VD[ó×¢ !±2‹'t'|GÉ”×ÿò ±ùת1AÞJ ŠÄ‚ÿ}ÞS$ „t¹ú[ן§$×Å™¾´{Cc‹`þuõ1OW ¯@#`!|ÐÕÕÕÕ}• Ä€÷QVV5©(…¦¤¤¦¤$³aÃB5§5?W)%~L ?&Æñ«¯pAˆÉdˆN§¸; 32„\/¯6!ÓØØ|̘ªC‡ðMãÞ½_@ "„ ‚ƒƒbcë®]+ݲ¥îÆöD02MM͆ ³[°À@Sœ0Íîpø°a—.…?ü€uPJ$Õ'OR–N? Àõ·ßL4J­:|X\X¨ñÔòººÆG=²_º„ÕÇ£VåæŠrs¥ååAȶ¶¼w¯pݺÒmÛ(†¾–«`±,'MrX¾\OS¨°éÀ¢¢r/®×T"¨ù]~ú‰béeÛÚFF¦O˜@ÎïBc0::„«A„Pí¹su7ojSÑÔÄ‹ãÇÅ™¥"i4·  :uÊ_³F\P€BJeíÅ‹µUž}¹îîÎß~KÖu8J‘¨RÕ‰—Œ´¢¢öâE–•ù@õuŠ %åå¸ œ4iÒÑ£G/\hVAFFFÛ¶m#:—Ve¥æÞÓx: SVò *yl—"†Ï¦Óé·ãþ%{~ÚYz}2b#E "„º޳1w¿¹­¬ZsQY„•©KDÐÄNž-`‹*ÒÒò"5/¾RŽOŒ†hA¨ÃÖ›<è»#×¾ã Z+õ¸Æ¬ÅUœXJ]®J^~%/¿£{o² 47¶Ÿ3zË‘«ß’#  ÖÔ!?PÔ BÈÊÔyḿ/=øëqÆ WBl7ÌwXÀqÕ B¨ƒGðÐ~SÎ_?€Ê/ÊÈÌKòrÕ†€,Z«þ2´»OFA9;W‡5i`§)ƒƒtu4ÇezÚþ¸`ð7»®… "ó‰º L}XŸyw5k3ág?G; #¢æƒA_4¾û„ä>ä$.º:ìy‡Ü·£zþ’ïç^¶ñ¹|†z»Ïû8\½XEûY:9"½ ŠH"Ú(oø÷.þÙÌHwþÇ]' ä<+“—moe\RYoºÚ™­˜ÚK£(B™êþõ嘥Ï2 «ÚÛò»«‹¿Ó¢ñÝÝìŸQoTo¿Ìª³w5dÕã²'š4°—£ÁxK ärXëÈ2"ìfL6ñR``¯¥“"L [I½®zêp4/×­§q5ˆš1v…F5XRžKVƒÁ#@ ÏXà­ãu[•‰¤¤„ÎáÐ9›À L*UJ¥øÿlKK›-).¦±Ùt‹ÆfÓÙl‹…ÉåDL&ãìÒÒŠ “I×Ñ¡s¹Ô &‘(%†AÛ™NêoßNêÓœAÛçØ1I#Ÿï…Âú;wø±±Â¬,q^ž¼±îg1ŒtÜÜôüü ‚ƒzôhOÝ9…@€kAJЬºZ!°­­9vvº:XM™¢ß©UŸII &—7¯3þ?®”H”R)¾2J‰DÇÅ…Æ``r¹¸ €Ü“ÎfcJ%±†J‰„Æbqì4?'Éjkkþû¯îÆ aF†œÇC¦ãæÆuw×õö¶œ4©µ£ÈðcbjÏŸ¯¿{WZQ!¯¯gYXp]]u½½-'NTòlY>¿þÞ=ajª¸¨ˆëêjؽ»!© ‘¬ªJ!ÒÙìæ+âphL&~-˜TŠàØÚÒ5U©Ád²Ú‹ëoÞäÇÇ˪«ål ¶­-×ÃÃr£֋óòhL&á³ÙøbÒh´–;V*eèë“c%ÅňF£s¹ .—®££”J•B¡B  ±XDII¥RyàÀ‡ÚØØÌš5ËÁ¡¥H€T&æ k™ 6^fÉ`3L¥B®PÊå ©\!“+d–®WÃc%¯ ¤2½‚—OCÈÒÔÅ×µ;¥.…Ü’Ç™… ÊSš„õbi“®©¹±ƒ¹±½«] §SgR©P ª'¦„ÿ)• ¥\¡”+r¥RŽ2ÐÓðè,7¤æÞ«äDõV=ûéqŸ^¯H¡”3,ƒMCH¡”Ë2…BÎÕ1P/P!’4å—%VÔæ7 jÌŒì\íí,Úz×SϯLÍ»—SÏk(Iø :ÓÌØÎÜÈÁÚÌ%Ðk—óŒlIR©xõ¯Ó²óSB=†|>÷wõ>gî¤þ´¯Y?8ÛšûqJk£E%üw+%»¸F –Zšè;Ù˜ô qïè¢Q'P¨ã‹þ»’”UV]'IdfFºÆzýœú„º·Q‹‚LAy݆ƒwšD’žAnýÂ<Ô\1 í9“˜UÚµ£sÿÎžæÆ­Öå‰eçî§ÝOÈ+¯id³˜v†¡>½CÜ-MÛ•}ªmDbÙÅéÙE5Ù%5¼¡©‘®—£E˜¯C÷@—ö秉yR´ãÔCsî…{µjH –Ê/?ȈLʯâ55 ÄÆ\sc½Žî6ºxÚ˜¶ïœ!t?!ï¿Û©¹%µB‰ÔÒDßÅÖ´O¨{·—6Ò±^y˜YRYàiëídÙ†Yõܽ'‡®$„t°îEqÜ¥YX=í›#øg ÝúëSõw ¦\°zHYe!B¨O·Q‹þ÷£Æ¡.Ý:¼ëÐú§CÑ6¬=éæ… ç!¼u¼nAøÖaÑ..âÂB¶•U—âbë9’Îà4òy_ü8±¢ª!´zÑöЀޔ‰Yesl¶ðp/oùäV€ç%21ÿóMçñÏÖfgŸ©Þçä¥]ÿžú!äçöíçÿ0šõê÷[æÅ%ÝÁ?÷é:rѬŸ´}qÀ;d@ËÈe55!ë™3A À{Laaá¹sçnݺՠ+ûò˜~³ôoCS„ж}kÉt8^NvOK¨×óEQIÚ^àƒæÒƒ–øê~aªŽeç'9½!ÔÁ#xõ¢í­©A~S}Bj³‹¸‡;eÌRm_ðî‚-S±w¯B @4šÍœ9Úž ¯‹ää䨨(@PYY™¡–jè•`céøËWGœì=k÷ø²—Ëaý¸`0áÍøõΫWe>W¹x%44‰ÿ÷îÍØæÀ`_7ëyšrnþçK…Rä×cݲÝ\VƒÄ^V(šÃVG™mj åÇ€ç’Ê M”IÉÆ!ÓAƒt\\´=^= …âáÇÅÅ-›ZIƒôòØX:þºúØž£?÷ ×PöÃÛÙr×êOÝL¾“-I¿ÞquÓáûþî6ß}:PçYPàåyœQºó¿‡iù•R™!dka8"ÂwTo¦¦àÉáfÔ7ÖŒýh.Ö–ýæúýfGhgï1ƒgkûwøõ€6)ßµKR\ŒrT­œÀûH$º{÷n]JírÖëtç°uæM[×Ú^+ŸOú¯þ_¿ÚAu½ ®QD£!æ³r™À+ÁÎÒpê`6‹an¬ga¬ßvÍcŸ9`⓹…i!ƒ¹ø?µæV mó~Þ7MMM………k×®]²d‰¶§ƒ¤RéåË—3220 èׯßký[øÞ°k×®øøø 6¼üh€Ö‘×Õ)rbRq^^þêÕ!£ˆ£ˆˆ€·wïÞ=‘HDi×úA:fa¢O)ܯ+S+ÓWùHsòâ.ÖÉ·ûè!Ÿ¸8zkûú€w•w@Þ¾}»¶¶644ÔÉÉ©‡¤¥¥%$$ „._¾¬uAøøñãÑ£G’Ê‘yxx$''ëè´+ýôû†a·oßvppðððhÿQ›6mJOOŸ3gNpp°¶¯xT>\ðÝwþ.àuÿDÙÙ©#FàuÆÖ¬ÑöìxÅ=zôH¡P¨ïÒº €÷ƒúNþtê7ö6®Úžðnó¶ ¦¦¦>}ú „¦M›¶¿õŠÃgΜY\\¼páBíÎ_©T~üñÇ%%%û÷ï9r¤H$ºråʯ¿þ*‰>(AXSSÓ·oß±cÇo½ú¶:û÷ïÏÉÉ hÿ!ÀÛLSr²¬ªêqXÇÁmcÓ”˜ˆI¥!«©S5vàÝ%555%%…Ød³Ù111ø&Bx%„Ðö€÷·]bFùÐØlöž={´=w„JOOÏÏÏ5jÔ´iÓB†††Ó§OŸ>}º¶çõnªíY¼o(ŠŠŠŠ²²²úúzOOÏöÞ_ÁÓ§CIq±äiz ƒà`Ï]»´½*¼2 Ett4Ù/ÆÀÀ gÏždS!“ù¶?~|8¼‚(ê»wï<ØÖÖÖÐаwïÞ×®]#v•––âþ~úúúnnnC‡}ðà±755µK—.½{÷–Ëåþùg—.]ŒŒŒÂÃï^½Šwؽ{÷!CðÏ×®]ëÕ«Wÿþý…B!B¨°°pùòå~~~ºººFFF~~~ß~û-‘µ¬©©©oß¾¡¡¡ÿüóÞòÍ7ß„„„lß¾½¬¬lúôéöööÓ§O¯¯¯'_KiiéôéÓ;tè```´råJüt8cÆŒ »sçÎüalllnn^RRÒöâà‡óx¼6úH¥Òßÿ}ôèÑ~~~Æ ûñÇÉáååå#FŒ¸uëVIIÉÂ… † rëÖ-„@ X½zu@@À Aƒ8@V,ÿý÷ƒ ˜:u*±ª­QZZºxñ∈ˆ   … »0 Û³gϤI“:vì8`À€/¿ü²¦¦†Ø‹[A<ØÔÔôõ×_‡‡‡÷ïßëÖ­D‡üqΜ9¡GM˜0a„ Ädâââ.\îëë;tèÐÿý—¬üÿøã1cÆ_Á¶mÛf̘:qâÄÈ‘#CBBæÏŸ_UUE¹èèèY³f÷éÓgÕªUäLYYYÇ‹‹»téR—.]BBBbccB2™lË–-ýû÷÷òò2dÈ©S§žëGà@$åææÞ»wïÔ©S÷îÝËÉÉ©©©‰ŠŠz}¹þ¨`˜ 5•Òf6l˜ßùóôÉZï7b±øæÍ›d5hee5`À™LF4‚…à-âðS"##±çgÓ¦M4< žž¾ëÖ­[ÆÆÆ”ÓÑéô?ÿüï@¨‚Ñ£GSúÄÄÄ`6oÞ<õ —••afOÊKA0cÆ |ä²²2¼eÞ¼yxËàÁƒBááá666äCzôèA\Kll¬©©)ÞÎá4ç}ò÷÷—H$xüâð„„„¶×G$áGmذA©Tªw¨¨¨Àä‚‚‚ÆŒãåå…òòòÂ/Ã0ÜåfÚ´iÖÖÖ666}úôa0L&óôéÓ>>>zzz ÀOA,,†aUUUþþþ,kܸq‹/îСFûí·ßZ›gTT”±±1‡ÃéׯߠAƒôôôÌÌÌär9†ab±ø£>Âg5f̘N:Ñh4++«ÇãÇJ¥R„ÐСCýüüðùXXX „V¬Xw˜?¾¯¯/BÈØØ8 àÔ©S†EFFÒh4‡I“&͘1ÃÎÎ!ôÝwß³6lB¨ªª ßœ0a‚ÁgŸ}†êܹsÇŽB...B¡8d÷îÝL&ÓÓÓsÑ¢E'Nd³ÙNNN%%%Ä=‰š3gƒÁ°³³³´´ŸÿÓO?á¶lÙ‚‚ë.ü¢æÎ;~üxüBÚæäÉ“¸oLPPÐÉ“')²ð“O>AmÞ¼™hùâ‹/BŸ~ú)¾IÄ`,X°×;vìÀ[ºtéRWW‡aXff&“Étrr"™7oF»yó&¾)‹ýýý¹\.¡3É(Š   ‡·TUUÍŸ?Ÿê† ð³3ÇÝq{õê…oâ‚!Ô¿>ŸaXEE…………ŽŽN}}=1 BhìØ±äófff=zT¡Pà›õõõ¦¦¦d1¦.B&&&ø<•Jå”)SBÿý7Þ¡¬¬LOO/""‚ˆ§OŸÆ ¾‰ BüÆËåJ¥R&“ñù|:>fÌ⼄€Ô/) EYYYll,åÉLS§Ni|Oð¼?~œøõräÈ<·6Aaa!±·¸¸XÛóšy)—Ñ#GŽ„кuë~úé§Þ½{ÿöÛo¸«áåË—333BK—.7ož¿¿ÿìÙ³W®\‰jll<þ½cÇŽ£Gš››?s•ÆŒsûöíÇüñlj‰‰ø.·wï^??¿E‹ý¿ûî;SSÓ½{÷’Ã- °uëVƒš9s&N·°°¸rå .k===»téRXXˆ{W ‚¿ÿþ»oß¾x>„‡Ã6l˜H$"™ÇãsÃ%1BÈÂÂâÏ?ÿÄm¿6l066þùçŸ SðÌ™3ƒ‚‚îܹ“““C âááqîÜ9|Ŭ¬¬FŒ!‹É~§êxzzŽ?žNo¾ ŒŒ:wî\SSƒßT­ñßÿáó¤Ñh¸'jFF¾k÷îÝ`Íš5ø«„ÐàÁƒuuu/\¸@!44tËÿÙ;ë°*–÷¿çàÐÝÝ*%¨€vcƒ­Ø×®«×¸vww ¶€‚ "*ÝÝÝ'~Ì×ùí=IÅù<>>»³³³3s–Ý}ç­cÇ FÃ~,iiiØœ é*;ªªªÞ½{çæææããK5xÆ ?1„†††Ÿ@ š@dd¤ŸŸ‹ÅB»‚‚‚}ûöEëªÉ(ñ!$„_‡f=‘±<@µ¢D:C$ À@JðÀ~ýúmÙ²xĶQ£F¡TIIIuuõ„„×¾:ÉÉÉyøðazzz^^^XX*lX–tttDÛ&&&h]+22í^ºtéáÇh `HbÄØØØ 2ä§&ªW¯^?~|ñâņ ‚ƒƒíìì>~ühbbÅf³ûü7ý“É´¶¶~þüyrr²®îÿâkjjâw!!!©ïೕfQQ‘¨¨h||<‹Å*,,\GÉô õýŽu¦v(((ÈÊÊêß¿?’ô¨# ‰‰‰Ñ××G%ÊÊÊÔ¸©ªªªð#çI<ÿÁÁÁÙÙÙeeeÙÙÙPYY‰î¢:ÑÖÖ®ï*H2ôôô|ýú5®#%%•™™YUU…»7`Àê·ˆ¸¸ø”)S®_¿nii¹råJggg,Oþ§§§§§§#ãÏ:ëÐétEEE555UUÕÈÈHü—Û–eB‡„ÃáQ_”âââ}úô¡¾¡ć@à!33311QVV¶S'’BО4K Lý'°K—.<‡ÒÓÓÑöÊüzh@ÞCÎ{ÜÅݹsç–-[ðbdÀ^‚èZ8< 5ì Ke$%6Aƒ 0ÀÅÅåêÕ«Û¶msuuEE²4iyyy<—Æ`­O  ²˜ÍÈÈðõõ¥Ö±±±±±±áo ýŽØ –J}=”““€üüüú‹$®†G‡³|ùòóçϳÙlUUUaaalëÛHÐU8ÚE§R?5´´´lmmñÏ]'—.]êҥˑ#G\\\þþûïÓ§O?þ§zÒÆp8œœœ$6°Âd2UUUÕÔÔ”••Ñœp¹\üg+""ÂÿËBã©®®~÷î]nn..QPPèÝ»w\"Tjkkª««“““ ÆO%j&Z–f „ŠŠŠh#77—G¥ƒc·dffâñKKKg̘Q^^Žœ-›†˜˜ØÜ¹s¿~ýºaÃlNYQQq÷î]”Š­­mçν¼¼._¾ŒJ|}}»té‚„ÀåË—WVVº¸¸ ÓD‹µlÙ²øøøeË–ÕieZ'222"""Ÿ?ÎÌÌ”hYÆb¿‹/bïͦ1wî\11±7bŸRˆŠŠâ1åáóçÏ(Ø)ÚEa]VÇØzxyy=yò$44…´å9Êd2µµµíììÆŽÛ¯_?###oO*›F‹‹‹#»_@øY¢££}}}ñÊ”€€@ïÞ½> ×§ÑhDCH 0 j˜7}ƒ@h{š%*++ŸÜÝÝ]FFÆÄÄDRRòäÉ“ãÇGV»gÊ”)ùùùºººªªª(mýªU«&L˜`mm­­­½bÅ j¢& ¬¬|öìÙÂÂÂnݺ™˜˜ôíÛWKKËØØøÖ­[ œ•™™9iÒ$555{{{##£cÇŽ >hmwêL/))ill<`À€1cÆØØØhjj6æë*##õ @h\.÷ãÇ(-*8p`c‚3SÈöðK@Uæää4&¤"Ð0ª ¤¤¤455ö|sssGGG™Î;Ïž=ûìÙ³(H£††ÆìÙ³444TUUG޹xñâƒâ€bbbBBB¶¶¶£GÆÁ-DDD ÍÍÍQIß¾}õôô$$$tttfÍš5dÈAAÁ©S§Š‹‹KJJZYYýõ×_ÇŽ£ÓéÝ»w9r¤¨¨(“ÉèÖ­Û˜1cq¦˜˜˜ººº£££­­-jVTTTPPÐÖÖÖÑÑ©J”””æÍ›§¤¤¤¡¡!//ßµkב#GnÞ¼yÔ¨QÈôNDD¤sçÎcÆŒ¡šJÊÊÊ2™ÌÉ“'[XXðÏ¥¥¥“““²²²’’’¾¾¾££ãÑ£G©Âž¤¤ä¬Y³ôõõ544¤¤¤Æ¿mÛ¶¹sçRcŠÀСCy¼{÷î³DƒÁÐÓÓC“ƒF7sæÌN:)++s¹\--­I“&;v yÙñ£¥¥5yòdEEEccãåË—?~]ZHHhòäÉæææZZZ"""#FŒøûï¿7lØ€—µèt:‡Ã0`vAAA99¹aÆIJJ¢’¡C‡*((HII™™™¹¸¸ÈÊÊjhhL˜0ADDDHHhÈ!Ç·µµ•‘‘2dŠÜ# ```0xð`´+((¨­­=tèP|iAAA‡3xð`ÜÜÔÔtÒ¤IªªªbbbL&³gÏž«V­Z¶lúþ`2™ cøðáTqÈÀÀ oß¾¨©.]º¬ZµjÇŽÍ7Bn<æµð=R¨‘‘‘••U—.]”••ÅÄÄ~Êž9""›þZYYQßCðCjjjÞ¾}Kõà——ïׯ_† Tp.aaaS‘@€ÔÔTjd8‡SßwЪаòDSS³ñ–œ¡õÈÊÊòööFÛBBB(R¨ŠŠJsŒ¬X,–»»;RwKII 6¬½GI ~'JKK}}}‘¡¸\nHHHLL .éÓ§Šý³ !À¿@XUU•œœÜÌ<ÏÂÏBB¡ã“ššŠ£à{QÐjkkýýýñZÈÊÊöéÓ‡ÇÈ­‘°Ùl¬c$!€¨ó¯)::š„„6†„BLJ؋„Ÿ¢¬¬Ì××—š©HCCÃÆÆ¦ñ!dxÀêA !ð:ãÇæææâðûB@B¡ƒSUU•““ƒ¶PzI@¨œœ??¿êêj\Ò¥K—®]»6§M"üP5„8Šott4 m  „NJJ ¶Ô"ö¢¡a>~üˆÌ F=šÿè !À“ɤÑhèÒt#™0--­¼¼\LL¬½;HøS QŒ„¶¥ÑhÄ^”@ Ô—Ëýüùó‡°4(,,Ü¿ÿYH¢ „d1š@ ÑhL&mWWW¡m.—K æD ´6D $:2åååyyyh[II ¿x ‹Åz÷î]TT.‘––|ÈËË3771bDÃ¡ÌØlöãÇ?}úTUUeii9jÔ(ª³û‰'ºuëfccãííýâÅ qqñ¡C‡ZZZò·“——çææinnîääD]˜a³Ù/_¾|ÿþ}nn®¦¦æàÁƒ©-.^¼8;;ûÁƒ111NNN|ÈårÇ×­[7ˆ½víZmm­ƒƒÃàÁƒyF”ðüùóÈÈH---jŸÃÂÂ|||,X€zõõëW333'''4u………wïÞ €û÷ïøðADDdÆŒèÜààà§OŸ¦¥¥:995 NTTT<{ö,44´¼¼ÜÔÔtÈ!Xü{üøqXXêä™3gètúÌ™3[Õ<•€),,Ä)nÕÔÔ F{÷ˆ@ üTVV¾}û}n"TTTìììZUN#Ae„:á1EFFFh;::º{÷îíÝMBGçÖwüüü¸? ›ÍîÑ£HKK"ÑhÙ²e¸ÂñãÇàÔ©Søvær¹eee&L55µ.]º0 UUÕ€€€ú.”™™Ù§OÐ××Gî¶&&&qqqè(zÍÌ™3gÖ¬YðýOK@@àÆ¸… 6À–-[TUU ²W±²²*++CŠŠŠ @^^^___@@€F£}‡ FC>}útjj*rYYÙÌ™3©C~õêÕ©S§=zTQQáááÁáp\\\fÏž½cÇŽüüüøøxUUÕ½{÷¦¥¥¡úß¾}›={¶­­mFFƧOŸ233‡ ¶mÛ6???jŸ'Nœ8nܸ´´´âââ &|þüùÌ™3гgÏ¢¢¢¿þú |}} ³³³ ²²rýúõööö(Ø@NNξ}ûêü]jjj“““ÝÝÝKKKKJJž}ú433W“““óññqpp Óé£GÎÉÉáMW¯^}èÐ!EEEQQÑ]»v¾¢ººúíÛ·‘‰&hkk=º²²2))‰ÚÂúõë÷ìÙ#///..¾sçNj ÷îÝ‹_´hÑ!Ch4“É\°`Á“'O ¹_¿~8é2UM'((øüùó#FÐéôÑ£GÛÙÙ•””>|xõêÕbbbººº...,+88Õß¾};›Í>þ<2.ASzéÒ%jŸ/^|üøqeee‘Ý»wSû,%%…tÒÒÒbbbŸŸ_[[‹ EDDÆWç põêÕÄÄÄ•+WŽ3†N§#+Ùþù§¬¬ìÔ©S ,,,))‰†&--­… ­M^^^EEÚVWW§ÓIø(áOçË—/~~~xRHHÈÞÞ^__¿m®NB¡N„„„ð;/Ö€.ÅÁŸ„Ö e‚Êp¹Ü¼¼¼ÂÂBôÄ/..¦]²d õUUU¥¬¬üìÙ3\(//±±±|qqĈëׯˆˆBûAòÑ ›Íþðáõ± ))Ù§OŸ¶\¤Ã>„D $xFk¸XCL&S[[šUVV¦¦¦’·9¡õh®@¾mÛ¶GÕÔÔÔW‡G;nîÛ·oß¾}›ZN£Ñ¤¥¥ùOOLL€ƒqâÄ©S§FŽyäÈmmmþjHËoFMM RRR3‡„Ö€Ëåâù&!^ „?™ªªªwïÞåååáeee;;»6ŽïE4„B}ˆˆˆð „`dd„=¢££‰@Hh=šeH–’’Ò¯_?ÿóçÏGEEeff8pà‡g!qeãÆ•ÿ¥ªªjìØ±õÕ¿|ù2OýŠŠ ‹–šˆOŸ> <811ñÎ;±±±™™™Ë–-û©½%ŽëØœ!7iiiMMÍJ><==›9ZZZ¯^½ 6mÚÇmmmóóóù«!œG!\RRXsKh{²³³ñKECC£ ¼ƒ¯IQQÑóçϩҠ½½}ÛG{&!PØj2 ÒÒÒxI7??Ÿú‡L ´,ÍÒ>|ø0??ÿÊ•+Ó§OG%Èa¬aôôô &&†êGûÃú±±±¬ß4\]]«ªªÎž=‹Ófül:&G‘W›3äF¢§§\UUÕ€šñ‡ igQ affvåÊ•={ö¼zõÊÉÉ©Î!Q½P)ŠDh¨êY² H ü±¤§§¿ÿ›„Ðh4KKKCCöï ÷{

p 4‡SSSC]¯144Dÿ ::y-N³4„HŠÀA/‹ŠŠnÞ¼ùó »uëæææÆB&##£Îúööö***§OŸæ‰S_ý¦VeÒÓÓÑnZZÚÏêÙF…2Uà%œ„„„Õ«W£![ZZº¹¹ñdzhæ&MšT[[‹QàÂòòr•]Ã(((ÊFˆHIIÁóß…ü:“¢N™2öîÝ‹õ‡999[·ne2™(x)¡íáp88Ù´¨¨(ú} ŸFddä»w羽{öööí" IBH 4HFjjjX?‘ššŠÃÅ-K³êF½yóæ={öÄÅÅÉÊʺ¹¹5Æ …F£=ztÈ!öööcÆŒéÔ©SQQQ``àÇ«««ù_bbb‡š6mš¥¥åèÑ£uttrrrÞ¾}[VVÆ´98;;Ÿ>}zÙ²eHL½wïÞϪÝLMMgÍšuéÒ¥®]»0   àå˗Ȩ•F£;vlÈ!}ûö;v¬‘‘QÃCn$ .¼yóæ©S§>~üاO!!¡ÈÈÈW¯^}ª¡¡qçÎúÞÎÎÎAAAƒþüùóéÓ§}}}-,,pr:Þ»wo+++ê)zzzÖÖÖ8Ä‹‘‘‘µµ5OtÞ½{c/Ä^½zyzzš˜˜„CCC0K†B Òþï ÐR{QáÏ$&&Æ××—šÚ¡wïÞ:ujï~ýT†@heê2qqqìURR’™™ÙÞ]&t4ˆ@H tjkkqÜZiié:Ä—Ëýøñã§OŸp¸i11±àÏÇ_âCH 4ƒÁÀuj€jhM”„„‡„B!--Ãá mb/J ü ÔÔÔx{{ÇÅÅáyyùAƒ5'9mk@B¡aêËMQRRÂ×™™™%%%íÝeB‡‚„BØ‹¥¥¥/^¼ÀI«@[[»ÿþT¤_âCH 4 þ³­OCÔ`3111íÝeB‡‚„BG ºº:++ mËÉÉá<¶¡C’ýâÅ‹ÒÒR\bfffccó+„á‡h „†Án„ÕÕÕØü›mmm&“‰¶pÎa¡ùüŠo𳤦¦âWQ›¸¸8oooü9È`0zõêebbÒÞýªT†@h¬!är¹ÕÕÕuÖ¡Óéh›ÍfÇÇÇ·w¯ "l/J£Ñˆ!ÐQár¹Ÿ>}úøñ#^8p ††F{w­!ˆÉ(Ð0 ç¦Ç`+€˜˜˜út‰ÂÏBBá·§²²2''m+((PX„Cmm­¯¯/ÕwHVVvРA222íݵ÷m âtjóÃT„¸^󭨨HMMmïŽ:D $~{H8¡ÃSVVöòåKjþ1MMÍü @X $êA¡N¨È „ðßÐ2$ÿ¡¥èáÉ“'ÍÌÌZ#àÒ€&MšÔÞãk?~¬££óèÑ#´ûúõk;wî´ÞËÊʨÑð-HJJ Ú Ñh¿¸å@h¹¹¹/^¼(..Æ%]ºt±³³c0íݵFAÕ¶w_„_‘FšŒ€¬¬¬‚‚ÚÎËË+((hï¾:A ŒÏÏÏoñ–?}úôùóç*|ýúUKKkÛ¶mí=?MvvvRR–Ðrss“’’p˜ÊÖ K—.ÊÊÊ­z‰?“²²2|ó+++ãd¡cðæÍg‚Á`ØÙÙuíÚµ½ûõà 2D $ê¤ñBø¯’0**ª½ûNè´¢@8a„ٳg·÷[—âââ””ªÁ¶nÝjooÏóD³´´411!éZb/J tT¸\nhhè‡8*îß¿ÿo8Šh „†i¤!B]]]LL m§¦¦6¬Q$C+Zó¿{÷î×÷t'´Ÿ?öõõ­®®¦>àÜÝÝÛ»_,Òétuuõöî@hX,Öû÷ïÓÓÓq‰ŒŒLŸ>}DEEÛ»k?  „†¡ÑhL&üPÀ£Ñh†††È„ÃáÄÆÆššš¶÷¿7- æää„„„”””X[[ëèè@aaavv6‹Åª©©Aºl999T¿´´4888''GCCÃÌÌ /r@AAAZZº­££££¢¢ÌÍÍù•555ÕÓÓãï—ËŒŒŒŠŠb2™ÆÆÆºººÔ£ááájjjrrrööö¸oååå!!!eeevvv’’’M›²²²àààììl SSS¬KHH¨¨¨èÒ¥ µreeå—/_:uê$!!†+))Ù¹sç~ßs¹Ü¸¸¸ÈÈHIII[[[!!!êÑŠŠŠðððŒŒ cccCCßõ6ár¹ñññªªª¦¦¦ü¡ jkk###ãããÕÕÕ­¬¬h4ZUUURRRYYÄÄÄHHHˆ‹‹£Q¤¦¦–––òdÊB-ÄÄÄèêêvîÜ™jîÈf³ÃÃà ÄÅÅ üüüÔÕÕMMMIL*ÅÅÅØ­HUU•|lƒŠŠ __ߢ¢"\¢®®nccó;>9ÖpþŽý'Úaaa$þPCºººÈ;..®sçο‹G1áåÖwüüü¸?Ïþýû©ñ[·når¹ ,à¹ÊŒ3¸\nmmíܹs©B‹’’ÒÓ§Oqkëׯ€ÈÈȾ}ûâ:‹/æp8¸NNNŽ >êìì—N§/[¶¬«GGG÷ìÙ×WVV~ýú5:Äf³wìØA}õêèèøøøàs/\¸çÏŸG»·o߀#GŽà Ý»wǧKJJÞ¹s‡zuooommm\¡K—.±±±W®\áùéñÚÚÚõ§¼{÷®””®)%%uåÊ|-}>}zÓ¦M8뎅…EZZZnÔŽJXXþNNNnïî„ 77×ÝÝý…ÐÐÐöîTÓ©ªªÂ nïî¿(oÞ¼A&÷ïßoLý?⿬¸¸¸öî>á÷¦Y>„¡¡¡ÿý÷ˆ#rss‹ŠŠîܹƒlDW­Zåáá!%%¥®®îáááááñÏ?ÿ@ZZÚãÇ·oß‘––vëÖ­’’’Y³fa_yDß¾}Y,–››ÛóçÏOœ8ñàÁ|ÔÉÉ) `þüùïÞ½;r䈯¯ïùóç©§_ºtÉÜÜüùóçiii¡¡¡ƒ¾}û6’€ËåÀÍ›7¯\¹²cÇŽ+W® 8âããétúÅ‹½½½g̘1uêTjH·Æ™™ééé¹uëÖˆˆˆôôtWW×òòr¤ýG¡««+õ”»wïÊÈÈ >œ9sfРA>>>>|°²²:zôè“'Oê¼Vuuõ!CBBB:þèÑ£N:]¼x]·nÝÆ ôúõëÏŸ?;v,33sàÀ HUUUß¾}“’’ýåË—0iÒ$´;cÆ xöì®PQQ‘ŸŸ¶ ¨¨ˆÚa¤×EÂÚÚZ]]]QQÑììl\©MMM©» ¨¤¶¶VUUUXX˜Kàr¹\n~~>þûõ÷÷oïî„æBÕùߺuËÍÍ-77·½;Õ\ ðˆ¾}ûÖÞÝ!~QBBBð_JYYYcNñññÁ§deeµ÷¿1ÍÒš››ÀÖ­[CCCy ‰3òÌÉÉ¡®]»/“XZZÎŽ€0ggg\ÙÀÀ`„ ?{‰=zL›6ZâïïÏd2GK-ZD5hlÚ‘Q%ººÐ„ rssß¼yƒŽÞ½{¦NÚøžclŒ´Ž¦¢¢ÞÞÞÕÕÕ...Ô'Mš$ ðþýûÆŒâÍ›7ýû÷¯ú޵µµ°°ð—/_P…>ÈÈÈ 4Ÿ""""++ÛÈYŠŽŽNHHpttTTTÄ…æææ]»v G.ˆˆqãÆa¯KSSÓªª*d÷K ñE „›Íöóóûúõ+.‘’’}öìYGGÇþùg×®]õUÎÎζ³³ËÌÌœ9sæ”)SÄÅÅÝÜÜîß¿ßøË!a§¸­“;wnܸ±{÷î“'OVVVæp8<ÊÀúZn¸ÙÆ››kgg—––6sæÌI“&IHH”––¶~ýz,V-Z´èÌ™3ýû÷Ÿ5k–‚‚Bnnî²eËê»êmÒ*d³Ù<ål6[TThi:.,,ìááÁSŽ¢Èr¹\‡Ãß~㩯‡¨œä*l 999ø…¡¡¡Ñ˜Ÿ•@ ü‚¼}û–úýשS'ssó&¯¸ýjPß­D $ê£ B044üøñ#ÚŽ‰‰éÖ­[{ƒð[ÒÆÚÚÚ{÷î]µj•ÍÞ½{ׯ_?èy¾ø¯]»éÒ¥Y³f¡’˜˜˜Ÿ‘»`ll¬½½=.¤¾ljjjvìØÑ¹sgdšRSSÓP]]=>>¾¢¢§xBbOÃg¡…Ol™yýúõØØØóçÏÏ™3•ÄÇÇSB6yòäÝ»w¿xñâÅ‹ð]g™™™HD®ƒÐ€@¨££’˜˜È“Ⱦ‹m‘‘‘Ô¢¢¢¬¬, ‹ÆÌ³žž^lllÏž=¥¥¥ù2 uuõ´´´ÚÚÚÞî HŒ¨‡ß¾}ã)ŽŽ¤/%Ô±%:©©©øiI§Ó­¬¬êL§ôûB4„Bcø©Üôððp1!!ÁÔÔ”ü•š@³´ ÔûUQQÑÚÚšÃáàeN))©äädê› 11ÕD», i<(ÅÍ›7±¨öþý{Z²²²ªªªddd°£BPPP#[®©©¡†]¹rå}ÕRRR@II‰:@´Ëf³ùˆ<QXa ,Îñœ xɧNìììàäÉ“¸¤¤¤ÄËË E@@àÊ•+Tg¼ýû÷³Ùlì¯Ø0püøñú*ôêÕ«´´ôúõë¸$)) ÅÈ$FÆÄÄÔwº±±±ªªª——5ê©»»{tt´³³3É¥óC¸\.¶.¦ºb„ß…¯_¿úùùaiÉd:88t0iˆ@H 4Ž&˜ŒƒÁÀ ‹Õ€Ó ÐÍÒΟ????êÔ©***ÁÁÁ={öÄ"¹¹yLLÌ”)S† &((8eʇӧOoܸ±¬¬ŒÁ`œ:u ‹¤{÷î=zôðõõ;vì˜1cbbb:¤¯¯ƒhjjêêêúùùmÞ¼¹oß¾~~~»wïnŒgà‚ .^¼¸xñ⤤$CCÛ7o¾ÿ^SS³ÎÊÇ ìÒ¥ ŠÕ‰’F€ƒƒÃ‰'þý÷ßÊÊJAAÁÓ§O£(8TLLLÌÍÍïܹÃáp¨LMMeee{öl;;»%K–èëëúôéÈ‘#²²²;vìhÎ=ù‡••…“µhjjvÓ2áÃá|øð!)) —HJJöíÛ·CÌ“ 2Bc`2™t:)<¯!CCÃÈÈHr"&&ÆÈȈ|~–f=šœœ–,Y2iÒ$´;lذ³gÏâ£Û·o »wïÞ½{÷V¯^=eÊ” &¬_¿þàÁƒÎÎÎC‡uuu=z4{PÎzùMPP*=}útÊ”)^^^žžžêêêGUPP;v,~ÍܿڴiÛ¶m•ëׯS%+ƒÁ`0Ð…¨˜™™yyyÍ›7oûöí £GAAAkÖ¬AŠ;TUUïÝ»wëÖ-ƒñÏ?ÿôéÓ•;vÓ¦MûöíC!=|÷îÝQ£FñÈu...K—.ÆSâââ÷îÝ›={ößÿ ºººÏŸ?Ÿ={v}2¡¨¨èû÷ï§OŸ~ûöí›7oÒéô 6püøqMMÍ,_¾$%%]\\Ž=ŠŽ6êÛþðáÃâÅ‹/_¾|æÌ4oVVV8þ±±±···‹‹Ë¡C‡Pý‰'.^¼;wîÓ§O_¾|dgg‡B!!!êX\\\¤¤¤V¯^½aÃÔ‚ƒƒÃùóç544ðï^çÍ@£Ñˆ ‘Ø‹ PXXß|·ðÖ£¨¨¨°°ï*++÷êÕ«£jϨaxx8y€“ÉÔÕÕmB°÷ß&“‰tƒ?%Šˆˆhjj¢ƒòòòôôtä`E 4Ú­[·Ð–¦¦&²BüYRSSËËËÕÔÔ$$$ø"£Jªª­ªª*55U]]¹Ï–——ã@j\.·²²{ñ!ª«« ϲbUUUnn.*++©Î¸••Åb±ÐŸDMM FÃïÚªª*AAÁúÞIYYY¢¢¢’’’Àf³9N/颢¢ÌÌLªŠw855UMM€˜ŠŠ ¸…§œË妧§ (++£¦~}VTT¤¤¤¨¨¨ÔùÜÌÉÉ©®®ÆE…§cTÿI ‡ÃIIIa±Xx8üó­¥¥Å?–¼¼¼‚‚}}}ï„Íf³X,~mmIIInn®¶¶6ÿ0+++………© ]§¦¦†ÿZ(-úÆEY ¢´´ôñãÇíÝ‹ŸÀÀÀ [·nxEÿÇTï¡‘ˆ‹‹1¢ÿiðóüùó‚‚5jTãOÌÏÏG‘)@QQ±ÿþí=ÂoF oÔ)l`ø­.………©ù¨2 Fã—Iê4ø¦^—_VA‚Gذ8A=©ë¬&--]gÀÔajʇ:ã†óÏu]§1Æ®¢¢¢:uªïhÞe<«³Kt:½á/ ̃¼¼<5ƒV}“)))‰Äo~øÖ:¥è?ŒŒ ¼âNÔƒõåný¡ÑhݺuãOÀÓÁ¨ï}G 4LYYYaaaãSwðÎOi@NNN^^>//rrr eddÚ{4„ß ªž@øÍ ö¢B4Øö—BZZÚÞÞ¾ÃKƒ ¯¯O—F 4žÆdNîHàup6›Mµµn †††x›$©'ü,Ľ›@ø`±Xéééh[BB‚, àààðkŠ"4íÏÉ*""2`À‡ó»Èê„ö%66ögCÐwx2Oü”_±¦¦fhhhEE$''›››‹*Bã!!ð;‘žžŽƒÔõ Ð0t:„0ùEøs`B3ù£œyàÉ•““Û¿{Ï €›››O{÷‚𚟛CòOOÓBYYÙÉ“'›™™@ß¾}§L™"..Þ§OŸüüü›7oR+_¸pÃátïÞ ÓÓÓûöíëééùÏ?ÿ¬Y³¦¸¸xæÌ™÷ïßÇõ—-[¶téÒîݻ߿ÿäÉ“………öööX :þüºuë†êååuñâE&“ùõëWtÈ××wÛ¶mK–,áï°””Ô”)S,-- W¯^¨ÃÒÒÒ¸Â_ýuèСñãǯ_¿>??ßÉÉéãÇøèþýû'M𤥥uûöíK—. 5 ÷ùéÓ§sæÌ133{üøñ­[·´´´‚‚‚С¬¬,ssó·oßþû￞žžÓ¦M»xñâ Aƒê›ØÜÜÜ‚‚쌦«W¯^^^^óçÏ_´hQttôÀqJ:;vìŽ;LMM=º|ùòÀÀÀ5kÖÔÙx^^^nn.µ¤¤¤¤¬¬ k5+**lllž?îèè¸yóf‹ekkËsЧ§§ƒƒ‡Ã9w««¡¡á¢E‹ÐÒâìÙ³{÷î=tèP“ï.¼ÞÁ`0ð‚@hUX,V§N Æ×üÖnÞ¼yýúõ+W®<|øæççWTT´ÙˆJJJx¼Óß¾}{òäÉ{÷î9s¦ÍºÑ‚TUUñ«ìÐ7tsT+õVrXÏå‡Íf‹Åjã™a±XèÒ˜”””ñãÇO˜0¡{BøYZJC ²²²h;;;»aó7Ÿέïøùùqž}ûöÀ“'OpINNŽ   ‘‘.AÒÚ¤I“ÐîŒ3ÀÒÒ=ǹ\®ŸŸ*A»t:}Ú´i<-ôïßíŽ9RPP°¶¶–¿?ÑÑÑ:::&L¨¯ÃGwwwj!RjjjÆÇÇ£’Û·oÀ¼yóÐnFF†˜˜X¿~ý8*)((`0x˜ .€´´4þ+Î;—F£ã’9sæÀãÇëìáСC   í¢Çw·nÝ QÉ–-[ààÁƒh÷éÓ§ÔéE†©/_¾DÛªªªø¦¦¦ŽŽõr—.]€³gÏRçgÍš5h—ÍfÏž=TUUQIuuµ®®®¶¶vee%nD]]]\\¼¨¨í^½zUMMíĉM¸£<á?ÒwïÞµww„_ØØXü'“Ýävž´,l6}:OŸ>ZŽÌ(ÌÍÍ[üŠt:øÀàYíØ±£'GGG§K—.Ô‹µhÑ¢½{÷¶qOš@TTþÎÍÍmïî´5åååxøŸ>}jfk‰‰‰¸µ>´÷à¿.-ïC¨  0lذèèèàà`Tâêê Ó¦M£V»xñ¢œœÚ¶³³344 )((€;wîp8œùóçãÊ&&&êêêhWYY¹¶¶öúõëüW744LHH¨Ódô‡œï‚Û·o[YYuëÖ — <ß·Û·oce&ê[ZZÚE_-‹/Æ•eee дŸïÁƒ€U¬t:ýüùóTŸÆ   „„„éÓ§S­ TVVöåË´;}úô´´´E‹5­*Ä^”@hnܸÁd2ÿý÷_6›–›Ã¨Q£ ²²²ð»)šØlvkx»ñƒõZT—ŽŽNZZZqqñO™Aþ"p¹\¤ ü)•ÝBMM r‰Á`œ8qâï¿ÿnï®~@K•Ahjjb•cRRRÛíïï/++ëèè8bÄjËÕÕÕ·nÝ ‹‹SWWGóŒ^ÜOOÏgÏžeeeõìÙséÒ¥¹s***<<Ô% ª—ƒƒƒ¸¸¸±±1ÈÉÉ}þüùÔ©SgΜY¼xñ¾}û¼¼¼:wîŒ6¨6¬É~)艌û†ÔªÔ lÅÅÅ '=GSadd„ÜG1‚‚‚ýû÷o±Ù'@AA/¤¦¦Æ`0Ú»G»»{EE…³³³¢¢bÿþý_¼xÕ©S'\áܹsÏŸ?—’’š5kVmm-‹Åâp8£Fzðà6$¡òæÍ›½{÷@ß¾}»víŠìEÈP?== „×®][¸p!Õ·ððáÃè›ÞßßÿþýrrrAAAÈúæÍ›wðàÁÕ«WS¯xéÒ¥k×®ùøøÐh´íÛ·ãHcÆÆÆS§NMHHضmˆ‰‰¡OüŠŠŠyóæñDؽ{÷áÇ,X€* ·&“yæÌ˜íìÙ³=ªÓ=>88xß¾}‚‚‚ cݺu(äæ“'O<==׬Y3{öl¤µðòòº|ùòÇuttðÀ×®]KÍ©}ìØ±'OžtíÚõÞ½{x}622rëÖ­àäädhhˆ ³³³-,,p .?~›Ò|ùòÅÙÙG@9rÄÝÝÝÜÜí®Y³æÀhûÁƒ·nÝâþ(¾hvvöðáÃ?}ú$((Èb±¶nÝêììÌSçÙ³gS§N---íܹsjjêúõëgÏž}îÜ9ôf÷óó[µj•ŒŒÌÞ½{£££™Lfuuõ¾}û|}}ñBmaa¡‹‹Ëƒ †¤¤daa!†wîÜ 7oÞ,,,\UUµuëÖ£Gb¡ÜÜÜÞ½{ÇÅÅ™˜˜ÄÅÅá'ëÖ­#a«",,ÜR!|ûö -ëÇÆÆ×·nEø£iqBZK{ñâ²O ‡aTTµ>Z”*))ár¹ÈÔ0$$ä‡W¯ªªZ¿~=P½zÝÜܨ…èÝŒýîvvvh{Ïž=àééùÃöY,Ö±cÇÀÞÞõN§÷éÓ§ñSZ§aJJ ®...hwüøñ]gk<>„ Ô <>„fffUUUÔ:؇ÐÓÓvïÞÝøšÌ§OŸð_hFFF{w‡@ø hˆ‰‰•——s¹ÜË—/À† ¨œœœh4Nß¿qqqnn.Ò=zô¨Îq(æçÏŸ×ÔÔÌœ9ëÜFŒáää„Þ/ñññHÇ5jÔ(??¿#GŽ »€Î;³Ùl.—{áÂüú355}ºŒŒÌ’%KnÞ¼yûömTçÅ‹\.wëÖ­vvv¨¤gÏžNNNû÷ïçr¹8ô–-[P?‘°¶¶¶‡^¹r%“ÉAAÁ¸¸8.—KMG$((8|øpSSS´kccSçØ©N &LÀ%£GÖÖÖF»+V¬@g!ÑzÆŒþþþ»ví’‘‘ÁïV//¯‰'¢SÔÕÕœœf̘<Û±i=FëÓ§Oß¾}ñ¥kjj¸\.›ÍÆRŸ‹‹ËÑ£GG…v­­­Q¤€OŸ>¡qqñ™3gRm|ð!DV®\YZZJõ›À>„999’’’æææÈq”ÅbÍ;nܸ*\½zètúĉjjjjzáÂ…ø*Ó§O€õë×£ñFEE™˜˜àO”ÍKEEEWW·°°°°°šËå â` \.WZZšN§+((<~ü˜ÅbIII‰‹‹ãφ>JJJFÍ`0ÂÃÃ[á¯ö?üá>„\.÷õë×hø÷ïßo‘ñ”&&&¶÷ø¿"Í?gΜá) €éÓ§kiiR!pÙ²e¸$))‰N§ãjè…Çóö­6›-$$D}effæçç×WÿüùópôèQjáBdšÂã¹ÞÚÚÚêêêh»sçÎL&355µ‘çþ¬@ˆÞß<>ëÉÉÉhƒG ´³³£Ñh™™™h·¼¼½,±@ˆÞ4TÑ÷É“'  „‰‰‰t:ÝÚÚº!p8œÌÌLôùBhèÏÓÍÍÌ'К/¦§§Óét©«¨¨ˆÉdjkkã b\.×Éɉç݇‡üóÏ?u¶IQÉŠ+PIBB®†$ 111´<Êår‘>~üÈ¥„***HBCdff–••á]ô €Ã‡£ûúõë¸@XVV†l& °^šXTᘘ˜—Ë­®®F2˜¨¨hcÇa×®]Q09¬Û”””DëÅ©©©ÈŒÈÁÁ…,…ÝÝÝy„O.—;lØ0Tˆbw¡hjpçÎT­>7 æçç éééQ —-[F}A¯[·|}}qä{G±cDzX,TR^^Îd2qŒœØØX:Þ£GêU>|øø‹…Ë媩©éëëóô_ ”  xH‚E?+—Ë566633ÃGQ\¢]»vq["úûûãh‘Waa!nðÙ³gí=>¯HsµÆzzzhqëË—/>>>Ø´ÃÂÂÂÔÔôæÍ›ÉÉÉS§Nå?ñèÑ£3fÌøôéÓû÷ïÇŒÃáp°¯ó´iÓôôôöïßäÈ‘ììl6›””tîܹ'N  Æ {øðaEEEMMÍ©S§jjj°ëBii©††5#äŸpëÖ­ððð·oß6Ò¿vðàÁ¶¶¶7nÜø÷ßÓÒÒ8Nzzúõë×wìØ*Lž<ùÖ­[¥¥¥,ëþýû©©©8Ýß¶mÛª««GŽX]]]^^þþýû•+Wò¤jl2 .ݹsçéÓ§“““ß¾};f̘Y³fÕYyذa\.wîܹ111/_¾4h^E ·àÂ… _¼x‘žž~äÈ‘±cÇRHµµµgÍšõñãÇ3fÄÅÅq8œ¼¼$ú@TTµòèÑ£Ñz¢zßUTT4œ6mݺuÈ«+œœ¬­­@]]]EE…Úa4'Nœ@S5æíÙµkWüÄNzyyy€ÅàÉ“'ãúX߈†âââcÇŽEå;wîlø!Sƒ‚Æax¼…„„Ðh´âââgßIMM•@ÎùÔ³°ƒ€¨¨¨ŠŠ ¾¯>~üÈápx\Nºwﮨ¨ˆüÄ~ UUÕ®]»â]t£YB¿lRR¶ZD¶¾È‡“Ъ´l\––Æ~ÈÍ|L:$Íõ!4hP=üüüÐ3%77W^^š9sæÊ•+`Ê”)ü'îܹsÏž=8ýºuëð³[HHèáÇӧO_±bÅŠ+/Nß¼y3ªPXXèèèßÝülmmñjee%‹ÅB&.uâààлwïwïÞ!¡1--­‘·®®®³fÍÚ¾}ûöíÛ±{!rå‹…†I§Ó9މ‰ 2€±cÇ:thÆ 666øD…:“%Ö¿S .QTT¼{÷îôéÓñê©””ÔÙ³gëlgñâÅ/^¼xüøñãÇ oß¾÷ïß§~ÓôéÓçÀkÖ¬Ao5!!¡S§N=þ'€ƒÖÖÖ^»víÚµkxDT·xäÖˆ_*„¦Aâ‹íÂ7 FQQVd)(( rꃎô ×ÌŒs(HXFFÖbx\ˆqz1DffæÜ¹sŸ={Æ“}î§À~†Toy qqñ²²2ž°aÔ·6E2éóDPôB©ªªB—‹ŽŽæŸŠÆ¬ŽQ»'..Ž6Ðä`y’:L² ]ý¯¦¦Öpø*(ôwÃ_HE‰-T1Øm²NDDD°O)ê<5ðîhhhqqqs6´ø‹WöG½uëÖ¥K—.^¼¸¦¦fݺuÂÂÂMŽaNh<<©EEE›ß¦‘‘Î_ži¦¹!ƒÁx÷îÝË—/“““ÍḬ̀4ŽŽŽ+W®´³³ã †7nÜœ9sž{öljxIMMͧOŸ¢•<ÄðáÃcccƒƒƒUTTúõë‡ßnnnÔ÷¢¤¤ä«W¯cbbÌÌÌ,,,jjj¼¼¼Ð-bÕªUÎÎÎïß¿g2™½{÷–‘‘±³³£.3KII]½zuÆ ß¾}ËÌÌ”••577Çþ0°nÝ:[[[žù$ü\.kDDDȳ›@h¾~ýŠtSȻʽ{÷Ž?Þ"A­ëCJJª¨¨HGGçСCÔrQQÑ~ýú5pâˆ#BBBDDD–,YbbbR^^Þ„Ä?855‹ÅBÒ¿Òz0™LaaáÊÊJKKËM›6ñLV06 ,2ã¤J8p7&úGaá ²¶¥úXò###Ã`0Š‹‹yÄûÆßTHöæïXii©˜˜X˪ï ÅÅů_¿ŽÌ†•••]]]qØBëAÕ6¬uo<ªªªheÒÒÒ***ZDÎ$tZ ʨ   6¾§‚7ñ¿S1ŠŠŠõY6€€€€••J\ÁFëÙ³'ÕɳsçN##£µk×64fªN ÔÔÔøWõx₢뚙™ÕgÚÀ!4XžÄõabb‚ÄFFFTY«Îþ€¬¬láÝøgI@@ W¯^(æ #¯Ež A¾‹jl=Œ¡¡a}/YYÙÑ£G7f°„úÈÊÊÂöÌšššuÆ-$-Î7àÒ¥K<¯€¥K—>zôèÉ“'õåøY°HPXXˆ—Dõôô’““ È“¡ÒÓÓ‘ÓàŠ+P¨IþL°ÔËÕ׎ìâííýÏ?ÿ í7oÞ ½_[F«§ÑhÚÚÚ‘‘‘#Gެ3À2FC&* Œè‡Ãįח/_¢ 4LUUÕ/_¾dee}ýú•<{ö¬aý§¦¦&PìQ8 +BOO/(((99™ú–ÿ)ЭòáÃj®æÌÌÌ””ÝMN3M kjjΞ=»råÊ•+W†……ÉÈÈ €Íi“ÐHx4„-Ò&FC¿€ËåÆÄÄàÐJ´–W‡Ã9þ¼°°0¶Ëo|||¯\¹ÒR9„ö‚Ø‹m—˽y󦤤ääÉ“µÿËÌ™3ỸØ"àUÈ­[·ººº"½1‹‹‹'OžüåË—’’’ÄÄÄk×®ñ›MRÁö&%%%¹¹¹üIóðå.\¸póæÍ:¢¯¯Ö_¾|¹råÊÀÀÀ»wõÂÂÂØ+¡m@¾‹III³gÏŽŽŽ.))‰=wîÜ¿ÿþ‹*ÐétävøáÇãÇŸ8q¢‘êÇ›uëÖ]ºt)((hÇŽ(Zò‡ÄK¢'N¼víÚ¶mÛ~¸Êilll``ðæÍ›àà`TòîÝ;žô•“&M€õë×£¤ˆšššÆ{Xôïß_EEåîÝ»ØÿŸÍf¯^½º¶¶–z“(((¤¥¥!÷¦Áf³i4ÚíÛ·ïܹSZZš——Žõ¨„V¥54„ ««‹}ƒããã›ißNè`´–@èë뛜œ<~üx~dKÙÕTTTüüüêÔ¿¹£€¸¸8JbÐøúú¦¦¦:::òkB†.--ýøñãŸÕGÕǰaÃÐ{ðáÇ“&MºsçÌ;Ejyøða×®]¥¤¤tuug̘Á“%%%dPêíí­   ¤¤äééIuySSS¤Â Ÿ:u*R$òsìØ1ôÖ>|ø°““Szzº€€ÀÁƒÛxejíÚµ(6ÁÕ«W;uê$%%ehh8þüà:#GŽ€òòò¥K—.Y²?6FGGEç...ž={v=6mÚÄf³UUUOž<‰êL™2]ýÛ·o3fÌØ¼y³˜˜X&K¶yóf6›Ý¿''§1cÆôë×'úËÈ‘#ÇŽëééiaa±lÙ²M›6Mš4IUUçTü!¢¢¢‡®©©éӧϨQ£,X`ffvëÖ­±cÇRcä ûÁÜÜ|æÌ™(´éÏ"""räÈ‘¤¤¤Å‹3fðàÁ(t ×´xP„   ö᪩©Á>ôRbzèÕ«Wjj*¶Î§rìØ±­[·¶†7i%ð›’‘‘ÝúÑ7@h­­­©Æx&“¹bÅ OOϘ˜˜=z˜šš&''comïÙ³g}¦€†††Ý»wg08‰¡¡áýû÷wìØ'''7|øp Óé¯_¿>qâÄÝ»wãâ⊋‹»uë†/ôõõ»wïN§Óyž wïÞ]¿~ýãÇËËËmmm7mÚäãããåå… þ™LæÃ‡׬Yóùógƒb¨***öêÕ«ªª ›ƒZ[[ùòeãÆŸ>}JHHÐÔÔìÚµëš5k°Ÿ9“Éìß¿QQU:²´´ •’’ªÓN[[©ÝðǨ˜˜˜½½}YY5¿¹½½½ŒŒ ^ÒÞ»wïãÇãââ***TTT¬­­q,7Ø»w/<{ö¬¨¨ÈÚÚ‰¬T'v###kkkAAA‰`ݺuÖÖÖ@V©ÆÆÆ={öܼy3Õ#""âëë»fÍooïêêj{{û;v xýõÝ?S¦L‘8wî܇ºvízûöí!C†DGGS#)Ü¿ÿüùónnn>¬©©ÑÔÔtqqÁö½šššVVV~üøôéÓ   ´´4IIÉñãÇ=º-ÓQþÉàÌl6»¶¶GmŒŒŒ>|ø€¶cbbˆ„O"@ x`0#FŒ1bD{wäO„'ÐhË „ÚÚÚaaaÈ511ÑÌ̬ÎpP„? b2J @ ü*´Ræ N×××GÛl6;..®½‡Khˆ@ø°uëV\û·ÀÃÃãÕ«W-ÒTBBÂÔ©SÃÂÂÚ{L@ m6…VÀÀÀe€ØØX:ˆðÇÒLF‹¼½Y|N±ÖÖL5µÖ¸\þãǵ¹¹âææâ|Ɉ"† +yÿ^iÆ ý£G[êrQQQ[·nݱcÿ¡€€€¯_¿vïÞÝÔÔ´5FÚ4¦Nª§§Žv׬Y#""²mÛ¶&4¥ªªúôéÓŠŠ ww÷ö@ B[@Õ¶x\Ô¾¦¦fRRTTT¤¦¦’¤Ç8¿½@XöùsX¿~üåÚÛ·kmÜØœ–Ùee…¯_Óh4™袢¨UTôeäH¶·7óö¦Ög<} ùžž?Ù¥¥…oÞÐh4™é”u ~Ž;& 0{ölžòªªª¡C‡ÄÄÄ´Ílÿ,ÅÅÅܲe ^‹ª?Òéônݺáaaá3f=z4>>^OO¯½GC Ðê´ªÉ(¢S§NH €èèh"þáüö&£X7Hc0èL&þ'(+ÛÌ–ó==¿ŽýÅѱàÙ³ÆÔ’ÒX»VÚÁAsÆVÎóðø_ãÏŸ74:ëÎ;½{÷VRRâ9ôèÑ£ââbUUÕØØX-êWCJJÊÓÓóÑ£G?”`ܸqNNN<…'Näp87oÞlï¡@ ´­m2 222 h;///??¿½MhO~{£¶dIïª*üOõ¯¿šÙ ¶¨n¼iµîž=foÞ¨ÌÛ˜ÖÓà›7o † ÂèÆâââÇŽCÛ-6-ÍÈ‘# Ô˜šuγµµµŒŒÌýû÷Û{@ m   ƒÁ@Û­a2Š &©ŽŽnïAÚ“Ž#ÖGž»û×Ñ£ß+)½ TW4¨èÍ|”Ëfgœ<ùÉÜÜOBÂOR2ÌÁ¡$ ¢gÍJÙ¹ÕIÞ¼9ÌÞ>áï¿x­o'†XY%mÞŒO?~ü“¹¹Ÿ¸¸Ÿ”TX¿~%5cFÊž=¨NÒÆaöö ëÖÕÙ ŠÎÒ»wožòüüü§OŸŽ5ÊÑÑQ^^þÎ;,‹ZáÂ… ÎÎÎ,kãÆ&&&#GŽDåÓ¦M;}útRRÒèÑ£MLLNœ8/4gÎ+++SSÓ±cÇ>û®­®®=zô:¾îíØ±c̘1<­“ùóç/_¾üÿ޼¼Õ«WÛØØOŸ>=44nß¾íì윟ŸŸíììììì|æÌTŸÁ`ØÚÚFDDdgg·ê}B  `mm=vìØöîEC°Ùì”””öîEûSTT4kÖ, UUÕ}ûöµww~3¶lÙ¢§§—––ÖÞ!ü¿Õh+i@]]]LL m§¤¤´žäIøõéàaîÝ»_ÇËóô¬ÍÉáÖÖV§§¾|>hPÙ÷À•I›6Å.^Œv¹µµE>>™.@Á‹QQ¨NùׯE¾¾E>>?¼\Á³g¥Ÿ>ûù¡ÝÄ â–.- [SSäíuñ"ò5^ìë[gƒÁÁÁйsgžò»wïÖÖÖ:;; Œ?>77÷ùMO?|øpÿþý¿þúk÷îÝÇÛÛ›Ãျ»ûãÇíííß¼ySSSóþý{¸~ýúÀýýý;wîlffæãã3tèÐ[·n“ÉLHHØ·o_jj*n¼¸¸xÇŽÉÉÉ?öAõððxôèÚ®¨¨èÕ«×¹sç,,,† òùóçÝ»w@AAATT‹Åª©©‰ŠŠŠŠŠ¢š.téÒ>}úÔ¶÷@ ü?ß¾}ûѳ/\¸PKKëúõëíÝ‘vfõêÕW®\±²²rvv.æ 8Gh˜”””„„„ÒÒÒöîáÿ­F[ON£Ñh†††h›Ëåþ²)mÀoTSŸ÷àÚ¦Ñé²C‡Òib;«.Z$3h ŒL®»{Ìܹ\6;ëÂýãÇ ãìYPœ4ÉøÆ  Ñ ß¼a—”€áÙ³yîîY—/€Ê¼yâ¢ÆÆ?×!.7óìYPš:µÓÕ«Pøæ »¬ ÏËus˾zT,3331©³ˆˆ žò7nÈÈÈ <&MštæÌ™ëׯ>œZ‡Íf_½zõéÓ§ƒ ª­­Å^|^^^¦¦¦ÁÁÁòòòµµµ ¯¯ÿüùslØgll|ìØ±É“'ÀŒ3V¯^}ëÖ­µk×¢ <¨®®ž:uêÏþF¯_¿ŽŽŽ>sæÌüùóQIFF,Z´hÑ¢EL&é © §Õ—/_† Ö²÷ @ ðƒn¿²)þÓ§O·mÛvøðáž={âBccc Ö».›Í0`€Í®]»Ú{êåÞ½{FFFíÝ¡Y´†ôôô"""ÁW|||—.]°©*á¢ã„ùå×D€E@€dÏžòcÇÊSŒ|TæÌIÚ´©&+«26€Ãá”—@uJ «´T@JJ¦TSnÄVQe R7îgûÃe³ÙååP•œÌ.+cHJÊ ð¿ÆGŽd Pfð`ùÑ£ëlÍfçççwêÔ‰§>¾k×®<MLL —––633Cëk˜èèh UUÕêêj:nee%..^gosrrÐuËËËÑ䨪ªJJJâ ………¡¡¡¥¥¥¦¦¦ÚÚÚ <''§   S§N\.7 ;;ÛÊʪNÝfzzúçÏŸÅÄÄ,--¥¤¤p9‹ÅŠˆˆ044yýúueeå€Ð @UUUTT2‡Ão™ÊÊʈˆˆÔÔTcccCCCªËCEEETTT×®]9΋/„„„ú÷ï/ žž^^^nhhÈf³?|øŸŸogg'û=†ù‡²²²¬­­³²™••…ì_ÌÌÌxÞžiiiUUUúúúçÓ§O¹¹¹ÖÖÖ¡ýúý¯rAÁ×ñãÿ¿q!¡ì[·þ×ø•+¨0×㾡!çsssžr$ÎÍ™3gþwà׿\gΜ9Ás®¨¨h×®]y +**&Nœ( ,,¬££cddÄd2%%%qäóï¿ÿær¹gÏž€«W¯Ö×mžK(((èêêâÝœœœ¹sç"Ëx33³¯_¿âCêêêzzzü >~ü–,YÒ·ËoB@@þÃd±XíÝáw"66ÿùdggÿÔ¹ü¶ & CèÉöàÁ,–(((ð¼7ƒ‚‚tuuñ¹êêêïÞ½«ïZîîîTˆN§/X°€Z!99¹ÿw£““óðð@fö<$''s¹Ü-[¶ÀóçÏq _¾|¡J4mùò市‚‚¸qã=z„E™7oÞÔÙa~£ý7¢Cååå<Ér{ôèUߨgÏž-..þõëWsss|ÊŒ3(Ž(**š0a>* °sçN‡ƒŽ¢dK§OŸðÝôæìÙ³½zõâéatt4—Ëåp8û÷ï§ÊÉ/_¾Ä×B™ÜÝÝ»víŠ*¼~ýšËåŽ1B]]=<<ÿ¬¢¢¢?NOOÇJH¶ÿþnªììlžÅÙQ£Feeeá ƒÖÑÑ ÇâgÏžm Í””;;;Ü ¸¸øµkר¿»••õŠöööùùù¸Byyù¢E‹°¨,$$´eËthÖ¬YðôéSkkk<ÀmÛ¶ýÔßQ3‰ŠŠÂ¹¹¹myé_ ê£,33³U¯åããÓf×"üštð 2q‹—GDЙL£ ºÇÆÚdf kiQ+HK›Ü¹cýí›Ú’%4nmmÌÂ…ÜFÏl 22&÷îYýªºhM@€[S»p!—Ínäé £¤¤„Z+##óòåËg߉ŒŒöööNOOoB?—/_~÷îÝ;w%$$DEE™ü×§qäÈ‘²²²·oßær¹®®®¢¢¢M޶§  pîܹŒŒŒ7FDD 6 E»i4222-ò£B},Y²ÄÃÃCQQQAAÁÃÃÃÃÃIYˆèèè &,X°Àßß÷îÝùùùÓ¦MÃÁ–SSSûöí+$$ôöíÛ’’oooAAÁ¡C‡æææÖy­sçΡø^ééé?~´±±9sæ N±ÃápFåãã³}ûöÐÐÐgÏžõìÙóÌ™3ÊÊÊ?ž7o¬Y³EíRWW‡ï™{¸ß]SSS»wïž’’rþüùððp//¯¾}û9rdÕªUÔnøúúŽ3ÆÅÅÅÏÏïàÁƒ¥¥¥S§N­®®æïðž={îÝ»æææhrP7`ìØ±/^\¸p¡¿¿``à?ÿüóáÇ~ýú5 £ªªªwïÞ***¾¾¾^^^Ý»w¿zõ*Õ5q„ >ÕÕÕ<ðôôTRRúûï¿yšÂÔÖÖöêÕëŋ۶m öññ™9sæÃ‡Gÿ×U$;;ÛÆÆ¦[·n/_¾¼uë–¤¤ä_ýEu¯ RSSÓ¯_¿¨¨¨û÷…™››OŸ>ÝßßU¸ÿ¾¸¸¸››[RRRttôœ9s|||¶mÛ†[X½zõÉ“'§Nàïï¿`Á‚ƒR/1zôh99¹Ç{zzª©©ýûï¿ÍøÃ"4…6ÈM!ù'\Cø^UÕ‡¢Íã°Xjj> !‡¢~‰_½5U•’ÂårsîÝC»©‡ã:?¥!¤6·r%:±:=Ë忏º¢Ý´cÇ–––ˆˆ›ÍÆ%K–,ÿ®#Ö¬YûöíC»?¥!ÔÐГ“£–˜››S5„\.wÑ¢Epûöm:>iÒ¤úܰ† JCvuttdeeù«¡¸áçÏŸçþ1 !Ðdš£!DhkkkiiñŠŠŠ2Œ;wîà´.ŒvgÍšE£Ñ¨O]”'¶>í ÏŸ6úš_±bÚE:«•+WR뤥¥¡“'OÀÝ»w©G7oÞ Ïž=C»HeçîîŽ+TUUihh ¦¤¤ :~åÊ\Ôyûöm}F‚â Aƒ¨…(=Òøñã©…K—.€Ã”·'Ô·©S§â·[ff&ƒÁPVVFÓ‚âfc $—ËÍÎΦÑhÆÆÆhiÞ¿Om933FK²²²DEEõôôjjjp! £íääDmiié„„jk#FŒ€eË–á’qãÆ€]ii)õ·Ø»wo#EG©ár¹Haèåå…vQ|8üÓs¹ÜC‡À‘#GêlçÆ%~~~ÔQóÜZUUUÂÂÂVVVh7>>žÁ`ôèÑ£Î[ i'Mš„quu€5kÖpÛ ¢!DäææâyˆŒŒlíË=yò_®¤¤¤½GOhk:¸†©¢ÅþþÙׯ¾~ýeøðjŠUP ¤”¸~}á‹^^ÏŸ€€¬,S]„¿»@¤ìØ3o^üWUKƒƒ?™›ã9·nñ\º677@Y9qÃÔxá‹ (//¤ª Ìï'oÝ3~š5uößÒÒ²²²211ñf±\]]åååûõëÇSsÊ”)ÐÔ°x²²²ùùùŸ?.—»yófþPŸÈ;qÑ¢E§ ñE÷îÝCoq¨®®Ž‰‰RSSC%ªªªPQQÏúö횊¦]”@ Z“‰'â]ôPÂ)Rß¼y£§§§¯¯_õ¾}ûÀ—/_êl'”Ÿ––µ5ô¨D«fü´l OŸ>UPPpttÄ%L&sâĉµµµ(¡B[[{ÆŒõ ª‘¬-DLŸ>°ÎªNÖ­[‡Ã_+++wïÞ=++ ItoÞ¼€aÆáÉ”””455‰‰AÁ±S§Nå ŠÆÏÛ·o+**fΜI57nœ¨¨(J¼„Y½z5V RÙ¸q#ÞF6®Ë—/Çž–¦¦¦••ÕÀäÌ;—Z8mÚ4à¹úæïŒø+¼yó†F£ 4OŽ™™™„„¾Óxn-&“©¬¬œ““ƒv?}úÄf³©w2ðÝZ›6m ÎàÓ mN;­™yC”„8\ Ô\¿¸µµQÓ§‡Pèí-ѽ;>Jb•”¤ìÞ>xpÄðáå@§œ84Htë&aeµùù™çÏ¿} 4AA Ó€]VV†ÿUð™‹Ð™LVqqÊ®]ÿküË Ó NžDG%»w·°ø_ãçο{Wgÿ{ôè”|/^¼ÈÍÍ7n@33³Î;‡‡‡GDDüì,¡¼óÖÖÖ¶¶¶***çÏŸïÓ§O++«Î;(**â?Ëû÷ï{öìiddäàà ¥¥õùóç]»va?i$ÓÚÚÚjkk£EJDHHÒ:¶À A -Ч‚L¹ª««SSSãââD(˜™™@})ݸ\®§§ç„ ,--544,,,€bð‰r69‡DyyyFF†žž–¸ÈK­„ŠhP?õõ‰ÂQðÄ*CB!^ U$F=´µµ¥ÎgXX—Ë-G1á(½mB÷„„„ÔÕÕÓÒҨƱiúN-©©©©ïêL&“çwlæ¯ÇårñÌHHH”–––••á:ÁÁÁóçÏïÙ³§¶¶¶²²rjjj“o-ä4KR–·=mi2 ÚÚÚø{,11±¾[šÐQùí£ŒŠu颵i§²R¾.¯6ù±c-².^¬ÎÈ56Vš<™ËåæÜ¾-nn qqË  œ›7+¢¢h †ˆ‘‘²‹Ëÿ¥ÑÌ^¿N;z´<,Œ&$¤4c0ÄÄŒ¯]«øŽéÿ/äèÚÛ¶U§¥Iöì II˲oÞ¬ŒŽ¦ ˆ©¸¸ˆ|O 4š™·wúÑ£åáá4!!eŠüCeÔ¨QëÖ­{ñâZÌ“””\³f 2åçàÁƒ8=ýرcåääc •õë×ósvvÖÒÒruu-((;vì´iÓ‚‚‚xªÍž={åÊ•ÎÎÎ ç£ç¹Äš5kðCmïÞ½VVVÞÞÞ¥¥¥–––&L ÆL_¸p¡œœÜóçÏ9Ž‹‹ *ÌÊÊ ;vlÃÁú¡¡Óé4ÍÀÀ™óQéÒ¥K§¬ZµêðáÃ}ûö1c†‚‚Bqqñ_ý…"×Dv£}Îy@¾Ùü§£’úâˆ@c"?×y-Ö}ïQaª¯t ’c/^¼ÈßRNNŽ'PjÓº‡Ê™Lfk§Ðàp8(ub›ù+Ðét:þøñcžj8Jí½{÷œõõõg̘Œ„—-[†«5óÖ"´ CPP©ÄÛ@ g0zzzÈ&‹Åb%$$ð§=#t`~{PP^^›â*ÍdÏž’©$ºuÃÛâææâ”(g<0$%µ6mâ)Tœ2¥¾úêË—SwÅ-,°N¤¤´þý·áÑ?}ú”ÃáÐéô^½zñGQà <¹"ÀСC‡Ê_gÆ užkccC5¼4h¿ÿ C à¹ÄŠ5¬Ð”)S¦Ô?'Nä±cAö6ã~>$@ 4™Ÿý\ÔÐÐ(--­3Ù?Gޱ³³óööFŸõ™™™T¥mHLLä_×kL'%$$äääâââjkk©«iÈÌ/M¶Ää 3ËÈÈH}}}\ˆòRԙ⨾vÐ)Hs…th:::Íé*µ{ÔÂòòò´´4==½&À?{õØØØ¸¸8ꜣ_¡áÉi==½ððpssóú’?mݺU\\üÇXxÞ°a6µE·V}k¿"""è‡k !FEE¡5”˜˜##£Öþ!ü:tp“ÑÀ’%K222ž={Ö¾ÝÈÊÊòôôìÒ¥K7Š8Ý\½zUII‰„¡Í––ÎÈÈ š&6‡¬¬,‡ó‡ Dòòòø{‹Ç(%8ùÝË*++===Ñ6²â‹å³U¡2`À€ÂÂB.‘‘‘qõêU--­FHHHDD$&&†Zˆrcœ:u ‡Œær¹{÷Î.\ˆíiß½{Þ»wo”OùÉŸ8q¢iý¤Ò»wo!!¡ëׯ£LNˆÃ‡WUU5Ù¾ñ É¡¤²²òÈ‘#BBBÔ¤?’?^_…ÄÄDdGŠvòóóñQ:~ùòeªŒ"Ç~5°UÛ„"""Ø–-š´÷ÚŽß^CØá™5kÖ–-[.]ºÄŸª-¹|ù2‹Å¢Æh|}}·mÛÖzùX 33³ÐÐÐ)S¦ Ü(¤ÖÙ¶mÛÝ»w§NfggG£Ñ¾~ýêáá±víÚ‘#GòT611QTTôòòÚ³gµµõëׯ}ZRR²¤¤dÑ¢E8[:fûöížžžsçÎ µ±±IMM=vìXyyùÅ‹›óD533 \°`•••’’ÒÈ‘#{÷îýìÙ³Áƒ£”¶wïÞ}öìÙøñãÖï…„„tïÞÝÅÅ…Åb:tˆF£mún’3pàÀÁƒ»»»5jòäÉÊÊÊÉÉÉ/^¼=þüOuXSSsÉ’%´µµ3g޲²ò›7o.\¸`hhH5¤l%–,YrêÔ©ãÇçææ6¬´´ôòåËááá6l¨3€McX°`Á‰'vïÞ““3|øpIIɸ¸¸'OžôìÙsýúõàààðäÉ“… Nœ8ñÛ·oÛ·o§ºJêëëOž<ùÆvvvsæÌa±X·oß ?~|Ãþ „¶ „ÕÕÕÈR¬µ¯hdd”œœŒ¶£££›ìÆLøí ü¿:¡¡¡¬JØdú÷ïûömjÀº6@]]=""‚X±„¶dóæÍÁÁÁžžžžžžýõùýÍÐ.þ†VWWÿôéÓüùó÷îÝ‹žØL&³OŸ>( %L&ÓÍÍmæÌ™ÿüóhii=|øpÅŠؼS@@À××wæÌ™=zðàFëÝ»÷áÇÑÑ.]ºlذa÷îÝË—/[°`îî¤Á§OŸæÎ{òäÉ£GÒétccã«W¯R…4!!!áu ŸíÇ?þìÙ³gÏž=zô(*|öìÙêÕ«oܸRP(**nÞ¼yŸÃ®®®ûöíûûï¿@SSóòåËÄG=<<6nÜxîܹG¡ccã­[·R'Ÿ_² Ñh<¿ÔþýûÕÕÕwïÞ½råJ˜6mÚ‰'p„ž©£ÎN§ŠIü×EG등EDD‚‚‚.\øàÁ¤…ÓÐиpáJ¼Ûd0Ô« íú~AAAÿ¥K—Þ¼yóâÅ‹À`0,--q4¸3gÎL™2åüùóçÏŸ—––Þ´iSTTÔëׯq .\””¼té²R622º}û6º(ÿT0 :NÜøÛj£êêjþ˜F-Žœœœ¼¼|^^äææð/6:$´[ßó%hjj"оâ\#'Nä‰!N  ..îãÇh»ÿþŠŠŠMk'--ÅbiOTSSÃ#@yy¹˜˜ωµµµIIIêêê Fs¹ÜŒŒ :ŽœÁª««y¨ªªJNNVTT”‘‘á9½¢¢"99Y[[&VTT “K*555)))jjjü_“5554§“uŠ ‡ÃIJJá÷aKMMe2™?œó9sæ\¼xñË—/;wNJJVVV®¯rFFFii©²²22”ÅTVV óû8UUU!AŽ¿©¼¼¼òòrMMMþ³êœ:‡SSSC öXgÍúzÂ?irrr<£6›][[Ës•F¶™ššZSS£¦¦Æßùüüü’’mmmÆf³Y,ÔÊf³ÑïHÜÃår«ªªxn•¦´5ˆŽŽ AÛä„÷çðíÛ·°°0´=xðà¶‘ÍRRRpÂmmífv!t ˆ†@ ^x¢¹Ô޲NÁIPP°‘ñBh45ÿ[Z&aaaj~0*¢¢¢ÆÆÆ<%üÕ„„„¨á^š6(*t:]WW·ÎCM00Ã"w}ðÅÔ§-ᑬ¨ÈËË×']Ô9ut:¿5þšÑÛ40i ƒÕ¯‘m¢\u"'''''×À%PTIžBÆé¦”Ъ´qæ „†††¨¨(J’’baaAn€?T†@ @øµhãÜô”Ams8œ†ƒW: D $Ðvhjjêêêâ0˜¡NÚECúúúX¥‹:0D $Ðvüûï¿ñññ8‘:@¨“ö…„„pÜêêꤤ¤öž B«CB@ áׂX¨ÍLFT×åèèèöž B«CÂFÁe³+¢£+ããËm©6Ù¥¥¬¢¢ö€ŸŸŸ»»{›]®ªª*%%¥í-®]»†£u@ üÊÐh4kª-5„ ))‰cÿegg·÷dZ—Ž ÖdgW%'sÙlžrNuuUbâO ]•±±Q3gF͘QEÑç¹»¿WPøØ©S¾~ÔôéÀå&üý÷×±cóŸ<ØÌ,@C£ÀË«ñ—àTVÖæçÿ°ÚÍ›7sssQ^cD§N,--ùköïß_]]½ù²›Í€†5„!!!666êêê}úô177WPP8~üxã/Áårùû¹`Á‚/_¾<þ¼™ý'@h°@ØÆ&£ ¢¢"))‰¶322ÊÊÊÚ{2­Èo/rjjзºšç*á²XÜFëÖ$¬­ddåå%{öD%EÞÞì²2Ðݳ§OU•ñ­[Â::"úút&SfÀ€ÖWôÌ™gÎpª«éÂÂBJJ@§×ddä=xÐÈÓkóóý$%ßËË'¬YÓpÍK—.©¨¨  Œ…Ëå²ùÔ­¨Ñz£Fäåå1"44tëÖ­Ož<¹pႵµõéÓ§ßÂüùó………yô™ÎÎ΂‚‚.\híþ@ 4œy‚Åb±X¬6¾º¡¡!Úàr¹111í=„V„$¦ÿ²ƒÛååß½xkÒÓц¤ Ðh‚ Ð=6–ËfÓøÒ¼¶U‰‰¹nn Ù³§é‹ ‰ÚüüÌsçââl[SÃe± ~ $"##ãýû÷Ó§OÇ^Ë¿^^^™™™6lø÷ßQÉìÙ³ÊZµ¦¦†Ãáð( %%%mll¼¼¼***êÌAL ðëÀhT¼Ñß-‚ŽŽNxxxMM $$$tíÚUPP°½§„Ð*üA!§¢"y×.àp4Ö®­ÍË˹q£4$DDOOÙÅE¬KT§2>>óüy®ºhSM-eÏž¢7oС¬«W‹¼½•fÎdª«§îÙS[X(7|¸´ƒn¿ðõëÂçÏ+"#…TT$ºuSvq¡Qþl8ÕÕ™çΕÐ ¹‘#RR tµìóg´!Õ«CBåä4ÿù‡§ZI@@þ£Gå_¾*(ˆ›™©ÌK€Â—/ ¾F–~ü˜´e ]XXsÝ:þ =}ú”ËåöëׯiSšœœüäÉ“ÈÈHaaa“I“&QŸ\µµµ®®®Ÿ?f³Ù}úôqttøÏý–——çææinnîää„—ÁRRR@AAZYUU•º[[[ûðáÃ6›Ý­[·Q£F!ÇëÌÌ̇"c÷›7oÊÊÊÊÈÈ899¡³ú÷ïÿöí[ooïáÇ·Ô}E þ(>|øpæÌ™¥K—ZXX´w_ÚˆÚÚÚcÇŽ‰ŠŠ.Y²¤NŸ~Ž;yêÔ©_dÁÑÍÍÍËËk÷îÝŠŠŠðøñcww÷­[·jhh´w×~-Þ¾}{ÿþý•+Wjkk·w_¼¹éÛX ÐÓÓ‹ŒŒ€ÚÚÚ„„jôQBGâk²³SvDêÞ½¬âbTžy··„µ5¿{—ºw/Hôè! -H‘Á².]a==¹áÃ7nVAÁÿB.7vÑ¢ ŠMcæùógÏš>Ž4ЬââˆaÃJÞ¿GG³oÜ73k «‚ŠŠÿ»èÕ«r£GKÙÙñ×Iܸ1e÷nj¤™ô“'MŸ?ÖÖκz5ç{˜ÒààÒà`P]°@@Zš§‘?€©©iæóèÑ£+W®ÐÔÔ,(((((رcGpp°ŒŒ ”——ÛÚÚ~ùòÅ¢¢¢âرcXµj>ÝßßÖ¬YYYYt:½¶¶öĉ>>>èIgff'Ožœþ|åÊ{{û?G œ1cÆíÛ· étºššZ#Âû÷ï¿{÷îØ±c¿ˆJáõë×—.]Z¼x1ß¾}{ùòåY³fµ’@XQQѳgOMMÍÇ·÷ПãÇ:”„¿핊chh…Ü…bbb ‘%BËòÛû6Äõë9ÕÕòŽŽ¢FFÀ./G‚" 11•yó°ä&3`€¢³3ö-¤’}í’µ6m²ð÷×X½š&(Xöùsò¶m¨BúñãHÖÑQ™3GXK«¬ÁüVVººP››Ú«×—Q£Šýü¨ ž>MÙ¹8µ¥K-Þ¿×Ú´‰!&V“°v-È!ïèˆjŠèë+89©ÌË/ ÀçÏŸi45¢¦¦Æ‡⢢¢cÇŽåççÇÆÆæææþý÷ß ÇŽCG/^¼~óæÍàààoß¾}ûö­oß¾ÔÓ·nÝ:~üøôôô¢¢¢±cÇ~úôéܹsèÐðáÃ{÷îÛ¹sçcÇŽUTTðtoîܹ_¾|yýúutttllìƒ>þ¼zõjtnQQѤI“ <<¼°°0** ŸhllŒFݪ7@ ´;¥¥¥7n|ñâE3ÛÉÏÏ¿s玭­mTTTddäÖ­[ùëxxxlÞ¼¹æ»KÿȱcÇN:E-)//ÿúõkhhh{wð{Ó¨¨ºº:Ú.++KÿîHEè`ü‰¡€¬¬E@@ç,ƒƒdd >ñÌðìYÅ)SжöÖ­Æ·o‹èëóWKÚº¤´·m“´µÕÝ¿_ÒÆ²¯_G2N†¸¸Åû÷†çÏ[}ù"Õ«W=¤ w¾_軑dþ£G¡½{?ž]Rò¿+nÙb]ºè=*ic£½m›ìС{離JÑÙÙ໺Rfà@WWÃï²âââÔÇÍÿ®˜ŸïÀGBBµÎæÍ›-Z„tzt:}Ù²eðíÛ7t4++ ´´´Ð®±±±••õô•+W9rDIIITTt÷îÝðþ»•N§{yyM›6-//oÙ²eÚÚÚÇŽÃÁlž?¾páBléêè訫«{ïÞ½ÒÒR’’IIIiiiª» Ò7’t:¡Ã“™™¹sçN77·f¶“””Äáplmm‘Z€Q—óüÍ›7·mÛ†žÀ&û÷ï?tèµDAA!++ ÙÚM¦ÝB Iêÿ þ “QŒòŒâææÀ77/òö®ÍËkrk¬ââªÄD.7íÈžCµùùt&³&3dRVF×Õܸ1bÈš·°°ŽˆHÞµ+óüy$溹Õš½~ Nyx8Ð……ñ9(1—[•”$ʧñ«¼¼<999þržÅNX»v-òî㡬¬,''é‹¿â:tÏž='Nܵk×ĉqfUÌÊðuuui45ù¡¸¸øµk×Ö¬Y³wïÞ[·n-[¶ÌßßÿÎ;"""Ïž=£¶×°  \XXØäŸ»9”””ÄÆÆ6æžOÉ@Ì3„ÆÓ‚±Ñ ¥¤¤èôÆ®œÈÈÈ4ðËår ¨O]þ*++¹\nÃq°JKKEEEÍ‹sV^^N£Ñø/„˜üë†?EmmmMM˜˜X}ŠŠŠ$$$?„ÂÂBIIÉ:ëWWWWWWãpùM ??¿_„ÃáKKKÿðÉ\§Ëj¡¨¨HVV¶áÓ‹ŠŠ¤ë2íá‡ÅbåççËËË7< 7XXXˆ<>¿<>„íÒYYÙ‚‚ÈÉÉiüIøøíBÚ÷W5‡/ïÜÿ²MÐh´ú_ç(d ·®, ¤2.mùøùøü·s4Vó=<¦ðwuY#•Õ;p@ûß“·oO=pŠÞ¼) RRâTUÅ?°Î i §Î4ÂÂÂÎÎÎ<…»wï¦ „UUU[·n½zõjff& ½{÷¾víÚêÕ«§OŸ¾råÊ5kÖ¬Zµª¾w•€€€€€<å®]»Þ¸qcÑ¢E#FŒ¸{÷îĉÇ—˜˜;vìà©,$$ÔÀ×¢ rfÔ›Í~ñâE²8¦¦¦¶WŸ „?“ššš 6ܾ};==]LLÌÎÎîÔ©SzzzõÕ¯¬¬\³f››[VV–„„Dß¾}O:…=ÓΜ9³nݺ¯_¿^¹råĉYYY:::'Ož:tè­[·Ö®]›––¦¬¬üï¿ÿ.\¸Ú¬»»û¿ÿþ‹ŒÞ;uê´uëÖqãÆ¡CEEE:::›6mêÝ»÷Ò¥Kƒ‚‚DDDÆŒsæÌô0`@XX\¿~ÝÓÓŽ?>aÂþÎs8œ={ö\»v-66 þúë¯%K– i§sçÎè øðáóçÏ‹‰‰ÅÇÇSOôèÑܹs‹ŠŠÀÄÄ„F£éëëûQ|JJJV­ZåææVQQaaaqùòeäË`±X[¶l¹víZjjªˆˆHÏž=Ož<‰lûë$77wùòåOŸ>Eá´iÓöìÙƒÃl\¹råðáÑ‘‘µµµÚÚÚ“&MÚ¼y3ÿrd}äçç/Y²äùóç²²²Ã‡?vìõÃ722rÉ’%***Ë–-ûûï¿·mÛvúôéÜÜ\¦¬¬ 'NDÞšššÆÆÆÔä·oß¾]·n]XXXEE…¢¢âàÁƒ:$//ŽÞ»woΜ9ïß¿ûöíþýû•••×­[‡ pêÄÃÃãÈ‘#555BBB}úô9zô¨‰‰ :zöìÙµk×~ùòåÖ­['NœHMMUWWß¾}ûÌ™3©lß¾ýÌ™3ÊÊÊÈù‚ðë $$D§ÓQêæöÒ€‘‘Q@@ÚŽŽŽîÑ£G{O ¡…ùíBæw)«šOy…J˜´ÖôhǾyò£G+͘ñŸ¾©ª ÈÊâÄ8ŒÍOÁ”ÔÝ¿¿*55÷ΨŒ‰ýžFÚÁAméRjeAyy‘ïGƒ´´tÉw3ÔŸeêÔ©nnn+W®œ2eв²2‹ÅÒú¯Ä;uêÔ &¸¹¹mß¾}íÚµGþ«Am$666ëׯ_½zu``à¸qãÐæýû÷yà ©²á¦Ð`Ûee«¨¨¨ Ò @h{† âëë»lÙ2{{û¸¸¸;wvëÖ-** }îóÀf³ûöíºjÕ*[[Ûoß¾íÚµ«[·n111èQS\\\\\ìììüíÛ·3f°X¬“'OŽ?~þüù'Nœ˜0aB§NNœ8ñ×_ééé 45{üøñ¥K—0`ãÆ,ëĉãÇ¿~ýúÔ©S ¶¶¶¨¨ÈÕÕuÆ ½{÷Þ±cÇ£GnܸA£Ñ®]»cÆŒQWW¿zõªžž^ÿþý <Œ=úÑ£Gœ7o^iié½{÷–-[qþüy˜³¤¤¤¤¤dáÂ…!!!'Nœ9sæ©S§–/_®ªªZ§0_TT4nܸ~ýúíß¿_^^>00ðÔ©ScÆŒùòå äSRRR\\^äû"náË—UÉÉ Ö¹skw€Æ`pÙlNe¥üèÑü„””P…"œ½°ÀË«6ËÃÃåå…(‰èßeZ}}†¤¤ œ\m~>«¸¸Î+ΑÈjÐ66¶‡ZÛæ_KCV©JJJMëFs *'i4±%Z .—Û[€;wîx{{ïß¿«JTUU'Mš´oß>'1ÄÅ‹?~üxîܹ¹sçÀÈ‘#¥¥¥,XpôèÑÍ›7ãjñññÀd28püøñ»wïŽ3zôè1xðàË—/#0//oÓ¦M¶¶¶ÏŸ?G«£G–““Û¸q#?~uꔸ¸ø¢E‹bbb®^½jkkÛÀƒ÷Ñ£G=rrrº}û6z(­X±¢gÏž—.]Z¶lY—.]6lØðêÕ+ww÷Aƒmß¾¿##£#Gޤ¥¥!É™ßÒRKKëÑ£GèÃd2OŸ>ýàÁƒ)S¦À“'O?~¼yóæ-[¶ Êººº#GŽÜµk×¹ºüÞ÷îÝ›––vüøñÅ‹£’U«V!Ó’oß¾9r¤G>>>èÕ°zõêaƽ|ùòÁƒ£ëyQRA&0¯^½BòóÈ‘#Y,Ö¾}ûnݺ5mÚ4Ô`UUÕ›7olll`Ù²e>>>ÆÆÆ tssc2™ LuyyùêÕ«eeeÑÊÂòåË׬YsàÀlû‚"""|||×ý AƒlllΟ?_§@(%%†5®“'O.,,¼qãFDD5lLLL@@Ò»öèÑcøðáçÏŸGa^^ÞÑ£Guttüýý‘´ÿêÕ«Q£F5ò…Ð6ˆˆˆ °5„t:ÝÀÀ <<8N\\\—ï Ûƒß^ MyöìôcÇ8UUŸmmÕ—/ÖÒ*ÿö-=—i45kZ÷ú‚‚òcÆäÞ¿_ðüyò¶mJÓ§ ÈÈT§¤¾xAS]°€&$$çè˜çî^•˜ømâDE'§¼rnßn ÍŒÓ§³®]Sš}:-- OÌŸ?WvppªoªŸ<Ïã6//fþ|Pš6M€Ï_ÜÚÚúúõëááá?+***öïßÿõë×ööö}úôñóó ¡:Ð/^¼8//oÔ¨QRRR/_¾LJJÚ»wo#ÿôéÓÉ“'µµµQ‚D??¿‚‚‚+VôéÓdddöïß?þ|333GGG--­¬¬,AAÁˆˆÔ2¡™9sæÃ‡óóó½¾ëcÑâ–µµukßá7%..ŽN§cÓMƒÁ¨/Øz\\ôîÝ›ZH§Óy>â© ÈØZ"((ˆ­Âp›ûöí;sæ ®“””éééX ä±’@Ú¹Ÿòˆ‰‰ìü_;ôàE.…͇ÚIžÆÅÅÑh4,ã©k`ªÕÕÕë´gA½åYìCÂRcR]]––&..Þ“’Y ù£Î$%%±Ùl,Ò7:{¨¤¤¤¨¨÷=ÿŒ€¼¼|ÿihhèãÇ322 QH‡|jƒRRR¸A$òä"Faº ¿øäp8ÈY´]ºÁd2µ´´PÀùªªª””’©²#ÑBº¨¨åÇY—.åÞ¹SËÊÏÖÓ56ÖX½Z‚’ê@@ZZªONE5)¼d÷î5ééBjjhWDOO²G ÑpQcc kkš  ŠÊÿ.'""íàÀ.)ÿ¾ÇÔÐ°ŽŒLÚ¼¹øÝ»Êøxàp˜’¶¶êßÁÅ--ͼ½“·m+ RQ‘>\kóæ˜yó*¢¢êŒ4£µq£ ‚Bîýû_¿²+*Dtu¥úôÑüçæw…˜€ŒŒÕ—/ÉÛ·½zUÇ©­eªªJö쩺hnÄð̆˜X‘»¼\ÚÞ¾Î<„C‡€W¯^Í x?ÚÙÙa}*ÖÖÖÒÒÒ80Ì;ÿÇÞY‡EÑuüìÒÝ-°4*%Ý‚‰…Xˆ 6¶ØøÚˆØŠ‚ (Hˆˆ¢"ÝÝÝKïî÷ÇÕq]âÃzQßù=<<»wîÜ9÷ÎìÌœ{Oxîß¿?$$äáÇúúúñññ§NÂ|.]ºtæÌ™§OŸöôôÈÉÉݾ}›AWVVÖÓÓc°Û433æ0ýýý/^¼èïïÍÅÅe``°nݺɓ'c•—-[¦¦¦vòäɘ˜˜€€QQQCCÃåË—c¬¬¬Îž={ûöízWÃׯ_³³³Ó´.Ίææffff˯g---5éô455±±±õ®ÿ#AÐûº¦¦&Ãû''gbÀwÌÖ744°±±1ìˆöŽòõã0˜Ê755 úrKKË>ƒÊtuuµ¶¶öç)€â2„HE_ã¼ÝÒÒB¥RùùùÎã„ ÐSµÿ#NS}JˆJšššh4Z~øP©T{{û(++ëèèðññ AºÑ•ö­>#8ÿ2 F‡PcWQQÁ2effâ áßÄß ‰IbÅ ‰+ꪀ€V/çr™={döìÁ¾ò™™ŠŒ¤¯ 4uªÐÔ©ô%DvvÍÐÐÞ+~ÎÉÞ'<ººj¾¾ô%ª÷îõÛVV©õë¥Ö¯ A&..ùãǨÀ"*ªú9b(**ª««¿|ù’J¥b‰€~üoÐ-W€ƒ™¨Ëçä‡```ðøñã>ÛY¸p!½ âõëרgAAÁƒb^%}b``0p~-''''''ú’¦¦¦ÈÈÈI“&õ©îâààà€œœ\YYÙáÇYL^^>''%Sý‰2€Íܹsigeee?~üˆ‚jb…hÕè;VþÕuS^^>33sç΃ ôÅÊÊ*&&ÖgPkøœó¶°°PâóÔí7uDXX˜‡‡‡——·¿ó(##ý}0ÝGbVÁˆžžžŠŠ …ïó*úô郯^½ŠZ¸xñbxxøà[@ÅDzþÍaHEØ;¶Ó¿??¿˜˜JæÜÐÐPSSÓ_nœ?Üü÷¿ÎòåËkjjèãbÿ­<~ü¸§§‡Þÿ‡Q£FÑh4ŸAÖ×ÒÒjkk£O‹úSd€§OŸþH#hUaàw}t ”âãÖ­[0nܸÁ -Lõçê6ÀÐÀÀS{ô¨©©ÕÔÔÐG íîîFJr™c˜…D?~ü …IOOï/¼¸¸¸PXX}¾ÜÆÆFÌö’““³¢¢‚Ò «>‡úÑ£Gß4ÔôÄÆÆ€••¦O¢uÈÁƒœýýý±’¦¦&//¯ï“çñ;ä¦ÇÀ“Ôÿ­à áåË— ¡ã77oÞTRRš6mÚP ‚ƒƒóû²cÇNNÎ5kÖ<~üe‹IOO?yòä³gÏú¬¿wï^–%K–<þ¼¹¹¹««+%%åèÑ£?2Ëfnn>fÌ//¯;wS©ÔŠŠŠ‡Ò‡-ý¿HHHpppDFF¦¥¥¡ ® ìܹ“}Ë–-nnn%%%ééé«W¯ œ9sæ7™¼ÊËËÀ…  Þ¿?Ƚ6oÞÌÇÇ·eË–Ô××÷ôôdee={ÖÃãÏú(îë¢E‹üüüJJJ||| eÊòåË¥¤¤.^¼xôèÑÜÜÜüü|ggçK—.ihh ˆ¦ÿ—C‡Q©Ô3f„……µ·····ÇÄÄìÚµ ¥s$[¶léèè˜:ujxxxaaá7ÔÔÔÞ¼yƒ@{{û¹sç ãââz·obb2nܸ÷ïß/[¶,))©¼¼üîÝ»kÖ¬áååÝCg¦ôM ÛÚk×®•””Ô×ן8q¢ÏH°`ff¦¬¬ìççwäÈ‘‚‚‚°°0SSSä­Šóûð;ä¦Ç””Ä̬JKKÉŸ3«áüéà áNNÎ'OžÌž={¨ùå888<|øŠ…ƒƒ3’’’¾¾¾\\\sçÎ`cc9rä¾}ûúsESTTDKy666|||ìììGE‰¤¿›û÷ïOœ8ñĉ²²²ÌÌÌ’’’ ,ø¦7uffæ]»v544Lž<™^u¡gذaþþþBBB+W®”‘‘9räµk×/^|¯†>Y±b…¸¸ø;wäåå’ž€Ð‹/„……-Z$$$ÄÊʪªªºsçÎþÖ@&NœxìØ±ŠŠ kkk™™3g655Íš5 888G޹wï^%%%…}ûö3ËÛÑØÚ𥥥››[EE………''§¾¾þµk×° NNNK–,‰ŽŽ655•““[±b…¬¬¬‰‰ ÚºmÛ6ŽmÛ¶ÉÉÉaÙ˜2 =xð`Ò¤I·nÝÒÒÒ’’’B9 ß¿ÿÝFw ,°²² ’••9}úôñIúÄÇÇGZZzÿþýòòòÈçÿûäÁùEüV+„[$¤ÑhÙÙÙC+ÎÏ‚ððáCôIFF»µáààü\jkk_½z…>kkkãi'pp~ôi'ÆŽ+**ú´µµ%$$dggS(YYYjkk£¢¢Œèâ6·´´$&&æääÐh4999}}}l½²²2>>ÞÌÌ ‹¹ÕÙÙ:bÄYº baaa<<<ôÙ 999++«¶¶VTTTWW«O£ÑBBB† F¥¨¨(==ÝÒÒ’þõ1...>>^HHhÊ”)ýåþ!“ÉIII™™™ÂÂÂêêê ™åÉdrXX˜¦¦¦Ôçèk}ÒÐÐðúõëúúúÑ£G£û[JJJMM –ÚÛÛß¼y£¦¦†\òh¨»ººddd v),..ޝªªRQQ155efþ ¡»»;)))==ƒƒC]]]EE…^+,,ÌÈÈ;v,ŠÉQRR’ššjaaA¿üRWW—”””››ËÊʪ¨¨¨§§Ç0hiiiÉÉÉd2Y[[›ád½{÷ŽJ¥Nš4 ]uïÞ½ãááaâ–––––ÖÙÙ©¦¦6räHú!õõõ†††ô飢¢(б±qòáÇÌÌÌaƱ³³¿~ýÚÄĹ™UUUÅÅÅ™ššbW/ªÏÎήKr¯½½=::º°°ÐÐÐPEE¥µµõýû÷¦¦¦C•¡>+++>>}?~¼°°ðˆñûÐÓÓƒÙñ’H$úÜ'CBww÷óçÏÑ ‹ ýÏçWqpþ p…çßá§(„888C®öÆËË þ·üõÙÔþ/ñññ˜¡®®îddÁùMÀÍçpppppppppp~S°uì!7E(++cËïxh™¿\!ÄÁÁÁÁÁÁÁÁÁùMÁìÀ‡<¨ ‚››³!oii)//j‰p~\!ÄÁÁÁÁÁÁÁÁÁùMÁ®®®oMøù‹ÀóOüeà !Î_NLrÁƒg=”Šyø/ÐÐD¾û$<§°ê×"àM²hÒPwçÀLFi4Úob5***ŠÖª¬¬ljjj‰p~<.Î`imm­««£‹÷Ÿ¥­­­ªªŠ!ß•˜_QÝØßÖQ#ee¥„N_zìm®¯,#)ô ME_¶Þ8¸ÉæÀÆé¿èŽ{îR¨Ô²ÈsCÝWœÁÂy‚>4¬…>geeéëëµD8ß®~EOSS­Ðh"³g3}¸Üž››·ysKL ™YjýzéíÛëÚss'MâøÞÀJméé‹…¢x韙ÙP÷{PØÙÙ%&&–––þ;‡ X»ví¹sçlll†ºëŒÄæœr ¼thA]Cëå{¯ãR ‡+JnZ:Á@Kž¡ …zénȳàx*•6ÎtÄ®5SY˜¿Lù½NôˆMÉ*¥R©ÊrâëÆ™é)c[—ï¼­¦,µvñس7^ú‡&„ f#w¬žÂÌôåH£ÑÜ<Âߦä×HK .c6ÓêË7&¹ÀõáÛ„´"^n}MùŽ“ù?ÍCåUo>òhïúi‚üܧ¯~ŒË•“Ù¹z²‘¶bcsÛ‘K¾¯Þ§ÉH 9Ì6=é«›O ¹ã䵀Ȅ¼šú­2KmÍÌõ¿ÄÛpÐ]\„o‡ãäKwC|C»»{Æسn*+ 3Üñþ–ÒÒÚÑÓC±[ïÍÕ—Ì1ý×/Oœ¾ù=W€]VV¶   VRR‚GšøCù/éñTjCHHCp0­§‡ÖÝÝVzî\¯/…LƪPÚÚºªªºÊË©ÐÙšô)&a[FFcXªÜQ\ÜÓØØS_Oß|w]]}@@é™3Õ¢EKÈÉÉׯWÞ¼‰)™ÿf>>ñã ÆÓ“FgœÙÝ–ž¢vv½÷¢´¶Öùù•ž9Srút§g××V—Í?ÖRÛÚ€J­ *9q¢æÉ“îššĈ/**?~üw}~~þóçÏŸ={–‘‘Ñ{keee`` ——WQQQŸ»?{ö,33³ÏEŒeË–Àõë×Ê©Têµk×ÔÕÕ{ïU[[ûòåK//¯ØØØîînúMåååÈòJ¥†……=þ¼¢¢‚awKKKffægÏž}÷˜üËl=ê9{Í•ªÚ¦înÊÕû¡†3Žtt~éµ›G˜ÙœÂcsÌô”ÅExϸiMÞ_^ÕØgS…¥µ~¯/ß{={Í•ªÚæüâê‚’hh"ÍtÞwö)ëX“É%Ó–?rÉÛÑÂîø®“Þ4Í\_…‰‰xîf°ÍWb ÌÁóÏ&/9—–S>Öd8;ëþ³>6GÈmhkv~¥oH¹›ÁÆ³Ž¾‰Èäçö ˆ=÷ƒeGg÷Dû3;Ž{133–Ö8÷ iAˆ³7^Z/¿˜^¬5Bz¸¢dàÛdsÛcÁïS± ¾¯žÅ™wâÀ9VVæ¼âê½gžÚoùblI¥Ò&.>³j÷Ý̼ %9±¬¼ŠY«/»?‹@[ïx0™uô]T–‰Ž’¤ÿ…ÛÁZ“÷—T|º“”W5ø½Nt{f`s8ðmŠ·ßëDËy'üC“´§¼áñNB”ÿ]TÖœ5WùFaG,.¯Ó™zð´[˜Ÿ¹¾Ê‡ØËy'Ü<° o“}^ÆYÙŸÙ~ì1%õ‡/>Ÿåxm­khÍÌ« P©]=™y™yõÿÆòþ‡OHHÈPK1d”––Þ»wïêÕ«éééß±{ccã½{÷²³³‡ºÿŸèèhwwwÊ =MþP¼¼¼Þ¾};ÔRà zß¼ßj…ðü ?óáÃÚHÛ7oÞänÚİ)qôh´‰ÒÑA£ÑÚóóÑ×Z?¿ØQ£Ðç·Ñ#Ft”–¢]*ïÜùTçùs ™ŒÕÁþª>ình@Ÿ3—,ÁŽUíéùŸÿKM!{íZjgç§ÍJî–-ØÖw‹¡Ï·o÷Ù¯xƒ·‘$Rå½{˜ØØÖìÕ«ßD Vóä ÚZíá6•^¸ðž‹‹^æwôG cay PîêolŒÕùÀÏߨÿpåʸÿ>}¡¦¦&ttt0Tž>}: åF£%$$hiiÑ_rãÆkllÄê=z”••ÛzüøqT~ûöm8{öìâÅ‹±­Ó§O'“ÉØ¾¶¶¶PTTd``ÀÄÄTúù<"üüüàÊ•+W¯^€»wï¢òºº:kkk€5«¬¬œ””„íhccC"‘bbbèos7n¤R©ôí1‚““³§§g0jMM ö[Ãçç²á ;^¾Ka(·]{H‚Zkc’ h4•J¿ñnz¾CÊ*8‡¯=÷X{G*y $Ç=wû<ÐóWñ@r’ÃÖ£T*•B¡öôPh4ÚfçG@rxñ:Uëêîѳ>Ī´¼°´•¸<­¬iÂÚY·ÿ>ûG£¯o“äpðü³>š˜^L”_b·Þ‹F£»ùHÇ®¾@_oz¾’AnÉ•{¯QÉï@r˜³æ Öˆ´Ñf 9hXíCb´’;FNØ$‡´ì2T!äCÚû˜l¬~Lr¦,=‡•ˆh¯’ƒÎ´ƒ5õ-4­©¥MÙr'AnInaªà憆]-T*õ¦ç» °VUÛÄ3ÒÑdöQrÛ§;ƒßëD 9,Ûq } ‹ÊD»û”7…B¥Ñhÿ\yJÆ-8ÙJî Ñh±É@rК¼iîº«Ì K£“òÑ×Vr‡¬É͵Ím¨Daôv 9Œœ°§¬²F£‘Û:µ&ï’CBZֈШujöüŠËòß'''û­UUUý¬f999ÕÕÕ‡ºsCCTT///ºjjj~G ÁÁÁ°oß¾êøøø,]º´  `h;;sæL(++û¥G‰ˆˆpppˆŽŽªn€ÁP}`233±ŸpMMÍP‹ó»ðäÉ4&!!!C- #¯^½ÂOÙŸÎi…ð3é³g·&$0 ˜™ -=½øèQ´‰öyŠF£988”•™¸¹Q ³  «¸8»¬,ôZ¤j OŸ;·§±‘ßÂBîèQ]] Ñʯ\)»zU¨zð ôÌ"‘CQ‘ÚÞ^uÿþ ¥¶±!²³£FP µ££úÑ#?zÙjW\¿Nikã35•\³FlÑ"";;µ½=wãFJs3}µœõë›?~d“–fæç€žÆÆôY³h½"Ä âââ`Ĉß1ÚžžžÂÂÂ>>>EEE™™™‹/ 9vìÚµgÏžY³fÕÖÖ644<|ø~÷]»vÅÄÄܹsçÝ»w£G~þüù¥K—zeùòå åÖ­[ô…W¯^åââZ¸p!C娨¨ììlWW׬¬¬¢¢¢³gÏfgg¯^½š¾NMM………ººzxxøóçÏÕÔÔ.\¸põó EŒ9²­­­Ï5Ïß×õºê$ +çY@fÞ§eO7°¶ö®}ë­1óËÉ–ì¬/^'Р…¡êÉ]¶H$01{(Ô+÷^ë(Nùl#ÊÂÌd=~TWw¶Âæ¸ÀRL˜ka‚¹–ÖFþ ·ƒ©TÚáÍ3˜>gΞ¬~_ ¹kÍ”5‹Æ Ï‹fsr°bÝDðrs¼~¸‰ÁÅÉ¶ÐÆ²ò?Õk2ÂT÷Kè`]u’ƒ„BܯîoàF­Í³6 ÑhYù•hë 0f¦Ã›g °ÔÖl¢¹Üðx×BîØ³v*'ǧ‰æjÜœl~!_uÁvŠþÑ­³ˆD¬˜7HÄŸ»mäâduÒHe©ŒÜrT¹¢ºñ±ÌŒ‰:zŸ’ pq²M¶Ôhh"‡Çæ`mrq²…>Ü.)Æœ¬‹f&3±±±±±±¿ú(ÝÝÝ!!!ý™EüV8;;777·¶¶Þ¹sçåæÍ›·nÝŠŽŽþ)­EEEÅÇÇ\§°°0$$¤§ŸßwÓÖÖC}’³3çðᜟœÜššy[·Rš›Éé鼆†X5ZW—Ü?ÿÈìÜIíìL3¦9"¢«ªª> @ÈÚº· ……… %%Õ{½£sŸ8;;3ÑEôqqqqwwG_QäÏyóæ ¡ »+++‡†† €»»»ŒŒŒÏŽ;ªÙÙÙ999ݸqcÏž=È¡9///((hÙ²eØÄ6†•••••¶BèäääááÕÓÓƒÈ!“Éëׯ¿xñ"&ÆðáÃ/_¾¼víZ¬III(..VSSÌ©ZHÄ¿H.ÆõMŸŒ¥‘Êô,8þÕ‡4¬GYUcWwò4ëÍ35úUÖ‚’šÎ®žVrçÎ^t…µ_üÅ ™F£Å¥•”×Õ6´"­¦½£k0ògåW‰„›žïè 99Xégè&‘HæÃº‰àæbCºÜWCÑøU’ŠúÔ¬ÒªÚfdÎÊ`ÔÊÇÃ!ÀÇÕß`æVÉH õé‰0¿×‰aQ_ž—|¼œe• ä¶N¤ï1tAX€›@ ˆ ñb:$ˆò¤e—µwtq°³fTÑh´òêFúa/,­€ü’/#ÃÁÆ"*ô净d®kÀMCûÆÖÖ–J¥Ú¶ÿûÈÍÍ?~üš5k ÆïLrr²œœò`°øø‰œ8qÂÖÖ¶·+ø÷1cÆ ^^Þ̾Ü7èxíÚµŒŒ UUÕŸØ‘ððð‰'=zt÷îÝýÕÙ¸qãˆ#&L˜ð­{yy­^½ÚÓÓÈàüw`ggGÉß7“Q6l™L€’’’¶¶6NNÎnç_忨J,[&éèœ#Fðèê6GD|ŠËò]P;:𣢀[S³59r*+“““;KJ(d2‘……œ’|ææ¼FFÀ¥¡¡tõjÚÌ™ƒ<„ȼy5OžPÛÛkž<wp¨¼}¸ÔÔ¸44z+„ÂXÖ>­§±‘ET}ëü:ÿèÑ2»v‘]jÆæˆ §¤ô©ÖÖÖ@oÍ –/_Îôu×—/_Ò¿H1låää©þ<àèÝbÿþý$I]]½wûk×®EÚ HII‰ŠŠV÷u²¸¹¹çÎ{óæÍ—/_Nš4 ®]»F£Ñ{W¦Wc²²²ÑÑÑõõõ¢Ÿ‡ èŸåªªªÊÊÊ™™™ííí˜o7†^¿?( õs "ä+™ÇL[…4LØTW‰>ÚÊÀ Fªj›èµ0¥€e O_µûN~q°·w[û TAúö×P•ÖQ' ÜÓÎ.Ú€˜€úyÙ¿±¹mÁ&× °v6 Q~f&bKk;ôe€qA[{W}#Y^Z¤Ÿ.4@tRý¨JKêkÊs°³Â ¡¿€Ñ°—Õ…Q¾ +e¬£ˆ­ö!3ó™qzóoŽÌqª««•••¼1bÄ÷Ù¡ôÉo>°’’’ööößݯ߼w8¿ìÝ£»»›B¡0 .xþ¿@PVVFSü4-''yáüAü= áàï˜(° µë^LhÏÍE>«=<ª=<¶Rššº;;‘•)Ý:ñ[æN„¦Laâá¡´´T?x 0~|ý«W ÖËÑS__rútµ§'Ê·ñeÃ×aH‰\_Þq9”>ÙÈu–—÷Ùf[[°°°ôÞtùòe†<¤666 3ë‘‘‘7nÜHII©ªªêè訩©ááù´~bhhxèСC‡ihhŒ=zûöí“'»Vâ€IDATO`(øøøÐ Yo–/_~óæÍëׯOš4©££ãÖ­[ººº:_‡fÅ(((pss{ÿþ}eeekkkcc#ü¿KHVV6;;»ªªŠD"¡äúØÙÙ9øSù{"%ί¬‘ëG“ ÃÄ`œéÈçVöY¡ª¶yúŠ â"|ÉAGÔU†À›ˆŒ1óOZH¢²ºww ^Gý–n¿ø6åÚÑÅKmÍ‘Ú,m´yð»sr°rs²Õö³ò&%.îçW©È‹ÿ,ѹ›gmxbçœ_7,ÿ?~üôéSäcggææækÖ¬Á*tuu9sÆßߟ••uÒ¤I[¶laˆ±~ûömÿ¬¬,EEʼn'®Zµª÷ ìܹ399^½z…´qãÆšš77·­[·Ž=«YUUåèè8qâDGGǸ¸¸Ã‡Ÿ?žL&;v,))IEEÅÎÎnΜ¯Î~]]ÝÉ“'£££›››Gåèè¨;`L슊ŠóçÏ'$$TUU9ròäɘ¥ýõë×CCC;;;‹ŠŠìììÂú\O#“ÉçÎ‹ŽŽÎÏÏWVV677_·nCR"ÈÌÌ|øpâĉ]»va1Ï\]]srr­­­7oÞÌ0zd2yåÊ•ÈïâÅ‹>>>D"ñÊ•+¨ÂÇSRR„„„FµyófdÆ2MMM'Nœð÷÷7nÜÖ­[é]úi4š››[PPPNN޲²ò”)SèSOáüËÐdµ··sÓ½Êþ(((¤¤¤ ìÜÜ\55µßJeÅù¿üñ>„¬Ÿ—tºzÅDÑ5Y„…‰_k,_Ñ×£úûàÑÕ•Ú¸‘þOþÔ)VIIÚgMŒö½Ž Dvv´î×ðæMñ±c@¥ Ú˺h]]É&;ÖYTÄ?z´ø²e‚“&ýßö©ŸÍ?aoøùù ¥¥å;„ðà±±ñÇmllœÏŸ?Ïà%¸ÿþììì-[¶ÄÇÇO™2åðáÃß7J†††#GŽ|ñâEEE…‡‡G}}}ŸËƒ’’¢­­íææfbb²{÷îsçÎ &?!ZOÃTYl@ºó'¢"/è\ξÙaÂl¬ÌQ yJßPÞEgµµw-Ÿ;iƒðMsÜ*òâ4ícÜ/Ì{K¥Ò‚ß§*ˉ­œg¥‘øÖyxE’Xqyƒ!ëç.HÀ‡˜ŸhQ‰$F Âã~èÜ3±¡¹í' ö‡R__Ÿ™™ÙÝÝÝÝÝ™™™™™‰ì#æææ‡æääÌÌÌܾ};ýM†F£ÙÚÚ.]º´¡¡a„ «W¯ž5kVŸ*))AÚÐ:::^¼xq9œæáÇϞ=CºA~~¾¯¯ïÙ³gutt’““%%%ƒ‚‚lmm1ãvÈÈÈÐÒÒrqq‘••544|ùò¥±±±··w]þðღ¦æÅ‹»ººdeeß¼y³hÑ¢™3g¢ ²ÚÚZ«££ÉÙçX^^žŽŽÎª««UTTœœ žoß¾ÕÖÖŽ•––ž7oÞÑÏüéëë‹Ù€ôôôL™2eõêÕ&L(//_²d ½BXSS£¥¥µÿþÆÆFyyùÐÐPSSÓ´´´ºººÌÌÌžžž®®.$s]]ƒÀ™™™h*0???33“Á™sÓ¦M¶¶¶555W®\166Æ:þîÝ;???}}ý„„„… bŽñ%%%H}322^¼xY´Þ»woÊ”)µµµÖÖÖÒÒÒ‡êÍ•J¥æää ×IJ²²ÌÌL,j+…B±³³[°`ADD„‚‚BKK˹sçÔÔÔ>|ø0ÀÕ^SS£§§çææ&##“••µgÏžI“&aÒR(kkëU«V‘Éä &TUU-[¶la?3Ñ8ÿô™'~C«QyùOIžºººÐý çâW9””Pl˜¦wï(tÏžöœœöÜ\àüy&(} ðùÀ©ªªxþ<ýŸôÖ­À*þi5K4yyßt”Oé%¨Ôò+W€ÏÌŒ­¯”€Í11è(ò§Ok„„¨Ü¸!µn]Ÿ v–”P??Þš?{ô±÷“=FPP¾×6òÀ‚‚‚QQQ»víZ¸p¡ýM ¡  púô鬬,iiiggçï^s[¾|yOOÏ­[·®^½ÊÇÇ7¯/Ξ=ÛØØøâÅ‹ãÇ/Y²ÄÎήÏüŠôaÇi4ZVVòuD ¡/ùCYa7š‹“mÏ©'É™%XaFnù»èop gf"®³—[T½õÏžÏ:a{G—w`,2 äã€ÐéT* Kk7r|ûƉ„õЇx‰M)ŒK)üYã@$øx8r‹ªÑ!(ꆃîe•ßvÙ¯°M¥ÒVí¾ÓØÜ5õ-köÝ;q-–Í5ãábßÎ'!íË«gV~åÛÈÌo:=¢üs§ê‡Ç朸€-q·;ùF}“Q™¤˜@YeCRF |“)ï_†££cbb¢¤¤¤¤¤dbbbbbâþýû±­%%%LLLåååÁÁÁiii²²²·nÝ*ÿlXñèÑ#//¯Ã‡¿~ýúÌ™3oß¾]ºt©OŸCÜÝÝŸ>} ¶¶¶è@–––fff AAAô Œ‡‡ÛìÙ³±’Ë—/Ÿ8q"%%%88866–‡‡gß¾}­­ŸÖ¥7lØÐÐÐ}çÎ+W®¤¤¤ððð899õy_íééY¶lY[[ÛÛ·oß¾}ëëë›››;zôhŸ'OžÀîÝ»ÙØØš—Ч%ئM›²²²=zùäÉ“ÜÜ\‡øøø³gÏÒW{ÿþýŽ;ÒÓÓƒ‚‚9B¯rÓãææxþüùÀÀÀ3gÎ|üøqöìÙwïÞ}ÿþ=ª°ÿþœœWW×ÈÈH·lÏž=ììì7nLLL&‘HhlwîÜÉ覦fBBZYõññILL ¢¯ðæÍ›ØØØˆˆˆääd[[ÛœœOOO´ILLÌÃã  ÀÝÝýöíÛ))).\@[_½zåââëׯG#6òsZã¸r劸¸øÛ·o?þèÑ£ÂÂÂÞ˰<<<ÑÑÑÈ—áĉ‰‰‰±±±hyðîÝ»žžž .ÌÊÊzòäItt´——Wccㆠ¸äççËËËçååùùùåç燆†úú~JtëÖ­/^œ>}úåË—gΜùð჻»û›7oý{Âù™ü¶¹é1è ËñÐ2¼BH`aA™úº*+S­­›#"ºÊËBBÒfÌ@+r¢ýh? "''J_ãåÕö9÷Ö×ôî0qqñ@Ktté¹sÝÕÕׯçmþ;4?ž…Nñ[° Ïj˜3$H…RýøqŸ5É))©ÖÖ䔔ƷoKNž“À¸q}VFAS¾#……B)))áäääúl¡šMoóIS“ÐÖÖîééùî;Ý¢E‹XYYO:³hÑ¢þ|šÑÄæ.ØÒÒÒçkÙ²e˜$ÏŸ?/--8q"}´×Qf`$Åø¯µ¯o"kO=8büžÑsËo1~}²»Á°wÝ4K£áço‹én0›ó䃂Zëæ®»Š®Œ6T5ÒV O—4Ød4ÓYÉbÊe?H4‡KŸØi›™W¡2f—Öäýfsþ×Û¨g}(ø}Úàù¿ìZ3•B¡*[î4ó˜ÞÆ¡IúšòßÔ²¹æÌÔBÂÓE´×+ŒÞ.®·ÑíQØHe)â½~Ì¡¹¥]oúááãvž{\Öd«êØ]÷}>þˆÌ§vÏÕV“ÝyÂKBÓè¹Çµ&ïÒZ·tûÍ®îoH¤†¢­jO= k²uíþÁÆ@þ¯VäÐ+¸€€Àœ9s( ²€sçÎñòòÒ‡¼BZÜ‹/{{ûîîn/¯O!‚òóó£££§NÊOg¾±~ýúM›6¡ÏÇŸ9sfss3ÒgÒÒÒBBB-Z„©üüücÇŽ---MLLì}8__ßìììeË– ..®ãÇ€›› ެ¬¬/^Œ; sB$O:ÅÊÊzãÆ úš .}ú4333Cȸ´´4zÇ’¡Åzœ+³ª‚Cù”––ön³§§'??_RR’þ®‹Œ2Ðxwvvjkk~žßGƒÌp¢1aâââ*++Éd22síèèèmÿ2HV­ZµlÙ2--­7.[¶L\üÜŒ»»»³³³555Fèá›ÝŸ©˜˜½Àô§ƒB¡äææŠŠŠîÙ³«€&s¿ézÆù‰üæ&£Ìh"++KBBâÇÚÃù÷øBvYYÝ””‚Ý»k¼½iŸÃÃ°Š‰Ioß.µaæ%Hdc#03ÓzzèƒÊ0qrÓçÇU¿, ……ÀÊJëêÂêðk½Ÿ³z59%¥£¨ŠŠ€]^^ä³÷ˆÈìÙJ..»võ46Àk` zÿ~ê´im™™ýù72ñð]`Oq{ûÊ;wh]]"³g3v"gâæFDõY%%GÜž“CüúA%0~<çðáåW®Ð(“èüùÊýÏ[ZZ„°°°­[·b…,,,,,,Ä^‰YXX6»yóæÍ \½zõêÕ«‡ŽŽŽÆæ,QºÌFÅÚÚúÚµkŸÎ ++öŸá  Ç¢÷¼_µj•———¹¹9ýÂjÛq×®]¹¹¹îîîÁÁÁìììööö+W®Ü¸q#ƒ¿¯¯ïöíÛœœ@QQÑÍÍMOOÛŠDŸ@MM ++ë.‘«dŸDEE™™™UUUûOdó?xmç'râĉ+W®lذáèÑ£è™5sæLŸl= ?|ø°~ýúþùGFFfÕàì›ÄÄÄBŸã½Ve€þt ³²²***þøõŒó³`cc#èè÷4E¨¨¨DGG£Ï,Pãünüñ>„_÷†È.'Ç£«ËÜϬ!…¥·æÃÄÍM ‹Käà ~lÈÉIøúyL`ffê+à/3·¶6®.ƒ6ˆ‰Ç5r$Ëg£Ó@É'&nnøzýÀÌÌÔk®…ÈÎÎ(0×È‘œÃ‡£Ýûì5‚ED„GWw`m±páB2™L™™™­¯åM"‘Ø;[½°°0öXê½£ŒŒŒªªjïʽç•YXXèßú<Gï`ǽ›âææVRRBS¿¡?S…ÞÚ x{{‹ˆˆàs¥88,,,ßCKEE%??ðn3èæÓû@³fÍâæævww÷ðð€^ö¢M?/†&§PbÔ!üsœ°ÿ ªZÀ êééé/gÏ ÉËËËÈÈ5jýÝ8!!J—)88“¼÷àÈË˧§§÷w"dee™™™?~üØÕOÖ(#ÏÁŸ‚AîšÎÎÎØ3‹!p š'ý¾0l¦¦¦($ìÛ·oûëCãlll²²²)))å_'ŽzñâJöÛ'%%%ôy}éO‘HTTTì3@+΂½ðü¶+„@"‘°w¼üüü®Èë†óoòw)„8¿ ‘Á‡ø»ÉÈȈˆˆX»v-ÛMpppþL$%%›››QÈ~ä86mÚÔÙÙ¹|ùr,n…B aÈËŠ¼k¢¢¢êêê¨T*ö†ÇÅÅ5gΜôôôK—.‘H$Fc`OOÏ•+W"mçþýûAAAÚÚÚFFF0räÈñãÇûúú^¿~«ßÐÐð¸Ÿèb³fÍ’––¾ÿ>Æ&++kýúõ,,,ôÎc£¥¥eaaññãÇ“'O"ëÚÚZ{{{ …rðàAúš/^¼X¸p!RB<==•””‚ua899µ´´¬\¹³)íéé DjÛâÅ‹+**¶lÙÒÝÝ ÙÙÙ“'OFZ :‰555±±±œD´@£Ñ¢‘ieHHúêææÆg5ûîÝ»ÖÖÖžž$ÞÉäS§Na):P‚Êþ¢ã ÆCBBººº:::.êääD¡P–,Y‚iP©ÔÝ»w'$$,[¶LZZº¿ã–——[XX¤¦¦@QQѾ}ûˆDâêÕ«±ñ'“É+V¬ÀÌ{zz^¾|Ù§Ï'οá211)*~rP§P(yßTg¨ÀÂÿ|ÆÆ Üššß´ǹsçþ‡!‡D")** ¸¸xîܹk×®jIqpp~> ,sss‰´hÑ¢Aî5oÞ¼åË—HII ?½p÷†››{úôé$I\\üáÇØ&”m¯¾¾~Á‚½É&L˜àîî......¾xñbQQQÌõ._¾<|øðU«VIIIYXX¨««‹ˆˆ¬Y³¦OØÙÙïÞ½ËÇÇgkk+,,¬¨¨¨ªªZ]]}÷îÝo ×éâ⢪ªºcÇ~~þáÇ‹‹‹GFF:;;3øOnذÁÏÏORRRJJjÊ”)®®®½Ñ+V¬˜7ož··7òY000@î”X °ƒ>üòåËüüü²²²***˜) :‰$‰!+=†­­-++«³³³ŒŒ ²¶ [·neffž5k–žž‰DÚºu+rkÄPVVÖÓÓ‹ŽŽ––– ¸Ážžž={öHJJš˜˜èëëÏž=[FFfÆ }V¶´´”””|ò䉴´´°°0 ñâèèhkk,,,>¾cÇŽMš4 Œíäò ®®.---''WTTäììŒeX²dÉÂ… }||$$$ „„„¬¬¬¾#Þ8ÎÏ{-ùMF@II û]gggS$œ¡‚ K›ËÇÇ×g66œ¿ q© ÆŽýÖ544úK²ü—aeeµaÃ†ÞÆ¨ŠŠŠ³gÏæÀâ·mmmXp6 ‰ß'6)Î_F}}=f;'//Ï5“xtttÔÔÔxxxdddQÀI0zôhzVVVž)S¦ L­ÁÚÚÚÂÂ-ý‰ŠŠN™2åèÑ£cû¿ÙNŸ>ÏÀÀÀÞÞ‹¾ ##óðáÃúúz777ú{Ezzº——ך5kÎ;G£Ñ$%%ííí/]ºDŸ³NHHhùòå²²²¢¢¢4MYYyéÒ¥.\ Jœœœ½½½ŒŒŒˆˆˆŒŒŒ½½ý¹sçÌÍÍéëÐh4KKËŒH………—-[F"‘¤¤¤„„„ìììŽ?>wî—ÀE¬¬¬,,,ëׯ_½z5@ž;wîùóçéÇÓßß?66võêÕÈ)‘H$Κ5ËØØXBB‚F£‰‹‹[[[Ÿ8q­…ß’%K$$$ÄÅÅ%%%nܸ-ˆ¨ªªòòò’H$GGÇ>ʧM›ÆÎÎ.((¸bÅ $ 33³‚‚‚••fŒ………F£Mœ8QII Ù³gspp°²²ZYY]ºtÉÈÈHPPÐÊÊ ³3g'''??¿¥¥å¼yóz?MØØØ¸¸¸¦M›&""ÂÎÎnkkËÍÍÝÝÝ-%%µxñâ7n ‹ª7,,,sçÎeccããã³±±™6m‘Hdbbš3gÒ~ÙÙÙ'NœèäätäÈ‘¦5©Tê¬Y³Ž9ÂÃÃÃÂÂ2eÊ”ƒÚÛÛcˆDâÌ™3MLL$%%ÑøO›6íøñ㦦¦ßösúvêêê0Ók…ozÔþÝTUU!ka¦¢¢ÒÛ;æ7……¥¹¹ÙJtww£»ÜP …ó `³’222½MSppp~ µµµ¯^½BŸµµµût›ÁÁÁùqrsscbbÐç±cÇbGÿ ÊËËeddtuu###é˽¼¼lmmÏœ9³ù3Ùþ,^¼øþýûEEEøÜôœ¬¬¬øøxôyüøñøü)Frr2ÊòS¦LùxÖÕÕaöÛ «è8¿!¸É(ÎoÄÍ›7) ýrÍßMeeelllHH???ž¸ §?þˆÌ!!!L“¯­­ý¿žp†\!ÄÁÁÁÁÁù] Ñh7nÜ`cc³³³jYþ%,--õôô*++<Ø;•‚^!üÍÝáëÂYYYC-Îÿá/ÉCˆƒƒƒƒƒó@£Ñþùç‰Ô;ˆ×èÑ£ïܹ3zôè¡–ñ'sûöíÜÜ\áǵ,88¿/ôN¡¿ù !HKKsrr¢ø½ÅÅÅZZZ8µâ 9¸Bˆƒóߥ‡B-«lãgaþM}Ó¿•’ŠzA>..ÎOé@J+øy9¹9ñì ÿ6ä¶NÀÉÁúãMý× ‰(BfoDEEÿJ;RCCCCCá–çwç2 ¤¤”””T*5''GCCc¨…ÂéÜdç§£³»±¹áB¡þßø|$™n½ÿô#úZ]×|÷IxIÅÐÛú–ÖÆ¦6663"5»LÆxËöãŸR®”ÔHm^·ÿþ¯“3#·ü¾ÏÇÖ¶Î!«ŸÒʆ»O«j›¨£ý¿û"¥‘ú9GÛ£0‡­7ÎÝ|9T}inm_¶ã–°öz9³mzÖ‡„F­=÷øÇ¸ÜAƒiÂ*þëÓÕÝÃP²å¨çâÍn/ÃR†jĆ„3nA[oÜô|7@ …ÚóóF‡……Ó¯~ÿB`eeÅRƒvvvµD8ýòsLF;;;Ÿ>}š”””œœÌÍÍ­®®nfffaañwloo¿~ýúøñãW¯^=ÔC1EEE·oßF9‹ ¬¬ìÖ­[,,,³gÏþEGܾ}ûÓ§O}}}GŒ1Ô½Çù­ih"wtvW”\9ï+Ï¢q&ß|åL¶ÔÈ-ªž1Qç[wü)¤e—M[~¡ ¤f´ÊDsu>ÎäÌ÷g‘VögšS‡~ÎèÔõÀíÇ¿÷Úmª«„.Ÿk.!ʧ¯%?ÔÒý«Ìš¤ÛØÜf5Z}¨ÁÁÁÁùoÁÁÁÑÚÚ È !¨¨¨äæ~šÕÍÎÎVPPj‰púæ'(„éééóæÍKNN%%¥šš///@Ép¹¹¹±šÇŽC‰t‡º×¿ïÞ½{ùòå¦M›DDD°Â”””¼¼¼ššš_wÜÖÖV”dÖÊÊj¨ÇçG! Þ´tÂ62j¤ìíSˆª Ž{î”Ôì[o}xó ¬Ðyˬ37‚†J$z:»z ³³›¾p¦•ÎL«¡ÑŸ‡S]%z­çß)„Ä !ðòòJHHTTT@cccUU•˜˜ØP …Ó?ª–——ëëë“É䃮]»VXX˜F£¥¤¤,^¼øÖ­[­­­žžžXåÇkjjâ !'Nœ°¶¶¦WŸ={VSS3lذ_wܪªª£G.[¶ Wÿ „~̈LÈ«ªmÖPf7Í€«¯8+%õ^þ1SÆhªÈ‹@yU£ç‹è6†¼ÜŸGƧ)‘Ä&[j(‘¾º›¿ú•U[ߢ5BfîT}>.lSUm³hRrf‰¨¯‰®Òh•þÄ{þ*áCl޶š,½6‚ü\G·Î¢/‰I.ˆˆÏÍ.¨’—1ÒV0ÒVü¦qh!wø…$&¤qr°éiÊM¶Ð  ô*ª_„&eä–órsÌ´ÒÑP•nkïºïó1&©ü^'æV133-cF$¢“òÃcs—Úšññ| ž–SXõ6235«LTˆgÔHÙIê—C¸¶¶¶²³³33ÿÂ7*VWW'$$Ôßý¨»»»­­¯Ï­mmm­­­¢¢¢¿NBD[{×â-nOc™™ˆ\œlM-í‡.<÷?$,ÀÍPóc\î–£D")„ñiE›±³±\¸œSXÅÎÆÒÖÞµçô×õãMG¢]Vì¼}ÃóIŒ‡›ý¶×‡¡I/nnB›‚ß§.ØèÚÜÚ1BI²¬²aÏé'³Mo_ÂÄÔ‡ëòÓ 8ؼlâéìêÙrÔãʽ×AŸ«®¡ìg™¸þã0Hå!9³döê+yÅÕ#%›ZÚ_|>Îd„·Ë:Lóy·lÇí†&²WSKÛ¡ Ï/\0ÁLÍqÏ]TáÂíWÀÄDœomÈÉÁúÀ'âÒÝS=%L£»pûÕöc»º{„¸ëÉ4Í\_Åã’£„(?ª°þàƒÓø|t}ø–¥£³ûÐ…çnÇ–,™cŠÉ`·þ/7»‚¬¨w`ìá Ï[Ò®±³õ‘œmÃÁ³M/Ý yäÅÍɆbÛl[9éä.[TÁïuâ¾3O¹8ÙÖî»ßÝC€ÓdE›[ÛWì¼óØ?šH$ðñp64‘‰D¦¥NïžK ² *·þãYYÓtj÷\ìXîÏ"Ž<:¿¾…¡jð»Ô-G=D…ye¥ŒÐÖCž<ÿ ØX™O]´ŸeÂà@XÛÐj·Þåuxºœ´+óÙ/eE}olTU€îʘy'>Äæh—¦P¨.BS²JmÿUùÿeÐcTPPp€÷Èêêj___›…]]]yyyœœœ²²²ÿrRSSãââ-ZD$þ´ ]]]Æ øÁŠƒ3ä`ï®4­³³“>ÌÌo‹„„//oss3”••µ´´ððð µP8ŒüÐý´¥¥ÅÍÍoíÚµ ›xyy—/_N£Ñnݺ6lïèèˆ?tè}ýÔÔTSSS^^^;;»––ú­•••³fÍ]±bZ1G¬Y³FQQ±¤¤DOOO\\¼¿çF»pႼ¼<77÷˜1c°­™™™'N˜:uj^^Þ7Æùóçùùùyxx """è·¶µµ999IHHðóó£>VTT¤¤¤HHH\¾|&OžŒ„GQ˜¶oßÎÏÏOï€[WW·páB !!!ccã÷ïßc[»»»…„„:”’’bff†FrΜ9MMM}J;aÂæûáÇèŒxxxܹs‡‡‡‡!ÆOvv¶€€À¦M› 44”/&&æÖ­[²²²"""ÂÂÂŽŽŽÝÝ_ÙÑEEEñðððóó+((œ={–ö9l ¼yóFKK‹››[LLLNNîéÓ§?râ ›Û"ò°?úH¡§®> Œ]»xlsªKcòÕèçû¥Äjë[Ùòúƒ”Hbe‘çšS\]tìèì¶ßri)Y¥7<ß­œg‘ýæxœßÁò¨skŽA{Õ5´Î]ç"!ÊŸÿîd‚ÿ¡Šèó«ZÞñþðàYDŸGÉ-ªÏ‹T}rúzà•{¯çO7lL¾R©<ꜥÑð»OÂ/ß LGz(T»õ×ZÈ þ‡R^:ö€u8ØYûÇÐÿl=_D11çNÕï-CTbþÁóÏTäųßoJqñººöYpq¾‰»wï ß»wo€:ÇŽ[»v-•úI¥ÿþ=rÁxùò¥„„Ĉ#H$Ò©S§þå.äææ:88<þ|õ»»»ûÙݹºº’H$Ÿ¹/88ßÊh¡¬¬Œ}ÎÎÎjqpúà‡œœœÎÎÎñãÇsrröÞŠ ‹ŠŠÀÒÒÒÎÎŽ‰‰IHHÈÎÎÎÎÎÎØØ«™ššjhhÈÆÆväÈmmmOOÏe˾82UWWkii½yófß¾}¾¾¾‹/¾}ûö¸qã°—•úúúÊÊJkkëÊÊÊU«Vijöý&±nݺM›6IJJž9sfÏž=………+W®D›>|ø ««½bÅŠ‹/Μ93((HSS3++kC±víZ'''CCÃ'Ož\¾|¹®®ÎÜÜ<22m¥ÑhãÆ;þ¼‰‰ÉÅ‹W¯^|ðàA ‰yóæ¡T¼ãÇ·³³[¼x1𡬭­mjjÂ~íšššÓ§O¿té’££czzº……ö£P(õõõ¾¾¾FFFÌÌ̇Ö××÷ööîÏ@ׯÆfêÔ© //Îˆššš……™L¾~ý:}Mww÷ÆÆF333hmmmnnvrrZ½zõ´iÓPödWWW¬þ«W¯ÌÌÌZ[[]\\¼¼¼444¶lÙ²k×.´µ¨¨hÚ´iT*ÕËËËÇÇÇÊÊêÍ›7?râ "âsf:cº£ò õÔõ@I1þóûçs°³€ž†\ÄÓ½hef0Xªú\ß .ÂÇÄD´›f0c‚vEucàÛd¨¬iÌnPH€{²å§,Cço76·Û7OJ\˜˜ˆÈű¿Ð”9U #Ùïú?¹­ó¤k „(ÿíSËx¹9@B”ßã’# 3ÓI×ÀÁtÄÃ/*#·|ßzk ÕOjçê…–쬷šX¹|÷uskûáÍ3´Õd€—›ãà&çÅè3Z£ãæd ±áþ³>D"áá…UÒ‚h¯+‡)ÈŠzøEÓ«èü¼œo=vŽ3A$Ìô”gOÒ«o$g岨©ªmâçF6½ÌLDÛ)ú F­ôðrs¼y´ÃDW T$y-à ›è*Ý8¾TJ\Àp” 3SIEý 0 Ué³{ç!µVAVôÁùUpÒ5x¸Ø§U\^ÿiR¬¢ºñ}LöXãâ"},ø£°´.΋•Hbl¬Ì³'é¾vßN¿f›SXõàYÄ|kC,^‘™ž²¾¦üÛÈÌüâšÞ’œ´ˆÉŸé£ØÙù»' éééÁþ÷IKKË­[·fΜ‰™oÌœ9ÓÖÖ¶¸¸kaåÊ• åÁƒ£Fú—»0mÚ4))©Ó§O²þŽ;úgæÌ™€æaÿô˜øÝÝݘó·òg¥"Ä““Ã,ãòóóVp~~Ȥ­¡õgÙ()) %%%0cÆŒ3f¸ººÊÊÊž?ž¡fEEÅÑ£GwïÞ Û¶mSQQyòä 2k€TWWGFFêëëÀ´iÓZ[[]]]}}}§OŸŽZ “É ±±±ý™&§¦¦ºººš™™…††"CÊ]»v…„„FÛ¼ysGGGxx8¦L/_¾|ïÞ½ 3£}’””tíÚµ%K– åP000ÐÔÔ½H©Ùe|<È­1¯¨úGƪ¸¬®‡B&.ÈPŽB³ !Z¹íîþ¤ _?æ0ºáÓ—qVûÌmÅ¥^1a^ìì`¿öCÝÄ´Sz9;»zªëš`âhuan¯€*•ž/¢99XûËGRVÕ(!Ê?À2fAI \¾÷š~ä½c™˜ˆ¼Üì ¦,åí²ŽƒuÕî»’›öŸõéòñ÷ÝÓþô;›··7}Ö¨­[·^¹r{t¢GóІ…@ïƒLlbb²ó3ÖÖÖ`jjÊPòÐÓÓC¡PþôËçÿò‡šŒ€²²2溜=˜·kœ“Z!D/÷UU}Où#uq0ç N±(l r?E–“Èá &EôzåÞ ,(}ÖÉÉɆÈ7ÌÌÌÇ +--•–ȯ k|Íš5,,_?ÉäæææÖÖVnnîÜÜ\"‘øÝÙWJKK;::444Âhhh„„„äääŒ9²Ï‘D!ÐH’Ù³g¯[·îáÇÎÎΉ]¸p!}†x<ªªªðùt£¡ðööþðáV¡ººõ&Nœheeåíí¾bÅŠÕ«W£«çÁÅÁ-­?mE.ü4 ¤£NJ 8•uÜÅÿ†ç»ø´¢ègû™˜ˆ|œ¡)å* óWAús‡S$‰F'åG$ä験ú¬ÀÃÅͽ:ÒÜÚ"}Ç.¢G€âüŽPú*h' 3R‘!h+¹ƒ~ukððp³còÐÓBî€Ïjá`àçåt?¿ÊyËÌË÷^_¾ûÚÌöX¬ï™ûƒÜþÕÙ@Φ–^r¶v03…y€™‰8wšÁ•{¯Ã¢2•äÄ?Æåγ6èÏP–“ƒµ¥u ÷xöê‘ÅXà»<¦5eŒ¦ï«çË~G.ù”ÔÜ?74ëleeežžžóçÏokksqq!‰NNNØm*""âýû÷¥¥¥êêê“&M dîܹƒ|>|øÀÂÂB æÎËÏÏŸ‘‘8wî\)))ì·nÝBSiؾ’’’cÆŒquuMKK›6mÚ¤I“ª««½¿ÝÝÝW¯^577×ÒÒò÷÷ Z´h‘ŒŒ |üøÑÛÛE+èms›––öþýûôôtIII]]ÝqãÆ1´ìáá‘@¡PÌÍͧOŸÎÌÌüòåËÔÔTÈÏÏ¿víŒ=z0˧8è !prrJKK#ãóÖÖÖ²²²_Hç[ù!…iJôOèAx$é[›¥†”aaaKKKú:“&Mš1cÆàÛ¬««ƒ^ú¢¾¾z»A¢’Á:£À-(Œ Vhii)!!Êêëë™™™¿;æçÀà òñˆ¹¸¸fÏž}çÎððpSSSOOOssóvA·'t,t¾õôôèë011Mž<ˆD¢¿¿ÿƒ.]ºtøðá³gϺ»»ÿ5s´¿!rÒœYòÝ-Ô|~&*1èLR£ TF¨ÌXuéYp|ZN™†ª´‚ŒèǸ܂’Ìao`æ[>|yÆ-hÕ| òsGD *á«PO]Ý=‰éÅ|<ÈSq`Ð"dnQrì i˜ð‡ØœäÌsý>LYÐo©£³ß‚¨/'[RFIgW½’¹¿Ôý!'-rfºÊ°%ÛnzÆìWšÞgµ¦æ¶î 6bQ‰ù +5PœdyiˆNʧ/¬khÍ-ªV’Ç̃Ú]¹÷ÚÃ/ZUA‚F£-˜nÔ_ƒ2’Bñ¹%õتck[g{G7ZùÄF>§°²ÏX©ÌLÄ™V:SÇjjNÚïù"úæÉ¥DÓùuÄÆÆnÙ²…@ 9r¤¡¡ŒŒŒlllzzz6mÚtåÊ)))WWWNNÎL™2…B¡¬Zµª«« ?~üøñcÐ××5jÔË—/·lÙ¢  @¯nÞ¼YBBSwîÜihhèââòìÙ3(,,œ4iRZZÚ–-[ˆDâ£G¢££ÙÙÙ;::œCBB44>yê¶µµ-[¶ÌÃÃCJJJPPÉæíí¹èXYYegg³²²vuu>|xÒ¤Iô=99¹««‹^€cÇŽEFF"…ÐÉÉ eÇ ìS!,))166.--çää,,,ܳgÏÍ›7±š7oÞôññY¼xqgg'…B¡R©“&Mzñâ‘H¬««Û¶mÛëׯ¿ø¿{÷níÚµ«W¯F 666eeåÄÄÄîînúyØ$11q÷îÝ,,,]]]gÏž}÷î¦`—••Í™3'""BII N:¥¦¦æëëÛçKNccã¦M›œœœ>üìÙ366¶ÎÎÎS§N…‡‡ßºuëìÙ³è„9räádzg ¨K£Ñœ:D¡P„„„Ð{ËäÉ“ïß¿„Ì9++ W+~ÈdTYY™íÍ›7}æO¿}û60(rߊ´´4“¨¨è±^Бþ_д–…´†Ù[­-))aeeÌ §¼¼<¬\¹’A 6`GïêêB7÷þ`õÉ€Âó0HèáôAbÜÝÝ### çÏŸ?°b‰~Þè‡-''FFF CáììŒM±‰ÄÅ‹ÇÄĄŋÿé®ü¿3¢üúšòQ‰ùÏ_}Š©ÛÕÝsøâóŒÜòA¶pñNˆ›Gúœ™Wáþ,RD%šËÈ-olnÃj¢E<ñežµì>õåsGt÷Pj¿>‰1eŒæh•ÂÒZ+û3UµŸÖ´©Tšw`¬¢ÅŽÎ®yq]uÒ‡Øß/Á_ô­¬iBájþ/³'ë23^~Ñ@gQI£ÑPD°™  ‡.<Ç´¾˜ä‚cW?Å E¦¤É™¥bÁt£†&ò±«/°’§Aq!áéSÇh*Ê*ÃJcsý©Aƒ‰þ÷InQõÜu.È÷²«»çÈE_èÏÙaª§,+%äó2.">çíÇ·wt9-û2’†£dEŸÅ>|!"È3Á¼_×ÊéãGÀ©Ï¡}š[Û§¯¸@¿Rj¬£(#)tÃã]fÞWwàòªFô!.¥³eafâ`gå`gís^à_%LÊÉÉINNFòׯ_¿råÊž={ªªª-=//¯ƒƒCkk+S}}= Ýyâĉ†††ÆÆÆoжòüùó²²²ãÇcå[¶láææNKK#“ɧNª©©Ù³g¶õŸþñðð¸téRiiirrrbbb{{û’%K°;ê† ²³³ÿù矦¦¦üüü &Ü¿1PäíÜê ‘ÖºuëÖ††dýÁ@CCÃøñãÓÒÒ***òòò’““ÙØØ¶nÝJ_§­­möìÙ{öì©©©©®®666 DC TTT^½zE߸‡‡Ð{->¼³³¹$ý,Ž?naaQRRÒÜÜìàà‘‘Aï`¿zõê„„„—/_fgggggûûû§¤¤899 Ðà… ²³³ãââÚÚÚöíÛ×ÔÔdjjêææöäÉ“ÖÖÖÐÐP¶mÛ6,ÌÇ÷ïß?zô說ªÚÚÚúúúyóæ`ž 7oÞLNN~øðalllFFFzzúèÑ£ Åt°¶¶nhhhhhÀ^?pþ2ˆD"åÏ2aaa4µÕÕÕhÆ ç7á‡æ_W­ZuñâÅ;v¸¹¹Ñ'ðñöö~þüùÈ‘#çÌ™ƒrpp »ÁÁ⦦S\\Œ”ºïCMM ¼¼¼Æ¢6ÕÔÔXXX|||Î;‡Í5ÆÄĤ¦¦Nœ8q0Y‰¹é“'O°‰ÛÞGóæ———££#ÃÑáóBß## ++UXXˆMF666úøøHII!‹Íï­ìõ>®¹¹¹œœœ——Zªe°€Ç¯Zµ ýªi4š×ÕÕ€‘#G¢ÁMšLš4iøðáÏž=ÃàõFZZúõë×èé¶gÏžsçε´´¼}ûÖÔÔ,--ÇŒ\QQ8ÀÎÎîááz' p÷îÝëׯ;;;óññ1xâ`k€lll(å/ Ëw\~8ìììÈá[!ì&–••Eï†3´üh^×]»vIHHܾ}ÛÊÊêöíÛIII>>>ëÖ­›;w.;;û… èµyyù²²²[·nåçç'''ò‡êêêš6mÚÇ;::ÚÚÚ"""¶lÙ‚|ÿɼy󤤤nݺuôèѼ¼¼˜˜˜eË–3ÄÅÅW­ZU^^>uêÔÈÈÈêêj???"‘xìØ±Á4îàà ''wâĉK—.UUUQ(”‚‚WW׫W¯¢ ›6mbffÞ±cÇÝ»w‹‹‹_¿~=aÂlÆ-0Þ¼y3++ Y}ôæàÁƒT*ÕÊÊ Í›†‡‡?¾¹¹ùÈ‘#ôá^¾ 111NNÎÈÈÈ€€€´´´‚‚TŽVíêêê\]]µ´´0EŒÄÄÄ1cÆ<þ<++kÍš5111“'OFÕÄÄÄÖ¬Y“––6oÞ¼ììl” ãÅ‹ȈöîÝ{öìÙªª*óöí[\ü†IN?Js¸4; ý3ó§Ÿž¥Ñðˆ§{§ÕÊ)¨|™i %æ¹YrÊÖU'aöŸÃÄô4ääeDèÛ_:ÇÌãÒjx“m¬£èwcãò¹ŸLˆ7.¿p†ñ‡˜œ«÷C³ò+ö­·öºú%%©çåÕnÇ—HKú½N¼åõ¾ ¤Æa¶é†%ãû눬”Ð{¯Ý—-œ3YH$T×6먓\ÿ±ñÝ–˜è*%^4ø¾‰ì’ÈËÍñ϶Ùï½vcŠ™§–üHåO¶y¼Ü솣ÔU¿¥Þ<ãÅÍMZ#dÞFf^s“˜^2eŒæÑmŸ«Bˆû¶½ë¦‰ò…¥´¶uÝ:Ëõ´UYNüáG­2aQY\œlÈúq¸¢¤¾¦¼ÿ§J¢üÉAG6/ŸÈÌL|þ*ÜÖ¹qÉøÄ€ÃÊr_®ps}=M9úŽË ÖÓCÑzô5åOì´­©k¹æþ&(,e²¥Æ{¯ÝÃú7ˆ•‘Šz¶OWC.äCš÷Ñ­³ž]ÿ²2 DÓÓ“ågØËf‚vŒïµ‹Ëêß&“¸|há‹››˜¾Öúf›˜ê*骓VηøJ`i= 9ÉO/Á"‚<ŸìY6×¼¾‘œ˜^¼x¦I¤Ï¾IúšòôGŒ{qpÚX­äÌR—oÞDdŽT–¼wvÚz|Çl CÕ¡I®ß¶’;¯^4äYé—/_NïPVVV]]---ôäðMO¢~Ï£ŒLŸ~æææ˜Ë@——¯¯¯G €™™™íííâââAt |$RZZF›8q"Ö‘HØf§¶¶>„ûqzzzÊË˳²²»Dcc#ýV¡¨¨˜©ÑâÅ‹‰D"Û,44´¶¶vÁ‚ôsHÈŸ»Â0qâDì"""¼¼¼˜HñññÀÅÅE?Úh~v€ @CC{º±±±IJJrrr"mZ@G©««ËËË333CÚ ‚……e„ ]]]ÈYüΙ3çÁƒxü˜ÿ,Ø=áOTedd0ù‹ŠŠþÄ.üµ<ü̇hßEuuuo·]]ݬ¬,†šÞÞÞØ܆ h4r9?~<}5q4<<+¹páZFÃnÖÂÂÂ999h«,gdd$ý#;;û¹sçЦÖÖÖ+VÐË/&&Œí‹B¤lÙ²}E3± )))˜’H$:;;c=zDxSXX8 mjkkÃLt˜˜˜º»»i4ÚÒ¥K ==Õ¡R©ÇÇìüW¯^ÅÚG–ô]Fv&oß¾íoLŽ=Š5xýúu¬Øð‘ššŠÉŸœœ<Ôâà|â'¸ì‹ˆˆTTT¤§§ÈÊÊjhhô“zÖ¬YiiiáááÌÌÌS¦LžW¯^IH|•#ÛÑÑÑÄÄ„>ìç† æÍ›—”””——ÇÎή¬¬¬««‹é–‡rppø¿Î©(ÃDNNŽ  à˜1c03..®ëׯïܹ3%%¥®®nĈêêêÈ0¡££€­• ><00>‰ŠššZtt4r,imm•’’Ò××§Ïþggg7f̘¸¸¸¢¢"KKKlŽ„ƒƒ#666$$¤¬¬LOOM¦îÞ½{Μ9hÞ=ãwìØáàà˜˜XRR¢   ©©Io¦ÂÎÎÂopÅŠúúúȘ³OvïÞ=qâÄøøxAAAúLƒrrr©©©óçÏiDº|ùr@@@MMͨQ£´´´è k¹¹¹¯_¿¾cÇŽ´´´²²2 Lãݾ}ûܹsß½{G&“‡ 6f̘ÞÁrpppp~+ž½½= áˆA ¶Ñ@3_„þúA‘víÚµÿ~†#¢©Ctkmii|›ð©{óêÕ+”ÆÉ××wĈœœœ[¶lÀNµO‚ƒƒÝÝÝwíÚåã㣫«Ëµ ù¯™G¢‘yøð!C4;&&¦ŸÕ­H÷|T‚½&-Z´ÈÖÖÖÛÛÛÙÙyÇŽ•••gÏžýwç7!óýËꢢbZZ²tÈÍÍ9räÿõ0Âùøi1Ü$$$ôº>QRRb‚ÂR¤¥¥{gz7n\ïÊ ¬¬ %3³žžCtMzDEEû‹ð†%EÄPPPè¦BLLŒÞþ‡,Ó.†””}h»>ÑÑÑÑÑaL/–žžž””deeÕß9eaa™>}úÍö)?BVV–>¡"Îoº›eeeõ—f>ë~ a"A¥©© ùÿüj‘E ŠƒÑg 4“;pÿËýû÷)ʃ0·ï˜õ³±±áããsww5jTcccoWvdfù¯¥CD£““3ÀðƒH$C¥Réߣ¢¢ˆD"½>ÌÆÆ¶`Á%%¥{÷î!…°ÏË範!Ðè§²±±‘H$©£££¨¨Å#ÄZp¥§\]]ás’zœÿ,Êrb³M´‡Zœ¾q\`9wê7[Æùn899­­­###‘](Fee%"¹~1¸Ç#+4ÞÔÔ4qâÄŸòÖ®   ¯¯ÿüùsú¤¯ð9q<˜˜˜ ùøø`Nn¾¾¾‡ Md˜óƒ¡;Qï°DÁYYY!!!ßÚ‡­­mNNÎîÝ»™˜˜c=¬¬¬˜íIJJÊÚµk±`?qãÆ‰ˆˆ\¾|™! 96Ú?ÇÌ™3‹‹‹‘­/âÆ ‹-Bñx¢££±²lll¬¬¬˜Ã'f¿ú‹ç7>á:@¿Šƒücq†œ!Èò„ó›C£Ñîß¿/,,lccð ÍA&ò*Î_€²œøíSˆZ œ~¹thá7‚3HN:1gΜiÓ¦ihh´µµÅÆÆ†‡‡ggg#ÓMMM!!!www”aèØ±cZZZFFF†††ïÞ½300PVVPVV9räçÚ!.\˜0a˜1cf̘¡ªªÚÔÔÝÖÖÆÎÎÎÆÆ¶gϞ͛7Mœ8±¡¡!88xáÂ…wïÞí¯Mmmm"‘8øo}²`Áooo{{{[[ÛÖÖV///_†Aâàààææ–––feeŰØÑÑ‘­¥¥…™kº»»_½zµ½½ÝÈÈè;Žõáåå=sæÌ’%KF5}út‰TUUF¡P~âëì±cÇÂÃÃ7lØðøñc ÌÌÌÐÐPÌÛíÚµõõõÖÖÖ¼¼¼¯^½***:yò$ÚD$-,,^½z¥¥¥5bĈ±cÇ._¾üW ÎóG§"Dðó󋉉¡(Á(Í÷Ý%p~"ø !#!55µ   ·mÌäÉ“ 7nÜ8Ô2âàààü$%%õôô0ÿm eeå´´´Õ«WWUU¹¹¹={öŒ——÷Úµk˜±77÷³gÏÌÍÍššš0&((hÅŠd29##cíÚµïÞ½7n½s±±qo5FTTTOOÁqNKKËÄÄ›’344LIIY¸pa^^Þµkפ¤¤=z„ݺœœîß¿¯££ÎÎÎîïïïììl``ÐÛ)ÁÃÃcbbÕÚú%_¨®®®¹¹9öULLLOOo7 wwwiiéÇçææž?ÞÕÕU__[ËRWW744¤eÊÅÅehhÈÑÚØØ­Xö¶}ÿþ}ww7½ †………‘‘ŠM0ÒÒÒ}ž\yyy===†HFFFô§iÑ¢E‘‘‘ãÆ‹‹‹sqqyÿþ½žžÞõë×û<&?†}ˆQ>|¸¾¾>@II -uvww?þœB¡ìܹ3..sý¸té’¶¶ö“'OÜÜ܈Dâ;w¶mÛ†µvóæÍY³fÕ××'%%á6x1ô+„¨Bô77|‘ðw€€¹zËÈȘ˜˜ µ<88'µµµ(:hkk3¼çáààü,rsscbbÐç±cÇâÏßÄùó眜ž={6°—ø¿FSPP¨­­­¬¬dðBܲeËÙ³g555‡VHœ_AVVÊóãÇ 1擎ŽôYQQq€Ð¿34ÍßßE½"S§N¥Åóâàààààà,X°€ƒƒ¥°Z‚ƒƒ æÌ™Ã  R(OOOmmm\ÄùoÂÆÆ†åtùsW fh@£Ñ²³³‡Z¢ÿ:¸Bˆƒƒƒƒƒƒ ""²téR__ߌ5úãôÛìåË—eee[·nZñpp† úl7®Brrr˜p~~~ww÷PKôŸWqpppppp>±ÿþ³gÏy°J‰´{÷n333†r WW×9sæ ­x88CæFø‡FE°°°`ÉÞº»» †Z¢ÿ4x”QœOˆŠŠ®[·n¨¥€þò­5jÔ¨QC-ÎP‚Žú£W@YY9;;M?egg+))aÖ°8ÿ2ø !Ο F+*«£R¿s:¿º®¹¼ªq¨;ñýlýÇSaôöÆæ¶>·64‘‹Êê†ZƯ¨oz‘t­ÍZ}y¨Gç{ÀV)ÊmiÉÍÍÑmiiù‰‰=q¾•?C! |ñâÅPKóÓ¨¯¯÷ðð¸téRTTÔPËòÇsöÆK’éÖýç|¾cßÂÒZi£-êV{‡ºßÏóàøæ–v~^ÎÞ›ZÛ:Fï3ÛÖÚÖ9Ôb~¢©¥]Þ|›¼ù¶öŽ®!##·<§ j¨ç{ø Rbàù'~~T!ܵk×îÝ»µ”kÖ¬ÁS¬þ,.]ºäèè8„wââbuuõyóæmذa̘1C=<ò2"¤aвß[¿¾‘,ÈÏ5ËJwð»< Š3šéœœY2ÔýhjiÏ+®ÑV#õ½µ¹‹ƒu’…:7ç'ÿû«÷CMf­ªmþd£P¨ŸÙ~ìñ×·qs±O£ÅÁÎúï ÑB§ë ®ÿx;88888¿ ô áíF¢¢¢èsUUUccãPKôå‡|ÉdòÉ“'‰Dâ¡C‡°HAÿeòóó ,,,°ÄÁ¿!§OŸ...Þ´i“ªªê wIMMmlldȨûÝ\¸p¡¼¼ÜÕÕuÑ¢EéééC=<3&ê̘¨ó}ûj«ÉVDŸÿ¦]ž¾Œ‹LÈâÿ-òŧÒh4uÙ>·J‰ ”D|å†ôÐ72!­XHàß>-§,ø}ªª‚}¡Œ¤PiÄÙïmò{Íòè 88888?‘¿i…TTT"##Ñçììl}}ý¡–è¿È­rqqùùùùùùáÚ âŸþ7n\aaáP 2=òððÀÒ¿ †5kÖŒ=úg ””D –.]ÊÁÁ¡£óš FGgw|jƒUdrf‰W@ÌËw©mí™&VÕ6'e|Yë«©oÉÈ-*•”ÿ4(®¤¢ÛÚØÜ–™W•'ÀÇÕBîÈÌ«hh"Ó·V\^÷"4)ø}jM} }y}#95» êZŸÆÆ§¡ò´ì²º†VTÁ?4éuxzgWOo!s‹ªŸÇç× Î&e”P(T´)6¥tÕåúì]C9>µ¨‡Bź–V¤ #’[X•™WA?b4 åMDFSËW³­•5MÙ•PVÙðØ?:+¿ÛÔÙÕŸø6¹¹µÕÌ+ú©?§°*ðm ˆ ófæU`åõä„´"L~¹­3*1ß+ &2!¯£ó+oîJBZ–ÂÒÚ§Aq1ɃÆÎWw¥»‡’™W‘™WQÛÐÊP§½£ëÕ‡´wÑY侬j)jjvÙ“ÀؤŒ’ž¯eÆÁÁÁÁ*0Bø+BYYYLÅ-((èìü]¼<þSüh”ÑÉ“'up¾ ccã¡ ººš“““™pûsx?oõ æopõd›•ßÇ|ÊñÊËÍ÷â`¥6+/Ƨµ¦_caf‡­7ŠËê®sX¶ã6Ò ÙÙX|olo:æot |›Œv>n7ì[o}xó È+ª^wàAPX ÚÊÎÆrbç$¬Ü}':1ÿÚQû›\›Û´FÈ$ø**«S›¸÷ò¡…5õ-§®"ÅUGôñÉV–O×FyUã¢Í×C?f ¯3­tTäÅ]õ¯Š½ *Ä q)…h¯>{ç¸çÞcÿèâg¤%GÏ=Žz”š]†„¿ybéR[3ˆO-Z½÷^tR>Ú‹‡Ãíø’9“õÐשËÎs²³ÚÏ2YwàAGg·Ím×õàš´dÛM¤ú²²0_;jÜÅ_NZ8èî–°¨, »ãh÷=§Ÿì9ý„¥=ó:¬ØuûiP\yÔ9 Q~ Ñh§Ý‚þ¹ò Š#-!øàüJsýO>|#í·Ü÷Þsáö+¯€´Ö·nñØK‡bÝpà@ïÐLwïÞ3gŽººº‹‹ ½©Õ£GfΜÙÝݵl½ý8x“=}åEvVÏË«Cl›=Ywéö›Ù•Új²0RYÊÇuý0qNV4Po=vb‹‹ð!m6;{l?öØp”Bȃm)/Oî²-­lX¼Ù­«»;#,ÌL¹§ç”=¾²ÆÇu=?/ç•û¡ôk}Ηü"òêWÿÖÛóq]/*Ä+"ȃÄ8¸i:¶5+¿rΚ+Ž ,ý÷Û>»®±u¡ÓuìR)©¨=÷8+ ó{¯ÝÍ©.¡·333M²?ðö‹ó§sóæM99¹?(¸Wff¦¦¦æÕ«W‡Z¸~ýº¼¼|llìOoÙÀÀ`åÊ•CÝ?œßš¿Ìd‰ÄO*INNRpþU~æÃ‡´oGRRRZZûª¤¤¤­­=nÜ866¶qãÆ ÀÎ;W®\I LLL¥âرc±]îÞ½ 6l`ffÖÔÔ;v,@¸~ý:V‡D"‰‰‰a_322¤¥¥yxxìíí׬Y#--ÍÂÂâéé‰UDÊ'×øñãùøøàøñãsæÌ!‰£G&‘H`kkKß—¹s瀥¥åæÍ›-,,ÀÚÚÛºeËرc@ÐÔÔ400!!¡ÊÊJ§¥¥%((Ç×ÔÔœ2eJŸ#6fÌ™ùóç‰DSSSäȧ¥¥E¡P°:'Nœ êêê›6mš5k‘HTUUmll¤Ñhiii ‚¡ø«\\\¨„J¥JHHП€L&£¯Ó¦MY¶l@0669r$¨ªªvuuÑh´§OŸjjjrqq€¦¦¦¦¦æš5kÐŽ©©©RRR¼¼¼«W¯6l++ë“'O°ñððXYY‘H$EEŹsçÞ¿_SS“H$¢Ö|}}i4š ‘H´°°X¹rå¤I“X„³³3@›1c2._²d Ú” ..ÎÏÏ¿téRGGG vvö/^ ­UUUbbbÂÂÂ7n\·n‚‚ÂæÍ›Ñ¦ŽŽdê\XXøWþ·RSSƒýÖ233bËŸGÉáÂí`ôUúa¡Që³crf Vì¼¾—×ÉHûÎ{×ÐD’ÃÄÅ_¶:î¹ $‡¤Œ/röôP”-w Z‡DEèYâ¾²«»‡F£Å¥"á/Þy…U P¨ £·s_™WTÚ­w’ƒw@ úÚÙÕÍ¢¸ÌdöQz‘jë[€ä0eé9ôõux:¦.=G¥R±:Vög€äšUоÏr’ƒöÔÍ­í¨ÄfåE 9dåW`»¬Ùwo³ó£ž ­/H¦[eM¶0r_ɬ°ÔóEV2cÕ% 9Ä¥|ú-8l½A[‚‰A£Ñ.Þy$‡#—|si -999Øo­ªªj¨Åù­9|ø0øûûµ ƒåãÇàää4Ô‚Ðöïß/_¾üé-€ÁP÷o(ÉÌÌÄ~Â555C-ÎoЧ§'¢7oÞ µ,?‡ÈÈHì¼ µ8ÿ9~~Ú‰øøøÊÊÊ¢¢¢W¯^ÅÅÅqrr?~ÜÃÃ#<<üÇ©©©¯_¿fXMºtéÒ¥K—CBB"""888víÚÕß´ÇÆëêꢢ¢îܹsåÊ•””^^ÞÍ›7Ó× #¥¥¥ÁÁÁ>|`bbÚ¹sçÛ·oß¾}›––¦ªªêåå…­Dyzzzzz8p 44ôÌ™3oÞ¼Y±b…¯¯¯¯¯/ý¡/^¼˜˜¹}ûöºº:ÐÖÖNHH˜1cøùù%&&'£¸¸øíÛ·©©©ïß¿OMM4iRbb¢ŸŸÚš••µgÏkkëøøøsçÎy{{»¸¸dffž>}FŒ¡¨¨øúõkl‰ìÕ«WHÁ C%‰‰‰Ó§O‡ÁQSSãçç—žœœÝÔÔ„f ;;ûСCÚÚÚ™™™OŸ>ŠŠúøñ#fN°fÍšŽŽŽøøø›7oº¸¸$''‰ÄM›6¡%Ð'OžTUUݾ}ûüùó—.]ÊÊÊÚ¶mÚ‘H$²±±111±²þKñÿF”©khÝìü9¶ ƒ½%öõÀÆOWNgWF“ÀvAîz_|ö"ò^‡§/°1RWVSß”¿õÏ'A±SÆh¢ãR @‰$ö϶ÙôGM.€S»mUäÅQ rŸ“€®î—¡â"|NË&b»°²2Bfàˆ2HTzkÒøÔ"vÖ‘JRX‰W@LvAå‡qb"|•5Mïc²—l»“\°dŽZ5E›뫠…A„ßëļ¢jÇ–ò2"X!ª.5«¬»‡¢ûµ-+jMçsLÔ#—|‰DÂùýóéóð¢6ÑB…BML/ff"Þ;³‚‡ësâÎnÀÖàÊáEgöØ11}ÛÍ|¸¢¤í”/Žûhm³ª¶ } ý˜¡(+ª +ÚÑÙþkjVé7ç/ 00ÐÈÈèZGÅù/ð×ä¦Ç m‘™™9Ôâüçøù !ÇëׯÅÄÄ@VVvüøñðàÁ###`aa±³³†ð’Û¶mC†‹ ©©9uêÔººº×¯_÷n?###88xá…ÇG%|||ãÆCF§X5‘   ~~~PSS344€çÏŸ«««''ç¬Y³h4vÍ;wŽ››{×®]X ³gϽÎÍÍÍÊÊ }^µj|ïUûêÕ+$?Ó²eËèÛ¹|ùrOOÏ¡C‡0/»™3g‰DLkkkzõ/$$ÄÄÄ0;Rôað !ꦦ¦&‰Ä+Vüß~%''#£Vì, 0vìØââbz‹MŽ'Ožˆˆˆ Sß_k‹-’——ǾN˜0°Ø›M~þ'÷0&&&qñOê KAAAii©„„üEÙ2Óp”¹›ÁRN«÷Þ+.ï7:R™&Ÿ´¬]4S-’2Š@CuÝ.…’büôÚÈ‹Ð$¸õø=“ÂRQ 6GžÅí]gýôÚ:ú£8.°dcýÊk4.µ‡Ã~֗е(¼æˆˆÏ«©o™i¥ÃL§ç¼Î:…*©|ýäœ`оz(ÔäÌ’Q#eè'$üsÏX—Ièo2·=›\pvï¼KÐ ¿qÉxú–ý^'½6bsù¹HÄ鮫ñU´›¸¤£Ê@}#ù}L¶ŽIák÷NeÙÄfäU´µw11Rù‹›”Q"/#‚é‡? >hïè€Î®žÒÊúœÂ*Õ•ØŸÖäýÐBþKÞ»\ZZZ[[«¡¡yò@gggjjª’’CË555_~#T*599yذaô7ØÜÜÜ””&&&SSSä[ÑÕÕ•’’RXX8räHeeeú£#ªªªbcc…„„þoTêîîî””UUUNNÎŠŠŠˆˆ99¹Q£>ÝÓjjjÞ¿/##£¥¥Õ;ª™LNLL¬©©ÑÒÒ¢ æää GRYYYff&‘HìýPËÊÊÊÈÈÐÔÔĦ&éiiiIJJª©©AWKï¶´´ÄÅÅuuuss÷‘§¼¼½nš˜˜ ùûû_¸p!$$Æ_XXxìØ±ÜÜ\!!¡ÈÈȹsç~w.Áô ™——×ÒòU 333´ûM$%%-^¼899Y@@@DD xƒ@ó²XÞÒÞbäää444З›››#gH11±˜˜˜;wzyy=|øÐÌÌÌÝÝ]ZZþj”1šSÆhÞ÷ù¸x³ÛéëAwÏ,g¨ƒÌG*Ka*YlrIL€ïËççe.úšVD£Ñ°¯ˆÊš&&&âôñ£ú3YŒK-âeˆû‚÷ô5¿, 7µ´çUcªZ(äÿ"LðûÔäÌ Ñ/ë“(¢ ¶(Ç@|j}¼¤¡õ^XÇjtßWlw%9³Ds¸ ;ÛW?¥Ú†nNv,*œº½ÌSy¸Ø•åľêuJ¡˜0/²¤E½Ü_/ô…~Ì(.¯³›f€ÖE‘NK?Jq}õâÿ‚ä Vfi ÁÖ¶ÎþFæ¯'..ÎÞÞ9l€¼¼¼··7Ò+ºººvîÜyþüyì©®®~ïÞ=---ôõÒ¥Kû÷ïOJJÚ°az ‰Dggg''§Õ«Wß¹sU[¸páíÛ·ÑÍ–J¥ª««¯]»VGGgõêÕÈ@UUõõë×ééé‹-ª¬¬___d킈‰‰™7o6kÉÌ̼sçÎýû÷c7MMÍ¥K—ZZZ®X±=1ÅÅÅŸ?Þgš¯#GŽ\¿~ýéÓ§È÷qþüù;wº»»ÏŸ?¿Ï±Ú°aƒ··wmm- £FZ¾|¹››ôôô,Z´ÈÃÃmeee}ñâ2€ÀÀÀÅ‹£ÉDPSS{üø1fþC£ÑöìÙsìØ1ôUQQqûö휸¨¨(33³»wïÆÅÅ]ºt £iÓ¦=yòäÚµkÛ·oGó¼ZZZô¶!®®®›6mÂVZÆ÷àÁ11±òòrL­Ú´iúPTT$#ói>¨¶¶ÖÊÊêåË—èëêÕ«/_¾Œ½otwwïÝ»÷ôéÓX„Œ#Fܽ{›3€ÇÛÛÛ£CóòòÞ»w¡Sûöí;~ü8z,„ .ÐGòÃ@Æ2ô¶WÖÖÖžžž˜v‡.“'O€½½=ºsrræÎ‹X ܺuËÆÆ;¶¶¶d2ùÉ“'ô©p†ìÌÒh´ÎÎοC—’’âæænmm€ÒÒR2™Ü{ çñóMF èñ %%Õ{š[µjUÄ×¼ÿþ»ÃÔrppHJJFôbëÖ­ÿrßQ¯ƒƒƒ$¹yó&ªÀÄÄ4eÊ”¼¼¼ìììW¯^ÉËËËÉÉ!ÅÕßß?88˜B¡`wó_*äš5k„|÷îö,$===VVV¥¥¥aaaõõõYYY ¦Âh{cè-†““ƒaaa ¨Ž¬¬ì£GP¬Ñ÷ïßÛÚÚþÒ‘rèÙM£ äö>RúdæU´µwa:Lqy]mC+ƒ?^\J¡¨¯Œä§÷¼´ì2øÚ{ ¤Ä(jXTôEcs[~q ¶¦‡Ö¾èË‘C ætÇËÍ¥Ÿ³ æU/Û~ t>ï‚Hí‘};öÞÚŸð…¥µXfÒ²Ë:»zz ÏËÍÑÚÖ¥+¼áùÎýY|­¦f—Š óÒÏéÔ7’ Kkµ?›°“€äÌ/FhÍ­íë<`b"îß`ýi”R ÙX™éíEc?-œ~j„J¥½MÂfô GYUCŸiÀÒhxEu£wàÏ øûS__?~üøââb77·””///Ì^cÉ’%çÎ[°`Á»wïbbbœÓÓÓ-,,0“ ¤„Œ7®§§ÇÏÏïñãÇ|||{÷îµ°°xýúõ7ÂÂÂôôôl@àñãÇkÖ¬Ù·o_xx8Šílmm=eʔɓ'¿{÷îäÉ“µµµ(˜ªŸ‘‘abbÒØØxÿþý””??¿Q£F9;;:tk“F£={öÌÞÞ~Ó¦MááᇮªªZ¼xqŸüÊ÷àÁúÂGqpp gïè=ˆ•\½zÕÃÃãØ±cd2¹´´Óî **jÊ”)*** MMM>>>“&MÂÑ]\\Ž;¦££óâÅ ooo)))ä©10[·nõññqss{ûöí¨Q£üüüF½uëÖÝ»wüøqÉ’%‰‰‰{öìÁêß½{×ÑÑÑÚÚ:;;»®®îÚµkïÞ½C£!!!ñâÅ ósÛ¶m>>>~~~ôktK—.mjjòòò 9r¤‹‹‹··7¶uÕªU'Ožœ3gNXXXllìñãdz³³---±5\‡‡çþýû!!!3fÌ ×ÆàÍ›7ÎÎ΋-jhh¨««»sçNïÇ÷ïß———ñâEIIIjjê¬Y³|}}‘ÑvFΜ9³wïÞ{÷î¡sÚÚÚjnn^UUåïïßÜÜC"‘fÍš…)–d2ÙÛÛ;00°¨¨è›~G8¿š¿/Ð(l †F£eggµDÿ!~—\pÑÑÑ«WI…æÛú´6D…>|رcÇO@EE%..®¬¬¬O-t é^†ÕªoEYY9888<<|€ÅÉéÓ§ß»wÏßß?$$ÄÚÚŒŒŒøùùÄÅÅÙØØ0GÇŸ333•JmnnƬ†ÐYÿ{gVÅÒð÷4ÝÝÝ!J(¢b'vc^»»½vw Ø‰ba7¢ HKwç¡§¿?×õ?cÏîìììÌìrvßy+8_ý¢££‹ŠŠ¦OŸÞµkWT"ò±‚D»ÀÀ@¼Ÿ!ÂÔÔÞ¾}ÛR’ UUÕ£GÆÄÄ„„„444ükiM©gq4;/š5Þý“9ÿõìд¦ˆ‹ ñÒçW[ÏNÉ,êÝõ³ŽH\Œn‹1h%eÕ‹§õF? Œ»áÒÔ‘]lô‹ËªÞ†§êj*.™Þš‹ìÒxõ¸,2™d‡Ø>é¾ ®º:™ÀŽã ZnAÅáóÏÝŒóŠ˜XSH]Ù’½hÓ£¨óG/¼(,©dsxÓFuEOL+=ïøä]ÌÔ󋘯B“<:›âÜJçÝ;™&¥NZrj°gÇgoãýFôîjõ$(/JˆÑ3rK\xÁç ºu6³5×þ€<똪[k¼ I\°éŠgˬ¼²}¾O2sKOí˜ln¤<¾ &1×ÚT K ŸÌz±Ûäÿ(|ÔÜã6fÚ1þmé‘è`¡“˜;n¡Ï^À{¸´½ñ0|üBŸ˜9.öF$)!%ÿöÓ+gõG« 0»víb2™çΛ4iXYY <ýªGEE]½zµ{÷î/^D•Áúõë÷íÛ·eˬkkëû÷ï#JFFÆÊ•+óòò‚‚‚ÐØ±cÇ&L˜€RUUuçÎô³TX‘‘‘ëÖ­C@»téòâÅ‹'Ož¤¤¤ ß½5kÖp¹Ü›7o"ï+++www]]Ý,Y²3©¨¬¬¼~ý:Z"tqq }øðabb"²¡ÀÓµkW}}ýTVV"#¤¤¤˜˜$±üßó‰TOS¦L‘@î߈åË—KJJÞ¹s—2äõë׸qãÆ¸qãÁîÝ»ÅÄÄ=z„,Ç 4jÔ¨Û·o·~E:þêÕ+ôâðññqrrŠˆˆ¸yó&ìííîÞ½‹*s8œ5kÖ_¾|½ÁÿùçŸ[·n=}ú4**ÊÎήÿþÈ¡ÝÉÉ©éJ«››Û½{÷Ð>yò¤««ëí۷ѲcBBÂùóç]]]¯^½ŠÖ†ìííI$ÒŠ+vïÞ½{÷nô° …‹/öîÝzôèabb‚V?|øãÆCwdâĉ-úðáØa³––ÖÑ£GoÞ¼‰‚²bäçç|ˆ<‡7"·___’’Z¾|y]]‘‘üJüa¹é1 âââPZ¸ŒŒ kkk"mõÏáWÑž;wnîܹȣïäÉ“®®®˜ssóÞ½{ß¿ßÇÇ+d2™×¯_ÿ–,\¸ËåN:ó*äóù/^¼À<÷Úò¾C1]𹿊¹sçR©ÔE‹!ß9Dtt4>ÄY¯^½ Æ¡C‡ {öì T*ÕÓÓóõë×>ìÞ½û·¼¿[׃°qÙØØtïÞýÎ;˜Þ***PlÒ¯ù“¡Uáòòò)S¦à+L:•L&oܸ1>>8ÎáÇыÙÉÉÉÅÅÅÏÏ¿ª]VVvóæM´}æÌÌª*''GCCIƒB¡°W¯^ÎÎÎÈ8á÷Ù|" F qúÈþNÎ<ë3ioŸI{ß„§l_>|¢—kÓ³b“òH$Rg;ƒO»¹ÐÙΫ—”+;~.Ò«£™¡ú›ð” ‹Nbª­cº-Þ'=»dé6¿n£wŒš{üå»Ä.N&-5‹ˆI̵2Ñ’’`|îOb.•BÆœî\Œ—NïSXZ5}åÙCçž-›Ñwî¤àÜÑß2>‘ú—£Ë|ç'x¹h¨ÊÝyúaââS¹Êœõó{w‹ŒÏš½î‚ǘŸŠKÊÃ_‚L&9ÙŠ:mX0ØÁZï)ËO'¦>¿¼LEQFUIf錾$iÞ†KköÜDÃŒMÌÅ÷ŸJ!_?2Û¹£Ñ¡sÏN=0ãeyY‰‡g!IR3‹X ¬>v×,Œ5PÈ/ª€Þ][³ŒX?°¥‰æÝgQ“—FqƒÐÓ"ã‰4Z㥶ºBä½í wÐoòþ¾ÞûÖì¹))Îø|ÃÂÂH$Þ”€F£!Çx”c`Ú´/ °Ñ7ºÈ—÷Ò¥K±Ï5dk:nÜ8lI yÜâOqppÀ%$$Тۺuë° È™ …ÂÇã}Å¥¥¥‡ RWW‡ìÕ¡C¼Ó±cG@Nq"H¤‰'²Ùlì÷ÓÏÏÆvsrr²>!ÒùV@ïñÙ³g‹œÂáp‚ƒƒ¥¤¤>>¡Ÿúüüü¬¬¬îÝ»c~D4 Ý cÆŒÁ,DÐÕmmm1%'N755­¨¨@oœ”””üüü>}úðx<¬X7Zgùò娙Û'Ož‚iÓ¦á-Dž–·oß*((`´°zõj|ûèáY½zõ†¯qsUUUÃT‘SSS¼4/_¾ïÚµ+6vggg*•ŠûÎ;9B|”ÿjüa¹é1h4æ‹Ëápšf¥&øQ]îðª€IDAT|÷<„ ø (dell,Vrùòe8tèÚEÙúôéC§Óét:zïjjjFGGc§ˆä!LIIAuîîîVVV ]ccc|7¼¼¼ ??+9tè\¾|+Af!ŽŽŽ;wF rwîÜAG‘* ?Kh£gÏžXIRRúÑÔÒÒRVVnvÆDÒ …Â÷ïßÀ²e˰’Ç3 fmmÝ¥Käê°fÍ|;ýúõ2™\^^ŽJΜ9ƒîé‰'Z¹eMó@IÉçŒjH‚Âò ";Ô²®®.–))) %QÔÔÔtww·´´¤P(***ØYÒÒÒM;`ee%))‰/1bÈÊʺ¹¹‰‰‰¡/ooo¬ÂÆÑ;UWW½}±éŠ‹‹C+—ÚÚÚîîîd2YWWß2Z;———'‘HW®\A‡090!!Aøãùqy…Ba]=¿ÛÀæ&¦då•q[ÈM' ù|«ƒß­g±EêÔÖ5ˆ”ðxü´¬â¬¼2‘r6‡›ž]’”^ˆ¥ËCÍ4+ Y ‘¼y\¿Í©VÏb§ec5ñMµÔr+GÙnrFa~³éUR2‹R2‹DNáñøø)¡°¤²¨´ ë<Ê[ˆ§œY›’µÙR‡«jê“Ò ›Nµ°Ém … l.~Þ³ªNØr +2s?§óbs¸MŸfûÀáòR2‹2rJšð—åó¢h(ÍšyòäöíÛ555ØÂ9rü¸xñâÇ ÌÍÍç΋¿ «V­ÂEà™={¶ˆUíÕ«WûöíL¥Rg̘1nܸ}ûöá †7lØÐ­[·§OŸfdd¨««2³/µ²²Š‰‰AÝ(**²°°X¸p!Ö³gÏöêÕëíÛ·l6»S§N&LÀM%%%wïÞ]SSƒ¿ƒ¿)â_¤RdЩf†ÿ‘KƒL&ác¥É$dT‰G§ÁCP(d‘4 :ŠOʇA"5Ó,ˆ„i*…Lm–F\ŒŽ¿¾©–Znå(F5ÑWkZY\Œn¬§Ú´œB!·’ÜOMùóŸ µ¹j r’ø 8-uXFJ9L6Eä¶Â'm0¾M9™æ#FŠ ¥öEL&|DŒ¦·hTJ³“óÃãñ„ÖdÍ.rT( ‚ïk”ñŸ4Û¬¤ÙH•mA__¿k×®¯_¿ÎËË+//OJJB+`bbâçç‡Ùó‹¶„ŒF£ùûû¿{÷îèÑ£×®]»uëÖ­[· €¾ºté"¢#‘HŽŽŽ­Œñû‚º1nÜ8LŠ@Q¿¥å–ú=-è#L$ˆZS¶oßîíí}ìØ±Ó§O{zzîÞ½»ÙÐG;w®­­í¸qã444( ²yþÏáËÈÈ U0Â@ô×çOÕ€´´´††J4PSSSPPÐÒÊÁwä[B¼?Ì™3G¤BŸ>}D$SSS´H)‚¹¹ùáÇ›½Šˆ‘0 »a™{÷îݸqÃÕÕçÌ™sãÆ)S¦$$$èêêž9s&>>Ÿ qäÈ‘t:}ôèÑJJJoß¾}ùòeß¾}Q¯ðÈÈÈtìØñÇË–-ëÓ§ODDÄ–-[ÚfÉ’%'Ož\±bENNNÏž=%$$’““† ‚{‹…„ÆŒŒ ,ÔÁ/‚˜˜ûÿ0“Q„©©)L199¹Ùì©ß‘ö===Ï;‡"´#jjjÁÁÁ“&M:qâĉ'h4ÚÀ±L~~~ëÖ­;yò$Ju£¨¨¸xñb|n=ô±N§öÿDÛø´‹/¡Ñh"_ùt:J¥â%+¤ ÀªÙÛÛ‡„„üóÏ?{÷îåóù ÅÆÆæÞ½{øÏ&ƒÑôºð)CRK}›6mÚÅ‹…Ba[Ôžfff—/_ž3gÎòåË †———ŠŠ ÖæäÉ“wíÚuâÄ t¡¹sçb®NNNoß¾5kÖªU«Ç¤¤dŸ>}´µµQ…%K–ÔÕÕ8p`Á‚RRRÇ?|ø°¼¼<¦]´éLŠ”Ðh4 …‚Y]N˜0AJJjÉ’%˜Ï‹¢¢âˆ#°!XYY­Y³fûöí .”””D’RÓÝ5l÷âÅ‹FFFÇŽ›;w.ÈËËÏŸ?×®]˜•¯›››¿¿ÿüùóׯ_O¥R»téO9nܸeË–¡¸¯$ÉËË ÍdS._¾ŸbÇkkk7ûI×ÐÐ-..®¥¥ÕT½) ³³³µ´´Ð@ ~2¿jª[š[¨­­ÍÍÍ•••mÖa©¾¾>;;[OOóÝj:uÍN8 [鉿\VV=i<O(â…^äy¨¥¥ÕRVzŒ’’‹¥««‹Ú˜ØRß°9ÉÎÎ …ššš"jX6›Íçó›>x?Žääd”€<==QšJ‚¦cÕ£FúÓ€_“ØØX,s˜­­-Ê/@ðƒh !Á¯†´´4ʬÓ,­|Ü7ýtnZ""4Nð*¬VÚ11±–BÚ4+}‰4Ò´Í3gÎðx¥?BCH@ðW“”^xáVpumãâbZvÉù›Á•uíݯKIyõù›ÁYyeíÝ‘ÿŸzçâí¸ä¼öîÈWðøuܽÑíÝ ‚?¿AC„’ðgA„ßÄ7Þ½{÷.”››‹’ù¶L&Ó××·¨¨¨û@ð#8çÿvÒߨ„ÆHeWB½—ú†Fý@Á²m~ë÷ÝnßQ†&y/õ½ýäC+u®Ü ¶òlqYuûvµ%’Ò '.>uâò«öîÈW0{ÝÅi+ζw/þD‚Ê´ww~ZZZX¼œÜÜÜúúúöîÑŸÉŸ#644TVVVVV¢¬,?˜˜˜‘#Gby3Qª««…Ba+g±ÙìÊÊJ”K´$$$èèè,[¶¬õjAAA7nÜøqã?þ† ~\ûâ³Ã¢3ð%U5¬=§ïòy(ÿßVÇ.½<í›ô}¼Øƒ#Rÿomž@ |ü1=»¤½§„€€€€àWALL ˰ò „$ÉÄÄm …ÂÔÔÔöîÑŸÉ"FFFJKKËËËËËËËÈÈÐéô:ܺuë‡^ôàÁƒbbb“&MB»ÅÅÅrrr²²²FFFøl°"ýTTT”——ïÞ½{Û/Äçó±ÿ ©H9tèБ#G~—(L|>9——9rä… %7A[˜°øäÀ©ð%²Òâ¾ |ɤÿ³ÑŸÅ‘Mã/íŸÑÕéûdŒì1n׌Uçþ¿s J*{Žß½ñÀöž‚_‰„å™üƒMFÀÐÐK£’––&òJð]øCÂÇóx¼™3g?~üÀ&Lˆ9rdTTÔºb}}½ŸŸß€äååQIqq1›Í–••ÍÈÈðññiö¬mÛ¶€¸¸xIÉ7-ö9RRRRDo¾råÊ9sæ´’«íØÚÚbë1&Lhhh¸|ùòšR‚¿„=:ôêbÕÞ½øo:XèŒâÌ ‘·~E°¸2°†ètº¾¾>Úæp8™™™íÝ£??ä[çǰpáBÌ÷”Á`?~<$$ÄÎÎîG\ñáÇõõõ}úô)0`À½{÷|}}W®\‰©òùùù“'Oö÷÷ÿÆ«³Ùl.—‹’ubü§MéWµÏf³E »té"))éïï¿páÂï=ßÊÅÛ!Ï¢R³ŠÕ”e' u7Ä;”ž]rä‹è9•ÕõÖ¦ZÃû9 êùuçoß”^h¨«Ò»«õÌqÝðÏ6‡Ë;pæiÐû”Ü‚ c}Õ¹{tëlvçé‡k÷Âò ™lwô¼ãЩƒá¢©½`ƪs’ŒýëÆ`-TV×ïó}Ÿ•“_nf¨ÞÃÕbƘn˜ 12.kÓÁ»{ÖŒârùÏ>{“a¢¯6wRÖuw­·‰ý1gû±ñ)yV&Zã†tÆÏÌñK¯žÅÝ=U^V•ðù‚Ã矿 IÌÌ-µ0Öôêc?j€¾µêZÖ.ŸGaQé¥5¶æ:‹¦öê`¡ãs%ðÕ»D.ŸšUŒ¦bPO»±ƒ;@jVñŽã¢rø|AW'“³úk©É‹ôpÓÁ»â³àMx :}ƘnÝ]>'È..«Þvôþ›ðmu…IÃ\½úØãOg5pöœz‘ZXRec¦5ÁË/¯Þí[– ;zñÅÍGõ,Î`O»³úS)ä[#\xQSËrs4ùwñPiÉÏÎ*ÏÞ&»ø2%³HVZb@wÛ¥3úÐi¯’šº†'†E¥—1km͵§ŽêÚÅQti ØÞˆÙG-M4·/Ž/ßzä^Xt†ÿñ9¨Áœ‚ò='HÈærùöÖº‹¦ö6ÖSÅ*§e—l?v¿õÙ#ø‚ðÉ»Sµõ–†]Íõ\Ú»;¿˜៭!ÌX499ÙÈȨ½{ô§ñ‡h###eddðJ-ƒ øjï߿ߺuëªU«ž={÷ïß¿}û‹à™™™‡^´hѵkרlvTTÔ‘#Gš½âýû÷ ©å§¤¤ä˜1c222ž?.rÈÇLJÇãýóÏ?"å?>rä^º«¬¬Ü¿ÿû÷ï›^7++ëĉÙÙÙpúôé'Nܹsº{÷î‰'𕃂‚6lØ0sæÌ#GŽˆ˜z–——Ÿ?~ñâÅ›7oÆw5::úĉUUUuuu'Nœ8qâD`` :D§Ó]]]CBBZ2ˆ%h/FÌ>:qñ©¨9FzªÙùåã<|¾ñžÞ{m׃ïµ×T YCUîa`ìàé‡f­½ÐöÆÇÌ?á½Ô·¼²®WW«ªÖìuO?„­­g;úwÅŽ…%•†º*¡QéÝÇî ŽH­¬®OJ/äpy<¾ )½0)½°´¢1:Ëí'‘øP“ñ)ùú­ß~ì~eu½‘žjXtƬµºÞÁæðP…ŒÜÒ{/¢œÑyèæÇ¯ã”¤ï<ýÐsÜî×a-F‹KÎk¶M—‡¯vïE´ÓàÓ 4Tä2ãðÑ /°£o“ï>‹ª¬nÔó8cv.ÞrD"yv±LÏ)=ïø¢ÍW±úÙùåÖ½×m?v¿ÍÕÕTzð*¦Ó͹…%åÕIé…B!°8h*P›Yye7= Š÷p6su0ºû,êÂÍà¦cÉ/b¦e@um:½¾ƒI̵ë¿áÊÝwÊ Ò/B>›uä­ϔ”W; þwó¡9 g³ˆ¸¬>“öí=õ«ðôM§QCfZºÕJ¥ä”¯Ý{ká¿W–l½6lÖ‘z»¾sàÌÓžãvc§ÜxÞkžü"æÀôµ•H†Í@Çþöù>QU–us0~žâ1fçi¿ ¦ƒbЩ9å;O<Ì/bb…Õµ¬Í‡²óË‘4ø6"µC¿ ~÷ß[kÚ˜i]Þ±ÿ†7á)¨rV^™ÃÀ_Ça³wÞÿí7þý%< =íÿbglêËz!Þ˜¹î„çëW ¤"{ƒOŸ}•g´tJf~Ì«ˆ‹á0« ¿åÒ¡ °,½óÃð= ñYw¢×™€¥hwÏ¥ñë}z‡ÆÝùÑ×% ÀÀB>ŸÿUÁ)~;dddÔÕÕÑvuuuaá7ýJ4ÕO¼}ûVø{RVVîîîXI]]†††´´4“ÉD%`áÂ…$ 3¹ž1c†œœÜøñã±³.\¸€¡?0777f/jaa!---°’˜˜Ôlxx8 >_ŸÃᨩ©988…ByyyìP¿~ý ®®+A¢à¼yóDZF¹ƒ¶¶¶¨š““‰DÂY²d 888ˆ‰‰¹ººb‡Þ¼y£¡¡A¥RmmmÕÔÔ`Ĉ B¡põêÕ"í5 ;qéÒ¥ðôéÓö¾ç¿¥¥¥ØßZRRÒwlÙÿa8èyžwœË㣒k÷Âü† …šºûù*öó?¦æ7v£¢Æ¶ï:Ðó~ž‚JVì¸zÞ¡]ú÷Ð]Ðó~ð2k ô¼×ï»]núʳ ç}çé´»z·?èyo?víryü'D%d£] ÏÕÊç‰tXÉn®¡ûrl×møVŠá”‡¯¯Èáò†Í:zÞÎ4>f×¼=oÐóÞåóýÅÝ|zÞ}½÷µ4'®Ã·R §< ŒÅÚôšyô¼žmlÓï~j»JLbޤÅ?²Ö³jëPɘùÇAÏ;#§ín=rô¼Ïßlüäóžãw“ô'Ç$æ ’Qsž÷õïÑn]={Ù6¿¢Ò*´Ë0™Öyèf|'7=ïwÒ°N—U5;œÜ Ðó¿Ð_—…†0gýEtë#ã²È“»­Àêü³úIòËh·ÍµêµFÂ|FaI%*±¸ô¼Ü—ç” …ÂÂ’J9›Ù ç-a>ãùÛ¡PÈãñ»Ý zÞX#ÝFï·ÓÀæ¢Ý²ŠVm˜}”f45"6íÖÖ5è¸,Qè0§ª¦•èwY¦b?mï>ùô¼÷ù>Áz{áV0ºË躞«5:-,(f¢£YyeÃ)ö7¢Ý-‡@Ï;$2µé쥦¦bkÅÅÅB‚/Yy¸ëòCng–{S­œ¶üÛòCn™ù1B¡P ào9=dù!7ÿ;Z:ÅÿÅÎå‡ÜVq¯©¯ø–KŸ¾»tù!·µÇ{ryœ7@»víqÏå‡Üž†ú¢’kO7/?ä¶ãÜ€ÿã®û7””„ý —––¶ww~i¢¢¢°¹BA ÿ` ±Á¾zõª½»ó§ñ'h‘½¨©©iQQQ^^ÞãÇ»wï^YYyíÚ5999TçÀ4hPqqqEEÅ‘#G|}}+++ííÍ«‚ƒƒ§L™b``’’R[[ûäÉ“¤¤¤·oßbð°X¬¤¤$333£P„ƒƒƒ­­íÝ»w‹‹‹±ÂÛ·oÍœ9ó;~üx&“Ù»woÈËËc2™¡¡¡M«åääìÝ»wôèÑiiiáááEEEË—/G‡jkkGŒ!))™œœ]PP°bÅŠ7n ¿Çÿý—Éd¨««3™L&“‰AÍÍÍ ::º]n4A³øúÀ¶eè”Æ?çQœ†õu€ 7ƒKÊ«MíenÔèYª$/µqáð½öº-8óTJ‚±zάdx?¸ÿIÅç{-HEQfÉôFÛi*…¼üŸ~,tÚØù°èŒ·©C{uìÛÍ•Ш”½kF“H$‘ΛÔsÙŒ¾è/Ϋ½²‚tRzó „¡QéÁ©^½íû¸[7ió mÕ|oÏ“=Ѷ™¶WoûªÖ“ ø–¦ÂÌP}¢—+Ú%“IC{Û …‡¯b ¦®Áïþ{k½ýQ qú®U#U•dZŸ,v(JQQüÊMéßÝöȦñèÖw´Òu´ÑOË.áóP[Ïöõ êéjááÜh_Ê SôèPÏâ¼ IÄZ “I¯®­ÔVW5eÙÝmàÔöÉ=\-€B!ì ‰iŸg»®ž]TZ…¶å¥Ä4È/bÞxîÕÇÞÞZ’”`ôq·®¨¬ ‰LkÚó1;‘É$¿ûŸ£4ûÝO&“Æ ê OßÄL-˜;±§ºŠ:ª«©èh£—UXR‰’‘Sú-³Gðí¼þpåÎëý±i¢éOBbo€‚Œºž† Hd;SOˆJ~Æb×6m‡ÏçÆ¥€±¶£”ø7™þVÕ–—Çáò¾ƒWÕÇÌ·w^ï~^¤<2ñ1‡Ë€Žf½Q Ú¨¨.LÊýÊ‹üŸü%™'jjj22¿ó………ÕÕ¿hR¨ß”?Á‡ „'Ož>>˜¼·`Á2™ìïïoll ½zõ:|øð¸qãš‹‹‹²²rK]š6mÚ¼yóÎ;·bÅ TrôèQYYÙ1cÆÀ·A"‘äääh4ÈÊÊJII5[ % ÔÖÖFв²²ƒ B‡Nœ8QTTtôèQÔàÂ… wîÜyúôéùóçS(9992™L&“1q ™ÈFøK‘–U¬ '©¯ÝÌÓ˜šî¾ðµss4€äŒ6ÝĤôBq1ú†ýŸ-«Ø\ÈÈ-€êZVIyuOW •òÿu>!%Ü;›á u5µÕÒ²K!æõ§§¥„¯£®"—_ÖZ›_ŽZOKIKM>5«X(bë8"m:u0¸x;$¯¨‹èŠÊºÒŠyYÉ•;?gv),©‚O2IZV1`²P[;¨ó®½—ú¾|—8gBŽVºÿÇêj*âw5Tå… fu½’¼Tzv Ÿ/`VÕáûŒî;º}2‰„w½SV”iVIA ˜Ux3Æt M²¸qÞ¤žÓFuÕütnJfä1ñ—Ë)(œØ†GSM¾[g3䩯­Ì¬ª{ïÞÉ uõ3".ß²øÍÈ)UW‘3¨óÎož=‚oçùû³nC3ÇÆÈ+làÔ¥ä¼SÝÎX¡¹žëëW¹îÖç÷NûÛ”„5õÌê":MLE^—L]”©®+«©+W’ÓfÐÛôÞáòØ%ÌlIq99)•f+p¸¬f¶8CZQV³õ¦’³Cù|.j~ê¨["y)!ãMS0*ù)Шb–]P‰„\n&åUy¬†MSéóÓX[_QY[¢$§-FÿâïN[Õ\UAJý3eÌ\P’Ój:]ÀðJ™9B¡PEA—Bní먎U•U†Z±B ™j¨i—˜’˜" Ȥ?Á‹àç¯Ò€¾¾~LL ‡Ã€ÌÌL,ñÁ7ò'„>|““[°`Ú1cÆÛ·o»téròäÉýû÷“H$BS‘›Í~÷‰´´44­/_¾€Ž;6½" #l9½¼¼¼——ו+W^¾|Ù£GcÇŽ@Óp2?11±ÇO™2eëÖ­;wî=zôÞ½{UTTà“ ;vìX‘S´´´ðÊ“fieÈí…ª’lKÒš²,—Vé~þÂ+cÖ…Âf5Š"ˆ‹Ñä$å¤ÞÝZÛü¥•e ¬ ²eK4ö°¬J¤¼´¼ZI^ª%i°u‘aq™¨1IiE’¼TKÒ  iÔT“kz©­œl ž]ÔüT(É@YEÍWuÕÌPý¶Ï¼ÜŠ5»o^¼2yÙéû§þß“)ÚguyнƒÏ¶IßÜØôïnÛ¿»mhTúü—÷žz¬©*¿hj/´*1vpg‘À¡­0¬¯ýìu@èw?LŒAC¦Î€ZÛ°`ðèþsöÖî¹uáVðäe§œYÔÆKÿî”2³ý_ìÌ*ŒC»’â²ûo×So´‘ŽK}÷õþšºr IOÃfDÏ•˜"«)Uµ¥7_îLÍ  !&ÓÏu¶£E¬ByUþíW{Òr#… %9­1½ÖgÄÞÛt-57bÅá.°tüeeyìOÓVù¬ü§©JFY…qX·18u‰™!`ià†$@8oebVˆ{Ç1$åuäe!G÷Z‡$ɤ¬w·÷VÖ4:eh©šì¹JU¡1*ý•ÇcR_HˆÉn˜~•ðùÜGï|Bãîpyl Ph­õu™Eû$4r¸ ß@r¬8Cª¯Ë,]u«ýW>ÿí q_älã•S/ @KÅ?-U³Ä¬ú†ê’Š,5Eƒö~Lþ|þ6B¡}üøx<^zz:re"øv~û¬ÊÊÊôôt‘Ünnnâââ%¯Œ—––ÖÑùì×ôôéÓššLû—VVŸ£±—––¾~ýZKK Q" Üƒ­›/O›6 Nž78ææÛ± gï-޹‰¤A2‰Ìb×¾þp¥Ù"™¹ ¬ñÉTUÔk:@(,ûo‹‚oço3cccìc5%%…PT|/~{9ŠèñÞ¿Ïb±œœœ¨T*ÔÔÔàÿf8ÎÚµkñgÕÖÖ—W«V­âóùÍÚ‹’E9ˆÐ­[7CCÃ;wîìÝ»·¦¦¦•p2H¾ÂG ùÏ´õȈ«-üÎÎηnÝš4iRRR2¼644€ŒŒ ±/¡P(øö›m ¹Y!™ ½˜>Ú欿TR^ •Õõ˶ù­Úå“Gt‘•?xöÙóà¨rD\Öš=7e¤ÄMíÝ–ÆMíÅåñ§®8ƒe_àó/C1¯°é£Ý«kYsÖ]D¾…Ùùå#f½v¯1Rˆ†ª<›Ã{òêY͈RîLí,u¿Ž;~é2Í/bNY~Pð›ÿƒnÍ:Xè< Œ=qùf<Ùl›—î¼ûgõùŠÊ:¸v/ìQ`¬½µ^çÌ)Mí]R^=gýE,‡Ë»û, ®¬ =¤Wǔ̢uûn£Ä%ç¹Ú›‰MEjV1r´CSqüÒ+,¢LqYuIyµNóY*Š2T 92.«¸¬Z(¢©þO¤$ÓG»Ç§ä¯Ý{ 3¯­gqüî¿I¿Ñv8\ÞΫjb“rÀ@G4TåFöwzž²ûä#¬~u-ëj@X+ ŽÒ&/;Íã ÆýìvÕ«‹•…±Æ©k¯ï>‹Â K*±Ýã—^¥áf¯¸¬Ê  Jï?ƒ²ÊܲÊ\ÔuÁÄþÛfzY9醕AW`±k¿;ÖFÝ»0g„Ïä» ŽUù.öV³­=¶–ŤQÅŒ9;uðÞ5Sn#ÕÖ³°Ó¨ÂÓ°Ó( Œ£Eÿ•Þþë§Ýïî8QE^׭È¥ã/!%›®ºÕÒñ—–O¼¦¢  åUù /­F‚/å¤ÓH–WàË‘½¨¤¸¬±Ž£H÷ªjKt /¥#{®Ö×ìÀå±SÝNKÆ_š5üجaG Su­Ù&f…$g‡ÀHÏ53†\á}£“Õ`ˆMyY\‘ñéAùQ «f5g„ÏæYÏG÷Z§«n¥©l²lÂU£OV¯KÇ_Z:þRg«Áøþ+H«1@)l€ùíý˜üÐét̪ÿoЀ„„„¶¶6Ú®¯¯ÏÍÍmïý!üö&£H Äk#""ÆO"‘6lØ€JTUU“““óóó555Y,Ö”)S’’’稤¤ÑÑÑȇpïÞ½(´fK¡¬¬¬¾¾>JÐ’VD"M:uõêÕÿþû¯¢¢âˆ#ZJ¯yåÊ•õë×£nLœ8±õQ£à.±±±=zôh¶Bjjª¼¼< ËXä8f̘#Gެ[·îáǘO#ŸÏ///Ç$=eeå””4cøf‘š^DKоŒàtóqÄÍGéj*æä— „ {§€‚œä™]S'/;í9~·š²,ƒNÍÎ/W”—ò;2KI^ª-ìïô2$ÑçJ fçE–Æš ¥Ñ»sr>VÌêÿ*4éâíÃÕ”e³óË%Äé«f7F%7¸ó£ÀØÞ÷êi)™i4µ·$‘H§wNöšydöº «vÝPS–MÍ*¦R(‡6ŽëܲŸ[ëH¤3»¦xÍ<2kí…•;¿h³S‡/Œ¸–Lïsô‹³7Þ(ÊK•V)ÉKßÒâŸÞ¢©½B"SÏÞx{ëq¤¥‰&‡Ãû˜VPÏâÄ>Þ¬ ' ;V þ˜³õȽCgŸÉJ‹ç1Ue4UÕéã†tÞ°ÿŽ¥çu¹AžvG6÷>gýE3-Yi‰¨„lVgçæ%PìÍ‹·Cô»,“‘[9«ÿÂ)½  ü»xh\rÞ¶£÷O^ 47Ò¨­g'¤ä ‚¢ðƒŠm{D„Üù÷Ð][s@›©®"·dZcø®=kF¥f/ß~}ï©Ç¦ê•ÕõSó©Tʰ¾öXæzúv³Q”—JÍ*V“ìÛÍ+§PÈgvM>ëȇô´”t5‹J«R2‹;Xè ö´€›#ð³WßÀ¹´Æÿ÷ÀüvP)†Ž¡ñw5ULÕ d¥…áô¼õ UÐÉjÆLt;1èlN}^IóÔØÔW`¢ã¨ £btI§¢òŒªÚÒZSJ\>)ëP)´!Ý–P)4èÝy::WY^½éT1eùÏq}6’N5ù¦SÅð5uåéyQ`mäÑÔs¤ñ}7›è8a¬ª-GËH]©§a#-¡PS_‘ßâ_ƒ.ÑÁÔÈ$²•a×°ø»B”¦¨*è¡€gç):j`gÚ é*•ä´4 l°X›˜ú‘öå±!ÿ„,ˆ11±úúzøkB055ÍÉiÌ›œœŒ7$ø¿ùíBQfÛ¶m‡ …999EEE ÃÇÇåf€!C†ìرÃÃÃÃÙÙ900B¡xyyùùùaB//¯Ó§OÏœ9óñãÇÑÑÑ©©©ƒö÷÷oÖáààpãÆŒŒ ¤pkooïõë×óxTK"‘Z’“ Ú2™äl·áï>¤–TÔyÌ ÎÆy&¼úØ;ØèÝ|™šO£R¬L4‡ö¶×P•ÃNïça#6Z耧›eMmƒ¥Éç…€['ÔùջĴì ™Ü·›u WctTI^*äæš³7ÞÆ$æTÕ°f÷˜0ÔK0nˆ³”¤ØýÑ.‚W£þgùÌ~(QÂÎR7æÑ¿Wî†&¤ä×Ö³§vïãnm…뀥î²}E¢†þ3¶[iy‹{X›ñ)ùuõìi£Ýûº[ãÕÁBgù?ýOë=mT×£^TTÕY›jØ wÙ¡`‹¯b Ú½Ó žG…Egd䔊1hÃû9öífmmÚèše¢¯õ`ÓÙoâSò¹\¾“­þø¡.˜ äºyƒt4C“¨TÊ”]àæñ¹WF¥óø|7GãÉ#ºà]=EðÝ9¹£•nD\–œŒ’ˆt5—ÿÓ¯‡ëî£v2ÔU‘‘j¼¨²‚tß*¿ûs Ê¥$Å& uس& ÎçQPü…=p ™l¤§Š•Xk,›Ñe¡cÐâŸl¹|÷ÝÇÔq1úˆ~ŽÓF»ccÔVWxwýå;ïâ’ór *L Ô¦qÔ³& .œâÉá~aO£RNnó~‘âÜÑHDhìÔÁ þéÖ‹·C’Ó KÊk¬LµVÌìÆŽfïòwmœ½? y53=礬w9E û¯LÒR5ïÝy™æ.>\‹iç8ܨ®kƤ¥SWS_IÙ¡|{ÌT²ª¶TŒ.…0-Us$ ¶äªG¥Š{ PèŸ*|þrNyŽüñšFšM “ ”ÙøxýÙVÿçÛ? •µÍÛì 9áp6úôE%È Ê«ò€L"ëª5ïÖÑ4¥@¥|1Fl—Ëe·ý†| ˜@ø—˜Œ€’’’¢¢byy9”••UTT(((´w§~{~{ÐÒÒÒÝݽq0Tj=lllÆŽ«¥õÙ~Ó¦M,ëáÇááá#GŽ\¹rå®]»F… íׯßáÇ}}}_¾|éêêzõêÕ­[·BËBèÛ·ï7ž?Ž „rrrNNNXuuõ ¼yófÖ¬Yøs]\\ðÏ®††FHHÈš5kbcc N:5a„””3³Fw|yyùN:YZZb§Œ=:##ãêÕ«ÏŸ?=z4*tttÄ4~Ó¦M+))yòäÉ£GÔÕÕ—.]ºbÅ Ì(ôäÉ“îîî—/_~ôè‹ÅÒÒÒ=zôüùó±öW®\YYYùðáÃÀÀ@”ŒØlvpp°£££¢â‘î ~FôsÄ2à‰ £¡¸hj‹ ¥®N¦]>ËZí ›ªæÜ;™ŠÈcxè4ê?c»µtt°§öX6£¯H)ñ™ããçsîÄ-jûìýyLè·õÅû³!±·8uyʼn§ï.Ñs•ƒy?”¹d$•ð² ‰D²1jf®>¥dÐ$05#BR\VYN‡Å®AÒšÈÑÖ¡Q.‹ÃýÉWÄëOjCŒ.Éá²8¢a*U@¥ÌìüÒ°3ñq8lL¨à6ÇÂÀí?뀼´Z)3‡F¡/s¶Ù ²R*E嬆j»VœÑ¢)5>“ãSÿÙœz ±ÏÉN0Í¡H& ‚hT(²ÙìVìÑþ$ttt¢¢¢R4''§C‡ø8 ÿ¿}P™ï‚¿¿? 4 <oÆ yyyS¦LiåEEÅ¡C‡>zôé¬ÿ._¾L£Ñ&L˜ÐÞ! ø±Øõßà6b[M]Ö%ÄòÁ/›Sb–Ш g/#­ŽðI×§¦Ø¨ÞŸp3Œ€ú†jdÆ)™DVQЀäì0fMV. ))‰DVSЀ¼âDÌ×.6õåÛèF?$•2sx|.vE”¨°ª¶Xø¥ È¬.üT¡Ñ¦=*ùÚè`Ú&·X,—Ãû„{x)´S‡I›¢§(¢ 1©/ðåUŸLLÕ• @Âï%ÆÂ²ô[¯s1ÑEcÄúϬ)Ä·YQ]€Ÿ‚ŸÀß–yA"‘LLLж@ HMýŠ×ÍòÛk¿ 6løøñ£–––’’Rvv6“É9rä’%KZ?kÅŠþþþ.\X´èÏO~USSsãÆ1cÆhhh´w_~,×ÎÎ+d:Úêã\é~²‹âÏ,3Õí¤©lZ×P™œŸ2¤ëª[!÷Âè”ç%Ìl]uk¡PPR‘•U7®Ï&+ÃfŒ*û8Ï8{o9‡Ë:pÅÛ\ßUR\®º®,#/JMÉ`úÐÃÉûƒÕpîþJU=»¦ª¶ÔÞ¬ÑáPUA¯¦®¼º®lÛY/‰u%C e£Ì‚ŸË¬.RýüÊ@Q=¥%¥$&¢Rž€†²±ª‚^[Æ®¦hÐÁÄ3:åYbVÈÁ«“õ4lH$2 —ÇRó~MOéÖqlxÂ=»öê“£’Ÿ)Êj6°k³‹ʘ9Ûç’Hä.F†ÄÞâpYo¢¯Ç¥¿fÐÄK*²¥$¼<–€Ê§Ž»1SVJµ³õà®v£5”¨K™9šŸmÈÑ@]ɨ½‚¿‘̲²²íÝ£Ÿ„¡¡a||<ÊÙ–––fii‰–Oðµ!À³gÏnݺ•œœ\__?dÈÞ½{wîÜù?Ïrpp¸|ùò_" ±Ùì;w2¤½;B@ðÃÁ;Uüj(ÊjШŒ¤¬w˜ÊNKÅl°ûB´=¢ÇÊ[¯ö$d¼)(M-(m\5§QÅä¤>Ý!‘@ð)>¶™žó÷EÞù4pê;BY®1pŸ¥A—¾.3Ÿ†úò¼¢ò  Rh¦z¯ÈŽÞ9E nJˆÂ„êªYÇÜ€ì¢xL làÔ–§€Þ§Ø-ÙEñUÐÁ¤çRdAÚ4Ž÷`÷…Âè”çEå¨?¨KòÒÍ»xHŠËM°ÃÿÅŽ²Ê¼ÄÌϾJrÚ$¤$&ößê÷tKM}–ì¥ñ€NVƒÞ'Ü+¯Êçñ¹åUyh€:j–$Y(dÆ£$ˆ¬‚XgH«´M¾% øvþN !0 ==½ôôt`³ÙYYY­Dy$øO@CCs ü*ÆŽÛÞ}ÿI())ýSD@@@@ðQ”ÕZ=ùfjnDEU]RMÑ@OÃ;*%¡0±ÿ¶‚ÒÔâŠÌÊšb:M\Y^GOÝ‹ƒ2kØÑº†*\g/kcÜâÄòÊ<¾€/#©¨£f‰7zìf?ÎÖ¸GNq³ºHVJÙDÇIR\2Ðì°tü•´¼Èú†j %#”‡ÐD·™Lø éAXìÐäìP”ùÝL¿1ì²%‘ÈLz6ænKJ+s¤ÅåEÊ%ÄdÆôÞàá0¡¨<£²¦ˆJe(ÉjéiØ`¶è*ø§ú¶‹Æ^È.Œ+«Ì«o¨’—ÓP2ÒTù¼îc¬í¸düå츒Š,:]Ü@à ÄÒ‹ÆžKÎCcGŽ‹’âr:ªÙEñ‰Y!˜oa«2«0Lu;cÞ†?š¿V SSS$@JJ !~ „@H@@@@@ð;!ζ1òh¥‚†²±†²q³‡tÔ,›J‰Ë›ë¹´Ò ¼Œš¼Ló*8Y)eÌ‚ôS÷¤Œ´ìSrÞ'ç¼çñ¹(gBÆ PhèBeÔ×°m6„©’œ–’œ´€š¢æOˆÁᲪjK ÊÒ@FR ˆJ¡jul%ÐŽ8CÊLÏÙL¯™X…4ªXSk[+îÙEñõ Õ™ùѨٙÁÈgÒª…x§?“ÑöîÎOEVVVMM­¨¨*++‹‹‹UU Gÿb‹€€€€€€à{âj;8\VZnðùÜä¬Pè`ÒSR\RsÑ•©]ÛÂÉ´…[¯öì¹45Ûº|ûí8Z@J×oQ Ú“VµÔoSøS‚ïÂ߬!SÓϪþäääöîÎo !|OLõ:#›ÌÜâD(®ÈâðhT±®v‰s•åuûºÌÔuiÏo¹MH@²0pëáäýC(Îv¶JRnI"*É-I$‘ÈÝìÇ‘ÉDd ‚Ÿ•J¥RÍýþ6 !hhhHKK£í‚‚‚šššöîÑï a2J@@@@@@ð=!iþ(_lWCÙxûœ@|õnöã¾¶ÙÖê±d¨Ç’oo§ôsÝÏu6¶»vÊŸvi<âââHú 5„`jjB¡0%%ÅÞÞ¾½{ô[Bh þ Š+ãSò9\^{w¤——_Îç ¾±Úzv^³½GóÂjàä” …ÂooJ„êZ›óÞk@˜™[š”^øíw‡€€€€ }Á¬FÿNP__ŸNo "•‘‘ÁårÛ»G¿%„@H@ðÛìªë6z‡fçEÖ½×ÚôY÷C¯% ýLûÏš'.¿Òs[zûé‡o¼â¼ —´§g—üÐqý 6¼«ëº44*ýû6Ëæðälæ œzàÿ87=»ÄºÏZƒ®ËÍ{®öšy¤½gˆ€€€€à›ÀB6›-üuË|T*ÕÀ 1ÄÇËÈÈhïý–áðþý{CCÓ'O¶^-??¿¤ä·ü`%øØúéë°ä9{<8³hÎÄ?ôZ ©£çŸ°øäÖ„ðU:(¡PØTÉZü%Ûw§©Êuž/øÎB¡÷é÷Víòÿ˜Z°}ùð{§ëK˜ÖüÞüåqeÀÄÄËYš’’ò#¬rþxþÂÜÜÜÑ£G³X¬^½zíØ±£Ù:ÑÑÑ‹/®¨¨èׯ߶mÛÚØr```FF†²²r+u"##œœÌÌÌÚ{&þFC“têÞ5£ôþm¤«2sœ‡…±Æh|íÞ[Û=ˆyô¯µ©Ö··ö“9tîÙ‚MWž_ZÖÃÕ¢½ûүÒM ÔVÎêßÞ! ø[ÈËËËÍÍý U7ÿø¸ qqq˜5 AKTUUaÛ íÝ£Ÿ¤¤¤––Vnn.ÔÖÖ¾~ýšF£µw§ÚN744TPPhïŽü)áýû÷CBB Fllìºuë$%%E*444 >÷¼¶ž=k¼‡‰¾ZD\VHdêœ =ʘµ·ŸD&gu°Ð5ÀIŒÑ¸Ø& ]|©¯­ÜÏÕðùÿG±™ l®‹½±W{Ñ´ª†uóQDlR®•©ÖÈþŽ2RâMRY]ïwÿ}ÌǸù8"<6SŒAóþÅrnaÅ­Ç‘9åŽ6ú#ú9R(d‘«Ü{•-#%îd«ßÇÝ3 ¡¨´êÊÝБœd%o?‰ J7ÖWèå*'#! ï<ýð2$Q_[yX_]ME‘sŸ¾‰‹Î¨¨¬³³Ôнƒ‚œ$4°¹n#GÁ‡±9å yòˆ.T\KÊ«o>ŠLÉ,²³Ô5 “Èqyüǯ㢲+*ë¬Mµ<»Xêhˆ^úñë¸È4Pد›¥ŽÈQ>_pýAxd|›Íus4Ú»#&úóþ2$ñcZP(,*­:qù‰D=°“¬tãízŸ“™•Wfb ÖÕÉÔÖ\;±°¤òj@Øè8\Þ±‹/`á”^ªr?öá& ø#(--mï.üE4Õˆü%(+++((TTT´wG¾‹Åd2¿½©oáÏeddFŒqõêÕÈÈH099y×®]Æ C–Ÿ˜@X[[›’’baa™_ ‚¸¸8 T³²²2==½wïÞÀår322^½z²²²IIIÒÒÒššš——WUUeii‰)((¨¯¯722âp8¡¡¡•••nnnH, #""òòòœœœÐ¹x*++䤤œœœh4ZJJм¼ñöí[áïICCFëÖ­[vv6L˜0A¤‚‡‡‡””Tnn®»»;…B©¯¯GåK—.€ˆˆ¬æóçÏ`ݺuh÷Å‹°zõj¡P¸oß>‘©svvFÕôôôÔÔÔ°Fììì<==ŸÿÈjà€žw·Ñ;Ðî…[Á ç}ìâK´›ž]‘ж÷Ÿ~zÞ ç=uÅ™¼ÂŠ6×{©/èy¯Ùs³Ù±TV×Ï]ô¼_½KdVÕÕÖ5 ò ‹N‚ž7Iòöc÷+«ëË™µ.ö€ž÷ÍG¹l× ë2mçÅSóQÉÖ#÷@ÏûßCw›½Ðã×qhŒý&ïËÈ)a5p†þsô¼ålft]™*{zÞƒ§ÄÎZ¼å*èyû^{v£²¥,þ±î½–Ï…ÂêZÖ¦ƒw@Ïûúƒ÷̪ºšO_ºõš„åÛ¯—”W×Ô5ôŸ²?cÀ~àFªá”Ó~A\_ ½OVî8j8%%³Õ¹ zÞ]Fl+(fÖÔ5ø\yE7žzÞcv¢ §ý‚@ÏûÔ§¾¥f‡D¦68›Ã-*­=o·á[™Uu•Õ¿„³Öž=ïE›¯ÔÕ³…BaZVq‡~ëAÏûj@(ªðàe zZºŽÜž’Y—œWR^ý½žáïNjj*ö·V\\ÜÞÝùÙ{iÂòCn».ŒF»AQ~˹-?ä–‘ýC¯ë÷tËòCn;ÎD»‘W–r[s¬G«²½§ä‰=,«½»C@@ðK€U•––¶ww„B”ÑØØX.—koo¯£££  €ÒSb\ºtéÕ«W6lÐÔÔŒŠŠ²°°o4‘ŠŒŒ¤R©˜†„CÀ©ñ„ôóó++«Û·oß¾}ûÌ™3P^^ž••…ù%²Ùìøøøêêêxyy3¦¼¼|ݺu]»v577ùòå’%KX,^ÂܱcǪU«ÜÜÜž={æïﯣ£3xð`|OPÇ8ðàÁƒ3g΄„„¸ºº¾xñâúõëí=ýí •B–“‘ “Éd2YNFBNF¢%;Éf£?8»ÈÆLÛD_M[ý³Oóòúí^=JYAZR‚±mùp‰Lm¶…¢Ò*ÀL+ t”]ìð¦Œìrj»·¦š<ƒNݵj$¼ûÐ|Ê YiqƒÒ’br2"ʽƒÆ®œÕ_VZ\ANrÂÁò©ó7ƒ3rJ7-jnÔêfžwO•rÚ/¨•±wu2½ubž¾¶²ƒöïâ¡À S_]]áÜшD"Í™ÐCUIæÝ‡Æt¥5GοèÝÕjꨮ¨¤ƒ…Nw‹¸ä¼ðØLÔg¤Œ•gÈÉHH}Ùù5sî\9BYAZJ‚Ô§Ø|Þ{—å=ÜmÊÈ.T ™D"uq4Ù±b/ØçûÕÙú)œß;M]ENJ‚1cL7ÿãsšÞÆ;h¤«âÜѨéé4*2¥R)r2h;¯ˆyêêk3í}kÇ %°¡®ÊÅý3`—Ï#üéªJ²¾ ŒõT­L4•¤Ûþ˜üš|^’þ®‹Ó,vm|zPbVÿE6°Z3:õt4íJìL=I$2—Ç~Ÿp¯½'ƒ€€€à¯æOñb›]rrr]]:TYY¹dÉ++«… ¦¦¦VWWc"–P(ŒŠŠ²´´d0>º}øðšˆa`dddddݺu2dÈ!CÌÌÌšž‚¤Ó°°°C‡íÛ·¯K—.³fÍ€K—.y{{_¿~ÝÃÃcÍš5P^^ŽNIOO_¿~½µµõãÇ{öì9lذgÏž&g¢1„‡‡Oœ8ÑÙÙyùòåðþýûöž~‚ߘá}ðr FwklÛHWJËkšm¡wW+ …ì½Ô××/ˆÕÀiZ¡W+LFUV–‘o©©Öù²Kªø.E%d_ xü:ý ŽHÕÓRÊ-¬h%Ä‹{'SÌ‘O_K Ì Õ1Ï=2™¤­®PZÑx‰©.OEQ»Äã×qÊŠÒšUüu×S¬å°è ö¥ùåÀž .9í&¤æ›¨ékŽuÜóË@¦}Ü­ÉdÒÄŧÎ\Óì]h…ñY<¾À«ÏžÕV&šzZJSó¸„SFvÁ Z":åÙŇkÎÝ[‘Yƒ/OÍçsÀÒ ÑZFR Ù¬F§Ó³K@ëK±\YAšF¥ää—@eu}]=[SM¾•6;Zéú™½ðß+SWœYºÍoáÏÕsR)mZïKÏ.­&ík¨Êeå•—U©«È¡Ìc“€ m|¡xLHb²êÊŸÕ×ÆÚŽÙ…ñ…eéU ²?$™ Áò‡„222H¥fgg‡JÜÜÜÂÂÂNž<9qâÄ.]º@sP$ÝáSP¥§§÷ë×íVVVfddôêÕ !ø¤0)Q*Î;«ÿüó¦ŠŒŠŠ[[[´ %%…]rrrrrr†Šv«««ÓÒÒ¬­­»víŠÕÉËËœTI@€éäþ¿Äå_Ë^ôèp÷é‡-Gîm:x73·ìüÞißÞlÛA"ÙÇg[ñ:4 Q)”¶ Eÿ‰¼¬ü»xè²}ñåd2©i0ϯBZR ªªëñ…¬—ÇG’˜„8D"ÕÔþG®áá}{ÚÝyúaËá{ößÉ)¨ðÝ1¹M€ê&í×Ô6P)deE™ï2ßNݳÐÓiy‘åUù2’ÊÖFî=&Ó¨ ‚ð}|@|zPay:ÇQ–×1Õíìa?Žò5cJ™9OÃNç—$ײ˜*òºæú®öãÉäÏK'Å™OCQ…JUE}7Ûáv¦½.?Z_PÖhýàíQq†´¦g§)?#?tÔ,HðyeAO£1XqZÞ'B $ h'~{ù칺6F#ÄB>Ÿ?sæLYYYL/I¡P01 r¨>ÂßßpòÞ‡„B!>GҤ¤¤¥(Fdd¤ŠŠ ¦TŒˆˆ––öððÀW///‘t!&“™žžîêêŠzçÎÀ «¨'È«#44:wîÜÞw€àWDAVJʪ‘¼-Û|~¨ò°¾zt°é³îÚ½0ß“[Q¶™D›ûUgêª@zN)æCøÝA—HÉ(ÂBƒ6ý}­Å&bßÇdº:c…ÈŽÔÜHè4ªª’LbZ›ÃÃl\Kš»›4*eD?Ç=:Xõ^{ån¨ÏÖIm‘‡‘¹lXt:¾°œY›–]b¬¯ÖF5#ÁO¦¶¾âß´ªÚÆ|åUy‘—d4:Y øg–¦æ~ö¥Ï)JÈ)JˆOœ;ò$•Ò¦ß)9ï/ÌzUø˜ñöÒãõüO^‚yʼnמn6ÔꘔÊá6Ú­–¥…L€f6ÏU}ü…TäC¯”¦´÷¤ü½üö/û¸¸8Q횘˜HHHDDD>|8::zûöí(mò477—h´ïBŠ;,¢ ‹Å:xð ´Qx<^ll¬ÞÊŽÉdfffb’[CCCBBBÇŽñÒ2CÅ"ŽŠ´Œ< QR ¬'GmÚggg¬‡ÃñóóSPPÀë 0£Úå»ïÐnTBöÄ%§~Ä…"ã²8ÜF?=:".F“§ÿßRòÊ‹MÌýª³Föw$“Iÿ¼[]ûÙ‚Z ¢P+ßKcM3m¿ûïQŒ‚âJl[u>)ï«Z5À‰F¥:÷,¯¨1Rvu-kÕ.‰´pJ£yÂ`O»Úz6Jˆ.:pê|#qY˜!.FcÐ$ÅémÔŽº9šèj*Þyú!$2 ›ºå;®³8"É-~¿;…¤AÍ“îÙsµŠ‚.Rß…ÅßEÒ ¹¾ëìÇgz1Ðì…eéo£o´¥q>Ÿ{;p/—× «fµnÚ½µSîtµ éyâÒ_Ï :Èçs)dj'«Aÿxêí<ƒA— “)£<רšô@í¸Úê±Ä³óT(©ÈB…ÊòÚøkÉH)!½e 3»½'•€€€àïå·×Šˆm ÅÚÚ:<<|ݺuNNNÓ§OGå"e °°'ŸÏŸ3gNZZà4„"-§§§744¨««ã¯.Q&&&†ÇãáÍPQ&þ}ûŠôYGGGEEdddà“ý'ðx¼Ù³g§¤¤@0113+ݾ}{aaáš5k°ˆ©x¦vßsòÑÆw#b³x|Á³7ñㇺœóûÝ/´z÷Í©ùCzuT”— zŸ“˜»rVÿ¯ŠtЧ»³9,Ú|õmDJ^!óµßʶ4ec¦½xjï=§ÛôY×·›Š¢Lv~ÙóànÆ×Ïú.Ã$“I‡6Žë?e¿Ûðm^}ìMôÕ˜Uuï>¤E}Ìá¦ú¢Nvq4¡RÈ[ÞKHÍ/«¨¹ubJ[ß:†º*kæÜxàN‡~ë{ºZHˆÓ_'支;°ƒE£÷òÂ)½n< _ºíÚ£ÀXM5ù;O?t°ÐÑÓRÂY±ãzjfñ^ä$C“Rò×ÍÔÆ¡1èԃƚ{¬Ç¸]Ý]Ìu4C"Ób“rûyØLÑå»ÌÁ÷…/àE&>I¥¼£Â¦žhãMô gHë³ YNè·eËé!|/*ùi7ûqÿÙ~bÖ»Šªèáä-). ãßDù A˜šnmèž’óžYSý¼<–€¦›í:MÌÊн¦¾"&å˜ë»k7ºÜ³ØµhƒAÿâ‚$M¼žÏe±  Aëüi!ØÙÙ………Õ××?~Óæ5­fhh³téR›‹/¦¦¦ººº¦§§khh`§(**bš=¤Z :{öl~~þܹsåääš(ƒ›–äçça¤***fffQQQË—/××׿téRFF†ƒƒCQQ’±F–.]Û­[·ÐÐГ'OÚÙÙ­[·®½§Ÿà— ³!_ð…» †ª\È­µkvߌMÊ5ÐQ9µcò„¡.)™Ef†+ò²’:XšˆÚXšª;Ù eFGL8¡R)nÆöÖzhwת‘»|Þ{Íæðt5mžøÏØn莲£¾HSçŽF2R-®bØ[ëÞ9åÈ…/C]Œ‘ em¦Õ©ƒþ, qzg;CKãÏ´»Wr±7:}ýÍ‹à5u ªrCzuœ;±G³WQS–u´Ñ7ÖSÅJ¨2~Pk=¼ {'ÓØG›7¼Ÿ’÷2$QNFÂÆLkÕì˜Èª¯­ìwdöŽãÞ¼O±5×Fi3Ð|â“4É$7cl>`ÂÁöÖz¾×^GÆe‘ÉdG[ýc›'ôïn‹¿)oo¬Þrä^XtF}gù?ý–ýÓ÷ŸÕç°˜Ÿ{VÚ}òQÀó(6‡§§¥ä³mÒ´QîÍŽJ¥¸6é`O»ð€ ÛÝOÎOHÉ·0Öœ1Æ}ö„îØÐÔUDgŒ aV „À9àÁ'ËL>ŸË¬.=uk$ €„˜¬š’a~IryUA[ÚÇ”uAQWCãï4¶O¡òø\fu!”Wæ£B}ÏO)&ÖJ›˜)Ö+ TÂæÒÚß^ ŒUTTDe:u:qâÄ‚ ðbXLL ‰DÂ{Ü­]»6$$䨱càééùîÝ»bf™uuuééé Àêkkk;öÊ•+S¦LÑÕÕ]±bº:•JÅâŽÆÄÄÉäN:agÅÇÇמ~¨oÿéëë;lذݻw“H¤^½zµK—.X…êêêÔÔÔš™™aÁߌߑfô`Ö¦Z¾ ð%Áþk°mmu…ÐÛÍ,(xwóî&Rt}¶M¥ßÜXíÚšk_>ðO³½ÔÓnPO;‘ÂÛ>óZË”‘]¦ŒüB1µlF_‘P.r2ïn­9qhoû¡½í¡ Øšk¿¿»_BùrPˆÃ›Æ‹”è(·/Ç«½Hþ†©£ºb© $©éµt·€“›bn¤!2ϧwNÁ¶í,u¯œÙ–±S)ä·M®Ö¦Z­´`g©+2cíHUm ÚPSÔ9TÃb"YQB\_.ÎÍãs©ÿZk?-7R䂌T~ª âØ JãdžHrBà ø@¥üö_#¿/¿ýOpPP‰DÂÛ•y{{=ZLì‹ÕÊmÛ¶mܸ_hgg—›››-//\ø>|ø@£5¾)%%%ëêêD¹|ùòîÝ»kjj ‘—à¹sçNŸ> fÇŽ;xð þ¬ùóçϘ1oØÙ»wïÚÚZIÉÏf3®®®………YYYJJJÒÒÒ’’‚õ$**J(:::®[·nݺu………xE‚¿Iq9´QǪ9$-.O’„Õµeøòšº •VùOid$­‘g ?†ùH$’]¤°4Tþgk­Ñ{ŸÍ©9Äå5ƒþué[¾#¿}P:ŽÉN"‚É䦅T*ÕÐÐ èÂ`0ðcÄÅÅ›ú/ihh˜ššbò•JÅ«é(ŠÈUH$RS7?¼4ˆUÓ××GÒ HOðF§ÒÒÒ&&&„4H@@@ð×¢ £N&‘ >=ˆÍiLX’_’œWœH¡Ðä¤U ³ º¦®*(M-®Èm³¶´¯$Û4;·è£8C û'öÉýOQîSªÞÄÇØYQÉO‘](&sVÖ”`Ge¤SˆHªlN=‚Œ¤2´„hñ«ÓÔ ‘€€€€à¯…N·7ïþñ~Umé!¿ifzÎÕI™!½§k©šwí8úîë<>÷˜ÿ¬Žf}ø^X|I䞦´¥}KÃ. 2êÕ…ÞùT×—ë¨Y üÂòôÄÌà!Ý–è©[[è»ÉI«VÖG%?­­¯PS4È,ˆÍ+IZ<‚>2+€ÇïNæ'JŠËöî<]C©Ñ­£´2-Ì_Q—­ž€€€€à'C„¿:555®®®"ÑM þZz;OÏ/M.(M-«Ì}ݘ¦EQV :[ É*Œ‹IyQQ]øüýYtˆNì¾HMÑ -S)ô‘=×\~¼¾¦¾"èÃUü!¡PT mx—m`±kRs#P– :M\J\ô5l•åuK™Ùµõañw µ:€¤¸¬¼Œ³º(¿ä‹|ƒyʼnhCKż½'•€€€àï…uÚ» ¿Ò sGø¼O¸—W’\S_®(«ekÜ%“)c{o´7뛞YÊÌgH©)XuSù¼ªØµãèâòLåOIáuÝ;Ž¡©*òz¨D_Óvé„+ïãJ˜9Uµ%tš¸Š‚®‰ŽVÔXÛqáØs•¥ñ|M‹þ(G™L™=üØÛèÅ™4*ÃÉr :ÅL×ù]ÜíâŠÌŠªÙF-âÇÌ` QÅ µìÚ0n‚!üfP(4g¯–Žšêv2ÕíÔÒQó~ø]5Eƒ~®³EêˆÑ%»vÓJä¤Tz:y7{HBL¦Wç©"…nïân@BÆ›.v£ S—ž÷Lt©z{Ï(ÁßËoT†€€€€€€àÇXÛµ&d¾A%ÉY¡|:[iïÞüÕ!Á…D"»uÙq,v |²UUÐ7ÑqjïÞüÕ&£?œÎÖC5”MÈ$²C ú¸Ìp´è¯ªØÖìö?B $ øáId=uklW^ZM^Z­½;E@@@@@˜Œüæ…Âìür@ØÞù —ÇÏ-¬hï^ü* $þB7èÊÝPý.ËC“Ú»#í!üÞìó}¢ç¶týþÛíݑόžw\ÇeÉ£ÀØöîÈ/Á–#÷ôÜ–î8þ°½;ò™Â’ʬ¼²2fm{w„€€€€€€ ý!B‚ße=-%#]¬d¢“ãúüœ«_»æ2lëÇÔ|¡¥±¦Ž²š²l{ÏÍÏ&2.ËÙkKÀó(|¡‘®ªž–’Žr»t)è}²³×–—!‰ß·Y.ßmôŽõû~¡e K*+«ë¿cƒ5u ùEÌÑÕÊêz_ðCgƒËã'¦dç—·ý”ªVaIåíÕo ³ªŽÿƒïžÚzv›ÛÞƒþÃ!B‚ß›¡½í3ßìöG¦½ Oý9WOÉ,z÷!­¸¬ _øïâ¡é¯wÙYê¶÷Üülò‹™¡QééÙ¥øÂ1ƒ:e¾Ù=j@ûÄQÌÎ/JÏÊ+û¾Ír¹ü×aÉ‘ñYí2(‚êZVeu}³ÿªkYÀåñ5;/úÏáïxÑé+Ïj9/.(®ü¾cIÉ,’·3{í…7]σ?j8-´ð\£ç¶tÛÑûmGFJ<>%ߦÏ:Tè½ÔmÔ&œ”`lû(ZK£Ÿß;mD?GT¡¢²nðôƒo?µ #%þáþFÃ/%ºÚz6öɸvï­µ{o@Ü“-VŸ„óªêz¯™Gn?‰Äúpz×ô=$ ço¼ìë„Í¢¼”ïŽÉCzu€‰‹O=}¯Ã’Ñc¶iÑõóÿ 'œ 4pê@Œ.ùÍ-ý JSÓò"dÔ­ Ýà}Â}6§ÎÊÐ]^†4úÕ¨«Èí\9öþ=@&“ÖΈvÉdöSF¹…™¹¥½\' ui©Î”å§/ÝyW~PéÓJè`°§]AqåÀ°#÷å²Ò1~†¬²éàÝMïFÞÛØÑê/²ß±0Öœ1¦›ƒ^{wäWç³@XYYYYYÙÞý! ø:ð‹—ó&õìâh2sÍy>_pjÇd0ÑoüØZºÕïйgkçœ=¡»@ Ï.-Ã.—œ÷ò]âì Ý]í‘\šTXRuv÷T7G*…|ñvÈú}·lºòèÜb‰ôøü’—ï·½?y„Û žv$ÉÞZïómú´QS×à4ø_fUýÞ5£»»˜—3k]zyñvHeu}€ïìž&gv½s‚—Ëø!ÎéÙ% þ½â½Ô×ÃÙÝ—Õ»ýƒ#ÓüÍéßÝ6¯ˆyöÆ´d‹GJ‚ñèÜâǯãž}6wb® ÙÌP«0gýE cÍ+gª)Ë,Û~ýâí®L§ê eÌÚëÂ×Í4°gE9©iS—Ÿ™ºâLW iI±Ý«GNIë2zÞq{k=ô ê`C¤’kg2Þ\x°f =h¨Õ±½»Ó 7^l/(Mµ6tGáÛèëÅ™y%Iczohï®ý~HˆÓ—ÿÓÛÝ}ò…L^9«?¾‡Ëkïnþ* eµÖ…d6‡Çç x¼¥¥D8Ù8ÙàK8\þOóŽcsxð÷=²Òâ>Û&µw/~¨âââ,«½»A@@ðÐÓRÒÓRZ¼åŸ/@ÊDFNéñK/‡õuØüÉLeçÊço½øró/¤$€ü"æù½Ó&z¹b'n]: oÊr|ËÄ+¡!‘i@£Röè• nÆÎæÍvi°§´¤Øõï÷®¼·)Å•ó&õ¤RȰl›Ÿ²‚ôÍs‘ùè˜AžÅ¿üøu\?‘ÖêêÙ›ÞU”—zqe9ªomª¥£¡ØcÜ® ûZúÙ†ŠA§†ÜZ«¥&í ?¦æ?þø"$±§«›Ã[»÷¦©Ú¥ý3ÐèfŽó¸ù(âyðǘÄ\[smÔBQiÕ¢©½ö­ƒµ9²¿Óè°Ýuó]¹Š)úz¸ZÔ±Ø`mªŸ|öžz\\V4º¨ÄÃÙ¼Óï½ˆŽˆËrø$CVÕ°¶-¾jvèÖÙ,-»dÇñOƒâÇî â³å$‘RÔHWeëÒaÍ^«»uiE ØYê6íRG+½Çç#SÏó{¦Yõ^{ûI$•¤ Âöc·~x_‡ÀФ£^$¥:ÚèÛ˜i骀ª’L+#%ø™p¸ïq¯¡ígÕ7TS)4:í»™û …‚ú†]‚J¡á˳ b JS £YTÒѬ÷£qiýÝæÈH*ý×"h;¡I_ÇIKŠõó°iêÝ—œ÷2$1-«ØÔP½WKl±Ò²K.Ý©ªa¹:÷÷°ûÂd½¶žýäu\ÔÇœ6×Ö\»»µˆU<Ÿ/¸û,ê}L†”¤Ø žð†šéÙ%·Ÿ~èÝÕÊÚT + …'.j¨Ê ö´k¶?•uOßÄ#c[s~6²ÒOõÕ€°ˆ¸LˆIÌ=qù•ƒ†w¹€ü"æý—1iYÅpáV°Œ”¸¢¼fŽHÍ*¾ý$²œYçê`4¨§hŠËª¾ŠIÌQQ”q±7BkÍ’™[zëqä^ uUÂc3#ã²êêÙàÄåW`mªåê`Œjr¸¼€çÑⳄB°·ÖÔ³fêÉáòŽ_zÕÕÉÄ@GåÈùçÅeÕ“G¸¡ÛZXRùàUl|r™L25P;¸32õ¯®e] CïëÛO>DÌaÐi“G|ž‡ðØÌ×aÉ9ùå–&š}Ü­u5ñÝfsx·ŸDFÄe)+HíݦßüÜŠ‡¯b“Ò ä$‡÷uÀœMÐÝú&>*!§¸¬ÚÒD£‡‹…a‡…—!‰oÂSØÜ^],›ýºàñ÷žGEÆgs¹üŽVºƒ=í°/¸<þñK/-Œ5‘E:÷Ú½°ñY<ž k'ÓÁžv"¦Â'Tkk눈àç™üdÞF¤pyüþ¶ø•Hg3¿ûïÓ³K0¿N ðÒ 4ql”`(ÉK‰„iq1ºWûó7ƒß„§¸w2¿ûï`üPg(cÖÆ%çìïD¥±¾uëlvþfp|J^S02>«¤¼zÎĘó!tw1×R“J„˜Rqâ0W$ "yÚ=þ•ÝÓÕ"9£° ¸rá”^\Ÿûi=ØÃÙüyðÇøä:MÜT¯3*±5éñ(ä_À‹J~æÞqÌÿq-‚¶ÐÀæN_yÖ×/HŒAk`s7¸saߌ1ƒ>/lm;zýþÛR C]•37Þ,Ý*8òï„i£º¶Ò¦ïµ×Û= PÈ.ïÀ™§ÎîŸ^¨ ×h«•=rα´ìI †@ d5p”¤ÏîžÚ¿»-ªPÏ⌘sôá«X2™D&‘þ=xwæ8¬ñŠªºeÛüž½Ixra Vø6"uöº ÿŒíÖ¬@ô>yìŸü"¦´¤‡ËcsxÚê —þÓÅÑ–l½†\©Ÿ¾‰ú&žA§NôrÅÿ˜¿É˜¹æ<Ú^±ãêªàÂÓ׃–o¿. 9\þ.áängvMÅŽ¾þ8vOeu½…±FAqåš=7' u9»{j³n¯Þ%-Ýæ'#-n¨«réö»Cçž@u-kÖÚ 0uTW$få• Ÿ}ôC|¶‰¾*/ØqüƒµÞÝS 4Tå ²º~á¿WMíõüíGäÞ/!N·³Ô½r7Ô{©¯P(ÔÑT¬­c—”WoQ“ÔÑPŠ0ÖSEf3hQöúƒ÷×¼íX»iSh è€Ç@G%¯ˆ™_ÌÔVWh¶è=ž´¬8pæ)zå´4 :•Au¾OÍ*ö¹øîCZqYum]³ª>©¶õ^d««ÈIâZ@루cÍ"#%˜Ì¼e©WlRî>ß'§®¾?ÔyÕì- ¼íHKŠá× ˜Uugo¼}ð*¦°¤ŠYUWWφ/ ~w8Ü‚Ëcsc_´Éæ~ñE! >f€¾†-…Üø7%/­¦$§]V™›D„?Ž÷1ÅeU¯®®èêdšÔoò¾Å[®zõ±G?n_Ç­Ùss¢—ë©ÞtµœYÛ{ÒÞ9ë.zºYŠèˆðl=roïÚѳ'ô¨©eM_uîæ£ˆíÇî#ïVgà´ƒUÕõ÷N/ì×ÍF(Þ{=n¡ÏøE'3‚v¡ÈX‡Î={ø*vd§ã[&À‰Ë¯‡3ÂÑFßÜHãEÈÇ¢Ò*,wѵ{a0nˆsÓΔ3kM;H£R^û­ìâhÂã ®Ü ¾òìØù'RwŠ1hi;_½K0õÀÂ)½6,L£RD–ö†ö¶¯Œ=6uÅ™›"’^lWU’ùå_²åÚáMã' u©¨ªë5aÏÙoÿëœ ˜Uu#çSW‘‹¸·A[]A .ØtùÈ…Ý:›MÙ¥õ[³wíèM‹†˜õX%-)°°÷”åg’Ó ¯­@~7†œslÅŽë÷ÏÀN?vñ¥ºŠ\èíu*ŠÒ|J+j¶,õš>ÚÍóÞS—nóÛqüÁ±Íí,u«âŽmð6"õŸ±Ýv­Éjàîó}‚DÊ–ÈÎ/Ÿ¾ò¬–šüÝS ,Œ5˜Uu;Ž?ÄrSM\rêmDÊÁ cgïN¥#㳇Î8´ðß«®öÆhÝóñë¸gžv´Ò½í3OYAÚÿQÄÌ5ç¹_šòÎ\s>*!ûéÅ¥žn–ððUlÿ)ûo¹vëÄÜÿü‹8çÿ6*!ûâþã‡8@rFŠÊK@F£µuy›€€àÿ€Ãùnq«ÿÈd2lX0¸³!¾\BœîdÛšfàâíIK|Í Õ'z¹h©+P)äY_¼»³¹ºŠœÿÈÃÇ¿K..«ž5¾û§Ž‘ Ÿ‡Í¼I=ñ§H$玆M›BÑ횦?Bt­èÊPô¤WDQ6' uAæ— ­(·DXtFq»¤%ŦŽêj¬§Š/cs¿j6A3ýç @Zª­º>eé›k¾Š=ráÅñK¯®„½¹±ÚêËP®ßBEe]—‘ÛÒ³K& s5ÀIFJüÁ˘KwÞ}¯ö ¾—w'·8‘N·2ro¶Ž@ÀLz”[œT][ª$¯m¢ãd¢Ó˜þäõ‡«iyñ„Ââ%CtÔ,MuGÌš¢¨äg…ei ¦¨ooÖWNú‹UfuQdң²tÐU·r²(ðCbo–2s„ÂgagÀÚ¨›š¢A~Ir« 4mñju,«ÌÍ)L`±kÅ?0’Çߌª’LൕhE¬»‹ùÀüEdæ–"wâ ûïÈJ‹Ý<™#*ÊKyw›·áÒÅÛ!Xˆš¦ølóFÒŽ¼¬¤ïŽÉÏ¢ÎÜx³kÕH‰têÚëü"æ–%^õ¤!½:.™ÖgóဓW_#=Ì3O%ÄégvMAòÏê9d¤Åçm¸„µ?i˜ëÊ7üî¿_0Ùø|ÿÃ]ME·Oæ”xöŸyZUÃ:¹ÝÉN4*eÒ0×wÒ|®^ ›<ÂMBœ.%)-ÅYiqd4(+-޴εó¼úØ€„8}ÙŒ¾S–Ÿ‰LCáÁ³Ï**뮚‰–äÈdÒÂ)½Ž\xqúzÐ „T YNF‚L&“ÉdüE_‡%¿z—¸rV4"ÑÏQ[]áJ@è©“ñÖ(÷N/Äÿì£é˜çÝsùŽë˜$&#%ΠÓ@ZR ¹ ûïh«+ìZ5 ½Ž5ÕäGì´ùp€ÿ£ðcºÕ³8'¯¾VS–=úï …,#%¾såºùp@KãÚçû¤Íݵj¤…±zHv®l´µ zŸü2$qX_Lè`­wpøa³Žì9õøê¡™èñ€Ó;§èh(À„¡.ºšŠcvbíGÄeÝ3oRO$ @?3CõÛO"+*ë0MuK•VÁ'›05 ‚Z5B¤ øÓ ‘@$Ĉ¡®2¨(Êôq·þª¦6ì¿£('vg&k-Ú|µi5~«‘ÍÉdÒ˜Aöù>yòñæ£HÀ-ôꨉDjcÇPèÑÄ´‚/®Î¤e+ÉKá_r"B:½³‘:NŒAûÚÙØå󰮞~w=æqáV^ Dkø­Zàëk+Ç&劼·’3 ¡9Íg+H¤þÝmûw·½x;dââS»}ß;­¥Êü¯t ¸v/ìcjÁáMãçNìJò‹˜MŸ™˜˜Om}…ïÝÅH€ˆÄ‡êJF"uªëÊ.>\“Sô)xx¼‰òëd5ØËc)ŸÏ}| «ù>áXvEaBÆ›ë϶¢˜¥› A®í³ÑT·q%*ùé­W»‘2âÓ_'e½óì4 áó÷g€Fe¨)ä—&£r5Å/VyTôPå‚Ò”_3΀©:ÞŽÎX_J+jÌ ÕaLbŽ‘žêÛð¬™D‚O¶-Ñ««¶-'#ag©û>&£¢²NQ^*,:ø„1°g‡Í‡qc³¶¸¬ºW+¼•D—/œÄ& uY³çæ¥Û!HÂyù.±¤¼zõœͦ# ‹J€a}¾¸b>Wã’¿nµ®%ðo #=(­h4žJÈ€ºzöã×qXyYÉÖ'°u§Ÿƒ†oÓPW%·°ïâáéfÙÒ"`=‹S\VÅæð$ŕխE8gVÕe啹:?›€"™ !;¿¬®ž=´WG¼lO7‹V©ùЫ‹UÓCèñ¹Yý»Û’H¤Ø¤Æ›Ÿ’¯¢(ÓÁB«ÐÕÉ”Jùìã‡æGR‚Ÿ=-¥¤ô´ìb'9h•>îÖ[ŽÜ=ïøöåÃG èÔÔ诅˜‚? Yi‰è9µõlÌÑÎÍÁ„F¥ø\ œ>ƽíÎÓ|¾ · \CUk'9£¨¦®oYŠd°”Œ"Ì]»YÆqÞçûäÒíwc;Ûb)ï奬Mµž¼ŽKÉ,jK$k=YiñÃ7/ñ¬‰ÎÜxS\V-²8zô‹=:¸Ø@=‹söÆ[*…ÜÃÕL Ô5Tåüî¿ßºl˜H¨ƒÖÉÌ-#“IXzƊʺôì/Œþô^ht;oÎ^ÒsJÅÅè"z!äk—SPñÃ&°q-,#§¼f©Ö–×YKdä”ÀÆwDÊt*>ß,2üÁÃç và딕WÖÆkeæ–@pDjÓg@AN òŠ˜ ©&߯ =§TBœ.âÑx¨ññøÂÁA§*ÊI¢ÇC •Važü-ô¹v°ãø|9J‘’øo+{£Kûg,ÙzmÒß%[®-™ÞgÙŒ¾?'ä/!üit°ÐŽJÈ·ÀEóîf £“ö¹ ß¶jö3­úNDl–ÿ£ð'–j5y ÉÉH¬7hÙ6?g¯-³Æ{èj*½ûvä u9L¾BpyüÞ÷xw³6Óºp+$%³hꨮh¥œA§n[6Ü{©¯ã M+fö73T«¬®‹Î¸ýäCܓͭ$íõp6‹JÈž¾òÜÌqÝ Š+wžx˜[øÅ‡¹‘F½ñ0Ü@G™L& ëãÐ4xÚÊYýÏú¿]¿ïvv~ywgó2fÏ•Àœ‚òëǶ1ÿU]=[Ëyñì Ý»:™ …Â#^À ‚ïY›j‘ɤsþoÕ”eÙž÷p7ô©Ô:Îæ{N=Þtð.—Ë—§û\ |–Œ¯@"‘lÌ´"ã³g¯»`g©«©*ß4Á‚/à½ÿx¤$æŽô£KÖ7T¼½/WdÆ¥@w‡‰L<@GÍrãÉ~B¡àCÒ'/¥/Ã/ °Ë -•Ƹˆo¢ü8u$yLï Ò úš¶¡àNà¾ÊÚ’Œüh§·1þ(¢é ® \m‡@ÏNSòJ’¤ÄåÇô^îþÊêÌ2 ‘ÆöÙˆuÙ‹€¸ØqÿÅ2"~&ò2àÞÉôñù%"‡Ú% Pte´¸†lIªªëñq¿jê@]EHSSû±p' s}ü:îòÐ5sÜzÙÑJ¦´¤XV^‡ËÃÿtW×6€ú§EÃ8‡²’ÀŒ9*2cß’üµy÷Ô|%•J¡¶*·ÌßtùØÅ—SGu>Ú]SMžJ!›v_õ_×’€á}ðÞ‰@"‘Ы\RœŸî`‘’`d³¹<¾ ioÑjrU¥eM]ƒ®¦É$1­º¦5§>´ÊyåàL‘x§ ¹ëÝcwÞÏáæ£È-GVíòÏ/bÞ4þ+îÐ !üÞ _müëgݼAá1™Ï£žGÍïB{í]3Z[]aÛ±ûXy EL«F!“)2½‰,wf×”± |Ž]|yìâKyYÉÍ‹‡†F¥GáòÔ»w2=¡ûñK¯æ¬¿(/+¹zάK4Ú?Í“GtY¶ÍOBœ>j€¾¼W«ç—–ÍÝpiÉÖk(:‹Œ”øÀžZ’Ž–Nï£$/µvï-NBœ>°GŸm“¿¬?ßÛ“Íá»ø’ËãKI0Né…ϸ8i˜«´¤Ø’­×f¯kt‰T”—Ùß{ÐiÔ¦³ñ9ùåþ"žGIˆÓgŒé¦ª$³fÏMl¥VYAzßÚÑK¶^[µËŸF¥ôó°Ô&'+ÊK}¸¿qƪso…œö "‘HúÚJ7ŽÍÞ÷³ F¡9{¨chJ%Äé#ú9î?ýtÛÑû +-¾cň–.ëi)m]:lÝÞ[K·ù‰1hÈX—Á ¡«àkÒéTìýÝÏÃfó¯mGï_t’B!÷tµ¸í3¯¯÷>üëöà†qÃg=~éýwÂwx” ÚFumRÐY¸¡4ôb²îÇ\{º«ƒr<@yuÁÛèëh[BLºŽUU^•ßJãèDM<&å9*aV7ª—щ%Yh×L¯QcC!SuÕ¬Zi“Íiüþ£Ó¾X¿Çv± ?I †ª’LjV1_¤”3k±Õ:.“˜+-)†Äþø>&c¨Úg«ÑШt07R-5y2™„¬þ0JÊkD.1¤WG9‰Ëwß9Úê3«êDÖûðèk+Å&å†Çdºâ< âÑ5 Í :VÃ×yûꪼ OÉÌ-mšÌ£H ’‡¹x¤e• êùb9Ÿ/¸x+ÄÒDÓwÇd‘Aµ2F E•’œQÔÒ€Ž¦"|²ŒÅhz¿ðèi)Å%ç%¤ä7Uô!§÷1™XÈYˆIÌesxèñmu…´¬âÊêz̤¢²ïõ€úà-Iôµ•ãžlÉ+bòx|Ì{„L&-žÖ{ñ´ÞåÌÚ’òjeE¼Ä%!N¯M8ÑtuMOK)äæš2fmM- ý”ÿ3ÎCDIxôß ;VŒÈ+¬0ÐQAbÏžÕ£¶,ñÉLµtzŸÙã»S(ä¦*Äî.æŸm­gqr Ê%%ZjòÍúŠ`xwóîÆ¬ª«¬®×ÕTj6=FÙ¹rĆƒË˜µ†:*Mëxõ±÷êc_S×WX!+-!¢7‹}¼¹i›’ŒÇæTײJÊkôµ”PÀî“=ñ#š3±Ç´Ñ¥šjòh±|ÂP¯Þöxû ÅÇç—ðø‚ì¼2UeY©&¦5oý׈¤òp6Çî2‰D:¹Ýûð¦ñ™¹¥âbt-5ùÖ?æVÎê¿`²gv~¹¶ºêÆÜ‰=¦Œè‚f óÍnü´¯;pÙŒ¾¹…*r¨¦Ècæbo”÷n_V^™„8]íǯÄ`TÕ•¢ 9éÍÒ0©ï]ì-‘CdRkO :±SwïÍáfOD$Äde¿:ˆ‘P(ør—[ÛÎŒÔùÀ™§ûN?Y6£/VȬª£·òµ=xúÁ—WVè(ÀásÏË™µ³'4Æ 7¤óɫێÞ÷p6Gô…%•[ŽÜ“§ÿ3¶ˆ‹Ñ=Ý,ŸÅß~9´·=$¦Œ_è#r 1mÔ'Ÿ++wÞ PÈø<"Œêr÷YÔ†wîù.@/´ì’}¾O”¤Qr£6‚4œ±IyèM׿ ìtÎÿíš=·nûÌÃ^\¿²º¾þÊ Ò±Iyxù§Ÿ‡­¬´øþÓOF pÂÛjW¶bßÁØ^IY5¦,½p+X$~&6F,³…BÑßñÊÝÐó7ƒ' ûœL¢¤¼ZANŠJ!k©Éw´Ò ‹NzŸŒ‚ÜDÄea,šeH¯Ž÷^D¯ßwÛÿøôQñ&<%"6kÑÔ^C{w\ºíÚÉ«¼\竳dë5X4µwãÓåi·óÄÃ}¾Oþ]<ʘµ¦ìÇuôt³T’—:|îù„¡.xÿØÖç#<6ÓÎR­~2èTƒÖú÷Æß!üöˆ|Ù#´Z0úW”—RlNùÖÊë_I^ “©rS;iI1üZ,‰D‘[é'þ( |×Fäe%Ñšô·Ôé9F+–'2Râ˜e³#eЩ"iÖ›‚J!75(ÅA“I™½¦Wiq1ѹmz/šÚ81èT#\›žB&“ÐG!ÁÏ„NmT¬5°[\§û´³wç骊_DÖTn-”.R9JŠËë¾_N¥Ð µìá“ZÇÿŠL zã—.›SOÅ=E\^ƒH‚ŸÌºyƒžG-ß~ýñë8'[@›”ûê]âý3‹Zr G?ªž«{wµ®c±_½KTS–ÅÒ¸uu2<Âíì·V½×öp±àñùÏÞ$0«êŽnž€LF`õœ¯Ã’ÇÌ?Ñ«‹•”$ãÎÓ¨=:WRò{u±jeÉix_‡Ýmᅩ±ìµÖÃÙ¬¶ŽýôM|›{aßôf)µDwóƒgŸ_è3´·}eu}€ï‚¶œÕ«‹Õ˜A®„uè·ÞÓÍRNF"-»øÙ›„‰Ã\÷®ÝÆëÆ$æÚôY×ÝÅ\CUnÛ²áJòR;VŒ˜³þ¢m¿õƒzvÐÑP,,©zõ.QJRìÃý-µC§QGôw¼|ç]—Û{u±üýê]’Ƨ9Gx8›“H¤åÛ¯‡F¥ç1_^]A¥·-þê]’÷RßëÞÛYê6°¹Q ÙAaÉl²6Õ€õóŸu¤ßäý}Ü­I죂 é|öÆÛ–z2q˜ë‘ /žGY÷^ëbo”’Y‘:gbPS–ݺtØâ-×mêáj!'#ñê]bFNé¼I=Qšb˜=¡ûù›Á›¼ O1ÐQ¾÷`…ÉÙaø:Š2ßOb IKƒæÃßc¦Î,œ`©(«™_šÒÀ®ÓS·‘oæ+\^F=·8‘ÃmÈ)JÐQk û^ÊÌV–×…OZD¡PÐÀ©C²%HŠË¡ZV%¶ õ Õ"þ?ÜLš*9(drG{ë/LtUmô•½7ä$cmÞ|8 8"õüÍ`:b¢¯¶ué°–ðX™j „Âó{§¯Ýsóæ£ qÆè¶/®ƒ‹"sf×T÷Nf×¼zŸ,%Áø{gE×ð³Iwww·"!¨€ÝÝÝýÚÝÝÝ (¢ %*ÝÝK/,߃㠈¯|úÞßãã³sçΙ;w–9÷”‹þ’ilÍ?gÁu°ÖyskÍáKþщy*Ò‡6Ž›?Éið´ÃÖæú˜i˜¨Ä&çÓÐ÷ôâÒS7Ÿ½Ž M–âbºzî`L™Á²6Q×Qïnmè³ýëÇ\–Œ§™¨0Lîð QAkum®Z·Í`gpß÷ãóÀøVF›’œøÔQö’œá¨(HX©r×xܺlx3–ü!/õ1o¢“‘Žâ¡‹þâr|¤%„ì­´fk¯.ÃÏÇck®É‡ã쮩òÒ¢¾Añ7}",ŒTß{oºïYZQ‹w0ÑSºzpæ±+A©6¦ØÚ®Š‚Dò«[>‰LȽx7˜ŸGOSîØ–‰Zí.Ã\Í|¯,?}#0*!WOSþÒþã‡Ødä–ck;C&ÃnØrÄçíû4¿ ɃÆ.úTYjÙ 7c]¥S7Þ$¥±Xlc]¥½kGv·ÂW–—ˆx¼iËŸ÷±ÙôÆ‚ÉÎëx®Ý{¿‰«Jð”vúZ ûÎøF'æ½x›(%!dm¢>sl×?t¦ëØ– Ï¿ôöic²Ô”$/í›1}´= Ègø TUU`ŸÍÍÍuttz{D-±Éù#çŸZ=gðüIN½=D/••‰}vqq‘––þ9yÿœ}¼(·8,téªÚƤ¿JÍ ÇvM²OOµo £éÀ Í5|"^Ž«ÔL ¢&?%/ÜHÃQYVbÒüïìM% ký!T ¯žš]bÖÛ›/þ EsOûEâ"ò-­ù¥IÙÅ1#œV@bvðM¿M *$ãj3ƒJá‹Ïx]\‘±nÚð >‚9©Z QW0•SV”Ö}Ÿäãt¦xìæÖNCbîø†Ÿ€9^Çþâ,£111ééí9™¼¼¼xy{Znô?‡ÃÑt\[QU_y¬K' â†ûQåêê*))ùsò~d!D f*9!û{{Ä¿ˆ«õŒËOW1YmÑi/£Ó^€š‚IaY “Õž‚—*0ÔaÉÝW;šèu˜‚‡£ ¥…)„ZJ–2O³5«0:«0Ú@½Ÿžš‘¦£z¿äœÐ좘cwgàGDL!4Ò语lQð±¶¡üÁëv-iñv3”¾š¦~L~ö1ùÙà¾ó¥u¤Ú׿ʫs¹Â’ª, A¾[/VÄ“×á)9•ÓFÙ#mø  Ê@üIh(šÏvHG¥‚”¶[Ÿ™s†ÓR²R’Ñh_f6ÑrY2ö’z?IQE2‰ÂÇ#¤$£çl9YG¥ÝOH@bªç^eY>AQ!\U›ì±k¤óZUyc!~q‰""(¥«j;Öu#~öéC ´£(­K¥ð ò‹›h»L´Û¥­líå¸RVB‡Ê/#®ª®` Ò:ü¼Â– ápØ@IV§GWÿ)ÎÝ~ Ü™NÄ¿²"ñ‡¡®`†©[8Ó†ìëÐGNRcŠÇîn„h)Yj)Yvh$ÁÚÀÓÚÀókG DgËÉΖ]×éc4¼ÑðýuTúĦ¿*(Oil®ä€¼ÒD¬ü ž*zãGtЂĆ…žx®ñ¯‚,„@ þE¬ô=€Ãa§|ŠuLÎ "h®;°·G‡øäÐÆq»VD%ˆßR@ü‹h(šËIjÂ'=RrÂÀPÓQTHæg$#âçA.£@ þ]F»¬KÎ “m/`k<¢¥µÑBoðÏIE Ä/)„@ þ]¤u¤?ǃõ3ÓÛ#B D;Èe@|7W†Í^w¥‘«Pljë›—m¿ííýkÏ›SP9cÍ¥W¡I½=@  H!D ß_PÂÅ{!´º¦¯u(¯ª?v%àI@ì¯=oV~ù•aáQY½=°ù°·Fÿ5±Éù½=_É?‡kô_—RÐÛA ñû@ !ø¤¦¶iãÁGA©½=®IÊ(Î)¨,¯ªïí ‹B ñS …@ü?RPR½ûÔó§¯ãz{ ]s÷ļ‚w‡õ7êíüJîœ_ðîÐ@ÃÞø{ˆMÎ7ôϵGá½=ÄÀd± Jªÿ%áׇú'&é¯òµùCA !ñߥŠÖÈáp~¡À¦æVFó»iimkhjù±ÓÕÖ7w³—ÉbwßÅbÿ°5ŒJ!+ɉwhd³9e•umLV—‡Ð[ÍtFÏOAoaté”[Mkìæ¨f:£®þ / £²¦¡óme0øÞ!ˆÿ•5 ‰éE9•½=Ä0mÕE»U_þ⌹…U‰éEÕÈ-¥÷A !ñãí- ?÷ĵ×xKiE­¸é"Ï™G¹»MZ~^È`þîžWT5tÖ1 ³ERæ‹EŒ¸N:œQŒwNË.1Z°ãÄSn 3Ö\7]Ô~™a<èa£ù¢Æ Ç,<ÝMx!ιÛon2˜'b´@ÝaÍ–#>¸*e7j×€Iàü·²VKe­–>Œç>öéëX½ÄLJš/Þtè1›ý…Z“”o?z·Á<1“…jýVï9íËÝÁr趉ËÎ…EeªØ¯’µZ:jÁ©èÄ<ý¹«wßÃû´1YJ¶+ŒýÃ-vÇúsS³J`óao£i٥خ*Zã¤åç æÉY/5^0kÝ2¸IÈp¾°Ñ|Ûºy²–”׊/8wûíÉëo$Í‹›.:uý ¶‹V×4iùy ³EXûÄeçjj¿˜ä¨Ä<Ë¡ÛDŒæ‹™,<ípqÍÔ}óœõW±½Õõ¢Æ –m¿Í}ÈêÝ÷Dä¶¿¨a•žS†mî>õ\ÜtQqmà”CÒKÄMá_¡7á)æž[±{§ã¼þâ½~cÿ‡´1[O=˜·ïúØðøG½=–ÿwè­ Eiuí2•´ü’ÊL«­·Ç…@|ó„ýk÷>ø%¢ô5åÕ”¤äeD{ûšÿ.¨ìñccªAoi{à¹xê¬% ,™V×äœX[ß,*Ì­ ¦Ï«uY!^ˆO-ì?v“Åž3¾¿º²trFñåû¡C¶†>Ø`e¬ôF}#½ƒFWMk¢Õ5}Íú÷1>gÀÄ^Š‘®"‰H¼ïy`ÃX¬ODLVQ­¨Œ–”Ql¨­€5Þ÷àãÑQ—€šº¦úFzÓ§<«ÓV] MÞ»v´ž¦\RFñ¥{!‡@ Àñ«K·Ý`§¿iÑ&‹}òÚë‘óOÞ<2gâpÛÎÓÒÊh«k ßð~÷.:ËÃÉXT˜_€Ÿ›[-†l«¨®_?ßÃXOéc\Îó/¢óýwRÈ$HH+t³‡@€yøx©wŸ}°ñÚQß@×R•ù$™Y×@ï CÖÔ5Õ5Ðé-í¯³ÕµÜU[ßL«k·øLJVÉœñŽ9ØÝ÷ý8~ÉY+cµKûgPȤË÷Cg¯»R[ß¼jö ÞûS@|ÁÕçë*jòtUû uXÑ©/ÞD^ç¡òÍvHO¬C甜°‚²d”üýCmc¶É< ü¼¨Œ‚´|ek)1•ov®k¬|z¼ ,™Ía[é¹´Ó“SÜðÛ”]£§f7Ís/‡Ã>yn £ÉÕfæëi¿êˆ.a³9¿0ü~ÃBÏ ={ûšÿ:H!D þ`äeD-TßÅdÑêšÄDàuX ‘H`²Ø¯B“ÆxX@ÈÇô¦æÖa®fØ!«wß«k ‡Ü_ßÏJkqµ79ÿäúý_ß\ýcÃØqü)£ùüò2W{X¿ÀÓuÒn<c’òÏÜ êo£ps5¦Ï¬š3hÀÄ/ƒ_…&¹õ3\>Ó-.¥àö“÷ýmtŽü3¾ÃáE¥5Þçv4€I^¶k.Ü ÆB‡³|ÇAވǛ0}xä`KS÷Ígn®ž;XQ¶ýU89£ØÕÞÀïê 2©ÝKbP£~‘¸úšL$ØlŽ_P<Ö’™Wž_1cL?"±ã›k“åœèál²|¦& Wªhÿò¶³Ôò¿¾ ;p¸›¹¸ÉÂM‡w©b„Gen_áõÏâ¡x˾3¾¹…•/®®À¢‡¸˜rv|vãñ»cúÀîSÏé- ïs‹‡»™À†…žƒ¦úPFûùïXrfÉ{ïMÚjí 9½…±rç]M™ûë©2Œñ°–±\²ûÔó“œùù¨?FÄÏSP–ÔD¯+®ÈÀ6+hùÕuE@oiè¬Ʀ¿^ª€žªíwžçÇÉ.Š ŠºYT‘Jom¤RxÕÌœ-§¨ÈýxüjcsÍå'«8ÀI’7™7òd÷9À¹ütUYu¶™šÑ…°¬:'»(Lµ]€@ k9L~ö>ÑÛÉb"‰Dùm³‡QTFkmmÓP‘f±Ø¡‘õtS IáÝÊ«êc’òšè u%)=%é ×°ºzLR^yU½¡Ž"¾ø…‘žS–œQL¥’ûYi‹ñqïjimKL/*,©1ÔQÐR•Á–Џ))¯NÊ“•17ø¶rÞ™‚’êøÔ¶6––šŒ‘Žb‡½U´Æ˜¤(ËKpç°è`¸ë䳈˜¬cúq8ŸW1JrâØ]QaþÛÇæiô_ó½w³3ÖÁµA‹Ê,*£íY3 Ó€H$¸ö3¸óôCZv©¹á¼ü!z‘æ–ºŒ‚`¨ÑŸLúMú|bÖÛ›/>ÿ>0ÚZÒò"Ú˜­s¼ŽõäðF:íÚóuŒ¶'ËɦÚíÎ$•@$rØ,>¡oJ(,KÅ´A=5;'‹I­mÍß<>$= ™Ç@½Öb¦ãö1ùYCsMJÞ;#þ¿göpæn¸š•WqíЬÉËÏgåW`«fÂ=Ê*릭ºèò¹p«¡¶Â£³‹ð¿è~‘sÖ_ÅcƵ¹}l´2˜cÆëñòPÞÜZÓ×BÛ|ü2zæÚËøQFªwOÌÇ36›³|ÇãW°M}-ù“œ{~Q¹eÓV]Šˆù\[ÈÎRëÑ™E¸¢{òú›5{îÓ[Úã±×Îsß»vtg9©Y%ÓV]úŸƒ·8Xë<:»H²“f…a?j×ÀþFîŽÆ‹¶ÜÄd(dÒ•3ñ•»èļk.'¤⇠êoôàôBA~lÓføŽ¡®fZª2[úÀhw«û§äTN]y!,*?ÊÆTýÑ™E¸¦4lö1Qaþ«FŽ^pª²¦$Åý®®äç³ðtRF1ðPÉWÌ?Ô†{–Æ.:ƒ—¸¼&öxšµöÊÓ×±ð!.GoÀX7ßcÏšQÐÐÔ2gýÕ»Ï>`G‘HÄÍK†nZ4{<%¤š{n=¹mÒóÀø—Á‰prÛ¤…S\öœö=pþEèƒ ö–ZGËi‹Å枺§Žl‰ÝúݧŸo=êƒwãa}aï4\¯®­oµàÔ›ðlsˆ‹©¦jwú<âw‚BâÏf˜›ù¦C}ãÇzZ'g—VÔŽhQZQ÷28óZ|ñ6AMIÊXW 2rËÀDO©ƒ#ÅìüЬür¬ÛwQ\Fc³9ĵ….ÉÌ+=å/Æ «ˆïê^ž/Vâ%ÄÓ‹°‹ÅÞŠž½Ž‹NÌÃ;TÑ ¨´oäë°ŽîîdL&}ã×Îs¯k G&äî[;ZNZô¦÷»ººˆŸ_P?Wz;p`Øk. Ü4r°åÂ).¸¾•WûÎú¹ˆwÎ+ª€âò¯*„šªÒÜKÈmLV~Q/µ×¼‘ÉbcB ²¦¡•ÁÄ&ðó- þšŸwí/q³ò*àÒ½ŸW1xcq ŠËiH!üãHÈ b±™`¦ãöÛNêýöP)¼cl”•P§5”E¥úµ2z¤•@3½¾ ,pðñ®Ÿö°º®XQZ÷›jÚeÍuöÐ,ÉNrN¨ÊSȼX£ªœ•¿•Ñœ”üûB()§¹LÜ?t€Ùõó˫ê×ïxðÂKmuÙÙãú@ð‡ôÒŠº+fÚ[i“IÄ›>ÿz¼tÛmÌ3ŸV×4mÕECmÅû§HŠ †Gg†E¶ë-‡.¼|{|ëÄYcªh·Ÿ¼gJ?ø.uäü“.vúG7OP’œ8gýÕ!3&ùïÄl/¼8~5ÀÎRëŸÅCkë›] X¼õVϯèI@,‰H¸wr¾µ‰:“Å>zùÕ©ëo6ö>·{*¤ç”-Ývk°£ñ¥}3øx)¯ÃR°ŸÓÎxûÇðòPœ^he¬ÆhcºðòÜí·[úœÜ6ék§M¾ûìúù^næ iE˶ߞ¼â‚¾–¼™ ÜyöANZdÇJ/3•Ʀ–'ŸÝ~ò~ÿY¿í+¼Ú¿!ÎÛ÷iwž¾_;ÏÝHG‘L&€oP<“žs|ž©:›Í9uãÍ‘K¯6xtíÐ,ü¼IÅ®“Ìà8nˆoPüžÓ¾–œ­­o¶0R=´i\EuÃü×f­»<ÐÁP\TšZÆì!‘ˆ~W–Û[i§e—ÎYuļIþ;õ4åw­9m”݈y't±±™}2ÒŽ[|æuXʉm“Ʊ©k o:ôhËI‘¹ñÁì9ãÛLgß:‘‡JÆëXæ9ìðâê <¬`íÞ™yåx`žÓÏÿ9ôxÑ—ÕsóòP.ß]¿ÿ!/¿Øé«/½ O™2ÂnÖ8‡Ä´¢ýçü:d@ô"H!D þl µÔ•¥^'²Ùœ€°d"‘àÜW/§°2("5*1OBT0=§lÙŒöW=láSàÓŠ&flkc}çÉêéÀÇû¶…šÚÆÎÃàç¥À×Rtv·îTß@ue)[sMî>$·žu‰˜ˆ@?kÐéµõÍoß§±Xl×~JòâW†½ Mòp2 þ6ØÑøk—9e„±®ÒÁ /úEÞ{þqÚ(ûËûg„úÆ0ÕWRQø":‹Ÿj¬«=£™Î`²Ø"B|N¶zÜí®öný ;ËwÝ‚¦®¡ô4å ¾ô¿¢RÈÖ:¿aŒ6fKvQl%­€Ía‹J©É›ˆJý€Ì_TX@RCѬ‡Â ËS›èµªòÆQ E3A~q`±Ú²‹c™L†Šœ¡Ÿ(~Tnq|K[“‚”v³µ‰^ ÚÊ6FšŽ %¦¬­lÍá|6;p€STžVTžÚÂh“ÐPnÿvÕÔ•–·[jÊsŠc©>L ¬m(oa45µÔ‰ ¶›môôü5õ¥$YYF_YÖŠ*ÒŠ*Ò°ÕµE9űr’Z¥UY-­2j"Ÿ¿Ø%•™u’¢JRbÊ%X.u®‰"Iêò¦©yïÒòÞq8láw'êkln]9{ÐÁO&Aue)“Á›O^{ƒ)„£Ý­0ÏŒM‹†Üò‰ÿd­JÏ)k¦3<]LT$À­Ÿ!O fŒîÇÇKU’_;ϲzÏ=qQÇgafŸ±žÖaÉ—î…øÅ`Æhc¾è/,Èç{y9æ¦8ÌÕløœãÜVÊîY1sàê9ƒñÍ£›'Üô~Ý>æøÔ6›3ÚÝ [Ñ1ÈâkrÖÎsçŽ|;±mÒM®kï’Êš†ÛÇæŽbFªl6{Öº+§n^Ü;ö­Íím{fç”;O?¼ã²d@qmÏšQëæ{à- &9ãþppø›Þøå`ÔÖ7Þ4‹8°³Ôzš˜7bŽ“ 07LwzžŒyý<ÿ²¼ªþ嵕X‰ +cµ­Ë†ŸsüðEÿ {§j+èkÊ€¤¸÷S/("Õ/(aí<÷ES\@BLðä¶É÷žóp!“Õîpø2â<Öî~†Åj“WY9ñ&¶‹Ébœy´ÑF×Uµ>daE{–)-îÉIi¦æ½ka4UÕö$™Í/gÂÏj±®’ª¢dbz“Å&“ˆžU$Ò²K[ZÛxy(:ê²|¼ÔÓ7mÍ5Øésw3ÓW~ô"jÞÆk‡ÿ=D0êè1Iù^-¨rKk{2*Ç>º—î…$¥`–•WQ^U?ÖÓZã塬˜5°ç a‡G2‰(/#Vñ©>±®‘HØ}ê¹¾–<–­‡r(d’œ”H÷å Ô•¥0mc¨«¬»›œß¥@aA>1þòÊ:îFey ,Äàkà  ŠrâY_:Âðó`Ú †©¾rtbÞúžxPæýQöé\ïRøù¨ý¬´ñ[`k®A"“¸²…w&(" ÜŒñ£øù¨æ*ÑIùØ÷k7Ħm§®¾hËMY1Ü_72!·¡©ÅÃÙ—ζz)™%©Y%²R"8Î+| WIN|²W_ÌÃÑë …øãæjvôò+ŸW1ÁïÓ–LwCmEY1¿ ) ! 1Aü÷][]V€ŸÇ70¾©¹7Ðeä–…GgZ›´ÐKK ÷£%!­°ÃŠ&7RâBò2¢ï¢3ñ¼¦pñnp767T¹ïûñ¾ïGn…ðòýPàZ}ÄŒ–Eß™EWCŽ—‡òäUÌÞµ£É¤ï[­:ÀtÙöÛ~A ïc³]ìô ‚¨0¿­™Æ‹· ¼<‰èélòM!ò2¢«ç þŽ=ò1_G/¢~F!S}å ˆ´Äô¢Îù°¹ÒT‘ŽJÌ+¯ªÇ]a/ÜùâHˆ ’HDîú"9•¯zü–†c¢§L ½ˆB a/™ò¼…Ѥ,«//¥Íd2²‚mt¿ðÓ&ZN˜™®‡Äfp€_ú‹F¦ðÞþÑ|ºsð`‹MEe5 ùåºÞ÷›œánplrAYe½…QMkÄŸ,ºr‡7_½ûžõ°í}Ì4VÍ4r°å×äD'æ]¸—RP^UOoaTÑ¥%„{:)q!>^*w­ÚwÑYï'¥—WÕ·2ÚhuÍò_ºý òvVÂÓ‹Îß~‹ý>7Ó[«i¢:À×i/ÖÂøä“•_ÑLgèÏíЭ±Ûõ¾¬ürè?vo‡vÐØÜŠIX·'“³n߃’òZŸóKðø@,^cݾëöu,wñé»AƒNk¾ˆÿBˆ@üñØ[i‹‰œ¼öº±¹_èìh|ñ^•<ÆÃ_¤à]9kÐöãON=´wíhm5™¸”‚ù›®³Ùœ}ëÚ×ù$Å­ŒÕ"b²œ1j°ePDÚÚ½÷[[»+´5ct¿'Ÿ^pjߺ1B‚¼{ÏøÞ~ò¾}lÁdçC^î;ë'*Ì?r%›Ã¹ö0ìâ½kuüé®(+N¥C>¤¿O‘–øZÍtnÄD–ÍpÛ{Æwô‚S{ÖŒÒR•©o¤¿Íöy{fç”ÎjnÔ”¤Œt¿Œjln]¿ÀŸÆ°ƒ®?··Ô’øJ6‚ˆ˜¬³·Þ.Ÿéf¤£H«o¾ò0 lLÕ ¿Ž“­Þ}ßH5%©ù“œeÅË«ê‚"Ò2r˶.Þó[¼m¹Wà»Ý#æž8¿gš©É™%_Fdia¤ 3Ç:¬ßÿpô‚S‡68tñå¹Ûo¹%‰·~†/Þ&l8ðpö¸þ1Ùëö=覰ä×ÐQ—?Ôæö“÷sÖ_]7ßCUQ²º¶1ôcFxtæ¡ã¾WâÇp¶œ"*$#+¡ŽmªÈ= ÜÇd1Jª²´•­{.'.ýH‰©`*†‹Õ4náʲƒ¶1[Kª2µ”>¯k0Ym}GºÛÍg²Çïά©/-*OÅ4@ ½A¯Þ_jc¶&焚ë€äœP”V–3 aŒëÆËOW3Úè­ŒæÀ¨!±÷ÌÆ°™A"’À@ÃANJSWÕSó'î¾2 Ê’Mµxö[lm0ôЭI`g2zÐW²ƒ6Òiµ`màÙÏl,v]XÁÀÅcÎG¦ø>|³ƺnÒS³6‡•”qéØl$g‡‘@4Òp€úOµ…ù%¸O$Èßž¤®éÿ¢ð:VsUH>Æç8OØ/$À;s¬ƒ–ª •¼ï¬ž‰ÆzZ»Øé_¸|êÆ›Y뮼N|pj@àã¥ú^^ò1ýÔõÀÛOß?|å{y¹s_=ì'KÍ}RÐÇL°l"Ìï÷üÇyö&nÄÜÊ ÓFÙ«*JRȤջïq–Nw1Èâì­ ³·‚F-8µtºëÑÍ:Ëñö½ð´š¢ä´QöÊ 2iÅλß;‡ƒçŒ¹ò læÚËúZò“½ú*ÈŠ‘ID¼Êk7ø‡$ ™yT^FtƘ~ªŠ’T yÃG•?W‡H$ˆ óß9>¯C{÷z8f—;·{*æ(„#.*ðµD;_#,*óÜí·£[rgY#ØÝáN~X4àß/Ò þ@ !ñÇC&=œŒoúDðóQûZ´»3 v4ºp7¸¥µm¸Û‰17,ôlh¢½Ðoôn¬ELDàñÙEŽ}>gb8µc²çŒ£köÜ_³ç>v@ØuòÙ×°qÑäÌoÿh‹![@QV,ôÁ×I¾Ö_H€÷嵕—ÃOÎ&W~޳ç磮œ=pÏi_LÎícóƵéœÜ¼3›— mhj9}#ÐçU @ÀÖ µ8|«ÖÙ0W³'ŸÀ€O†ÊÁŽF>j¦3†¹~Õ_TBLðÙ›¸ëñJ$qÝ|<ÞïÆáÙ3×^Þ{Æwï_|˜oæ†EüBt¹êCÐ[?…êÕ5~G4NIefyM˜é èR88-­MŸ…áj® ¥=¬ÿ2 yôÔúbEíé4*¿¹î €÷—9À‰Me®;°®±‹Ù3ÒrÂt<5y“%c/< 9Ž%8e²Q7Jª²¦Ù2âª2Ÿ¬pmÌ‘D¥ð2ÚZp•¬'ðóSȼmÌ–À¨ë`¡7Xˆ_¼›Ê:*}øD›èµñ™oÜíæ@Jnh(šc3ÐÒÖD±ƒê§3­Œ&è XìÏoØl6'#·LX«:»ï¬_Sskä“͘}®?~Ç­€¤˜àúËf¸œrèÑ‹¨Øä<5”ƒµŽƒµÎÛ÷NNã÷í<ù̹¯žÆ§T¢^úqåÄ¡Sn0&ó;t€íǞɤ>›q-eçÉg-_zf*ɉïZ5rÅÌö£w»°iñÐÎ*ͶcOxy(|6c‰X`ËŸî}æ;$ÏÌ+ªjimÃ"7~,-!ôÁûܹfÑ–›ß¼œ'žÀ{ïd¥D°–ƒ^þ¤B¨¡,éØG÷k–Fì9Éf³;ªŠ’?ù[ÍhcÎYUDˆïÄ—éy°ï†¨0ÿ׿bÐÅwãÇ׿¤"‡6;ÄFFR/F4d€YÀÍÕ ÓÍá‹_*ùð¦ñËf¸%¤•WÖéjÈë)ao8VÆj©¯wGÄdÑê›ûYi«(H–Ö8XkKе“ì\5bæX™ö¥q^Ê£3 S2K¢óÔ•¥lLÕ©òÓ‹K;WÄÂ17T‰óÛžV˜’Y"ÈÏc¨£¨­Ö±˜ÕîÕ£†¹šÇ§HK{8›@_sMßËË;dI=ºy|eu~,/õä¶I+g LÊ(.*¥‰ñë)qW ºwrA‡'%Î깃mÍ5øyðf*oﮫo¤;™ÐeÕìANƆ:Š ­&[q80"µ ¸Z\TÀÚD ´ÃP{ymeBZazNYUM£´„¥±–Å¡3Êò/¯­ä>gÚ(û¡ÌâS ²ò+È$’¦ª´µ‰:~»©òícóþY<ôC\/ÕÃÙ¤³õOWC.á厈˜ìòªº¾Zš*ÒåUõúZòxâïÕs{:›ê´ÏÕâiœlu-T;ȸs|Þ–¥ÃR³JÊ*ë%ÄÌ T#Ð洛Ñ{'.ã ­¾ËŠñ]!·±í…Ì´¿°ö´0šBbîÆg¾¦Õ—q øB:•ú¹²?¯(öÅb€˜¬º¢YvQLVaT#–’Ší5ÑrÁ‘S™9ìPiUÖ«÷—0Õ+-/"=ÿƒŽŠ D§¾ø˜ü¬¸2³ÙÒõé¿‘Hòì·Ð'èp+£ùÅ»³þï/Ø õ°_€'í‰H6Óq ‹»_×X™SG"’1ÿRc-gîK#IO„}`²˜ÐÌX}éÑÙEXbç‡/"Ë«ê±Ô#[XE$p׆šÚ&îÜ‘c|¼Tç¾z¡‘MôÖ»úÛè ðb‰%…ùÌ UÞ¼KIÍ*Á•Lnt5ä¤%„B“Ë*ë0¨ŠÖ¸vïýž_NnQ/$”TsÇéqLBLÐÖ\#-»´©¹µ³B˜[XÅÇCúä™WTUEkÀ"ä¿F^QÕ¦Cw®l•=yý |R}mÌ’ŠZUEI\LÍ*Á“mv9ã5(ˈ‹Ès·_yº:¯4‘@ ªÉ›HˆÈ7Ñë0…í»°Ðœ]Ãæ°2±±‰ Ë*ÉtüêÊIjNõÜs÷Õ,ÙiQEªŽŠM`Ô ÿˆó -®¢ ¥C¥ðE¥ø~©šöˆ>†Ãå$5ßFÝJË{Çf³"½é­ ãnùZK½Áaq÷ .#€—*D"ÉPÃÛËCá«Åjã6¶1Ûµ,Zò÷ó:<ÅvÄΩ#íjj›^xI!“pw'[ÝØäüYk¯ÌŸäTR^»ï¬wö¯#—^=};g¼£º²TV^ùÉëodÅ, U@Ëq­×@‹Aýx¨äëß54µ `ŠupÃX—‰úÙ³a§±ž½…“”ÿÐ/òÙ¥e˜‡çüINÛŽ=qt`ÞD'6‡sèÂË ŽÝãÔG÷የ¹®Nn›‘S¶ó䳯æVÜosùŽ;9•SGÚ)ȊŧÜyúÁXW©Ëõ5'[Ý'±ó6^?´OjVÉÎÏšéŒîB*…¼çôóØäüánæ±ÉùgnÉH Ïè„íêk®•¹tÛí¡LãR vœxÚÃ˹é1{ý•©#í²ó+wzF«kúÞøö¬š3èÂÝàÕ{îåW»ØéññRÓsÊž½Žóh>o¢ÖÇT_942cöº+}Ì4$Å…†¹š9öÑõt6yú:ÖcÆ‘IÃûÊI‹”T„&“HDnߜ®ßsÚWŸ§°´OÓÏJÛÅN_BLpýÏ Zß¾|†›†Št­1,2#42#úÙVÐÕsëgø*4ÉsÆ‘±ž6%ÕÏ¿PU”üÈÄ¿Røc(¯ÎÍ-‰€ÖÓXO€¼ÒÄïUsŠã°" f:_$*«ÎÉ+MW›.VS ·8þB# GŸ·‡môIO+i`¬Ùnjc² ÄP–ÕÇB~^øè*²†óGÂRÆe°](„Læ7L4*²†S=÷ÔÔ•\y¾¦¢&?1;x ›É}jnä$5å$5K«²³Þòò€¦¢6$àãi·AÑ‚|bøQxùD¼ÃoÆ÷òòeÛo/Ýv´Õd/íŸaªßžçfûr¯‚âê‡/¢ž½‰ãç£Îï(#)¼ñà#"‘ƒúÞ÷ý8cÍ%¬³©úÙ]S1ÛÎôÑýŽ] 8qí5ðñRWδþS.S'[½ ;kn¾±j÷=Ì]\H€×ÓÅÏײeé°VóÌÍÀE[n òj³sÕHË%dr´ “Û'Óꛯ= ¿ö(\Xoí<÷²Êº‡/¢°½#[.üçÆÄeç°MW{¬>agNï˜R×@¿|?ôòýP!¾ =óŠª|º9µ’¼øõcüsÃ/(D"Ú[jÝ<:×E¯œ5qÙ¹ãWŽ_ Ø»vôÛ÷ié9eøá<<”ÎxnžPYÓpûÉûÛOÞ ð®œ=¨±©åÒýP¼•JîpVB–Jùl‹¦PHÜ-B¼‘O6/øçÆÙ[Aǯ™D´1Óà.¶thÓ¸sO\¼rñ^ÝýàôÂ͇½ÏÞ ò jŸ] ¹ÍK†µŸ—B†®jóðPóFÁ‚9›[·{‚w˜;ÁÑÅNÖ/ð–úç°÷¬uW°]rÒ¢3ÇôÃ{>:»hêÊ ¾ñþ!I²R"Û–{™ê+»LÜÕlDô.H!D ˆ¿,ÄŸôsKшÿC0WFø”%‚œøŒïv»ŠM"‘„»Db4~N‡—ùúI¥ðk:F¥¾ÀkÇ›|:ÑÇäg¡±÷ÌÆi«XóóŠ–Ve…ÆÞÃv©Èr€ÓÔRÇ=†”œ°¶¶/B¿ùE±Ùű5u% f ž‡ÞÚŸñÚ\w•Â+."/'¡YQ“O&QˆÝ– ´Ôü,ô½µ‘ÞÚ&ÚŸ}\ñä¢ÕµÅÜ aema{‡^J1jª¯œðrGV~…¨0ÏI~ž§Ö7Ò+ªÔ%I$"‡ÃY:Ý{¹73P‰õÝVQ]_UÓ('-"&"€¸}…׿¥Ãr +ID¢¢œX%¡¿N’ÿNz #¿¸Z€ŸGAFŒ;_@سfÔ®U# Jª•äıŸ ¦”s¸{÷ÈH ¿¾¹º¦¶©¶¾YMI’@ °XìýëÇ`{Øé§î).£Õ7ÒdÅpWÌÎÈˈÝYÛAΑ¾Íè5ÐÂÓÅ4;¿BIN¼C¥\ é÷ÞÿTÖ445·bž³ÆõçŽ>(ùpÓ´¹‘|ymem}s5­QMI ‹3ßñÉ+>ølîÂppÃØ+Gpו:À¬)å·¦‚¬Ø“ KX,v~q5‡ÃQëOhe¬VðîP^Q•‚å›^Êþõcö¯SZQ[×@—“Å«ƒ€¶Bsê¹Îq‰;VxmXà‰]Y^¢5ãB78s¬Ã̱µõÍ¥µâ¢‚ÂFùyYÄhc–VÔávÝæÔs¿§ˆ.¢{Bˆ@ !ò2¢œÜ+½= įG^J›—*ÐÂhzýáJfaT]ceM] œÙ1YmIÙo@KÉ’[·…OÂ>\Ê,øXÛXñ½Âq,ôÜ£R_`Ÿ%DðÊòD©¦¾Ô'øH‡þö&£å¥´@]Á4=ÿC~YÒá[Sx¨|…åi‚#ùyE$E«j‹J*3÷]KžEo;H«k¬ð~{ÈïÝ9 ³¥¤2Œ4úw_;ÞLÇÍ7ü4›Í‘l þÙ¸!ÿ©ü`-_Eî³ßuù'WþËú„¿ÍOé^:#,ȇ+NXQî½ÒÂ]c “ˆÝóñR»q' ÜþçÝZ茸¨ž †D"vXØRS±Ÿ—Ó%2©›ë’ 3’IDàØÙ¶†#*ÌWÎ  ܳÑAtuàS¦HÄ.Îq9_‹›“•û²`F—Š@èòìÝÀ}½¡RÈÜ^¾Hü?-#ñÇÀÇ#8É}§¨ 4›ÃÎ-Žol¦y9­ÄÔ- ¹ýÕŠJáÃÿ*…ˆ"™L€´¼w˜Œ»ü ?¯ðÄÁÛE¥ØlVNq\½v„Ój9)M “Ú…ó`ÂÉŸm ˜|Â'ùj &ÒâíF3n;¤©Ž«µ'wĈ ”—ãJ~‹°ÍQ.ëÔäM ¼&·¨<ÍBwV7Œt^+$ÐþN)."O  "…̃_µ„ˆ‚¶²5ƒAÏ+M,©Ì$“(ÖC†;®à0÷að‰bE&@KÙŠçsMv5yc̺˜U7r€“U òRZÜâÏYø“ÐR²\3õ^um1›Ã’W%ˆÖúC˜,®Þ¬r¯ÙJù¤ö¸XMëg:ŽD"cás˜¿(…ÌËmÃÑV¶^;õ~um1ØRb*DÑJßã áÓ0¹„€ƒÙ8[£áD‰;Û r’š5ùÀå/ ¼T‘Îk½WU×Ñ[Å„dqÕCX@rÞÈ“´†²&z­´˜*•ÂËÎëéT®3ª+˜n˜ö¨¦¾„Éj“S"¸}®?>N ™gæ°CôÖ†êÚ"2™GBDž;¿¨‰–‹¾š=@$w*D!/¥Ÿù¾Ì‰ ü¼"*rF¹%ñiyïXŸ‹ËÓ°PL=Õï+$óKPS’ª þþSÿ}èjÈ }ÝøëA¿#@üaˆdÜþD"‰Jüü:K ;ؾpmª…Ñ”–÷ Ôí;ôé¡pb'áйœCsK]rvH‰©ÈIjvØK$’¤º º’jOeLBçžD"IRT©C ÷8€GHQ¦ë¬¼˜9±à|Lö2‰ª¯nßa¯‰¶KnI| £)§8VKÉ ’ñŠÚÎðÛ9ùe!8ÄÏú`CoèMË(@ ÿRsÙ¬6èÊ_ôדþ ;‘©¶ËO ûMäÅV×€®j^ª@‡½ºƒ1¿Ðäìv=Sµ•­eÄÕ¾ïLñÿ²"ñ_ÁHÓIBD‘Bæ‘“ÔøWOTSW")ª(&$k¥ïÙÛÝS*hù"Š|"ýÍ'vÞK¥ðºÛÍIóÇÌ•,6SLXN_ÜÕfFo@ ~ ¤"ñ_L¢(Ëêÿ† uX °´·/÷û°5ò²5òꦃµÁkƒ!Øg‘<}ÈþÞ2@üË(øÅbß~òþ}lv—{ÙlN7{@ ?RÄÿ Õµ—ÛsÚ·›½»O=ÿÍ£ |—:}õ¥¤ŒâÞž@ ˆ_Rˆÿ4Åe´€°äV³·òÿËÝg®> {žòûO‘[‘Êá|wMðàc|NLRþï¿F@ ½ Rˆÿ4§oºM>˜×ÛùÿeÃBÏ«gMnÛ §>ðÈyÂ~Z]óo8×ð9'Æ/9ûû¯@ü0LûèåW㟙¶êbdBnoç#§ rÆšK¯B“z{ DïƒBèUEÉ©#í$Å{k¿ÇBˆ@ þ8f¯»²|ÇèļȄܾ‘½5ŒkÂÕú­ööîíùø>² *®< ‹ÌüWÏÒÐÔb8p“×ܽ}¹Dw ,£Ä߀·ô¿È¤ôb%yqÇ>ºËf¸QÈ$‹ÊÜ{Æwˆ‹éÜ ŽXÏ*Zã¼×Ìô•§Ž²_½û^BZ!l>â-)&H¥¯˜I"€Éb»üêíû´üâj}-ùÑîV#[â§ÛÎ/¯¨êÐÆqköÜžÒÇLãÊ™­ æø%gÇzZv4ÚwÖïuXЍ0¿×@óyðÛ˜¬[>¾ñiÙ¥|¼Tm…µóÜu5ä~øÂóŠªN\{—RPMk4ÒQîfÎ=NŒ[>/ƒÒŠ$ÅÍ TVÎ('-Šï´ü¼³­ÞXOëƒ^>}ËÏKíßGwÃO~>*ÖÁ?$éÔõ7;VŽ0ÑS€Àw©Ç®œÝ5¥°´æôÀ¸”m…•³™~®²Ífs.Ýy[XR#'-"*Ìd2éži|¼ÔÃke0_ xñ6±¸Œ¦£.;w‚£‡³ÉÇøœÃý?ÄfÀìõW©’’œø c`Û±'õô­Ë†¯Üy742ÃÅNÿä¶IÕ´Æ™k/q19Ö—|öVHÒ¥}3ÄEÛ+ªÑ[/¼|UR^«¯%¿tºk3[>ÏÞÄÑêš›ZÆ->Î}õæŒwäp8£ž¶0T]¿À—ùøeôÕ‡a7ŽÕV“€§¯c/ß½~xöåû¡—î…HI{Ÿ[,"ÄÕ´Æ}gý"rëéf*ó&:Y©ârJ+j÷œöý—ÓØÜÒÇLcõœÁ?ó5@ þƒÔ7Òoz¿³4Rýà³™H$°XìßpÒìüŠ‹÷B& ëc¤£ˆ7fä–åUåVõö”|•šÚ¦C_°Ów²Õûµ’O]ÃæpOðµM-)™%MÍ­½=Dw !ñdzlûíóNæTºö3€5{î÷»·É3}åÄ´¢¥Ûneä–aWï¾÷øe´½•v[3=§¬ª¦ ЫӲK³ *ˆD45·:ŒÙ³fï}2™4À^?=§lÔ‚Sk÷>ÀÏü!ýÙ븱‹Îœ½Äápߥ@+£ÍÛ?úÞóÖöŸ¸úZT˜?:)oþ¦ë[ŽøàÎÝpuƚ˥•u¶æšrÒ¢7¼ß™ylÉ-¬ü± ÷I2óØröV(ʉ¿ NµàÔôÕ—ð,{ì¢3“–ŸˆÍÖT•®o ¹äoà¶)<êó’°·ôÃQ–C·¿ /-š_\½ëä3×Éð¸ÊøÔ‚goâr *°ÍÔ¬’§¯c^xÙoôžð¨L1»Ï>ØÞ©ÖSV^˜³þ*ô1ÓˆNÌ»÷ücdBnye]—¦¾ KÏ®Û÷@NZd˜«Ycsëâ­· ™ÎHË.mhj€Ìܲ´ìÒ¢2ÖÿMxŠo`ü°Ùǯ= çp8A©@«o~Û!kXT¦Ï«Z]¶YYÓ`2xóæÃÞ´º&ue© ˆT»Q»’2Š«kÓ²K™L£™–]š–]ZSÛ,6çÑ‹¨Àw_OÆ$ç?{WXRƒm&¤= ˆ]·ïÁòwZZÛ"ãsjë›±Y2uß|öVŠ‚D3 ÿàD»‘»¾ˆÂŽ¢Õ5Ù ßqÓ'ÂÆT}€AxTæ‘K¯þÍ?‘¿“„¬ ‡oöÝôÛÿàç¥ýK¤åE<|³Ï/ü4›ÓºÂf³ŽÞ™öÏY×÷I>PTžºùÜÀ‡ÖÔ—ööüÿ’_\Íd±mÍ5±ßml-ïß&&9ïßÐÜ;VŒÈ ;¸|¦[oOÉW)(©Þ}êùÓ×q¿\òáKþν覃œ´hYäÑDÿ½=Dw !ñgò1ýØ•€¹ÏìœB `ËŸíÇŸ\º2o¢“?ωm‡Í>¾hóÍW7V…|L¿ö(|úhûþ6:ó|ëÆƒvŸz~õାš¸Ìýç^DÄdÝ=1¬§5°Xl—‰û]|9}´=nÆ)*£Õ7¶Dxÿci¤Š)ŸÞþÑC\Lcžoãç£—Ñ Ü6¾øríjÁ©G/¢ÞÞ]'ñ¥ÃjzNY­1úùVCmîÉïž-G¼3óÊÏ™‹[Ì=§ŸóñP–Ls]2ÍUÞf¹oœßöøž½õöêÁYSGÚµ1Y˜izÉÖ[´ú樧[°{½kÕHu‡5Ë·ßâbÊC%?{WXZƒÁØlNyUÝœ÷¿Ì›È«¯Þ·¯}$å„Ú™Œ"ᇥÇÜ©oì¸.ÃCpë3ó'Ç™úœ­¦òR¾Ö-);¸´*TåŒ@VR“H 6ÒiïyÚ/úú‚-¾ðòP~FH]3éwISs+‘Hèì×Ð"‘ ¢ Ñå®úF:•ÂCíîm³•Ád³Ùß<Ë¿Mm}3æÍÑ6›SYÓ .*€ý¾}/Ò›š[›[RâBß+­Éª©m’Â:ÀápÊ«êÅE¨òÏÈéÉ´ þ&…ø³9z9v¬«7£Ü-ày`<¶9t€Ùp7ó€°ä›>ó7]—:°~l÷2]ye¬«„½¬‰DôhÁb±_¼MäîvfçÌ ûi¤£øðÌBLýSót1mln-.o·nñ°æö tëgyE?âhtç釒òÚÅSàžKb";VŽ€‹wƒ±–ƒç_ðòPÿ3_;9ØÒ±nLR>wFMyѧ—Љ`»n¾;Üþ±›³o[î…iƒ0s¬™DLËn7e¤d–€«½¶),Èçd«“”ßCW~q5¾WAV¬'—åÀLCm…“ß l6çòýP é9ãûc-ò6ËÅLªÚ¯Âý;+ÈBˆ@üÙ¤e—òóQ]xÉÝH"ñ·m8¾uâë°äi«.²Xì[Gçâe]RVYW×@oc²Öíû쇆ù+ân“ƒúu>\NZ”{aRNJ0Dî1gæ•WTÕ×7¶@KkÛ\xrf1`¦N{+mHÏ)F3+¿ÂT_¹C>˜~VÚA©¹åŸBÚ$DùyðV&êø% UEIü3…L’ª©mÄ6e$…àÍ»”ƒ,€ÍædçWÈˈvéÐ%#)<ÌÕìI@¬õðí+fånÕýRz÷“ß …¥5­ ¦¹ ¾pð é0L7ÎÊ+çþ UÖ4@NA¥©úSyÑÅ$å-ž6ÀÁZç;Oø_§¾±ª•Ñ zƒœ­¦ü¤4\ë”ÖP²ÀÛù¨‚$âïxIhl®É-I]ÕϹ|õÔì>$=¥·6fDê©Ùý†aüYŒõ´ŽNÌ{ø"JWCÎÞRK€Ÿ‡D"2™lZ]Sõ§ß" Z]S}#½‰ÞÃV[ßL«krŸv8-»t°>¼<”×^˜w2Îo›±®ÖgÑ–›§oÚYj-ž:€V×tÓ'bÎú«‘O·Lò²K)ð J°0R5ÖU$ ò2¢˜Ì†¦–º:v8“Åî?vïûØl¯K¦¹VÖ4Ü~ò~ÊŠ ™¹åÛWxa}ªk Kk,‡lâ[;Ï=5«ôî³®“fí%ÿjß×Qƒ­¢so?y¯£.ç`­ :ê²øÞÛOßï?ç7ÜÍ|²WßËBw|&."°bÖÀöcœ’—ݼd¨’œDjVÉ‘KþCfË|»WZB¸™FEuýÕ‡a,{Üèg¥ÝåÊ«ê+«°Ï¹eÃç7ÐVxtf!ø%¼}ŸæálòÍ«(­¨·ø¬[?ƒC›ÆIˆ †Eeœ»ýv伓±¾Û°‡ËÜ ×¼ý£w¯e¤£˜šUzánpKk[grAIõ¤åçõ7:²y‚¸ˆ@ÈÇôów‚KÊk£žnÁL…µõ͵õÍCgKÉ*™0´ Ïñ«¯Ç,<ýñÉfî8pÄ_Rˆ?›’r“ÉþÎÝhe¬æØGßT’··Ò~œÈC%»9~K`-TÕ4tÙÇL£?—ÌB¡€Ín7eæ•O\z.2!WDˆ¯K/šžSTJ©/…òóP)äjZ#”VÔ±XìÎ9˜>\EkøšdA~2‰ØLÿ»™DÄ—”¬uÔ”¤®<c0˜ý¬µ½ýc2rËv¯õµcïŸZ°÷ŒïÉko&-?¿zÏý‹{§»;ÿÌÌtIai `VЛ’ŠZÈ.¨lü2‚½¥–˜GLDà£Ïæ Ý}öáá‹(SõÛÇæ©+Ký†±ý4·´{ØòñtáoÆdµUÒò)dqay"ñ 2‹ÍäpØd•ÃaU¤óó Iˆ|N "/¥=fÀ†¯”ÉbTÒ Ú˜­Â‚RÂ’DBoíMôºêºb1!!®kêJXl¦¤¨"ëð”Üp‡ Šfx£†‚‰Hf±™É9¡H!ì̺ù¡‘_D9Ûêí_?æ{/*£E=Û¢,/zšòÓV]¼x7äøÖ‰œQ|îöÛ~VÚwÖbºÙú¯ÃS`ת‘ü"ý‚F ¶\0ÙùkÂ/ßy›½dšë±-°–ÅS˜yl9xáåüIN¸;@^QÕˆA÷N.ÀÎÂb±øE¾ Oø­‡Ô÷²|¦[\JÁí'ïûÛèùg|Ç©(­ñ>·x°£1Lò²ÕpXsán0®ú__‰ëÉÀC%o:ôøuXÊ„a}œûê9÷Õ{ö&®­utó„& 4¹¥µm÷ꑘƒŒ×@‹(-!œðræ†õÁ"2óÊu5ä8ÎóÀxç¾ú«ç €Aý¾Ò)/#–ä¿S_K—S\F{Ÿ[XÉí0’_\ùd³š’é(MXzöâÝ`¤þÅ …ø³Q+,©‰x¼©›>/ƒ_'šê+Ç¥¬ØqçúáÙÝ €¾š>ç—üòÑzL?RZQûâê ̦T×@5^ðc¢d¥D ¼²@@}#ÑÆÄža2’¡¼ª¾Ã˜©J]é«êG]Ébc+ß?@tR^~q•»£ñ¿ÈK÷CÕ•¥Nl›´`ÒW_ž¨òæ%ÃÖÍ÷¸ñøÝŠwGÎ?™°KMéû´#ìª[+f·ìF î ‘@ ?`¿U”€ù“œ°W“.Q»vhÖ¡Mãöœ~~ø¢ÿð9Ç^îø± ÿ¯qÞ{ivQ»ƒß«÷_½¿ho:fH¿ÅPVãt° <…Íf‰H6Óqóì·˜GÚ˜-[Î f±™Ó‡ìŒ¼ž_–D ·Ï}ùÍ3V׿?“š÷ŽÉjÿ2ˆ J{ô[d¬ù9p^IÂã ƒå5í¥ðTå' Úέæ—&> 9^U[‚üâmUWhWÿòJÛ}Ñ¥?g€¤Rø¤Ä”˪sð½ˆ_Èù=Ó0m>YøqŸˆ—Á‰,{ÞD'ÜRÇÇKâbÚsáW†‰„‹<ñIá)#úî;ë‡9“cü|T\ĆñÀ/[ºú,™æŠiƒ ,/¡§)ŸÃ•çŒ[}eÀƒ ~ìÉuãñ;Ç>ºß óã†D"r?ìÀDOéñËèâ2š®†@‘ŽLÈML/âNÛ2‰ˆkƒ¦úÊÏã‹ËiÜ á™SðÇРþ†ð-¯ÄŸRˆ?u¹”Ì’„´ÂÏ-œ¦æÖy¯Éˈß[ç>ýÈ ïwSFÚa9W€L"žˆd$…E„ø¢óZ̺/öœ‚Ê̼ò‘ƒ-qß©°§­&þ!I.Ÿ®ž½ŽKcUàå¡(ɉ'¤–VÔr‡¨=G&±ç:FIEmai’œ8¶é’_ú}Þþ1Ü:6WXÑÆìá#ŸJ!ÏëP×@_¹ëìIŒ½*Ñê›%¾UQR\ò‹«ñ–¦æÖ¤ô"|SEA‚L"FÄdmH2‰ûkD"A\T  äóû‹ÅŽNÌëÁ­‘€°ÈÌnÂöa‹ Ú8.9£Ø?$©¦¶©{gfÄ×àpX_–tîñ« x©­mt›•êW\™±tÜ%Èf³1ïÐÇAê+€ÃawŸü#(êFbv0‘@”Q$I•´üÚÆŠ{¯v*Éè‰ É@~iÒÙG‹8À"Èæ°óJÒò#¬ô?«Wž®Á:@csÍ ¿M¦?¢y ¤2„$1ÅS«j‹m-T ooOó_·'!öóRߨîð™•_Zj2?,<#·LNZ´ƒö„ÊÌýóF"¹½CÛ‡ñÉï´W¦Fbz‡ÃÁ½ës *½Œ*,©©®mÄ’~1™?^ác˜›¹cÝ›>oß§Í™à8o¢Ów啉JÌó Š/­¨«­oÆâB™ŸâÏ÷­=iÙy3-ÃÝÌNvî¾ÀÆÇøœ—Á‰˜ìIÑ!Ê{ZÄDÂï¿5ˆß J*ƒ@üÙ,›á sÖ_-­¨ÅZ8λ謤ŒblsãÁGùÅÕ7Œä;½c2‰Dœ·ñ½¥Ý³ƒ½ Nd³9¸“ä²nÅe´%[o1ÚÚƒ‹ZLoÿ躟{`™ÊÞEgagohj™¸ìÜK›<¢¯„˜àé›/Þ&`-ñ©…k÷=àçÁõå3ÝX,öôÕ—°‘³XìõûƧÎ×_‘+wK5­Ñiü>,ßIAIõÚ½ÂÂ).?60-U‡c;bçüM×7x´åˆÏÅ{!_[öŽˆÉòöÆãÄô"À'±»ãÝ»° òóè¨Ë†Eeb%@ Jª=f‰Oý\ ƒJ!Oe_ZQ»bç],1iFn™ûô#þ!Iø¹*k"r¹Ïei¤ZPR}õaTÖ4LXzîeð·Í5Ú ìôŸ¾Ž½ð)»Ðêšîû¶çé¹áýÏ.ÓØÜšSP)&" &ÂÚÀm#–Ñ%“oŸäÞžÂÞÞdôªI7Ù΀ç¡'Y¬6‰2}Èþms_n™í«¥d ¥UY1iþÜê+奴&»ïôrZÉù3%7lí‰~ø¿âŠv§q9#·>³6Îð^3åΪI7GXL#«°=ÏÄÓÐãà Ä}foóbÍ”»æºÅ…¿°Bðñ ¸eù„kʲúÐÜRŸžßþ}¨®+1áŽK0¢‚ÒÀá°i ¨øÄ¿H‡¨bÌåþ‡s~r8œºúf>ží|¼è&+r÷¹.Ø0ðµÊíÇŸh:®=zùUYe¯ ÀÏ.LIÄ€›«/î.%!¼ù°·–ãZüG¸{X,ö觬†n»ûìc}#]Dˆ¯ƒ*;ÆÃ:ÆwÛ¤á¶~A Îö[|¦ËLfL{øœã6ÃwÜ{þ±¡©¥³œ.ùbÏÿ_ !ñgã`­³iÑݧŸ«;¬ÑÓ”çã¥dä”UÑÏìœb¨­ð1>çĵ׎}tǵc]¥ÅS½üjûñ§{ÖŒ€ánæ+wÝ=yýÍcÿèjZc}Ò*…¼zÎàq9çï¼½ïûÑ@[¡¥µ-%³¤¥µ-õõîn”qQ¹ÏÝ~+m±ÄÌ@%&9ßHGñkÉÊ¿‰° ßÕƒ³¦¬¸à>ýˆŒ¤0?Ona¥˜ˆÀícs1ŸX0Ùù]tÖ¿H ³EÚj²%ÕMÍ­îNÆ»Wä¥,/!$Àkæ±EAV¬´¢–íˆuïuÓ †õÙÎKÚLgTÓšZ(dÒõó±ÄÜäW_rV^FTKU¦¨Œ–_1ÖÓÚÚDÛ;~hŸcW–n»}è‚?…BÊz»¯›óîY3jÌÂÓ&P’/,­±6Q[>Ó»¾ßÖeÃ#b²N]såA¨¤˜PAIµ¨0?ä3q¸íûØì>^;”äÄí,µn‹•9}õ¥Í‡½K+jÕ”¤¶¯ðÚ|Øû›“pjÇäásNÌYuëQ-U™jZcjv©˜0ÿk|—:eÅ}-yi áÄô¢jZãŽӱõxZ]SJf VÑ%ü¼"âBíº?Ÿˆ”˜ ÔÔ—”%€‘F,5  ‡ý£w¦@VQ´…Þgk­¨ ô¯c]ÆrÃ`¶`¬ô=¸Ûµ”¬°X‘À&zmQy*ÈIianx¨üc];:±OrS-&]÷Ý MUÀá°m-@%wüm¡RÚ[ZM€è˜OGcÓOÕ@WV€’rZÅB åÄ‹Êj˜,6·[ÓRýqÃãÏó½>)IÅ[Žø °Ó÷»ºK¡ü*4©çIA¿™Dœ9ÖaæX‡'±–ž²âByÔ±ouëIÄÃQ+f <´qÖ²÷ŒïÇøî>†Ú WÎÚ·nÌäåçï=ÿèálÒ¹xÒÕ‡aOb×ÎsÇ«=m?þ$ª®ˆ¿¤"<;VŽæfþ281#§ŒÃá8Ûêõï£ëÒW*«–Íp›ÏÀ¶}…•ŒûæÉH G=ÝránpqÍÚDs&àçyqu…Ï«˜ñ9¹…U|¼”1VîN&¸å”v¦úÊB‚_¬•òóñl\4Ä@ë‹wˆFL&E8³sJÝ ˆT‡3u¤Ý”‘vîãƒâ_¿ÀÃÌ@¥ËËäë°×ÓÙ$á厇~‘ÉÅD"ÑHWq˜«îù T ùþ©~A ïb²r +G ²°0TîfÞ!Ó¦ˆß{ïNßü—­®,5ÐÁˆ;y©“­Þê9ƒMôÚ]Lí­´WÏÜ!¶~ùÌxÑå;îdåWß]gg©l6'42ÃuÒµ{tVÇ ±ð Œ/«¬3ÔQt¶ÕóhŽïµ2V ¹·þγ5µžÎ¦Xã¬qŽ}t;'âóhú`ƒÏ«˜Êš; ­‰ÃmãS ¨²´d»ã–¢¬Xä“-—„&¦5Ó[Í U'è‹§`]4ÅERL0 ,™ÍæÌë€5ö1Óøà³ùî³%ÕÖ&ê‡ÛVT×74¶è|ª'1ÀN¿¾nØIyÖV“õÝvÃû]rFqIy­®†ÜÂ).Ã\ÛcÆNï˜ÜßF'äcz3aid?aXü¶b i;~_UDu]»{°¢ôçÌO²ê˜gum1wguE³.µA Es/ÇŸ¶’bŸ½Ð‹+3bÒü+jòšèµ-Œf¬‘Åb@Õ§S«Éw—)QZ¼ýcv?hm£@³]{!“:š)Ȥv#U[ÛOi8ÿøyøù¨)™Ål6³t–Ö<ÿN[ {è…e=Á((©Æb1Ëa÷‘~æ†*_F?7Ü­ý׌Ãá\}N&;ä…þm`•¾7 ó`o€W÷é1›¢Òr¼ëw1ÌÕÌÉVÏ70¾¾‘.,È¥µf}Ì4ðMkuÜØˆÁÏG]ôuWØqCl:«¬úZòx¦xâãNiØáŒ¦W,;ÀÇK6Ê~Ú(ûλž)&"€™¯=§¥µýÕ[­"ˆD"‰Íêi¼…³7v "ÑÛçía ÉÂ’Ä/kQ4·´çmìQ&$—éI)ävßBÜ ‰ƒW ¤Pxz àîhüðEÔªÝwO™»~ÿÃÊêúï’0nˆÍƃ.?UV?Ħ¦®éÜí·oß§a ÊRð$ Ök 9›ÍÑÕë\µ|ó’aÞþ13Ö\¦·´9öÑ)¯ªßsÚ769á—_RøôP”§RÈ!Ò_‡§HK‰‰p/~ ¬’êMïwC˜*ËK¢‚ïc³ßEgéjÈaÚ`5­QÑv…¼´haÄáÎêiÊÀéúšò<<”37r•›ŠK)8pþÅŠ™Mô•ëèï…€µ‰Zg9ØE¼öZ[M†L&¼öæØ•€^¹)ˆÿ+Bˆ@ ¿‰¸”‚£—_r·R”«©m:}30!­pîÇÞÚÿ;¹e_D^90Õ©ÿ^D…Ú=ñªê>ë+±¼ RbÊ?&Øl–_øiP•3š6d?`#¶ãâÐϧþdñ«®+þù‘Jáe´µ´´vôf´µ-s:"ºgïÚÑq)G.½ÂÜŧ¶·4R[¸ùFÏ%ðPÉÎ,³ðô?‡ÿsè1ðòPð5=MùQƒ-¾ˆ²¾¢žn±è¤™è)=8µ`Ά«–žÅ—Ïtë°ù;á磮œ=pÏi_×Iàö±yÜë’_ÃÆT}á—S×ßè»n$‘ˆT ùà†±&sÕœAoÞ¥¬ßÿpýþ‡£[>8½°{™üµ@ZBÓ”úškú^^ÞÁããÈ?ã+«ð 7'·Mš5Ö!6¹@L„ßÖ\SFRXSUš;2ÂÁZ'õõîL&‹ÛŸ“›ÀÛkp;êÖe猰 ‹Êh¦3”å%œûêá`LR>LíÊu¨rеÁÒ3óÊ•åÅû˜iI$c]EÌ…DUQ²ðÝ¡ ˆ´¼¢*1KcÕ¯…kòòPBî¯Çä¨*Jö1Ó ¦úʸ;ÉüIÎvZ\?^ß\ý{ÊØ"z ¤"ˆÿ47ÌüñL91ÕWN{³'>µ0·°²¾‘®¢ i ­ ù­ºÔßèkoTˆîáãìo>îõÇ« Í5‡oMV–5¨m,¯¨ÉEi]í¥ÌMËØrn¾I&Q×O(*$ÃCåoe4G¦ø‰d&«õc²/÷QT _?³1‘×é­GïL“W­m(on©ê°¬‡ƒ——Ò.­Ênn©kn©ãçÁÛ±ª†’¢Š¨æD—ðóQ¹#Ápùy\í ðMI1AînJrâ½%¹‹÷àBœlõº,]@ °šìܧèì–/,Èç`­ã`ÝuÐ`g»¢° ß7}ûSuÓÏ^ôü<ÏØ¹€“©¾²)W™"îÐJ ey‰Iû[ûpì£Ë½©®,…§’æf÷©ç†Ú kævW­§C· —Úà $Ž}t¹GÅ-GQV¬ƒöݱ@ü …@ü§ñhñoˆí2Ôø5|ÊŠDà*àd9¥•Ñÿ°…Ñ”QÐ^ÑÁ@½ßHç5„/+ tØä¡ ‰$6›Åf³¾ÌçÙÄb1É$êHç5÷vµ0š‚cn€º‚)›ÍÊ+MÄ“39[NihªŽLñe²ÚJ*3@€ODMþï¦øá*²Ñ©/ ¿4IO­Ý>ÜÐ\ƒåÂQ‘5âo' ,9&9ÿ½÷?ßU­øU ¯@ r³†a±Ú”d>vÈ$Šg¿Å¶Æ#Jª²jêJD…¤å$4ñÜžÀCåŸ7òd £INâ g0>Á®74Ww8 ™ÄÃCå-YÃŒ‚ÈÖ¶f)-Uy“êÚ¢ªº"yÉötG2Ï(—uv&£‹+3›k$E•tT¬±¢ón}fi:òRð8@YÉöÁcU(@Wµ=3~rN(®¦ä„a…ìñâ/FVJäíÝußÌIƒ@üK …@ ˆ? "‘„ˆ‚„ÈWËÇ}­2„”˜r÷‰gD…d¬ <»ï/'©!'Ù1嬨 4žu¦}ðb‡Á‹J)Ëꔥ¤ä†s8l, iJnP)|Ú?‰@ü)üpå[â—@üy@ ?ŒÉ(h¢×æ•&£žUVúxyz@üK …@ Dob¬éŒ™‹ÊÓ ¸2ƒÍfñPùíMz­P@üw@.£@ z"‘´jÒ-|SMÞdÏ¢àÞ@üW@BÑ5¥µµõͽ>†¸”z £·'£;êèmLÖ¯XR^ÛóþŒ6f~q5‹Åîí™@ ñçBÑmL–BŸ#æì­”T;ŒÙ#o³ÜÌc‹™Ç–Þž¯RR^+j¼`Úª‹¿P¦Ý¨]n»éð!.çâ½FÛÜxà‘ªýªÈ„ÜÞž @ Èe@t‡Ãáp8½ht¿äld|îž5£ŒtšZz{>¾ ‹Í€¶¶_f!ljnMÍ*éo£ûµmL–ë¤ M-ÖÚÚj²™K";×SF ø&H!D ÿw$¤¾‹Îš9ÖaÝ|ÞËï&6¥€ÍætSŠH Œö°’ÒR•‡›\ «!ÇÏGíí±#âwð$ –—âÖϰ·Ò5­ æ}ßF:ЦúÊ?/&‹}ïÙmuY+cµÞ¾Ê¿ ¤"ˆÿ;^'€§³ÉOKúóˆNÌ‹¯+„$ñÒ¾øff^y}#ÝÂPõ›’Ñ£—_¥ç”Û2Jù“^‰§­º(#)œöfÏï?u]ýíû4‡Óå^>^ê@Ü‚Š)+.Lmyÿ̯ɹò ì]tæþõcÄDz~öÒŠÚIËÏv·ºjÁï¿ö¿˜?éÛ@ º¤¼ªþÎÓ÷¹eb"C˜Ù˜ªcí÷}?6ÓÓFÙã= KkøFº;ëjÈá¹…•/ƒ“2rË$ÅÇxZcv'n‚"RýC’„xÝŒÍ TºIv~Å‹àÄ´ìR>mùqCl¸±­ æ§ïãS 9Ž“­ž§³ ‰Ô1Œ9¯¨êep¢· $¤–UÖõµÐÄ!ßEg…Ff”T+ɉ»;s;I–”×Þ{þqâð>M­çï¼åp`ó’¡ü<äçVú%¤e—òñR ´Æ ±á¡¶°É:}#ÐÁZÛÌ@Å?$éMxŠ„˜ ‡³‰¡öe¾9ÎÓ×qâ²y¨”!.¦RBÝLHFnÙ³×q^-Ô•¥°–úFúåû¡6¦ê¶æš¸À³·ÞJˆ Œñ°†O ¡¥‘jnaå½çË*ë\ìô‡¸˜â2S2K^'Žõ´V€èÄ|°0ú⾤e—„%§ç”)Ȉ `j ­èÄó/JÊkWΤ©"ÝÛcù3Ê>çø×öVö¥žÈ9qíulrþÔQöö–Zÿê€S2Kªh Ö:¿y¢þ,Bˆ@üÙD&äºLØúZò%5»O=O Ø¥§)Û?-¯¬ãV?Äå¬Üu—Ãáà áÅ{!K·Ýj¦3$Äkj›¶õ¹}l.¦™@KkÛìuW.Þ áå¡´´¶m=êsýðœñCmºÉÞ3¾<¢RHÊòU´FZ]ÓžÓ¾‘O·òó@]½×ŽÌ¼r3}冦–cWÎìœ2o¢S!çï¼ÝsÚû¼åˆÜ82ÇXW©¾‘>~ÉY¿ 2‰("Ì_MkÜtèñ±ÍNqÁ:ß{þqÅÎ;‚¼K¶Ýj¦3ˆDÂÆEž„8ÿbݾdIE¡}„»O=z¶EH€jë›—m¿½|¦ÛîSϾˆÂ.yËï§âúX+ƒ9qÙ¹G/¢™DÜqâé¢Oè’÷±Ù«vßãã¥.˜ìŒµ½üjËŸ‰Ãmq…0äcÆ‚®ÏàØ®&å)ÈŠù¼ŠY·ï™Lb´1] ¸r`&~] 8çí{ýv…0)p !›ÍY³÷þ±Ë¯øx© ²bé9e›=º~höÄá¶½ýUE ~=ÕuE¾a§ ÂHçµü¼Âï“|Rsߩɛ8ZLìí¡!þ î\PRNÓø´f‡ø&N¶ºï½ÿÁ,„ M-n“j+\Ø;ÛËËC!=‘sqïô´ìRk“Ýósé¶[¯ÃS˜Y—:¯A#pBˆ@üÙl:ø˜Ãá¤î•—åp8/Þ&ÊHŠôðØôœ²ù¯i«Ëúœ_¢¥*SEkÜyâiJf Þác|NyU]еÖ:A©îÓ¬Øygä`‹.]kêégwM™4¼/?•Åb/Û~ûäõ7go­š=NßLË.}zq)¦\%¦±Ù]8œl]6|ÎxGµ~«=Mn™C D„øX,öÐYÇB>fìZ5råìAzåélråà,2‰xé^Èš½÷»™aEYq(«¬Ã6é-Œ“×Þ@iE-Þçúãp˜2šš[Ó²K¥Ä…¶õ¹~xÎ(wËé&xø" W£“òxy(úZíF¿èÄ<"‘€Çi¬ÞsïðEÿ =·-÷"“ˆIŦ¿‰ïÎ}Hz"+©>wÄ ôèÝ+§8ö^À.&Þ®$£÷/ ,5ï]½VNRSAJû÷LEH̽äœPaI>Aà°Ùiy™‘溅$Ï4ÿ¶yêŠ;"Ñêš@H¯™Æ÷Ê17T17TùÞ£~ÎÏ‹ø«A !ñgSVYÇÇK•–àîdÜócœÁd±nž€¹‰JŠ Ý<»ƒŒ¤ðÛ»ëT%ÀÅNèÓ‡/¢r «tÔe;KÛ½zþ™D".™îzòú›”Ìb|œ ,/mé(v9$*…œ_Ö¦ê¢ÂüXãÕ‡aÁÒ×Ìuß°°Ýègi¤:ÌÕìö“÷é9eXdytb“Åvw4>·{*¨u•qsÇÊøg"‘°dÚ€£—_q+À (+þöîZ9iQâbêÒW? ,¹¼ªk9zù…Lº~x6ó°rö qQÁk¾ê£('\ á•aÕµrÒ¢¥í-Í­÷ŸÔV“ík¡ q)l6§¼ªþÅÕƒú€¥±à•mÌÄ´"3e2‰'&)_WCsŽK)8réÕÈÁ–»VÄú‹‹ Y©ž® þ’sBè­ ¹ÅñMÍ4A~ñž’YUÛPe)?¯2ÚèY…Ñ@MEK*…kle4_}¶ÔLæèiÅp2 "[Û課†Bß5 zkctÚK0Óq%ˆ`¢íò,ì$‹Õö>ñ‰[Ÿ™ß%í£¡©åʃЀÐäì‚JqQs•õ <°_*ÈίX¾ãÎÆECd$…]x•©ª(9s¬C‡ØìVóØ•W1Ù™yåÊÒ}-4—Nwåå¡`{ Kkm¾¹rö@ueéç^„Ff(ɉOi7bÖaÚª‹áòþÜF¡‹÷BžÄžÛ=UNZtÓ¡ÇL&kÏšQ§o>ð‹l¦3† 0]¿À“L"> ˆ=~5 ®no©µm¹—ˆÐKxoß§Ý~ò>.¥€L&™è)ÍàÈždãÁG…%5×ÏÆ[’2Š7ì8g‚#~!Ó_}…0¸;¯ž3¸ËÌ[;O>KH-¼{b>¶ê·ï¬_AIõ©í“¯?¿ïYQUok®¹mùpüy”_\½dë­5s+É‹<ÿ2,*SY^|úè~Ã\͸Å6ÓοxUVYg¢§4e¤Ý;}|ïš=÷yy(Ëgº-Û~çc|Î0W³½kGwy—ý‚n=‰HÍ*äån5w‚#…LêÜ­¤¼öâ½àÅe49iQkíUs rM<|uõaXv~…´„ðÈÁ‹§ÀnY­qïßwÑY´º&+cµ³þÚ40U´ÆÝ§žH——äÕw¬§5¾ëÔõ7¯ÃS®š…­Þ¶1Y§®¿y_XR£©*=k¬ƒ×@‹ž%)£øÄÕ×±ÉùûÐ}÷>päò+>^êºùîÜݰÇ3¦)56·fä– òóùR¡í~„Õ_ŽÃDO £-µÏ—LoaäTZ›ªsGÀ°×ïæD˜…³²Xì×ü‡¹š[›¨áÂ[>Í­K¦ à¾öñCm0mJÊi ¦ÔîΔ”^Ìhcâ)g²ò+¸3ʹôŠÃá8Xkû‡$Ýô‰X½ûžÅ­|¼ÔíÉ´ þú›×P4ïo>¾‡Ú k:é©Ùiô×Sý¶âÔÜw×|×_{¾>-?¢‹Ýß³O«/»ôdåM¿MÁ±w¾w)¹amÌ0PwÀZøyEÔåM .ãõÏ_æÿ9ƒ§^µë^+ƒÙÏJ›—‡râÚk‹!Û›[±½¥•uÏÞÄ]ºb9tÛ¿H)q!ÿ¤¡³Ž=|…K()¯íãµcíÞ…¥5ºriÙ¥ëö=0÷ÜZQ]u¨¨ªú:öêÃ0Ë![o?‰zó.eäü“7¼ßaj뛯> ÌÀer8œmG}"b²$Å… 4ÙçUŒ×ÜËwÜ!“I%Õ›{/ÞrsÍžûÃçoljmim;v%Àeâ~î$%;O>s™¸ÿéëX9iQ ™tíQ¸õ°í—ï‡â^…$=öæžü¢ªgoââR °Í—Á‰ŽãöeçWx:›è¨Ë¹äÝõ#òUHÒ¿H&«ý©ü!ÝÛâA¹Å{îIDAT?fÚª‹ÓV]ª­on¢·¿`?z7óS¦²Êº§¯c¯< ³²íî³RâBaÉ^sOÜyú—YVYg5lÛîSÏÅEûè~ˆËq›|ðøÕ¼ƒH’oPü ©‡ïû~äp8ÁÒ»Ûº}MMI²±¹uñ–›«wßëÜÉbÜtàÜ A~kúFú¶cOO=„w8v%`ô‚SÍtÆ0W3) ¡5{î•Ñ ™Î°µëÜ­ S}¥AýâR vŸzþ ¿¢)™%æ[®= — þ>nñ™ówÞâ{ƒ?¤û¼ŠÁÁ3V_Z±ó®„¨àp7sƒ9ÓõžåñËhëaÛýC­MÕÕ•¥Ïß 6¼9-»šZÒ²K›š[ =§4-»{¤2Ú˜Nã÷»` ¥àîdœžS¶íØ“_xá"ÈBˆ@üÙlY:œÞÒvúF`¿Ñ»u•ö­ëß$§ RBT°ç^õ|¼hûT½Í­ÛŽúÜð~W^Ußy¯[?à {§¯ß÷`ü’³2’Âëæ{,îÚe¤ATBp¥Ù,,­IÎ(vî«×!YQ) >i\˜am˜›¹¤˜`7ão¦3¶õ¹áý7Ù}l¥œÉd@qy-(ȈõüîðóQÅD°Ó=öÎί¸ydεGáµõÍô•rüj€˜ˆÀgwÐÄ|˜=®?.!.¥Ì?åòé -wHI– K·Ý&“ˆ’âBrÒ¢sÆ;Ne‡ë“ˆ¿+}O+}Ïï:DNRsšçÞ_5®óq~Ö÷‹JÎ*…Ûæ©¥lYU]WTV#+ñ7/ùOiwÿäyQlsýþ‡{Ïø>ðœ>úsÜø…»Á«fÚ»v4‰D|e7j×®“ÏF ¶Ä‰K)àç^¾ãÎÑ˯v|~lËçŵ+ÂNq9ºy™DŒIÊ·¶mç‰g“½úÀ´QöOboù¼Ç3v„Ee•ÑNqÁ Yé9emLVæÛ}* Õõz6œ½ÄÇK}uc•«½›Í4õP@Xò›w©˜ -&)óaok5ÿë«0³a\JÓø}+wÝõhÞÃŒ”§oòòPBlÀ¬dµõÍ]Öº¤´¢öepbÂË†Ú l6Çk¯c½ý£G»[á}.Ý Y:ÝõÐÆq$ñc|N¯;O>Åì7|”–]úöîº~VÚÐÒÚfæ±eãGã‡ö‘oÏC“”//#šè¿SSEºËEÒØäüç_ô³Ò~qu摚šUÚ¹'‘@زtØŒ1ý°xxðœyÔ70>:1{:œ¾¨­&ûúæjÌ ZVY'-! oÞ¥¤ç”qŠËh¿ð+ú!.gæX‡3;§PȤäŒbS÷Í;O<›3Þ±sÏúFú­'ïÇzZß9>ï»FÒÐÔ2Óu-U™ûë±oËÜ Žv£v­ßÿÐûÜbOgOg×I^‡§D=ÛJþô¶ó.:+.¥`ÿú1«ç þ7.üO)„ÄŸ •|äŸñëx\¸|àü ÷éG^^[Õ&"°ØÝ½c ðྋ?Ïè§üC’ÖÍwín%#)RßH×°»Ã¬±“†ÛÞ{þq牧ËwÜ©¬iÀ=¹Á²ªÈH c›¹…•€U`Çic²B#3äeD±ì˜^ôÍ2c~¿f®û¸!Ö2’"Í- -ǵ=¿@>*44µ|×´(ÊŠa áþ³~Ö:}Ì4^…&@Ye]Tb^JfÉž5£ðl¨ÑIy"B|ÜUé1 ÐÒXÛŒIÊ<î‚[!¬©m*­¨uëgøôâR*…Ôð~ÄŸÈëWRrÃÅ…d'¹ï€ü²¤§!ÇùD§yî ‰½Ÿñ¦º®XVRcpßyªríËCy¥‰¾a§@î¸B^ª=hŠÖPæq¡°<µ¾©JJLYGÙÚÅz™ôÙ­®º®ÈÿýÅÂòÔ†¦j)1å>†Ãl ‡=|³7¿, ID¢·¢´®‡ýÂÎãÌ+M|zBˆOlªçžà˜; ™ÕuÅr’šƒûÎS‘3€Ø»‰YAX焬 âÊ *…oÚ}X`dCsÍëWŠÊÓ*hù‚|¢Rb*˜iëÏNvQ (É艟ßõñKÎ*Šþ»Bî•#pëg°÷Œo^Qwãhw«ÆbŸûZhé(b–(¯ª¿éóÎÜP…;¹×®U#/ß½t?äèæñøoˆ‡³ÉÉm“°Ïæ†*–FjQ‰¹,›D"z8›HŠ >ð‹<±m"[~÷Ù˜ôeÐrеX¼€´„ðÐfW†Ý5ÅÕÞˆDÂÄá¶aÉ)™Å˜BxèâK‡s`ÃX܉ÔT_yÖX‡ƒ^>|Õ᪻¡•ÑVTZƒePÃ>{È‹«+°üÒD"aöøþO_Çâó†1ÌÕ °°6Q73PNH-äp8³šêo„iƒÀËCñp69táåÛ÷i¸VI n›‡¥6íRY½|?”Íæl^: @8Ùê9uåÑC$–Nwånqµ7ð ŒÏ+ªÂ— iuM´º& 1AèDSP‰Ær•ý*\ìô/왆}‘ ´ì­´ß¾Ok¦3¾V5· ¤ºÉÂf£‡#¹ýä}EuýáMãðoK_ MyÑoØl¦ïÂÿDBˆ@ü HKo\4¤Ý~£wßôŽÀB1äÌFÏSYý…·§ª¢dNAeV~ÅÏ§ÛÆ–T=MðHB< …^ÊÔ‘v^ÍÕú­¾ñø]g…V×”SP9tÀç` F :˜1ozGÐêšfŒ„m~³vTÖ4<ŒÔßhߺöPúF:|2’"T 9>µ{êc]™C¹Q”OË.}ž•˜÷üÒ2À\R Jj6öV–—X6à ë‰e”ég¥Íý ‹NÌ£I&zÊø&•Œ—‘ˆNÊ' fúÊP[ß D"/¤ø[É+I(®H¯¤åc›µõåEå©$åêóuiyxŸó—¬˜x]RT ªk‹ Ê’€ÖP†)„ù¥I—Ÿ®ja4€@"‘‹+Ò‹+ÒÓ >.sžH @vQÌ•gkÚ˜í.ˆ%•™ƒªÊ›dDÖ6V`å5yÐÚÖõŸRmCYQy*ùËå–ÄŸó^²râu Ų”‚²¬½®±²®±’6‹I"QòJ¯=_×ÜÒþ÷UÓF¯©/ÍÈÿàn¿ÀÁlÐêJ[M #þE–B)±ö?–ÒÊïö¢ÿ‰MÎÏ/®®¬iÀÞnñxc …/Â2å¤EÓ‹è- >^jjV ›ÍéoóE.~~>ª¹¡ÊÛ÷iÅ嵊Ÿ^‘¹@^F”Ï©­o–¤I†Ù¿à”0ÜÍœÅb?ô‹ÒT‘îbÌD¦¢ Ù¡û€äŒb2‰Ø÷Sf {+íƒ^¦ç”õpZæLp|ßÇkÇÂ).sÆ;v˜‡oÂ}ÉrR"€AtÙä¥Ec’òë„ø²ò+ØlNUMãº}ð™¹åð¥ÂËCé0ùÈÌ+‹§]a²ØãrŠËi´º¦¨„\ ·¶a»æNp\¹ë®‰ûæe3ܦ²—øäJãÒW_SEúÀù©Y%K¦»°Óÿµ+‰ÊòâÜå¤E ¦®©³B(,È7nˆõ§,‡l[1kàXOë._!:ƒ)ê¯ÃS°@A ~^j ƒY\NS’ëÚ©[9{+(§ rÉ´ƒ»Wÿ  Bâ†ÅbG&äâ›Â‚¼ üiLSUšÃáà aÉ+v~¥3ÜÍ6|Äúñ:<åôÀIKk|rªÄ8}ó 9ârð´¢¼<*…,,Ä×YNtRǪzX6ðÀw©xGlrþò·%Å×Ê“œ/,È×½ZÛ>B.·S׿ïJ‰D¦%åµ7}Ú_m³ó+Æ,:ÝýQвbmLÖúý µ°”?˜B¸õ¨OZvéÁcñÇ^\J‹ÅæVk±œ1†:Š˜Ž×Æd%¤ë*a ¨'&)Ï(£¬ A!“‚"R¹m˜l6Ÿ7ìþ.ÚrKÛƒøË`±ÚÒò"4͇;®P•7›ù>©ëÀ‡íýöP £INRcÃŒÇÿÌzæj3Š+Ò£Rü€Ía? >ÚÆl%ˆæºçxó°[ÀÏ+L"’¼œVYé·ÿéYxz9­ôìÊ<ˆÃü40/Ç•˜ùŽÅj{Ÿôú[Lpë3 릩dáå´rü -$…Ãaû¼=ÔÜRO"Q†:,]>áÚè¨>p^½¿TßTå´<ì@LãÅáçæ¥ À'eõ/&,*SÇy½¹çÖYë®<ÿòÎÓ÷ß<„B!öSŒE‘I‰ wèƒi մƯ iÏhõisÚ(;¸åAïÓ*ªë»ÏiÜYåÀp—á¢2šx§X†oŽªžÎ&7Vék)ì>õ\£ÿš…›ot»ÞÃIûêœ|úM†OßÅå´àéø¿Šêz[sÍïJÅYTF#=´mÞô‰P²]a?z÷’­·_ôžÂ½wŬ·ŽÎä[½ûžRß•xm'~>ê»Ç›æŒw|ó.ÕmòAS÷-ÉÅ?6K=šI2Ølv—{¯ž³{õ¨òªºi«.*÷]éýeŒè×()¯€Øä|îÙ–Ôßs‹í*…rý¢).áÑ™ž3Ü„yßü—A ÉÄ ­¾ÙzØvk;KM‹sûI•<ýS@Úâ©nzGÌ^wÅ/(¡¬².<:sÒpÛkÂñÃgëæfнç“2ŠmLÕ“3Š?Ä嬙ëþ#QS’²5׌ˆÉrt ™Fð‡ôäÌbqÑÏÁ3×^f0˜ž.&B|/Þ&”UÖmZ4¤³œv[WF5%©!.¦ÏÞÄYÛîÜW/¿¨êI@,/Õ÷Êrì¡™ÎHË.µ·Ôê~iSIN¼Ÿ•vhd†ËÄývZÁÒÓ‹$º9ìÌš¹ƒ_'Î\sùî³â">¯bœlõ:¤¥é–h42!÷Ú¡Yرõæ·ïÓ¼Zp¥tΦ“™W^ßH·ü¤"&g·2¾È(S×@Ç­©dqÎÇS×ßhö_;ÜÍ\ZB(§°òMxŠÏù%ø[ÈÑ˯|ãÕ•¤VÌøwñމ–Ëø› ¢z¿]—½€V_ÚeÏÜ’øÒª,p´˜„•gp´˜uƒÉjË,Œ´6ðÌ/M,¯ÉCþc]7€†¢y#/*…WRT©…Ñ™â ZJVÆZÎߘ©ö€qnÿD=5»ÝWF­®¥uùyE^½¿r} ‡cý³‹bK«²ÀÖp¸É(•Po¢×ú…Ÿnc¶$ç„Úyµ´¶ë¼ÔŽo̼TF½µ§ÊßH]ÝcúaAÞèg[1òÈ„\ëaÛ{.ó,¯ê5€9’¨)õ´h‡™Š±®ÒóÀøúF:æ/ú“End¥DÒ²K™,6™K'¬¬®ç™Lb0˜ÜÎq±Ów±ÓIÊ_ºíÖé2’›— ûUóß Xœùp7sÜÏöÇ–NÎ(®®m’üÖs*&)Úª‹VÆj7a¦ËK÷Bf­»ÂÝg°>†õyž²xËÍ ª+Ka ?¥Ä…ÎힺoÝèÃýwzæ1ãHNÈ^1—‘IÄõ 6[€ŸÇûÜâ}ëÆX›¨«ªÀËËCùødó²n¼<ßÀx"‘xlË„«F‰H´·Ôâ¶Ô€¦ŠŒ•±šÔWVݼÏ-ž=®~qõÝgT%c}· q15øT.ïÌÎ)†:Š|#/Þ æå¡Ü::waW%Ý1G¬ÖÎíãó6,ô$à–OD~qõâi2‚öZ›´G•WÕ™¨Œõ´ùæt=:»hîÇ¢RÚ§ï•äÅc}· s53Ôi!/µ¯…f‡ŒÛ:ê²Ö&êb"íoœÖ&êoï®óh‘šUZTFÛ¹jä“ KúÛèàB:ÓÇLÃÊXm¸›ùø¡}°5%©¾šN¶z§wLæîÉd²mÍ5í­>Ū¦5Z©`ŠmÒêš,T‡~ÚÄöbf^ŒƒÆî\9«kíQxiEݪ9ƒ¹Si{:›ØYjõ³þM5â¿~Xõ¼.ß×”¢Ššöåð÷I>×|×_ó]ëå"‘ 5õ¥P]×n(P•ÿš‹W˜øþ9`”ÂÌwtFwÚî «¥üyÅDC±}í£º¶ZÛÚ= )dž‡“É<Àhû>Ÿð?‹wÑ™õô)#íðˆâîMXÁª ù‡$q7VT×G&äj©Êt®ãÚ SGÚµ´¶ÝyúáñËhSuLò£­&Ëb±ß|iãzö&,Ú ’b‚mLV —Oʇ¸œ.¥™ª<¿¼œH$¼}Ÿ¿MU"‘ð.:ëgå¨HÀÛ÷ißì–Ìb±—ÍpÃYÙ_IÑ4ÀNÿÆ‘9üá ±¢ÂüÛWxñ°Î/®Æâö{ ™4Ù«ï®U#Û˜¬žÌ¡ŽºtŸe³ßb%; $À»a¡ç´QöåUõÂDÿk !ñg3m”=ž£²3ýmt:D)|ðù‡{SŸçÈ?ã;H"ClèЈ-1~í\2’Âç÷Lãn¹zpþ¹Ÿ•6aÿ58Nhd†¶š,žQä®U#»Ì@jJRŸlîÉ\I‰ Ý5•»åÒ¾Üg ¸±Ã!sÆ;vH‰fi¤zïä|î–GgusR·~†XH'ޏ¨@çÀŠY;îlÍ5#ŸnÁ7lõ¸7û˜ipo/eã¢!»2½bÌ›èÄ@ñC"Qá“[gê>æÇwØ%!,µ íd%Ôà—B"Qºæ |¼Bx#¦âÂ'-—Dl_Ëg²Ú:Îf3€Dú›ßp°d›oß§aÉ]ŠËh þéiš~ ‰ƒ,¿ŒÞpàáö#È$b}#}ÊŠ ôÆÖeÿKÔ$/Ûµ{ïo8ðV×4É«ïO^Úò™nÞþÑK·Ýò»²[¾¼éqãñ;ku¼Ð®¥±ÚóÀø'žžÙ9…ÞÒvø’ÿŽOq g1/•äŒb6›£¡ü›’-‹ñMÝïÒ½-G|¶,†YÛšš[Ÿ½‰ånEîqZïYã.Ü ^¿ï‰ž’–ªLKkÛ‰k¯ãR nÛ¡'¶dù&<3úÅ$åsQ¨¢5Þò‰˜3¾?/R @]YøE*ËK`‹†­ fzN•BV”k¯–ä1㨩ú™S~äE%æåTŒl…M¨Þƒ[6aXŸÍ‡½÷žñík®igÙ¾œš[X™™WŽ?y±L¼~A SGÚa)mžÄЉðc©q™,vjv)@ø§ãþ›.ÄŸÅõÇïÊ«êgõ8‰ø107Q˜>d¿ŠÜ…jxy@_Ûl¢×þþááꚪñƆ¦샤¨"ð|òmet\øg0[€‡ò}‰%ÿ,¬MÔûê¾K•µZª­.•çîdü½`‡7Ï-¬ÚsÚ÷Ø•ÉÌÜ2›³f®;^>¡‡HKv4~ö&ŽL"rWÿ1úYioY:llj§ý×h¨H×Õ7WÑ µnù\†~á—kÂÏÝ~ûøe4½…A"Ïíž:wÃ5l/@ØsúùöãOLô”ˆDbd|Ž„˜àúßW©ågصjdrFñöãOÎÜ ÔÕkhjIÉ,áp8ƒE„zjzµ6Q_5{ÐÁ /uœ×«*J–”ÓZÌ+Gtî9ÖÓfï¿ wƒÂ’ÅEâR F ¶ºïûÛÛÒÚ¶bç͇½té-Œ˜¤|] 9,YkDLÖ˜…§µÕdåeDS³JÊ«êl‹…¬§f•Æ&çWT×ÿ…°¤œ6vÑY©Û:ê²%åµ™yåC˜uŸtCH€÷òþSV^p»GCYZ^F´°´&§ r¸›9®NÚçòýÐi«.n9â-.*ó|kLRþöãO4T¤•äÄ3rËJÊk·,Öó[óW‚BÑûxÍ=‘”^”]P©©"½vÞ1"ˆž#!ªˆ}((KÖíªT½„H{‡è´—FZNXˆÄì`uy>Q2©Ý:‡§ýaº…Ÿ=>3ÐP£}…(&Ýû (£"íËù¸9ƒÅjkn©Á¿y½ŸH$¼¸ºâÒ½Ðñ9ü<Ëf¸v·Úvì ©"½f®û`Ç/´ýIÃmMô”ð@)‰÷Þ›î<ýŸZPYÝ0i¸­“­.w,–ª¢äš¹îìõ¹…Œb£©*ƒ—¼Ã˜9ÖáÙ›¸ýð:{s'8vfåÓVûìVª¯¥°zÎ`·~xËÖeÃ=œM^…$¥e—JK é(Žõ´Æ \’b‚Ÿl¾t/$%³DWCn¬§µ¬”HNA¥ó§ª ‰þ;oùD$¦ñPÉÃ\ÍfuøZÄø¬qŽ}tñÂSFô53Päº:EYqîIPW–Z3×{´0aX=M9¼>„Œ¤pøÃwž¾O-Ì/®Öä6Ê~ˆ‹)®r,˜ì\UÓßâÀ†±n†oÂSòŠª”ä,F¶ÄÂ×Í÷Àoˆ_ô³-go½MÉ,–“=¸a¬…‘ªŠ‚–¡TQV,ÎoûÝg²ò*„ygŽq˜>ڛ̽kG[©F¤64¶˜ªŒv·Âå[›ªo]6Ïhý5x7.¢¡Ü1£›¼ŒØÚyîxuJŒ‘ƒ-ä¤E$DÛoÄø¡6*ÒØæÐfon­yú:¶¤¼Ö@[a窣[u *!*¸n¾‡µÉgÏg“äW»n?yŸ‘[V[ßlf bm¢ŽÇV€‹þ›[k¾ˆ¬k d ÿ,j -ÿ:,¥®nª¯<Üͼ'Êçß ó «Ê"ˆ¯PUU€}677×Ñù¯ÿôt`÷©çÙ†ÚгÇ÷äçùyˆÿ,YYY‘‘‘ØgiéŸ-©òÈEŸå™…QT ïŽyŸñæ¶ÿV˜0h«‰V{hîŽKÛkÔÌæŽ8Ñ©/î¿Þ S7ˆÃaiôÇê1b”Uç¹=-& î;÷Û³ù/“žÞ½æååÅËûƒq˜ÿç¬ÙsÿÀù÷O-àN”…@ ¾÷£ÊÕÕUR²§iœþ%…@ô>þ>gA$G»¬¿á·‰ÖPÿ(<þ¾‹ÍaaF:¯¹î»¡‘NË-‰Ï-‰2‰""( òRZJ2z…å©Í-õ“Ÿá•îhc8$<þ‹Õ›þ Øl‰DÁ‡—’–’†uV”ÑãÒÛL¥ðI‹)—×äWfp ,ªhÏ–¡$£ÛÛÓü_ÑÆ¼ú0LLD€»„,øƒ@ !@ 6FÃå$5ñ8@%Y}G‹‰ ,óÙÍÅj ­¾LI¦ÝƒŽÍi¯ýE$¶»Æ)H묘xãcòÓòš¼Ú†r¬ž„–’•†R{ÞZ9Ãå®~L~^ZÝÖÖ"'¥i©ç.&,‹í=ühXüƒÒÊL"‰l¡;¨ÞÁ}ç6Ñë”eÛ‡¡,c€ ¸XM«m(S’ýì…8¤ßqµœâx&‹¡©deQÖY1ñúÇ”çåÕ9õMÕ’¢J RÚ¦Úðñ€®ªmyM^M}iYuެD{6Ý”œ0 ‘(šJ–½}£þ+xûÇTÖ4ÌŸä„…Ÿ!ˆ?ô§‹@ ÄŸ„‘F#Ϲ—Ä…å÷סO_ã/²òVÕb„øÅñF*…×ÞtL7'äw¶ê:¥•ßÅꋜ½ÑÑâ‹Âkâ"òfgÒ1]0@´1fcرF•Âgo2º›áé«ÙÇÜ€äœPL!lc¶fD€†‚Vßñ0ÖU¼ut®›ƒáÏ‹B ½RøkÉ+Ix¸¯ª¶x©’¢J½=¢_†ª¼±¬„zYuNJN¦fF¶1[ ³z‰ø÷ÐÓ”×Ó”ïíQ ˆ¦G ⯥¹¥¾’VÀá°‰D’g¿E™Ý ³pU¤a*RsÃ@BDÁ@Ýþ'%#Äd!D â¯E[ÅzÒàl6KIFO\äo3ãXê –SA~1`=ÃDk€´¸ €Ö»¢§ …@ ˆ¿2‰j¤éØÛ£ø· ˆ*rŸC×D¥þîòƒño€–Ð@ â? R@ â? rE ~74-??¿·G@üTWW÷öÄŸÄÓ×±B¼N¶z=é\Mkds8RâB½=êïæúãpc]%S}å_(³™Î¨¢5(ɉ„Þ¾>ÄOBâw“›››››ÛÛ£@ â¿N^QÕˆy'7,ðì¡Bh7j­®¹<êXoü»9~õuKk[’ÿÎ_(sÚª‹ü"K>‘“ý —ÀápøEÊˈÙ[jý†Óý§@.£Äï€J¥ööøK`³9mLÖÏË9yý ‡Ã™5Ρ‡ýY,6‹ÍþáÓµ2˜¿ar8œ.&gÞD§äŒâ—Á‰¿ðD‘ ¹2’Â?© ¶1Yl6§'=ÓsÊÆ.:3aÉÙ_<_¤"¿aaa…Þ@ü²ÿ×Þ]ÆE•µ¦º»KJB±ÀBìÂn1×Ö5V_u»sínÅnT0éîînf†aêýpõ:"²+¢Ïÿ·˜3çžûÜ3³»<œÊ ~%=/x|n@ÔÍ×Q×9Üš–Ž ý:†ÎÜ/k5›/øúÜ áù›=:Yèk«ü€˜¯Þ’4Ÿyõ~Ð}£9kÎKšÏÌ+¬/3ȉA§ôzõ½îR^ÉÊÌ-u´5ú–F2rJ¤-f-Z©9•õÕæLì¹dFßÿ¦Û~k8e¡¤[·nååå\.·¥AèW–ŸŸŸœœÜÒQüÖx|îEïµìºª^Ž“ŒuÚÀ“·Ç¹õì:nmo§©-úEpëùõ<¾HÔ¬‘¥Ïñ J*)¯éÛÍú[ù¢˜ ŽËû7útUNF²‹ƒ©÷Ëh6§^Zê;ÌZ ‹ÍkÃoi$(2/Z›ë6§²ƒ~xãäÿ¬Û~k˜"ôã(++·týâX,VK‡ð»ùu\–S–J¥‰—G$ù°ëªÀÞ¢0èL“¡ ÞÆÜéé0‘Fc´t࿈Ï£²rKçMv%KJ+j/ÜzÓÍÉÌÁÆ(©aÕ]º—œ'ÉdôéfíæÜös­½ K}ê[XReiª=f“¦šùVEëÁó¨Èøl9)';ã~ÝmÈ·ŠËª/Ýy;f“ª²ìÕûAÁQ&úêýº[[šj‹7›å—‘Sªª$ÛÁÎhHïöä[Å•WîäÄã _x‹§õÑÖP€Ä´‚Ç~1)™Eò²R¶z£v Ñ¨–Uìó:.·°Ž_~I£Qu4•»¶#Û|ìQQÅjßÖ`P/;%™Ï÷a$¸v±/,¯d=x•Ãã ÚiŒܱÑ-d‚£Ò¯? a0hÝ;Zôqi+¾«JaIÕ•{A)™…ÊŠ²Cz·s²3 E§¯û¿I€‰u\…B™8¬³Œ4369Ï÷uܬq=Ó ÎÞx­¬(³bö)I ŠL˜•W¦®"ß©½qÿ¶ bHÍ*~â“’Y¤¡ª0f“±¾ZaIÕ]Ÿˆ¤ôB¸t'PEIVQ^zìàŽD}×®V~AIÏõ²kÐTiEíù›Ý:š;¾ÿò…¢c—_êi+‹Wöz\^Éš3±'„Åd€£­aiEíå»)E޶F“Ü»P©m0ó*8éE`"Ÿ/èÛÝÆÙ±Íµ‡Áò²RýºÛ”UÔÞð½ç)™EG/½PR3È©é¯ýá ÏõuTÈ„BÑ ï¨ —×ÅÞtx?I&þæk`BˆB¡/vðÚ¬ü’] Ë£‹—‡%<-U5¥wûÚ™¹†&<ªa—'g[uméÀ{O=yþ&aÎÄ^äïß ©ùK6]Y>«?‘æ”w¶±¼²ÖÎR¿¤¼f׉ÇN-øI&ï¾µéà}C]U5e¹ ·ßœ¿vß“x+8*}ÔÜÃùEVmtJ+jÖí½3¤wû+fCLqÉyK6]¡Ñ('®øÅ¥äKI2ØœúU;×Í%3´q ^½$+ÍÔÖPÊ-,gsê»¶»wrñnd|öÒÍWE"ÑÖ#Ë*jÀÑÖpô@§•Û¯o?úH’ÉÐ×V),©ª®åì>ùøÍÍÕ ú‹·‰sÖœ'.Ÿ¿î"8Ù·«®åLúóÄ=ß}m9YÉg}u4”n[`omÐh†FgR©”¶ftøÄ¹¿ŽËÓÓRæ „y…ï¾õâÊŠöm?´ ‰–n¾ºçäi&‹ÍÝzøáÄaÏìšA§Q (2ÝmâN …biª•_¾ùàý¤ç[µ5”f¯>'àü­€ó·Àµ«•©º÷Ëè¿¶^“’”Xèy©žÇ€Ñ¬Úhž¾ïÁó(9I-uÅœ‚rN]ý¸!/ïŸM†qèü³e[¼ê¸<%Ù²ŠÚµ{nÝ<:ŸA§Í^}ލ°f÷-ÐÑT"Bs]Îø4!ÌÌ-]ºùê¼É®dBxëIØÜ¿ÏI5QRXR5añ±.ö¦dBH¥RŠK« —ñx¡PÈ?ÿ,.9oÇÿFõùáÌ•gÎÞxM£Q)›ÞÿszŸÎú.ðèݯ»ÍÍÇ¡d¨»O<€¶FM'„|pÞÚ ÎŽmˆx|ëøþ!Év–zB¡èÈÅçщý·­õCþýûÕ`BˆB¡/VÏãÇ/¬e—gÆ€©®Yh¤mG§Iðõ±i¯0!üa¶~PP\ñp=qÒÀ›°Tñq?RqYõæC†ºµ¿ut•J©aÕ= ˆ'ÞªãòFÍ=L¥Râ|6›i€ç¾;ë÷ß=pÖgåœd K6]íÙÉÂûÜRmuÅ{¾£çöXv27p1ÌE§Qï_8¨—Fe±¹Ãf¸ÿ,Ò7 ¾w×ãr«wÝt²3>µc·ž¯¡*OÜúÜî£:I2<¾`ÆŠ3ço\¸õfú˜nÓG»Œìï8|öÁ Åat9(ô÷îÛ÷|#Îîš1eDWÍr½eúŠÓá<=!".ËPWU|L©¸´zÉô¾ó&»}uõ~и…G×í½Cf°P^É:sýõÝ ‡ônŸSP>xú¾‹wûu·™0¬3¬Ùu’žoÕTS‰D^D««ÈËJ3+£_¸õfîßçm˜4~h'*•"/+E¶¹hý¥Ñ;l]1*¯°ÂÄ@¤$%žþ³_w*•R]Ë0uï•{A‹¦öéØÎ¢s®¿dc®{ûØ#=µ¢Òê îÆ§ä¯œ3°2úðÜ¿Ï_¾û6Ê{ƒ¾¶ŠãïúVm´ ".ûÓ®ÐÕT€Â’*²dÇÑGPP\I–\º('x÷¯pXl–‚œôÏKëÿ6wb¯’òó^ÿ»áJ&„ëöÞ>{ãõäá]÷¯O¥Rž{¶z×M°·6€i£»ìßA§ÓŸæÆš/¯®$ù‹¾á7…ú‡$ðœ°`JoÈÌ-ÍýxÙ$j>LB¡Ö'.Ý?-7¬´2OAVÕÚ¤‡¹AGò­Â²ô„Œ€Â²t¾ ^UQßÜ £±N;òÝÀè[åÕZª¦öïöfÈ/I‰Lö¡ÑÝÚ•bÊ „üç!çø~·öcx|nxⓜ¢%yMËþ:jfPZ™™ìî«€ZN¥OÐi …ÒÑz¨œ´rRv°H$#±;2èL}M«ô¼È¤¬·-Ým¿‘Â’j*•¢«õn©BÓF«—ÕˆD"=-eb¤QNFrX{â­Ó×ü³óË.îEdƒ°hªÛ¦ƒ÷Oy½O;µ7ypúO¦†õ±?´Ó¹›wžFŒÒ.ìEÖ”‘fÎßÃ7 >>%Oć«ª,Ë©«'ZÈÎ/Û~ôQû¶§wL#._5oPx\ÖMïPk Ó¨…%Uu\ž“ñ§Ò¼oxêªêª~E;0!D!„Z¾€wñÑš„Ì7dIp܃‰6Ù˜t€g!瞟?ìnÿ2ìbGë¡Ã{.#^¾»XU[¢«nA&„©9¡~áWÀÚ¸›Žº9·žå|tf@Ô bA ÅÞ›>t—±Nûô¼Ÿ ÓD!‹Sé|´UÛX;ç¿ÛÑGSÅX—TÕpJÊkˆú•Õì&ž769Ǩ)ˉG«®")™EŸ&„¥åµ >L'®ŽË+*­æÔÕËJ3ÜW^NŠÈÊ]ìM%™Œ”ŒÂ÷Ýn·ãØ£>“vm\âÞµÙÇå-šÖ‡Fkdç‘HDô± I|J¾”¤„K³f¶OFU,´¦P(ÚŠäxàÎãÞ–¦ÚCz·Û~ôQqYµ–º¢Hr|JþÜI½ä¤àýwÃÞÚ`ÑT7â¾@X\ZÝÁî]Ï¿â'ÿú£¿øseä”ÈH3͵ˆ—D#޶†ðUú¸´¥Ó¨3Vœ.*1qX—ï²SÎo B„B¨5yéEdƒ’2NÖCØœÊÈägµìrHÊ zúö$(Ëk9µ, ÞÆÞ©a•ÅÞm£çhcÚã‹nätŠFcXv)¯.(*Ïà ê}ƒÏÎro¯§aeׯ5!óM=#)!cnЉB¡h«›@AYÐi ey-ñ¦Ôõˆ ÊÒ0!ü1¦v).«ÙzøÁ éûŒôÔ<<¼‘ùºtÕûì’iÞqìÑî“Göwܳf‘C@S—Ÿjp‰ºŠ|Û{“-Ë+ßeÙùežûî\RËþì&ÛŸ&«U¬u{ï\ºH¶ó¯ˆhÏÞx}öÆë7šm ?óÏ?;|áy‚ب ª’l÷¥R)jÊre•µÄË KÜ븼£—^8Úbg©·ã£û¸üû.¦ÔOf´¦f¯ßwçÖ“06§þÓúiYÅnuó-tµ”#â² 69ïÑ‹èSÛ§±8\((®ÒRWÜwú)•JY<­Q™ØQfÚ(ò³‹KÎã „ärMÿ8*•"¾fµ¼’Ó±½ yIxl&tøÚƒ+ÚšéÜ:¶`þÚ‹¬:÷×Ök ¦ôþ{áñ)²¨ù°×B¡VC¢¡€)!½Òã†Sz:Nf2¤À7ø4Шô?FT”Uk“n{/OÿH¯/M™ÒÓ‡î6дæ xÛÏ®f•”¦€–ªÉø~ž;/Œ+­ÌUUßÏ“¼„Å©I¦…òÑp‡SN¼úvÄ¢8PØ`—Wñ ÿ›;pÞä^ço½ÙrèÁ”¥'ÙœúÙz~ZÓÌHóõõU!Ñ»Ž?özå½QVšIìÏ™òr;9‘À ÓÎ"‰‘®Ô²¹®ãw”Tm[1ªWgKeE™×¡)£æú×§0uoHt†çâaCz·SS–ËÎ/ïä¾±éKˆh·,IÌ`$Q©”F“%yi¨®ýh¬rëᇫvÞpïëplËC]UÖcì6b·›&°8\2=cJÐ÷¯¿jÞ ãW^î:þ¸ß”=O/,ŸÛU¬^ã¶W×rö¬×ÍÉLIAæÉ«Xe'É ²2’5¬º/jªk8dG}JWS) 4¥†U·ó˜·¶†âD÷Î÷|# ¿¸’‘D»ý$|â°Îm 5ˆÊDB8ÄíÆ±ï6}?“”k £*'#IV¸ëÁÅ©‹ÉbJЛyæD£»¶ëßÃö¾oĦƒ÷7¼ŸžSriß_ÝÚï ¦G!„ZêÚÒºzhZÙ ¨*êÊɨˆDÂü’0Ô¶%²AÐT1VW6€’Šì/½—­i/Mk ÓºÀ©«!–~·ž tfƒrCR¼úvD>STZM–””Õ|ZM^Vjþd× ;ÓiÔ ·ß4Ñ`[#¯ƒsfO虞]š&úê–U,ÉdˆÿÓ lpß ˆ40ÐQÿà¤Ô¬â%ÓûΟìjÕF[SMAùó‡@RóßF¤ÒiÍüÁ¶zZêŠŸŽ†£LäŠ50ÑW€äŒÂÑ~nÈHQ^Z‚A/þ8øÓ×^)+Ê\?4×¥ƒ™ž–²¦šÞ0ßæry,±ÑÎôì’òJVƒ£í5Tåÿ^0äþ©E"‘èÒ@¢lÎ9„¾ñ9嫿 úc|KSmM5%…9 uU+ªXŸÛCås7*)¯!bkô*b¹iHTÆ•{oOë#Á k©)@Aqåš]·$™ŒÍËG•Ãb3ÕUäõ´”ÅK€8§^(qêê¥$?ìÖSËæn8plÞ !ŠD¢Èølks]½ñ¿h4FuïëxkUík‚‰Ãї„!„j5ʪòˆô5Ž9T³ÊøÙ A^FØuÕ|A}³îÑ&CD jÎQàßx\8jSC ¸|÷]²1í¯æv†§’?ËJ3)J£ëåÒ³KŠË>d•DyYI3ȉB¡xî»#>%ŠÄ³P8éõjÿ²µ37^+ÈI îÝÞç$¹…åÄ»õ<þI/¿}4NòŠÞe;"‘èðÅç ê)btb.Ybk¡×ÖLçòÝ·á±Yâ5ó‹*½ Fµ±ÐÍÊ+Ï*ë¸<›K.Õó~ž]ÒàÂZ6·ï”ÝdŸx†w¾@AÖ$ÆÇÈn'4F'æ4£ê · ‚|yúš¿x÷¾ö°f×M¡PD†z⪟ø¢Þ(>%ˆ]g?EŒ¯Ü~]ZJâñ=@K].ß}{Ï7bÅìdúWQÅJÏ.i°,3,&SZJÂÒD ¨TŠª’lFN)1[]Ë=ï0ñA#„%å5Õµœo960<6‹8¨ˆÍf¥$%¾1½ümá”Q„B¨Õ ßxü†Ù¤Ä»±NýG3ÜêêÙ #¥@§}ØtA ü÷aНÀ”b S\=¯N¼úv³'ô»„('òçÏmâòn„0:cÅìÄǧ¥®/ß&ژ뮚7ˆ¬›b§;ò¨„CrôxXû“^¯ºŽØÜÎJß7 ^EI¶_w߀8 “w«‹•e%™Œ ˆ´ ‹•W²ö­on¬ùEÿ ¬Ý{;2>{X{U%Ùס)á±YËföûÜæI¨i8BˆBµJòÚÄ©9¡da]=«šUÊ”––T€¬‚r—ÑZN±ðOCùݯ¼2RŠPQ]H òøuñ™_ …B6÷£wDãÜz–ø6§À©«¯€¾ŽÊëë«ô´ Í…çvÍ8²irg{Sò·êËfk©+^¼xþf€®¦ÒÃÓ‹‡Š­ø"MÞuîÄ^qY‡Î? ‹É\8ÕÍûìr˜eÿºñ×͵4Õòñ;~åe\JÞˆ~k oaÌ §ÛÇ0™ ¿ ¤vÆ·ŽÎ_èñnçI%ߋ˹¶ ‰Îxô"Ú͹mèýu]LõÔˆ ZêŠlÚ~” ÐiÔGg—Lrï’”^xýQˆµ¹Nä£ }ºY[šj‹…ÝeÝ¢¡ZêŠ>¯ã tÞ6Ы‹e”÷ÆQ:$¦½ô⩬±žšøù ôïa ¾¯ãÉ’Mˆo\:œB¡\¸õ¦ŽËó¹¸|ñ4·NíMÈ ìŒÜûÚ‡Þ÷ìÛÍúE`/˜7ÙÕÿú*bbª†ªü©íÓD"8åõêæãPGC?¯•ä¡ö*J²·/ìlo•^Çå³gMôÕ;Øé|¼JSCUþÙ¥¿ÜœÛ„¦<õêÖþíí¿;¶36Ô}71UFšöÀsþdWƒöèE4“É8¼qòß †ïöq±Þû÷8S ߀xñmcŸÄ3%轺4¾ ÑÆ\·S{“ž-Éc¤$%ú÷°íÔÞäÜîâ#oµ¬º¶FDïJʪmÌuŕ߷vü̱ÝÙuõQ 93Çv¼µFSMaʈ®dÆH§QOï˜ÞÆHÓ÷uA§³ ãÀcÐ6âPøK×E§<'ê´ÑëšðXy ÇœÔQ7g×U­?1:X 麂xëêÓIO`ë¼—Ä.&'î,NÍ ·ŽÓåeTÛè9*ÉkÞuàuÔuX6ñ¢šÒ‡„϶‡Ä?€5ÓîüV»Œ†‡‡'%%?»»»KJJ~[{?— ½ÆïøßÜ[–léX¾F—§j¿À¾­Á«kÿkéXþsÕµ•vóûu·¹jqKÇ‚>ú_•›››ªj Ÿ ˆSFB¡Öd ó¼c·pëّɾ‘ɾD!1•´·ÓÔÄÌÀ²ª¼„Œ€„Œã~¬Ù t¶qIy!YÇÆ¤{LÚ¿¯ìjÀÒ¨+‘ú€É·(Ék‡O@aY†xBHG!'­ü[eƒè''ÉdLÖùø¿Œœ£÷ƒ–¿ªkCøáô1ÝZ:ô3Â)£!„Pk¢£f¶xìÓÊòZtš„¦ŠqßN3;´ Ò’ò‹Çíá0AWÃRRBFQNðó„þFº®$/7Öi7qÀF¢‚¡–ͨޫÆôYc¤m§¯ÙVZJtI]{usõÇ^몛먛·Ñs¤PßýæÐÙÆÝµƒ‡ª¢SBZOÃRGÍ Ìô:P€‰™äµµìò¼â$0ÓwjÎ"ôÃ,›ÕŸBSoÙòK:åõÊÔ@}HïößÞúõà!B!ÔÊ(+hOìßø±l Éþ]f7}¹µIwk“îâ%³G$fЙ³Ü÷7¸Ä¹Ýhçv£ÅKhTzŸNÓûtš.^('£¢£nž[œ˜  ©*Äg‡UX;·tÏ¡ïÉHOmê(g—fßÞTK15P¿~hž´”Ä·7õ“óéì`cˆ{® FaBˆB¡ïÆÑj@nq"‹S•Uc¤mqéþ #¥hiع¥£Cß“¡®êéÓ¿½–5¼ŸCK‡ð#'I Ô(œ2ŠB¡ïÆÑ²¿´¤<¼ÏëybCÔÎ6ÃÄϽ@!ô“ÀB„B}7 ºä¸¾ë2ó£ ´¬@$¹:M‘¨³­{K‡†B¨˜"„Bè{2Ów"÷aJH÷rœÔÒ!„ú,œ2ŠB!„B¿)LB!„Bè7… !B!„Bý¦0!D!„jeŽ]~9ëgëyü–ä Âe[¼Î\ÝÒ@qYµI÷¿_xÞDªÎŒ•g.Þ lé`›â”´ÐóRV^Y3ë™±äÜCÿZ­¨´zŶëÃg\èy©¬¢¶¥ŸÀëAð´¿Ný$Áüz0!D!„jeîùFœ¸êWËâ~u Þ/£\–»üò‡Å\Çåí>ñøÒÝ–O±Ž^z‘‘SÚÛÙª‰:¥å5§¼^=ö‹ié`›ò"0áŸs¾‰iͬïâdvÓ;4<6«‰:õ<~Çav÷ÎÎ/»ù842>»¥ŸàŸs¾oÊÊHþø[/ÛâeÚcEó;¹5„!„Bè·“™[–™[šœQØÒühðÈÅ=:Y˜i%|pÝÞ;7½C[:´ÿÜÔQ. :mÿŸ&ê<|••W¶r΀Ð{ër÷ôêbÙÒQƒP(ŠŒÏnk¦Ã”hóbsÓ²ŠKÊkˆ—5¬º5»o=yÛÒ½ò=aBˆB!ôÛ™3±gæë];VŽné@~4¿ ¤Â’ª!½Û‘%lwûço½iéÐþsªJ²]Lo? ãÖv²qZv tuh …B¡´tÔ˜VÀbsm [äî÷N.Ê ÜãÒÁŒxYTZ½ùàýBZºW¾'<‡!„B¨ãÔÕ×ó rRŸ«PUÑ‘fÒi ‡ tT>wIe5[Q^º‰wåd$i´f+Ôqy"‘HJR¢‰:|°¦–£¤ ÓtSMGÅ©«‰@ZJî?‹ü܈ßÛÈ4ð J$'Còø5qëêZެ´$•Úxv$Š*«ÙÊŠÿ?‰Ç°9õŸûÈ*ªXr²RôÏwoEë_ûª¬¢VEIöÓò¾Ýlü‚’žúÇvm÷¹NI&£Ñw«j84UVšùéí”ešÎ?ýÚTV³ee$éÿöE ‹Í‡÷ áçPZQ« 'Å Óà;aJÐu4•¾Wk?'LB!„Z¥ÒŠšEë/y=æ „6æº[ÿ9 §-ù®P(ÚrøÁÉ«~Yye’L†£áÁ “ì,õˆwŸ¿I6ëÀ®Õcfëá©}'ï¾qd^MmÝÚ½·ãSò•efOè¹qÉp2 ªaÕý½ûÖù[o*ªX º’‚4P(”Çç–’ÍŠ‹MΛþ×鈸, …Ò³³Åþu>­óðy”ç¾;1I¹Üz¾¶†âÞíwüo´Üû¥b‡/<_µóF‚ï–s7–[X¡§¥¼yùˆIî]Ĺý$lížÛ i"‘ÈÂDkýŸî·Ÿ„]¾û¶‰®»ó4¢AÉ“W1šÀß †Ì›ìJ–¿H›¿îbxl–¬4sÌ §ÖOO–2rJæþ}áuHr-›«¥®8v°ÓÖ¿F51³ñY@ü_Û®Å$æòø ­u‹†ŽÜ‘x«º–³dÓÕÇ~1y…L º¹î¦e#úv³&¯‰Dÿ¹wôÒË‚âJ-uÅe3û}Ú~e5{Áº‹Þ~1eµJ 2ýº[ÿã9Q<}êØÎüƒ“?MÓ zŽÛ^ê€QóK0hnÎm/ìåó:nÄìƒÏüyíAð‘K/àù忺9™@naÅ‚u_‡$—VÔÊJ3;ØïY3¶•>Ñ`~Q¥•Ûªm+FYšj/Z)*!GZJb¡‡Û–å#’3Šf¯>÷òm¢”¤„{_ûã[I2I¡Ñ™`k¡·rûõWýÊ+Y:*×Íu²3&ë䔯Û{ûžodYE-Fu´1Ü·v|§ö&PR^cÖsåÈþŽ'¶M%*³9õ¶ýÿ–•fF>Ú@¶0`êÞ È´¼·{$Ã˶x¼êýx£¾¶ŠÛÄÄß.Ý}{ÿY$ì_7aÌ 'hå0!D!„j•Ü&îbJÐ×ÿé^XRuêÚ«¡3÷?½°¬gçw‹¾&,>võ~Ð̱Ýô´Í/ªÜrøAÇa¬·j£ ÕµœV]E›¨ÌâÔ×°ê6¸1ÔÍ~ÂÐΧ¯ûo9ô@YAféûÄÃcÙÉ»>ýÑßÁÚðÎÓð‹wÍ5Ç é¤ÛØøIFNIכ븼i£]”e®= é:rsƒ:ûÏø,ÞpÙÂDkÕ¼A2RL߀ø£—^¼Lˆ~¼Q‚A€ªNU gÌü#1I¹cwTS–;pÖgò’úÚ*Ý;š¾ð|ÞÚ ®]­VÏÌ_x>jî¡5 ¯[4ôÓ¨ø|Á–Ãu4§éF”D%ää–‡Fgêh*9’ƒØÔDÿàäBz;·Ý¼lÄ ï“^¯˜LÆÁõ‰wS³Š{JK1·®¥§¥üØ/fßiŸ”Œ¢û§7úyÝô5ï°ž–òšƒ¥$%îùDŒ[x´[9©Êj¶Ã`ÏŒœR‘]Û·5ÈÎ+;{ãu¿)»Ïìœî1Ò™¸ü;nl?úÈÚLgÎÄž1‰¹ÿÛqCNö£MVXl®Ã`Ï¢Òê•sÚYê…Deì8ö(,&+öé&rĬ­™¼sk@CU~ÜŽ¯CRB¢3zv¶ÐÓR&º¢¦¶®†U·jÇ Èôqƒ;²8õDk ©ùΣ¶°9õŒïaj¨‘˜VpÊë•ÓРϯ¬pvlõ<~U çìבñÙzÚÐáè¥ÛŽ<¬aÕ]ºhf¤¹yÙï—їユd2NmŸö¹ïyXl¦’‚ÌÊí׳òÊfOèYRVsâªß²Í^¯®ý¨˜Và2jK «nú˜nmÛèÄ$åž¼ê×ßcOò‹mjÊr rRU5œ¤ôËeO]{•–UÌ ÓD"1ª™–Uìý2z@OÛO‡FKËkªj8lN=¸÷uÐÑT:w3ÀD_͵«X›é|•[š!„úU¤¤¤\~¯¨¨¨¥ÃA¿»°°0ò Éáp¾c˦îCb<‡(¹ö0 =ú{ì!^¾|›†K6]!/y˜†c!^Þ~†ÛŽ<$^ú¼ŽC¦ÙŒ‡Ï£ˆ’¬¼RºÉ4ó^+‰—ÅeÕ`èá±ì$Ù`Ça¦Ó+ªXF8gÍ90ô8åõŠxÉbs]'ìC× ;ˆ’¢Ò*Y«?Œ»-oaÊÒ`èqà¬ñrË¡`è¡å´81­€(¹ç†#^––×(ÚÎíä¾Q ’7bšÍÐë¼D(~UtbzŒ[xD¼°ª† †Cfì/LÍ,CŠÑÔãW^%µ¬:•öó%Íg’÷>û†éô”Ìÿ©qÿã0ô OýôÖÜzž¡ó2¹¶³ Š+ÉÂëBˆÖVl»†ûÏ<%ßJHÍgšÍÐSWOô¿”Å,ãnË+«ÙD…§þ±R³ÀÐã±_ Q²vÏm0ô ?A‘Hô÷î[`èq⪟x$R³t;ýù¹¯Öª7ÀÐÃ÷uYrÓ;”芻>áâ5‡Ì؆OýcÉ’G/¢ÀУˈMÄËŒœâB2€à¨t0ôC)KO^Çå©;,dšÍàñÆ#e¬þ MuìYR^Cª;,Tm?Ÿø™Ç˜÷Z)e1+8*¼jéæ«â_?u‡…mz¬ ~æó†ÎË(FSÁУ¸¬Z¼£¼}ñLHÍ'^¦d¡ÇŒ§Eß@üU%%%ßÒÔw›Ê „BµJöÌ$Ws ïë ¢$ëã+‰àʽ·0{BO²rWÇ6²ÒÌ·iM4¸`JorÒ©¾¶ŠUœ‚râeN~9é©’•]:˜ñø‚â²êF›ºý$\Q^zÒðws;¥¥$®š+^áÆ£ÐZ6wÁ”ÞâË—Ïê÷}#Åkî[;ÎÜøÝŽ ÄÊÜ÷Q=ö‹©¬fÏÛœ×*-%áÜÁ,§ <¯¨òÓ¨JËk@Aî³ ÞÏaæØîÄÏ2ÒLgÇ6u\^Ye-Ôqy·Ÿ„»vµ25P'ëá†7ÒÉñ)ù™¹¥£vÐTS Göw$"?sýµª’¬øçea¢5¤wûü¢Ê°˜Lxò*–SW?yxWrå¡›sÛÅÓÜÄoqåÞ[]M%ñiÃïãI¯¦ 'UQÍnf¦vÒ»=ù²¼’uÏ7¢c;c7ç¶daÿ¶Öf:oÂRË+Ydá°>ö3ÞÇv°5RRQQ’=½c:ñàL zWÇ6Üz~aIU£÷%v”‘d2®˜­ú~îk=O®¢<{ãuRzáŠÙ:Ø‘W?gç¿;¡QWK‰lÿÚÃÌÜÒ±ƒ  ¸áéëþªòCÝì¿´[~ 8e!„B¨Uß©…F£ši†§–VÔª)Ë¥fÀÄÅÇÅ·ùŠDy…M4Ø`¾œŠ’ltbŽP(¢R)Æúj :íúÃ5ó‡P©_àó:Ž)A7ÒSû´z¿¨´ºS{ñ½=ˆY ¤”Ì"h°øÐÒT›N£o5•ƒ.'#Y][G¼$s׉Çǯ¼$ëµçV|:—•Ø1…Øx¦9>í¨®á¨)Ë¥g—ˆD¢ðجNîÉ Ä¼ÜÂòO›"B%ϺW]Ë).«vé`Ö ‹l,t¯? IÉ,êêØ†HÈm-tÅ+ˆ×„™¹¥L ºx<r >úÐ¥¥$ KªDïgK6S#Æ>>ýÕl,tc“óR2‹ˆÅŠÐ`E¥œŒd=/¾=±d”ÅnüPMbvë$÷.m ßPR^SYÍîÑÉ‚xéu?È9À„:.Ä2]MåðØ,6§^ZJbDZG=;[éÝþʽ ‚â*[ ½{¾y…–¸·È±?ƒßô±B!„~1R’ ~˯®á@7'3ºXJÖ³³¥±¾Zó$~k‰DEyéÞÎm½_Fëv^ÒÇ¥mXLflrÞ¾µãÝα–ʼnDŸÛ©’@ "5ØJ„J¥0™Œ÷Û~6N<©ªa€­…nƒ¼TZJ‚ÜÚDœl“¹Ç¿w…ïw#­®å€–º¹h“0¤wû‰Ã:zmYE-|f÷ÎF»¤%%àý&¨ÄíšèRv]=/PW•oOoç¶âƒxÄãKKI|ãyUDÌ Ski)&|ظµŸÞ¶é@ˆÒqC:’%á±Y@žB‘¦£©Ô ùˆËKS-⥮––T¥eGÆg{Ÿ]Bü1…!Üzø¡¬4sÎÄ^ßÒ!­&„!„B¿‚Ü‚ I&ƒ˜Vg¤§±hZÝï´c~tbÎc¿˜³då•%gÙYéï_7ás§–++Ê0%èäÄÎF‡^dæ–ŠïYQÅb±¹âsÿšf¬¯CÝìņ&ó ‰äªbªmó)¨±¾úÖ¿F6§¾¾¶2¼Ï@ÐÕR¦Ñ¨™¹¥ ʉùºÄȘ¶†"ä~~€WNFRUIVZRâ_ã©®­kþ Ÿâã+ksþ‡˜¿‹°˜L:JìJÎG[#àÖóYlnƒÛ ÂÛOÂ¥$%ˆ­P@Wó]çï8úÈÖB¯_w›äŒB((®zø<*$:cãÒ᪟?Êâ—‡kB!„Z¥“^~äÏщ9É…ä™íÛêÀçÎâû A‘é"‘¨{Gó+f¿¹¹úâÞYŸË v–ú)™Eâ“?Oz½¯`om×~tÀ÷ékþÐ`D« Ä0àÍÇÍ}Lb½_zv‰x¡$“A¡Pr›œLû) Uy-uÅço≱²eÕF‡J¥Üô ?dž¹…B¡ˆN£Ú˜ë&¦D'æoqêê¯ÞRV”!:Š˜[ûðyY¡²š}ããÏ·•~jV±x#Ÿ*,©âÔÕ{Âf¬¯¦ 'õäUL¥ØrĬ¼²çoâmÌu5T忱}‚P(ŠˆÏnk¦#>4&6BÈ” ËH3‰°d…ýg|²óËzô&ç#„Þ~1¾ñýÑ´Ô § lÅö뺚JK¦÷mfHRL4™™·F˜"„Bµ>tuŶë Ö]ŒNÌñ J3ÿ¿ìÀ¼É®ê*ò«wÝ<åõª´¢–/¦fÿsÎ÷ì×_w»,T”dLÝÛ¦Ç ‡Áž.£¶Œ™äè¥Üz~£õ§v€1ó¼ KÍÊ+ûkëµe›¯Š/zêÖ¾•þMïÐ%›®Ä§äç”:ÿlõ®›Zꊋ§õifTÎŽmÜœÛÞôýkëµìü2¡PTP\yå^ÐÚ=·­¯(/mb Ÿ’/^(Á ëj*Å%çÝðMÉ,JL+hæÝ×ÿ9¬ª†3hú¾ðجz¿†Uç”´`ÝÅF7Ú1ÐQ5 CjVñ¸…G£r’Ò ·~héú?bãâŒ!3ö?|U\V™ÞßcOQiõêyƒåe¥À¥ƒYC»>›ÞÏÌ-}ù6ÑyÔ–¬×ÿé.‰†Ï>øüM›S_Çå…Æd®Þu34&“¬—œ­ñu$™Œ•s²9õ}&ízœTR^ó, ¾ïä]|pûÊQߨ8))½€Åæ6ˆ6,&ÓPW•<\ÑÙ±MaIÕÚ=·Ë+Y9åžûî¬Øv­•þêùƒÉKˆqò='Ÿ訌Üäd$e¤™ço½‰KÎ;´qRó—•jª)HKI¼Hó~—œ—‘SÒÌ f8e!„B¨õ1ÒS[6«ßBÏKÏ? …²qéprH9ɧOYzrÆÊ33Vž¡P("‘ˆF£î_;ž¨ð¥KÈ4TåõÔè4jßî6l·²šã’|íað“W±·-ø´þ̱Ý#ã³^zA?¨¤ óðÌŸË6{‘(Êíc &ýy|ï©§{O=% l ¯þ3§ù¿À¹Ý3¦¯8³ó¸÷ÎãÞÄcÀ„ÆVñœÛœ»—œ×Vì¹5 ÏYs~ÔÜC°iép2—h´ÈÂ飻–Tmâ-¶ã£ÿœÞG¼»úMÙý÷î[ï¾Cz·_»pñ‡BÓs»g,ZÙuÂ29)÷¾db›YâœÀF_ ñ¯ñã§_˜¥3ûUV³w÷î>fQ"/+uõŸ9ý{ØÂwB :X’%¥µÙùe#û;’%ûÖŽ<}ߦƒ÷7¼O” ïçpxãdb¯‚®–2pêê—ÌèK§½ÓRSHÍ*?´“øî©ÿÚ!4uÕÜAkvß0u/œØ6uƘ/X—ûs¢|é„i„Bè§•ššònš«««ººú·µ‡Ð7 OJJ"~vww—””ü¶ö>ˆMÎc±¹Ûgç—=y+/+åhchbÐð Ï­çGÆg'grêêu5•;µ7!Õ°êüƒ“í­ ˆSXl®_P’¥žŽØšÃ˜¤ÜâÒjâîë.ºð<ôÞ:b#B»kã’óŠÃ¨)Ë5gJfQPdº¦šB{Si)‰è ¦ÝÖâÃ΢B¡(&)7>%_$ÙX軌’ï–T…Çf¹8™‰ÿrï’,-)Ñ`Ô(&)7)½°¤¬F]EÎÑÖˆX Ø¨»>ÃfصjÌÒ™ýtipdºŒ4s`/;Yi¦@ ô ˆ71P?U"-«8%³Èµ«•øV:ùE•щ9™¹¥2ÒLKSmû¶â[h6 ŠÂb3ã’ó¨TJW‡6 >²ÒŠÚÈøìŒœ#=5;K½O{•Í©‰ÎÈÌ-íÔÞÄÜX³–ÍõNrîðQÿTT±"ã³S³Šé4š©¡z[#ñù–ÝFo ‹Í, ÿG|´V\naEtBNNdZ^]Ëy’â`cØèDÐÜŠ¨øì‚’*scM;K=b<“ü†øÄ뫉ÏP ŠL …íMÅ¿$iYŽۊô„¼ÂЍ„œnÍÉãU긼çoÚšéˆÄõ<¾_PRV^™¢¼´¥Þ§bE"Ñ‹ÀD¡HÔ£“y—Èøì¼ÂŠž-›þñ¡7/,&3<.KEQv`/»¯Ø›TüUnnnªªª_ÚÂ÷… !B¡_&„è§òß%„?^Ça£sòÞîߤ÷Ä~o«bŽ|ј^ËâÔÕk9-¶6×}}}UKÇò£•”×h;-ÞÏÑëàœ–Žå·ö³%„8e!„Я)111++«¥£@¿µÒÒÒooä'áâd•>bÎÁ Ã:[™jWT±®= y?wR¯V” €”¤Äœ‰½¶y˜˜V`a¢ÕÒáüPn½á „‹¦º}{SèW‚ !B¡_S^^^K‡€Ð¯cËò :íÜÍ€™+Ï•J1ÑWßû÷¸y“][:´/¶hªÛÅÛoûÅün ¡o@|ÿ¶]L¿½)ô+Á)£!„~………/^¼hé(jDkŸ2Šú^~¶)£xìB¡_‡¦¦¦®®î—nŸˆBý¶pÊ(B¡_Š‹‹‹@ -B•ššÚÒQ „PS0!D!ô«¡Ñh4íÛÛAèá÷!ôóÃ)£!„B!ô›Â„!„B!„~S˜"„B!„Ðo B„B!Ôš<|“ùE—G¥_º([6ò§þ±w}"Z6†¦…Åd^¼Èãã¾\¿LB!„Z™£—^ü±ê\-›ûEW–TÍXyæÊ½ –ÿ›ðø‚AÓ÷-Ùxå‹®ÚväÑÄ?—U·lð =/y,;Ù²14mÏ©'“þ<ž“_ÞÒ B„B¡Vf逸ǯ¼LÍ,ú¢«Bc2Oy½:éåG–$g¾L‰D? æZ6÷ɫؒòšÿúF9%¾ñü– lY¡1™ÿ:ˆš_æó:&„!„B­Ìù=3¯˜mc®ûEW¹v±¼°wÖ¾µãÉ’ÿí¸ÑküŽŠ*öˆùE`B¿)»/Üzó_ßhûÑGnw¦eÿ€‡úižwxÄìƒM×Ù{êiŸI»â’óZ:XÔÂðB„B¡V¦c;ãŽíŒ¿ô*)I‰‰Ã:·t졟 &„!„B­Ì®ÃS/íûC’Én=ÿÀYï—1y…æÆšŒï1°—ݧW•”×Ì\yfk»cºG¥ï9ù$82f¬<#Á éi)ï\5†¨YêÛqôÑÛˆ´ÒŠZ;K½i£]º9™“í,ô¼¤©¦0cl·Å.GÄeÜqÝ¢¡žzáö›°˜,‡k¬§6ѽóèNÄ%S—Ÿ"†ì.Ü~•N¡P6/a¬¯F¼ëõ øö“°ø”|×®V ¦ô¦Ñ>Ìbc±¹›Þ–* ûw·ùszßÏuKbZÁúýwC¢3`ɦ+r2’ rÒǶL¯sýQÈù›%UÛ›x.¦¢$+þnD\Ö©kþ‘ñÙ\.ÏÖRoòð®Ý;~xðýg|ü‚’.í›%%)A”–TÍ^}n¨›ýÔQÎd×í>ñøUprEË@G…ø€ uU·­E¶#‰_x~óqX=ß³“ÅšC˜ýNþÔ?öÚÃÈølI&ÃÎRoÞ$W«6Úä»K7_­©­;¾Õƒ, ‹É\¿ÿî©n½»Z]{|ëqXqYµH$»àts2Ÿ;©—xûéÙ%«wÝ Í€•Û¯+ÊKKKIœÞ1]¼Î§ágo¼Î)(ïØÎxÝ¢aªòâïG¥»ü22>[^Vªc;ã³()ÈügßwôßÂ)£!„B­Ì‹À„[ÃØœzâ帅GWn¿®¥®0Ô­} «náúK^UVQ{×'" 4ØœúÄ´‚V¤d&¦äUÕ²òÊì®Û}ò‰†š‚K3ÿä^ãwœôzE¶óðEÔ£—ÑnwÝy!ŠüC’à©l—›ûŶ1Òp´1 ‰Î3ÿÈž“OˆKÒ³Kr + ¸¬:1­ 1­@ |·ÆoÖÿÎŽ]p$·°ÂÍ¥m=OðçÆ+n“v …ï–5Ö²¹.£·n;ò°°¤ Öî½í:aÇ纅[ÏOL+¨¬fwLL+ÈÎ/¯°hýå1ó”U²¸\ÞÁóÏ:ßTÏã“ïžòzÕÉ}Óå»oåe¥奯? é9nû¦ƒ÷É þ!É·Ÿ|èv(­¨½ëñ&,…xÉ©«ï<|Ó–Côµ•Í5Ÿ¼Šõzœ”^X^É"/!6ÅY¼á2äVl:xجâA®Úy£ß”=Þ/£u5•(§¼^ÙZwõþ‡­€¼_Æ4ت4-»øþ³È˜Ä\(¯d%¦ðxO@tuiEÃu›õ<~bZAE 2rJÓ 2rJÅ+¬ØvmøìƒÅUðÈÅÜ7Š?õékþÎ#·ø';;šik(î=õ´Ý€uÄç‹Z%B!„ú„……]~Ãá|Ç–L݆eµ"‘(¿¨ =¦¯8M¾›[PÞèU ©ù`èá±ì$Y2|ö?d;¤1óÓM¦…Dg/kYu]—*ÙÍ«¬f%ÆÝ–ƒ¡‡¡ó²¬¼R‘HTÏã‹D¢˜¤Ü›Þ¡B¡¨S\V-×v¶A×¥d³÷|#ÀÐc÷‰Çâ÷zô" =þÜx™,Yºù*zœ¿@¼ÜuÜ =æ¬9G¼LJ/0èº =\Fmù\çü±ê,z$¦ˆºÿñz¨¶Ÿ›)‰„Bᨹ‡Äo”SP.i>Ó´û_dïeä”èwYJ7™–’YD”Œ˜s =JËkÈfc’rÁÐcÆûÎ?rñ9zœ»ùšxùòm"zÌ_{¬oÞk%zX¸þ/§ \$±9\‡Áž`èAö¶H2zt³µ†UG”¼H“µúCÍ~YbÙ{•ºÃBñ§óz†{N>!KŒ\–ëwY*jÒâ —ÁÐ#".K¼pü¢£`è¡d7ïmDQ2yÉ 0ô8vùñ²°¤JÖêç‘›Ù.Qr×'\¼пJII!ÿËPRRÒÒáˆp„!„B¨ÕËÊ-%ÙÓÑTúêvò‹*½ïçèhcH”ÈH3û÷°­¨b‘ã`@£Q½ÎÑ×VÖf:Ãû9P(¢‚š²\;+ýÜŠ¦þÛwÚ‡N£®ÿÓ,Ùß<‹"^žºæO§Q7.N¼43Ò|~yÅW?ݽ“‹Ú·5 …2k|HL+ Þ:tþY—·nñ0²÷ uU—ÍêÇÏÞxÝÌöR  ‹5ñ²›“™’‚ 1…•$Éd¼¸²BWS ¤$%&ï"Æ®ãÞ°gÍ8Yi&QÒ±ñ¤á]JÊkîýÀ ožG.R5®»x„'¯úÕ²¹k !çÍöën##Í|ð<ꇅ‡¾/\CˆB!ÔŠi©+éÝþžoDG÷K¦÷9ÀQ‚ñõ¿à%g@^QÅÊí×ɬ¼2HÏ.!K”dœìÙÕ¦¬¢6<.«¨´º–UW^Å„õ<¾Mâs·KJ/‘fn›–))Jzö»=B3rJ,L´ÄWúéi+õÓꪒ?k«+9™“ØlS|Å ¸t0€äôÂf¶¯®"Ïâ' ë …%UÕµ"m&I2šj ÂÐP€òÊZ2 Yi¦½µø%ÎŽfG.¾Hjvßî£ŽÒø¨£ˆÌðžoÄ‹À²Ž‚œT~Q%›S/-%ñE7B?LB!„Z·ë‡çn=üðà9ß ‹-ÛâujûÔþ=l¿®©ü¢JÈÎ+óûxd¯‹ƒ©£­Qò¹kΟ¿ ¶†"S‚ÞœEeùE•4Õ/(I¼°c;ã~Ým º–SÇå)+Êþk;_N§¹X‘ˆVMYN¼‘ˆ–VÔ6³ÍIû¬Ý{{Ù¯¸”˜à»E|§ùˆ “ã‡vß³96ì¿{âªßòYý×-*#Í€S÷z¿Œþ×Ûqêêo­iô]9I ýÓ=Qþ Ĩ]QiµÎ‡½’² wC¥Q©À­ç®‘»>tÍÉÎxÏÉ'B¡ÈÖRïÁ©Å½ºX~QÅeÕ KÊkÀèýJ§Q¹õ¼Ð'ÒÕT€Ëûÿ03Òl©Ð÷…kB!„~ úô1ÝÖ.RÇåE¦7ç:Än“3# v"ý"ýb¨TÊÆ¥ÃeÞ/~‘Ã^ïîEmp/03Ò,.«IÉ,j´M …bb ž˜V@dD„à{4bD«ÁþñàO^ňÞ Ö†ÄK59ÈÊû°!gPDšxý›Þ¡fFwO,d'g'½·îK‡jÍŒ4Ylîëûÿ¾o$#´ªÊrU5b3Õwa|Ò'tU¼BãÕØ'ÒÌŽ Mý¢«ÐÏ B„B¡VìMXê§ádö“” bƒZM#–‡=|ĹZêŠc9½MÙqìY­†Uwå^PÓM)+Ê…"r]ÙÁóÏ|^Ç}|/%xù6‘Åæòø¾@Nï#‰f¬8C¦|"‘È?$™ÜÂdÂÐNB¡h¡ç%â|ˆ§þ±ƒgìÿ—‡RW€G/¢É‡jŽùSz3è4Ï}w‰Óùˆ{í>ñX_[eÚh¢„È ·~Èã x|Á‰«~¬>'Þˆ©¡Flr^±Û­¿´zçÍMï_¾û–8Û£™þœÞæ®9ŸSPN”œôzuÃ;¤G' r}#±ßÏÆî@-›»z×MòxñO¶º–Cœò¹N >ï—1"‘¨ù5clwYiæß{nEÆg“…‰i/ß&6ÿ1ÑO§Œ"„Bµb™¹¥ÓÑT25PÏ-¬HË*;¸c‡&×û‘Æ éxà¬Ï¢õ—wŸx"Á ¥¼Ü»VMÉ,Z±íúž“O̵*«Ù ©ù4uD‡&¶«Y>«¿Ïë¸S÷v°5*(®¬aÕ¹v±zêKV°µÐµ1×}š¢ßu©@ ¼wrQ7'ó~Ým–Îì·ç䃮ˬÚhK0èÉ…eµçvϰ0Ñ€y“]ï?‹¼z?èžo„ºŠ|fnéÊ9›ž‰:z“ç¾;ÿ¹wæº?‹S_y°9]aj þÏú‰‹Ö_r쩯­Âò‹*õµU®žKž?aX§ƒç}ï?‹TwXH¡PØîñ-³V%Y5wÐ¥;qÉy…%Uœ:^Qi·ž¯¢$ûòêJk3æ„ѯ»ÍòYýwxlÐu™©zYemy%ËÞÚàôŽidÅÓú\¹÷vÏÉ'—îÖ°ê$™ŒC&Í[{A¼‰î]ü‚’ºÙ¦¯­ì`cxóÈüOï5r€ãª7v÷¾|ïmy%‹p¬9j¨Êß:uÖÿÎ8Yof¤©¦,—™[š_6cL·,šÓúÙÐ<==[:„B¡_PAAAYÙ»ƒÑ---éôïö‡x:ff¬Ù·›5Jµ±ÐíloJ£RÀÎJÿs®ž?˜<þAœ„]$õïnC®þÒÑTêÝÕJJJBMYöñ=m,t@^Vjú˜n&úêšj B¡ÈÄ@}Òð.ÿ¬Ÿ¨ò~s*•Ò±qW‡6â뫹÷µ—’”`2zÚÚ8ÉÁÆ@]U¾‹5 …B3¨£”$CANª·sÛуœˆD«‹u—¶ÚŠT EEQ¶‹µçâaCÝì‰f%™ŒñC;é©)+Èt²7Ùò×Èi£\¨TŠƒQû¶úv޲¢Ì W;I&CYQfæ¸î6†@§QM Ôûu·¡¿ß …Á ‰D¢¾Ý¬Ûi%Ž6†#ú;êë¨ÈJ3Û[LãòçS ²e:ɽ‹š²œ’‚LßnÖ{׎ï×ÝF õvnÛÆHC$¹NØ!‰"mX9gàŸÓû,ÿc€šŠÜ­ÇaU,â8 *•êdgììø¡ë$t m@O[b´Ü\Úöqik £"Åd¸t0›=±çÞ¿Ç©*}ØíFNVrüÐN*в rR£v8¸~b;c¡PÔ_¬{kks]9YI}m•Ùz6º TANjX{¦]YAfú˜nͱ :ÍPWµ[2ùgÐiB¡¨‹5‘¢€¹îø¡´Ôe¤$˜LF'{“¥3ú.šÖ‡.¶Í jByyy~~>ñ³‰‰‰´´tËÆCi0½!„B}áááIIïöÏtww—””léˆÐ(1­À²÷ª™c»ßêAÖ²¹òÖsö´½jqKˆ~©©©!!!ÄÏnnnªª_³ÿÓw„kB!„úV:šJ :íÒÝÀ‡Ï£Ê+Y"‘(3·tæÊ3"‘hÔÀ-BŸ…kB!„úVr2’ç÷Ì\´þò éû@‚A¯çñ•d¶þ5ròð®-BŸ… !B!„BßÁØÁGôw ÎÈ)(çó…Æúj6æºä9ýœ0!D!„Bèû`ÐiíM;·t5®!D!„B¡ß&„!„B!ô›Â„!„B!„~S˜"„B!„Ðo B„B!„úMaBˆB!ô{)­¨-­¨%_–UÔ—U·tPßA—wúšjVquD"Qv~Y—×ÒÁ~¥œ‚r›ûÝ›åñU5ò¥×ƒà Èô–~Vôƒ`BˆB!ô{±¸Îq°'ùÒeôÖ¶n«ÿ»ÛUT±Îß Hk2Oû..Ü~3}Åé’&“[¿ $ƒ®Ë¶~ø_ó_HHÍ×ï²t鿫߽åÉKN(ÚÎ-(®$^žòz5jî!¾@ØÒOŒ~LB!„~/B‘H ö»¾@ Eß«ñz_$ú¨µËwßNYzró¡ûÿõsí?ãck¡×ÙÞ´‰`ˆ[AªÃã „.ÄÇ$øò4¢M2œ=¡gNA¹×ý –îô#`BˆB!„¾¸ä<¦ÙÌÕ»nŠºvµòé{ãµ¶†bë7a©÷ŸER©”Ñì,õ 1­àÂí7B¡¨wW+×®V .LÉ,òñKHÍ7ÖWïÕÅ’¸ûÅÄ$å@Zv1|N&Zä…B¡èþ³ÈWÁIÚêŠÃúØ›¨7h9".+ ,5)­À@Wµc;c—fŸÞÚûetzv‰£­Ñ¨>}¨^-o={ì3yx×/úæ VB„B¡V¦º–3~ѱ‡Ï£$tI&cÿŸ îE<\/'# n¿™»æ|-›«¤ S]Ë„íÛ\;4×ô“´ásO^râ®O„ž–²¼œÔ³¾ÚêŠwŽ/´·6 *¤f˜}0:1GFš)wŸxܯ»÷Ù%+·_'vø|ÿ, n¯§¥—½tóÕu‹†’ a@hʸ…Gs Êåd$ëy|n=_GSéâÞY=:Y›I£Qg®<#Šx|HôxÌ §«ÿÌi4æV]RzaÏÎdÉê]7Ó àåÛÄ—oÀëà2!Ì+¬è1vÛ›°TI&£ŽËÛôÏýg—ÿ"“I›;}Åi¯Á:šJÊ 2Ïùª©Èß<2O|u¢¸•Û¯;ÙûøÇí:ñ˜)AçÖów}tûøÂ¼ÂŠ…ž—(àÖó·y¸qéð5ó“W¸ê·ÐóF57Ö<ëÍò­^— ÿßܰíÈC¿ $‹É ‹É€žÈ„°¼Š5pÚÞÇ~1Dðë÷ß}tv‰³câ]¾@ø¿í×wŸ|"‰T”dË*j`ô@§Ó;¦ÉH3‰:žG]p„Åæ2%èÜ3>Îø0%&¶–z• á/×"„Bµ2Ü{øÛZy°:æÈß †DÄeÍúßÙf6¾vÏí»>gvNÏ~³;öɦà;kË«XÓþ:EîÎòǪ³ñ)y§wL¯Š>\wôÆáyE¥Õýx£Ÿ×J˜;©WEÔ¡Š¨CÃúØÚ~e5{ÈÌý,÷ù忪b׼¸wVIYÍøEÇØœz²ZaI•Dz“ÛWŽ*‹<˜´·•¾×ƒàço9*!G$Yšj“%á<n¬€YãzÁˆƒ½ñZJR"Þg3+þØö•£JÊkÖìºE¾»åð¯Á×OÌ ÜýxcÄ£ œºú©ËO5±›ËÃQgo¼ö>»„püê?søáÄÅÇæ­½°sÕ芨C‰Ï¶ª«Èoúçy¼Gd|öìÕçzu±, Ùvß3?h¯k«U;o„ÆdÀ“óË’_l÷¾Dðó&¹’÷ºõ8¬´¼&ü';áØ™ÓkXuËÄö=|áÙ®‡ºµ/¢¿ãGönÑGد» ù³©””Õ4Úfiy ÈËJ53†î,¤$%ˆŸ©TбžZY%‹8ã!1­€SW¯©¦ Þ*J2’Yô¹ÕUäÛYé“/ôÔ o·ñèª@Iù»ø#â²4T¢sÈ[ûñÜ´NíMÄ×[šª‹D"bjhFNIIyMßnÖäìP¢[º9™×°ê2sK .%¯Aߪ*ÉŠO P(r2’Õì¯úQk‚kB!„Z“ôìbhtïÇZ6·¨´ÚÉθA¹¶†"dç—ýkã9%pîfÀ¹›âå …³JÏ) Õ¯ßy2-«˜A§5hA[C ²ó>!1Ê}W(ú¦s%™ ‘H$‰¨@IÏ.¯Á^‚ô€xÖ4:Úh ‘sòœ‚r¡PÔßcOƒjÊŠ²Í»ÃDfËç ˆ¾€O7ÈÑÑT€ìü2õÜ‚ ²¤i¢oëUÔZ`BˆB!Ôšƒ?5,ΧoI1tµº¶á[5¬:xŸ6Èy6-¾tf?ñr*•"Á 1ű¦¶î«ã——•äñœ:ž´”ćk9ÍŒ°QÄôÈOü«š’€Uóý½`H£=ðíè4ª¬´¤¦šB”÷†o}º¹Ë‘“•€êO>êh©+€Œ´¼ëð¦rB‘HTËæš|CæZ œ2ŠB!ÔšêªÂ'³+ 4U_G%-«¸´¢V¼<(" ÞoÒ4⃔Ì"I&Cü2jâî@Ìbmúô´ok@–½ôbÙ/â*ô+Á)£!„B­ …BÙ¶b”ûÿ ðØÓ§›µ¢¼ô³€ø’òši£\`Ù¬~7‡¹ø" 4µ³½I^aÅSÿ8%™Ã›&7qª;‰F£ðœ0hú¾®#7ïçÐÆP³¢Šõ&<5*>›—z T•dWͼjç ‡Áž}»Ùð‚§¯b™LÆ‘M“@[CÑÂD+ 4ÅeÔ5ùé£]ö²kp‹¡ní‡õ±¿ó4ÜÊmU¯.–lNýSÿ86‡{fçŒæ/Òk@MYN_[%&1G$‘©®"om¦•ÞuäfM5…Éû¹Ð¿vïÏ }'ïî9n»{_ ­ÊjvPdZpT'ñø7Né$-ôp»r/hï©§o#ÒÛÐhÔø”ügoâoœDœûG£Q»w4þ&Á~§…‰–›sÛi£]šÓòž5c]'ìœøçñ“^¯,Mµ¢r^‡¦´ok°zÞ»#;Û›öïaëý2Ú¶ßß.Nf¡Ñ9åCÝÚßõ‰o'&)m É’¿¶^«aÕÜQ¼ýhžžž-B!„Ð/¨   ¬ìÝ.)–––túwûC¼™‘¦›KÛ‚âªøÔü̜ҮŽmNn›jc¡ L ú´Ñ.€¢Òê Èt6 §í•³‰S(á©ú:ªä¹|!Qê*òã†t"^é©Ô±´¼6>µàE`B^a…¥‰ÖÆ¥ÃɃÑ]:˜Yšj•TEÄe•W²†õ±?·k±ŠB¡ôìd‘žS’VÀã ¦Œìª¡ªÀbsÃb2ö²#"€1ƒœ4TÊ*jƒ£2Xl®³c›Ó;¦»9ع4!µ€/LåBNÔ¬çñÂRzu±ìØÎ¸Ñ>IJ/ðIÖÇ^SM,ìÙÙ"=§41­€ËåOÑUK]‘]WÑ¿‡å‡}5c“ò(Ê´Q.D2©§¥<~hçòJVbzÁó7 9妆ž‹‡ÚYê5zëÀˆ4C]Uñ}S“3ŠØœú©£\ȽLKÊk’Ò Gp$fÌÒiÔ©£œ%%Ùùe~AI±I¹2ÒÌIî]¦Žr!sÎ,²óËR2Š*ªÙÝ;êªòx¢Äw‘MÎ(d±¹#‰{i©+NÖ¹¦¶.+¯44&SCU~Êç³»f'‚FrŠDùE•Éé…íM/왥©¦™[:u䇀·zœQtxã$òÂÌÜ2%鹓z1%ßë›ü{*//ÏÏÏ'~611‘–þÊ¿ƒ|/Ü>!„B连”ôn&ž»»»¤¤ä·µ‡šòÔ?¶ïäÝ[–$N,D߂Ǩ´›oc¡pcuKÇò JMM !~vssSUUmÙxp !B!„jõ\»X驉m¾Ú}ßÈV1 ýò0!D!„B­F]6³_|J~ƒÍ`ÐW8}Ý_CU~¢{—–ý¸© B!„úLíB¡P”eZ:VoÔ€+fø^;è Ÿ~Ì!„BèW Éd̙س¥£ø|õù¨5Â)£!„B!ô›Â„!„B!„~S˜"„B!„Ðo B„B!„úMaBˆB!„B¿)LB!„Bè7… !B!„Bý¦0!D!„B¡ß&„!„B!ô›Â„!„B!„~S˜"„B!„Ðo B„B!„úMaBˆB!„B¿)LB!„Bè7… !B!„Bý¦0!D!„B¡ß&„!„B!ô›¢·t!„B¿¾*ÿ‚ÚÚÚ–á#˜"„Býçrss[:„jþ¥ !„Bè?!''×Ò! „~jÒÒÒ-&„!„Bÿ ccc--- …ÒÒ „~:L&ÓÎÎîgHÿùÉÂAèÔ%tEXtdate:create2016-08-12T14:22:36-04:00´dRe%tEXtdate:modify2016-08-12T14:19:06-04:00*´pÌIEND®B`‚eclipse-collections-11.0.0.M3/docs/EclipseCollectionsMindMap.png000066400000000000000000024603041407344533200245140ustar00rootroot00000000000000‰PNG  IHDR $ó’: pHYsÄÄ•+€IDATxÚìÝ}UÕ½'nÀæÅ€„…$c /——ÂpÀe®Z*JE«Ã5ÞºXƒoJÊ "%c1S`ùRˆÔ b1ƒ‚·ìyKÒ¥„Rë¶B¤½µõ›µîïœénúåt7tÚç©Ú¥{ïµ×Z{í}ÎÇßn€¥•%€–EHZ!aha„„ …€FHZ!aha„„ …€FHZ!aha„„ …€FHZ!aha„„ …€FHZ!aha„„ …€FH€::u*\wÝuáÅ_´ç!a€<õøã‡V­Ze·¾}û†3f„íÛ·7ù\Nž<™æðè£6ËZÌ›7/ÿÈ#œ÷ÏóŸÿùŸ«=ÿôÓO§ó_|ñE£Æ™5kVêç“O>ñ!€o1!a€<• •®\¹2m?ÿùÏCÇŽÃE]>ûì³&Ks‡„c@:Žß³gÏ4—óùyÖÞ¸qc¸ÿþûñcÇrêoçΩϲ²²JÇ«†„kjw®5׸À¿ÈS™PéÞ½{³ÇþËù/éØŠ+št.ÍÞ´iSûÇ?þqúçúõëÏëçYSH¸¾ž{î¹ÔßÇ\éxÕpMíεæøWBÂÇê >ýôÓéü_|Ѩqª† ɯç_1$¼xñâtì­·ÞªÔöý÷ß>ø`9rdèÚµk˜8qb(..®ÔfÙ²eaèСáË/¿ sæÌ ?úÑÂ_ýÕ_…¥K—ž1öo~ó›Êíܹs¸êª«Â»ï¾[mH8Ž{ýõׇnݺ…ï}ï{aÒ¤IáücµãþË¿üKxì±Ç¿ûwÿ. 80¬Zµ*_²dI4hP(,, Ï<óÌs¹÷Þ{C¯^½ÂîÝ»Ó~úÓŸV»^øÃÂ7Þ˜ª Çj˱Ïú§ÊùüæÍ›Ó½Æj̓6l¨Ôÿ©S§ÂSO=®¼òÊÔæ‡?üaزeKÎçëúEEEáâ‹/ÎŽ_×ûVÛ¸¹Œ 4ž0䱺B…7n ÷ß8vìXNýíܹ3õYVVVéxÕpMíεæ7ߟÅp T^xá…áĉ•Ú.Z´(ÜtÓMáÙgŸ «W¯ H!ØŠ2¡ò;ï¼37Ÿxâ‰0jԨЦM›pðàÁl»ßþö·¡}ûöá¶ÛnKáÍØg öV ÿþ÷¿OíÆÖ­[—Æó‹aÒŠÏ03n ÷Ž=:üÿñ?R89uÿþïÿ>…_çÏŸþú¯ÿúŒÊ³G :u ¿øÅ/ÒþÕW_ÆŒAçŠ2s‰à^x!RcÀ6ÞK.ç·oßÚµk—ÖfÍš5áæ›o•æòë_ÿ:­U 5ÇÏ^ 4ïÚµ+çóõ ý×Ö_ éN™2%µŸ;wnªÚ»gÏž3>Ï5µËå~3ó¹á†ÒºÇg”yëzßj›_.c'$ y¬®Pa}Å ^ÕfT5$\S»s­¹ÆÍ÷çÿßÿûû·®¸âŠÐ¥K—ðúë¯×ym oV]ËLèó'?ùI6dC²ñX\ûŒÚŒUOž<™=C¿±Ý#<’=6nܸУGðÍ7ßd}öÙg¡mÛ¶©ÊlÕqï¸ãŽT7Z±bE:6dÈlà÷ÿüŸÿ“½ßŒ_|1ËLcÕã¸ÿ«_ýªÒý^sÍ5éø{ï½WízÔu>ÞËe—]–ÝÁû\}衇²Çî¹çžÐ§OŸ×¼®óõ ×Õ_c>ϹÜof>“'OnÐûVÓürhœöc3VG½òÊ+CÇŽS…Ö-[¶dÛöîÝ;õ«ÈÆëb5Õ¨b¨°¶v›7oW]uUê;VŒUf«›ÏBQQQª(›?VÁÑ‘#G†®]»†‰'†âââJ×Ö4n.c·äçß¹sçtßñßÿ×ÿú_µ^S^^öíÛ.\xF(6úüôÓO³Çâ»Í›7/{ì;ßùN˜:uj¥~c`¸b%áÓ§O‡:œÑ.ŠÏxذagŒ{èС챷ß~;{ã7²Çþüç?§c±ºpF¬t«ØfÄ@i¬,}úÔØ_CC…ѸqãÂe—]–Ý]cP·b˜43ŸÉ“'×yo1,\uŒšæ—ËØ-ùùg‚Ö«V­Jû3gÎ<£m¬Ü{É%—¤`mÃÔ5U®-$|äÈ‘´Ûm·Uê¿jHø›o¾ \pAøÙÏ~vÆ\bõßX º¶qs DZbUã ¯¸]wÝu•‚Ìqn1D^Ó»Ÿëù[o½5§ç²÷ßhݺuø»¿û»œÏ7$$\[ ý<çz¿µ…„syߪ›_}×h8!aÈcõ ¾üòËÙJ¾±2oU ž:u*´oß>Œ;6¬\¹2»õêÕ+U­:ŸX-´&åååaß¾}aáÂ…9… s»%?ÿLH8ºå–[RUÙwÞy'{,ž¯ô2¡Íwß}·Æ÷%ªŽºwõVô›ßü¦RH82dH¥jÐQ ú^tÑEá®»îªuܺBÂ1L+ÔÞ{ï½g¬ËéÓ§SåÙK/½4µ‹F®ýàƒª]Ë\ηmÛ6|þùç9?Ÿk¯½6ôíÛ7çó ×Ôß²eËRûXi»¶Ïsuír¹ßšæ“ëûVÓü²Ö@ý @kH¨pÑ¢Eá /LAÒ|0üå/ÉžkhH8†~ã~×®]S8³â6a„Zç“«¡Þ}÷Ý¡C‡)üÃ¥±íæÍ›k_®c·äç_1$¼ÿþÐ¥K—ðƒü …j£¼îÑ£G1bD())IÁÛÁƒ§k/^\ëó©.$üØc¥c±jï[o½•B»ÿþßÿûtì‘Gɶ{ýõ×Ó±Ù³g§~âÜ&Mš”ª<øá‡µŽ[WHø7Þ8#tZÑœ9sÒùØ.Šíb¥Ý\Þ´iSسgOxñÅS¸9—óÛ¶mKŸ™XùÕW_ ‡NAìX½9ã‰'žK—.MáÖßýîwé¬T¯ë|æy®X±"WÚ:tÆ:ÕÕ_\ï8碢¢T:¾Õ}ž«k—ËýÖôyÎõ}«i~¹Œ 4ž0䱆VÜûï¿?…"ÿîïþ.{¼¡!áX­µ]»váÖ[o­u¾µ…„‡ .¹ä’°{÷î´Ÿ©Õ…„;&Nœ˜®ç†šÞÁª•„£X½º[·né\Ü S¸®÷¢®ðm·Ý®¸âŠ×&®I šÞ~ûíÙc±¯@ÏÌ%V®<­ë| ëÆJ½™ó;wÓ¦MËž¿ï¾ûұ̹ɓ'§ªØ¹žÏ<Ïê¶8ªëTWÑÃ?œm³zõêj?Ï5µ«ë~kû<çò¾Õ4n.c'$ y¬¡!áŒk¯½6ñ2–-[–Úoß¾½R»ª¡ÂêÚ=:´mÛ6U5­IMó‰ÎªAÔLH¸b¥Øšæ—ËØük ºb øÔ©S¡´´4œ>}ºAýÅ ¯±’s.â»«áæƒO?ý4”••5ø|¼x?Õ­[<×ô믿®öÚºÎ×W.ý?~<µ‰Ï»65µ«í~ÏÆûVÛü:6P7!aÈc™p¬Ì+oVÜb¸®j(÷‰'žK—.MaÚßýîw¡k׮ᦛnÊö·ÿþT}5V =räH(//OÇ«†„«k·mÛ¶t,V }õÕWS€ôwÞ©T‰µ¦p¼>V1bD())I]œÚ.^¼¸Îùå26ðÿ @Ë„„«Ûb@¶j(÷¾ûî ;wNÇâ?'OžöíÛW©Ï‡~8ÛfõêÕéXÕpMíb89V&ÎÌ!žŸ6mZöšÚ*¿ôÒK)(Ï÷ë×/lݺ5…~[·nBе›ËØÀÿ#$ -ÌéÓ§Ciiiøúë¯klsüøñÔæÔ©SµöUS»XÅ8ŠãXõqòäɰwïÞì~ì7ö_µŸÚæ×бàÛDHZ!aha„„β²²²PZZš¶Ý»w‡ 6„>ø ìÚµËf³£í«¯¾òå äàĉ¡¤¤$¼òÊ+á©§ž Ó§OãÇ£F }úô Ý»w­Zµ²ÙlÍ´Å 0ðÿ TãèÑ£aýúõaÆŒaøðá¡   cxÈ!áŽ;îHçfÏž–,Y–/_Š‹‹ÓÃÄ* Ûl* @søÿ>|8<ÿüóá–[n :tHÁà1cÆ„Y³f…µk׆}ûöY$Î BÂpŽ}úé§*ÉæÙŸE|&ñßcåß ¤0p wêÔ)L™2%…‚chÎGBÂp–mÙ²%Už>|xªDÛªU+[žo………¡¨¨(,_¾<=zÔK ÀyOHÎ’×^{- 80ƒ¯½öÚ0gΜ°~ýúT­V%áü¬$¼{÷îpâÄ //-Ž04Riii ÇŠ´3fÌ{öì±(@³€FزeKèÞ½{(,, %%%È BÂÐ@ëׯ:u ·ß~{8zô¨ò†04@qqq O:5”——[ ¯ @=•••…K/½4L™2E@ÈKBÂPO£F ………áèÑ£ÈKBÂP ,¡¤¤ÄbyKHrTZZ:uêfÍše1€¼&$ 9š>}z(,, 'Nœ°@^€ìܹ3„åË—[ ï @¦N†ÊËË-÷„„ ¥¥¥©Šð+¯¼b1€ó‚0ÔaæÌ™¡_¿~ªç !a¨Å‰'B—.]ÂóÏ?o1€ó†0ÔbéÒ¥¡C‡¡¬¬Ìbç !a¨ÅðáÃÃÔ©S-p^€ìÙ³'´jÕ*lÚ´Ébç!a¨Á£> Cyy¹ÅÎ+BÂ$³fÍJUs?ùä‹ñÅ`pŸ>}ÂŒ3,¾Zø÷ƒï? % ©’Û¹sgxüñÇCYYY“Σ¹Æ­jÇŽi=â|À÷CËþ~ðý´DBÂ$UCrÏ=÷\Úÿøã›tÍ5nU3gÎ ½zõJ…ùW«V­ ×]w]8räÈYm‹ï‡æþ~ðý´DBÂ$CrË–- ½{÷Nûýû÷C‡ o¾ùfj·yóæpÕUW…Ž;†Áƒ‡ 6Tê'^Û8p …‹/¾8lÙ²%{ÿý÷Ã>FŽºví&NœŠ‹‹+][Ó¸¹Œ}6Å€ðìÙ³óê¹4·§Ÿ~:Íå‹/¾8«móñ^9ÿ¾âõ×_}èÖ­[øÞ÷¾&MšþøÇ?æ4¶ï? % ©’‹a¶)S¦¤ý¹sç¦ê–{öì Û·oíÚµ wÞygX³fM¸ùæ›CAAA¥ª—™pè 7Ü®¾úê0þü°wïÞtnÑ¢Eᦛn Ï>ûlX½zu0`@4hPöÚšÆrûlÙ¹sgšÃ¦M›òê¹dæöøã‡²²²&ŸKS‡„›ó^›slßõÿ~øýïÚ·oÆÖ­[—®AÚÒÍ<ÃÚÆöý´DBÂ$UšÕýÙûqãÆ…Ë.»,»ìرT{衇²Ç2!¹É“'×9f ËU£ºqsûlY°`AèÞ½{(//?/žKSiêpsÞksŽíû¡aß=zôß|óMöØgŸ}Ú¶m›ª÷Ö5¶ï? % ©+$wêÔ©T©sìØ±aåʕ٭W¯^©:fF&$wàÀÇŠáÛ}ûö…… ¦¶ï½÷^ö\u!¹\Ç>[ÆŒî¸ã޼{.Ë–- ½{÷Nûýû÷C‡ o¾ùf¶íæÍ›ÃUW]:v옪¨nذ¡R_ñúxM|6EEE©Êê–-[Ò¹XÅ4†)GŽºví&NœŠ‹‹+]Ÿy¶û÷ïû·›æƒ‹³gϧOŸ®¶mÅp]óËõ^ëê§¶{Íå>;¶ï‡¦ý~ˆï^‡ÂÔ©SÏè+>çaÆÕ9¶ï? % ©+$Coq?+/¿üòJÛ„ ²ýÔVAöàÁƒáî»ïN¾ž={†Aƒ¥¶1x™Q]H.ױφ={ö¤ ÿðÿwÏ%\§L™’öçΛÖ*Î7Ú¾}{h×®]¸óÎ;Ú5kÂÍ7ßœî£â:fžÍ 7Ü®¾úê0þü°wïÞtnÑ¢E)p«›®^½: 0 =ŸŠ2×Ǿ¯¹æšðÄO„ÂÂÂtlÞ¼yնͼ¹Ì/—{Í¥ŸÚî5—ûlìØ¾šçûá‘G9£Ïø¬»uëVçØ¾ÿ€–HH€¤®ÜÉ“'S@òÖ[o­µŸÚBr±¢ç%—\vïÞöcÐ2—Jš¹Ž}6,X° tïÞ=Uû<žKƸqãRUߌcÇŽ¥ëC=tƳ™—êB„§N íÛ·cÇŽ +W®Ìn½zõJ•T«>›X™´&1ô»oß¾°páÂ3Œ5=ÛÄÇ÷ïß_mÛ\çW×½æÚO.÷ZÛ}6vlßMÿý0dÈ3*BÿùÏ]tQ¸ë®»jÛ÷ÐR T ÉÅÀg›6mBQQQ8räH UnÛ¶-‹Õ9_}õÕpøðáðÎ;ï„U«Veû©)$¯ïÑ£G1bD()) ëÖ­ ƒNm/^œmWݸQ.c7V+VÄÁÑ|}.Õ…„c6ëÚµk¸üòË+m&L¨óÙD wß}wèСCèÙ³g \ƶ›7o®óú|ŒÇÿð‡?TÛ6×ùÕu¯¹öSÛ\s¹ÏÆŽíû¡é¿^ýõÔvöìÙáOúSj7iÒ¤TéùÃ?¬óý÷ý´DBÂ$UCrÑÃ?:w¯^½:+..}ûöMÇâÏO›6-{MmA¼—^z)åâù~ýú…­[·¦Ð[ë֭Ê+j7—±kãÆ©ßL¨0ŸKu!á“'O†víÚ…[o½µÖ¾j{6Æ —\rIؽ{wÚÏT9Í¥’ðc=–ŽÇPcums_]÷šk?µÍ5—ûlìØ¾šçûáå—_ݺuËŽ]XXÞ~ûíœÆöý´DBÂÔêøñã¡´´4œ:uªÒñC‡¥@ÝéÓ§ëÕ_ [îÝ»7»ûýWí§¦q3v]¦N†žWë_5¼¸lÙ²´¿}ûöJíFÚ¶m>ÿüóûª)ÀŸG<+gd³ï¾ûî×Çõ¯h̘1á‡?üa­cå2¿\î5—~jº×\ï³±cû~hÞï‡8nÕwÔ÷ðm$$ ÿ×Ñ£GC—.]ÂÂ… ój^Uƒ³û÷ïmÚ´ EEE©royyy:¾mÛ¶týôÓ°aÆðÁ„]»vÙêØvìØ,X®½öÚЩS§ðá‡z‰hQÊÊÊBiiiÚvïÞíûÁvÆöÕW_ù @ &$ p[»vm¸å–[B—.]B«V­lØ CQQQX¾|y8zô¨—‹¼tâĉPRR^yå•ðÔSO…éÓ§‡ñãLJQ£F…>}ú„îÝ»û<ÛrÞbPh¹„„ÎC± n vèÐ!…„c°uÛ¶m*…Ö³’ðûoÿ-üÇÿøS%áÿú_ÿk3fLZÓ¸?eʔ¦9Å÷oýúõaÆŒaøðá¡   …;cxÈ!áŽ;îHçfÏž–,Y’¾ Š‹‹ÓÃÄ* ÛT€o/!a€óL¬ƒ‚1¸oß> ÒH±2k¯^½ÂÔ©SÓþáÇÃóÏ?Ÿª³ÆuŽ[ Ïš5+…†­9çZæŒÿ@ ­{h!a€óÈ<ƒ ,°gÑ/ùË´®U×õ©âCª¸Úê³Å÷!¾ñßã;?×ÕU³Ž¡a¨/!a€óD ¡Æ€êk¯½f1βXM8cØ·®v1üûÊ+¯¤ŠÎEEE©âð¨Q£BŸ>}RñÙl Ù Ó;Ãæ1 !$ pزeKª.:g΋qŽÄŠÀ1è[^^~Vú+++SIØ–S%áø~Ä:œMBÂy.†{õêî¸ã‹qíܹ3Usl€ó0@ž›={v¸ôÒKSeZέ!C†¤ŠÂç;!a€ÈC³gÏýúõTm;vì­Zµ [¶l±ÀyKH ÏÄ`p¬d»dÉ‹ÑLb@{ÆŒ8o 䙵k׆‚‚‚pøða‹ÑLfΜh!€ó–0@ž™>}z3fŒ…hF1¨ÝªU«PVVf1€ó’0@)//Ý»w¯½öšÅhF±Šs¬æì9ç+!a€<òÊ+¯„N:…'NXŒf6|øð0eÊ œ—„„òÈôéÓÃ-·Üb!òÀÂ… C—.]Rug€ó0@žˆÕƒ»wï–,Yb1òÀÎ;C«V­ÂŽ;,pÞÈ[¶lI¡ÔÒÒR‹‘' ÃŒ3,pÞÈ>úhèׯŸ…È#3gÎ }úô åååãÿZµjU¸îºë‘#GªÝoHÀ¹!$ '®¼òÊðÀXˆcX˜ü2gΜЧOŸP^^Þ,ãgBÂ{÷îÍ{òÉ'Ó±¸mJM~î¹çÒþÇÜäkÝœcÀÙ&$ xàpå•WZˆ{â‰'²ÇÞÿýðàƒ†‘#G†®]»†‰'†âââJ}-[¶, :48p ¥ŠÄ[¶lÉùú\B›7oW]uUèØ±cûlX½zu0`@4hP¥¾2Ýn¸!\}õÕaþüùÙ~ës}M!áíÛ·‡víÚ…;ï¼3Ííæ›oN늕yk Ç o\ç¸?wîÜTÙwÏž=õî»!÷WÓØ¹Œ ùHH ™•••¥`bÕª­äåË—‡:¤ µM-ÞµkWª`ûóŸÿ<´mÛ6U¶=yòd×Å0l¼®ºíäɓ뷶ëk 7.\vÙeÙöÇŽKÚ‡z¨Æ>*†„£έ:n}ûnèýU7v.ã@>hfk×®MÁÄ£GZŒ<ðÀ"ÏÅÀh§NÂ’%KštÜLHxïÞ½µ¶6lX¸ä’KÂîÝ»Óþš5kê¬ÜØë+îŸhFG aéÒ¥ã<­—^zi“VÎ%$ÏÅ6óæÍËË„`ß}÷Ý챚B´ ½¾êþèÑ£CÛ¶mÃçŸ^ã\ë /[¶,íoß¾½Òu 黾÷WÝØ¹Œ ùHH íر#…c•Zò_¦šð/ùË&3—p -÷èÑ#Œ1"”””„uëÖ…Áƒ§ë/^œmWSˆ¶¡×WÝß¶m[hÓ¦M5jTxõÕWÃáÇÃ;ï¼V­ZUcUCÂû÷ïO}…#GŽd٠黾÷WÝØ¹Œ ùHH Űi÷îÝ-ÄydΜ9)(¼oß¾&/—pôÒK/¥ llÛ¯_¿°uëÖlmݺuX±bEjSSˆ¶¡×W×_qqqèÛ·o:·Î;‡iÓ¦eÏ׎~øát]<¾zõê÷]ßû«iìºÆ€|$$ ÐŒn¿ýöpíµ×ZˆóH¬.[XXÆŒ“­r›/NžÝ$×WtèСümȵÑñãÇÓØqg«ï\ﯦ±{OД„„šQ ›>ðÀâ<³cǎСC‡ðÔSOY / 4“£G†‚‚‚°víZ‹qZ¸p¡çä-!a€f«Ñ¶jÕ*8pÀbœ§¦Nºté>üðC‹ä!a€f+ÑvïÞÝBœÇNœ8n¼ñÆp饗†’’ ä !a€fÃ¥ãÇ·ç¹¾ýöÛCAAAxþùç-„„€›5kVhÕªUøä“Oòr~O?ýtšß_|‘—óëÕ«W˜9s¦©…˜3gN 3&lÚ´É‚ÍJHh°ª!á;w†Ç<”••5é#ëׯÛ¶m 6l|ðAصk—Í–¶¯¾úʇ€sFHh°ª!áçž{.íüñÇM:æ·1b€9Î9œiyvìØ‘>Ç:uJÏÚf«ºÅ 0œ+BÂ@ƒU /[¶,ôîÝ;í÷ïß? :4¼ùæ›©ÝæÍ›ÃUW]:vìœ*ªV¯í8ŠŠŠÂÅ_¶lْνÿþûáÁ #GŽ ]»v 'N ÅÅÅ•®­iÜL¿‡ζý]ýõ¡[·ná{ßû^˜4iRøãÿxÆ\¾üòË0gΜð£ý(üÕ_ýUXºtéY]» „:„òòr/Ò·À§Ÿ~ª’°M%aš”0Ð`CÂ1|;eÊ”´?wîÜTÝwÏž=aûöí¡]»váÎ;ï kÖ¬ 7ß|s(((¨Tõ÷é§ŸN×Ýpà áꫯóçÏ{÷îMç-Znºé¦ðì³Ï†Õ«W‡„Aƒe¯­iÜŠý~ñÅiÿ÷¿ÿ}hß¾}?~|X·n]ê/†–c(¹¬¬¬Ò5q¾1tüÄO„Q£F…6mÚ„ƒžµµ‹sŽUfà\¬bH8Šݸ_1 mÛ¶MÕŠ+^ó“Ÿü$œ8q"ûío›ŽÅqΖ†éÓ§{‰8'„„€«+$|êÔ©T¹wìØ±aåʕ٭W¯^©:pF&˜{àÀÇ*//ûöí .Lmß{ï½ì¹\B§OŸ:tS§N=£ï‘#G†aÆUºæÓO?Íž?|øp:6oÞ¼³¶vÝ»wÏ?ÿ¼—€sBHh°ºBÂ1ô÷»ví.¿üòJÛ„ ²ýT­ø[ÑÁƒÃÝwß¾={ö ƒ Jm7oÞœm“KH83—GyäŒ1b`¹[·n5ÎåOúÓY —––¦þvìØá%àœ¬®ðÉ“'C»ví­·ÞZk?µ…„c…ßK.¹$ìÞ½;í¯Y³¦A•„¿ùæ›pÁ„ŸýìggŒ1jԨпÿçr¶C¯½öZèÔ©SªŽ ç‚0Ð`UCÂË–-KûÛ·o϶=zthÛ¶møüóÏk짦ðÞ½{ÏçfBÂï¾ûnöXuãV×ï!CR%âŠþüç?‡‹.º(Üu×]5Îål‡„gΜÆŒãàœ¬jHxÿþý¡M›6¡¨¨(9r$UÊݶm[:«õ¾úê«áðáÃáwÞ «V­ÊöSSH8^ߣG0bĈPRRÖ­[œÚ.^¼8Û®ºq«ë÷õ×_Oû³gÏNÁßxݤI“BAAAøðÃkœËÙ _yå•áÑGõpÎ  V5$=üðásçÎéøêÕ«Ó±âââзoßt,nñü´iÓ²×ÔŽ^z饎çûõë¶nݚǭ[·+V¬¨uÜêú}ùå—C·nݲs),, o¿ýv­s9›!á£G†:„µk×z8g„„€³îøñã¡´´4œ:uªÒñC‡¥@ñéÓ§ëÕßÉ“'ÃÞ½{³û±ßØÕ~j·:qq>MmãÆ)p\VVæEàœhB±úòðáÃ-ç”0@2dH˜9s¦…àœh"ûöí ¡¸¸ØbpN 4‘… †.]º„òòr‹À9%$ ÐD† ¦L™b!8ç„„šÀŽ;B«V­Â¦M›,œC«V­ ×]w]8räHµû íÎ7BÂð-ö§?ý)lذ!|ðÁa×®]¶s°mݺ5<úè£á?øA3fŒ—ŽëñÇOAø¸µnÝ:\|ñÅaÔ¨Qáõ×_oÒy<ýôÓi_|ñEµû í§¢yóæ¥s<òH^=ƒY³f¥y}òÉ'^H„„àÛèðáÃaúôé¡}ûöÙPŸíÜo&Lååå^@Z¤LHxåÊ•áÍ7ß Ï<óL „’’’&›GS„„ûöí›ÎõìÙ3œ™ŽÅÀmS9×!áM›6¥ã?þñÓ?ׯ_Ÿ7Ï jHø¹çžKûüq“Ï¥9Çà_ À·H¬ Ü«W¯0jÔ¨pàÀ Ò„n¼ñƘû7ÿæß¤ _¾›7o^šï#<’Wóª‚$TŽÚxì‰'žHûï¿ÿ~xðÁÃÈ‘#C×®]ÃĉCqqq¥~–-[†š¾£ŠŠŠR5â-[¶ä|}.!áÍ›7‡«®º*tìØ1 <8lذáŒû©)$|ï½÷¦ïÑÝ»w§ó?ýéOsžcîíþûïcÇŽ §Nª4Þ[o½† ûì³pÁ„—_~9çÏG}ï¿®¹V÷ ;6g‡0|KÄ ÂÓ§O·ÍèŠ+®H¡¹×^{-ãžþù¼œç½÷ÞzõêvïÞæûÓŸþ´ÒùeË–…¡C‡†„¢¢¢pñŇ-[¶Ôy.V}ðÁÃÈ‘#C×®]ÃĉCqqq¶ßûï¿?Œ;6œ:uªÒxo½õV6lX8xð`¥d«wïÞi¿ÿþiÜ7ß|3]³yóæNíØ±cùdøîw¿Ž?žöë 7äþkškmólìØœBÂð-ðÿð)¬UZZj1šQ iÇÜ‚ ÂŒ3Â¥—^š* ç“8ŸBüÅ/~‘öc 2ÎùË/¿Ì¶É„cEäx~þüùaïÞ½už[´hQ ÆÊ£«W¯ ƒ Êöû /¤k7nÜXiNñšL0³b2†y§L™’öçΛB‰±ÂëöíÛC»víÂwÞÖ¬Yn¾ùæX­Zé´¦¹Ö5Ϩ±c·D™p ÁôÑGá믿>£M zß}÷Ý¡C‡¡gÏži]ã51X]õ¹T ç6æúŠû1ðÿ=†¿/¿üòJÛ„ ª}?2ýdBó1<þÀd·ïÿûÙ ÊuÍ¿±÷çñØòåËÃéÓ§Ó¼ÿæoþ&{¾®pcî¿>ólìØœBÂð-0f̘pã7Zˆf+_pÁáúë¯O¹Æ}ôÑGójŽ/¾øb òÅÀk´téÒ´ÿ«_ý*Û&œÞyç°jÕªß7Þx£Ú lÆœ9sÒùØ®!Ÿ\ï-úè£Òñ¸-Z´¨Ò¹ªŸýû÷§{-**J•ºã8 ¹ÿ†Ì³1cpv @ ×¥K—ðè£Zˆ<ѧOŸT)wÉ’%iÿ—¿üe ØmÙ²¥Ùçß“ï|ç;áæ›o®´]wÝuiŽ=ôPj×Ðð°aÃÂ%—\’ÂÈQ¦iÅ ½±o¬¼;nܸðöÛo§ó¿ûÝï²çë ÇJ®íÚµ ·Þzk÷[Ó\s™gcÇn‰ê G/½ôR ™Ævñ^غuk Œ¶nÝ:¬X±¢Îw¨!×W×_qqqèÛ·o6lÛ¹sç0mÚ´ßÛn»-\qÅ5ÞW¼ç~½ýöÛüùÈåÞ2®¼òÊpá…¦mEU?ÑÃ?œî/_½zuƒî¿¡ólèØœBÂЂmÚ´)…°vîÜi1òĘ1cRvêÔ©i?V×2dH8p`8zôh³Í+\cÕÜ{ï½÷Œs™Š¾±êql×d QÆãóæÍËË„o«Vg}ì±ÇRàòšk® C‡­t®jrÙ²eiûöíÙ6£GmÛ¶ Ÿþy­÷\Ý\ë3ÏÆŒýmß¡ŠAâ /--MïYS\_Ñ¡C‡Ò»Ôk›smbõÞ»îº+ç~?žú‰ýû¯Ï38Ûc;!ahÁâŸy•c•ü0}úôÆÏ%cÇŽ©ºp À6—7Þx£Ú lÆœ9sÒùØ®!!áøÆê£#FŒ%%%aݺu)èÛ.^¼¸RÛ>ú([etÑ¢E•ÎU ïß¿?Šã»~äÈ‘4ζmÛÒ±XÝôÕW_MÕVßyç°jÕª:çZŸy6flh¨üÇLïc¬È µšUüÁô­·ÞjÑ÷¸yóæðå—_zØ4‹XùuÆŒ",\¸0´k×.…ü*VŽáׂ‚‚Tý¹9ÜvÛmáŠ+®¨ñ|¬ï·ß~{ƒBÂÑK/½”¸ñ| Ioݺ5…i[·nV¬XQ©í•W^.¼ð²­¨jH8zøá‡CçÎÓñÕ«W§c1@Ù·oßlØ8žŸ6mZNs­Ï<:64Ô_ÿõ_‡ÂÂBx¨“0´`?þxúññŸÿùŸ«=_ÛµM!þ)ªøCÖ“O>Yi¾U·X=ã|ö¿ÿ÷ÿ?úÑüi9šÜž={Òol[¶l±ydíÚµé¹\pÁ•Á±¨B ¢öéÓ'”••µØû¿ ÇÀqÆ©S§BiiéÇX½÷®»îʹßãǧ~b:t(Šë¨Ìužçbl¨Mü~ˆ•« .BÂЂÕÞ¸qc¸ÿþûñcÇrêoçΩϳõãô‚ BïÞ½Ó§çû?ÿçÿ o¿ývvûÍo~sV×ålßG.þÓúOaÒ¤I^JšT¬XÛ½{÷pâÄ ‹‘G>üðÃô[èÅ_œ~'­(þnC±Šî·ù¹ýã?þcZ£X‘€†€¬®p}=÷Üs©¿?þ¸Ñ}ŪºßùÎwªU«ÎÙ|›â>rõÑG…¶mÛúA€&5~üøpûí·[ˆ<+„üàaÊ”)gœ…b¸ûÆo GýV®Qü+t………*ð4‚0´`u…n—-[†>œöãŸA{ê©§R…ŠŽ;†þð‡Ù?CÛÆª¿±¿þýû§ëÞ|óÍ:¯«É/ùËÐ¥K—zÍ÷ý÷ß>ø`9rdèÚµk˜8qb¡Û?üáéôž={†‹.º( 4(üÓ?ýS­÷û¿þúëC·nÝÂ÷¾÷½Tù÷üãëuàÀPTT”ª|ÄûŒÕ˜ÇŽ{ÆŸ‘{뭷°aÃÂÁƒÓþµ×^þóþÏ^LšD ¢vèÐ!ývGþ‰Õ‚Xíù’’’’5jTØ·oß·n}bEå#GŽxQšh­KKKÓ¶{÷î°aÆðÁ„]»vÙlçÍöÕW_ù0TCHZ°ºB·O?ýt:ÿÅ_¤ý_ÿúסM›6aÉ’%aãÆá™gžI?¬D1@+ZÄösçÎMÕx÷ìÙSçu53fL ÐÖg¾‹- 7ÝtSxöÙgÃêիÀRø·ªßÿþ÷¡}ûö) ü /¤pü!¿ýíok¼Ì5±²ÊºuëRÿñúŽ?V\¯n¸!\}õÕaþüùaïÞ½iŒx<Þ{Eq®±]Æ}÷Ý:wî|F˜Î…X6þnÿIþ‰E†ž* Ÿ8q¢Ú61CĽzõ ›6m²hä,¾S1hþÊ+¯¤ßǧOŸž~ÿŽ¡óP•ªã÷ƒÍÖR¶ºþ»À·•0´`õ ßsÏ=éÇÁšÄ@mlÿñÇW:^×uÕ‰Þªæ03ßk®¹&UÎl±zAubX¸ºùÄëãñ÷Þ{/çû7n\èÑ£Gøæ›o²Ç>ûì³Ð¶mÛT½¸âzMž<¹R±šÅ…^˜Ö¡âµ\pAxùå—³Çâ±ñúýû÷{98ç2Í+V&ÿÄÐf,„3ܱcGíâ_‚‹Ù,¶‹ÿ¬é÷R¾ÝŽ=Ö¯_f̘‘ ŸÇw&†‡ î¸ãŽtnöìÙ©àÇòåËÓ_ê‹[ «$lSI e€¬¾!áhÍTÊw«ª)$\×uU(/½ôR‘¶½{÷–6mÚ¸í/¥U‹u0àÀ²wï^ÓîÓO?µkó»ßýÎÌ¿ví7'*”†µª¨VŸ…wÒJÀ:^¨cŠÑÑÑ%^?//Ï-Ð'¤õèÑC‚ƒƒÍö˜üŠŒŒ”¸¸8sýõ>W àÇJ¶ˆŠŠ2a^‹µkךöGu»_ÇõœÑÊŽmÜoff¦YöÖ[oYçYB°kÛ§O3_«+8ãì<ô1}Z™ØÖ?þ(?ü°<÷Üsõ×k¯½f*)0@:uêTdùøñã¥uëÖܘ¨pZmTDzz¯¬¬,s¦M›f ”‡;wîÈW_}E%a?­$¬4òóóyóð!aü˜%t»aÃó¡€ítåÊ•"¡×yóæÉêÕ«åòå˦ nHHˆ 6̺½ììl‚Õ Z Wœ=YÏ™;wšŠ¿?üðC‘ãuÖ}5iÒDºvíj™·k×.éСƒi¿|ùr»¶ÖjÆüÕJ)òþûï˾}û\žÇ|`¶•`ŽIÛŒ;ÖT[9sæŒY¯¸ðÙ³g­•–-[f·ìÞ½{Ò¶m[ÓW@E›3gŽôë׎ðr:þø‡?üÁŒ)æææÒ!€rEH?f Ý:›¶lÙR$ô:yòd 2óô_­|«Õ,lÍž=ÛÚ&))Éãõi0W+÷NŸ>½Èñºª|¼fÍÖ6Z‘÷ðáÃÒ»woÖ ´- 7mÚÔz¾aaaæœÝǺuë¤aÆvlÛ»w¯uâBÂJëW¯^=ó8G[Z½¸Aƒ&| T´¡C‡š µðn:©… 4,¬(O„„€­x{þüy¹uë–Ë67oÞ4mîÞ½[¢õ?~\êÖ­+Ÿþ¹ÇëHff¦õµƒîW÷ïÌÅ‹]VàpvêÂ… ¦Òrihuãçž{ÎnžV&nܸ±¬ZµŠ •"<<\é/eÂÜz½–.]J‡Ê!aP¥¶mÛfWMØ—ýãÿ0•†SRRìæÿùÏ–ùóçs±P)ô)WZ™6--Îðr±±±2bÄSù9&&†”+B Êýøã~qO?ý´y< cUãk×®q‘PiŽ;f¾Ìž——Ggx¹¹sçJÇŽM‘[ <('¹¹¹‚På%<<œŽð+V¬ÐÐPINN&Ø (w„„?2sæL‰ŠŠ¢#|ÀŽ;L8ø›o¾1ÿjhÊ !aÀ :T¦M›FGø€ôôtÎÈÈÈÈHY¼x1(7„„?&K—.¥#|@nn® '''KLLŒŒ=šN”BÂx»Ÿ~9}š©ºO_|!²gÈÅ‹¼'àÒ™3gLè4%%…Îð²zõj쎈ˆ;wîÐ)€rAHo§Ñ`búÏ(Ò±£H|¼È±c¼G`µuëVÎÉÉ¡3|Ddd¤,\¸PNž$**J¦M›&ùùù¦ª°½(„„|™V:T¤V­Âà0"¨Öbcc¥K—.t„‰‰‰‘#F˜Ÿ£££eÊ”)t  \ðë׋†óóé€jªG&t ß‘` vÏŸ?_"""è@¹ $ à/Nž Ó稦‚ƒƒMоcýúõ¦ãz÷¥¤¤È< 999t  Ì ø“3gDBCEƹs‡þ¨F®^½j¦:…ïHMM5×-77Wîܹ#²qãF:Pf„„üMJŠH` >›¾¨FŽ;f¦ú/|GFF†¹néééæuTT”ÄÆÆÒ1€[¶l‘Aƒɵkל¾.ívCHÀ-^,R«–HZ}PMhõY ›jEaøŽ¼¼<©U«–ìÞ½Û¼NHHˆˆSUð6¯¿þºù=£S5¤Q£FÒ»woùàƒ*õ8Þ~ûms ß}÷ÓץݎåüBCC¾ïÞ½+Mš41mþö·¿UȹÍ;×lÿÂ… Üp(3BÂþjèP‘ˆý”¾¨æÏŸ/aaat„ŠŒŒ”ÄÄDósZZš ž?žŽ×±„h7mÚ$;wî”wÞyÇ…5èn©†]*:$¬“%¸o+99Ùº¼²BÂ'Ož4Ç•››[é×»*÷ €òAHÀ_åäˆêˆ"}P L›6MzôèAGø ­Ä:÷ßãxZ½T«˜.Y²„Ž×±„h333­óÞ|óM3O·•¥"CÂÁÁÁR¿~}yá…Š´ñÅåÑG­Ôð{ï½g^ùå—•~½«rß(„„ü™~ ’•E_ø¹èèh‰‰‰¡#|ÐèÑ£í®]ll¬¹ž€·qÖŠ»:oÞ¼yæõ‰'dƌҽ{w ‘1cÆHJJŠÝvÖ®]+:u’œœ‰‹‹3ÕˆµŠ¶§ë{>xð ôìÙÓ~;tè {öì)r>ÎBÂM›6•±cÇJƒ ä§Ÿ~²¶ÍÏÏ—   yå•WìBÂ%9ß+W®ÈôéÓ¥Y³fÒ¼ysIHH{÷îÙµµ ëzÚV_·iÓÆlC+8{z~®úÙÓc.˾à ø³¼<‘ÐP‘øxúÀϵnÝZæÌ™CGø øøxSMØbýúõR«V-ÉÍÍ­ôc±„@µš±V5vt÷î]iÒ¤I¥VR…÷pÖ@­ÎÛ¾}»y½lÙ26l˜¬\¹R’’’¤mÛ¶Ò¾}{»íX¹C† ‘¾}ûÊ¢E‹¬Û,Éú®BÂG•:uêÈ„ Ìq >ܼ§+⺠oÛ¶ÍÌ×-¶nÝ*<òˆ|üñÇv÷IŽWcÀ€&Piæ½õÖ[.ï óêôõ‚ LeߌŒŒŸŸc?{rÌeÝ7¼!a·t)Õ„ªàà`Y±báƒ%<<ÜúúêÕ«&t·qãÆJ?KT'­ë(99Ùº¼²BÂ'Ož4ÇU¡éªÜ·7²Ü§OŸ6Õcó›ßHíÚµMUÙ‚‚§ëhU×± ‘Z«ãÇ/vŸîÖw8p ©Ôkqýúuóžš5k–ݶ]…„µ‚°V ִň#L5Þ¸½ÿÝïo¼a§!üÇ{Ìòm« ;ÞÿÎuÜ^Iϯ¸~vvÌeÝ7¼!a—Ÿ¯Ÿ‰ÌœI_ø) 0jKœð=ÆÕ]¾Žåý[¿~ýdܸq•~,’ÔÀyýúõå…^(²üÅ_”G}´RCÂÎ‚Š•¥*÷ílCä:é};yòd¹råJ‘¶‚ÍÊÊ’%K–˜¶‡².³„Wsrr\îË“õ…„µÚuݺu¥ÿþ²iÓ&ë¤A|­žkËUHXéýÿÐC™¬÷µznJJŠËpIŽ×Bû:?;;Ûãû¿4ç窟ÝsY÷ ï@H :˜?¿0(|õ*}à‡ÒÒÒLKßsþüù"×O«BTz[KHR+¨6hÐÀTTµÐ³VW}å•WìB’'Nœ3fH÷îÝ%$$DÆŒc”¶Ö®]+:u2aÒéÓ§K³fÍL5Ò„„»*ªÊ6$©ëi[}ݦM³;wšv4l5ÐÜ¡CSÙÖ‘e¿’Ô*°52ïO¹,ûöG–ðÖ­[åìÙ³rëÖ­"m.]º$'N4÷¯ÞKíÛ·7ëhŸY¸ Í–v}Û×z­õg½®-Z´°›Fe·/w!a ïë² 6X«}kHÖ1$\–ó}ë­·ÌüS§N9½ÿ•cP·,çW’>.ë¾à ࣶlÙ"ƒ ’k×®Ñ(žV  ÔçÒ~hÇŽ&¸e[‰¾C¯›^?Ûj^^ž©è«>+“%$¹mÛ6sLú¯…CyäùøãíB’Ë–-3UDW®\)IIIÒ¶m[:´e +>\  óæÍ“ÈÈH3Oƒ’¶lC’扉1¯,X`B‹¦>zô¨©ì:aÂÙ¾}»Ù®Vµu¬økÙï!C¤oß¾²hÑ"ÉÌÌôè˜Ëºod kºÒ¹sgiܸ±œ;wμÖ>ò´²ni×·}]PP`®ÏÈ‘#‹=w!a­²Û°aCùÅ/~a*{Ïš5ËÌw —å|_{í53ßö³žâBÂe9¿’ôqY÷ ï@HàÕB¼e[ÞÀÝàTLŒHïÞô€Ò iXXáÃBCCeõêÕvó´òm»víLX±²XB’ZAX«kEa‹#F˜cr I:Òà­m°PYÆ´ßxã ë<=¯Ç{Ìœ»m5áâB’jàÀ¦±Åõë×MP×ätÜïøñãÝž·³c.ë¾ýQq!aïü¶Põ¾q¼.ŽŸq”v}Ç×}úô‘ÚµkËåË—Ýž»°šR»vm¹|ù²Ûóq6.ëé1—u߀»û¨ „„^ÍU°·W¯^f`T?~ÜÌÓ¯…ã7ûK»-gÛQ”æÍ›[_kõ_ [ª(Ønüøñvë^½zUêÖ­+¿ÿýï­óôÛ×ú'„tFÃÂŽÇAHص“'OšìÜÜ\¯:¯¹f‘‘……à7t|r÷îÝt„Óë§ã‡YYYE–i•a½Æ:–\ÑCÂ{÷îµ>qÏÂ6$¬¡æ&MšH×®]Mˆx×®]æé{º|ùòåÖulÇäu,þÆ&Ø®cãï¿ÿ¾Ý18Ž ggg›²>µO+ë>9bæiñÍ›7›±÷ýû÷›'ºÙr6.ëé1—u߀»û¨ „„^ÍU°÷âÅ‹Ö6:øæøÿ’„„ÝmËÙvôQJòÕÊ¿›6m²Nááá¦ú¯…eûÎ÷Ì3ÏÈã?n} ?ûÙÏŠTˆÐ×: ¼dÉÍæÏ×ßS®ÂÝUÍk®™>v2"Bo0~ÉøCÔq'K•WøöuLMM-²,//OÂÂÂ$66¶ÂÃ1$¬câiiiòÕW_YçÙ†„Õš5kLèVçµnÝZ>l´Þ°aƒic}÷Ýw¥Aƒæç€€€vällxöìÙdæëøTJJŠ´lÙÒÌÓI—Oš4Én[®Æe=9æ²î°ÐP¼VѾwï€JEHàÕ\{mó~øá‡2…„ÝmËÙv4ô«óBBB¤E‹vÓ¨Q£¬íÜB·mÛf ýê€> ð•W^±.¿té’Lœ8Ñ ê`lûöíMûƒz´}½þúX·N:É÷ßoŽŸxâ yòÉ'eõêÕÖu´M³fͬ•-´ýÎ;Í2í¿ž={JýúõMUˆ={öØíϲ}½ÆZ¢Q£Ffð{Ú´iòì³Ï9> îÖ­›©$}âÄ ™1c†tïÞÝÜcÆŒ1ƒÄ¶¼æšé‡E÷CŽ«Íë‡zž_ýµÓåTL(_ÇŽ3ã-Z¾K‹Fè˜pbb¢Óå7n4×999Ù+¿  @233­¯5\¬•-¡HÛqAm«ãî·nÝ*Ñ>nÞ¼i¶©Û¶¥áKG.i³¸c®È}@e $ ðjÞÖAÃ:uêÈÈ‘#Ý»» ¤|>òÈ#2uêTùøãM»S§NY—wîÜY7n,çÎ3¯·oßN%a›sž0a‚ Ï›7ÏTvÐǺi°ZiX7&&Æ´[°`¹†rôèQsÝt]íÏáÇ›ÇóÙ^[Ëö‡ "}ûö•E‹™b”×ù–ëa¡Õ¤u;jÙ²e¦’ôÊ•+Mx¸mÛ¶&Üíé=QéBCE/®MÖ1ôÞ×pµ'Nž}¤víÚrùòe—Ç^Ü€çäÉ“¥aÆ2vìXSÖBC©Žçc ë#Ü<ݾ?_ÿ^½zI~~¾™wüøq3OÃÀÎÂÝ”æÍ›[_k@U?8™5kV‘>?~¼Ýqè€{ݺuå÷¿ÿ½užVŒÐÇÎéµqFÃÂŽÇàU×,.N¤cÇ Ùtq!á’rv=ð+V¬0ÁQø¾¡C‡Ê”)S\.×§ ………ÉèÑ£Måa_BH*!a€W+mH8;;ÛT—‹‹“k×®™ÁÒÒlËÙvÔ‘#GÌ|­b»yóf"Ý¿¿lٲź­â<µ½.×Iñ-tMš4‘®]»JzzºìÚµK:tè`Ú-_¾Üãíûóõ¿xñ¢µö}q•¤õñoòÕÊ¿›6m²Nááá¦ú¯cŸê@»£gžyFüqëë„„ùÙÏ~Vd ^_geeÉ’%K¼»úóŽ÷ÿ¼ÿ§`Tç-.$¬áûN:Y«èõY¸p¡ôèÑCêׯ/­Zµ’´´4kÛfÍš™íiõh]oçÎür°¡cUýúõ£#üäZv,æËý:v Ó¦Mó© ð7äÊ•+rïÞ=.t%Ó1k-|¡“>1oÏž=òÅ_ÈéÓ§™˜¼fúé§Ÿx³TB¯VÚ°š={¶™eIII¥Þ–ãv,RRR¤eË–Ö ¯¶™4i’uyqPÕʶõêÕ3ûµµfÍÖõ[·n-‡6d­\»aö_¯¿cHXC¿ú:$$DZ´ha75Ê£k¶mÛ6kèW¯Vfyå•W¬Ë/]º$'N4ƒóM›6•öíÛ›öôøž¨TÐÕGPnÝZî›..$ìØ~ø¡ ÝkX>99YÞyç3 ¨Nœ8!111¦ý‚ ̵ÍÈÈà—#€ ­<;nÜ8:¬_¿ÞT ö¤>)M¯»¯UFÙièW?£Ð1Õ9sæHll¬DGG›B :vjý삉ÉW&Ëç(_„„~íæÍ›æ›ñZ©´¢¶£•4ÄZÞÕ $33ÓúZ÷­ÇPª,”WHXû²N:2räH·ûsâ½uë–<òÈ#2uêTùøãM»S§NY—wîÜY7nlª0¨íÛ·{w%aÕ¥‹È´iå¾Ù’†„Ÿþy·Ãt¼ž°7bÄSU¾ïرc.ŸvæHƒÂZ´ K—.Ö'sÁÿè½ E,t¼\+†ZC•:®eBÂÖ'¶­^½Z6nÜhBÄ–I /PI˜‰JÂÕ!aàµJ^»v­™wôèQë¼>}úHíÚµåòåË.÷W\ˆwòäÉÒ°aC;v¬tëÖÍ:_ÃÜŽÇ` 8pÀãíWA‹´kWî›-iHxݺuæõ!CLå`G„„ÜëØ±£,^¼˜Žðùùùf,LŸ¸å‰“'Oš§Ðé:Õàð‘#Gúؤ×J¯™x5ð­×QƒÿíÚµ3£5¬U‚ãããMX¯;¤x‚0ðZ¥ gggKÍš5%..N®]»fKu`\çé€ùæÍ›åêÕ«²ÿ~Ù²e‹u½âB¼ÚÞR¡Aãf¡ÛoÒ¤‰tíÚUÒÓÓe×®]Ò¡CÓnùòåo¿Òé ÷G²²Êu³% «eË–I½zõÌ5š1c†Ü¸qúŒ0€{ááá¦z(üCXX˜$&&–h;vHLLŒ[Ç0™|wÒ÷ôСCMø_«KkxJƒ0ðZ¥ «Ù³gKPPY–””dæécÕZ¶lihÕå“&M²®S\ˆ÷Þ½{Ò¼ysfÕýÚZ³f ëú­[·–Ç›@r5dÆ m¿ÒéÀr@€>—°\7[š°ºté’L:ÕôÙË/¿lOHÀ=­4êiåYx¿#FÈ”)SJ½þÅ‹©$ìÕ„©  <~ëæÍ›rþüy¹{÷®Ýü+W®˜à±†~ËSAAdffZ_ë~uÿ彟r5t¨Hll¹n²´!a },¢†¹-Ö®]kÚ=z”›ÀANNŽ;9yò$á'4 ¬Ud(+BÂÕÙ’%"¡¡"åXÂÖ ÊZ½ÙvÒ€¶cHxÞ¼yæq˜—/_–O?ýTBBBdذaÖíeggKÍš5%..N®]»F% iiif¬%//Îð+V¬°°0:Pf„„ª³ŒŒûÞÿ“05µÜ6i ;›¶lÙR$$háÂ…Ò£G:ÂÏ„……É’%Kè@™T<* ûN%áÔT‘””ÂiëV-C"²xqa8XCÂÖ0©>¾PƒÄ"½{‹ÄÇ‹lÜ(’•Åý+¼žééô€™2eŠŒ7ŽŽð3üމ‰¡#eBH”Ü;"gΈlÛ&2sfaxXÃ4Õq\œHbbaÅa %k YƒÉ´Ë7Ø“S~×´uk‘iÓ¸·|̈#LPþ%>>^Zë˜e@H”Ÿ“'E–.=Ú¾â0SÅOÁÁ"…•££ +?/\XXáY+ç绿vÚVƒÞW¯rø~ýúIBBág%00PîhÁJ‰0¨X_}E%ኪ$¬¡ì””ÂIÃÀ«W‹èBññ"úˆÉŽEBC CÄØÖ׺lÇŽ¢aàÜ\‘€‘Å‹¹g|HDD„¬X±‚Žð3)))òÀȱcÇè @©ðw99"»wˆ£¢þSáYNLüO`X«‡…‰äåÑg>¢V­Z²Z¿<¿’——g®-p@Y¨n4¬¡á¸8‘àà Âýú‰Ìš%$Ò·¯Èÿ(¢UJü© ó?pí€_ÉÍÍ5Õf“““é ?Ô¥K™3g(5BÂÕY~¾ÈÖ­"Ó¦‰´k'R³fa•aœêÖ‰ŽÖg5rÝ€_ÈÈÈ0!áôôt:ÃÅÇÇK?ýr?¥DH…Ο 0Àÿ* kåä¿þUdĈÂÀ°VQÖ€4€KMM5!áó:®¿³qãF ”|Ʊ¥DH…¢¢Dz÷ÉËóïóܱC$ @dôh‘;w¸îÀgmݺՄ„ï0Æá—ÒÒÒÌõÕ( BÂв3…vµzpuœ,R«–Èœ9\{à³V¬X!¡úd(ø%­  ‹/¦3¥BH…Uu;v¬^çœPŒNIáúŸ” ]ºt¡#üXïÞ½eèСt T Tw¹¹"Zz¦z·>†³uëÂp4ä>hΜ9MGø±¹sçJpp°Üaü P „„ª»Ä݆…«›Ý» « ¯_Ï}|Nll¬™à¿’““åcÇŽUê~ïÞ½+çΓC‡ÉåË—¹à£ Twýú‰Œ]}Ï_«í´kG5aàs´Šð”)Sè?–——'²xñâJÛçÙ³g¥cÇŽ&œ\³fMó¯V3.mXøí·ß6Ûøî»ïÊõ8µÊ²n÷Â… Ü(à!a€ê,+K¤V-‘mÛªo¤¥VNIá~>¥K—.’@Gø¹~ýúÉСC+m;w–°°0ùä“OäÎ;òÏþSæÍ›'ßÿ½Y~òäIyýõ×%×Ã'“i5ä©S§Êõë×Ëõ8CÂ%=®òT•ûw TgK—ŠŠäçWï~èÝ[dÄîàSBCCeáÂ…t„ŸKLL”ÀÀ@ɯ„1< ¹jðvΜ9.Û¼÷Þ{¦Í—_~Y¥ýâ®Êãò–>G„„ª³¸8-EB?h%e­¨¬••|„†W¯^MGø¹óçÏ›kR Oº}û¶„„„HÏž=ÍÏŽÖ®]+Íš53ÇÓ¦MéÔ©“ìܹÓÌןsrr$..N5j$iú¯¯£Ë®^½j÷Z+ÏŸ?_žxâ yòÉ'‹ÜËûöí“ÿú¯ÿ’   óïÁƒÍzÿýßÿm–Û†„]—…®«çT¿~}éСƒìÙ³§Èy¹:þ'NÈŒ3¤{÷î¦oÆŒcw-Üí»¸ý@…ÐÕXx¸ÈüùôƒVa áñœÀGdee™PâîÝ»éŒj ""Âmußòô›ßüÆÜ[Šýúë¯í–i`6&&Æ,_°`© ›‘‘!o¿ý¶™7dÈéÛ·¯,Z´H233Í:–eß}÷Ýë &˜Pí¼yó¤wïÞR³fM¹té’isèÐ!©]»¶DGGËG}dÄ&¶­rlvu\êèÑ£R§N³¿íÛ·ËðáÃ¥V­ZvUÝÿ²eËdذa²råJIJJ’¶mÛJûöí‹íOö 0@u•šªåfDÒÓé /Ò¥ ý|‚¥ºì™3gèŒj`Ú´iÒºuk¹sçN…ïëÖ­[òüóÏ›û«^½z&0[PP`]®!X]æ,d;~üø"ÛsîÕ«—äë—÷ï;~ü¸™§ÛVýû÷7Û›7oZ·ó¯ýË´yõÕWÍkÛ°«ãR”æÍ›[__¿~Ý„ugÍšåÑñ;Ò°°ã~œíÛ“ý@E#$ P]ÅÆ†b+ჟpì¡ià3RSSM(177—ΨÒÓÓÍõÖë^Y´úmxx¸ÙïàÁƒ­^w!᜜œ"Ûq¾xñ¢µÍÕ«Wͼ·ÞzKîÞ½kÂ}úô±ÛŽ•]Uvu\º­ºuëšÐñ¦M›¬“ž—Vöäø-4 ­¼—,YbÚjµc Ç}{º_¨h„„ª«ðp‘ùóé[¡¡"‹ÓÀ륤¤˜P"ª ˜Z²•Eƒ½ƒ ²«òë.$l Ûr¶mûÃ?XCÂÙÙÙæçßþö·vÛ)MHXC¿:/$$DZ´ha75Ê£ã¿té’Lœ8Q¤iÓ¦Ò¾}{ÓöàÁƒÖ6Žûöt¿PÑ98¥ßˆÿè£üúuïûï¿çb£zÒj¹ú!’VÏÅÄÇ‹tìH?¯·~ýz ¤#ª‘ùóçKhh¨¿¯Lœ}ðÁeÈ!æuE‡„oß¾-5kÖ”ÚmGÏ»¤!a kUâ‘#Gº=GwÇß¹sgiܸ±œ;wÎ¼Ö ËÅUöt¿PÑ @yýõ×Í€Ñ×_ít¹»©Š¦ƒWO?ý´¼ùæ›EŽ×qòåAè¿ÿýïòÄOÈåË—¹!Qýhá°0Y§/l%'†§yL'ðr‹/–ˆˆ:¢9þ¼ÔªUKvïÞ]©ûÕo½zõä¿ø…y½víZóùÀÑ£G­mÊ3$¬ºté"AAA¦Š¯ÒÏ-^zé%·!agÇ¥úôé#µk×vûY€«ãÏÌÌ´;.e 8pÀ:ÏÙ¾=Ù/T4BÂ|ÚÉ“'Mx5×Ã\Å…„“““eêÔ©rýúõJï \nÖ¬™Ü¼y³Èñþå/‘½{÷Z§}ûöùôõ|ê©§dìØ±¼™PýèHZ5öòòDDé àÕ¤#ODªvFŒ!ÑÑѶýÏ?ÿ\âââLöÆ&˜îÿÞ2ÕrSSé gF:”~^mÚ´iEGT3:–­Õ„Ïœ9S!Û×baaaf¬^®úoƒ äü£]»Ù³g›J¿º<))©ÜCÂêÿø‡<ûì³æÉ‡úÓŸLUam£ë+ǰ³ã²í·–-[ZŸ’¨m4üìêm­Y³Æ…uyëÖ­åðáÃ&ø[£F Ù°aƒÛ}·_¨h„„ø}tS»ví$44Ô:OݤÕnuP¥M›6Ò©S'2dˆôïßߊm}ôÑGÒ¹sg3€¤ëiÛ+W®ÈôéÓÍ6š7onª.Ü»w¯È¾<(={ö”úõë›o‡ïÙ³Çn¹逜~{_Ïj*ÿ~óÍ7Nû+''Ç|S¿Q£FòÌ3Ï{?(Há…x£¡úÐÇñ…‡‹äçÓΊ„…i™úx­qãÆILL Q éç%¯H–MMM5•…µ¢°3ú4B­4ì8_Q4¬«Ÿ!üõ¯uÛÎÝqégC*vöy;’™™i}­ÛÖ}8nÇÕ¾K»_(+B¼šr»uë&æáúMr Žê¨-X°ÀT¡Õo˜ëëääd»í 6Lúöík~¶||øðá2`À™7ožDFFù†ºÒ ÁuêÔ‘ &˜ ²®£`ÇJ·ZVƒ«úè+m«Õ…‹S\èÖñ[ë~ø¡ùÖþŠ+Ìù½óÎ;rúôi—}¡ÇànWúõëg´%=ÞeË–™~^¹r¥ù†|Û¶mMØÖgŸ}&uëÖ5áU«V™°†˜?îò,ëèãÓô1^ºm kk877·HiP\¯õ¢E‹¬óÜÝjòäÉæÛû•5Y¹«ÂPÛ)¯ýù­víDâãéWô ZiÙƒßåUEÇrµ`ªŸ­[·šÏ*²²²üöõs}â¡Ñ€®ÿèØ±£DDDÈíÛ·¹ ÀC„„x%­Þ«œ¦:­~ÃÚ ’jÐÚ½víšÔ«WOžþyk›o¿ýÖ„w×­[g^[ƒo¼ñ†µÍ;wä±Ç3•Šm¿Å=pà@SeØâúõëfàmÖ¬YNG¿Q¯Urµ>.ÊÝ]ICÂzN:øåŠc_x²Ž3à=z´ËãÕ`µž£eÒoÄ;£aaÇãÑuuÞ¡C‡<>½ú/ÛA?½¦µk×6÷†c?Þ:Ï“ûAiPY×ÍÎÎæÍWA4¨=uêTó*Ïíhõn½7mãå¹?¿tìXa¶•Ï«­ ¬ÕW¯¦/€×jݺµyBª§.]º˜jÒþJ †èø¾ŽÝë“-O!>^._¾\¤MICÂjµTÊÕª»žôEqë8Òoãkåá™3gº<Þ_|Ñœ“er ÖjàZÃÑK–,± [úS+»ªØëxØÖ xlll‘¶Ý»w·«xlé/­*`«¸ûAéuÕuix²Óë²qãFŸ:fg÷}UÑÊ×Z}ÜëM™¢Ÿ aáZTTa_x)-z¡P=¥§§›‚%Û¶móÛsÔÏ´PIjjªdffÚyx†0¯¡¡M­¾«ƒZ=zôð(Ôê, ¸gÏ3oýúõfÀ¨E‹òë_ÿÚºÜUHø­·Þ2óO:e^kØT_‡„„˜mØN£Fr{\º_ý–»b6l(Ë—//Ò¦¤!aµlÙ2óÍy òjÝ7n¸í‹âÖqFÛNqŒ+îx/]º$'N4¡^­Fܾ}{Ó^«BÛö§»¾s<Ë:¯¾új‘¶ÔÖ¾-îºw?¨U«V™6§OŸ®¶ï¿íÛ·K»víÌ ¶Ö®]+:u2Õ¼§OŸ.Íš53ÕµµB‰ã€¬¥­^7}Ì¡ÞÿiiivË®^½j÷ú_ÿú—¼öÚkòøã›ýëããÔŠ+Ì=)ï¼óN‘}èvôg=K ¿sçÎ"í¦M›&Ï>ûl‘sÖ÷h·nݬr½W{öìiªRtèÐÁÜ;¶4D­ºèï'mÓªU+ëù©Ã‡›ß_#FŒ0޽R^žH` v0ÿégî\¹SÒÀk鏨jž„T­é8mpp°Ë'þ@H€×ÑjœZýUÃvú¨¬sçιlë,«A>­ö;pà@Ù»w¯Yþé§ŸZ—» “jPQç_»vͼ֪ºuêÔ‘‘#G–èøwïÞ-?ÿùÏ%((Hþð‡?X·ç¨4!a¥aÜ©S§J5äå—_vÛÅ­ãLË–-eðàÁ%>^­êÛ¸qcëõÒЩm%aKFDDx|=oß¾->ø ©*í¨wïÞ&Z\w?¨ßýîwv×¾:Ñ ¬eµÚòܹså‡~pz>\  óæÍ3Á]§Ázgmµruß¾}eÑ¢E¦ºƒ³ëcy­áÝ>}úÈ»ï¾+O>ù¤<üðÃòÆo˜®®¯•Åmï Ûíè bbbÌë ˜ûG8¶KLL4?;þ.Ñjßz^J+ëý9aÂsïê|ýdû~úðÃMØ^ÌÉÉÉ&¼ì,?{ö¬Œ;ÖÜ·º-Ëñxõë C†{;vÈý›@$?Ÿ¾^G¿¯c^[·n¥3ª1}²Ÿ5Ð)1?€„„x-­è«Ug5¨÷Ë_þR.\¸P¤V ÕP øÙÒÀ¯†ù4Ô¨ÕDmYƒZÕV¿~ýL0Ñ–†k×®-—/_.öx÷íÛg‚«=ô©|«RÝ)mHØ"**Êz‹ë wë8£¡KgmܯAC£–ðìúSç}ñÅN÷íì:vìh*ÊÚúñÇM˜TÃäžô—»ûA?^Z·n]­Þ_Z5Wïy­ü¬¦ßŽýªÁ] x~ì±ÇLÕaÛj–¶ÚŸÅÝÏ–×úE r« 6˜yzÍ¿ÿþ{3ïÿþïÿ̼?ýéON·ã*oÛN?0©[·®üþ÷¿·.×Êš×ûTiˆ\+$[huaýÝ3kÖ,ë¼çŸÞmÈÝÖçŸ.C‡5ÛÐ éYYYUÑï_7SwÚ4þƒñDn®–ãIM¥/€×Ññ-ÿJII¡3ª9ÿìÒ¥‹yR…Ž ðzÇ—§žzÊTùœ>}ºÝ²ììlþŒ‹‹3U`5¼¨´š§ê´lÙ2»u,áÁ^½z™m߸qÃTÕÀàûï¿o×öÈ‘#fûþݼy³lÛ¿¿lÙ²ÅÚæÛo¿•Aƒ™âoû[Sµ×–Э#u ×vÒÀ¦cR+¸ê£ã4°¬•pCBBdذanû¢¸uœÙ¹s§ékÇŠ²îBº¯&MšH×®]%==]víÚ%:t0í—/_nm§aíg ¦¦¦š*«Úç°vu|ðÙŽ>6MIÛh¥V _ž9s¦Èuuvw?hȵmÛ¶¦¯ªƒÏ>ûÌTçÕð»Vhþæ›oܶwÕ¯Öùz=Ûæää»ga}K¥ç¿ýíoÖy· )—&$¬žyæyüñÇ­Ëõ~úÙÏ~fî1 )ëûW+ oÚ´É:ijÛ÷˺u묕’µŠ±'´’¶nW·ïÑ*̶m…¡W›÷ Š¡¡ðÅ‹éàut|UǪ¼îIV¨:&mŠBè8¤>ANŸz¨;ôihLþ7ýôÓOÜøþøc»€³Þ·Z={äÈ‘õŸV ×íhþå—_vÙN+uüüç?7¡÷?üáv}Ué´Šðýë-ééü‡QZE82’~^GŸ §c\–§ë¶tì[« SI˜JÂ@H€_úÇ?þaHµ °£â*΢Vp¬&ìo÷ßÿüg—¤« Éj¥\ ÿò—¿4!lWïÇpv¿~ý¤U«V¿·**$¬• õõÑ£G‹=­¬­Õ|ÇŽ+ݺu³kß§O©]»¶\¾|ÙãþÓÊæZeÜѾ}ûLí‡zH^}õUù׿þUµZ?(jÝZ$.Ž_l%•œ|ÿ¯åû.»øB@UY±b…×p‡0¿ôôÓOKdd¤Ó ¶„„=§M¾ª´²«ÑÊÑO=õ”©¦ë ·¼_zõêeÚݸqÃ|¡Utßÿ}ß[ÎÎΖš5kJ\\œ¹ž–Ê)ζ¿ÿ~ë£Øôl9rÄlGý›7o–«W¯šö[¶l±¶™7ož©Ð¢AâO?ýTBBBdذaÖåß~û­ 4ÈTáþíok*{ ÂëFÜì%uÿ>0}§aa/’ tp‹0¿”››ë2ª!G­Šê,@Œêw?à?8`ªãÚ²„mß}÷]iРù9 Àiæª «Ù³gKPP™Ÿ””ä²¾ç›7o.õêÕ3Ûs¤•¦µ2°%H¬Ûœ4i’u¹V"¶ìGÿ?~¼deeY—òÉ'¦}ff¦÷\Ôôt¹ÁD.ä/­ÈHúx)S¦H=èà!aà’mض  @¾üòK¹uë–×çÍ›7åüùór÷îÝ2oK¿Dpá§_$Ðyºoìƒ"òò ®úaÑ¿+,£F.œ¼Hll¬ôë׎n.¹« /#*’“C_”Å´i…ak/¢O7nÜ"$ \"$ì£ââDjÕÙ±ƒ¾(«ÄÄû1?PX™ÀK´k×Nâããéà!aåç§ŸDNŸfbª~Ó_ˆìÙ#rîœÈùóÿ™îÜñù·õ7äÊ•+rïÞ=~Çù½ç´‚°„wï¦?ÊÃÉ“…!á´4úxˆˆIHH #€[„„” KjЉ‰©èª#÷"=zˆDG‹ÄÆŠÌ+²zuaøðêU~‡ lΜÑ2"ÁÁ"©©ôGyÉϧ*3ð:²téR:¸EH@ù¡’0•„í+ kP3%¥pÚºµ0¼p¡ÈÌ™…Õ^{÷ ûOXCÄ#Fˆ,^,rì¿Sà™¬¬ÂÀ¹YûõÉÈ OÊ[d¤Èüùôð<ð€lܸ‘Žn ªå冂W¬(¬0¬aa k€xܸÂù»w‹œ8QFÖP2áìêF×à¹ÎGÖ²1"­[‹¬_/rçï§Š ~ík/••eBÂ):Fà!a¼‘V"ÖÊÃZqX«˜j•XKÅa&&4_ÎÏç=S‘´ú·¾¼ÀùóçMH8==ÎnÀW|õ•„©$,rñ"ï…Ê–˜XÌðiii&$¬…Ü!í¸£Õš5$œ“C_€*—’’bBÂwîÜ¡3€[„„w22 CÂ;vРʭ_¿^é”Hvv¶8p@¾üòËRÌ·lÙ"ƒ ’k×®9}í~úé'9zô¨œ;wN ¸iøBÂ@qôƒ·Å‹éPå%""‚Ž@±îÞ½+o¿ý¶„„„˜êÓ>ø õßÇ{L¾þúk·¥ÛÑu¿ûî;§¯}™†§{õê%¡Ü{Š€IDATdÎë‰'žO?ý”›€Ï#$ §G‘™3éPåæÏŸ/;v¤#P,­ô«×øøx9{ö¬ _ºtI>üðCùÕ¯~åu!á“'OÊ믿.¹¹¹•ÚO;wî”wß}W®^½júèã?–ÐÐPyüñÇKUu¼ !a 8C‡ŠDGÓ ÊÍœ9SúõëGGÀ­M›6™ïܹsËe{•~ï½÷Ì6¿üòË*ï¿éÓ§›cÑà2ø2BÂ@qæÌ‰Œ¤@•‹•qãÆÑpK«MÉ?üàQû'NÈàÁƒ¥aÆòè£Êرcå›o¾±.÷$$|ðàAéÙ³§Ô¯__:tè {öì)²ŸS§NÉСC¥iÓ¦òðÃKûöíå“O>‘µk×J³fÍÌ6Û´i#:u2~==>]_×ÉÉÉ‘¸¸8iÔ¨‘¤¥¥™eZxáÂ…Ò£Gsl­Zµ².sE+v{K`Ê‚0PœÄD‘à`/ª˜,5 ¸rïÞ= xÔþ³Ï>“ºuëJtt´ìÚµK’’’LÈWƒ¶¹¹¹¦Mq!á£GJ:ud„ ²}ûv>|¸ÔªUË.dkÙ„W­ZeBÀÞ=~ü¸ ÇÄĘm.X°ÀTÎÈÈ(ññ 2Dúöí+‹-’ÌÌL³ìÃ?”š5kÊŠ+$99YÞyç9}ú´ÛþëÖ­› -€¯#$ gÇŽû9ßÿÓ9+‹¾UJ«¡Î;—Ž€KŽÕÀì‹/¾èQûJ“&MäöíÛÖyß~û­Ô®][f̘a^Öm4oÞܺþõë×MHxÖ¬YÖyZÖu:äô84ì¬zoIŽoüøñE¶ûüóÏKDD„Çý§!eÝÖæÍ›¹™øø ©: þ€0àÑ_Î÷ÿtÞ¸‘~U*00P鸤!Ü:uêÈÿûÿ¯Ø¶ªÕí«¯¾Zd™|6lh~v¶l#$$DZ´ha75Ên?–×Î8 —öø-[¶LêÕ«'5kÖ4Õ‡oܸQ¤†‰5 ¼~ýzn"~ƒ0à‰ðpªô€*¦AÈmÛ¶Ñp«]»vR¿~}¹té’Ûv·oß6ÁØ—^z©È²Þ½{K›6mÌÏîBÂ&”ø2B€'æÏéÒ…~UFƒ•fÌÉÉ¡3P¬Û·oË믿.õë×7÷e 0![Ûìºuë¤aÆÖ6‘‘‘²wï^ëòâBÂJ+\k…^Ë6‚‚‚dÒ¤IvÇ´k×.iÚ´©µMXX˜]xöìÙf=]–””Têã³5yòdë6õßñãÇKVV–uùèÑ£íúÇvr¬j ¾†0à‰mÛDèPe¶mÛf‚‹– «€'îÝ»'_ýµ Õž:uJnܸá²í… äÊ•+eÚŸ®¯ÛÑýºrñâE—UzoÞ¼)çÏŸ7ÕËëøôXt›·nÝâ†P­<‘šzÿ¯çû>çåÑ J¬^½ZBCCéàB€'´²‰†„£/@•X¸p¡DDDÐÀ#„„¨¦ôQmçΓC‡ÉåË—½â˜ô1‰}ô‘_÷ûÁƒåûï¿çôUµj‰ìÞM?€*1sæLiݺ5ùäS½÷Ÿÿü§Ì›7¯DnOžˆU¤K—.2eÊ:x„0ÕÌíÛ·%$$Dzöìi~våàÁƒ¦Mýúõ¥C‡²gÏë²µkךª¿°mÓ¦têÔIvîÜ)wïÞ•… J=Ìz­Zµ’´´´biéÒ¥l7¯¸ð‰'dƌҽ{ws>cÆŒqº=uê” :Tš6m*?ü°´oßÞTPvu¶Û2œ/]ºd^GEEÉ /¼À ékDx¤'¨"2—§U /^4c²_|ñ…œ>}šÉG§Ÿ~ú‰›@•"$ @5ô›ßüÆ„c5`ë,„{ôèQ©S§ŽL˜0A¶oß.Ç—ZµjY+îj€6&&ÆlcÁ‚¦"oFF†|øá‡R³fMY±b…$''Ë;ï¼cB‹Ó¯_? µU\HxÙ²e2lØ0Y¹r¥$%%IÛ¶mMØÖgŸ}&uëÖ5áU«V™°†˜?îòl×ÓÇ7îÚµËl_ƒÒÖJÌêí·ß6ë2Dúöí+‹-’ÌÌL³¯çoKUÛYLž5 ÅÜ9s\?£~l„„(eôø:UQxUYý¬^½º1"`º%K–¸ê¾^еZµj.Lìïé§ŸvãõþÌ™3í‘Gñ½ÖOUËݳgOÔmR8W•{û÷ïï)$,ï¼óŽ kUäýøã]¨Y¡à)S¦ø¦S€¸V­Z¾ýоû‡ƒ÷Á3iÒ$«Y³¦o¾ ØâÅ‹}ïG KóæÍ]…f…¬ý©‚±Ú\ácCmÚ¨ü5í@©ŸI}/'OžÌóžžÜä=+œà¾›h¯cYFQ4hëoBñuìØ1ôîׯ(„„(¥ô冪몲°* ‡sèÐ!Û¹s§«~о¨Q5âóçϻךN¯OŸ>×ö¬[·Î*V¬è¶'Vçγݻwû^k´îPÛºk×.;|øpLûàOû®6ÈU7îÙ³gÀ8U&¾ì²Ëlܸqœ„ÅU÷îf­ZÑ$Q¬!aݯ›Íƒû}-Zd}ûöµãÇ»×Áßà÷C-'xš¢Ö»woëܹ3'G16pà@VX€Â@H¤ŒY³fT.Î>øà÷Å“*2ûûÝï~gÆ ã`gªôÒ¨í@Å~ûí·Ýt_|ñEÄåE« ërŠR›6m¬OŸ>œÅÔþýû---Í&L˜@c !aR¾ûî»±:t° ä©j|ôèQrq7j”Y¹r´IKHxâĉV§N7]ãÆ­iÓ¦6wî\7ÞÓë#Gޏ×Á!aÿ÷Ã-'x²bÅ »å–[¬J•*î)R . Ø6=©ê•W^±æÍ›»i6lh«V­JH›4jÔȆ ÂÉQL©Š°ú Ïž=Kc !a€$У) —P3f\øWô…Fû}A+–ðgŸ}f½zõrÓ½øâ‹®ðöíÛÝ4Á¡àH¯Ã-'xž5kÖX… ì°÷Þ{Ïî¹ç+W®\@õáÙ³g[™2el̘1¶hÑ"{íµ×lóæÍ i“5jØØ±c99Š!õREP ñX¶,7$¼e m@’Äz5PWâ ‡[Nð4mÛ¶µºuëúÞ?~ü¸ ?õÔS¾q=ôÕ«W/áíqìØ1·-óçÏçä(†TZçU„…0U$RHxÉÚ€$Iµðùóç­bÅŠÖºuk{÷Ýw}CíÚµ­S§N¾y&Mšäæ¹ë®»\…âDÙ²e‹[înZ.vN:e6hÐ Pè ñ8rĬ\9³É“i ’¤OŸ>.« ºÁZµje;wv¿VHxÿþýî÷ôôt«_¿~Àpï½÷¬{ôèÑvñÅ[™2eìÉ'Ÿ´'N¸=TA8\{ µÍ™3ÇUœÞ±c(t„„(޾ÿÞlóf†Ò:lÜh¶p¡Ù®]|ŠJíÚzN$í@’ 6Ì…bÿö·¿åyïºë®³G}Ôý^X!ásçÎY… ¬K—.1mÿ¬oß¾vÑEÙO}ºµk×ÎŽ=š2ë)¬m*nÇŠó”T„„(ލ$L%aU^¿ÞlѢ܊¶ú’H¡aU%Ù°ÏH²©»w§H’ï¿ÿÞ~úÓŸZ:ulÙ²evöìY;|ø°õîÝÛ*V¬h{÷îuÓíÛ·ÏÊ”)cÙÙÙ.ì¤é$Þp¨åO³zõj7M‹-lÚ´i.úÑG¹°•gèС®ê¯B=ëׯ·ôôtëÔ©SÛ£OŸ>Ö¹sgNŒbFçB¥J•ܹ ¹¶nÝên¦Ðu[×jýTöD…,ƒÿ&äw¾ü.'‘Û—ŸmÿüswãÆ7ß|“å/Z´ÈúöíkÇk¾à¿%ù]N¼ëIÔ´žü†„srrìù矸Y"ÙǪ$ŸÇ¡Ú3¿Ç!?çc¨å$뜉CH ¤Ñã ÓÒrçNÑÉ0hYƒ´IöÃ?Ø®]»\XfË–-vúôéÓܬF Ú$Ý‘#G¬\¹r¶lÙ2£™5k– Ríß¿ŸÆ’ìÌ™3–žžn·Ür‹û=œ+V¸iªT©b×_½-\¸0Ï4'N´¦M›ºÏnvv¶«`¿jÕ*ßx]“å³Ï>³'Ÿ|Ò~ö³Ÿ¹uwíÚÕU›È ^NÏž=ÝëPÃÁƒc^—·ž}ûöYÿþý­N:V·n]2dHžZB…„£µMpHØÛU¸6l˜]}õÕvÝu×Ù„ ÚRÛ¡ù7nì¦ÿý÷£«×^{Ínºé¦€qºùÆ›ßý_ýµ=ûì³vå•Wº§LŸ>ݽ¯4®½öZkР[^¨cœŸyc9áÎ!UÛmݺuž‘,Xà*ëÉ‘Ú&T{Î;7ê6…›/Ôù¨m{å•W¬yóæî\hذ¡ÛöHË ^†lÚ´ÉUÒ¯U«–U­ZÕµ§nøŠ¶„„Jª-[Ì22̺w7;{–öH¤ùó/üKúG°@Ò­]»Örâ}´8ŠVŸ>}¬E‹4PHüqw­TPòË/¿Ìóþš5k¬B… öÀØ{ï½g÷Üs»#¸"ª ½ë®»ì¶Ûn³W_}ÕvïÞ'X;zôhëÔ©“½õÖ[6sæL»æšk\2Xð|Á¯ÿøÇ?ºê¬Þ Pª¶óÒK/µï¾û.æuyËÕ~Ý~ûí6tèPrÕ¸—_~9â6ÅÒ6Á!aošGQ­O×¼2eÊØÜ4 ¯öêÕËM÷â‹/ºýÛ¾}{Ôcõoÿöonýþ¶nÝêæùýï°þûï¿ßZ¶lio¼ñ† )+ú /¸à©Ž]‡òT¾-ȼñ‹àshܸqnü¢E‹¦×ò4]´ó8\{FÛ¦pó…:fϞ펡‚ÒÚN›7oޏœàe|òÉ'V±bEÖ>+H¬Pðºu뢮$!a€’Lw‹§¥™ F[$ÒÚµ¹!át¤$‹‚5ºÅJff¦ ×Ó¨ŠÓ§OÛC=äŠ_|± fž;wÎ÷~Û¶m]e]ÏñãÇ]õ©§ž XŽxìÑ£GÈñþÕwý) ( 5_¤å¨âoçÎ]`wùòåa÷5Ôº¼å*äê9{ö¬]qÅîoˆ5áàmˆ¥mÂ…„o½õV;õb jœÂ£ý¼­ÑŽU‡Ž=êöWûîùꫯ¬lÙ²6iÒ¤˜Ú&T{ƲMáæ >´îzõê…]v¨å/C!u½^¹reÈeD[Hè®ÑµjÕ²k¯½Ö½¿bÅŠˆó…[þŒ3좋.²þýûçÙŸXÖn¹ ìjü¦M›BNkÛ„ û¯ïÛo¿+$êXI|ؽV°¶k×®nÜøñãî?Ù!áxE¨ã) nëo»BáM›6ë<nÏX·)Üqˆ¶­mÚ´±«®º*ârBOz­Åb¼x„„J‹cÇô …Ù€´E"´ooÖ»7íÀ?L:ÕÒÒÒ\Õ)S¦ØŸþô'* °’ðM7Ýä‚6ª"8†' ªú¬c–““Cc…D•x³³³](òĉ‡~Ø}õ·IV¯^í‚™-Z´°iÓ¦Ù‘#Gì£>²éÓ§,+–°ªý^~ùåî½aÃ,½þúëÝûo¾ùfÄåù¿þá‡ì¶Ûns×xýÝÔßLÿáäÉ“1¯Ë[î­·ÞjëÖ­sí ¿ªÒêkÃmS,m“ßð¾}ûܲu|TÍXUs£+½§×´ XçÎ]µÜ¢ Ç{,Âo·nÝê»hôèÑqÇÁíyêÔ©˜¶)x>¯buð¶:ÔÝä¢À¸ŽUzzºuêÔ)âr‚—¡í×y—••eË–-suÜ–.]Ó:@â(MF¢šp¢dgç…€ ¯èÑà£Ô÷€„Q@HÁmÀ^»v-’âôбòX’O¡üÌÌL_õuý¬^½º1"`º%K–¸Š¥^@³Zµj.„é/–°¼óÎ;.œ©q5r7v(d«p¤¿áæó­p¤Jò^µÖXÖ¥åV¨PÁM«}×´•*U²aÆåi¯Pû­mò–§Ÿ~Ú-Oï©2~´c¥ðtÏž=ÝS 4ôêÕË>ûì37íïÿû°ëOvH8žc)$,Í›7w‚ÈŽ÷<öoÏ™3gÆ|.Ïj[yäß4úÙ£GÛô}RðrBí¯Ú±V­Z¾óIûå…ÎcYH,B¥ɩSf5j˜ H[Ô!fYY´ ÔS°£F®â¯råÊV³fMøQX˜ðijëÞ½»;V ŸBŠª\ªŠ¬ªÄΡC‡\ØUaÔ‚8wîœíÞ½Û÷úüùóîæŽ‚.7?ë:~ü¸Û/ï½/¾øÂNŸ>÷zÕ6ÁˆÖöjÛb=V_ýµÛ¯T“ˆã®j¿ Bç÷<nÏX·)x¾P4¦‰tþIJÙµk—>|8_ë‰CH ´Qå…ýîPG>蟙™´ ÔkÖ¬™«ˆ§G^#ñn¾ùfWmoþüù®ZóŒ3h”Ö A¢›Ëáƒ>p×U½ 0€Ò’Û¶m³•+WÚÁƒS~[ÛµkgãÇOù}P5Œ ”èsgÅŠöÍ7ßð!BáÛ¿ß,-ÍlìXÚ¢ fͺð¯éé‚E[J­É“'» ‹‘äxì±ÇÜ#ÃUUð¾ûp ÓcãäÖ± ”:¸J’Qq BÂP[·nu²ê/S¦Œû©Çê¥jXXšÑ64(¥÷AÛ©ÿ ¿ôÒK¾qÏ?ÿ¼Û¶à!MAÇbêÏþ³]}õÕ).G Õ«—=,˜U«rCÂ;vЀR«I“&Ö¦M"‰&L˜àBÂÇ·U«V¹~ÑE‹Ñ0)HÇEÇçØ±c4 ¤Ã‡ÛÑ£GiPh @Üpà –™™i~ø¡«ÜðùçŸÛСCVVÕ7ŽÕ!TH8QûÈmUgw:uìäÉ“¾q^HøÿþïÿlñâžaéÒ¥ ;ž‰nïXÜyçÖ­[7>L(|ªf¢€ëöí´E~íÙ“Û† P ͘1ÃõÙQ55¹Ô¾jg¯±E‹–Mä õm7jÔˆ†¤ BÂO ’níí·ßvëøâ‹/²¼àp"÷!QÛªªº•+W¶éÓ§Œ÷BÂ_~ùe±iïX¨’sùòåmÉ’%|¨Pø22̦ ¢\9}#J;J%U¦ŠpòíÙ³Çõ[^{íµîµÂÙzÂZa;(î¶oßîª0Ÿ>}:©ëéÞ½»õÒ¼H„„ ŸÎœ9cééévË-·¸ßÃùì³ÏìŽ;î°š5kÚO~òWíaïÞ½¾÷'NœhM›6µýû÷»ê—\r‰ë¬ÔxUÓUçoãÆÝ4sçÎuó¬X±Â­·J•*výõ×ÛÂ… C®[UvþóŸ[µjÕÜôË—/ǺÑÖn[ÏŸ?o¯¼òŠ5oÞÜÍÛ°aC·o‘Œ5ÊjÔ¨‘g|´°ÚùÉ'Ÿ´ŸýìgnŸºví2x»iÓ&ëØ±£ÕªU˪V­ê:ÖUE9R{G;†áŽã/ùKkݺµk ,pœ8à^ë‹”ù—)ŸµÅ¶mÛlåÊ•.žêÛÚ®];?~|±Ý‡¨ 0«WÏììY.êùU»¶ÙÈ‘´ ÔÙ±c‡ëK›3gQÊ”)ãúXEO„«]»vR XÄkß¾}î|xúé§SªÝ°V¹¶Mí§>ayOœ8‘”õ5hÐÀU?]ÛÔ÷®ï 6nÜh›7of```ˆiøþû﹈!a(€ÇÜu.*˜*¼úÉ'ŸXÅŠ­}ûö6oÞ<›9s¦ Ù*@êUyøíoë–q×]wÙm·Ýf¯¾úªíÞ½ÛSUq@ï½øâ‹®Ê­ª¬Y³Æ*T¨`<ð€½÷Þ{vÏ=÷X¹råòT¿]·n[·‚ªêPyë­·ìÊ+¯ÌS98Ú>IJ¾pÛ:{öl×y=fÌ[´h‘½öÚkî?j‘´jÕÊhƒE =Ú:uêäöSí|Í5×ø*k„ÇçBÀ 1«­ÂíC,Ç0ÜqôÆißýi;5ç‘GqAîà0qI£ªÉYYY®Mt^è§á©´ ®¼]÷!ª .ükðÂ?׮傞_z|d }!@a2dˆÕ«WÏ…º|êT_”×'©öÏÈȰS§N¥Äö¥jHXýµê+þÛßþæÎUUaÖv¾üòË _—ŽúΗ-[Æ Ä@ׯ©S§ºïfÔï®Ï>Ÿ ñѾ ´#$  G“=ôÐCî?_|± †*XèiÛ¶­]~ùåUz¿úê++_¾¼«z+^´Gy–¯ ªÞóäj™uëÖõ½>~ü¸ë8yê©§æU˜WUoý·G”ZÞ3Ï<×>IJ¾PÛªåê‹‚x(À{ß}÷åï…„o¿ývW ØT±$……ƒ·Gójœ*À†®½£ÃpÇñèÑ£®MÕþó–-[Ö&Mšä§ ²æUGzI¦ðwff¦«Ü¬ùÏ?ÿ܆jß|óMB–Ÿ““ãΓD=f1TH8Qûèm- r+ #ôHÕîÝi@©£Š©ê×BáPAõU­ýÇÍÞª«~ZìRAª†„ÓÒÒì…^wõÕWÛO<‘ðuÍŸ?ßµÁ±cÇ8aÔ·®ŠÛêk×uLO[9r¤û )èG%a* X„„ TaWwSàwÜáî~þᇬR¥JÖ»wï<Ó«j¯W-× —îß¿?ÏtÁ¡UUšUUÛÖ­[Û»ï¾ë´nU§õW¹rå<ëzŒ´ñ¬/TÀVAX¯º®*õF£íSuÖæyÏ ÿêW¿²ø†à`­:—ÔA®%ÿ@°·/ª¸®boð>Äz #Çž={ºŽh…«å¥—^²êÕ«ÛÉ“'}Ó¨Mý;øK"/ žÌG †: "øó’È}Hô¶ˆ>o ó'©ê>ozDœ>‹Å¶âr$ÙÙf-Zx1‡²víÚ¹ŽpUa×ïGŽ 9­®{Ë—/wçO~ª5MŸ>Ý-_72„z]Z%ªâ9–P\mذÁõmè' ‡ &\tÑE¡à>}úX“&MRbûB…„Õ'¬B êKMOO·®]»Ú’%K|ï÷ë×Ïî¿ÿþ<ËÒÓÜn¾ùf×§mÑ4kÖÌ=Î éÿí %~ðÁ oUwN•㤪Y³fY£FÜw/Æ ùÝ€Ä"$ ò÷¿ÿÝÔª :6‚«öz°­Y³¦ûÝ —jþ`ÁABo™ê ­_¿~Àpï½÷úæSG§¦ ®ö)$i¢­/Ô¶zFíªé*ü«ÎÜ'NDlGM«Îí`^HøË/¿ 9ßìÁtKªFìUÖX±bE@Ûow,ííF:Žºã]ã'OžìBÇj»Ç{,`šqãÆ•øGᨳΣ[n¹% *s0uú+¤®¶U%ìnݺÙÞ½{}ïOœ8Ñš6mêŽMvv¶ }¯ZµÊ¯S§ŽkÇÆ»iæÎëæÑ9 õV©RÅ}! cÊÒ¥Kíç?ÿ¹U«VÍM¯¦ÿç%Ö}ˆ¶¾HÛZ$ôeÞ…m±$„Ô·nÝê§}Õ5@?kÔ¨Q²Âƒ›Õ®]àÅ|ýõ×®}ôEß„ òTQØZ׃zOɽŸW\qEØkc(Á׫H‡©°ÖëßdµC´c %nòWø…G}aê;õ¯Þ¬¢ú§úÇŠZ¨°ú†Õª§¾)ø{Í5׸~[ÏØ±cÝ<ºÁÜŸŠVèIy±,#šyóæY… ¬yóæ®ßîÆo Ùß›íÛ·Ù· —®_ é÷êÕ‹p0Pˆ @)X¤À–*ç*D¨ß}ôÑ<ÓµhÑÂ…%ž°B¾êÐìÒ¥KÄíPDÍ÷Ë_þ2`|´pð>ĺ¾PÛêOÞ¾}ûºJÑãvÕUW¹h°ha/Uõ½ì²Ë|ʪŒì_IØÛ—zª˜ã>Äz #GûTy¹mÛ¶¶xñb7Íúõë¦yî¹çÜø’^ÅóñÇwû©ª¡Žã'Ÿ|âª=«3]÷êôWÈVA`UñõogŸ·Ýv›½úê«¶{÷n.VÇ¢Þ{ñÅݱܾ}»­Y³Æ÷xÀúrAÁçéºuëܺõ™Q¨W_:\yå•y>/Ñö!–õ…ÛÖ"•‘a6|x«ϥ÷á‡ºŠ·Ÿþ¹ :Ô¾ù書–“““ã®ÞyRÆŒ± ¹À•˜u½Ñ91gÎûÃþà®—º±ÀãÝÀ¡ ê _ëÚ¢k«*Õþú׿N¹p¨c¶hÑ"÷·À«¬žlÑþnoO¢Ú!Ú±€’@7û‡U‘|ªRªÀ‚* ·iӦȷ/TH8˜úÜüû_õäõÉýçþ§oš;v¸ÿK«o-–eÄÂëÓÓ  Åê+N†ŒŒ wÃ0€¼Ô¯©Ïà¨Q£h  €úöÛo]GíÝwßí^«³<¸ªÁwß}gU«Vµž={º×‘BIª8ª÷<ô´lÙÒÊ—/µ§:$úÓŸŒS¥Ôh!áà}ˆu}¡¶5˜:«ŽDáÉPÓD {)$ª÷^~ùeß8/$¬j°þm§q7nŒyb9†ÑŽã³Ï>모Þ~ûí®jl°=z¸Çk•t§OŸ¶‡zȵ“Î1|ý;䤾üò˪ô~õÕWîüSjÿvV› T×2ëÖ­ë{­0 B»ÁU¶æUåbÿíQ¸1¸’t,ûËú"…ê‹Dv¶Nö„.Òk¿H×›X¥\{ù›??·óŽ^”¾Óã2ÿüç?»kŒçÝwßuû?XU‹ 0B©pÌ¢…„£µK2Ž%”[¶lqÿZ›„§!<ëÔ¥P°?¯š°þZ”"…„uóøž={läÈ‘…D7íëf}ÂЗ^z©›'ÖeDk7=ÙjÆŒö‹_üÂÍ«Ÿz_"iÛ´ìeË–q²AÔ¯™––ænªPø @>}úé§îo ¡ž8qÂU8xøá‡}—÷ßß½VǦ·ê(íÖ­› ª3]"…’4½Â¥ZªÌª#tõêÕnœ*ÙN›6ÍU[øè£lúôéó*˜ªå*ü¸`Á{á…Ü£ÔüC±ìC¬ë µ­ªªÊ «znzzº{4\$sçÎu•XÕ^þ"…½´.…Koºé&Û°aƒ«B« ´šþÍ7ßôM§ýT ÕY«ê­ãÇwáépûË1ŒvUõÓ«T¡ÇãùSuI="OmUZ(À­êÊjU>uê”k‡J•*YïÞ½óL¯ª½ªHëßΡEJT¥UõôxB…,½Aë>+W®œgÝ‘*o‡Ú‡xÖ—r¡WuÎ*èšÀJ½ {ë3Ë-·¿ƒé1š¦J•*îs«JÎþÞ¯S§Žk/UïVÐ^׉”‘““Ûv øH×dË;p3ƒ®YÕªUËs] E•ªuNÖ¬YÓßu½Ú»woÀ4±„„£Ù´i“ûb²V­Z.«*T5:Ü1Óxý®¿#ñl¯7Ÿ*P6Ì®¾új»îºë¢Væ‰ÞžPí /6õÅ¡ÿ6ÇÒ>áŽ%”úÿ˜ œ-àSuõ×êÿ­Mš4ÉóžúnU„ (I¨°ž‚ôàƒº~?õ¨ï@ÓèÿÕžY³fùB¿ê#Ô“àþýßÿ=®e„£§ZiZ=‰I´|õ-¨XËL¤ùóç»u÷!\»¦ºïSE‡0ä“¥ž™™é:þÔ©¨ŸÕ«W·#FL7iÒ$~òB¢ 4°Å‹ûÞV¹Pª ‡iš™3gºqª ¡j»Þ2õ¾Â½þNêÚµ« Åj¡”ò=ƺ±¬/Ô¶>òÈ#¾×ú©ê¯ª¨‰:²ÕÑÛ¿ÿ€ñÑÂ^ï¼óŽ kuˆüñÇ®s\û?eÊßt «3ÙÛí¿à9T{G;†±ÇæÍ›»JÁÄ ©©ÍÕ‰^š¨ÚµkçÚLY…~ƒ«öz°UûGkçàà­·LUëׯ0Ü{ï½¾ùT5DÓWûŽ´ÑÖj[‹œÎËråÌfÌHèb½G9*è곫ªÝº)àpÁkÝÔ cÿvQˆTƵœ_|ѵþ)ãØ±ÜðäÉIY¼ W%òh>ùäToß¾½»Öé¦ë%—\â*;‡»^¿Žå¸xëÒõtܸq.¬ÇÌ®[·.ì1 ^O¼Û«íQèX7Uèú®¿[ú¢0œh7¢µƒ* i¿ÿò—¿Ä}Þ@I¦FûôéCC2=ðúoý79Iý±Öÿ—]v™m۶ͽöžþæ_XOîúñl}ûöuÿ×ûº19že„3|øp÷”²ï¿ÿ>`¼þ/¯>ààñ¡J©¡Ü@i¦¢.ª ¬~CE‡0ÂDê„UÕ@Uã gçÎù~„ÙÉ“']•_U*õ§åi¹ ‘…£Pj¨ª«ùÙ‡XÖ¼­šV¯ÕÙ+…ÌÓöÄC¡ÎÝ»wû^k´îPÛ»k×®€Z,í]c¨à[Ïž=Æ©*¨:¸°+­Ÿ²eËÚ]wÝå*Íê÷G}4Ït *(ñ„„u>(È×¥K—ˆÛ¡ªÑšO6 >Ÿ"…„ƒ÷!Öõ…Ú֔Ь™Y¿~ ]¤>÷=ôÛW…ä_}õU×Nž¶mÛZݺu}¯usƒÂ–Áí”l/zfR­kšöýW¿úUÔiÕžºY¿róW_}å¾ {òÉ'}㢅cc9. -GúB.Ô1 µžx¶÷Ö[ouU»½¿^@?œ‚„„ÿüç?»Ïöÿþïÿ†lçXÎ[(©jÔ¨õé.H<=ÕÌ+b '×0`€«ð­HC²‡„½>—_~Ù7ðÕßü©Ø„Šè C7ß|sž~‘X–Šúõ4mp?³ú«ÔOŸu4êÃì—à¾5 8S?ž‚ó­Zµ¢ò<PÄ R’3\M¸¸úàƒ\g´*2ûûÝï~çoWZ)$­àèÝwßí^gee¹*Òþ¾ûî;«Zµª/`)$¬ªÌzOU>=-[¶tÃFÜ}òÓŸþ4`ÜÒ¥K£†„ƒ÷!Öõ…ÚÖ"7x°Y’ªè˛ڵk»}¾ãŽ;\±Bøº uëÖöî»ïúM§êÑþR>$¬€uïÞIY´nhˆ%$ìUîb;TÉYUw<‘±±oUü ¾™"Ò1ó_O~¶WmáÑ 0Á_ËoHø£>rU™T ;X<ç-”D^P5¥žòSJxO±Ò ãLý-úÿ©*=E oïÞ½nÛþã?þýÖ6èæà›nºÉUÕS„THAÓ¼ùæ›óêÿâÞ¾3Æ7>že„¢Âz‘nðÿüóÏ](xöìÙ. ¬@r¢(´­~Ž‘#Gr¢ÿ ï>tS /€¢GH²- :tè` 4ÈSÑXlK UëÈÎÎv>T­Z•š~øaס?uêT7Íûï¿ï^2Ä…oU}DõªÐé}ñ)$¬éÕé¯õ¨mõ%ÂêÕ«Ý8Uò˜6mš êK‡éÓ§Ìûì³ÏºåêQƒ ,°^xÁn¼ñF7î™gž‰yb]_¨m-r‹]ø—á…&©ÚŒŽY»ví|Õ_½/¶ÒÓÓ­~ýúý÷Þ0oʇ„»wW¹˜¤,Z¡T}qõÿþßÿ‹8מÞùêOáUUãñD Çr\¼i‚S´cj=ùÙ^Ñ5"Y!a}ñ¨*¡¾pç¼€’H¡/õsQ²hxAÚEêÇ A…ôþðáà }ÛâÕºßzë-߸wÞyÇ…|5¾Q£FöñÇ»~³‹.ºÈ¦L™â›Ný¦zjnÆ×ÿùýźŒH}?þñÝü•+Wvó©Ï1x=¡ã¡å¯]»–“0sÍÓÒÒΩҟ@\‡.UàPrrr,33Óu–+«ŸªÔ9bĈ€é&MšäÂÞúÒiñâž÷#…„E3¬V­š›fæÌ™nœ*8_uÕU¾eê}…{ý?~ܺvíê¾$Ð4M›6uÁBÿJ±îC,ë ·­EêÔ)³J•Ì&ONÚ*tܾTõ–sçιðk—.]¢Î—ò!aUa¾pn$‹ËW¥J;pà@ØiΜ9ãÚöÑGÍóž¾8kܸqØÏ‘ÿëXŽ‹7M½zõâ:fþë)ÈöJ2CÂúBOŸu:rßc9o $R•Ú>}úÐEDOÃÒÿ]ÇŽvõe©ªm¸ q"íÞ½Ûý¿[ƒ‚·zÂVpÕPý_ZÓytC´n¾.¨IA—¡þ?ùäw3¤þ•üR([} „ç\ýúõs¡~>@j $ ÂxzÌŸªòªs>œ;wæ çÅêäÉ“îK}YàOËÓr#}y Ê¿ªšˆ}ˆe}á¶µÈtìhÖ»wÒ¯`§*ÂÜ}÷ÝîuË–-Ý—GŒ8ßĉÝ`kÖ¬IÍ{„Ü*ÌI¢Š9Úÿ_ÿú×§ËÊʲk¯½6`œ*²W­ZÕzöìé)$ëqÑ4šgãÆ1³àõäw{½s)Y!a½^¿~½«vróÍ7çùœÇzÞ@I¤ d¤€*’K7Ôëÿͪè‰ÂÜ5jÔHzeÛ×_Ýw£¼ªôúW.MÚ·oo½“ا'z:—ž8A}¦R!aäÒãß22ÌPáA!êììl[¾|¹ Y* ­ŠÊúÒhêÔ©nšÕ«W»ªÌª;mÚ4ÒVE—éÓ§,kß¾}n:-OU¹S®ŪU¹!á û˜ ‘«Ôv÷Üs ©+$«*½z¬¦ÞSX÷ý÷ßwÓ 2Ľ¯vSuÊ«sÞ-$ËqÑqUåm}µ=ª4~üx[ºtiØc¼žün¯ÄV©Â·ÿ ´vX°`Û–N:¹ŠEžXÏ[(iôøxï ,(­Zµ²K/½ÔUéŒäÔ©Sîÿ­É ëÿÐz ˜ú ôÿãÒHû­þÂó@.æÕgHa u@.=Ra×eË ¼¨œœW]H_*P©ŸÕ«W·#FL§ÀæUW]å«:S­Z5&öôÓO»÷4ÍÌ™3S«ÝÎm·ùó“¶Š3gθÐk•*U|m¥AU°ö°¶á‚I“&YÍš5}ï«Â¾¬ó-ëq™7ožÕªUË7Ž·P6ø˜…ZO~¶Wâ ‡´±´ƒ*žhÜ£>š¯óJ’9sæ¸ÿ‡ü*:mÚ´±Ÿþô§Ö¹sç¨Óê8©¢°ž”3yòd/IæÏŸïúüoxJ+=¥O'f̘Ac)„0€ÒíûïÍ6of`(ÞÃÆf šmÛ–[ÉÔøÂùѤ‰Ù A [œ—ª4«Êª(Ž*»îܹÓ~øá‡°Óœ4DRû׫WÏ ñÐqôôUÖ2öìÙCc&À† \[O"JUºq{Û¶m¶råJ;xð ¶IƒkÔ¨aƒX€¢¤W=Õ¬]»vvôèÑ”YOamŸcÚ¤BÂJ7* 3”äJÂË–é€ÜA÷Rgõ+¯˜ hÖ«—Y‹f™™ÿ ëË=ªpøp³µk¹>”V:ö:6l -â1`€Õ”%XíÚµmÔ¨Q4D2dˆÕ­[×2Õ§§³gÏÚØ±c-++Ë~ô£¹ªÐ °É“'»±‚D .´7ÚæÍ›" Ÿ|ò‰½óÎ;vã7Z£F\Û¦¢­[·úŽw™2eÜO…8 ‹~Ûüö·¿uëÐS׊rÉ4gΫT©R‘Þ„ìãšßc<_²Že<ËÍÏ6<ÿüón=éŽk׸Òv ¸#$ @iwìXn0tÌ˜Ü Ã +$ª/ºwÏ?¾ÙgŸå†‘J&œzÁðD>.²Q#=‹’ÏF<¦N5KKÓ7n´ Ä9|ø° n¬Ò©Pdò½ôÒKݱ(H0uûöí6räHkß¾½edd¸å1Ä?\tÑEvÿý÷»ÏG*ºá†\ üÃ?tçËçŸnC‡µo¾ù¦Ô–¢µMNNŽ DÆ{lÃÍ·hÑ"ëÛ·¯?~<ßˉw…M× %ùœÏï1?&ëX–¶0׸¿Æ%êúT¯qw„„@^ ªò°*7h`V®Ü?+3¤þP£FnØ[Õ¢Õ1«ð·ªH+Ȫ Á§NE>þšV×#Gø,Äó™QÛS…P)¸¡`Ð1ÝlŽ"£ª¿—\r‰;‰¬Ö©Ñßþö7* ÇQIXÇâ½÷Þ³&Mš¸ õ–-[Rê\ñ‚ýƒ ⃓¶yûí·Ý4_|ñE\ËÎï|ÉZNaÙ±c‡•+WÎf艆œóyV…ÔÒæW4׸D]ŸŠÛ5€’€0ˆÍßþF%áT®$œ“c¶dIî 0°BÞC†˜ [:+Ë,##7Ȫз^ë½9sò†u÷v¥JfÇsÞÇC˜i3@ 4jÔ(k ÉQ¤–,Yâ«b»A7‚£È9rÄš5kæÂ©¢?s挥§§Û-·Üâ~åµ×^³›nº)`œÂžM›6µ÷ßß½ž8q¢{ýõ×_Û³Ï>kW^y¥Û×éÓ§»÷ÇŒc×^{­»>hyþ 2ïgŸ}fO>ù¤ýìg?sûѵkWwþ‡Zþþýû-;;ÛèUí\•([·nmçÏŸ˜~Á‚®º¦ö‘ÚFË­S§Žûœ5nÜØ­cîܹQ·)Ü|þÛzäý°Ú¶W^yÅš7onUªT±† ú*µ‡[Nð2dÓ¦MÖ±cG«U«–U­ZÕµ§*‡F[G¢éX¦¥¥Ù©hÅ)Šøœ—+V¸iÔ&×_½»9"Ô9êÜ >±œ§È ^NÏž=ÝëPÃÁƒc^—·ž}ûöYÿþýÝyT·n]2dˆýð÷)–¶‰%$¬í¼ãŽ;¬fÍšö“Ÿüĺuëf{÷î Ù¾ªj;lØ0»úê«íºë®³ úNÃÏÒ¥Kíç?ÿ¹U«VÍýÔöi¾ÿùŸÿIØ5® תÒv‹çúTÒ®q”„„J“ýûÍæÏÏ ·ióÏ*Ñú}ìØ†U}83ÓŒ A±<جysÚPâ(œrß}÷ÑEÌ?$<_ý;H ª"\©R¥”«hùøã»sE¯P¡¾û·sÕ_ýmݺÕÍóûßÿÞ½ö‚„÷ß¿µlÙÒÞxã æSXë…^p¡¬W_}Õ:tè§*dAæ=z´uêÔÉÞzë-›9s¦]sÍ5.æÏ[þ]wÝe·Ýv›[ÖîÝ»mܸqn¼* ûÓò4]´¶QP®W¯^îý_|ÑU¼Ü¾}{Ôm 7Ÿÿ¶zÌÙ³g[™2e\ˆPÛ©¡ªTGZNð2TѺbÅŠ.<§}VÈN¹uëÖE]G¢)(ß]…*Rüœ_³fU¨PÁxàW üž{îqŸàj¦áέàcËyêø¿þãÿ莳7èXi;/½ôRûî»ïâþLh¿n¿ýv:t¨ ¨jÜË/¿q›bi›h!aïœlß¾½Í›7Ïm§ÂÆ ·ªºmðºµ.…Dµ-Z´pçëÜ4+W®´òåË»e)üª±ÂÄþrq+ȵª´]ãâ¹>•´k%!a€ÒL!`}©”mV£FnáV­ÌžzʬZ53u*a¶vmɪ¼œŒaöìÜÀõOïöbHs6É €X)¦j(Z999.@S¹re«›½‘2FŽéÂh©TáùôéÓöÐC¹sæâ‹/v³sçÎùÞ'$¬¨WµrÊ”)n\VV–«*ýë_ݸ×_Ý·¬‚ÌL¡µp!ä=zL{ôèQ·¿ÚwÏW_}eeË–µI“&ÅÔ6 ­¯/–m 7_pøMë®W¯^Øe‡ZNð2Õk…)C‰¶ŽDQ¸/T`1Ïù¶mۺʺžãÇ»ÏÀSê q¼‚Ï­PÕw£¡æ‹´Uüíܹ³ ì._¾<_Ÿ T=gÏžµ+®¸Â222ª oC,m-$¬e\~ùåÕkõÙSØWjƒ×}ë­·úªO+ø©q:÷E•rÕ'OžôÍ§Š½šæ™gžIØ5® תÒx‹õúT’®q”„„Kr3f˜õëgÖ¤‰Y™2¹¡W†¢*V40€ŠÞŠœ#?C}(RzLº3µk×vÕô:ÄÓ#ÏÛèi])FUAuÎèܹãŽ;|¡¼xB‡òM³xñb7îOú“oœª‡ 2¯»îٳDž°ƒÃbÞò÷ëÉiAzöìé®[ :ÊK/½dÕ«WFj›HºHÛkHXA>¯B¨ªj‹ S Q6U¡Õ '‹¶ŽD>|¸kkµK*Ÿó^›)|úî»ïúM§ê©¡ŽWð¹.Üéœ5_¤°Ä w#H,Ÿ‰àå*dªñûöí‹x>Ek›H!aUQ½·žPDÕlo¸á†<ëÞµk—oÜ‘#G|µ= «:¯?…\ý+ 'âWkUi¼ÆÅr}*i×8J BÂÈK•q32t»6•„ã­$Ü¿?•„sΪòƒ>‡ú‚‘ 0€"²eËÂPµHuwMnHXÿ8p ’bTEX´9sæ¤Ü¶)tÕ®]»€Jñ„„ýC‡^nÞ¼y¾q‘BÂù™÷ÀöàƒºÐ¡5¯s^Ó¬X±"âò= .tïMž<Ù…ëׯo=öXÌm*ÀË6Å–Ñ£G» ŸeÊ”qUVOœ8q9þËPhP¿ß{ï½{¤u$J‹-¬W¯^)Î{m–žžîÎÿ!¸Ã[Áãc9'BÍnùº碋.²þê_RÏ„‚·¿iÓ¦ˆçS´¶‰ö–áUùõ§ qÍš5#nç·ß~ë +̬ßó›ß,'\H¸ ׸‚\«Jã5.–ëSI»ÆPR@^ %¶hA01ƒ›5oN; ±ô˜R…SðË¥ƒBK©V%²´:vì˜ Í4kÖ,%Cy0ÞÖãÏ¥`Ÿš‚Wz½ª.J¨wS@Q‡„Uuô²Ë.³mºéßr«aÆZ5UTyRÕ3Û¶më[çúõëcn›P¶X¶)ž°(”×·o_ }â‰'".Ç KªÒªÎµh­#rrrÜ94kÖ¬”ü<úW¯Íºtéu¾XC±œ¡æ µüO?ýÔªT©b·ß~{È¿·ùL<ûì³nüÑ£G#žOÑÚ&RHøÌ™3®­}ôÑ<ï)HÞ¸qãˆÛéÖ²úÔçןÚ%\H8¿×¸‚\«Jã5.–ëSIºÆP’@ eËr+âª.bר‘ž¯G; ñTHŸÉE‹h …nذa.”ŠÔ  ߪU+#)¬àV÷îÝSnÛÂSÅÅ»ï¾Û½~î¹çÜùtøða÷Z¡³®]»ºqãÇwãŠ"$¼{÷n_XÐã…Õ–/_qùþŒTÐP¡Ë¦M›ÆÕ6'NtË^³fM\Û<_¬ÛÚ¦M»êª«".'x-[¶t¯7ê‰T1^G"(¬©_ªÞD|\ÕfåË—·ƒFœ/–p¬çD¨å¿>tèÕ­[×®¼òÊçH¼Ÿ -ÏŸþ^4lØ0â6ÅÒ6‘BÂ’••åªÏúÓç»jÕªÖ³gψíëý»£Zµj.* *€)$œŸk\A®U¥ñëõ©¤\ã(Q} 4ÜwŸzôh‡xìØA°ÉÕ¹³zÇi…NaGªÖ¦ŽŒŒ ûÅ/~áÂXHM‹-rÕ+çÏŸ_dÛ ª¤ÙÙÙ.Ü¥Ç¯ïØ±Ã~øa¸š:uª›Fï鵪/X°À:wîì*IuHXÓË/¿Ünºé&Û°aƒ›öúë¯wÓ¼ùæ›—ïoëÖ­î} z$}¾Ótª¾zêÔ©˜¶)x>/<¼­C‡µ &¸@¦ª¦§§[§N".'xÚ~UÎÔµ`Ù²e¶}ûvwÜ–.]Ó:AAÎ~ýú¥Äç.–ãºzõj×®ªl;mÚ4;räˆ}ôÑG6}úô€eÅŽõ< µ<ÿ×?üðƒÝvÛm®Êë”)S\ Ò8yòdÜŸ‰[o½ÕÖ­[çÚa̘1î<ñņڦXÚÆ k;—,Y0(˜üþûï»÷‡ âB©:»uëæ®‡ªà©}ƒCÂÚGµ‰‚­÷ÝwŸ]qÅ®J¬¦Ñv$êWkUi¼ÆÅz}*)×8JBÂø'ÝU_©’Ù˜1´E<&O6KKSmäPjŠ@“&MlÀ€4DŠPÕÎ;ï¼ÓU«EêR(Mn…šŠBNNŽeffºÀ•‚XúY½zu1b„o…UݳbÅŠnÐÍŸ}ö™›ö÷¿ÿ½›¦(BÂòÎ;ï¸ÀšÆ7jÔÈ>þøc^T`LÅpËÖ¼ys2Tà1ž¶‘§Ÿ~ÚU2Õû3gÎŒi›BÍj[yäß4úÙ£GÛ³gOÄõ‡Ú_µc­Zµ|AAí—êŒe¡ê¬ Θ1#%>s±WZUmÔk3µ”þb Çzž†šÏÿµBÀÞ¶„¼J«±~&*T¨à¦Õ¾kÚJ•*¹' µÑÚÆ ‡¼ónÒ¤IV³fMßø ¸Ï}´u‡„åƒ>°ûï¿ß:tè`¯¿þº«*¬i4¢®q¹V•Ök\,×§’p ¤!$ €;67$üGp!Fú²”*¯H¶6mr+ @!Qe9…ÀFEc¤Uîlß¾½ Å u©*¢ÂU Zù‡· ›ÂVªÀ¨Ê’ª(Ê×_mÇO¹6}:ì4±,GvíÚåB»ùYG~ >ÜÒÒÒŠôüÎïqU¾Ý¹sg\çS²ÎÓD­KŸcí—÷Þ_|‘¯cŸˆ¶ÑüÞ¶$ŠB¬úÛ÷Ç?þ‘k\_ãb¹>÷k% =ø§V­Ìî»vÈO»egÓH®Y³ÌÊ•#ĠШ9 ™ 5´iÓÆUÖq9ÌÿSšŽBªô¸ÿ~¤© ©>'ªŽŠÄËÊʲ޽{ÓH œU1V×NW,XàÎ9UÓ?sæ Ä5ĉ0réQL *ˆˆødd˜I; ¹Îžå\P¨çϧ-|¨T í PLž<Ù2t³"RFvv¶Ýzë­ôŠ…ìUºF6cÆ ¤ÛýèÑ£4DôêÕËš4ibguC;$ ¿îرÅÒwïÞM–k(BÂÈ•mÖªí/=rU!aUb’M_ë|£ú€B0hÐ W©cðàÁÖ¬Y3+W®œM:•)&¦6l˜¥¥¥YûöímÆ 4 Š%…6usýŠBÂÈU»¶Ù°a´C¼&LÈ m…AZTÅkäHÚ@ÒuìØÑ HC† ±zõêYff¦ ¢xÉÉÉqŸ)U‚nÑ¢…«Ö­j@qѹsgkE¡  X!Í€VÃ¥ŠIü 2«Wv@áéÝ›ªß …ª8†H!cÆŒq!á&MšplŠ1……uüöV`XÕ¡õzìØ±6gÎWixÛ¶m¶páBÛ¸q£mÞ¼™¡È†µk×ÚðáÃíî»ï¶²eËÚìÙ³]Eád œ÷ E5|ÿý÷üPb@nè°Y³Ü*¥ˆÏ}÷ØDáš3Ǭ\9³S§h I•‘‘aô¤ ´´4kÓ¦õêÕ‹)æÎž=k‹-rU¡U¡UáïJ•*¹à0Cá PR€YíÚf<¢2²²Ìúô¡PxöïÏ ÏŸO[HšÃ‡»ÀĪU«hŒ2kÖ,w\ºwïî‚Â(™Ž9BEU†”ª$ä#Xôˆ»âìÏþ³]}õÕ)Ì •*gfêŽÚ"^GŽä¬gÌ -P¸4kÑ‚v4óçÏ·råÊÙ©S§hŒâ…·ÿã?þÃõ@aÚ¾}»ûÛ0Ÿ'\Å!a%NNNŽ ²êqxÅÍ 7Ü`™™™îQMªÞûùçŸÛСCãªp›èý>|¸Õ©SÇNž<é^{!áÿû¿ÿ³Å‹û†¥K—ûãxçwZ·nÝø¡ô©WÏlÀÚ!?¼*Ìù¤ýìg?sûÓµk×°¡ÛM›6¹/jÕªeU«Vµk¯½ÖUQŽ´ZþwÜa5kÖ´Ÿüä'®òïÞ½{Ú@Óï߿߲³³í’K.qûË9 mÚ´±ù—á–$¿ýíoÝqýûßÿ^(ËJäúJ,ݘP»6ÕHóëÂuÒ*U¢P4.ü;èÂwÚ@RôêÕËz÷îMC¤¯ØÄ›o¾é~ÆÒ÷ ‰Ö¨Q#w3 €ÔGH@±£PìÍ7ßliii6xð`ûöÛo}ï)@ªÎku޾øâ‹®­*úŽ7Î[´hQÀ²:uêd·Ýv›ûÝ ÞsÏ=vûí·ÛСCÝãô4îå—_öÍ£êÀ*T°xÀ•5½ÂÀ¡*Þª2­B¬eË–uÓk["yüñÇÝú° ¶îpû/³g϶2eÊØ˜1c\;¼öÚk¶yóæˆÛÓªU+ õ-$í¶QÛ¡íUÀõܹs¾÷cYw¨ý-·^½zqµ¹¼÷Ýw_À8/$¬ µöÉô˜»Pµ=š_ãW®\óqÔþ_~ùå•–uË—/ïÎ ÿãØ£G€åÅrˆ‚Êšß¾}¥úó¦ôÔ©S‹Õ6‡;÷‹‚Bí õ§¼µkõ­’Öü‘ɯîÝõ­)퀢1|¸Yf&í )Ô':yòd"©OØë ã( [¶láF ˜ $ å©zl‡\ôÑGµ½{÷Fœ>\P°gÏž®ú°WQô¥—^²êÕ«ÛÉ“'Ýk/\ú÷¿ÿ=`>…M½Ð¨‚“ªdÛºuk{÷Ýw}CíÚµ]EÚhˆÕ¼ZÆ€ìàÁƒ!§S•`-Së½ãŽ;ìÔ©S1¯;Üþ+ëUØU¥ÞhNVåáŒ÷B¿úÕ¯Ü>xCp¨Vk…¡GŽ™' ìí‹*‡«Ø¼ i+ ꇪ¼ìU<öŽãþýûóLíµ©æ_«ðd)¥ó¯I“&î‹ 'N´¦M›º€~ÿþý­N:.´>dÈ_ˆ>xZ‡ììlw¬W­ZåäÈ‘€é¾þúk{öÙgíÊ+¯tëž>}º{_•¯U‰ZU½Uý:Ô:´,ý®íѱkܸ±¯êÔþÓèÑg÷ßžýUEjU'÷Î ÝpË-·X•*U\¥jU/¦óVòæÍ›»é6lèöÏóñÇ»/k:wîœÚ|ìÓǬY3}`ùc“_ ÷êE; hÌ™“ôÿÇ5‰ðWêR1ˆáÇ»þÒQ£FÑ ŠD£FÜ÷R!a)MáMUÞUØNa¼X­áB² úy•h¬_¿¾=öØc¾÷Ã…„_~ùe7~Ó¦M.ð¨ßÓÓÓÝüþý÷ÞuÛ´^˜¬Y³¦½ùæ›a§Õv´k×έOûëº#US=z´«¦«ð¯*ïž8q"âöjÚ> úñBÂ_~ùeÈy8`>ø ë V%b<5½‚—o_"µYð~xó<óÌ3y¦UHZíé8ÆrȸqãÜ4›7o.uŸ7µÂ² RëQ’ß~ûmÀû^ÛÞsÏ=®ôСC]xWãô9 5­Bé·Ýv›«Š½{÷î<ÇÇ{­ðnË–-Ýc¯»î:«Zµª«ê­ð­æÕÁçµÿ²tmèÕ«—{ýâ‹/ºóGÕ|ý§;v¬û}Û¶mÛªà½öITý·B… öÀ¸°´Æëúüyš={¶û)Ĭ/Ë`>g¶nÝjݺusÕªµÆ£WQTÎ ÏŸO[H(Ýü¯~”ž>”’¼`žn¶W( *’••EC)Ž0€bAá:UUX¯{÷îyB~þÂ…dUùSUwÛ¶mk‹/vÓ¬_¿Þ÷~¸p©ª›jüÑ£G]u]»té÷>ÌŸ?ßn¼ñF«V­šý×ý—[^4Ú ´ŒuÝ‘B¢oß¾}í¢‹.²'žx"â²®ºê*WÉØ_´°*ú^vÙe¾c¤ ep%ao_Tñ"Öý8sæŒk U“Ö¢E W=6ÒqŒåçž{Îw¼K ¸[µjå‚Ý «Rp(^Û*¼ëQÅè+®¸ÂUö¯&ìM«JÜ¡–ÖçÚ«*=eÊ7N‹ß|ó÷׿þÕ{ýõ×Ã.+Ô¹ï?ª «‚õþçúÞß±c‡û,è<ªŽìQua]wžzê©€ýx衇"ž¿þ>ýôSëØ±£[ŽnzЗl)A¢THXaaäŸ*n´FQŸƒÃ†ÑJ7E«/CO8CêQ_žBÂmÚ´q7Î@QÐ÷^ÜP¤>BŠUóUõYuPÿë¿þ«íܹ3Ï4'NtªL_UÿTÔ¦M›¼ç… ƒ’êpU5Sª–/_Þ<Ó6/]ºÔ…X+W®ìªà~ýõ×1ï¯*¹ªšïÝwßóº#í¿?u +‰:˜ƒ§‰V¥Øàª²^HxùòåÓj_4~ãÆ1ï‡B£ªLìï»ï¾sUg"÷?Ž¡BÂÑÎQ¨U•8JƒO>ùÄUèÕ9¥ðõÞ½{#N®mÕf¿oß¾<Óªt¤e„úÜyî?ýéOÇ98 oHX~ùË_Ú•W^é{__¦\zé¥.쬲BĪ,üî»ïúËU­ÚߤI“|•’c©p. ÊkÙZ‡*¼Äz IŠ ûkMš˜õëÇ–‚¶£ª¸Î™C[ è´o¯?Ø´€„Ò“¸Ô'‚Ô¤¾Ý~ýú¹ïõ;Ó8p ¤0BŠ¥uëÖÙwÞéªÑöïß?à=ÕcŽT Vá?ÏÖ­[]°OÃèÑ£æó„·Þz«[þ‰'l̘1®Êèøñã}Ó­^½Ú-_ÁßiÓ¦¹ê¤}ô‘MŸ>=`y_}õ•µk×Îó›ß¸ ¾‘¨Ú¨¶YaZ­[NUuTÛ4uêÔ˜×nÿ‡j&LpÁDUÏMOOÏ| 6wî\ׯ +{"…„µ®Ë/¿Ünºé&Û°aƒÍ›7Ï®¿þz7ý›o¾0­öSm«àï²eË\µhµ³BÕáöãý÷ßwËR°SÛ¤iºuëæBã[¶l 8ŽáB‘ÎU½æšk\[•t'Ožtç—Ú®yóæ1]õ­B᯴iÃ…„ý§óBÂ:<‰ Ïš5ËWÙZÇ[˜ÿþïÿîÞS Yïé³Q¿~ý€A7'Óù£¿ÎSU`Öç6­oæÌ™vÉ%—XÍš5ó|& Õ…vpáÖ|nOª ­v\»–¶@ÑÑ—0®ãHÇ·&ºÁ)IÅz÷îm}úô±fÍšÑ ŠÌ Aƒ¬Aƒ4 (Ö4 U)áé§Ÿ¶jÕª¹ÀŸByþˆT°O[^˜ð7Þ°êÕ«»ß+UªdÃB<Â{É’%®Â®6Õº¸ô÷ᇺqª® =Ž)33Ó-O¡CýÔvŒ1"îu‡ÚÿGyÄ7N?Uýun(˜«Ê½þAìH!ayçw\PXÓ¨"ïÇìBÍ O™2%`Z…@kÕªåÛí¿à9Ô~¨‚«–Þ<ê|R¨4ø8† G:T½Xmî_·¤S8[U˜Vå‘mÛ¶…6\Ûª:³Æ+ÌmÚ¢ Ÿ>}Ú~üã[ß¾}í/ùK@¸ùܹs.ߥK—˜ÛOá-Kç÷O<v:=víÆotçóý×´U‘P ðÂñF-[–ª˜ *ÝHtán~7E@A)|zß}÷Ñ)Ja…ULŠÏŠÒ¢E‹\?»¾kš (±T)UÕxÏŸ?0^•mŠ æ&TXPAC #9tèíܹÓUM­_•uUY8ReÒhëµÿšVã¢í—?UUV5dmO¬Ô~þáhmƒÖn[wíÚe‡Žë8jßÕùêPeâË.»ÌÆW*?/ ʪZ®ÂÂÿú¯ÿêÚ7Üg$¸Ý[µje 6 ûyŠ4>‘!a…¼õzÍš5·CyÍU…úæ›oؾ–-[Zùòå]Åíxèf…÷ƒ©2¶Bò•+W¶gžyƾþúë¢?ت"¬@ᆠü¡((…3Ä?§QÄTÉZç!_ÄH õu¨:$R“ž¾¦>9= O….Îrã(€"¢ëOFF†»i@j"Õ Tùàƒ\`PÕxƒÅR¶´š5kV@5á’xüîw¿ Y5º´Q(üÎ;ïtuƒ¹÷¹õÖ[Ýt ±ë‹UÑ?~|LŸ§d†„UZU¸õ%‰*õªs2Ôò?úè#_%jm¿¿Õ«W»e(Ø;mÚ4WmZÓûW¸–¡C‡Ú„ \˜xýúõ–žžn:uò½ÿÕW_Y»ví\Àþ7¿ù«8œô…Q£Fú&‰ ["ŒiFµ5UÅWHxþ|Ú@Â4kÖŒ¾²¦0žŽ‘ž^¥>®hOŒ€d8p {êc*PÁ=1qåÊ•qI}¿ ï ’ý„ÁxÖSXÛTœö-ÏTAÛPüPªtèÐÁuT„ªhKH82…4Kò9P\:B ËòåË]ŘPŸ‘7ÞxêW¯î~W¥’P_EHXž~úi«V­š?sæÌÓèØ×­[×.¾øbWA:˜äª 쉵¼‡~8`U#öÖ£Ÿ=zôø2æÃ?tóøWÔN :Vª"LÅÑÄPE¥æÍi=…Õ_y…v05jÔ°±cÇÒ)J!ázõêÙªU«\ÿTNN Èè阺mÙ²¥H·cëÖ­–••å¶EÅ@ôSÏjÌï÷ˆ±|/RØÛ—Ÿmxþùç}ß›hP‘”«¯¾Ú:vìh3fÌHê±Mö¾%ûÜ)Î »mñùà;ò"$  T9|øpØ0¨ª¢:t(d€¥ã@ìÿ©>wîœ}ñÅvúôé”ÛΓ'OÚŽ;ÜÍ¡ëÁÎ;Ã^4^ëIÅ6ióJ•&RïÞf;Ó(zíÛçžê?Sž.†Ô4räH«]»¶ïX-Z´ˆFPdôT¿ÌÌÿÏÞýÀI9ïý—RKQj‘„(ÎJ('·UŠP”Bν!~ëß­sºr„PÎ:âlÙSQ'QTZ§°¥R韤³Ž"J…%9>¿Þß=×Ü3³3³3»³ÛÌìëùx\ݹ溮¹æ{]³5ßë}}¾MíUØÎ<óL·*â¡}úðÃݨ€ß|óM\¶¯¿µ7Ýt“ýðÃ1­X¬èvb}x-ëñBÂ'Nt£vΘ1ÕùÍo~ãæßpà Uvµªß[UŸ;ɬ¼¶ÑJ:7ô’X„[/ÖÏG¨íTÕg €dFHD…;o“ØÎfîMUo÷î¥=âEÕ¶ ¢°ÿ l–M;ˆ‹’’ªÓ&¸‚‚«£Ñ¢ÌÜÏÉ“'Ó(ö+U8×(Žû‹wÓÄþ*‡R]×Vª+$üÉ'ŸÌW¦K.¹Ä=WUÿUå{Käsg‹¦mž}öY·Œ Å¢¢ëUÕvHu„„@T '±ÌÒÓͶl¡-â)#C½ß´ö¿Q£40í .T}M}@›6m¢1ÔÌ™3Ý1UÎÏϧQìWuoV6ÿù短qãÆÖ¡C÷{8 .tËÔ¯_ßÎ8ã ›;wn™e&L˜`íÚµ³-[¶Xnn®qĶhÑ"ßü;v¸åV­Ze·ß~»}öÙîµûôécóçÏ/³½àk+ÁÛéß¿¿{jÚºukÔ¯å½ÎæÍ›í–[n±ãŽ;ÎŽ?þxà®ðêzOym.$,Ÿþ¹¥¥¥Ùé§Ÿ0_û}ÁX“&Mì˜cޱ+®¸Â-ëï±Ç³³Î:«Ìù¤÷ÿꫯVù{‹æÜ‰f½ãúõ×_Û½÷Þk'žx¢µiÓÆ¦L™âž×¿Õ§vš Ók{¡Î¹Š¬͹îœVµÝÎ;—™sΜ9®‚°þ/©m´] µwëÖ­Ýk¼þúëåîS¸õB}>´o#GŽ´ÌÌLwüN>ùd·ï‘¶¼ ùàƒ¬GÖ¬Y3;ôÐC]{ª:ry¯@ª $ ¢¢»Á·mÛVeÃE¡Šä檤Œ®Ññ¦Pæ¸q´ö? ¬‹Ã1顺 Ï^F#JX Ú(£ðKVV– IÀþ–““cݺuÛo¯óÍ7»¿ &† ²¾÷Þ{V·n]»òÊ+í•W^±‹/¾ØUc®@ê…L/¼ðB;÷ÜsíᇶÏ>û¬LøtìØ±Ö³gO{æ™glÚ´ivê©§ºàa°àõ‚¿üòË®ª7)ªý<òÈ#íûï¿úµ¼íê}uéÒņîB¥š÷ÐCEܧhÚ&RHXÎ;ï<«]»¶ïÿï¿ÿ¾Õ«WϳfÍrû­€®ªÛýú1ï¸ã_u|ÏG}ä^ë¯ýkµ¼·òÎXöñòË/·N:Ù“O>éBÓ ¤Þÿý.xªs©{÷îe*ßVfÝXÎàsú¹çž î×ö´\ym£0ð€Üó<ð€;5"Eyûn½PÇoÆŒvຠ´öSŸµk×FÜNð6¼sQa½g‰ ^¶lY¹¯@ª $  jýô“™þÍÄT¦Õ«Ít÷ñúõº…øÿ&.¨`Ðy§ Â긚=›öˆ·Ý»KC™„¯‘V¬(=—.¥-TÚ¨Q£,C£ç a»ð‹ªª*ÞàÁƒiûWå|U¢ß³g]}õÕn>ø`„üå—_|ÏwíÚÕUŸõüðÃ.øyçwlÇ öë×/äüp£-*à µ^¤í¨HK¯^½\¨uÁ‚aßk¨×ò¶«P©GÝN8ÁÒÓÓ ÀïC4mS^HxàÀÏk›G}t@Ú/¾øÂ:è WeÖK·ªÞ[yçN,ûØ·o__eÞI“&¹ymÛ¶µo¾ùÆÍûç?ÿéæ=ñÄeö¹"ëÆrnŸÓß}÷{¿zïþÇHaï^x!ª¶Q07Ôy_Þ>…[/øøéµ[´hvÛ¡¶¼ ËõøÝwß ¹ò^€T@H@ÕRpR¡&&¦Ò)=ÝL_4Û·×mõê51»ç¤±KCÅ@e­[gÖ¦Mi¥ÛâbÚ£*¨£›P&…†MÓù8y2m Ò†jÙÙÙ4DS8Xa—¥K—Ú!CökåNð§ Ýˆ#öë>¨ZlóæÍÝßÉ .¸ÀvïÞí‚—ª$Ú¹sg{ñÅ}“–SÅS^ÀpË–-!ç‡{VU0zôèÑ!ƒˆ±„„½ î¸0#ØEz­pÛU0Tó7oÞrÙhÛ¦¼°*õêùo¿ýÖ…v5*‚ÃÁT‘öÌ3Ïô=Ž%€[Uï-Ò¹ë>jDNϼyóܼ×^{Í7OÕ¡ƒÏ•Y7–s#øœ–þýû[ƒ \xZ|ðAkذ¡íÚµ+ª¶‰Ž´Oц„Vöª «rp°òBÂÞ9  Ö^;Xy¯@* $  jQI˜‰JÂ¥!ÍùóK§©SÍ T’¥4¬……[µ*­øª×¾/ã–•e6dHiàk?Ýu$¤seèÐÒsIóþ3<ª€>×ú¼ìG¢hÞÜläHÚ@¥)УJvH\^Hxþüù.Œ—™™I£HùùùÖ¨Q£aÄê¤pàùçŸïþV*D¨ýÑï7¶–-[L—^ziÀºá©Áó¿üòK»êª«\¶Y³fvÚi§¹ç.\q½pÛŸ:uªÕªUËn¹å–2ï'š× ·Ý‡zÈÍÿàƒB.mÛ”îСƒ bŠ·Í»ï¾»Ìr ç6iÒÄ÷¸2!áx½·HçNeöÑ úΚ5Ë7/RH¸"ëVæÜ¹sçºç ]¸[msã7FÝ6¡BºÑìS´!a;v¬«b|àº*Ô?þøcÄí„:Âïh^€T@H€D±woiØéÓÍòòJÃà +ˆ¨qn®™îWÅa…’HV0™€vͤ+|®``ïÞfiif´°°ô|BÕÑçTŸMÚ‰BU£ôïTRNNŽÝ£›Û‘°T•O—¢¢"êÑPëvîÜéþ&©*ýþ¦€`íÚµ]uÐ_~ùÅêÖ­k—\rI¹ëEV5Ü£Ž:ÊÖ«ŸÞJ+­V´’ðÊ•+­~ýúÖ¥KW}5X4¯n¿ï½÷^7ÿ»ï¾ ¹l´m)$¼qãF¢½è¢‹ÜãŸþÙµý 7ÜPfÙ¬¬,kݺµïq¨îºuë¢ Çë½E:w*³Õ®Ì¹!ª®« Á]»võ½æòåË£n›P!Ýhö)–°(x|ÓM7¹ ým·Ýq;¡ÎU9/O¸×  Ñ­Yc6fLiÔ¿â0“7)¬ÊÓ ÿgˆ'T±ü|³¦Mi$ŽAƒJ+ˆ@%µmÛÖF2RIÂSø¥  ÀUÖï{¹‘@‚=z´5hÐÀÝа?}ûí·®2¨\íÔ©“tÐA¶uëÖˆëEþì³ÏÜïªdëñ‚ ,ˆ¸½àÇÛ¶m³ã?ÞN<ñÄ!Îh_ËÛ®¶ç/;;ÛN>ùäˆûMÛ„ ïÙ³Çz÷îíB´kUäÄïÿª ëO!×C=Ôú÷ïï›wß}÷¹ínß¾Ý=VhµOŸ>nÞóÏ?_-ï­¼s'–}¬Îp¬çF¨óK¶V]…ÔÛµkSÛL˜0Ámû½÷Þ‹iŸ‚׋v_u3ÛI'q;¡Î=^­¯çÝ켯ÇwÿßQÈ[Ž7nl={öŒ¸àmhÿu®(¸^\\l%%%ýöÛQ½)ч@1ÊÍ¥j+‹:eUY|çNÚ@…)X¡P…‚?Hl5²Q£F¹0ŽŽ™B/(¦OŸîþ6UËë醉¦M›º×T`P?6lh>úhÀr ·ªB¨ˆ<ì°Ã\èÑ_4!a?~¼ Cj^FF†-^¼ØQFT6Üzþöö%ÔäUG浴ݺuëºeõÞµlZZšPÁ‹ ¡Þcymã…„½IÛVèRapÿ Âþ^xákÒ¤‰o…Ç~õ§ ´* +h¬IÛ[µj•[þ¯ýk•¿·hÎh÷±ºC±œ‘BÂ’™™é*+Dëçê®»îrmªç§M›õg#x½Pûzýõ×û–ÑÏ~ýú•¹1*x;¡Þ¯Ú±Y³f¾s@ïË ŠGó$;BÂ@¬zõ2«ÆJ@¹-* ¯YC[¨0UV#pšZ´háª3Š‚R»$š=zXóæÍmË–-Õöš êß0U@UåÓp¶mÛf7ntáÏÊøå—_ì³Ï>ó=þ÷¿ÿíª­Vv»y­~øÁ½/ï¹?þØöìÙóëÄ«müi{Þ¾…óõ×_»÷Ju¼·hÎHû¸?Åãrßý§IÆ|ã7ì”SN±­[·rr¦’‘#ÍÚ·§¸TAŠj×* wïÞÖ­[7"‰ø‡„¥N:6nÜ8ø ExAÛI“&Ù˜1c¬gÏžîqÇŽj?5tåqÇg»ví*³ï'N´yóæù¦·ß~;n¯«¡õ:ªªR]~÷»ßÙW\ÁÉ™J† 1ã‚)ÙŠ¥!áuëh 1ÉÎζÐI¤Q£F®¯ÍÓªU+ËËË£a€!aR„´ýì³ÏÜcUì=餓ìÀ´={ö$Ä>ªªî!‡bS¦L ¹ïŸ|òI•½ö³Ï>ë^ãã?®¶÷ûÑGÙAdóçÏçM=z˜ L; qmÚTfxY1ÊÈÈ `šdZ´haÆ ó=îÑ£Õ @B¤ˆà°œyæ™Ö®];ßãU«VÙí·ßngŸ}¶5nÜØúôé6Àª*¾çœsŽvØaîçÂ… ݶžzê)÷ü¿ÿýo9r¤effZýúõíä“O¶E‹EÜGU8V…“pû.$í~ðÁîbH³fÍìÐCµÓN;ÍÞzë-›0a‚«^¬×hݺµ{¯¿þºoÛ\p5iÒÄŽ9æWù÷óÏ?Ø®Ö×:[¶l±ÜÜ\;âˆ#ì²Ë.³Î;»vð7gÎ×î_~ù¥{œ““c×\s 'hªØw¾Ûˆ´×Þ½¥!a¿áf M›6Ý÷•—ï¼É¤mÛ¶6tèPßã{î¹ÇUð Eø‡„þùg+,,´:uêØøñã}ËŒ;ÖzöìiÏ<óŒM›6ÍN=õT¤ öî»ïº ¸ª<¢ÐkAArÊ)nûºØ 3fÌpUŠóó󭨨È{ì1[»vmÄ}Ô°• ІÛ÷p!áhöûý÷ß·zõê¹€ðsÏ=çBÀ 1/[¶Ì5\¦^ãpU…KJJ|ëè}Κ5ËmûŒ3Îp!àíÛ·û¶ýÈ#¸u/¼ðB;÷Üsíá‡öÍ+ ªÖ©ýÔ2žë¯¿Þ­ƒÃÄHR ˜G; ±5mª»2h1Q?ÒäÉ“iˆ$¢¾¶ú«?0==†>„„H^ÐVUUEWÁÔò*û*t«u>þøã€ùª[·n]Ûµk—oÞ×_í–½ûî»Ý㫯¾Ú i x{÷îvß»téâ*{Ó† ¢Þo­«y 8‡¢`pð:]»vµ£>Ú…ª=_|ñ… H«r±Ç ÷ë×Ï7ï»ï¾³ƒ>صƒÿºµk×¶^xÁ7OAe­»yófNÒd·eKi…Ö™3i $6UúÏ  Ý,­þ‹p#N!1õêÕ+ $¬ã§ã¨Ñ°„0) Ú*ÐÚ¿;üðÃ-++ËV®\YfÙ½{÷Ú¦M›lôèÑe‚µªx«€p§NÖùå—_* +ëU×U¥Þòh}UÎËË »ï×^{­ 2Ä7kÃí·öYU8\ÅÞàð¯¿þjiiiR;èûŸnh5jƒˆîºë.×§«‚ ¡¨8ƒþ&,^¼8.¯ªU}¹*Ô0gΛžtÒIvÁ„Ý÷p!áòö[fU?nÑ¢EØ× ë}Ö®]Ûn¸á†2˪³*XxÂ…„Uµ¸yóæ®­æÍ›ç–Y¾|fÔëF€IDATyÀ2÷ÝwŸ›ÿÝwßq’&»ü|ÛwÀi$>ÝŒ‘™I;ˆÚÔ©S]ÿ…ú<† fíÛ·˜§Ç¡nÒü­Y³Æ}æ~øáÏßrË-vâ‰'ÆíõTÝZ}È^1‹Ÿ~úÉÚý> ~ "B…„_xá7ïÑGuóõûC=ä{Þ Û.X° `[º˜pØa‡¹°(„«0m¨°GU‹ŽdÀ€!—‰Žv¿;uêäæ­^½:äkO˜0Á=ÿÞ{ïùæµmÛÖU%ö÷ý÷ßÛ¡‡jýû÷÷Í –{ï½×…ª»tébíÚµ+ó|¿~ý,##ƒ4 ¦9í€Ä7b„YÓ¦´€¨7ÎÒÓÓiˆ¤ûú7¢ÌMóêëÝ»7ƒr©/óÔSO-3_}ÁGy¤+~PU>øà×ßZPPÀ€*FH€ám54Ûk¯½f?þ¸~øáV¯^=7T›*Á}ôÑvÖYgÙŠ+lÖ¬YvÆg¸už~úé€mé9UÙ=øàƒÝE…N8ÁU Ö²z>|¸ëÄݺu««žÛ¸qcëÙ³gÄ}|ýõ×]Åßo¿ý6侇 G»ß «š±‚¿"³¤¤Äžþy{ûí·Ýó›7ovaÞÜÜ\WÕWÛ}õÕWÝvTuEû¤e®¸â «S§Ž­[·Î·íH!á>úÈ=§iìØ±Ïýú믮£]m…0`€Ù ÷}Óã«€è)lÊMÎÉGáîàð¨Q£8–ˆŠúÕ§ùþûïÌã7Ü|õ)û[¸p¡uèÐÁêׯïúgçÎð¼Š4(x¼eË×{ÄGØ¢E‹žÛ±c‡Í˜1ÃN9å÷Ǽ›Ÿm;wv#·ù›3gŽeÎ+fˆWŽH^ÐÖ›Ú=ï¼óìÍ7ßô-3~üx¸ÕóºX°xñbËÊÊráÚI“&lOë]~ùåÖ½{w{â‰'\G¬ÖS`V®¿þzWmXóôSs7mÚqÌUå^ WjßC…„cÙoˆ›5kækƒ¦M›Ú”)S|Ïßu×]¾}ž6mš›§jËMš4ñ­ÓªU+›7o^ÀëG Kff¦ T«“ÛŸ:¿6lèÂÇH¾säHÚ‰¯¨¨4$¼s'm *ƒv!=$—ÂÂBkРAÀ¼Ù³g»àwïÞM!"…yU(âöÛo˜Í5×Øé§Ÿ0O£³©øÃ•W^éFy»øâ‹ÝyöñÇû–ñúP/¼ðB;÷Üsíá‡özçß¿º~ýzW´AhÏ>û¬ýáp‹Ô§áGE)´-@Å †Ñpq^笨:Æ \ÕÛHÔUGíË/¿ì›§u´îž={¢~ýeË–¹êÆ+W®¬²ýþôÓOmûöí!·³k×.·^pUŠ7Ú¶mÛ*Ô¦ªœÑ¿ÿ€yªL|ÔQGÙsÏ=ÇI—*š77cD$UBWHxßß:ˆFß¾}Ý„ä¢@ðA#Éè&~Í[ºt) „ruëÖÍZPß«(\®" øúëÚµ««úëùá‡\HøÎ;ïôÍó‚À*&,¸Ã|à«ÏY4ò›Š0\}õÕ¾u¾øâ bV‘@Åe¨„*𪚄:ˆ5¬[Û¶mÝð…?ÿüs¥·?}úô2Õ„“•*.«C{þüùóÿò—¿¸¡:‘"T%ºN³âbÚ‰OUÝu‘˜ ¢”““㪠#¹¨?JýR½Ë_zzº«2 ”gâĉîRà\þþ÷¿»ÑÛTPÁ£b *úйsg{ñÅ}SóæÍ]¥_VŸr°òB¢" ªŒ­²<øàƒn”6}T!aPÆ´iÓ\åuÔÖ¯_ßýlݺµ-Y²$n¯ñý÷ß§D[uïÞÝZµjU¦¢±ª_ …,ZTº,)¡-$ßôд€¨dddذaÃhˆ$S\\ìúíT=ØŸBßyyy4Êõã?º`î•W^é_zé¥Ö±cÇ€eúÕyÖ¸qckÙ²eÀ¤å=ÁA`Ñ„„çÎëæ)ாVmÿÆoä @%!©#vÆ îbÃgŸ}V&‹RÛ·o'\ÌœYZIx÷nÚÉ¡iS³‚Ú@TTyvܸq4D’QßB•%A75+ ¬ 0k®¹Æ9ä6WÅà±cÇ<¯‘æêÖ­k—\rIÄíT6$¬ŠÅªNܵkW›7ož{~ùòå ¨$BÂ@yF2kÓ†v@òhÕÊläHÚ@TÆ›Îh$IÇ ë& |+ø DãÍ7ßtçQçέN:¶mÛ¶2ËtêÔÉ:è ÛºukØíT6$,÷Þ{¯xàÖ¥Kk×®â€0PžÜ\ÕI; ydg› J;(—ª‡† š"ñi„«Pï5kÖ¸ù:¶@y¼ ¾:g.¸à‚Ë,Y²Ä…w³²²ì¥—^²;vØ;ï¼cS¦Lñ-ðG}äæk ®h ¨BÂ@yzô04ˆv@òèÛ·4ÜåXºt© ä•””ÐIHÇ®   `ÞÞ½{---ÍfΜI!*wß}·;—&L˜v™ùóçÛI'ä ñvØavÝu×ùžGHX233íàƒvAd@úhÄO?™­]ËÄ8­^m6w®Ù§ŸòÙŸš773†v@òP@¸[7Ú@¹fÏžíÂz;wî¤1’Pƒ lôèÑeæ·oßÞFŒA!î¶mÛf7n´_ýµJ¶ÆgXÿþýihˆBÂ$ B8€‰)üÔ YÛ¶fC†¨tŸ™ê²}{iûOJ[ y f–•E;(Waa¡ š"9µjÕjßWÀaeæçææZŒ$‘7ß|ÓÝ´0Ÿ¾OˆBÂ$ * 3Eª$¼|¹YQQiðOAa…VÛ·7+.æ³SÕÖ­+mï5kh $ü|])¦”KÕf[´hAC$©ììì!áü}ß ›kd$ ‰tïÞÝß«ªJ1ÔD„„’Ñ¢E¥UB^8Ðl÷nÚ¤ªÌœYÚÎ{÷ÒH……f\ ªÍ˜1cì±Ç³~ø¡ZÖ‹§!C†X#‘$­œœ4hP™ùK—.uY·lÙB#!il߾ݾûî;âˆ0@23Æ,-­40¼};íQFŒ0KO§\4,'áv€jµ|ùr{úé§m¦n4Œ`ñâÅ6zôh»îºëìÜsϵ‹/¾Øþßÿûöç?ÿÙæÎk_~ù¥oYURÔ6#M’=–}@ gŸ}Öµ{p¨÷ÐCuÌ/¾ø"¦íUt½xêÛ·¯õîÝ›ƒ›¤è¦`»wï¶:uê”û7 ¤6BÂÉN„bmÓ† pUÐ…ÒœÚÉEÕÆÞ´‰¶¨&?ü° {vëÖ-äó;vì°k¯½Ö-£©V­Zvì±ÇÚa‡æ›§éŽ;îð­óïÿ;à¹P“‚¾ÑªÈ> P¸Po2‡„³³³mðàÁÜ$¥€ð€B>×¾}{6l@ FH ¬XaÖ ®ìQ94ÞZµ2ËË£\VH¸¤„¶¨&‘BÂ[·nµcŽ9Æ=¯Ÿ3f̰o¿ýÖ÷¼†Wÿûßÿî¼ÚŽÇ?$ü·¿ýÍUž>ù䓨ö¯¢ûPÓLš4Ɇ6´«PöUW]å×þ’9$Üjß÷ÞEIIo½CÉÍÍ {ãB¼Ï¡ònhPUãªöÈ#¸×úꫯ81øB©¢¨È,-Íìž{h‹xjÔȬ°v@~Û; ´Ò8ªE¤ðÿ÷»çN;í4Ö–HxõêÕ•Ú¿ŠîCMsâ‰'ºvZ¹reLë%sH8--ÍÆÇÁORªÜF£K…0}útÎÝ^Å#O-Z´ÈæÍ›ç›N?ýt;òÈ#æÍó÷Ó5kÖØÿøÇ€÷VTTd7Ýt“ýðÃ)Üu£Âúõëmîܹî߇µk×2…˜~úé'þH¨ñ ¤UþQ0°¸˜¶ˆUa%h‰d¥*M³gÓÕ$\HxÙ²eV«V-÷Ük¯½Ó6ã®Ì>øS(oüøñvß}÷¹PéÒ¥KÃ.«×Q@q÷îÝîñºuëì‰'žpë}ùå—¾å~ýõW{ÿý÷mäÈ‘ö§?ýÉ-WÞö´ÎŠ+lÔ¨Qn›ï½÷^¹ûý—¿üņj÷ß¿M›6Í~ùå—€eœÖö:ê(×N£Gv5ùƒß—Ç?ìËþ•^°`=öØcn¿_ýõ2û]Y êõ®DrRH¸E‹a¯B³«ù»á¹çžkÇw\•¾Æ³Ï>ëÎÝ?þ8¥ïÞ½{ÝçSÕ¾{õêåá ö—W¹™©tRPj:B©dï^³¶mÍTAF¿£r¦N- oÙB[ ùè"1ÕÀªM¸ðþð_ßXÅ+$\™}…d 2€Õ§Oûúë¯Ë¬ã…_7mÚd×\sMÀ: -._¾Ü…ßzöìð\½zõìÍ7ß »½7º6Þ;î¸#d€Vï9Ô~ÿ×ý—íٳǷܜ9s†ÌþùÏ–ÙàPoE÷/ÜövîÜéÚ6x;]»vuÁÏxQ([Û ÎFâ3fŒ5hÐ ìómÛ¶uŸßêT^HxáÂ…Ö¡C«_¿¾qÆ®n¨¿ºy 33Ó-wòÉ'»ŠÅ2a·}»­[·¶víÚ¹½æëwï3â=þæ›o\Èö”SNqUŽ ^ëí·ß¶sÎ9Ç;ì0÷Sû§õžzê©ýv\usC^^ž5mÚÔ½OÇ!C†X~~¾Íœ9Ó݈@%a* @4 ¤š+J+ˆŽM[TÖ=÷˜¥§ÓHN*)E;T“p!á¾}ûºùW]uUÌÛŒWH¸2û ^XµS§N.˜¦ÐÕ‡~h—\r‰›ß±cÇ2ëxáW-sôÑGÛC=do½õ–]|ñžÀr¿~ýìØcum÷üÃÎ?ÿ|÷œBzá¶×½{w;ñÄmøðá.¨tíÚµÝsÏ?ÿ|™õ:wîìæÿë_ÿ²]»v¹Šª^µàq~7Õ)T¨``³fÍÜsª˜¬Çšü«—ŽuÿÂmÏk§ºc¯jÐÞ¼[o½5nç­*”j›ñ £z)ðªcNnnnØJÃU%RHX•µëÖ­kW^y¥½òÊ+î¼ÖÁg̘ax  Åêøàß{jÙ²¥}öÙg¾çÈÕ|­ÌÛ^—.]\UP ê9…s£qË-·¸åõ3˜¶¡çV®\rÝòB±î_¨íym®µÚØ£àc­ZµìC±o¿ý6.çmaaaÄ*´H|ª*«óeûöí!ŸW0^Ïoذ¡Úö)RHXÕ°?þxßcU*W öÎ;ï XîꫯŽnV0XïËÿïK¸°ndðÂþ ÜkžÖÝH Ð²ÿß7UG×2wß}wµµ™*««Ú±>úwdéÒ¥œÜ€¸ $ ŠTaDùF¢-*£}{³¡Ci$§K'T‹p!a…Ü4ÿñÇy›þ!áPS¨k(•ÙU­T½öÑGuÏ_vÙeó½ðëûï¿ö=Wõ‚yªòÌÛÞçŸ^æ¹M›6ù¶.(éïé§Ÿ[Y¹²!áX÷/ÔöìæÝqÇe¶¥ ÌznñâÅq9oÇŒSíUf_‹-rç„*І²sçNKKKsÔê.$¬Ï½zõ\0÷Å_ôMº™ gÏž˾ð î}]xá…®rp°XBŸ~ú©oUÍÖèýhÝ'Ÿ|2äó/¿ü²{¾M›6óÃ…iýßÓ÷ßð\4!áà퉪ítÐAîù÷Þ{¯Ìóªì«@¡ª‚ª:éé§Ÿ^e!áX÷/Ôz矾¯z³*®úOª"¬ç¦L™—ó6//Ï233ù'1UÖ91þü°ËôêÕË…P«K¸ð–-[ܾ6nÜØU÷Ÿ.½ôÒ2Ë;Ö>ø`÷7áöÛo·üÑ÷\,!aﱨ ·Þ¼ysÈ¿ÕV›´mÛÖ222¬¤¤„w„„R•†‘LK3›<™¶¨ ëxÀ*ùD[ 9 f–•E;T“p!áë®»ÎÍïÞ½{ÌÛŒWH¸2ûpæ™gºuÇòùüãîù¦M›̯ΰÿóKõ]ÎÏСC]ÕZµj¹ ó 7Üà >WWH8Òþ…Z¯}ûön^Ö¾ÿÏ÷éÓ'ä¤v‡¾}ûZon.Lj^ðvæÌ™a—)((pŸ-[Â…„¾UåÞK.¹$êm}ùå—vÓM7¹Ïðm·Ýæ›ðÏ?ÿìþÞtíÚ5à5÷îÝ[-!aUV8XAýê:6€š‡0@*ëÕ‹`Eåç—Vb’•†’eØ`€j.$üøã»ùª†ùùçŸÇ´Íx…„+³ jÝ?ýéO!ŸŸ8q¢{þœsÎ ˜_!á]»vù¶é|â‰'ܧ.\膱ÂìÙ¥Õp×­£-b•›«qui$¯qãºT£p!a…¿Ò÷ý¿LÏýþ÷¿i›ñ Wfþð‡?¸õ®¸âŠÏß~ûíîùk¯½6`~u†„,X²šq‡Ü|õûù‹nÙ²eÈuÊÛŠì_¸õ¼`£ÂÍUMû4fÌ>ÀINàH!a8p  ÄV‡H!á%K–¸Ï¸²/½ô’ûûôÎ;ïØ”)S–>|¸{Oê³_¾|¹5nÜØzöìé{~óæÍn;¹¹¹öÝwß¹~犄„gÍšeµk×v7Q覈N8ÁU,Ö2ü㫬Î×ßå’’N`@•"$  Fû裬mÛ¶¾‹úÙ¨Q£„ «ŠApuTzVÔ™yÌ1ÇØ5×\vhÃý½ÿÖòÁ,³ïþSƒ ’ú¼zã7ì”SNIøÐ9jŒ ³*1%íû÷Á† £¼tø¾òT—p!ayæ™g|ý·Þz«íÙ³'ä6-ZdÓ§O÷=ŽWH¸2û >¦úõë»ÊŸë‚n@UU↠º>©àÊ»U5j”ýú믾ùúý²Ë.sÏ)è¯U«Vn¾õÔŸ~úÉ®¾új7_7ãëØ±c@€0Ü~„ Dzá¶§vQŸæWe±U—ÕkÌœ9“p’Ó¹®s/’¢¢"w¼õ¯j‘BÂ2þ|WØû[ J¾×]w]À2×_½›ï=߯_?Û´iSÀ2wÝu—o™iÓ¦U($,o¾ù¦]~ùå®ïZÈUU8Üg6t,êÔ©c³us?UŒ+Æj´3Ï<ÓUËxë­·\¥?üÐU(ˆWØ5kÖ¸ ¬ÿp†•)$kþóŸmÈ!Ö®];÷Ü-·Üâ[/ž!áŠîƒ(4§ùªä9bĈ}ÿÕœêvêWÓ|UÄ VU!aýìÔ©“=ùä“ö /ØE]äægddØ?ü°ÎàÁƒ}ëÜxãn?LlÓ¦{ … _yå•€À´wUásèС®Ò©×—é}yóšŽvÿ"mïµ×^sÕaõœBƪ~¬ªªz:Nÿûß+}ΪßLÛ×O$·ÌÌLÅÎ-Z´p•wŶmÛlãÆÁzš¿aư75ˆ>ŸZF[âeüøñî³ñòË/Çý=ïܹӚ7on}ûöåÄT BÂj,…Fƒ·ñ¦‹,z?þ8.Û‹þì³Ï|Ëèb‡.tDê<­nªª{È!‡ çíû'Ÿ|’4Ç ZªR­ ;ªŠ‘êÔ¿~ýz7 g¢WOÖ¾ªJPUVáIHK—–‹Šøã-}vÕfÕ|ƒWÅÅ¥çñ† ´@5PÕKõAüÏÿüOØetsô©§žê êúO —ª’æªU«¾ÇÆ+$\Ñ}ð(´ª€¡ÿòªvû·¿ý-äëTUHxÉ’%–íÛU1ÖMó;Bܧ0žÒÕ¤ŠÈª<ª>3ïxizÿý÷}ë(px饗¼Ï-[¶”û¾4_ÛW]´ûi{¢‚YYYnþïáì³Ï¶… Vú\PamSí„ä–““ãBíå7nœ«`\¼&S¿±ú¬õ9Wßúœ9sÜèƒú{÷óÏ?Çýõt³‚¶½ƒzÕ„0€K|ª~Ò¡C‡ˆ}º(rÁX“&MÜ…UƒÑPŠž &¸êêDT†#Ž8 ٦ùªš«ŽöÖ­[»e^ýu·Ž:ñõºêÔ?ãŒ3lîܹ!_[uÏ9çWÕDË/X° Ü°¨B²^/ø}Ü~ûíî"‚ÞwŸ>}BXý_S?µ¯ÚÖSO=åž×…œ‘#GºêÚÿ“O>9ª!êTå¸Q£FóÊ G»Ï|ðõèÑÚ5kæ.¬œvÚi®:t¤cP™c«*;;w.SBÈj{ G'ꜿæškRús¤0´:ͽ xú©ãœ¨aáPA{ÿsÑ»x§óAÇ.Ôº¤µï8ÙàÁüñÖ¾¿s–‘A; ¹)¬°n@•|Çô(ÌéUÕ-ŠâMU”]ºïÿi“'OvÃÍ«oã§Ÿ~ªÖý¯è>èÆûÅ‹»  Õ)8L«€ö?TuÞ`Ÿ~ú©-_¾¼L ‚’^?N0õ©È? \Þkø÷+ŲåÙ½{·Û…ÃU\­FuÞ"ù©*m4‚5š^«V­¬W¯^4ÚL›6Í>ø`_ßëKÖ ñ¶bÅ Òž>}: ¨6„„ÔhbQ~ ¡† ªªŠH½zõ¬[·n6kÖ,×a¨P¯Â¢ÛÿS]ò‘GqÛ¸ð íÜsϵ‡~Øv@0`€{îpmKJJì½÷Þ³ºuëÚ•W^é†3¼øâ‹]Ç`p¥ÛeË–¹×Öp‚ ?óÌ3vâ‰'F ëBGaa¡Ûž†Dó7vìXWµDÛÑûPÅ…iý©¬ªßêý*ðª! O9唀ל1c† ƒæç绋^=ö˜­]»¶Ü¶Vhý•ŽfŸ½c¤€ðsÏ=çBÀ 1«ýƒÊ[½N¨‹~ÚW-çQE…­ã9Ô]¢Ñ1ÕÅ$…²u‘AE‡nß|óM\¶¯á.užlS5×òB“&MrvK=îØ±cê¬#ÌÒÓu5ˆ?þÑèÝÛlà@ÚÉM;æâ#@•Ð ¦ºqV7Y{7žêû$ªF¤Š»¨UžUŸ’ŸÂê†ú¾ôYòúIa.|¿aÃ+..vý¿ñ ã{ÔwªÂª¾—þ9@5"$  FÓЂW_}µëUµ…@ý«ÀtíÚÕŽ>úè€*#º¡ ­*ÜŠ$íׯ_™í+”ªçüÀÚæñÇï{¬j" õÞyçë*<¬‹Mþû£ ¤¶w÷ÝwûæyáF]ÒÅ…R£©ì«àmð¾©:®ÌVÑã ó车ÚKáÅJ!ÞÞ Ýùñö½K—.®°7m3,z¨}Öºš§€s(¡ŽAeíwß}çε…ÿºª@û /øæ)¬¬õ7oÞœ’Ÿï| ÜÆS¸ãWQå…„½ŠÜZNrxýH kÖPQ4 TççÓHo|û>÷´@ÈÈÈpß%Õ¯£‘–|ðÁ*š¥ ÇŸªÉFS}‰O}]Õ, ¨êâÕkôèÑîß U :€}TÑ·yóæîBÃ\à†ðSµ€´´4¢’¤*{Uq½ i¨¡ƒŽª(«êµ ã¾øâ‹¾I¯\iæC)óÚ¡Ž^¸QûÑ¿;üðÃ]5‚•+W†|¯êÞ´i“ë”ô×jßîÔ©SÄ×TÖ«®«J½ÑÐ6¶ÌËË ˜ïíûµ×^kC† ñMÁ¡ÚHû¬öTõßpÕzC…LãqlÕÖ 4ð © 6 XëØjý¥)ÊÔ…ÏÆ[‡"^Õy¢ÏU“&M\ðýŠ+®~S&L˜`íÚµsm­‹S:¦:?Ž;î8ßz^•¢= .t¯­aUZ·ƒ½ýöÛ.@¯ð¼–]°`AT!aÑy ×ô ëÑûîÓ§ÍŸ??âkê§öSÛyê©§öÿASðuÔ(þè—gݺÒ`%m 5âsP…Ô‡D0¸zŽ?P’ŸŽ£‚¿ÑZ·n ¬ªš4ªžÚ[ýÑUYl¡¢Ô¯¾~ýz×ç¾uëÖý¾?S¦L±óÏ?ßêí > À|õÕW®ÓD,UX1¸j¯G^Å ’jý`ÁUo› ¶lÙ2`ºôÒK}ëmÛ¶Í-\]8RHØ 7ªê©ªF(8éXåË/¿´«®ºÊuFªªïi§æÖS€QÌÕã[o½µÜ×;v¬«¤«à¯B“?þøc¹í«å 0ÏÛ÷O>ù$ä:åí³×žþmWÞ1ð_¯2ÇVT=WXXèBÇ:†7ÞxcÀ2Ï=÷œ[fíÚµ)û¹¹ùæ›Ý{Tp6Ôq|ÿý÷]»[·n6kÖ,›6mš ô*¬Jį­>?÷Üs]Uï7Þxà “¨ù<ð€;–Þ0ˆï½÷ž µ_yå•.ä¯ÊÛº°áœ—-[æ^û²Ë.sÇK•¨O<ñÄrCº¸«ãªí?>à¼×ù¡íè}œzê©îœô§ÎtU£Öû3gŽØ)§œRå—£¦jÞYYU²i¯ 5©ª¶á×\sMr^¼7®4XÉÐHfÆÑHzºáXßÛýGÝBÅy#DÓ)@}P±Žþ6fÌ×ÿ¥Ÿ¨:;vì°öíÛ[›6mÜï‰ä£>rárý-P_¿~6jÔ(naáHýëÑ®S‘mD£U«V¾¾Ìp“>U-Ò5¯`K¨âUÑöR!að£…ÛTTPP¿ßpà e–S¥^U6•XBºˆ¡`ã%—\q?tw·ÖS¸Ñ_4!a™={¶›7qâDßG}t@U%…F¤UÀÜãµu¿~ýÊ=~Þv?þxßcâÕië¬WpXAUÿýñ.€ĽsQ•U™HU€-Zñ½+,¼oª®sÒ¿¢ô×_6”^í¦O/­»iSÜ7íµá¤I“ÜÅ%ªõ¸cÇŽÉwb`Ö­ÿ("5høX*Câõîܹ“ÆHS§NuáÎX©±úÔzõêå*ê¼X½zµ+zÀTñI…T„@mªnzzº­Y³&áÎõ¿7mÚÔÞzë-wàÃ?´áÇÛ7ß|—í¹kþÅLÊÜ'_‘mDC}¿ê×÷¦ÓO?ÝŽ<òÈ€y¡F‘« êCõ/žAH@u $ ~¾ýö[t¼è¢‹ÜcuàW ýþûï]ˆ°ÿþîq¤Î– &¸çTõÔÓ©S',ïn|u{ì±óÞ~ûí¨BÂ^çÑ£>êë9=~衇|ËxÛ øæ©¢Â‘ ‹Â• ÒFª‚ªªÅ —Gaƒ—‹Ôí>«=5Oס„:ñ8¶rï½÷º`u—.]¬]»vežWà5Ck…¦Õ^ ƒk¸UUXVè–Y^•‡Õ íñÚZUžý… + ­ Á ä¾øâ‹¾I¯¯`ªçC)óÚ¡‚öþç¢öCÇÿðÃwñ•+W–Ùwu˜oÚ´É]Dñ­k¿Ö9Íkîºð·ï˜XaaÜ7ü·Hï[Ÿy}F&OûÎ]WE˜áV‘*zõ2 ñw@ͦ>U6EjP˜Qý2¡°¤FÅR[y•U™bŸN>ùä„iÎ+¦}–~öW¸U£ÛwÜqUú¡úº ¨„„ÔX ÿåææºÀé?þh6l°ë®»ÎuœLž<Ù-óꫯºÇÆ sâÍ›7ÛW\áª+¬[·Î-©³EË+ §×Q5Y… —,Yâæ)€øÒK/¹!ÆÞyçWUÀŸ¨Ú®ª¡Î™3Çî¿ÿ~ûío[¦"©×‰¤}~íµ×ìñÇwGuêzz]Us=묳lÅŠ6kÖ,;ãŒ3ÜzO?ý´o[𝠻 J÷îÝÛN8áW%XËéuD•4|BΪœÛ¸qã€`f8¯¿þº Pªƒ÷=TX´û¬ã§jÆ ýjxÄ’’{þùç] :Ü1ˆÇ± ÇæuöŽ;6à9dO=õT×^5…ÚéüóÏwí¡O~ÃUÐÕ9Ó¤IßãpmªãÔۮν–-[L—^z©[fÛ¶mnÿÊÂR^HØ ¸*Ôª|ýúõ}U*ž¿êª«\ð¹Y³f.d®u.\è;×ôøÖ[oê5÷›}{ö} â¾ÙP7,(î _µj•« ­¸Ž_Ÿ>}ÂVäÐgX•uã‚~ªµ­§žzªjÛGûSEÕ–ýBaB‚èf롌:’2–.]êúeÔ×\Qê#U‘JÂñ­$¬0¾ ‚x}ΉB#¿©®C‡£ÀSŸœ–Q?©ú烫*Ò¡>;õÙªþˆ#ŽðÐæ=ç—Ñô ÷oCô8Ô\˜¥¼}÷MH¸¼í©ˆÄÈ‘#-33Ó-£€¸[hûzoÉPû«k& Gó¾Âµ£úÍo¹å·/©O×Gt-#ÖíG:î!a5–†vÒPZê(QˆT?6l諾ëQGŒÂŒ^´U«Vn¨)OyAÒ»îºË…Ü´Ì´iÓÜ‹ ÒWôµ©*®«Šn’Ð §œrJõ´£.VAûûM^žY´@úN¯\5"3ú¾ÊÄ”ª“¾_{ýmº1©Aý³:¦‰DEé¿1ÁOaáå+Ü|óÍî¼Qh7T½FçS?ì•W^éúBUÐDý}þ}µ^¿®úƒ´}øá‡}}¬Á}¾Ñô ¯üøå—_v}ÆÞôØc¹}<òÈ#ÝH±ì»¿òBÂÑloÆŒ®8??ßŠŠŠÜ¾y…\Öh‹z/<ð€Ûw<‰5$íû ׎Z^##ª¸‰®‡æëöCw‰‡0€O$ª@«Êª(ÎÆÝ]Ö±k×.W©Xw’ûÓö´Ýà;µý©Qwcǃ’þ5ÚíW¤×WÀO=ê|óhy­§j«±X¶l™«p¬¶®Š}þôÓOÝ0i±ƒÊ[ÝI¯êþTuCaÒçž{®Æ}žôÞš¾è¢‹ÜcUxîèUgí¡‡ÐnáB [k¾:'ýuêÔÉ…Hƒ«CøS…Žc=6`žªÓFö:auã€æw˜z!aU³ö¨Ã_t…ë½óW!é„ «¢ƒ*åîû<ē׆ªú«ã«v(¯z„.‡À¥sçή3ZŸ[Ï×_¶2u\µhQ¤R…ÎçìlÚ …$½À$SMš4RR‹Žk¸›°)¼­Ï\Âôþ‡ú÷¯¾újwî¨OWAOõgzT A7ÏxTØDQÿÑÛ¼~] V^ŽP}ƒå…„ýéA¯^½\?¢m´ûp4ÛS[¶Pßb¡ bx}ªêKmÔ¨QÀ¤›—‚CÂѾ¯pí¨+=*n¡Ñ$Õî]o‰uû¡Ž;€ì3  uN©¯BÉê TO…<Õ±iȱXLŸ>= šp2SÕåPïùË_lĈ)¾(ì­¡ÄÔ«€½Bتˆ­6™Ó0ò^? RƒúÛ42“úÁtŒ±‚·Š!4oÞÜý[xÁØîÝ»]úFu3ÿ‹/¾è›´œª{¼~ÝP…NÂõùFêŒ%$ìõGŽ7.`~´ûî/RH8ÚíyE'T]W•ƒƒE ?õÔSÛÖtÓM7„„cy_Ѷ£B¾š¯~øŠl?^nT-B ñ¥p£:wt¡@?uñ@Ìxòö+™uïÞÝ É\ÕXaÖš`Íš5Ö´iSwž(°«Ÿ 6t•wý©s´I“&¾‹®j³yóæ,©³÷®»îr•ô¼ÎQÂÙ't’o»ZF!eªôéÓÇjÕªåžo×®¶-R%aojܸ±wÞy.îQUm¯ºTFF†-^¼Ø…`µýI“&ù–Ó:—_~¹;?žxâ WUØ Ï&ŒÞ½K§8 ®Æ¬J$999îo‰Ž…¨-®ºê*W9¥Y³f®Ê´ÖY¸p¡o;êÖ¼[o½5`ûÕ:Ô¬Mþ1@j)(0kÞœv¢]”Ô÷ ݪpIÔêSѹ¿téR#…¨ÐC¾"!éߘÌÌL×_–ˆÔ/{þù绿 ³*üéõ“¶lÙ2`ºôÒK}ëEê× ~.š¾ÁhíS§Nuý²¡ ’D»ïþ"…„cÙÞØ±cÝ5õ—ß~ûí£WF «ß:˜:öB±ìG´í¨‘ó4ÿƒ>¨Ôö$6B€ ¼êBYqq± û`ñ¶oß^cÁ‘¨#Pç‹*ÆúwzÛ¸q£mÛ¶­B¯±k×.w^ªšA0mSÛw®ªÊp¼*(¨ê…`Eû£ýŠô9Q¸X¦/¿ürâ4U×P5á8^ ‹ª×hÞĉÝã3Ï<ÓŽ:ê([¿~½{¬*%ÁÕBTµ\èÚΟ.¤TiHXmѪUiPH%ªì~_û‚¿_èFR}ÇÐ(0ú~Ô$ê+QES¥©E7æçÇyä(Ä—ªë³7sæÌ„Ü?õój”4UÂU?¨Fûºä’K"®KH8š¾Áh­ê‡Va‚.]º„¼Á'Ú}÷)$ëö†V`…˜5Êœ§²!áXö#Ú°7Ÿ®sTfûW‹âD¼S¦Lq¡duªÎ™3ÇÚ¶më*¹(üš0-* ƱbP¨°×‘­êÒš¯ßUÂã]X°`AÀ¶Ú·oï*C«C]Ô–7ÜpCÕ†„‹ŠJÛdÓ&Nd¤–ùóKÏmªâø(°£ï Á(, ÔD ”æååÑ)Dj‡rósÂÓçN}…;wîL¸}ûöÛo]Ü‹.ºÈ=îÔ©“tÐA¶uëÖ°ëD޶o°¼p« Füñvâ‰'F ¨F³ïþ"…„+²=ï3©‘ð<&Lpïå½÷ÞóÍ‹%$Ë~„kÇà"ÙÙÙvòÉ'Wzû!a€8™6mšëHW©ªYègëÖ­mÉ’%‰µ£ ¦§›·MzÚ“'O¶×^{Íüq;üðí^½z¶víZWÕã裶³Î:ËUM™5k–ÒWë<ýôÓÛÒsªZ¢¶TU¯N8Áw_¯S%zõ2ëу“©§¸¸4$¼am`º?°È}ßèСƒ­ZµŠAÕ­[7÷©£oß¾–››KC$8…ƒ›7oîŽ×þ¤j¼:_ÐÕèp-íºë®óõï‰ú45âWVV–½ôÒKîÆšwÞyÇIðD޶o0RHX£¹)Ì«Ç'Mšd«W¯˜4'š}÷W^H8ší >ÜUhWÀvùòåÖ¸qcëÙ³§ïùÍ›7»m¨ÝU¹WmkH8Ú÷®;vìhË–-sÇ\•ÇUíøù矯ôö$6BÂq¤Îjuª» zœ P9‹¸mÎëÐö&u‚ŸwÞyöæ›oú–?~¼» ç322lñâÅ®ÃYÑêØ÷§õ.¿ürëÞ½»=ñÄ®ª°ÖStÜ­YcV§ŽÙôéœÀH=%%¥!áuëh Pã)Œ£Ñ^Ž<òH{ùå—iÔhƒ r#ù u(x8@ý=Hxºa¥N:6{öìý¶kÖ¬±¦M›ºþ6…Bõ³aÆnD0óçÏwÕp½>?þ¥0±'Ú°DÓ7)$¬°ÿcðä_¡7š}÷W^H8ší]ýõnž÷\¿~ýlSШewÝu—oœˆ5$íû ׎O>ù¤;Îú=--ÍFŒóû,ï¸H<„„$·Ÿ~2[»–‰)õ¦Õ«ÍÔù·~}iõGob¸xĢ1¥ÁØíÛ«õeùåžöüûßÿv¡êòÂÔºˆ Žç*¹¯Ê-|¾št1J!áùói Pã7Î7Ôù^þÿß-0Æ‘:†jÙÙÙ4D’ÈË˳ôôt+Ñͽû‘Bž*v Êª.ζmÛlãÆ•.ˆPѾÁʈ׾G³=¯€Äž={®¯°³–Ñ{¯®÷åêÕ1øøã#îcU´€ý‡0€ä¦0¥‚/LL5qJO7kÑÂLU_Tvà@³{î1ËÏW9 †–Gd:?.(H¸]S'µ†°Û²e‹ë´ž3gŽ«öÕbßùþóÏ?Ç÷Å-*ý<rN …¿õ@¥lPãíÞ½Ûš4ib]ºtqÁ ¦›¾ï;‚cæS‡*‚¶iÓ††Hú쩊®*êîØ±ƒA•¢ò/P³ܨ$ÌTÓ* —VƒÔ4ujiÀsÔ¨Òp°B ·jUþT(¬A³¬,³!CÌ&O.­( x23K«è& µwðÁ»Žëúõ뻟­[·¶%K–ÄÿÅÚ¶-¸(Š”þÖw@BÞP†ìû^|衇Úĉi ÀtÏì"÷}›Ð|êPµtÝ`ä±}ûvÎÌÌt7ËU…0P³ )ð¸n]iåȼ¼Òð°à Š)Dœ›«+¥‡JV YÁdÚÉG¨U¡AʰZ‰74Ÿ†;Ô„U2¬ªnë3¡Ð=Ê5*½¡ †Rðªnݺ6hÐ Û¹s' ˜î#ßäcK—.¥1RÄÌ™3---†H£4‚–ÂÂ%%%4ªÄ?þhÛ¶m«š>V 05Éš5fcƘõîXq˜)¹§ôt3UŠQeànÝJ«JZ^´(|XÇÔ9QÓ( ¯ó_U¸T§¿ÆÑ Æºîºëìˆ#ްyóæÑÀìÝ»×…„,Ej˜?¾;¦Ü ‘|TQ8''Ç5jdS5zqDH€šî_ÿ¢’p2V...­€«I9²´rô€fYYfM›þ_X!Á^½J«‰úW RpPËÕ¤ HºªÊ: ËÇ£"3ètSxPCi„U¾ÿþû](ÀÿQ ±@ý H kÖ¬q!aýÝCòÑ¿Q#FŒ° X·nÝlÅŠ4 . ¤2… ÎÏ/­0¬°°Bà ÷íköÄfGUZ…øÑGK—MÅ õìÙf3f”ƒUA87×l÷nÎÔ ÙÙ¥Ÿ€èÚk¯µN8Á>úè#’‘‘a£t31R‚ÂÁ .Mn {÷èÑÃˬ¬,+,,t•†¨(BÂ5*ʨR*«Âèþ_ÅáTžêÕ3ëÖ­´ú2P“è¼W@ †Ù²e‹rÈ!ö?ÿó?TBÈÎζ¡C‡Ò)b÷îÝ.X:[7J#é),œ——gM›6uǵ}ûöîñ¸qãlæÌ™. ¾~ýz›;w®­^½ÚÖ®]ËÄ””ÓO?ýĨb„„j2U"QUáŽS»’ðܹfß~ËñFͤ*ª& Pà 2ÄUJýøãi „nݺíûºÀ¨#©¤Aƒ.DŠÔ¡›\ŠŠŠlĈÖ«W/kÓ¦¥¥¥¹à0S*L ¨Z„„j²!CÌZ´0Û¹“¶RUn®YVíj¯Š0URðÎÉÉ¡!RH‹-\˜©oÇŽTf¢’0€¨¨©¶l1KK3›:•¶R™‚1º =z´wÜq¶råJCÕ¶333iˆÒ¶m[}Öõ™Ÿ?Ÿ¶)í±Ç³æÍ›ÛâÅ‹i ’*P:Ÿï )£¸¸˜êÐ !a€šfð`³¶mi F}ó;@%¥hÒZ¶li¿ÿýïm÷îÝ4õW…löìÙ4DŠðªC¯X±‚Æ!a€š¦E ³{î¡€š$-ͬ°v)K¸ÚµkÛ”)Sh éééVPP@C¤Ý$¡ðÌ™3ÿ?{÷gÕ¼ÿ]L•. …ÑI…¢ËœŠß`ºHƒR)‰SIŠä''I—sâÄ¿E*”úurK—¡0’K$•¡u”¤:>ÿyç¬mï={Ïì¹¶/¯çã±5k¯½öZßµöžÙßõ^Ÿ/B‰dÓ¦œŠ¢YY´Htsþ@ëÝ»·µjÕ*û+Ï&(ÐW…º6yòd"ŽT©RŦL™BC‡0@"™8QW‹Ì¦-€D’’b6aíâ’*g&''gÿ¹Ãß;@A5mÚÔFŒACÄ¿‡NC‡0@"éØÑ,#ƒvMëÖf\øqjÖ¬YV­Z5[¼x1PZZš 8†ˆ# ~÷éÓ‡†!a@€Ã‡Û¢E‹âz—/_n»víâ`#ñ8`–”dÆ0¢@âIK3ëߟvqé‚ .°¿üå/¶wï^( ôôtëÝ»7 G:vìè&!$ %ì¯ý«uÔQn*S¦ŒrÊ)vÝu×Ù¶mÛ¢n[ùåëСƒ=:×¶ûOÂ3–©²ÐYgeßÿ='(˲eÙýeÿù·y3m$UïÙ“vqgûöí®¿åå—_¦1€Bè™ý=!ƒ‡âJÿþý­µF“AÌIII Ùï?•-[¶ÐëÿûßÿîÖñïÿ›Æ€BH@ÌX»v­ ­îܹ3¦¶Û Ú>ÿüó6qâDëÔ©“û¹U«VQ·­ãÇ·SO=Õöïß°íÏ=÷œ-]ºÔ7½õÖ[1\/½ôRëÚµ+o,$–áÃuµv‘*ƒ©š0@œy衇¬qãÆ¶~ýz(ÔW…ÞÙ_ø®OF妈=+V¬è‡?çœsìÄO ˜·LE )33Ó `?ÿü3 „0€¨ó믿ڬY³rÍòÉ']`õ‹/¾8bÛ¶iÓ&ûàƒ ô/hûÍ7߸ŸU­÷Ì3Ï´cŽ9Æ<5í®ªºÇwœÍ™3'×¶ùå—%öºGê¸nذÁÊ•+W¤NU æÔ­k6x0í$¢aà €¸¤ œú/>Lc…úª0Œpœ™6mŻ^x¡+ê@QU^|ñEkÔ¨‘U¯^=`þôéÓ]g˜Â¤ 4°&MšØe—]f]t‘ û[´h‘wÞyöÝwß¹çiÙ;vØ AƒÜ:êÔ©c#FŒ°ß~û-×ë/_¾ÜZ¶li+V´sÏ=×–,Yðø{ï½ç†óÒ|ª€‰à°hû´]þ>þøc»í¶Û¬E‹VµjUëÒ¥KÈ«ªøþéO²J•*¹µÍZ×ÿûÿÏ=®ö;v¬¥¦¦ºý¨W¯ž«@U9®R¥JÈmŽt›?ýôSëØ±£|òÉvüñÇÛÙgŸmo¾ùfÈãº`Á‚€õ·k×ΪU«f§œrŠ«ü»uëÖ€óBÏÑТ}úô±5j¸}U5„üÎ IOO·ë®»Ž7^ )Îáë"YÃååCŸYÙíc~H[‰(ûoŸì?²hW²²²,))ÉUFP8ª:Ûˆï qE8ÔGÆÍ±/¯pÏž=Ý5ÿû¿ÿëúËUÄ£>võ‰«ÏÔëOß½{·{Ìûy×®]î³à¬³ÎrÕ‹4ÄB¢‚¸͛7w†n?þøcÀãêÈR§—:7xàW}v̘1îçà A:urgâ…/¿ür»øâ‹mäÈ‘®ÂŒæéùþT!¸|ùòvÍ5׸°²ž£@pp…[U UXµL™2nYU΋HøÐ¡C6sæL·Þgžy&`¹I“&¹müñÇmÞ¼yÖ°aC¦õ÷î»ïºê·íÛ·wWuÖ©ãNëWÕyùå—]•âÉ“'»¶Ñ°›ëÖ­Ë÷¨bˆ: Cm{¸p$Û¼zõj;öØc]@xêÔ©.¬óÊ•+CW¯=½çi__{í5·~·Þ¹sgÀñU`\Ç|ܸq®õ:ùÒ¯_?¶£xçðuÁëRH_ç§w.÷ëÅ%}Fè .‰iüx³ÚµiWz÷îmmÚ´±Í›7Ó@!©±®FBÜÐ êݲe ãò 2Ä*W®ì ƒ«(JÍš5ݱŸ={¶o¹{ï½×W°$¸È‚÷³®s¨ˆ‡®Ÿ´nÝÚ]_ð mb!aG”ªà*œªª/ªH«Š¿á(@ª+/´»gÏ«P¡‚õêÕ˷̶mÛ\xwÆŒîg¯“ëþûï÷-£N³ÓN;ÍU+ö¯&¬‹Jª2ìQÐPaÞ;ï¼3äö|ôÑG®:®–éÛ·oØNW/h«ª¿ª¢«Pj$•}¼õß_Qu\™÷ïßï›÷Ã?¸åîºë.÷³Ú£0û ñvîÜ9ä¶+`­}õ¦pßBm³ž«y 8Gr\ýÇI'ä‚ÕþÇW!i+þÇ·{÷îÏäÜ…•õüo¿ý6a߃ H«ºH¬ wÞ”6…ÚuƒAL¨__WøÅ$*UÊþ› ^¨G7ë&iEùª0-רnˆmê§V¿Ù‡Œ&óò «ðŠŽ³®±ˆú(Utãü£+ŽáQQ…%\H¸U«VvàÀ7OÅ=4Oý¯€ø@HÀ¡*±:tpÏo¼Ñ¶nÝšïsB…{ôèáª{•CGíîž÷B´Á^…Jýá JªM!\ÝeïMµk×vÕgó¢ð«ž§ç<8`(/ñ‚¶Úmï 'œàîÆWÈ8]äRGî„ µÚF„/¸à‚€åùå—€J ÁzÕuU©7Z‡ª zÛ~ýõ×»}ó¦àPm^Û¬vÑE»pÕzCW…·WE `-Z´ðU<öŽïöíÛs-—ß¹!:ƉÜa®ŠÙN2Ô… o¨9÷5l:£¢1bD@¸Þ[NÇ OŸ>îX{!øpÃ×)Ø~÷ÝwÛé§Ÿî^Μ9îq]ØU§µª}«v¨íѺômŽ*\h¾*Tû/3pà@»úê«sí—*R«j¹w^¨½eË–V±bEW©ZëþtÞ*Lžššê–©W¯^@Èÿ½÷Þs7 ddd¸êÆQkÙ²ì¿ú²ÿì‹àqJ!á£øúâÇÂ… íøƒ}úé§4PÄ÷ÒQ|Wˆ+ê«Õ1;w.ãò +Ô«Bê¯ý«QùÔǯþUù׿þåÎï:A¸ð×_í[¯úVCĈ]ôü(u iªò®‚u ÞEd &õî–Ÿ9s¦ .žqÆvÓM7ùV—æ{’pÔÏU«Vuë🮼òÊ<·K¯«à¡Â‘ÕªU³G}4àq/hûÍ7߸Ÿ}ºëœRõO ü*<«j§Mš4 xÌëä C*(©ª¥þTÙ´\¹röý÷ßç»Ío½õ– «wÜq®Úí?üvÙP!á3f¸y>ø ûYw¼yÛwÞyÇ7O» $+, á*H*$ìQÕb€ó£Ê¬ÁËåŽt›Õ®š÷É'Ÿè¸*4ªÊÄþ~úé'WuVárÿã*$œß¹! ¶ÖO€êª«W¯vÕyu~ë|Ùºuk¾Ï ×¶j3ÍWekÿåTý9¿u„z?zîW_}5à8” –«®º* R††Ü;ñÄÝÅd…”"VeáÙ³gû&ËU­:ø½ªJÉ‘V=WH^ëÕúÑgJ‰š2Å,)I%ºù…$²+ €¸¡›¯u«ÿwB…³~ýz×÷¡?t#{FF ãò kÄ3½ÕŸéß—þ?ÿó?®?X…8Þ~ûmß|B˜ ˆ+W®´K/½ÔÝå>hР\+”¨ÀgŸ>}\åWýDwÉ«ÓJ“†ÓòçurµjÕÊ­_wÑOž<ÙÝUÿÔSO,ûþûï»õ+üû /¸J¤ê@›3gŽo™mÛ¶YÛ¶m]øï–[nñ…uóâmg͚傺»ÿ„NpëP'žh_N:é$kÖ¬™­Y³Æ^{í5;÷ÜsÝó}ôQߺ4_{*T°Î;» bª¬åô:2räH›6mš &ªrnÕªUBá,X°Àµ½:ƒ·=TH8ÒmV`Xí­ÐoVV–« ­¶WÐ:¯ãúÒK/¹u)Ø©mÒrJTarï¢E~!á¼Î UÂmذ¡k¯x¶ÿ~WÕVí–ššqÐ5\ÛªsXóîÏïDÒéì…„uþxŠ+$<þ|_ekoU¾ãŽ;Üc 5ë1½?Î8㌀I7-øÓ¹£÷œÎSU`ÖçH^ôZóæÍ³5jXµjÕÞGDö{Ïzöä— èVHXaa€§þžt@#§(âW…Í®D…?TEX'Ûò ‹Šè=¬‚õ«jž &x#º !aHL„„D…JUý6”¡C‡ºJºê¤RÏ£ð£B| öúó:¹yä«\¹²ûRR’5*äúÕ®jº^°T¯¥€¥çÍ7ßt?ûWδõ&…u'ÿ믿°œ†ÿRèV˨ºí{ï½çË Ø>ÿüó¾åô¼«¯¾ÚUxøá‡]PYÏѾJ¿~ý|m¤UùuË–-ùn§Â¹ª6àÐÎ+$\mVôä“OöµA­ZµÂ×Ꭻª¸*dé=/%%Å…Jƒo¸p^ç†*ëœð*âÆ;…³UYaánÝºÙÆó\>\Ûª³YóèÎïéðÁƒ] _Žßxã€p³ªp+ÅWDÔ~zŸi=:·ÌGÕ¬Î?ÿ|w>ßwß}¾v:b^y…P €ú=¨Ï.ü€§þ ì´xñb(„„ãÓØ±cÝ óˆm‘„„5:£ÞÃË—/÷ÍSÑÍûË_þ°,!aHL„„ÄUFUçµÿðª`«d0ÿN.…(Tp0?;vì°¯¾úÊU-MÚFÿ²öQûš×v(¨«}üç?ÿé›§åõ¼HöÕŸª-«ÂñG}T"Ûüõ×_ÛÎ;#>® “Âun¨£³fÍš6uêÔ„{ÿ($«J¹ «YmŠ÷Þ n÷´´4«W¯^È÷X^ï¿pË6$¬·~þàƒòÜ…æ4W•©æÍ›lß\`åÊ•sU·#¥t#A0UÆV@^ªïºë.ûᇢ〧¦j£ùÅà¿ßþŽR™uÚÄ´W^yÅ£›aŠ ¨?%33“ƈ#3gÎtÅ2 ˆyª¬®ÚE$•fc‰BΪÀ»}ûvÎ]´h‘5nÜØU…8tèP±¼Æüùóª Çã¹ñÄO„­&(¿ôÒK]5ÝPÇÛ{ï´jÕÊ-»oß>›Üš6mjeË–uížÈ“‚€èAH@áPI˜‰J¡+ ge™-[–3Í«Þx³ñãsÂÁ +,¬0gÙ²9Aâäd³Ö­Í6›5+§",‰õëÍzöÌ9—t^íÜI›È›BÂõëÓ ædffZ5ì‹/¾ 1€ p7ÆeË–¹Àæ&F*1 .´F¹vÖ{HAaÍ{ÿý÷©$ ˆ„„8TÁC!OU2$'ä©À°‚à ÷éc6eJNÅa…’HV0™€vâÒW­Ê9òÓù¢sEa¿W^áý 2&˜Õ®M;€˜ÓµkWëÖ­›íäæH DŽO +¼ª-P¼vïÞm®jpÏž=íÃ?¤QQ‹0ÑdíZ³‰Í4Ä£Åa&&oR0X•§U­úÀÞ3"§êöGñĖÇ»*³4ú€1lØ0«Ï¨#qçÀ.$û,”°¬¬,$ݼy3gt“…ªàÎ;—Æ(„ &X•*Ul»Fæ F€DQ·®ÙäÉ´ˆz#GŽ´ Xff&”0…ƒ^»v-‡êׯoÆ £! H•µkÕªEÛb!aH A;€¨×¢E ëÕ«—íܹ“ÆJ˜^¶l‡222¬[·n4DÈþî\½zuÛ»w/ˆi„„ Q¤¦šQ D9Uo,S¦Œ=ýôÓ4P  Ç·áÇ[JJ Q + La@< $ ‰"-ͬwoÚDµ¹sçºpVff&”óÖ{ñgÖ¬YV¶lY;|ø0¡)S¦XRR’mÙ²…ÆÄ}h@\ $ ‰B9[·¦@Ô:pà€•/_ÞÆŒCc¥ˆpüRaUVEaäoÅŠîý Íœ9s¬mÛ¶¶gÏžR=?-Z×íº|ùrÛµko.G !aHǛխK;€¨•••eÇwœ½öÚk4PŠªT©bS¦L¡!âTýúõmذa4Dz÷îíÚëHHIIqå¼&¾KÊßÿþw÷ÿþ÷¿KeùåëСƒ=Úýü׿þ5ä>'''Çô9µxñb;묳ìûï¿ç àˆ $ ‰bÔ(³Úµiµn¸áKOOOÈ ŽÀ‘T·nÝì¯ £hˆ8Õ³gO÷ÙŠ¼íÝ»×R'L˜pD^_¿û–.]ê›Î9ç;ñÄæ-[¶¬Ä^¿´CÂãÇ·SO=Õöïßï~öBÂÏ=÷\À>¿õÖ[Åöšk×®u¯³sçÎR=¶—^z©uíÚ•7€#‚0$ |_@tÒã5jÔ°;î¸Ãý@éQHxĈ4DœR³zõê4D>fΜéBª[¶l‰Ší¹ð ]ˆ¶´”fHXUu5rÀœ9s|ó¼ð—_~Yb¯ûä“Oº×øâ‹/JõXnذÁÊ•+W¢!o‡«Ã(^y%'$|àm¢Î‡~è‚;óæÍ£1€RÖ´iSBÂqLÁÄ’¿zOMG}´»é£uëÖöÒK/h=¥]ÍÖ_FF†µoß>jŽ[~!á‡zÈš5k0oóæÍÖ¤I_»OŸ>Ýý¼cÇ4h[_:uÜûý·ß~Ë·í—/_n-[¶´Š+Ú¹çžkK–, xί¿þjcÇŽµÔÔT·L½zõ" `âĉV¥J•çP¸ðÇl·Ýv›µhѪV­j]ºt ºýôÓO­cÇŽvòÉ'ÛñÇogŸ}¶½ùæ›®-´ÿz ¸vY°`AÀúÛµkgÕªU³SN9ÅUþݺu«ïq¯-·oßn}úôqç¸öuÀ€vÑE¹¶ð·hÑ";ï¼óì»ï¾s?«š÷u×]Ç€RGH….ž)$¼y3m¢Î½÷Þk§všeeeÑ@)KKK³!C†Ðqj÷îÝV¶lY›?~‰½†ðœ={¶ ^*Àª¥^wÍš5¯'33Ó….þùçRm#?µ­ª&-ò ß~ûín›ý©b­ŽÃÓO?í~ö‚¿—_~¹]|ñÅ6räHKIIqóÆŒðÜàð|`åË—·k®¹Æ^|ñE·½žÞ—_~ÙŽ9æ›'$üß‹`ѤnݺvÓM7¹0€Ò¥À^ïÞ½iˆ8Ö¨Q#6lX‰­ß x*4é=z´›§pe´›;w® ÀFÓï â ßÿý¾e>ìnÊ©^½z@5áàp›6m\Õa‚Ûz½;ï¼Ó7¯W¯^î÷wA)ÄÛ¹sççÂ̪ìM›ÃÜ謰°–÷-빚÷î»ï†|Ž‚ÁÁÏñöõ¤“N²C‡ùæmÛ¶ÍÊ•+çªû·O÷îÝž»gÏ«P¡‚k ÿç–)SÆf̘ᛧ°²žÿí·ßò T€D¡¡e1'À‘¤*} Î(ð ô)¬GH8¾©‚ªÂà%%THxáÂ…nžª×Š*¹*pÙ¢E «ZµªuéÒ%ûëià÷ÓéÓ§[“&M|a]ïgUúíÓ§«ìºbÅŠbß~U-Éö)Œâ {Á_‚®ÁUÿeUíV•u/ºè"WÚ›j×®í*äz‚õªëêøFâ—_~qÕ‡ƒ«—{çÐõ×_oƒöMÁ¡Z…œ·lÙb&L{Û¬s$\µÞP!a¥“’’B~ê\õ*{í£s1X=,99ÙW[ùÊ•+Ûþýû}˨ýôü?ü$¥Š0$Ô·À£t¥–vQEûkî×_ÆŽ…ã‚«z"¾Lœ8Ñ!°, ¡BÂ]»vuó^|ñE÷ó¤I“\ÀT7„Ì›7Ï6lhgŸ}vÀz‚C­ÞÏ ¡*4;nܸ€×(pm3mÚ´¨:f%3fŒ›ÿé§Ÿ†l{aõ…¹Ï8㌀éÊ+¯ X—Ž«*é*ø«ø¾}ûòÝ7-ß¿ÿçЗ_~ò9ß}÷]{íµîX©±Î-¿|ùr÷¸·ÍÁÛç/THØ{Þ]wÝ•ky¯ÕªU˳-eÉ’%î1ý=£Ð±ÚI£#ø›:uª[fݺu| (U„„ ‘$'›EÙ…O€¶mÛºPÏš5kh àPH8Úª¨¢xmÚ´ÉK¢ ¯xO ˜¼ùæ›­\¹rÖ²eKW96……ƒ›áBª|[R233Ýk¨:m4)LHxýúõ…„ï¾ûn7Ïž=!Û^Ǭ|ùòvÅWD´­ ð0ÀŽ>úh»õÖ[ó]þÌ3Ï´víÚ…<‡Â…„UÑ·fÍš¶qãF÷³Âçþ•„½m®[·nØ× >tè•)SÆn¼ñÆ\Ë·nÝÚ4hg[Š*«Êr›6mléÒ¥n¹U«V,sÏ=÷äjs( „„ ‘èbÙ„ ´ˆ*Õ«WwüJªÂ%€¼ 2„p¨U«–;¶DÖí<½IáÕ~ýúÙŽ;r-«Ïzr'd7õyJ¸°ª½–äùߨQ£¨;^ù…„½ÐéÎ;ÝÏ ªvéÒÅÍ{ê©§Ú/ø8èý^¯^½€yÁmÁ¸ ÷÷ßñ6§§§»p~zöì™k¹¼Bª­ÇTÙã…„ßyçßø `~ãÆsUµþé§Ÿìøã·=z„lŸ` ^«šòÅ_lMš4Éõ¸‚îõë×çƒ@©#$ ‰D¤FŒ @ÔÈÊÊ Ž@é‘ý¡iÓ¦4DœëÖ­›µoß¾DÖí<çÎk6l°ƒæZFÕf¯½öZKJJ²“O>Ù…2õœåË—û– Ì,ž¯ÉõmðàÁQw¼ò +«¶QÈyÑ¢E–‘‘áªí† ·jÕÊV®\iûöí³É“'»Š¿Þ2áÚþý÷ßw¡WUÓ}á…l÷îÝööÛoÛœ9s|Ï9r¤M›6͉U9·jÕªÖ©S§|÷mÁ‚®êï?þ˜ë V°ü¤“N²fÍš¹Q^{í5;÷ÜsÝò>úh@›hßúÕߪ ­ý|ë­·Üãß~û­Û§>}ú¸Š¾ÞÍI/½ô’[—> µMZ®k×®.ì®êÌ‘œ‹:ï½ü¤I“ûí·ß¬aÆ®½ ´@Xª@¢!üTÑ¥ UCŠJ4ÜpI¿§‹º€Ït‘m×®]œÈ¤ê`ÅtñS¹t1.xš2eŠ»0¬ ж3V-\¸Ðþò—¿¸ ³þ\UšfΜé*€â£`VJJŠ-[¶ŒÆŽãêjÔÄ5}WKNN¶½{÷ûº½€g^ß—`­Y³¦ëk¯l$•„K*$¬ß=Z¿‚§Ñ&¿°¾“«Êí±Çë&UçýøãÝþ<ýôÓí÷È#XåÊ•ÝÿÒ5jT®õ…jkµ*þzá×J•*Yß¾}}«Z´æy©Z®ªDçGýr ‰4(×9*$,Ï<óŒ k»ß{ï=`V(øùçŸ÷-§±BèÞ6«‚¶°yèС¾mž7ožoþŒ3¬Zµj¾çéo“¥K—æÙ>ÁRSS­B… .PíOŒÕþ @i#$ €TýBU7Ôù­ ú·J•*¥.é @¿üò‹uèÐÁFí~Ó›tá,–-^¼ØÎ:ë¬R x#tîlÖ»w±¬J7„zï¿&NœsͤêVÞ>œp ¾‹©šJjx^ÕùçŸo7Ýt“o¸t¥OABÂñoóæÍ®2jfff±¯;¿°æëñ1cÆøæy!aUõ”vHxøðá. Ë~øáûùçŸC>æß~êûâ‹/BVyÎÏŽ;쫯¾rÁä`š§s« ëUec…›?ú裈Ÿ£}ð?ÇÔ/¡×µ]_ýuØ¿-öïßïž§çÓ~j CÕÜö§ÊÄ ÇO:•!G!a„¤ê.ª´ñæ›oºêŸ}ö™Ï«L»víZw¨$.ä—ô ñãÇ»J,º Þ…¬çž{ÎUñ&o(ÂâP’í•—K/½Ô øôéc–ž^,«ò ?ûì³®Š†UÕžÇ{Ì…ñ½Çu.Çù¯ê@ú,Ú¶m[‰5Ñã?î¶YŠ^ýuß𣺘ú·¿ý- QinWqˆ•í$ý}P¦L™\Ãr(]ª0«>Ä?Ý>dÈb_o~!a}¯Òw¬fÍš¹ª½úÞ¨@¥ž£i<¥NKK³Æíñ.éö+ªùóçTŽeê?P[ŒðÄO„¬Ü ¥…0rÑ…zuj6,ì2O>ù¤[F¡¹âV’0TU÷¸ãŽ ùå7œaq(ÉöÊ‹*B—+WŽ¡›ñ»#ÌZ·.–Uù‡„?ùä“Ë(<ìUáíÕ«W‘_óôÓOwë*H¥¡‚j×®{üãQµ]Å!V¶8&OžlåË—wa1GδiÓÜ߉ˆºqºvíÚ¾›!‹K~!ayæ™g\PXËÕ¯_ßÝhÚ:ûûéÑGính”Ò ïÝ»×’’’\H>^E{HX~ú駸hkÝ(­ªÔÁU÷ìÙÀ#ŠärèÐ!«ZµªµlÙÒý?ØôéÓ]%^]dhР5iÒÄ,Xàûøãí¶Ûn³-Z¸utéÒ%d@õÓO?µŽ;ÚÉ'ŸlǼ}öÙ®j±„º€1tèP»ä’Kl÷îÝîg…ÇŽk©©©V±bE«W¯ž­X±"ß}›8q¢U©R%`^~!á¢îS^íå­_¡ÄjÕªÙ)§œâ*ÿnݺ5 ½õœíÛ·[Ÿ>}¬Fn_ `]tQ®¡-Zä*A÷Ýwîçôôt»îºë8±‘c³bF8’°(ü£eŽ9æ˜áTUÚVe ózÿý÷Û¼yóÜ¢þðW…! Ñ©uMÈÞý¬)xXÕHÖ——F¹×xøá‡ó]6ÒízõÕWݼ¸mY¾|¹Ýwß}¶~ýú€Ï^-óÒK/…|­Å‹»ÇÃ]`üüóÏÝ…u}¦=Ú´W¯^ñvöõ#Ù7†~衇ÜqÑç`^ÇEC¼ª¢˜nXQgU{ÿöÛoy@œùÓŸþäþ†VUIGÎÌ™3 'ˆM›6¹c™™yD^_ßüƒÄú^¹yóæ\ÁÊÒ0kÖ,+[¶l©úTšöíÛg;vì8"í›htèñ@H7ß|³»h¤`lpxV¡Öž={ºÇxàW%W™DÃwêÔÉüqÌkذ¡ ËúShíØcuaÚ©S§º ˜¿+W®t‡„ìÕE›7ÞxÃ·Ž—_~Ù>Ô…-…ÎÖ­[—ï~iIhýå.ê>åÕ^ÞóÚ·o盛iýnSA`ï"•×—]v™]xá…6nÜ8wAM¯êž¶UËyúõëg•*UÊ&F‚š9Ó,9¹XViHXªN;í4·ÜwÜð˜ÞKÞ:ü§æÍ›ÛÁƒ}Ë)üj9M Çt}yQÅc=§N:ùVt»tã€÷9ÓªU+ß2ú,óüðÃnžª‡R·nÝm­ï-·Üâ>ƒ·AŸá‘nga_?’}S….Ý`üÚmÚ´ñÝüáOŸ“ÚŽàåŸzê)ÞÃGôûAU„ï¹çžb¯h  `.\èþÞÒ_ˆM›6µÞ½{'|;ddd¸«ˆg„„’Ât^P®B… .˜ê_ñQ.=öÅ_ä¹kƒ—»øâ‹Ý¼wß}7äsüCª\Y¦L{ì±Ç–ѶÕ-D5T…x;wî0Ï k»TÅÌ›Tɦ¸ö)\{) §¡6ý+6oÛ¶Í…ãT½Ø¿=ºwïð\U'ѱQ[ø?Wí5cÆ ß<…•õ|*pÂY¸0û›`öWÁb¸øiHXtþj¹?ÿùÏóU [ÁÏýë_¶ÿ~NðªÝúùª ©*Ôê=¬Ç4L­~Öädˆt}yQˆ¿råÊî9úWŸ?áBö‘n—¤mÛ¶­ûìº÷Þ{ÝÍþ´ Òõ·ªª®Ï}lٲŭß²7’í,jH8¯}»üòËÝ2 "èùºÂ›§€³?Ý ¡mÐÍ!ºyB!h}vê& U‰Ĭ¬,÷»`öìÙ4p„i´½Ã}F|ÑÈ"IIInÄ¢D¥ïjÝ|@<#$ €<½øâ‹V»vmw±°]»v¾0Y~!aUSHMžüó Ú©r®*å† Ýy¡Ø·ß~ÛôTÕ8˜B°^u]Uê„BΪ´9dÈ€ù^Høú믷Áƒû¦àPmQö)T{i¨G] U½GÕ?½ŠÇ^{„ºx×£GKNNv!:=z´k3…#= ]èù~ø!'4Ìt($üßjÖEQððáÃÝr 4Èw½ƒ rËêß`§Ÿ~º{ì£>Šx;óZ_8òüÔSOõíß9çœc+V¬»|~Ûåiõy.°_˜®*‰{Û¨›*ò“×v5$nßÞ|óM÷øþð‡€!nu#ÈÑGmÇwœýøã¾ù^`¬Y³f¼_ ÎÝzë­î÷­nêpdy!áMÅð=ÑÏ ÈŽ5*aÛ@£V© ¼QœŠ£M²×´qãF[²d‰ûî¤Q¯˜˜ŠkúÏþÀ#$ €|)È¥ ‘º`¨°«„ ÷Ýwvíµ×º -ªXyöÙg»åT­RtÕÏW^yeØ×óB± ˆ©*îúõëC.7iÒ$WIWÁ_UÝÝ·o_¾û¢åû÷ï0Ï ùå—!ŸSûª½¼çÝu×]¹–ïÔ©“U«V- =t‚颓›9s¦ ßqÆvÓM7,3uêT·Œ.&¶eKNH8Àk¤ V€]Ë5nÜ8ßõ>úè£nY½ï‚&$œ×úòòÓO?¹›ô£çëß»ï¾; èévyAZïs#”„t½tjjjDûT’!ápû6pà@÷øí·ßžë1ïóô½÷ÞóÍÓM•*Urâ|0 Š= ¾( ¬ßω\Ɉ±A—­(†ï ˆ ú;½zõênÔ‘D¤ïP={öÌsÝ(¯HgÍšåFiRRûöí­uëÖîû‘ÚÏûNÌÄT}{ ƒ0"¢€ª»ªÜ+áBª~[³fMW5ET‰Ø¿ê®Â^åË—wSÂñB±ª|[«V-|ݱcGÈeà0`€ “©Y~Î<óLWÙ_~!áâØ§PíuèÐ!צ7Þxc®åuÁÉ«¸šWHX!MUïlÓ¦-]ºÔ-·jÕª€eî¹ç7Ïž=œÈøï7Á쯂¯¼RäÕ$$Ü·o_·ÜÕW_ë±]»v¹÷ˆó½zõrU{‹.Èú"¡‹ÂÍ›7÷íëСC ¼]^vÛ¶ma_§0!]ï}F¢$CÂáöÍÛF]@¯S§NÀ¤*ÂzlΜ9¹~xál½îÃ?ì«dˆºPŸóúÌpä©ú©Þ“ª(ŒÄ Ê·UªTÉ5ÚR"ð*g‡â÷îÝëªÛkt©¦M›ZÙ²e}ßetÃk·nÝÜc#FŒ°É“'»¶µ.MúÞH%a&* ˆF„„ ¯*¼þóŸÝÏÓ§OwJ>øàß2ß|ó›7fÌßDB‰i„ îû“nÒN‡vßQô=QTIyJö÷㌌ × §¥¥¹ï–¯¼òŠmÑh<Ä0BÂÈEá±>}ú¸¬‚¹ºXèUÕ‹òí·ßº`ª–S…Z]dÑtÒI'Y³fÍ\•×^{ÍÎ=÷\÷¼G}Ô·~­W>d³²²lÓ¦MöÔSOÙ[o½åÅ.Z´È]¤éÔ©“oØù‘#GÚ´iÓìûï¿wAâªU«ºÇó³`ÁWõW¡gO^!áâÚ§Pí%/½ô’[—ªÐh›´\×®]ÝþªºZ¨ö¶aÃ_ˆnÒ¤IýöÛoÖ°aC×^€O£FJÓy5‘†„uŽzUa333}óUVó V+Þ[… f}¡Ï…™´.U—Št»¤¤Bº   ûv$BÂ×\s{ü¡‡*p›ë3Læ½íÖ €øpùå—»Ñ0ô·3€#OTõ÷ÖܹsiŒÓ¹sg×1~üø¸®~« ´öñ’K.q7Áßyç. ¬`°nN×Måúî¡Ð0ñ„0rY»v­ÕªUË] ô‚}•+W¶|0`¹¡C‡Z¥J•ÜãóæÍsóžyæªÕÃÞ.,…¾½ Ѫðˆmúª¿Q5d»wó€#O³é»7ï3yÈ!vì±Çú¾ß%¤¾ÝÈ­Êö ɯ  ,…RUÙK'UQ8”ýû÷»Jà zTí×?ĥǴŒÂ‚Á¾þú뀊Ÿ¡õi½,ÐóV®\é.~…«øJqíS¨öò|õÕW¶cÇŽBµ…ª÷èÑ#`ž*׬YÓ¦NÊÉŒ@ wìXäÕäV8½]»vîñãŽ;.W_eõØäÉ“}óþóŸÿX¯^½Üü¶mÛæZg«V­ÜccÆŒÉõXaÖÊ믿ò=ªJêZª bóÚ.‰$$¬Ï…ýµÜo¼á›ïU@W@6¸­æõnêÐM^µuOðçc^ÛY˜×dß~úé';å”SÜ2ª°ÉïžC‡ÌÓgjÅŠÝ:¸ébŸFè b)}tS!áÄîŠ÷Jºù]7¯ªr²~  !ÍŸ?? šp,S Q!‹eË–Ìâ‰'lÔ¨Qlä6|¸YãÆE^H¸cÇŽ®R¯¦öíÛ[ݺu}¡RUÞÞ°aC®ç8Ð=®éM7ÝäªWyæ™Ö¨Q#WµV•·U±×?èzß}÷¹ç¨¢ïðìýxá…\ø¾°ë EæÚµkÛm·ÝfO?ý´«®ýò*7.×sòÚ.‰$$,W\q…[®J•*và 7¸ÊçúyäÈ‘®MC…tU™\!^=Ö¬Y31b„ÝsÏ=®ÝO=õÔmga^?’}{õÕW]èDË]uÕU®º³(:NMš4±ÿû¿ÿó-«êê'žx¢Ýzë­®ýüqkÑ¢…{n§Nxÿ@ÐïªU«Ú¢E‹h Šèï½ &Ј{–––FC!a$,U·Œ:tpTƒ««Â(’*íV¯^äÕø‡„ý' žššj×_½ ‚†ª¸-ÒUUœ¼ç©RìСC]ˆ·_¿~¾ù«W¯ö=GÖ+¯¼2àõ¶oß^èõ…¢@ªBÅÁû¥j¸ ߇’×vI¤!á-[¶XóæÍ}ëPXù¡‡r… éÊ|àÂÐþ¯¯ Ã]ºt)Ðvæõ#Ý·Ï>ûÌ—U‰Ùÿ©½—/_î[îwÞ±–-[Zrr²o9UúêÛ·/Ÿk'ô9õÕWÛ¦M›h Šè{¥n8âFxÒ÷ @¼#$ ĸ;wœCÁ,\˜ýmð(¥j£bs¾þúk[µj•:t(`þúõëí»ï¾ ùœ­[·ÚŠ+®EY_0½§²²²\¥ÝþóŸ.›_âü¶+R Uþùçn{ j×®]öþûï»Ï…ÂngQ^?pÇç‹/¾ …ÐUZ¡îx¹©sSϱÇk÷Þ{/DÝèGH‰¢gÏžîFËÇÓ€¸FHÍÚµ9!aý PŠæÎëªÄë_Ñ%--͆ BC !è¦Pý>Z¶lˆk„„ Ñ8&œJYÇŽíü£-ÔÈ¢îýÙ»wo £qãÆœó€¸GHQíÚfÆÑ TqÆ.µsçNˆ2zoöìÙ“†@Â?~¼%''ÛîÝ»i @Ü"$ Ïþó³u똘 ?}ò‰Ù’%f7æTŸEühßÞ,#ƒv¥FÁà2eÊØ„ h )$œžžNC ¡~/•-[Öæ2Ê Žˆg yuSñMUª˜5mjÖ­›Ù”)º¢Æû,V l–’B;€RóÄOdÿIy”effÒ@êß¿¿¥¥¥ÑH(M›6µÒ€¸EH žQI˜©8+ ¯Yc¶p¡Ùĉ9!áêÕÍÊ–5S¥©Y³Žøéþ믿foæF{÷Ýwíûï¿/µ×3g޵mÛÖöìÙ[Ÿ¯¼’üÞ¾ÏJP*.¹äkÑ¢…eeeÑ@1b!a$œaÆYݺuíðáÃ4 .Px «"mR’Y£FfG¨*܆ ¬qãÆ®2Ý1Çãþ­R¥J©„…ÿþ÷¿»×û÷¿ÿ[ÇîÀ³òåsªCׯoÖ SüO5j˜ýñ97AJùOV©R%ëÛ·¯íÝ»—¢Ð¨Q£²¿Ö5¢!PÖ®]keË–µùóçÓ€¸DH@Ñ©mÿþ9•…{÷6Û¹³T_þ¼óγZµjÙ›o¾éªÿ|öÙg6räHÛµk—{\ýþú׿foVñoWL†„wï6ÓpªGSM˜‰)Ѧڵ£¢:$’ÌÌL÷7Ó¤I“h JMž<ÙUTMëÖ­­gÏž4€Rs$F&SŸé¢E‹âº]—/_îëÀï (>~h–’’S™vÓ¦RyI8Ñ¡á<ùä“n™/¾ø¢Ø_?æB t7mjV«VN%áÊ•©$Ì”8SròïAaÝÔ0j”®’ñÙ ¥àî»ï¶¤¤$[¹r%D©iÓ¦FB?~|öW…d …n¦W–¦£>ÚjÔ¨áó/½ôR©÷‡E²®âîKIIñí¸IUÆKJi÷'þòË/Ö¡C=zt®ãï?é³0–-^¼ØÎ:ë¬R] –P¼T­7==§R§BÃ%ìСCVµjUkÙ²¥û°éÓ§Û©§žê:º4h`Mš4± ¸Ç>þøc»í¶Û¬E‹n]ºt±eË–åZǧŸ~j;v´“O>ÙŽ?þx;ûì³]Õb Õ©?tèP»ä’Kl·*öF]ðT@¸qc³^È JnÞÌ9‹Äñÿg6fŒÙÅÿ¾ï>‚ÂP .ºè"7eeeÑ@”RH¸zõê4ΦM›Ü÷zU½…={¶ë'{衇\PXÁØ5kÖäû|½_ `?ÿüs‘·%x]¡F+Îד+VØÒ¥K}Ó9çœc'žxbÀ¼P}„Å¥´CºBý£û÷ï8þÏ=÷\À>¿õÖ[Åöš%9²[^.½ôRëÚµ+or?„„?î22̪T1‹àÂBQÝ|óÍ®c[aß/¿ü2à15l¨à\UáMÿ­r¬á®;uêd?þ¸Í›7Ï6lèÀþV¯^mÇ{¬ O:Õ]8;v¬¯ ^p§þĉÝ•7Þx#úŽËðá9ÕS Öÿ ‰D´~½Ù]wå¼4ÍžM›@ :pà€û{jÈ!îÿ¢ÓüùóÝw 5mÚÔºuëFC ax!Ño¾ùÆ7OUf5O}]GRIŽÎ…^èB´¥¥4Cªª{ÜqÇÙœ9srÿà~ÔX?޲aÃ+W®\‰†¼b ½=J† ­[›i¸Ú®qðàAëÕ«—ëx®P¡‚7Î £ç‰´SZaáàå.¾øb7ïÝwß ùÿN} iW¦L{ì±Ç¢ïx¨c\aȉs~Vˆ[ŸD6j”YR’ÙYg™­ZE{@ Qå7ý½ôì³ÏÒ@S˜FïÕÃÜHˆ4yòdKNNNè›YŠ3´ɺJ»’*… /\¸ÐÍ9r¤ûY£siD®íÛ·[Ÿ>}\¥aUàõÌEËûù‡~°»ï¾ÛN?ýtkÔ¨‘/˜ª÷˜nÌOIIqU‹ýù¯+܈`þË 8Ю¾úê\û¤Í›7÷U^¾|¹y¬bÅŠvî¹çÚ’%K¶G~!ams³fÍæmÞ¼ÙmÓK/½°;vì°Aƒ¹õÕ©SÇFŒa¿ýö[¾ç~Ûû믿ºÂ©©©n™zõêùŽG^TÐ Š 9„8þáBÂE}-¯‘ݼõ·k×ΪU«f§œrŠ«ü»uëÖ\çDð¹§jÒDmáoÑ¢EvÞyçÙwß}ç~NOO·ë®»Ž7:ÀPrtB,ó£€IDAT¡ %%',\ š_|ñE«]»¶ë€VG³wq/¿°.‚oÙ²Å&L˜V‡³ªÞ©#:¸óÙãuê¿ýöÛV¹reWÕ8ê¨í7Î {Ç¡Q#³9GûïÏ Ð_rI‰ßЉªoß¾.È•#-ðñBÂún$…ý4*Ðܹs¶ tSx^À²8×µvíZJÜé÷«8_*$¬ ¦æ©M¼>¯Ë.»Ì…huS¾·|pÈÕûYáÝ .¸Àyä;çœs\pôþìïÝ ´êù:tÈÕGç¿®p#‚ù/3eÊ÷ÿ7ì“£—_~¹ûÿ|`åË—·k®¹Æíæë=®o0¿ðí·ßîžïOkµO?ýtÀ~èµTt@ak…¢5o̘1Ï n¿H¶÷å—_¶cŽ9Æ®õþQpyݺuùë´´4  uüÃ…„‹:úZ^#»yÏkß¾½½öÚkný E«ÿÕûŒwîéu4_ûïOÛªå<ýúõ³J•*…íÏH4„„”¬?4KN66¬T^NëmÛ¶uÆê€–p!aU—¸öÚk-))Éuh«³[Ë©r‡¨Z…~¾òÊ+þž×i­j"ª"¼~ýúè;cÇæ„ ×®ý}žª§zU…D¦à¼*kkhí#h(gœq†«0ö¡þ.µ¼°Â’@"R`MS4SàmÖ¬Y1×¶‘ŽðTÒRT¿‡D2UÅZÝô^®\9WÉÖËëóêÞ½{®ç‡ wëÖÍÌ|þùçݼÆÛ®]»Ü¼Ï?ÿÜÍ{øá‡Ã®+Ôù⿌ª +dzï½÷ú×ﮣ>ÚpnÓ¦«âëQ]¡Û;ï¼3d{gHX¡èß»Ûi§fÕ«W¨&¼Ï‘l¯FQ««Û H}ž;wyüfÖßéÞîo€ÂŒ¾î}¯}=餓ìСC¾yÛ¶ms矪çuîíÙ³Ç"§¶ð®údg̘ᛧ°²žÿí·ßòf0BÂJèQ9!Õ¬¬Ry9u°«sXÕ&$\§´ªhÔ¬YÓWyDü;·uQDU<òê€÷:­z©U«– ÁhXÁ¨¡* iO™òû¼íÛs‘!† ’>Î9Çì”ST¾‡ö€býSd“û[Iü—ÂÈ Oßiô~]³f „ôÊ+¯¸›ˆ£µš¶ú,5jä†Á¦OŸnMš4qýƒ raGGŒLô–ÓMÑ}úôq•;W¬Xð˜˜þ?ÿðÃv÷ÝwÛé§Ÿî^Μ9îqU3ÕÍÖª”ªŠ¦¡¶GëÒÿµ=ú|iР›¯Š£þË 8ÐU  ¦ £Í›7÷UÖMÝ ±j„UU¸ÕŸÂ© ¦¦¦ºeT½ÖÛ?yï½÷\ð2##ÃU7Nd^HÔ›Ô.ª¾êß§åõyé| .$ìÿü¥K—ºy¯¾úªoÞO?ý”+H[а\uÕUîœôè\?ñÄÝß›ÞÈ`ª,<{ölߤÑÇTq6”â {ÛèQÐ58°ê¿l¤Û«¬W]W•z#¡¾MU2dHÈãýõ×ÛàÁƒ}Sp¨¶(£¯…:Žú<ÒçlïÞ½s-ߢE _Åã¼Î½=zXrr²ïsaôèÑnt·ýû÷û–Qûyýµ $  4(Ò´©Y£F9ÿ/a?þø£«*ñç?ÿÙý¬ Oêö¯£!ꂇûóBÂï¼óŽož†HÔ¼O>ù$äkùwê¯ZµÊuRëÖ¾}û¢£íÓÓÍRSÛ]ȦBð» ̪U3kÛÖìÀÚЉªêo%U’ÝT=Pï×eÜLˆu û{@•*UlX)„)aÕÏ þ†áÇ»>`^ßÄå—_îª{Ž9Ò…wƒû=¼å2T(rܸq®Äÿ±àЧ»êyä‘Gìœsαã?Þ<ÀÕó;tèg SaÆž={ºŸxàÔMDþËL™2Åýß»‰Û£Ð¤öIÔ§£¹¯¹æ×£ù mú¿îË/¿ì‘ 0gffºð²*åúS°³k×®îær­KÛ’ˆ¼èܹs]›E£¿ËT50Ñ«õ±€0`.„«J½¢àÆA…ñÒÒÒ\HOaÀ¼F-òú&üƒ—ê÷8í´ÓÜþxÕ„½åTÙ4Ü:‚CŸÝºuóU ÕM?š§>’]»v¹yŸþ¹›÷ðÇ]W~¡OUVUÒ{ï½7à3Iý1 K›6m\udªˆªÿåÎ;ïôÍëÕ«Wž£AùSRÇŽÝ:ô÷J´V.)^HÔ ‰çu^EcHX¡æN8Á `o¼ñF@×ìŠ+®ˆ¸= ^¿~}D!aUâÖ|õI†ÚŸ‚n¯¼Úo½?n½õÖ|—?óÌ3­]»v!¸pqŒ¾ê8:tÈôo¼ñÆ\Ë·nÝÚ}oÈïÜÓ瑪,ë3Á;ÇT¸Áß=÷Ü“«Í!a¥GCÉU©¢²ŶJNjÕªå:~Ö¿bîÁ XnèСV©R%÷¸†«”gžyÆ…5¯~ýúnØIuH«“Ý¿Ú.f¨j†7£^Ï^3T§õ´iÓܼPÞ¥FCëâ…‚ÂÁ4¯vmÎG ˜†ÕÕ©&Mrþ(2Uöºùæ›mçÎ4å¼ê~ .¤1ÐïU]õHY½zµ«Î[®\9ׯ°uëÖ|Ÿ.P§0°æëæiÿå¶‡è— úô'{¼W_}Õ7¯¸BŸW]u•~úé¾ÇGŒa'žx¢ ;+¨±* Ïž=Û7)(¨›´=3fÌðUJVãH(ô¨õjýƒ¶ï¿ÿ>!Îõh ‡,Ôúûõëç*Ϫ2´ªmûSõk½‡"=žù…„½Ð©÷7­ÎÉ.]º¸y*&î=# û«òv^íWÐí•ôôtÎ*y/—WH¸¸F_ uE7¨2±?ªRÞ£G|Ï=QðZýÀªœÞD}8AôÙ§¾^ä $  ôè"Tr²ÙÀžju«Ò¯*Á„joÿþý®WGTùÂÿ‚ˆÓ2^•_ýul\ÔÎ))fݺ…~\C§¦¦r>¡ÌžSMxÒ$ÚŠÈ«J:dȈzÏê¦G ‘õîÝÛ…ØÑwÔo¡ª¶ *§fo4è.P§Ÿ…Õh® ;þ|_¥RõɨBéíÅ~¿‰¡jÕªî$ÿéÊ+¯ ØIÙßå*T¨à„ªÀ®È£×ÒÍä5jÔpÓGdd™h ‡,Ôúß~ûmß ý“'Oؾ÷ßß­CÅ^xáW­ZË{7ýË/$¬p¬÷w­FËÈÈpÕvC…„[µje+W®tçž¶KżeÂís$Û;räH÷;ZAbUÎÕûÁ?$΂ \Õßü1×ñ.®Ñ×BGy饗ܺt#€¶IË)è­Ï=UgÎïÜ“ 6øŽý¤ þ½§6lèÚ ÿíï¡ ”ª#Ì’’ÌlÇR³w¯YÓ¦9S¸J¨ªèœ‘A[á\z©ÙYgñ9EôÄO¸ ÷ÿüç?i FÌ…ÔV;’ï…íTQSÛÑ­[7Û¸qcžË‡ Ô©Ú¦æ+ —×r¡+íðÁƒí„N°Øo¼nÖ Þ 9^qŵßwß}ç֣㭷Þv9UN?ÿüóÝÈS÷ÝwŸ¯A4‡„%xD°PË( Z§N ÷Àz–-[æ*èzaR­O!üPò ëµôžTÅiMªÎ«¿ÖûôÓOìÇ#<âF9Óÿ“’’lÔ¨Qµm~Û«ÊÉ^›è_UËÝA¿…¹ªÜ;hР\Ç?THXŠcôµPÇÑ£ªß å{ÏKIIqçK$çžG7RèØïêÿTcµ¿WA„„ˆYªt©ÎaUV(­!ÐÔ¹Ó¶mÛí,U‡•îÄgË—/·]»vq#q8`V»v‰TNxêW8XU„óºHžnÖ¿?턳xqÎÍ =D[@h¨oUñREa±¡zõê6~üx oàÀ.w$ª ûSHV•r¾á†쫯¾ ¹œ¨Û±cGÀü´´4«W¯^®åJ;ô©Ðž~þàƒòÜ… TUÑæÍ›lß\`åÊ•+P_xzzº ]S¥S;î8»ë®»ì‡~à¤B¡F+ ½/ôÞ 5jXAé\ùùçŸó|êœV°]¡x…ß‹s{5OmRÐõª²±ÂÍ-RÅ5úZ^ÇQûü¹)U7VpÛŸÂâ5kÖ´©S§òðCH€¤¡”4„“:œ4\“þ­R¥J‰‡…#¹{»(ÔéÔ¡C=z´ûÙ»›=xJNNŽéã·xñb;묳J-Ü D¥™3ÍÊ–5[»–¶(.ޝQ£œ)L§¼–QEgá©BÕé§k\[Ú A¡*U Sõ¾ùým jÔ­[× ÿ $:UçTä„ ¢b{ð»ôÒK]5]ÿj ¯ß¶U«VnÙ}ûöÙäÉ“]Õϧžz*×r¥VEOõc÷éÓÇ Ðß ¡ÖÿöÛoûú€µýþÞÿ}·…{_xáW=TËûW-9r¤«­~×U«VYÕªU­S§N¾Ç·mÛæŠ`(,yË-·¸ŠÃ@q)éë'E5þüŸ±èõ×_wm­êËþ4’I¨Ê͉Ž0 a­]»Ö…Pcñbåyçç†mzóÍ7]‡êgŸ}æ:@½ê´%µo%ÝÉ¥J5ÒKw–‹~î¹ç\´7©ÒC¬Ÿ êÔWE ¡©â­*Ú¢è&N4Ó ù„¥zu³)Sh7 /YYf+šýïÿÒPkÖ¬qßç4T1€Ø¡Ê©„„ š©0æM›¢f›ÞyçW7˜×oûÈ#XåÊ•Ýÿ“’’r…åŽTHX†ên Òüyóæ…\FJëÔ©c*TpAƒ)¨ÊÀ^XëëÛ·¯ïqU"ö^CÿvïÞݾ=êO×òþÕQâí!aïýTl&%%%WUã’ –$ c4kÖ¬€yO>ù¤ë°ÑOGŠ:˜ý‡X‹„‚¬ÚîaÆ…]¦¤ö­$;¹TÝAûùW~ðBÂ_~ùe‰‡#q.¨´†Ç ¾ÓH(kÖ˜%%å\Q8+V˜µnS•YCG: jögžÍŸOûùéÞÝLCÓRM ìÑGuß³ôÝ@ìHKK³!C†Ð@¶X£FÜûâp¤ß·ÿ~[Ö¦~΃FÝvª8ÄæÍ›]}QìØ±Ã¾úê«\AÑ<½F4î?â›*xëÜ u^¢xé:`€ÈĽ_|ÑuæVWÕÄÿš>}º«X«ŽÓ X“&Mì²Ë.³‹.º(Wå¢E‹\å^ =¦çiYuôhX&­C• Ta%TÇÏòåË­eË–V±bE;÷ÜsmÉ’%¿÷Þ{V¶lYËÈÈpÕl#qèÐ!7LšÖ«ÿ µo ,°?þØn»í6kÑ¢…{~—.]BT?ýôSëØ±£|òÉvüñÇÛÙgŸí*,H¸ —\r‰ÞÍ£6;v¬¥¦¦º}¯W¯ž­P-'Nt•9üåŽtŸòÚ¯píå­¿]»vV­Z5;å”S\åß­[·´µ–ß¾}»*¯Fn? ï¹$ªúqÝu×ñ&-!Åjd]±P)"*©¢Þûë×Ó‘R¥`«³·¹ppçκë$òç«‚ŽBª’ o«WçT~àÚ HCyŸqÆÙæñwK†ìÝ»7 ü—*ã'''»¾ÎhF¿ B€¸¥@nóæÍ]'îðáÆ'Sø³gÏž®ãôp•dÇŒã~ÎÌÌ XO§Nì /tÿ÷:[/¿ür»øâ‹mäÈ‘nH#ÍÓóý©Bpùòåíšk®qAe=Gààjµªª¤ði™2eܲ‘ _wóÍ7»×T868@jß´ÎI“&¹}yüñÇÝpn 6tAY«W¯¶c=Öi§Nê²ê_¹reÀþ{Í öjŸÞxã€õ¼üòËvÌ1ÇØäÉ“]{>ôÐC¶nݺ<÷I¡ õ—_H8’}Êo¿Âµ—÷œöíÛ»áó´~½Ö]êþí¡€¹Î‘qãÆ¹¡êôùKâ WÔÊMí¯ÀöÏ?ÿ\ìëR¨_ç§w.÷ë%œŽ-ûÃÚ²?4ÌfÎÌ åé3#Q§O>Ñ/1³sª-/\˜ 8Ð,55'¬öÒ…û„n´N…„£h¸T ªõèaÙð™mÞL[@h¨óo¼ÑÝT vtîÜ™0D#Ô©ô•W^‰Úm$$ ‡0 î¨z¯§III®Ê¬ªþ†¢0¨:N½Ð®†&ªP¡‚õêÕ˷̶mÛ\xwÆŒîg¯³õþûï÷-£¡æN;í4W©Ø¿šp›6m\•a‚ƒêL¾óÎ;CnÏG}ä*Ýj™¾}ûÚUz CC¥i;µ-Úf…S5Œ\¸} EÁÚàe|Ö¼wß}7äsü;›/^ìÚæ±Ç˵œ¶­nݺ:n ðêB”?/$¬íRÛxÓæ0!PûÉ~…j/¿“N:) Z³Î‡råʹóÊ¿=ºk(r?‘œK¢ ²žÿí·ß&ô{V!i]l‰%‘¼ÇJ‹Bíº)!¦)8rþùfÇ“^eÊ=) øÿÙ»x›êüÿã 9JÈePFÉ%$¿äÖÑí¨\£\ÒŒ.Ĥ_¢þšä’šQci?ä1ˆ1 R¹çV©FE®¿RJ’>ÿóþžYû·Ï>ûvŽsÙ—×óñXÎÚkïµÖw¯½ÏYßõ^Ÿ¯ÂÔª¼¬Êì§Nå¼½Uq]¯™–Æ @´ŸUöûûÞ¶mÛÜßËÁÎÄ6„u35€ÌT„BÅ(b5(üý÷ß»~ð`£Ý!q¨`úÆ5íÝ»×Jùè£\&&¦Ü~üñG¾t@ $ HªüzóÍ7»§ª:t(ìòÁB~½{÷v½^%ЧžzÊU?úá‡ÜÏ¡*2($êöTèQUh[·nmóçÏ÷M•+WvÕdÃQUÏÓó‡jÇŽ ¹¬*ë5µîöíÛÛ©ÿ„ÆÂjVyâĉ™‚³Þ6«Rn¨Ê¶Þþ¯[·Îµ‹*£ ¬WaW•z#QÀY•‡‡ –i¾¾ûî»][xS`¨6Ô>E»_í¥Ît…̃UÎQõf¯â±×Á*cE:–DÇ„ž¯ èÉJÇp½zõ\ÈÞßìÙ³­Q£FîâÆ!C¬J•*.t?jÔ¨,;¼eõ> 0À½×›6mòÍ?yòd¦å¾üòK{ì±Ç¬zõênÝ ,p«òµ*Q«:¸ª_[‡^Kÿ×ö轫S§Ž›¯êÔþË <Øn¿ýö,û«ŠÔªp¡Y³fvÑE¹JÕêØ¤ãVò¦M›ºåjÕªåöϳyófwsAçÎ]…㸣ª¶+fLK—šÍK%aÿJÂ~ÕªsBù…8²E72]}µÙ~§Âûÿïÿ¹¿—õw2€ørÿý÷»›ïd¥~Iý~Óèj@nÚ½{·-\¸Ð&L˜à¾‡U(CßÅꧬX±¢;˜òwŠ4:&@<áÊ0 !(x©ê» Ê)HM05XV=Í›3gŽ "^qÅ6pà@ßã¡BÂãÇwówîÜé~VXQ?—)Sƽ†ÿÔµk×°Û¥õ*H¨ cÙ²emÊ”)a—×¶´k×έOûjߎ=j}ûöuáWUíURË(¤è¿Íá¶ÏÛÿ&Mš¸ª¸»Ã s?yòdWMWá_UÞU5‹p´¬:@ýy!áO?ý4ès"íS´ûØ^ÞsFŒ‘eY…¼õ¾„;¢9–dúôéIÛÙ¤öQXVAjUbùú믃k·Ýv›«=zôh×)®yú¼[V¡ôV­Z¹ÊÚŸþy–÷ÇûYáÝ–-[Ú¤I“ìꫯ¶‹/¾ØUWøVÏÕÍŸÿ×Ò÷‹ª*éçqãÆ¹ãGÕ|ý—™6mšû¿*zøÓ Ú'Qõß .¸Àî¼óN–Ö|}‡†û—.]ê>G 1¯ZµÊ˜™={öXÏž=ÝçR¯§í‰ ÛU®lÖ¦ Á»ü”~|ºv½7ß̨&¬Ï ¢† ºZ½sdñC7çBóFSßP°Â@4t£¿Ž¥6mÚ¸þQSúW T@ô}¬>Fõ/¯^½ÚMÛ·o§’0•„²0 ¡(§ ® ÚõêÕ+K@Ï_° ­*vêBfÛ¶míí·ßv¿÷Þ{¾ÇC…BU•Tó¿ùæ÷³*ã*ü×¥K—lmÿÊ•+­qãÆV²dI{òÉ'}¯‰¶Gá@…$C훪ßV¨PÁ×& %úWÝõ¶¹jÕª!×ãí¿*ߪ‚‚¯ªôŠB¼ƒ ²óÎ;Ï|ðÁ°ûP³fMW Ù_¤p¤}Šv¿Ûë§Ÿ~rí©ŠÔZ´háªÇ†;¢9–däÈ‘™Ž›d ·.6*Ø­ðx¨ãÇkÛ1~C»«btµjÕ\ÕaÿjÂÞ²ªèì5CÂúnðªJÏ;×ÍSˆá«¯¾róþõ¯¹yþóŸC¾V°Ï˜ÿ2ª&¬ Ö¿ÿýï}«ó^Ÿ§¢cCÕ‘=ª.¬ï®Gy$Ó~ôë×/ìñëïƒ>p•Fô:ºqB¶cZ‡aÕ¼¨–‹ÐÆŽ5»öZÚÈÉwVëÖfii´„¡nt¦¿»Or#wJÓ92€Ð/^ìújÔ¿56ýûýˆ‚ú}ôQwì¨QýëÉN!`…†Õ÷ y0 !©Z‘*Ç*(÷›ßüÆ8e™Ù³g»Î8Uóô§À¯ªvªzi£F2=æ…ƒ =ª ©?U*-Z´¨;v,âö®]»Ö…O/¼ðBW½öË/¿ÌÖþª «*ñÞzë­A÷MUU+°zÚ 6dÚfÍSõ`üC ¼ªºªÁFª¬Š ‡£êË„ G»OÑìW°cAÄT™Øß·ß~ëªÎ*ˆØÁ„;–D¡ÖÚµk'Ågòý÷ßwzõ™PøúСCa—Õ¶j3Í?|øp–e«·„ û~½÷?ÿùÏLïs`@9»!aéÖ­›U¯^Ý÷¸.´þêW¿rþ )+D¬ÊÂóçÏ÷M –«Zµ¿—_~ÙW)9š*颠¼^[ëÐP˜Ñ|廩S-ýKÚlÛ6~iå7Um§2}Ï?o–’böІF¿Ð߯øÃh )ðíª@2SÿŽ*Á*è©>hõ¾ð ®„*PRá5y'½ïzÿõUÿÕq¢¾'êûSPxýaò!a@B{÷Ýwí¦›nrUŒ† ’é1… à0`€«äêÝ©¿gÏwASÓäÉ“3=Ç 6oÞܽ¶Â±S§NuÕAg̘‘iÙ-[¶¸×Wà+¯¼â*(­[·Î,Xà[æ‹/¾°víÚ¹ ßï~÷;Wy7U Õ6+«õ«*†j»æÍ›tßTÉ©R¥JÖ¤I7$ÙŠ+¬Aƒî9S¦Lñ½¶^Sû¢€ìúõë]efí—BÌþûï… _{í5×¹©P£*özFm3gÎtÁD…‰Ë”)“%øhùòåî}RàÙ.$¬÷+š}Šf¿‚ K–,q¯¥`§¶IËôìÙÓíïîÝ»ƒ¶G pÇ’*áÖ­[×µU¢ûá‡Ü1ª¶kÚ´iTA×Pm«P¸æû[jÙP!aÿå¼°ŽOn…„UUÆ«l­÷[Y~øa÷˜ÍzLŸ UäöŸtƒC ?º@Ç©*0G æk}‹-²òåË[Ù²e³|& œ*ì”.m6l¿¨ BŸ>f;Ó@véoÅfÍ,ýÚÂÐMjú[W7 ˆ?êç"$ DOý®ª«ê{ôú™˜¼©F6xð`[¶lÕ‚B€¤ ¨ª9>|¸•,YÒuÖ)PçQQ¼À¡Q½à¤I“¬T©RîÿÞ°rÁ¨R€ªãz‚Z—Â’ž5kÖ¸ŸU7ZzL*ôz ê_m˳Ï>vßfÍšåBµúYÕk7oÞìÌ ÏÎ;×÷<…%/½ôRß6k]^°9XÈRa`ÍSuXϽ÷Þë[·þUõ׃†Ý/uªr¯˜;\HX¢Ý§HûêXPW,ý;t* <B…„ÃKª^¬÷Í¿"n¢S8[U˜ÖÐÃ{÷î ¹l¨¶UufÍW˜;Ò²>}ú´]rÉ%6hÐ {ë­·2…›ªW(¾K—.Q·Ÿn"Ðkéø~ðÁC.§Š57vÇó“O>™©­b†BªéŸAcøé‚¡ß‡ýûÓ@N¤¯¦ÿq »¶h áÊ+¯´Ë/¿ÜÝÐ þ¨ŸG}&rF}œêó¢’0•„u   ’žªœêâåÙ³g}óT‘VaÆ@þ!@…üT0’ãÇÛ\uÏÜ¢mPU\UUU4pß´ÍþdÍ×ãÁ¶ë³Ï>³ªö™CzM½v4íãQufUUþ Á›ììS¤ý v,ˆÞ;½‡9ìXReâ *ØôéÓ“ò3§ ¬ªå*,ü›ßüƵo¨ÏZ`»§¦¦Z­ZµB~.ÃÍÏͰBÞúyëÖ­a·CyÍU…ú¿þë¿2m_Ë–-­hÑ¢®âvvè†Ý|H•±’¿ð mĈöå—_Ææ0gNúYHúiȦMü*(éŸ#{ôQÚÈ ÝôT©’¥ÑÒ„ε .l;w>§óIgáÂ…î܉ž¼ùæ›îbˆªЦr,ÎÍâÅ‹3UNÄcé/ùKÈêÓÉD¡ð›nºÉUÔ |ϽÏZóæÍÝr ÂkÈSUÑ1cFTŸË¼ «´*y0ÀUêUU`¯¿nÝ:_%jm¿¿-[¶¸×P°÷•W^qÕ¦µ¼…k=z´«ä¤0ñ{ï½geÊ”±[n¹Å÷ø_|aíÚµsûßýîw®âpÌR¸N©† ãË® Õ¨a6aíä”nþ©]›jè„.œÀß@ÜR!a€ÄAOn¾ùf«Q£FÐJ´„„ó‡Bš‰|,)TŠÿ³aÃW7ØgmÒ¤IVªT)÷ÿ””” áê‚ ËðáídÉ’nþ¢E‹‚.£÷^C-/^ÜU¤‹¯ª ì‰õz÷ÜsO¦eTØ[þ½ãŽ;ì Â¶ÿ±fÍ÷ÿŠÚ1IÃ+¶h‘1:Å_ªVÕ´Sº™£H³çŸ§- @¿~ýÜß­õ@|òBºñ04$j¨§ª™?~ Ĺ“'OºðâÅ‹i €@H¨$ÌÄtî•„U!T@M Ïœi6j”ÙСf½z™5l˜ÚT@PÕ]õ³S Sæçjß>³îÝ3Ž1U>x6‰5ºÐ¯÷G•žœ»ë®3ëÒ…vôŽ9âB…>ø`úŸüÄ;}žgªOq0@²9rÄlåÊŒq›6a…õÿiÓ #{Y¸Ð¬S'³”³zõ2~>s†¶‰EºÐ_ˆÓ@ ׌iVª”Ù»ïÒ’ÚªU«\¨pÆŒ4Š)bÓÔ?€¸ÇÕa€d—––0À¬t錠gjªÙرó?ü0£j±ªSÅ9¹«VoßžqL(hª*Ô^ȼD‰Œÿ«*5bÛĉï€ÜñÉ'feËšC[HjÿýßÿíBÂêÜ@Ü«\¹²UŸâ!aüŸS§2ªÀœQÖ«2ÌÄä?Õ¨‘Q9xذŒãEÇ âƒ*ˆW­J;¹é–[Ì7θé’Ôµ×^k+V´Ý»wÓ@¨W¯^ú©Ã( @xÿþ7•„©$œQIøÄ >ñN u€ÜóÒK7P,_N[HJiiiV¬X1ëÚµ«Ûºu«]pÁvçwÚ«¯¾j·Ýv›)R$S%Üwß}×­·[·n.ÜúÒK/YõêÕƒ?‘ö!ÒúBm§ÿ9J‰%läÈ‘îgí£¶í«¯¾ÊÑöNž<Ùn¹å·ŒÚ³nݺV¿~ýLËxmªm½ñÆmôèÑV£F 7OŸ;Ϲ´q¸÷ [ý<4$Q£ÌêÕ£€ü¢ª0… ™-\H[H(«V­r©è H< ©€¼sÍ5×XÅŠmÍš5væÌûøã]ÈÐ?ÔÉŽ;ì‰'žû7YÍš5Ýßn—^z© G’_!áh¶NŸ>mýúõsïKñâÅ]HÔÿ½lÛ¶­UªT)S•Þ/¾øÂŠ-êªáŠ4½ãŽ;²¼¾B«zÌ?œª×TU\Ïwß}çþ6xä‘G|ójUÕbÿmñF# ¥G³‘Öl;=ª|­Ç¼à°þ†ÑÏ/¾øb޶7ÂÂëöÚt̘1¾yú,W«VÍÊ•+—©špNÛ8Ò{-B NM¥€üT§ŽÙÀ´€„¢‹ÖºHýì³ÏÒ@SpmÚ´i4ä/˜x®AÜp¡IY¿~½{üúë¯wÿ®\¹2âkæWH8Ò¶#+U›­\¹²k·öíÛÛ©S§\5%%Åú÷ïŸeyUíU]¼ é‘#G"¾gÏžuw[·nmóçÏ÷MZ·ªëz.¼ðÂ,ëtüÛ‡h×î˜iÑ¢…«²ëQàV•…›4irNÛ«ÐïÁƒmâĉn¹wÞyÇ÷˜×¦ÿû¿ÿ›é9 ójþáÇϹ#½wÑ"$ ÉàþûÍÚ´¡€üôàƒ¼ÓÒh £iÓ¦.ˆ°dÉH`µk×¶±cÇÒTñµL™2Ö¬Y³LÕ_mܸÑ-sÑEYƒ ì7Þð=6{öl«R¥Š Ö©SÇ5jdË5¢Ÿ»ï¾Û…÷îÝë–»ýöÛ³¬cíÚµ.D\²dI·® 6 M~øá‡®*­‚§Úö=zØêÕ«3-£mÒv?~܆ â¶O•RG•©ªj¸m·ÏëQhrÀ€V¾|yÛ´iSR; ¤¶k×ε‚§jƒP•p6-[¶¬û¨@«X½×Ôû|ÅWdšºvíê–Ñ{¬e«ÞF2µáÖl;=Þñ­csðàÁ¾é׿þµ›¿k×®loïÑ£G­oß¾î¼GU¸ëׯï–Óñé Õ¦ãÇwówîÜyNmi=ÙAH’*eôéC;ùI9 2ûÇ?h A•¾TñJ•ºV­ZEƒ ,55Õ…ºyãð?ýôÓ,oݺÕ.¸à»óÎ;]õÕÛn»ÍŠ)â *´Û§O÷ãÆs!Ä}ûöùžŸ––æ*©Ž9Òý¬*«ú;¾ò-óî»ïºyݺusaÜ—^zɪW¯449yòd:Õ2‹-²ºuëºà¤?/̨m½ñÆmôèÑV£F 7OÁIO¨m´Ïë騱£Û¯gžyÆ>ÿüó¤9v-\¸°Û…Ìõÿûî»/Ërú›]!lÿ6‹&$¬à¬Þ‡.]º„܆o¾ùÆ=GÇŽ¿h+QûïC4ë ¶­KU‚u¼øO^YÁàìn¯*0W¨PÁEÇc´•„{ì17_ë<—6Ž´€ì $ É {÷Œ 0€üU£†Y¯^´€„ jqº@­Šmv@â"$ yëôéÓÖ¯_?÷·UñâÅ]ÐUÁAOÛ¶m]^Ïwß}ç³þ•PC…&eÆŒî1/8û¯çŽ;îHÊcç믿vÇÌ­·Þê~nذa–Àö·ß~k_|±õîÝ;S› šª2³SHÛÓ²eK+Z´¨;v,ävè=Uµ^ªLMH8p¢Y_°íÔ±«J¿ªšHÇ›*óV¬XÑ-íö*pl÷Bª´xªJqàßPµjÕÊ•6ŽôÞD‹0$ƒÔT³h ¿ÝsYåÊK’¶÷~ÿûß» ÔcÇŽ¥1€×½{w7T7 o)|X9ýœQcµoßÞÜpöìYWá·uëÖ6þ|ߤåTÍ×.$¬*²ª²ëQàV•…›4iâ›§ê«ýn(T V¡_Ý,6qâĨ+«*Ì«ù‡¹íÑî³ÿzŽ$Áyö|ànÐS8õûï¿·ýû÷Û=÷ÜãöÞ¼yn™%K–¸Ÿus·jçž={º€õîݻþ7¢åÏ?ÿ|·U¿Õ{¼eË7OÇÑ+¯¼b'Ož´uëÖÙ‚ |Ïó*æ*lþÚk¯¹pxãÆ³„Ì£Ù‡hÖl;ÿùÏf ïúÓy‹×rÑn¯^·R¥Jî³²}ûv[±b…5hÐÀ-7eÊ”,ÇaóæÍ]UníÛÔ©Sí¼óÎs!ýÜhãHï@´ @2¨WÏìñÇi ¿½ù¦Y¡Bfûm î)´¡°ÁâÅ‹i Á)4ÖŸ‘H _(ü×®];TxVáWý¿L™2®ªÿÔµkWßóB…„÷îÝëæ_wÝuî†oRUÍßµk—«~ªÿVé >zô¨õíÛ×RRR\åVU®Õr7nô-*Ì¨Š¬š¿sçÎÛí>‡[O"Ú±c‡«„«ýU Tÿ–*UÊž}öÙL˽üòËV¶lY÷¸¦5jØÛo¿u› >ÜJ–,é–Y´h‘›§QDjÖ¬é{M=®p¯GÁó=z¸P¬oÔ¨‘}úé§YŽŸh÷!Òú‚mg·nÝìÊ+¯ Ù~ª ¬uêæ§h·WfÍšå‚Âz¬víÚ¶yófæÕsçΛ©M'MšäöGÿ×ç#Ô •9iãd;Þ@Þ!$ ’šîØÖ]ã‰Lµ_}õo6ìªV5c¸` `h¸Ôÿ ñ ñ|ÖõêÕ³U«VÑ @‚S¥»^½zÑO,\¸°uìØÑu/¸àëÒ¥KØç„ +ð¨*Áª˜ê?yAdƒUÍTÿWÈÒ_¨ð5×\c*TpdQäh+ {\µÎPÛí>‡[O¢ëׯwUyU±6”¸xNüðîʯª:ûÓëéuùå— ÏSÜhª:G»‘Öj;£íöê˜TÈØ£õi½Þvù‡ZVÇòéÓ§ó¤Î!acO<ñ„ë)W®œ»`HÞÝÖÎ)Ö¨ãææ›o¶§žz*ÓþN†-ž½þúëvÕUWÙ±cÇ8hdV±¢ÙÔ©´PnØPW¢h qKÀt~Ô¯_?÷‰MC–§¦¦ÒO¾þúk+^¼¸Ýzë­îç–-[ZÑ¢EÃöéΞ=Ûý}¶uëVß<õy«ÒïÝwßeyU™WU]µœúõU]ØßÚµk³„„”ÔûK?ý›9“v ÂÿüOÆgpéRÚ@ÜúÓŸþä Œ»I@bQŸICÝäÈuª¤ªŠí ت¢ª*‹ÞsÏ=îo­yóæ¹e¶lÙb矾µhÑÂ^yåWýtݺu¶`Áßë>|Ø-£×R•^ý¦~øÀ𮿱cÇúúë½ ¿ª2¬ÑöÆŒc7vóFŒá{Ž^WÅ@š4ibÛ·o·+VXƒ ÜrS¦Lñ-ç…&›7onï¾û®Û·©S§Úyçg3fÌÈ´Á¶=š}ö_áL$ŽCO €SеtéÒvÑEÙ]wÝ•åqU+¸ì²Ëb2$¬jrÍ¿ƒÑ úé§yºîPÃÀå¥={ö¸* «W¯æÀ’öì¯îÞ €‚ ƒ*TȨ( qJ7êÓ²K—.uÕ4tÙªU«ì¹çž³]»v…ÝöÔÔT  ÜŸp!áh¶[Þÿ}+V¬˜k›éÓ§»°BÌbMAà>}ú¸õŒ7ÎUÞ·oŸï9:tpõéõ5d›.ÄŸPõA¿6騱£µjÕÊžyæ×)«uhþª€ ¡ÚV-ç¹÷Þ{]p;§ÅâØþý!áíÛi   L›–ñ9œ=›¶‡Jìwç7Üpƒ;øÔÇP¤H5*ü±‰0È1/$¬  Ÿªò­§sçήÚí† ²„„)t«eTYÀãu(Ž3Æ7ïÌ™3V­Z5+W®\¦ ýúõËö˜Ún ©¸?Z§BɪìMº ív‹ž¯ùï¼óNÐç)ø¼¶mÛºáÚ~úé'ß¼/¾øÂŠ-êªû·ÉwÜ‘éõ¾ùæ+^¼¸kÿç.\Ø^~ùeß<•õüÇsðÉfýúŒpbˆï3ù@7ý¤ÿýa#GÒâΔ)Sܹă>èÎË$>œ¤Ï=Ñ"$ Ä&zx@Žy!a¹ë®»ì /´ï¾ûÎ OvÁ¸ JáBº¸|ðàA›8qb–Pm¨Edƒ® ÂzvU©7 u¦ÊÃÆ ˲?z»ï¾Û†ê›Cµá¶[UzUX€CUì +𜒒býû÷ϲìu×]ç«xìµI°¡ßz÷îí†þUûËSO=e¥J•rõyæÏŸïž¿mÛ6^ Ù¤bÀí·›]½Ù©S´€¸¢›'u.ñ‡?üÆ’„úô¹OKK£1Qùþûïíøñã™ |$+]?PñM{÷îµ7ÞxÃ>úè#7"SAM*ø’!acþ!á•+Wº‹GsçεiÓ¦YåÊ•]H6XHøèÑ£Ö·o_ŒÕóëׯï–Ù¸q£o™P!áñãÇ»ù;wîÌ4òäÉ®š®Â¿ª¼«Ép´ìý÷ߟeôÚŸ~úiÐçD³Ý ðj^×®]C®;0$ì=gĈY–½å–[¬lÙ²aÛDÔÉ¨ÇæÌ™ã:a¯¸â 8p`¦e¦OŸî–Qg€$³xqFHøäIÚ(H ×鳸u+m ®hD—"EŠØßÿþwH 7©aß¾}4€ß‹é¿UeêÔ©ö裺‚:t°¦M›ºQ5ú¡~o21Åòĵ!’!acþ!aU×U˜õÖ[oµÔÔT{ä‘GÜü`!aUÆ­P¡‚»ƒ^^}õÕ¨+ ?öØcnþ7ß|“e{â4hwÞynÜpjÖ¬ií۷ϲ?áBÂÑl·ª«Š²:C ÿôÓOV¸pa»ï¾û²,Û¢E «S§NØ6²ÌnÛ¶­½ýöÛn¹÷Þ{/Ó2#GŽ ÙvÜÌ™ÁDëÐ!³bÅÌžž¶74RŒÎWêÕ«çnN:åú6mÚDc’ŠŠz,^¼Øüqw­C#øy!Kõû·iÓÆ…„~úé§mæÌ™6oÞ<"ö&ÝdC%a&* €XÁUbcþ!a¹÷Þ{]@VÕ|·oßîæ†„?ÿüs÷³*{¼°­–õxX OæOrµjÕ »]ê¤S8œ>}údY&\H8Úí––-[ºùêô föìÙîñ­~U6lè*ûûöÛoíâ‹/¶Þ½{gj“`!aQ€Zmã7Z£F²<~ÇwXíÚµ9pdDHˆ·ÜbÖ±£î°¢-Ä…E‹¹óª¢€ä¡Ï¾‚N€ÌT0ƒàg|Ozßôþé}Ô 1¡oðàÁîÆ8 ¡`°ª:Ô€wìØáÞw .ûxhS!a¯‚­WùVCÂêH«T©’5iÒĉW¬Xa 4pËL™2Å÷m .¨JšÎ1T) @rIII±eË–ÑN•eUxB}¾ê³õúa™cÒ(}:u² &ضmÛ\E} Q9>{ö¬»ëþßÿþ·o^`HXfÍšå·š¯Ê¶›7o¶-Z¸`íܹsÝ2^ vÒ¤IVªT)÷]œ« [U0.Y²¤[FÿªbîÁƒÃn»‚¹ªÜ;dÈLû*$ív{"VÛxŒ+V´ ø>|¸o›U™K^~ùe+[¶¬ï95jÔpÁkO¤°¨ºAñâÅÝÀþT½Xí¨ð1€$4j”YÕª´ öîÍ ?ÿ³'N}ì‡~pÏÕkø;pà€?~m &mÛ¶ÍUn×®­^½š’аaìC‡4€¤Ð¢E «Zµª#€¨°0€Ø£¿~‡>÷m f\vÙe.¸hÑ"Hbª$®ï*ŠHD£F²Ê•+SE@Â#$ €ÜѧYéÒfGŽÐ@,Yµ*#$Ì…} v5jdvë­f\œޤÿ=¯P`5ÒÿŒXEƒIìàÁƒîû`Û¶m4€„S±bE6l  á@îÐð£5j˜uè@[±dΜŒ0áC výö·7ÚìÙC[(pª¬PàwÞI0Hr§Nrß«5òÏ>l6l°O>ù$G•^,X`íÚµ³o¾ù&èÏÉèìÙ³® f̘‘ôÇ×Ê•+­H‘"îfHt„„{Ö¯Ï2}Þ<Úˆ3gf„„Ä®çŸÏøœNJ[(p}úôq¡À‡zÈ$·””[¶l |¡ëÿøG+S¦Œû]T¸pa߿ժU³O?ý4ê×Òëè¹ÿû¿ÿôç¼’_ë?~¼[ψ#¢~ÎÏ?ÿìžóè£&ý±Ö½{wKMMåC )p¥¹ëþû5^ŸÙÉ“´ &N4+Q‚vb™~g–/oöÐC´€wõÕW»ÑK/½Dc°ªU«ÚLÝxäU¹Õï ¡C‡Úž={\høèÑ£¶téRûíos!á;vØO€ÜCH¹O•8~áÚ(h˜¥¦Ò@¬{ç³"EÌ¶P`ÔE຀è¦þýûÓÈS ™¦¤¤Ø7ÞqÙ÷ßߊ+悞+V¬°E‹¹À©¥þ•a#…„ªSõü;ï¼Ó^}õU»í¶ÛÒÿ/’©®·.„§OŸî¯O?ý´½ûî».\Û§O÷šãÆst÷íÛ—e=ÙÝ^m¶£G¶-ZØùçŸoGõ-—––æ*þ9ÒýܪU+÷ú ûÓ6j~·nÝ\÷¥—^²êÕ«g {Mž<Ùn¹å÷¸¶­nݺ.ÈÛ>µ“Þ'mŸ*kžBgªM¢moo;vtûõÌ3ÏØçŸž«ÇšÚOÇÚœ9søà!îx¡RU^×ôÀ¸Ð½n`øâ‹/òu[ :<ª€´Ö¯ïgmK<¿Ÿ¡B«V­²AƒÙwß}ÕëíØ±Ã½f¸*éÙm·üzŸ£Ùvpn  o¨zi½z³˜¶ ’.èwîL;ñ iS3]?uжP n¸áwøÉ'Ÿ¤18ÓÏ%:s><¦ ¨~ÿ¨Bn$mÛ¶µJ•*ÙO?ýä›§p\Ñ¢E]E\O¤°^G•p= a)´úÈ#øæ) «ç¼£ú‚PV ºú¯';ÛÛ¼yóôÓŒó}5OëñhÈwÍó·ª4¬Ÿ_|ñÅLÛ¦®ªû‡À¾ŠTARaáÀ}òß¾1cÆøæ9sƪU«fåÊ•óUÖ&Ѷ··Ž;î¸#ÏŽµ… ºup3â‘*õÏ?üðÃnÞܹsóu[ 2$¼~ýz·nUJ׿+W®Œë÷3TH8»B}ÿžK»å×ûiÛÀ¹#$ €¼qð`FED†) V¯^Aa±ï‰'ÌRR4¦1m @üêW¿rgÿþ÷¿Óœ¸j¦@^úì³Ï¢ {‡ƒU·¾îºëìšk®ñý.$|öìYWe·uëÖ¾Šœš*W®ìªêŠ·Œ*þêÿÁD çd{Õž“'OfªÔ+ú<ªÊ®Ga[UnÒ¤I¦×¿ð ³¬7\ØK߃Úĉƒ£C {¯@¯æ>|8d›DÓÞþëÈ˯*ó†øí2Èž2eŠ›÷Úk¯eZV•½u#‚¾kÊ”)c=zô°Õýô³g϶F¹JäcÇŽµ«®ºÊ®¾újwóA µk׺piÉ’%­Y³f¶aÆ ß'Zoûöí­lÙ²îF…ž={Ú¡C‡‚®÷Ë/¿´Ç{ÌU9¯W¯ž-X°À=>uêTWÑ\ÕÊŸ{î¹,Û¢ßúþØ»w¯Û†Ûo¿=h{íܹÓ:uêäªæªÚ²^sÍš5Q?¾qãF·¯ªÖ¬ ðªÊîOßmª.ß´iS·L­ZµlÓ¦MQ?)$쵓~Dz=-[¥J÷zªF¯ç©ú}vÛ-;ïs´Ç×ñãÇmÈ!nût³È¨Q£|7–DÚöHïÿzô»C·ê÷¶;€ „„wTm¨OÚ(H©©„„xñ˜*d6mm ß)¤ ³µk׎Ûj\rßã?îB:@^Rðé‚ .píÃQ(T%\…MJó„ {¯£`ÓW\‘iêÚµk¦uy?)$|.Û+_ýu¦°ìR(kðàÁ¾é׿þµ›¿k×.·œYúÙ¿J¯ =zÔúöíëÂÌ Ê)$§eÌò*$¬mÓüÿ¹Ñ1X›DÓÞáÖ‘›*V¬èÂ@< Vp²xñâ¾ äžÉ“'»ïU_´h‘Õ­[×}¾ƒ}®ï¼óNÎ=z´ ÑŸþùî»Á£ªæ úwëÖÍ…4õš ö~Ÿ¼ÿþûn¹:ØŠ+Üzµ} mª’yàzRmÙ²¥Mš4É…“ÔUµr…_Ÿyæ»ù曳|Ÿ¤¥¥¹#FŽé~ÖMZ§‚Îþ¼mÑ÷ÚôéÓ]èT[íK4oݺÕý^RÛ¼úê«®:»ªŸûoËÒ¥K][)Ô¼jÕ*hö¾‡£yÚv‹ö}Îîñ¥¶Se~_ú›2ðæ—PÛÍ{࿞Ž;ºýÒ±ãÿ @S§:ïtçý±cÇb~[Ûµkç†,K$ª‚xu¢Q§m`'–-˨ˆè×  Ÿ]{­®ìÓ@†½T͸B… î†(ˆ•JªªùZg¨6‰¦½Ã­#·¬_¿Þ½þŽ;øÀ!.y¡Ò?ÿùÏ®2ë•W^i¥K—¶%K–D|®Âœ¡¾¯š7oî +(ªyú,{ô=£ªÀú,{ú ¼ ¢mÛ¶V©R%÷Ýçùâ‹/¬hÑ¢®êlàz{õêå«Ô>wî\7¯aƾk]ÿú׿|ûëÑõKÍó°ªz¬Ÿ_|ñÅLû«Pj°ï²h×¾¨ê­GUÛPõ¿ù¢_¿~aGDz<»!áH¯ìû7;ííûœÝãKÁo®×V«VÍÊ•+—©šp°mæ=ð_*ۀР@Ú³g;¡ÕɉîîÔ¿:aÕ°p°NBï$U'l:y ¤xôk™þóŸ1¹OºÛø©§žÊ´?“î g¯¿þº *ÖƒèHRéß6q"íuE;ñB5.»Ìlÿ~Ú@>ýd þðÃ=ÿœæÌ™÷ýfˆ³fÍr¿‡~ûÛ߆]NýíÕ ¿ýö[W²wïÞ¾yáBÂ¢ê• ®…ëOÕ2zÎG}ôq q®ÇUí0Ôzsº½âV?·*^j¸ø@ Z©*¯ªäzá.õç«Â°? #ïßÿ¯J‹½°†˜÷çmŸªûKMMuU?õI´í×!aí7•Ñϼë[%K–t7UèÿÿЈDaèïz2qâÄ,¡Xï3÷ÙgŸùægòäÉV¼xq÷ý¦jÉúnŒöñ솄#½^¨p4ííû|®Ç—èØÒü;w†Üöì¼yý»€DAHòˆ7K¨»+sC¸»Bs"THXÕuWò]wÝ•å9ª\ ágb1$¬ªºóÕ¿£1ÒIw¬¾7ÑPåjUcX½z5@Ä“ ;1d1P0TõkæLÚˆªS¤HFEaÈ'^XÀ«š”‚Dð§ô«]×~F9@>Ðõê¿õ*dz“BH ÖzTMQ3ïq…?0ó)$ìß5kÖô½ŽªsÞsÏ=™^G5 ¼eTÄ¿¿yøðáîyzlÑ¢EAד“íÿ°^·nÝÜ =¡(4¨ÐX÷îÝÝϪÙ£GâÕk4jÔÈõ‰öÿ«‚³7R`íÚµmóæÍ.È«ç)œ¸}“&M²R¥JùÞ…“¶I´í—A/õÐk/\¸â–HXô]¤Ÿ‡ –eY1ªP¡‚ ˆŠW%§!¢}<§!áP¯§ë‹Z~ëÖ­™¾ß£m·hßçì_¿÷tΩk¼þ‚m{´ï!a¢CHòÐ<àÂ%ØIÞûï¿oÅŠ³:¸_ÝU¯P¯‚¡^‡£wrÓ±cGkÕª•=óÌ3îLaÓ>}ú¸ÇÆçî²Tg½N twåwÞéNÊt7¨†. ¼sTC‚iݺ+T!b 'Z½zõ!áÅ‹»Çô¯GwÝ_rÉ%öÖ[oe kÈ !¤×Õ~Õ­[7K瀷oÚÆo¼ÑFíª(ž\ÊÒ¥K]G‡†0ÓËçž{Î7tP(:ÑT€6X'J¨“îh¶Ûÿ½SÛLŸ>Ý…€bV»†zoÎåýÖ:4?ðb­¶UËyî½÷^ÜŽÔ!ïT5YNjúWðX ‡ºÓÚ;ÕñlÈN½‡^X«Ò#½z©d¿€ü¦ï…„©2Ä—áÃÍRRtWm _xç°ªü)H ¹|Ø]©V­š ÕŠ®7èÚB“&Mlûöíîz”®Eé¹S¦L û¹ö*¿êZž ×(´Û¸qc7oĈ¾å–,Yâæ©^GÛ¦B9ºF¹{÷î°ëÖ5’Àª?U5÷¿–¢åTiWבtC¤®Ñ©‹B¯Ñ<¾eËwíIU_yåwƒ‚Øþ•äuMsæÌ™îºÔ{ï½ç éš]´{離¶«X‘ÿ¤`m`;Ez=µ·¶YˆT¥WÇAvÚ-Ú÷9»ÇWóæÍݵSÝð£k¼j÷À¢:Á¶=š÷ ~?_ @Òôýúõs''Å‹wOï.ViÛ¶­;‘ò¯4üÅ_¸;#UÍÖÿäæŽ à :F¯©j¼ +¦po˜NòTÉÖ{T <ÙóBª ¬ð©Nè=ºCY'l^âpAF…n·ÕÛ7o¨ ïäR NúWP;†ú'mw`ÇŸwÒ­P²ª{S¨!ƒm·èùCçDóÞäôýÖI±Ž!µƒÿs5|“†«ó(¨¬çë„:‘)ü­»›U¹YÇÌÇì:H¾úê«\y} ?§c%TuìˆÖ´råÊ,ÏS Ü{»úý ùફ®rç:Oêw Õw yÄsK}ÿºF2•ó+Ĺ`!añŠÌèzgÖ¬Y¾"$µk×¶Í›7»°¥𠥆ú\ ë:£FÝÔsõ˜FÃT!ž`×=t½J#iz×6THàHß'‘BÂ*xtå•W†lµ‰¥þ×õZºNèm‹®)ùL#=®°®*õzëé=÷Üã{Ü+Úã=¦ëzº¹*ÚÇý¯NÚŽÀvŠôz2|øpß2*T”vËÎûœãkÒ¤In¤Zý_ÝL&pÛ£yâý÷ù‰0äUô­\¹²;Iiß¾½:uÊ`u2Ô¿ÿ,Ë«ò°W×;¹ VÉ'0ˆªÊ£ªTÛºuk›?¾oÒºýï&• /¼0˺ƒ…½°Üu×]îy:QÔ›ªX¬´p!a]HÐIêĉ³„jC¸éÄ60誎¯Â®*õF¢}щí°aÂv¢hh¡C‡ú¦ÀPm¸íöÚY€CUì |orãýÖpL%J”pí/O=õ”;±ÖÐm½ßz¾†‚LT^˜=°S"7 yçT¸°îð¿è¢‹Üg+ŽQù&$¬cZa§… ù¥ä' ¬Ï^ˆ›aÄ(U×ݺÑòœú(t~¯s¿ÿýï4€,Ô¥Êu’—*@ª²¥ax¡>~õÍëšLtmÂ?P¬ëY Íçôs¬ÏP´£Ž8pÀ}gÄ‚Ï>û,lA˜Hk?´?ÁÚMóÔ¦*L¤Ç³+š×Ó5C-“ÓG£}Ÿ#_þ×€µ¬®·Ej‡PÛî=Ñ!$ ùD'AíÚµs'D ê+°j¯G^Ýix(0È车†˜¹âŠ+2M]»vÍt2¥å« G «bˆ7ôÍ´iÓ\øX'jÁBÂGµ¾}ûºÎ7=¿~ýún™7ú– µoºCYów ¯‚…„uŒi»öVµn.Òëù?üp¦Ï–öIǾ‚åjÝÕ­ ~ oßôY2dˆÛU×0_Ú‰R£†ÙàÁüBòÓúõ„„x¥›üÒÿ†áó ¯é<È«¥M F÷š0a  .©’i¯^½hÈGTø ¶€|¤¡Â… »j¸ 7êÿ÷Ýw_–å4$‹Â‰‘N¢ƒ¨ ùªúO—.]ÂnÇ7ß|ãž×- 2Y¤°ªë*pyë­·Zjjª/d,$¬Ê¸*T°½{÷ºŸUM9ÚJÂ=ö˜›¯í ¤ï AƒÜ5>ø`ØýÔ4 ‰ú‹Žf»½vÖ’Pß›Üx¿ÈV0»mÛ¶¾¡—Þ{ï½LËŒ92dÛ%’xÀí§Â²ÁÞË÷ßßU{îСƒ2JC)Ô« °wG¸×Öú<¶jÕÊžyæw׳‚¸}úôq7ν—ûöí³­[·º÷ýÎ;ïtÇÅm·Ý憩ó¯6üî»ïºõê³¥ñK/½dÕ«W^¼x±{\ÿz.\h—\r‰½õÖ[™>[ Ê+T®×Õ>Õ­[×ÙCu¾ho¼ñF=z´ë &,ß)´_¯¿ €ü4o^FH8-¶âÍĉŸß¿ý¶§t¾ së$ò¨4rN} y9¢äXHô‘÷  ¶€|ôõ×_»ê¶ ÙJÆ ³ü¾ýö[»øâ‹­wïÞO¢T-T)¼èiÙ²¥-ZÔŽ;v[Ê•+g¿ÖÆ~T5\HXî½÷^”T5ßíÛ·»y!a-È^ØVËž 9¤r­ZµÂn›6m\8=— Žv»½vÖü>ú(躃½7çú~‹Ôj{?U)6ÐwÜáª?%: IÔ¯_?×VúL)à«ð¶GAêJ•*eª4üÅ_¸Ï†*ñú·µÚ,P`ÈÛ{MUãõ|÷Ýw.$ì_‘[¡\U-öß…’ƒU‘ö>[ª ¬ªÁª(ìéܹ³«n,€ïOaáÀíôß·1cÆøæ)ä_­Z5÷Ù/°j f„¢’ @.ÐÀ…8íâÒ‡ZúfƒÑòÔ 7ÜàÎt®¤QM úêú÷ïOCˆ+ê­W¯žuêԉƀ|¦Ñ`uý·@G·>\-€<òÁøB~:Ú¿¿ÝsÏ=îÂÛû̬¥¢ »víbb*°I£ÌÍ™3Çúö훩ï’!aÈ#;vìð]hSXTÿ–*UÊž}öÙL˽üòËV¶lY_ðSÃ÷)ˆë‰>|¸«Bªe-Zäæ)\¨ ºÞkêq”ý)ŒØ£GtÕ2ªJ«àl¤J KnÚ´Éþýïûæ 2Κ5Ën5_•m7oÞì‚ËZßܹs3íÛ¤I“\Ûèÿ wŽ;6Ë~ª‚±·ŸúWaG…$ÃQR•{‡ ’iB…„£ÝnBÄj¯õ~û‡±ƒ½7çú~KÓ¦M]õ\…Iý©z±Ú±À DmÕ®];×n ÷*ô¬r¯(ЫöÔÖ!aï5N¿âŠ+2M]»vuËèŽh-ã_YX¢ ¯\¹Ò-£clÚ´i.|¬ÏZàgëèÑ£®s[Ÿ=WÇ·߸qc¦×µoª’­ù;wî,¸7¬^=³Áƒù%ä—Q£2>wâÓƒfTOÿûò‚w®S¢D‰#˜€n‚ר^@ N:t¨«Öêõw21Åʤ>}é`¤„œSµúÞ‹ºˆ/„„ )¤§J³ª,¬J¹¡8pÀ… sâ‡~p•ŠÕaãO¯§× 7”‹‚¦Á*©æ…#?ÿüsßÏÚ>m§·=þAF-«@æéÓ§C¾žž§ç‡[&*«¬Ú?·¶;ªdœ8q"[ï͹¼ßªnÜ»wïLóT™¸B… 6}úô¤ýœ.\Ø:vìh?ýô“ûÿ}÷Ý—e9¾½*ØÙ ë˜Puß.]º„ÜUŒÖsºuë–åxŠV ]áå[o½Õ áéCª‚¬÷yïÞ½îgURÎN%a¯‚¸¶µÀ ¦qJùåä—Çç3ijiÓ2BÂAn¢€Ü ZuŽ óU«VÑ ‚Ò¨X×j„À =èFv„õÝÄN%a¦Xª$¬‚ åÊ•³:¸þ×X© I4E²Ã+ ¬¸F(¡ú¶ÄB€“Û\¡,^¼8S5áxöæ›oº6[PMî/ùKÐ ÌÉB!iUWVÈV6lèªìúûöÛoíâ‹/ö¬ÃªÊ¬Ç¶nÝê›×²eK+Z´¨;v,äv¨Óù׿þu¦yk×®UËVY•Ç·oßîæù‡„\×ÿÕ™ëñBÂZ.Øg+0ˆ® ÿµjÕ*Ø7kÙ2³"EÌÒÒøòÀf:Ñ@¼:tȬT)³›n¢-ä‰~ýú¹s>¤\ õ9iÔ#@TtB}LªB¯±b1| xô÷MéÒ¥íé§ŸŽ¹m‹Ö \ƒ r£BFC£[ê5C4ñFŸTŸ´Â¿Ñȯp¤mO¤ïOᆠ&¦Øœ~üñG~q!a@ɯ°( šn¾ùf«Q£F–ªÆZ6Ÿ©*´†¹T0VÕ¹ÕÑ« Ú:–æÍ›ç–Y²d‰ûY•n >|ø°Z®H‘"¶{÷îˆÇŸ–WXWëQÛêbÇ–-[Üqaâĉ®êµ‚¨±$RH8»GÇó§Ñ.õØõ×_ïþ]¹reT¯™_!ápÛÔ—¯÷ã?n;w¶Úµk»cPûÈÄÄ»“‚Â$*B€£à¢*^šî¤O¦@p0êÌ­X±¢;aWhWÿ–*UÊž}öÙL˽üòËV¶lYßɽÂÕ âz"…Ô‡n%K–tËh^Qg¯â‚&=®€²GUzôèá¸z¼Q£F®“7šJÂgÏžµM›6Ù¿ÿýoß<ÿ°Ìš5Ë…5O‹›7ov¡e­OÃçîÛ¤I“\Ûèÿꄌ™jÓéï…M˜ÀÈ;âÝSOeÜ`³t)m ×]tÑEî|A7B@( .tßiŒ ”ôºwïîªJF¼QjÓ¦Mcj›"…„5Úú—U¬BÔ¬ŠÈÚý §ãÔŸì-[¥J_ =oùòå¾×ºûî»ÝgWUlµÌí·ßtOAbõ{7kÖÌ×?Ø·ýá‡ÚC=d×]w•)SÆõ‰Ž~èm¿®i¤Gmßå—_î {ø_ ·í7ntÛ¡ýUÁ Uà ¶Ž#Gޏ‚åË—÷µIAPøZ¡`U¯ÖÍ5z¯´]ºÙfÙ²e®ø•„™˜¨$ @A $ â’½ª€ Ê œ‡ràÀ×™?üðƒ«T¬Xz=½n¨€»:nÕ1™T½áóÏ?÷ý¬mÓ6úo‹ZË«ÃéÓ§cçÍëÓGW•8ˆüšj–ÇÕ^ä1]hUå¾aÃh ¹J£¬è¼A‘ÀPøó*P Mn^EiUÇâñ{LÇo´tóC¤p`‘‹¥K—º¢ú,êsøÜsÏùª^*´Û§O·ü¸qã\e^ï;[7x”(QÂ7rD«V­¬X±böÕW_eZŸF¤Óünݺ¹ëKÿŸ½{ª¾÷ýÿ—‹†‹\BÜ‚DE ”"n.BAA‹@ª  PA¹î•"T|¸i¥F@Á[6‚bi@NA¡lTTTĈ  ¨ÀAT”XÑ" |ÿùü¦k:™Ì$“0Iæò~=Ïz kÖ̬ùΚ53k>ëû{òI»ôÒKC†„çÌ™c½zõr˨ÁÆe—]f—_~yÈõר{]ºt±É“'»Fš7mÚ4ÿráÖ}ãÆvöÙgÛ­·ÞjÏ=÷œ»=‡Ý†½û¸á†Üãzä‘G ;// «ËºÖ¥k×®nÄÃýû÷óÂ@Ì $ `Šë’\áÔE¸Q#»Æ“”µV­Ì²²¨ÏÔ±O?¶¶nmvü8õ5üãÝ÷<*²ã€Ø§°–öœP¼vSgÌI“&Q Ä-uxmÑ¢…ý#Ç$K2dˆ5Ò1Õ0®Õò!Z™7o^=rrrÜßO<ñDåÂmذ¡k:áÑȆZvâĉE>……ƒïÛ[ÿ)S¦øç©ö—\r‰¥¥¥hzjÝ»uëæ:{4ŠŸBÂãÇ/t¬çPõQ‡u­CÏž=ÝIx@,"$ `b>$œ›ë6n @ÙKO7›:•:ñnð`_7aº¶ˆ"utÓ÷†»îºËu˜€p¼ØòåË)F’6l˜ëzœ“ÖÇt¢ƒöeÙÙÙ1±>% ?ýôÓþ®¹ê¾,\H¸S§N®Ë®Ga[un×®]åªW¯î^ëÕIأЯN"˜9s¦[îwÞ »þz5ÿÀa×]£ç©«ñµ×^kÏ<óŒÒ:Á-ø>ÊjT¿¢¨;µÖGç¥K—ò@L#$ Eùþ{3 ×ÄÄ” ÓG™½úªÙÎf{÷þ{¢ÛkÜ9zô¨:t¨@7†˜¢”tZ±‚' (kz­ÅÈ_ÎÀcùN°ùío©€¨©[·® U(Ôŵ¨3Á:”/áôü¯à8@=¬~ýú1q‚TICÂ2gΫV­šUªTÉî¹çwØ*$¼sçN7¯}ûö6jÔ(ÿtá…ºùÛõ»@>KÖß]z%\Hø‹/¾°Áƒ[JJŠ]pÁvùå—»åÖ­[WäúË´iÓÜümÛ¶…]w…~õwjjª5nܸÀtÓM7{eM¡`­Õ=x?0 @Qt€D?Æ311ù¦´43 iÖ¶­Y×®j#b¦„sçú:Û)T D¢E ³3¨P–È×¾{áBjÄ»ÍRRô‹6µnZ M+W®¤ Š¥n‰YYY" uèÐÁÚ¶më:†ñnË–-.ô>}úô _—Ò„„EÝ‘#GÚYgewß}·~¨°Â½êÜ»wïS÷îÝ „‚¿ýö[÷÷Í7ß\à¾Â…„Û´ic矾 !ËsÏ=q'áûî»ÏÍ×}†[wÝïÙgŸm}ûö-²†^¼x± gff²_@Ü $ E¡“0„Õ.Dc±ù& ›•“ã wêÀ B gdøºU*ŒV³¦Æ033FGÌÌ8“¡ôëgÖ³'uÊ’ö¿Ú/ë$ñM?‰ä²iÓ&÷~±|ùrŠ„1fÌ×·¢;À–6$ìéÚµ«5iÒÄÿ÷‚ Üòu’©ù‚¶êò;|øðB×ÕtêÊ«®ÊZNÒÒÒ\‡á@k×®-þôÓOÝÞ}÷]7¯S§Nöì³ÏÚáÃ‡í­·Þ²%K–ºò +T®í¦_¿~ìw €²µu«Ùìپᇙâ{ªSÇ×1Z]„ /ipxýzßíäåñÊŠºêu¦®ðâßÿù?¾×ôˆÔÀkݺµ?ðAÈ@$† æ‚ZHyyy®Ûj¶NúŒ7ªÂRœWA¼p¨IAØàìwÜaµjÕróôïÀ uCž0a‚™:ØO~ò“°÷¯ŽÀ á*ô*ß}÷õïßß…xu}}^T—ãàNÂ2þ|Öe:‘`Æ î=B×UèY¼õŸ5k–Õ®]Ûý_û…“C \÷eË–¹y L«[²W]~ûí·û¯Sž!a,£š9r„â!aPþ>ù„NÂñÜI87×LЧO÷uŒV`X]£ZÚµ+²m@SWgiecáB_ 0Ý¿T<ýøÛ°¡YÇŽÔÀ9žÿÙàœsÎqŠ'éN BãÆsA0$3f¸@Ÿºw‰HáXu† ÚÆ²Ó§OÛÞ½{íĉa—9vì˜[æÔ©S¥º½æÕm¹8'OžtAcîO÷«u”À¯–ݽ{w‘ë]Ôº«³ò¾}ûü·]Þ’®Y³¦[7 À™QQÝ„[µò33u4¹øë©³´ºL(99¾0€Äqãf))¾“v ”6mÚä :¼öÚk@D¦OŸn5¢I¤~ýú.$*…a322¬mÛ¶t‡-åÙå·,mٲŪT©BWuÄ5~1@ô¬Xa–žn¦׬)zÙž=2(KsçêW]ê$’ßüÆþÿÓŸ¨€R›6mš ltîÜÙ á ‘X¸p¡;¹ÉAïz¯Ø±cÅ@BÛµk—¥§§[= GY"„„üñG"ïÙ³§û?¯  ºÔExÀ_§C…Ù4ɬE ꔕ¬,_`@âPÇO…„‡ ¡J­wïÞ.°‘™™WÃk¨X«V­rûŽãM Oï­4bÔ)V³uÕáHFGCDŽ=j‡²Ó§OÇícÈÊÊr'È(LÄ3BÂ(cÆø‚L *†²t©ïò¼¼¨Þí<à~¸LKK ÙááÔ©SÖ A·Ì‹/¾Èó„Ä¥×^§NÔH$ å\x¡Ù%—øþ¥Ð¸qc÷Yø·¿ý-űM›6¹}A©Ä§c):¦’îx€VGጌ ÷@ÛAJJŠÍž=›b î@ÙÑJ ‡ê(¬!+uÙêÕQ½K/$¬IŽ‚­Î¿?ïrBÂHh£F™õéC€D3x°ïýS]… „¶nÝêÿ,¼xñb  bê<®}Gnn.ÅHpzŽõ\¯Žòñ Ö©‹p¿~ý¬J•*6f̺ '±#GŽX³fͬk×®!›P þ©‘H÷îÝmÞ¼y$BÂ([ê(\¥Š~e*8_XSRÌf̈êÝ)$\§N«Q£† :´ÐåÇ·† Fâ6Ì7H,Ó¦ùBÂS¦P %–í>kHmÂ_JJû¥ mÆŒaGg’N¤RWáš5kZff&'G$„{öìé>/ë™Ø=40ͽ/Oœ81æÖÍkâ±gÏž—ÿþ÷¿w—õÕWV‹“'OºëÜ{ï½lô )@ÙëÙÓ¬~}³¼¼‚ó;t04(ªw¥ƒ\pÝrË-V»vmûþûïý—?~ÜjÕªecÇŽ-þðÃíž{î±öíÛ[jjªõïßßÖ¬YSàv,X`­[·¶C‡ÙèÑ£í¢‹.²‹/¾Ø ¿yúôižcÄæënÜ8ê$šW_õdÓ·/µPbÆ sŸƒo¸á/JL©©S§RˆסC1b…@RSH~áÂ…Ö¶m[÷Ù©Q£F6hÐ ›9s¦­X±Â¶lÙb;wîÌÿzöª}ôÑG¶}ûv¦8žÞÿ}÷|/Y²Ä222܉›6mŠém´I“&nÛÔqp^cIq!a¬8räHûî»ï"º=†¢ÛÌ þmá jQ!áâÖ <@Ù;xÐîÓ§àüÌL³N¢zW^Hxùòåî@Ÿþõ¨ãQݺuíõ×_/ž3gŽõêÕËž|òI[¶l™]vÙevùå—¸]¯ÃAïÞ½­K—.6yòdwÐXóÔ­ˆ9mÛšeeQ Ñ?nÖºµÙÅkÜoê DtÒ›>¿þú׿æÇj%Ö¢E £Ñ‚°ôÞP¥J×I€Ï®]»\€T'[µjÕÊRRRÜç)¦Äœš6mê‚ñL'ûi]¯¼òJ÷ïªU«bjýŠ —ÔŸÿügw{»wïŽZ-Ê#$\Ôz”7BÂ(:@§áÑgÏþ÷¼¹sÍÒÓ£z7^HX„Õ5X…=}úôqþýöÛBÂÁ>€ç…„§ ï®®"—\r‰ë.A7aÄœF ¾Þ$Ž}ï©z€iTsÎ9Ç}¦ýÝï~GA”X×®]]'M$®œœ÷>qP'{ëðáÃtNÐNÂê넇nééénÔ>û—¿üe¡e¼Qñ´?×ñðóÎ;ÏÖ¯__äe‘Œ¶§À×^{­:uªÀü—_~ÙÚ´ic_|ñE±!aïþõ:ÝÖôéÓ]'û5j¸ vàºjD?Ý^óæÍÝõ^zé¥ÕBÖ®]ë‚Äú½àª«®òÿ>Žäñ®Q#·ÞëÖ­së¡ÇÛ²eK·/‰ôù( BÂ(?=z˜Õ©£#龿u°U!§(þøä…„eèСV½zu7t™:ž}öÙîÀ^¸°B¿û÷ïwCêòwÞyÇ™þꫯ \gàÀnþx~[ÒÒÌèþ$¦9s|ïŸwÞI-DLA¯CÚßþö7  ÄÔE³S”GBl1b„ È@²:räˆõìÙÓêׯ“'LhýjÖ¬i÷ß¿ûûšk®q'~ýõ×–óŽeßpà n™GyÄ>ýôÓ"/‹d´½§žzÊ]wõêÕæëzº-).$|œý…^°J•*ÙܹsÝíþáðwsVpW'(iù‡zÈuçUwï’ÔbóæÍnþÍ7ßì¸z|—^zi¡p$?pý‹q°¨õÞ¸q£ûâÖ[oµçž{ÎÝŽºø‡jXêù( BÂ(?]!áqã|kÈô*UÌV¬ˆÚ]†„5¼˜¦-Z´È²³³]Wu& «ÃÁàÁƒÝpº®þérÑï Ö?Íß¶mÏ/bìÛ^þ×½Ý.$ýX¦÷Ït† õýx­Ï­Íš5‹¹!‰ÄiÒ£<b‹ž_u,€d¦ð©BŸê ÿcŒ}çž7ožûLïN½ðO<ñDå¼cÙjp¬¨Ë…mïÛo¿µjÕªÙ!Cüó>ÿüs«\¹²=ýôÓîï’†„u[E ¢€mðz”¤ á6lØÐNž<韗——ç–8qb‰àú7â`¸õîÖ­›ë<ìQƒ…„Ç_âç'-í€IDAT R„„P¾&M2KI1Û»×÷wÛ¶fS§FíæCÂ:8W¯^=»ñÆ­sçÎþmÁ!a …vþùç»aÉDgðGÚIø¾ûîsóu€ˆêÖ­p à å¿wY3“Zˆˆ~ŒÖçÖÄôðÉb—¾ù‘“”ôkäa÷ü.]º”bHz[¶lq %fÏžS륎þ^Ç^QÀTÝtÛµkW`9ïXv¨nÈE]&E¶'·Ýv›»OÝ·<üðÃV»vm;vì˜û»¤!a…‹½®¹êÀ,\Ø6ÒZh¤A†HáàN‘>þHG µÞj`¢®Æ×^{­=óÌ3þI'騋q¤Ï@I@ùRxQ݄njñý­5={FíæCÂrÇw¸á»4d™îJ`HXÃt&^HXËy¼s‡*p 7mÚ”ç±E4öÂøÏ]wù^ç>J-DD­ôyväÈ‘v\#z@ ­X±ÂíGœAâY¼x±{~÷ò=œ¬¬,:•÷=5¸Ð~º}ûö6jÔ(ÿtá…ºùÛ5êп„ ²uY$£íÉ«¯¾êæ/\¸ÐuÍmܸ±ýêW¿ò_^Ò°Ì™3Çu(Ö1ü{î¹ÇŽ=ê¿,TØ6ÒZèX¾þìÒ+¡B‘>þHG µÞ ýj^jjª«[àtÓM7Eôü”!a”¿ÀnÂ99fiiQ.=8$üÆo¸jÍ›7÷Ï «3@ƒ \‡…ˆW®\i-[¶t—?þøãþëxæ:vìh›7ov*çÎkgu–Ú ˆ)¹¹¾ð`^µÕÿüïu>x0µP,u‡ÔÀú<«ŽXPêB®ýˆw.˸qã¬E‹þEÇ[µje}úô‰‰õQ U]q{÷î]`êÞ½{¡ liB‘Œ¶'ꆫη©Ä;öþÞ{ïù//MHXÒÕ :Þ~÷Ýwûç‡ ÛFZ þ§¿o¾ùæ÷*$éãtÄÁPë­ûUC“¾}ûù\ÑFHå/°›ð޾“:ŸFApHX-ׯ_oŸ|ò‰^`HXæÏŸï‚š׬Y3Û°aƒ®L$-Zä–ñÌÍš5Ë Ÿ¦ÿ««ÀÔ©Sy>{V­2«R…:‰L'¤¦š)È¡÷U(ÂêÕ«Ýç×*ùŸ^yå  TÔIQû’Uú¾„Ó¶m[0`…€:1FŸ¡³³³+t=.Õ1ïáǺÌëæ[¿~}·œ”4$éh{bÕõ·K—.Öºuë—•6$ìéÚµ«5iÒÄÿ÷‚ Üò7n,U-ÒÒÒ\‡á@k×®-.ÉãtÄÁàõö\}õÕVµjUûòË/Ã>ß„„@´@Åиš5}Á&uVGá ¤ƒ†:èQ¸XClêÀ¢˜Ó²êpâÄ žGÄ&½žÒÓ©è:uò@P@1&Mšä>˪Cäš5k(€RÓ¾¤¢ƒRˆ¾ãÇ[Íš5݈I€‚$Õ>R'ËT5»Ø5²lŠQÒp¤£íy>þøcw™¦9sæ¸Ì «ù†¾{N ÖßÿäÉ“-''Ç…fÕ‘855Õzõê忽¸@rff¦ëÒûüóÏ—¨^‡_u~ùå—mÊ”)vÅW¸y'N,ñãtÄÁàõþñ_#)¾ûî»n¾š”<ûì³nÔ—·ÞzË–,YRäsp&  bx݄Չ·_?³aÃbzu90‡¸¢v32¨èôuã¿ÿ~j H?ÿùÏÝgÙaùŸ¹õ£7”–†ÏÊÊ¢ F#0é}bÓ¦MBP—Ø:Ø‘#G*äþo¾ùfûÉO~ör5¿Pð´ŸŽ³[ÉCÂÉh{TjÕª¹k /$jR6øþï¸ã«U«–›§X(=aÂÿ2ºß’Ôâ»ï¾³þýû»Ç¡ë«ó±ºv.Éã/Ɉƒë½lÙ2ÿ|¦Õ-Ù«‹–¹ýöÛ‹}ŽJ‹0åLg ëlåD¶nÝ:ûúë¯y²Q<ý°X¿¾Ù£úþý×Ùô±ˆsˆ»×–:ŒHl=æ ÷íK-„¥îçœsŽ¿SÖ1ü™@ìÓà#FŒ  föìÙV¥JÞ# …VÓÒÒ\ð4‘÷•ŶHvo»í¶¨Ü¯n_÷SÔÈ}ÇŽsËhJCa惞ñã/鈃E­·:+ïÛ·/d}¢‰0 ÂžM\¹rekذ¡ :Ô>ÿüó_¶¯£ƒ1¡ÄèK¶w¦¯7”P,у믿Þ~øáB5œ4tU<{å•Wì§?ý© (’×MxÌ_È)77fWUÆé ì23Ízô @¢Û·ÏìÜsÍ.ºH¿XR!©+¤÷]sñâÅÀ4hõéÓ‡B$¿Õ%^nn®ûífÔ¨QIRÅk¯½æ¾_¨#n²¡™ˆG„„Æ Èj˜u«èÕ«—û»cÇŽþeV¯^m#GŽtÃ^GÓªU« ݦ–÷.ÅðŒ3좋.rg>ž¿þõ¯öÆoø§µk×Fõ~·nÝêî+//¯Üë/~ñ »å–[ØÐQ¼éÓÍŒÏÈ0 Þ À4ÈlØ0ê$ƒ«¯öh³d µÒ´iÓÜ÷ÎŒüÏÛÉø#>€è7nœæ‰EÏ©Bo€¢é¤;…333“:(¬f8ú~‘Œ 5 €xDHPa¼€¬7tºì6iÒÄ*Uªvh]§N:V£F ×u8ØðáÃ]GâX ««nõêÕmI@€Ã«Áž={Êô¾ÿüç?»ûѰGååã?¶ªU«ò#4Šwü¸/ |ùåfééf m œ¹®]Í&M¢@2˜<Ù?žZ©gÏžîû †FVWa8:>ÞGÀBa)))¶téR ÐþRï…úœ½?IGõQCšo¿ý6);#€xDHPa‚CÂÒ¦Mkݺµÿï ¸¿>ì¿Î\à:ÔÖ®]Û¾ÿþ{ÿ²Ç·ZµjÙØ±c …„?üðC»çž{¬}ûö–ššjýû÷/^õîK_îGí:þ^|ñÅ–••UèËþ©S§lúôé®Ë†ËM›6µõë×ùxÕ-YçP5Žd½=Û¶ms¥TŸsÏ=×.¿ür{óÍ7ÝãÒcÑý4oÞÜ=Æ—^zÉû×]wÕ«WÏ…«U×Ï>û¬PM<èÎŒ?ï¼óÜãTwçk¯½ÖÕ!ÐË/¿ìžÃ/¾øÂýݵk×an u¯\Ù7åæRàL5kfùo`ÔHú\§pþg3N´JãÆÝ÷AuˆÔ÷f8³¯ï«Ü>åÈ‘##Ah2=§»ví¢¡ÜÜ\KOO·´´4N²@Ì#$ ¨0!á~øÁ.\hUªT±ùóçû— ¶Ç /_¾ÜÍ׿ˆ©[·®½þúë…BÂsæÌ±^½zÙ“O>iË–-³Ë.»Ì…hy÷Õ»woëÒ¥‹Mž<Ù —¤yž5Ð /¼à:Ï;×V¯^møÃlûöíE>ÞÎ;»m¨„ G²ÞòþûïÛ9çœãjóÔSO¹°BÌ›7ovAàAƒ¹ûy衇\Waô÷®Ó£G[¹r¥»ý–-[º °Î¬É 7Ü`×\s=òÈ#îùÒ}h¾{ ­«–óÜqÇ.¸&NÔmYSåÊ•]àZáèÏ?ÿ¼ÈmYë b¨aÉT³ ÄdWì23nœ/$¬0ýرf6˜éu•èÓG™½úªÙßÿ΢§Q#³ìlê$þò?3äˆ3ûàê …øôEß+{ì1 àŒyÒ;vPŒ¡c²t‡€’Óï(­Cï‹jàÂɈU„„Æ I^yå•®ó­Â¤ÁÝxÃ…„ÕAXË«ó­§OŸ>®ÛíÛo¿]l°R¡[-³{÷îB÷5eÊÿ<…7/¹ää ì&ÜÆŒ㟂CµE­·:Ϊ#°:‡ëØVà9%%ņ VhÙöíÛû;{59xð`¡åôœ©Ëˆz}øá‡­víÚvìØ1ÿ2Ï<óŒ»þ¦M›’b[V—eïùnÒ¤‰{ÎOœ8ö:uêÔ±5j¸m9˜¶ u$Nšð–-fõë[þ Ù,5Õl„äë$üî»fS§šedøž“&1lr£S21•ǤÆK ¹T˜à`¥Â”]»vu¡I/xZTHX\¼î­:È’žžîB²¡BÂ_|ñ… <Øýˆ¡ë_~ùån™uëÖù— ž6mš›¿mÛ¶óçÌ™ãºé*ªÎ»G-òñjY Uƒ={ö„¼N$ë­¯æÝtÓMaï;8$ì]g¢%AÔ·^½zEÖDt K—iHB…Ž7nl¿úÕ¯ ,óÔSO¹et"™¶eQкuëÖþ¿,XàþV =p[V7l…«Ò?~ÜuÊ;vlmYtmk r§¦¦ZÿþýCþÐïÝסC‡lôèÑvÑEÙÅ_lYYY:bÇ Õ$ÿõk?û™/à”››Ü;GƒóŸ+Îß'F‰©½^K q$%K|ïW\Áû€4⎾SÜzë­.”Ñ‘‘a÷Þ{/…HAm!#Ñ@Ô¨é‹F Ô{¥>ë„=…†½>˜˜Ê{Jôßè@ñ *L¨`¥üýë_ÿêþ.*$¬- ³ÞxãÖ¹sg?~¼›*$¬ÀæùçŸïÎÒ–çž{.âNÂ÷ÝwŸ›ÿí·ßz ñŽ9ÒÎ:ë,»û|¼ê,{Ýu×…¬A¸p$ë­®µê¢Ü¨Q£°÷þᇬråÊvçwZVÝœ›7o^dMDl³»uëfo¼ñ†[î½÷Þ+°Ìý÷ß¶v‰º-«¶úaEýæÏŸvûò¶ååË—»ùú×£!;ÕYûõ×_/°-+˜®÷“O>iË–-³Ë.»Ìǃy÷Õ»woëÒ¥‹Mž<Ùý€§y ½Çœ=|!au¶nÖŒ£Gaé:uÌ "ð…’Y¿ÞVX@rÐ 7êD_£†ÙÚµÔ€_Ó¦MÝ÷uˆü‘Ï”¢D'uJDüËËËsïœHåñÕý0„™è$ *!a@… ~úé§Ý¼G}Ôý]THXî¸ãU7_ï`vpHX·Žô¶ZÖãÝ—º¯RY?¬E.Ê Aƒ -STH8Òõ–«¯¾ÚÍ×¥PÔYV—oܸÑ?¯U«V…¦ÿüç?íÜsϵÛn»-dýƒ)@­Ú+ˆØ5×3pà@w–|²lËW^y¥«Ÿº¯WH/@¸mYg´¼: {ôc[fffÈÀ{ ……ÃßÁ÷5eÊÿ<.¹ä×&¦º Ïëë|¸i“Z×hø Ðöj[:t¨U¯^ݾûî;×M@ÛÉš5k†„õüíß¿ßfΜY¨³tQÏ›BÛš¯ç:&äåù:åŽ÷ïΧÿÚö ÿyvµQ`ˆ„¾\t¢Þ/ò?W€x#õè;Þ+¯¼BADÍôéÓÝIȈ:¶ÔŒQHh„„Æ Vz“‚¶?ÿùÏíµ×^ó/S\HøÔ©S®cë'Ÿ|âŸ*X9þ|¸Õ|øÞ°aƒ q*X»hÑ¢÷5kÖ,«]»¶ûJJŠM ÑÙTŒÕýUËè_…/Ú,Š‚êÜ;zôèB5Žt½= «6^=ëׯoK–,ñ_>aÂÿ:/[¶ÌÍSçæzõêù¯“‘‘á‚×áêJ‡¬Zµj.ÜHÝ‹Uǘ ¤–öìuÅ>qâ„ë.]£F ü-n[ö~¼×sšmééénÛÞ–¿øâ 7Ð Ä‘“'OÚ§Ÿ~êÿ[ábu~ ·’µüîÝ»íĉ¿òúñPƒ×¬)8_]OGâÉÄþý¾Ò­ EiÔˆmHVêØŸžî{¯X¾œzIlÈ!î;AÛ¶mó?~¯¡ ¢nĈÖ³gO ÇtB‰F‰0@‚ îZ\áXRX¥œœÂ—«³ðÂ…|˜bÄ)u›£QŸ@B#$ (½ï¿7Û¾‰©l¦>2{õU³;Íöîý÷ÄÜÅ:zô¨:tÈNŸ>]±+¢¢º ©SðêÕ¡—Qa™x^KF„33© Ó~R¯©M›¨¬Þ|Ó·hÜØw²€¤£ÎÁ îizòÉ')€2qðàA·ŸÙÄw¸U§N×$6B€ÒSS&¦Šš>mÔH­O̺v56ÌìÞ{5æ¥/”ª°ÊŸº÷ëç{ŽÔExÿþðËŽg–‘AÍJjöl³”3:6!˜×iZ…$'xÓ´©o_ð·¿Q =ôÐC.¸—’ÿyñµ×^£ ÊLýúõ-;;›BÄ¡ýû÷»÷ŠŒB@Â#$ (=: 3UD'aàÖ¬ñMK—šåä˜Í˜á +$¬°°B§UªøÂ15kšuêd¦á/.:°ŠÒS§B=={ú«-Zøþ.®C°žŠQ2 €jW'f ösÿ_ó€¤wÛm¾}Áý÷S uéÒÅ¿4Œü}o€2Ò¹sg5j…ˆC«V­rï»t¢7Hhüz “©;v˜-_îëV«ð°à Ì(Dœ™i¦n7ê8¬P²É &Ð.>´½e‹~Mò´¾VmXU}õÿ’t¡Ñu¦Ne{- ÕzÀꀂtÒDz:u’Ýÿ·ï3Ï7R wÞy.ø5lØ0Ûºu+PfÆŒ“ÿÕ´+…ˆC3gÎtç,îän÷ €ä¢ÉgÏöu¯ ì8ÌTòIõSç`…°Õ5øøñ’=êV£ÛahËÒ™;ײ.iÝ‘ØôzlÖŒ:ÉnãFßgœÆ}Ýþ$ oøxM'N$ü LåääXýúõcrÝN:eÝ»w·yóæñD… Ð-4 à´/عs§½óÎ;öå—_Æüº&â~‹ý1Pñ |ò „KÒI8Za#‹Þ¿Ÿm°4Ô)[õciRwéΩ³&M|ïûµ’ȲeËü!á¿üå/@™Ú²e‹Ûßì/‡ïõÓ¦M󟉓'Oºåï½÷^ž¨:çoì§èöñÇ[«V­Ü¾ R¥Jîß:uêÄlX8Ô~ëpóÒÒÒBžü¥nƒ Ü2/¾øb¹¬'ûc þ@Ř4É,-:œ‰ôt³©S©þMáAƒ¨³Ûnó…„￟ZIdäÈ‘.„¡!äwïÞMA”©#GޏýÍŠr!¨I“&nÿvÁ¸ÀYqÊ+”¶uëVâË‹³Ñ222l’ŽË ¬M›6®Ûù›o¾é¶ÿ÷ÿþ_›:œ‰¥KͪTÑ/Ô>õëÓ]€Ï‡úÞ#7æ}H"çwž G 6Ìuø€²¦ýMŸ>}Êô>‚KOO·;wº}Ü/ùËBˬ]»Ö…ÖjÕªeW]u•½ýöÛ!CiæFºçž{¬}ûö–ššjýû÷·5kÖXfÁ‚Öºuk;tè=Ú.ºè"»øâ‹-++ËNŸ>]`9]¦ûiÞ¼¹»ÎK/½ä.[·n[ûZ¶li¯¾új¡uöîçàÁƒ–™™éöáëׯwAÓéÓ§[‡Üõ›6mêæGËþýûÝ:«ëf,ñ:¦¦¥¥¹®¯ÁT— ”[rÚ´iî¾&NœñuÊ+ ‰âýðÃî5®×¡þþkÓ‡vÝu×Y½zõ\Øö–[n±Ï>û¬Ø×陾þ#Ýoéu¡Ž½Z¯ÚµkÛ÷ßï¿ìøñãîºcÇŽ-ôºˆæ¾.™÷Ç@¢ $ €òwø°/¸”›K-ÎÄ®]¾.‘ î^þöMø4mêÛ/üíoÔH^èKÓ#ù¤]zé¥!CisæÌ±^½z¹e–-[f—]v™]~ùå–ùýïï®Û»woס}òäÉ–‘‘áæ)8êQÀmРAnþC=äºXîÊÿž¾qãF;ûì³íÖ[oµçž{ÎÝN•*U u·ôîç†npKûîO?ýÔ^xá«T©’Í;×V¯^møÃlûöíQ«éŠ+,%%%d·"y!ápÝIU ïòò 7iÒÄÝ—š ÿF¢ sªSljjªõïßßÖ¬YSàv,X`­[·¶C‡ÙèÑ£í¢‹.r¡Á¬¬¬B!HÉzÎvîÜéîï—¿üeÈåÖ®]ë‚ÄZ·«®ºÊÖ Üî"YÇH×SËh¾î£yóænù—^zÉëÖ­së¡ µ:⪓k¨ûÐ6§p©:æ®_¿>á÷Qê «çSu»îºëÜö¤šê3Sð¾Cô\µiÓ¦È×陾þ#Ýoy¯ Qx^×Ó~ððáîC®¶¥¢BÂÑÚ×%ëþH„„PþzöôM8s99¾ØñãÔ"Ù©³Û€@ •T©bV«–Æ}¥@‚SG5…Ú¶mk{÷î¥ ÊB§ýúõ‹úízMöFåŸ.¼ðB7ûöí.P©ÿw… Jûâ‹/lðàÁ.¨à†¶×r WzÂ…Ò4´½æoÛ¶Í?/8”¦€™þV´qãÆ¦›nº©Àí…»™3gŽë|Z©R%0=zôhÔêª.ÂÓ§O¹íÈ C._¾ÜÕEÿz–.]juëÖµ×_½@RuRØOHÕQÿ²Ë.sÏi¨:«Ãi—.]lòäÉ–‘‘áæé9 väÈ|¼ÿþûÝß E*høõ×_XnsþçkÍ¿ùæ›]Wëp饗Úî"YÇH×Sc¼5rÛŸ×ÕuãÆ.4zë­·ºP¬nGSCueU]Ku?ýôÓ¤ØOéuÖ½{w÷øU7ﵪ»­ž¯zõêû:-íë¿$û­À°:ZëòE‹Yvv¶ »**$í}]2ï€D@Hå¯~}oI¢ACCt¡A’ѼuêP5nì{Ÿxì1j$0š*W®ì êÞ¦¿ ¼¨‹püï"?FyäÊÔ•RaÇÀÉ ú)ˆöí·ßºÿ+¨(\(MÝAÏ?ÿ|x…)#í\yß}÷¹ùºOOp(M÷« fß¾}‹}|Å…Ò 9r¤uÖYv÷ÝwGíýBÁÑÕ«WÇÜvä…!ÕAXyÕQØÓ§O×ù¶¨Ž©¢ nàóXç)S¦øçi[ÕÉ5iii…º Ï›7Ï-ï…osrrÜßOh”ŽÚ6lèžsO^^^ØàiQëX’õ Þæ<ݺus‡=êòªç:0°é݇º°&#½ÖôyI!é~øÁýÿÎ;ï,´œ:æªSsq¯ÓÒ¾þK²ß k{PxùÆo´Î;ûŸÛP¯‹hïë’} Ä;BÂ(_yy¾°R gXnÒÒÌfΤÉnÔ(µ„¢ Ò¢zßÍ̤@Û´i“ 6hRW@(O^·ÆõQüž¯p—‚qÇ/t™Â’êY¿~}·œ”êfhíÚµ…Biê˜Ü=Ö ¥)dçñÂbêŠH¡¼¦M›˜·`Á·¬º¸z®¾új«Zµª}ùå—E>ÆHCi]»vµ&MšD¥®¹¹¹î>õœÅšÀ0äСC] QA×Ç» ßš5k†„žÜ¿¿Íœ93â¡‚²šàÀóU—]ÖA…ÛµkW`9­ŸNÌ ÞnC…!‹[Ç’¬g¨°ºÉª«ñµ×^kÏ<óŒR§YuÅ ¾X|þËÃ7ß|ã:t+d+­Zµ*ÔÕùŸÿü§{î¹vÛm·û:=“פû­À×…ÜqÇîõ .ã[¶lqó‚_ÑÞ×±?â!a”¯Å‹}a%º›E†uíÓ‡:$;m=zP=ø ï}·C%¨ ¼!—5ýÏÿüPîš5k2YZ »‡ÅM:ÕŠó:Jª«åË/¿ì:±^qÅ…:º*¤Ù AöT¸nåʕֲeK·Üã?î_Î ‹uìØÑ6oÞlGuÝ’ÕÑW]f)¸©°žºÜª£¥îãÝwßuó6}öÙg]Èõ­·Þ²%K–¸n¸PÚäÉ“]÷Z…ÚÞ{ï=KMM-ô<³g϶FÅä6†\µj•«Í¢E‹,;;Û…]„ CªÛòàÁƒ-%%Å]WO]¾nݺbëì½wnÛ¶Í?OM5¯}ûö6jÔ(ÿ¤Ð£æoß¾Ý-§À¢×=5P¨p$ëX’õ ö‚úÚVØ œnºé¦bï#}ðÁþîÓz ïÝ»×n¿ýv÷øëØd¾çŸÞý••åÄz=«ƒµ:0ïØ±£ØšÉë?ÒýVpHø7ÞpËxŽ%øuí}]2ï€DAHåkÜ8µ{ Ñ”•e–‘A’]Û¶t P˜~(®RŬV-³Í›© úõëç‚ ~½öÚk@|Õg-¢8²‰†«ÿÉO~öru¡TðKû?uzíß¿¿ i_غukÛ³gOÈŽ®óçÏwÁ4]¦`ó† \xL×U U¼°Ø¬Y³¬víÚîÿ x*Ê„ ò?jÕrË-[¶ÌÍS×[uÿõNàÐå ( JS§Pïöô¯:ɪm4 0ÀÕ,†!î«W¯žëøªŽ¡^78 Ù¦M;ÿüó]¸W¼N¤‘töÂŒ z´½¨C°ŽS÷îÝ „‚uý­í4P¨p$ëX’õ Öýª»l_"R„d BnݺÕu·ÕãÕ¾Bÿêõüè£Xîé§ŸvÛš÷ZÍÈÈpAÜHkVÚפû­à°ÂòêÚþÉ'Ÿøç…ê°Í}]2ï€DAHåKNG¢Ñ´f¯Kd^µHfê5iuP:÷7nì{ŸøË_¨ ¼®„ qh(y(oÚ÷h?äu߬꩎ªÅQ R¡6Bwê2zúôi÷w`XLË*Œyâĉ"oóرcî6t[Ôqvß¾}þÛŽ”–×íw¿%¥Ž¼3f̈Ém(8 ©°´‚¯ ªÓ¨†!õêÿê´ëñ¸O½çSÏE …›6mZ`»Ðý><äó¡®¼ j9IKKs†­]»¶@2Òu,Éz.X°À-·qãÆË]}õÕVµjU×:œd Bê±jÿ¤ÎÂêBŽ^§ÁµÔ™¼þ#Ýo•FYìë’q $BÂ(? *©›áÒ¥Ô"šöÕUaa$¯š5Ͳ³©€Âz÷ö…„ýkj$ ãÇ[åÊ•]€b̘1–ljc*ˆ”“àÄÅD RîÚµË=®M›6Åäú‡„ÕÍUëÛ¼ysÿ¼À°º « i»ví\ˆxåʕֲeKwùã?^èùìØ±£mÞ¼ÙEçÎ뺕Λ7Ï¿œn3TxףΥÝZ½¿ê4üòË/Û”)SìŠ+®pó&Nœè–‰tK²žpÁéÌÌL×]X÷!ï¾û®›¯N¬Ï>û¬ i¾õÖ[¶dÉ’„ß¶‘¸û:¶Y :  ü¬_ï )•Q‡Œ¤Ö¬™ÙÌ™Ô!Y)(®×ÖêÕÔ@a÷ßïÛGtõŒÂ^ÞðÉ  ¼éD…F¹“âY¢†Ò²³³­N:þPi¬  « èúõëí“O>ñÏ Ëüùó]Wóš5kf6lp!Yk-ZTàùœ5k–Õ®]Ûý?%%Å…~©ÿO~ò“°ë§n§ áöë×ÏýýÝwßYÿþýÝ}é6[·nm{öì)ÐI8Òu,ÉzÊ„ ¬V­Zn™eË–ùç¯Y³Æš4iâÿ\ en¿ýö„ß¶‘¸û:¶Y :  üdeù¬ˆ¾AƒÌúô¡ÉJC¯*XCûˆa ¨ãüü‡Ù¶mÔH0¿ûÝïüa À ”7uª­’ÿ™#'''®‡:¸jXúD’^áÖ> xÜàäÉ“.ÀëQ¸xïÞ½þç/0d¨ewïÞm'NœˆÚý«cïÁbN†/nK³žÇŽs·¡Û ¦íwß¾} · #ùöu‰º?Ê!a”u0Ì̤eaút³Œ ê¬V¬ð…„ã¼c€2¢nã—^êÛOüå/ÔH07Ýt“ ¥§§»‚P‘BÍÈÿnzœï&1öqð°ë"ê$ˆeË–ù¿?øàƒ@ÌÈÉɱsÎ9'äñ<¦Š›222,33Ó.\hG4âPNvìØáN ˜1c†û½¨gÏžÖ¹sg·MÖ¯_Ÿ×'SÂL ±†0À¶nÝê‚•ÝEF?R <Øu´Ñä×^{ºä{饗lÖ¬Y®³²»¯¿þº ô^zé¥!C½%ª]µjU¡ËÖö.µ°^tÑEvìØ±Bç¯ý«½ñÆþiíÚµq½müâ¿°[n¹…’C‹¾ 0ÊŽ‚¢cÆP‡d}}ñÜ(ŠFt¹à_Pxñbê$ˆÿý¿ÿ·ÿ»ý’%K(€˜òÕW_Ñ4: ßu×]V¹reÚþÍo~ã‚™j\¡æ ƒ ²+VFÔéXûôéÓ­k×®n[ó~´hÑÂúôéã~/ÊÊʲììlZ_³f›¶lÙB'a&: QFHH ˜.ñ#ïŸÿügwàe÷îÝ1±ž/¿ür‘!á]»vÙÆ˼6±V—@£Gvë¦hgZ…]5Œ\5lèС….>|¸5lØ0æBÂêª[½zõB?nz!á={ö”Ù}WĶññÇ[ÕªUÝP ¡<è %±­—-…°;w¦ÉF'©³þÌ™Ô@Ñt2‰Þï¾›Z B#y£éø¡Ü~ûívöÙgÛ°aÃÜßj\¡pfüχUªTq“ÂÓ&Mr¡áýû÷S4”˜‚½÷Þ{¯5jÔÈ}>Q‡`ms ë7h4G”!a Î=÷ÜsîÌkýhÁ‚®«Ä4oÞÜZ·nm7Üpƒ]{íµ.8HáÝ6mÚØ_|á®§e:䫺‹/¾ØÑ}úôéB÷¿nÝ:»êª«\µeË–î¬îpŠ ««Fê,òÀl4kª.êè;räȨ֦$u 4uêÔB!ÕÒÖE¡Ú .¸Àu©­]»v³—?nµjÕ²±cÇ øá‡vÏ=÷Xûöí-55Õú÷ï_(¼Z’:¨žêСCW‹¦M›Úúõë‹\ïÙ³g»ps¨ÇSTH8’u—mÛ¶¹¡ÌT›sÏ=×.¿ür{óÍ7ÃnÞm_wÝuV¯^=¬VM?ûì³u9xð ²ï¼óγ›o¾¹ØíJÔM!TÑóûßÿÞ=·ê`S·­ûK(99¾£º¢lëbŠ·w¯/ô·z5µP4L¢ýEÇŽÔHún¯®úî¡—‚9„¢c²z¿PGáà°ºk$º1cÆXÛ¶mݱhï”V­ZÙ€Üet}eò&=Çz®õmú  S§NnÛIOOwAáM›6ñ€AHˆS:ó³ŸýÌ Ï¤³û¿ùæ›—+Ô¨¡Ât0rR§M›æþ^ éÕ«—]sÍ5îÿ^°­wïÞÖ¥K›@8zP# 3WØ·(: Eá_Чc§jˆ c£ ªC¬ÂÃÞû“&ý> Ï"êBÍçˆ=„„8£µ Q¦¤¤¸®©êæŽBŽ]i¿ýö[«V­š 2Ä¿ÌçŸî‚§O?ý´ûÛ 5N™2Å¿Œê\rÉ%îà_`§Ønݺ¹²…á†?~|Èõ‰$$ìùàƒ\·WÝž†B‹dx³Hk\—hצ¤uñ(˜ªÛöÙg£R/$¬  *dìQWbÜ}ûí· „„ƒ)p\«’l#ª§—„Ö¹ŸÂ„!îWÁdÕÀ›ÂuJ µîº®æ½óÎ;oz>4h`?üðCm£jÕªn; ®ËÀK´]‰¶ëºHêý›BÒúñ!ž„Úf*ŠBí:I!&éÇuuW—[”-ujΰÜ\j‘LôÚRèâGÁàúõ}ûŒ^ @œ{üñÇýáœ'žx‚‚Фc©AMÇk£äÔ‰ótNÞNÂzÎ @ì#$ Ä u3½þúë]0ñÎ;ï´Ï>û¬Øë„ ¯ÝvÛm®[€×Ýòá‡vŽ;æþö‚Ž_}õUÛRð10Ĩ0Ÿº«^{íµöÌ3Ïø' %¥.©¡”$$ìQ˜S÷¡ûÒf_~ùå×&\¨/µ)M]dÁ‚.8ªŽ»Ñª‹–¡C‡ZõêÕÝc;|ø°ët¬aÀÂ…„u`Oä™3g ÕFºˆ‚°^w]uê-ÎÉ“']çáq9ÄãÑm >Ü=fo Ö†[wï¹Qàp{ƒ· ž:6lX¡eÛ·o_ ã±W—ƒAÙŠÛ®DÛˆ®›ÌC°©ëv‹-\Ð<øµÑºukú=z´ë´­¾:žÒ—Õs ¼žk ¥x™¶ÿÀ¿ÿñØ}÷Ýg—^z©»ÿ%K–¸ËõZT'juÁPìàûÐíèÿZ=wúEóÕ:x9uÑøå/Yè1«+µº‡{Û†Nt¸êª«¬F®[µ´Òv«@y‡Ü2M›6õ?>Ù°aƒ;@'¨ÃqLQ'ó:uÔŠ†7ôò¿ÝZ„ï'Hùï‡ù;1ê 2?ÿ¹/$ü›ßP Îéd`/$üæ›oR@‘¦Nê=è}#ð˜Hl„„8 0¡ºÆ*ü¥pX$aK †UèLó.\èv7¶_ýêWþËÃ@§M›ææoÛ¶Íý­žþNMMu·8ÝtÓM!×§4!a­£‚t ûÕ«WÏuÉ9ÓÚ„ G£6¥©‹‚´ ë~£U ¯ZµÊ­×¢E‹,;;Û…–8  ñÅ6xð`ŒÕu’Ôå /–tñÌ™3ÇuÓUøWw=ZäcÓ²#FŒùxtû{öì y½âÖÝ{nÂ=¡¶ ï:'N,´¬Bߪ}qu)n»’§žzÊ-£. ÉFõQPVAêI“&Ù7ß|Sàr¯®½{÷v 'Ožì‚»š§m.Ô² ¥_sÍ5öÈ#اŸ~òùñþVx÷ꫯ¶Y³fÙþçÚ¹çžëºd+€«ëë„Àm"ðv´¿4hû[Àµý¨›oðrzÍéÿê¬HA=.Q`…÷o½õV˜Ö|í×÷S/¼ð‚{)À¼zõj^Þf>þøcÐ>E·å­O…ëÑÃ,DØeXïÌLêLzöÔ0Ô@dFò…„¯ºŠä@œÓÉ…ú®Q§N˜ÝÛtÓÚ„ G£6%­‹Â¹Zç’ i]CÂꮫ@ë7Þh;w¶ñãÇ»ùÁ!auÆ=ÿüóýõSX1ÒNÂÁÛH xGŽigu–Ý}÷ÝE>¾&MšØu×]òñ.nݽçFÃéEºmüðÃ.l©ÕÁ:uêäºÇW—â¶+¹ÿþûÃÖ.Q)¼­mQ¡n…ÇÕ)8¯® îz´=«ë‰ºvö–UWëp·ÖþÂë,­½æµjÕʾþúk7ïÿý¿ÿçæý÷ÿwÈÛ ·? \NÝ„ÕÅú·¿ý­ÿr Á¨×ƒ¶SÑö¡ÉuÖ¾Á{­Ê!CŠÜ~}ðÁnI݆N¤Pwí säˆå?ѾnÂ(÷Þkù/0êLÔE˜xDê/ñ…„ó¿OØæÍÔˆSú^¤ï¸úÞѵkW÷€¢è•ŽiÔ¹H1€øGHˆCêÔªn¨: ÷_ÿõ_¶oß¾Ëi¸{ýX¤•æT7Juålݺu˼`[p`Oa>uÖ ¤î›U«Vµ/¿ü2¢õŽ4$¼víZÀ¬^½ºëàúü#ªµ W—hÕ&Òº(<¨ŽÃ^'Ñâ”´.!a¹ãŽ;܈z|[¶lqóCÂê¸ÜÕ Új¹Òl#ÁôÃ¥BÀEQgÖPËŽtÝõÜhÞG}ñkFQu%ôÏþÓuœU0=¸.Á!áâ¶+Q¨µY³fI±ÿzÿý÷]w^½F¾þì³ÏŠ\>\]U3Í?pà@¡eÕº¸Û µ{!n/4ï=×!åÒ„„åæ›o¶K/½ÔyVV–ýÇü‡ûa_!e…ˆÕYø™gžñO —«cµG]ǽNÉ‘v”WH^·«ÛW‡˜H÷×Q•m––fvü8oàåYóüíIDAüÙ³©€Èh¤ºu}Aa½gˆK[·nuß4i´šã|ÞD ~ýúî¤t½xLj@b#$ ı͛7Û/~ñ ü=zt¡ËžS0133Óu(ýñ_CÉj8z9s渎lëØ±£»ý£Gº¡íÕñrÞ¼y–}÷ÝwÝí+¸úì³ÏºNo½õ–-Y²¤Àr *”©ÛÑm+T§¿?ÿüóËéïîÝ»»0Û¯ýk×}¶,j®.ѪM¤uQ÷TÝž:ìþå/)0åååq]‚CÂ^2°ûm`HXuhРµk×Î ^¹r¥èÒǼTÛÈäÉ“-''ÇÕ=W¡èÀÐc(/½ô’{Þ¾ùæ›B'\H8Òu×ãÕz*ø›››ë:PkÀ·m<ÿüóîvêÔ:i™[n¹ÅÑwìØQ¨.¡BÂEmWê„{Ùe—¹Z%ºcÇŽ¹®¶ª]‡" º†««ᚯ"yÂ…„—õ^#Ú~<Ñ /_¾ÜßÙZϹºµŒ;Ö]¦P³.Óë£qãÆ&ôHÛOµjÕÜvª}ˆ^EÑ}-[¶ÌÎ;ï<×M<ðõPn€Wg[”Ÿ5k|Á¯€÷$0¡ç[Ï;Dêšk|ûŽQ£¨§4"‘÷=sæÌ™‘-Z؈#ÜÉé3fÌ  $BÂ@PðQZC™0a‚ÕªUËýh¤ ˜G=Í` äÛfÍšeµk×vÿOII±©S§†¼ý5kÖ¸®¯ÞSº/…é £wyà4*èé7ß|Ó]W]a˺6áê­ÚDR—~ýú…¬Kp'ÛÒÖ%8$¬n¥ëׯ·O>ù¤@};§ÎŸ?ß…m5Om7lØàÂÎ Ö.Z´¨ÄuP÷b¯ÎúWÝ_÷ïß_äz+˜«Î½Ááî¢B‘®»(ªºxµV÷ŒÀw¨mC\°ô®“‘‘ᥡ¶PÕ¢¶+u/V;â&:…³Õ…YaáØÎ;Ã.®®êάù sGòTtHøÄ‰V·n]wRÀ믿^ à|òäIŒïÛ·oDõÓ‰ºmÛwß}wØåV­ZeW\q…Ûž|ðÁµ*7 -æ?ÏÆÐÇåKûY¿ò÷ùHzžõ|ó:PùŸÓݾ£GjÄ)Âã}G}å•W( ":§c¦=ò?6Œ‚ I@Ý;÷îÝëB¢uYUH/X`°MÁ5ßn+ΡC‡lß¾}®ke<×%Úµ‰Çºè±’UÕÉ{ %­ƒ®§ëG²yÔ¡X“?øàƒ¨®{ ¿ÿýï:6G²mè¹ÔsZ¡¶+u&>ÿüóí©§žJÊ}“B²ê”«°ðý×¹ú†{Ý×½sçÎÖ´iÓ°¯Ñ¢^¿á–-MHX!ïà`¸ÛWh^asu¢þÙÏ~V`ù«¯¾ÚªV­êºnGJ'@èd„`ꌭ{ªW¯n'N´üã÷$wè _Ÿx#®iif99Ô!dg›¥¤P%óØc¾pz:'qêÊ+¯tß9jÖ¬éF¯ jô––fÓ§OwÝ„GÙ‰‰0„^{í5÷CÒšÃR× •Ú$omʻ˗//ÔM8Ѷ«?ýéOa»t'…Âñ‹_¸nºÁϹ·½uìØÑ-wôèQ›;w®ë¢;oÞ¼ˆ·Í² «t¥J•,33Óuêõ~X uûo½õ–¿Ó—C wß}×ݎ½Ï>û¬ë8­å»\Ož<Ùrrr\ø½÷Þ³ÔÔTëÕ«—ÿòÏ?ÿܺwïîö¿þõ¯]Çá µb]„+’ÚcÆP‡d çYÏ7”ì˜åhð…FÝ?4R‰¾[\ýõ¶iÓ& ˆÈÒ¥KÝûÇêիݿ녀„GHHBú)###dwÕdÂR›â•gÐLäíJ¡RüÛÛo¿íºã†ÚÞfÍšeµk×vÿOII ®®ˆ°L˜0ÁjÕªåæ/[¶,ìrzþ/¾øb«V­šë"L!ruö‚ĺÍÛo¿Ý¹:{÷£hû÷ï÷_þæ›oºå»iW¨¶mͶ²â¨ö={R‡dУ»”N«V¾ðo~C-€8£ïÞ÷†»îºËŽ9BQÙºu«{ÿÈÍ͵fÍšÙN0 á’P^^^Øp¢ºt:t(dH–Ú$wm¨CÙlW(Z`ØöäÉ“¶{÷n;qâDÌ­ç±cÇlïÞ½vêÔ©3¾-½¾öíÛò5¦yºŸX¬A99f))f!f”³¬,³fͨC2¨_ßlÆ ê äö…„ûö¥@œy衇ü!áG}”‚"vüøq«R¥ŠeggÛ¸qã¬E‹€GHÄ,:xǡÇÍÒÓÍî½—ZT¤… ͪTѯÔ"‘©k ~+VP %÷»ßùö!:«zq¤[·nþðsÏ=GA%¢ ¯Èÿ.©÷’<> Ð €˜EH8 äëlÊÇ+7×üÚº•Z$²5k|Ï3]»”ÆêÕ¾J8Ùˆ;—\r‰ûž”žžn[¶l¡ €éÙ³§õéÓÇ>ìº /]º”¢À €˜uôèQ;tè>}šbăéÓ}a£õë©EE;xÐúZ¾œZ$²¹sÍêÔ¡JGÝæúSßûÅ´iÔˆ›—îq«\¹² ßpà ¶k×.Š(‘Q£FY‹-ÜÿÛ¶mkƒtÂ7HX„„òòý÷fÛ·3111Eúè#³W_5Û¹ÓlïÞO?þȾåG]gž=›ZÄŠš5}Ám$®ÌL³N¨€Ò»å_H¸o_jĉM›6¹€°¦±cÇæíã{ dfΜiõ5 Ô¿þ_§NÞOH`„„ò¢ Ÿ~|ebbbªˆ)-ͬQ#³Ìzô06ÌlÒ$³œ_××ÇÙO£ô V uÄjKôz×k= ÔÑ»{÷î¶jÕ*{á…Üÿ'Ø~cÉ’%îq}ûí·ñS+„Gb[Pz>èû¬Ø°¡ï$31ïw¿û?$f3f¨=ûmïàAß¶¤íG¡sÄïuÿøÇ?܆‹/Îß•ä¸ÿ9rÄ]öÀ¸¿ÓÒÒBv:uê”5hÐÀ-óâ‹/–ÛÃ÷ÖkÏž=!/ÿýïï.ÿꫯBþ]µŠº”ß¾JëùçÿýYpÉêÄÁƒ»ÏUªT)×ÏV€Äáƒõ¯dddؘ1c( Š0ÉNá5…‚çÎýÿÙ»ø˜îüÿã÷ n‘þÝ²Š†¦ÄuYZ¡©EýˆÒºUEѦ7¥?J‹ÖÖºÛn©ÒÆ¯Š¦úÃòST]*mUãÒ¢kÝ¥ÒÊÖ%Z©)Åçïóž13™$“˜L&“×óñ8˜3gÎ9󙉙œó>Ÿ¯­ë¨†…5(¢â´Í_¿^dÏ[YCÉ„³‹oýë¯m¡s  j‡j ¡*÷OS§Ú^#/¸|ù²9¸fÍù¿ÿû?)Q¢„\»vÍÜg…quÒî¹®’’’ì÷ûSHX÷køðárþüysÛ[!áœjåU»wÛþ¯>x÷:€üÓNçµkÛþ?ùË_¨P´lÙÒ|×hݺµlÒ BÈ#½Õú»U;VêÕ«çöÂ_x—^H­#1À— €¬´±v§Ô hx¸HéÒ7ºÌ11‹të¦ãSŠpÉi˜[_//½FåÊ•3A”?þX*UªdŸ¯aܪU«JÅŠeÈ!Y7lØ0©S§Žß…„]y+$œS­¼jöl[œßA7K?Óõóâþû©àçÒÓÓ¥T©Ræ;‹~ÇÚ­ :Ðlý»RÄ|žègËN?º|úôéfŸÆç·5ÌÏ>^¹rÅCHxæÛoé$L'a‘ï¿çw¡¨ÐaC5ô•šê•Õýë_ÿ2]wµãÐ^}?üNøµk×–H•*Uä×_µß—™™)•+W–1cÆ8…„÷ìÙ#£G–¶mÛJHHˆôë×/K'¼ÄÄDÓ)/--MFŽ)uëÖ•[o½U&MšäQgÞÜBÂÖú5l£Ü…„ŸþyùóŸÿl_ƲuëV¹ë®»L0ºyóæ×56zT+¯Ò‹8¢£yŸ¸ycÇÚ>/n¿ÝÖY€ßZ½zµ}„†gžyÆ|× ?´#½v¶„‡‡Ë¨Q£üfÿ6lh>ïôxƒkýQ~öÑ!á}ûö™c"gΜá0 HC#Úü÷áC Š^¹r¥9Ñ¥?-Ë—/—jժɧŸ~êž3gŽôìÙSæÎ++V¬&MšHÓ¦MÖk…v{õê%:u’É“'›“–:O»õx²_9…„]CÁ®·µ£RéëõÓ}w´cÇ)[¶¬<ôÐC²jÕ*³ºÜÑ£G}ûúj—w:ð†ÄD[HX?3Ö¯§€³.¼ÒéÍ7ߤ €|ëÛ·¯™,S§N•zõêÉo~0ZMrr²ù¬»óÎ;ÍÏõ~ø5¿ûè‹ðÛo¿m¶áóã¿EHT‘‘"¯¾Z ›°BÂÚAX»kGaKïÞ½%..N¶lÙâv¥aa×XVhwÊ”)öyz²²~ýúfXÔܺ ßLHøã?6Cy¿õÖ[Y×¥KÓÑØ¢ƒ5$üÜsÏùîuÕîÐè#ÌÀRRDªU³ý¿ò·¿QÀÝ}÷Ýöð|@Aù¦]„µ›ð¯„)æoÛ¤¤¤Bß·aÆIXX˜>|Ø|æõïßßé~kd “'Ošc·Ür‹lß¾=×ûrÕhøðárÏ=÷ÈÕ«W¶·aÃiÕª•œ:uÊã}´lÞ¼Ù‰õx‰ŽHdq {2Ú’ãsËiÄ%]Fçë67nl–_»v­}¹Œ”SýE!a PiW ¸¸Ý„VC† ‘ *˜àlzzºé¸«'¶² kè755UâããÍýÛ¶m³ßçâµ 8ÐÌ?qâD®û•Ÿð_|!UªT‘§Ÿ~:ËcôDa¹råÌIÃ¥K—Ú'=1¨‘}fÑ"‘  ‘Œ Þã¼#*Êvè&Àÿh‡Gý¾á6<€§tô½×QçÎ%66¶P÷+ãúß¹ÁÁÁòâ‹/šÛ;v4‡Ÿ={6Ëßó=zô0÷Ïœ9SŽ?žë}¹jôÎ;ï˜Çº¥õ1º®¼ì£Úµk—™ß§OÆÕí6hÐ KHؓіŸ[N#.iàX_C7mÚ4ÓUøÈ‘#æ>OFFÊ©~€¢‹0¨¦Nqè TCÂ:¼¦žLZ¼x±Ì›7Ï„g5XëÖî;ƒ–   óX=ù¥÷kGKv!a=ñ¥ó÷ïߟë~å'$ܦMÓEøàÁƒY£ttíìsÛm·9M<ð€ï^W ~k ¼å±Çl!ázõô êø! $éwý.¢MÑÕp3Ö¬Yc>S233íó-ZdþN׿} ËüùóÍ~YÁÖ… šÛŽ#ýX¿ëçav뻻ϕë¨FçΓòåËËÃ?l_æ‡~0Ÿ¿ï½÷^žöQi·N:råÊû¼3gΘeÇçñ~¹>·ÜF\Ò`°»Ç{22R^ê(: jùr‘àà |9†„õäTõêÕå¾ûî“èèhû‰&×°ÓY£F 3,§Ò6žvž0a‚™¯'ïrÛ¯ü„„wîÜ)5kÖ4Á_ÂÓ‘žØÓ®;÷ßá¾®áá"'òþà=ññ¶°N;vPÀ%''›ï*:5Ê„ŒÈ¯Ý»w›ÏÇ dõoz ›¾úê«…¶_QQQN]{5Ȫ]{õ‚^׿çÝ…™sºÏñyf7ªÑ AƒÌöt»êå—_6£ ]¼x1Oû¨t¤¥¡C‡f9®àÚIØ“ýÊé8‰ëˆKîBÂžŽŒäIýE!a PiW |íÛW`›p «ÇÜiK–,iN:*ǰSé8¦²BºœÅ:1åÔÕðq£F<Ú¯ü„„õö×_mNðýéO’ .8=®C‡R¦L9}útἦúZêkJ÷@Þ¤ÜË•³ýÿâÒ €Ð!íðßÿþw ¸)éééæ3EGr4iÒ$ý­F—Ð ‰uŸÚ¶m+#FŒ°OøÃÌü¸ý{>§¿õy2ªÑÆÍ<íª¬yõâ§žz*Ïû¨Ç2ô¶c—^å.$ìÉ~åôÜ\G\rötd¤œê(º L; /ZT`«w öÙgæ„RãÆíóCÂz¢±V­Z¦Ãކˆ×­['Í›77÷¿ùæ›öÇX'¦Ú·o/»ví2aÝ„„)Q¢„ÚÓ“ýÒÇ/^¼X6mÚä4éɺœBÂjÆ fØMí¨ã84èW_}eÐÚ9èÿø‡9±úÅ_ȲeË|ózjG§°°í  ÒÿSš4±…„BüGïÞ½í!a½À €›UµjUów¶# “êE³®ó}Aƒ³Ú}·W¯^NS×®]·ù {2ª‘vÜÕt—.]ìÇ7ôBâ¼î£Ž~¤·ûôéã´îBžìWNÏÍuÄ%w!aOGF"$ ‰0È¢£EFŒ(°Õ»†„õ„ÚöíÛåÛo¿µÏs «wß}×…u^DD„|ùå—&t«` õ*ëÄÔ¬Y³ÌОúoíª3uêT÷Ë Ò¸NèÍ-$¬.\hæ=ñÄNëÖ qÆ íë«\¹²<öØc¾{=Gâ} Àû °…„Û¶åBÀY߇4¸¤ßE¸Y‘‘‘2qâÄ,óu^Íš5}ÚMXC¬zlaذaYî³:úê>érù {:ª‘ÒЭ^Ü©S'iÙ²e¾öQ…††šÃŽ6oÞìÎË~y:âRbb¢YnÇŽNËy22!aL„„€@¦'ž¢¢ün·ô¤™ž ³h¸8%%ÅœXSŽ'¦tYí€séÒ%¿zzbî»ï¾³ïs»^)]ZSʼ¯xßK/ÙBÂ+jzz~$55Õ~qR·nÝäàÁƒpÓbbb$666Ë|«›ðìÙ³}¶/zQ±»`¬E/¶.>ÎOHØÓQÔ¡C‡ìŸ»sæÌÉ×>*«Ã¯vÖÑŠ¦L™"üãͼqãÆåy¿<qéĉ&ägº [aoOFF"$ ‰0ÈV® ÉÌ,R»Í‰)7´‹r½ztøP0V¬°…„uzã êøÕ¯ç {Xé™gžñigG@àzòÉ'M`ÔýŸŸSMPX/Tñ…>}úÈí·ßžíýz‘±\ûö훯°òdT#K»ví¤|ùò&H›Ÿ}TçÏŸ—~ýú™õë6µ+ñ±cÇœ: çe¿ò2âÒóÏ?oF=Òeô{„%·‘‘8‰0Èô„ž¾’“‹ÔnsbÊ…†4 ìf(Xð @Ô®mûÌxüqêø qYaž7ñ¼D»Ð†‡‡gó'èoæ¾èè耺8%·Q,ÚÍwРA^úšnº3ßì~åuÄ¥‹/šuèº\ù|d$@¡"$ : —ºé,ãÏtØL=iÅ «ßiGèÒ¥ERR¨€‚Óµ«-$Ü©µüÈÝwßm þùçàkÖ¬1h3³yhçÎæþ3f«º|òÉ'æ3W»îú.¦ä!a СceR‡¢¬E ‘Þ½©€‚5z´-$ÆE €©]»¶ U­ZÕt ÀvïÞm>_<˜í2ñññRºti(..ºwïnº(ûÛEË„„ùEHtz2OC_©©Ô¢(š=ÛÖEøÈj `-X`û¼ÐéÝw©à222¤T©R&e† ÀΜ9cÀIII9.7tèPs¡JNaâ@«Ë¹sçün¿q _„„€@§C‡Ö¬)2q"µ(jvï ;–Z(x‡‰T®l O=?œœlÂ:ÅÅÅ™Ð0Þ&óæÍËq™ÌÌL‰‰‰‘š5kšîàh!$ 3fˆT­*2gŽÈ?ÿ)rà“¿N{÷ŠlÜ(’`{Í:w¶½ÀþøG[H8:šZ~`Ú´iöðÌ™3)À«Úµk'S§NÍu9 ÷íÛ×tÎ-T ü !a 8HO©TéÆ0òLþ?•*eë LÇ@¾4dˆíÿ ‘”ê²ØCÂ|ðx•‡êñò(Ö ptt´évü!a|hÙ²eÒµkW9wî\±|þ¿ýö›lذ! ŸãÖ­[åìÙ³¼Ùᬮ´ññt.*„Oâ} À÷þö·+$&R Õ«WÏ„5uèÐ! ðª±cÇJTTTž³{÷n‰‰‰1ŸOááá2qâDY¿~½|õÕW×ÿ”ÝxýOÚ½×ÿ´=ÀÄ$¿þú+¿dà àÆK/½dt‡††š`«««W¯J­ZµÌ2}ô‘Çë}å•WÌc~üñG¯,W”\¹rEºwï./¿ü²S]§ààà"ý³O›7oöÚ6³«oAû¯ÿú/3,0à7®ÿŸbÂ^R @îºt±}nÄÄP  ­^½Úþwçc=&'Ož¤(¯Ú´i“ùœÉÈȸéu}ÿý÷tf¢“0ø!B¸¡ÁÒªU«JÅŠeÈ!Yî6l˜Ô©Sç¦CÂo¿ý¶¹}ôèÑ€®§vÕ­P¡‚,[¶Ì©ÆúÜ;V`Û-¬úê0ÀeÊ”1'Z¿0v¬H‹Ôà™Ñ£m!á D||±€Æg ÿå/¡ ¯³ºÖä¢b!aÜÐkíÚµM7Ø*Uª8u=ÈÌ̔ʕ+˘1cœB¯½öš´iÓÆi=:lË–-M(åNLL4uõvãÆÍrk×®5Ëé}z;==ÝéöO?ý$&L Hdd¤=t› M›6•ððp³–={öÈèÑ£¥mÛ¶"ýúõs\µÖŸ––&#GŽ4ûu뭷ʤI“äÚµköå®^½*3fÌvíÚ™u£Fdûöí¹ÖsöìÙ&tíZãœBžîûþýû%&&Ƽ^•*U2uøüóÏs¬¯µþ{ï½WªW¯nßúZÿç?ÿÉRíÖ'·Ür‹y®Úáùž{î1µp´aÃiÕª•œ:uÊÜîܹ³Û€9P(Z·?ž:<óþû¶péÒ"ëÖQ tïÞÝ~_/(¥¯çs7’ „„pà ¯\¹ÒœÕŸ–åË—KµjÕäÓO?u ?ûì³æ º#í(«Ë,X°ÀÜv kH566ÖÜž6mšéz{äÈ‘,Ë9Þîß¿¿tèÐAfÍš%Íš53¡Ø)S¦˜°îÌ™3í'‘­Î¹sæÌ‘ž={ÊܹseÅŠÒ¤I¢ue­¿W¯^Ò©S'™VçmÛ¶Ííc²«o—.]¤V­Zrùòeû¼~øAÊ”)cº;ÖdàÀN=w/_ÞÔÂñ±¥J•’÷Þ{Ï>OÃÊúø'Nð …Â¥á` yýÞ™€\efŠ4onûüxäꂌŒ ó7†þMѺuk:< Œ^D?bÄ @€"$ €VHX 2D*T¨ çÏŸ—ôôt)[¶¬lÚ´©PBÂiiiöe>ûì3§í«_~ù%KØWià755Uâãã݆j]·gÑ€¬cÐUC°Vw]íÔë‰+W®˜îÃcÇŽÍRc]×°aÃdÔ¨QöÉ5T›Ý¾kXZ»k÷ßìºõº«¯žƒ‚‚dèСY–oÛ¶­½ã±U““'OfYnРA¦›—¾'ÔË/¿,UªT‘‹/Ú—Yºt©yüÎ;ù…Báš:U$2’:òæú÷nÐ@¿QÀÇôïý{B'ýÛ…¿+EÙuîÜ™B  à†cHX;6é‰YíÜ;oÞ< 3¡Ô ;†x­ðºuëìó\C§N’Áƒ›P¬>Ÿ¦M›šû·nÝšãö,Ó§O7ó÷ïßoŸ7gÎÓIWƒ¿Úu÷Â… ¹ÖS—òÉ'³ÔX×}ìØ1·Émß5¼«·xàl·ë®¾ÖãÆ—eùž={JõêÕs¬‰Ú¸q£¹oÑ¢E&t|Ûm·ÉSO=å´Ì;ï¼c–9 Ãu…I»xÇÅQ@ÞèÓÖé‹/¨àc/¼ð‚=$üÌ3ÏH¦vø è…ùù9  „„pÃ1$¬l58zß}÷Itt´<÷Üsf¾'!áƒjHX»âÖ¨QC>ln¯Zµ*O„'L˜`æŸ;wÎi¾x‡.%J”ÿþïÿεž 6”{ï½7Ks ç¶ïÚ¡X»:çtÃ]}/_¾l†í}â‰'²,%7α&JCâïÒ¥‹ýuøú믖yñÅÝÖð¹ðp‘Ù³© o>ùäFH8>žz>Ö®];{H8žßA@Z¾|¹ù¼9sæ Å À ǰzüñÇM U»çîÞ½ÛÌs [¡P뀺IûõëgæÍŸ?ßÌs ž&&&šÛ;vìpÚ¾7BÂÇ7ÿÖnÀ+h«ûîn{iiiNó5ݨQ£lë¤Cj87±±±Y–Ë)$ìé¾wèÐÁÌÛ»w¯ÛífWß-Z˜ÎÄŽ´v•*U’A:´¶äV Ö÷C§N¤eË–Yî8p DDDð˄•ž.¢/$'S @Þœ<)¢#,hHøé§©àc!!!öð|@AÆjr°sçNŠ@"$ €®!a+ku™U®!aëöرceÆ Ò»woÓ 7§ð‰'LÐ4..ÎtœÕ®Åî–ËOHX×U«V-iÓ¦ 6ërÍ›77÷¿ùæ›NÏ×Zûöíe×®]ráÂIHH0‚­}W“'O–… ÊéÓ§Mç\=qݳgÏ\ë¹víZ²þùçŸjœ]HØÓ}ךë>jè799YŽ9böwóæÍ9ÖwõêÕf]“&M2û¤Ë 0Àt‚Ö#ÙÕÜÑ¡C‡ì'íçÌ™ãtßµkפI“&¦^@¡Òp°†»22¨ ïºvµ}ŽtìH-Ò O­¿5ôÂÃM›6Q@ÉÈÈ0ÇÄ-ZD1@„„pÃ5$¬]·oß.ß~û­}žkHXƒ¡Ú…¶\¹rfÒî¹{öì1Ë,X°À,ã.xúüóÏKåÊ•Íü+V¸].?!aõî»ïš°­urùË/¿”¨¨(¬]¼x±ýqÖúgÍš%UªT1ÿ ’©S§:ÕE;*[ûª?µ[njjj®õÔp®vî9r¤S³ çeßõùëkeD¯Y³¦,[¶,Çúª÷Þ{OªW¯n\xx¸©©kM² +¸|ùò’®ÝZhc­£†Bµp¡HXuäϘ1¶ðõï5ò¯QÀGôoLëï”>}úÐÙPàôü3fP!a¼ì§Ÿ~’óçÏçé1/^”””Fö¶+W®ÈñãÇí·uº- 5[±ºüÑ£GåÒ¥Kn×§ÓÇgwv´C±†§ÿ•‡€‰'ûnùþûïMÇ­¼Ö÷»ï¾“´´´|ÕV»k0Ü‘v&®Q£†¼óÎ;ü2 ð+Ò¹3uäÏ’%¶°N‰‰Ôð‘^xÁ?~¼}D ŠŽˆöä“OR!aàQ×\oX¹r¥S7á¢ì“O>15sú÷þç²t` M·n"£FQ@þ8 Rº´-$>Þ~ê©§Lga|¡E‹2cÆ QŒi¸ö•W^‘ó]ÄÝ@Ö¯__Ž;fî×y?þø£Ïökúôéf›ãôF\¹rÅ,?~üx^TBÂ@`š4I$"‚:nŽv1­VÍ4ˆz¬W¯^ö°†ð•ØØX3¡øÒî»údÔ¨QrèÐ!>uê”|øá‡òè£ZH¸aÆf›µk×6àÜø*$¼oß>yé¥—ä £xðs„„é×_E`b*šÓÞ½"7Š|ÿ=¿ËÈ?=±×»7uܼvíl!áðp‘ôtê ¿X!á?þ˜‚|fÒ¤I¦›0Ч¥K—šï'NÌq9_‡„“““Íöî¼óNósýúõ¹>ÆW!á·ß~ÛlçèÑ£¼ø5B€À¤AKkXd&¦¢<‹të&²fÈo¿ñ» ϵn-2v,uܼ!ClßKJ—ùôSêôôtû°ÞAAAN>µfÍšë_÷JKff&Å(†4 ^¹reùùçŸs\Î k÷Ü©S§ÊwÜ!Íš5“… :-·gÏ=z´´mÛVBBB¤_¿~²iÓ&§e¥eË–ròäI‰‹‹“[n¹E¶oßî´Ì°aÃ$,,L>l¶Û¿ÿ,û´yóf"Öý¿ë®»dË–-nCÂyÙ§´´49r¤Ô­[Wn½õV¢¿víšÓrzŸn§qãÆæ1k×®5÷mݺÕìGÅŠ¥yóæ²Q›A¸ðä¹€·&: 3B'᯿Y¾ÜÖ¶jU‘èh‘Ý»ùý†gô=“@7ﯽqÓoP €ìܹÓÞE822RRRR( ÀgöíÛg>ƒ&Œ«ÛkРÛp^ö©W¯^¦úüÂÃÃͼéÓ§Û—ÓÀqll¬™?mÚ4ÓUøÈ‘#²cÇ)[¶¬©ÏªU«Ìz4|ïzñWnϼ‰0@Qpò¤-,¬üæÍ£ÈÙ™3¶ WRµÜ<ÒW¿ƒègË“OR €üío³‡„5t¢åð•ß~ûÍ2];Â"ði8U¿h×ÞÜXáÖöíÛÛ»NkPWçiP6;ÌÕeòֺèö1óçÏ7÷køVé{So¿õÖ[öe4„[§N¹råŠ}žv9Ö寗ãsÉiŸ¦L™âô»Q¿~} uê&¬Ï×õñ]ºt1‡-çÏŸ7!áçž{Îm³{îàM„„Š’Ù³E‚‚D&M¢ÈžO¨A.ºÏ¼!#C¤AÛgKT”ž%§&@Јþ«vðÀÇ"""$..ŽB3ßÿ}žCÂúKzzz–N» ئ¦¦J||¼YfÛ¶mYÖ•Ý…QÚ¡X»ìZ4p«Aö6mÚØçU¨PA†êô8 »ë$œ—}úñÇÝ~O;qâ„}žkHøêÕ«¦«ñ=÷Ü#K—.µOaaa¦ƒ±»:rQ_ $ PÔh7¿à`‘„j÷´Û´†Éð–®]m!á Döï§@¨Y³¦=$üþûïS€ÏiØ222’B3n-[¶¬Ü}÷ݹ.ë.DûóÏ?g Ÿ:uJ,AAAR»vmiÚ´©YfëÖ­9®Ërøðas_Û¶meĈöéøƒ™àÀIKK3ÿvíÒ›]HøföIŸ›Îßïð·kHX¿z;$$Dn»í6§éȵŽPP E‹Ù†ýÖÀ0àjÔ(mÿCÞ3b„-$¬ÓoPÀˬa±uÒy}ôEø\BB‚T­ZÕtZEñ¢áðŠ+š mN< ·jÕJjÔ¨a¾jÕªUwíUðÕ.Á½zõršºvíjŸ;wÎü»OŸ>NÍ.$|3û4aÂ3_·iq ëv5l}ÿý÷çZoBÂ|‰0@Qõä“ÚnLÇô£pc›ð– n„„_xz^–””d ·nÝZÖs1  ?vîÜI1Š™wß}×¼ö>úhŽËy>~üx–аÈݲeKŽëR¶ÕN¿Ã† ˲ýk×®™Î¼:ƒ.jº ;Ú¼ys–p^÷I»;ŠŽŽ–F9ÍKLL4ËîØ±Ã>¯C‡R¦L9}útžë…0@Q•™)n ŽthPíø€·è°º!!¶p·nÔð²‰'ÚCˆٽ{7Eø\FF†ÉìÙ³)F1sõêU‰ŠŠ2ßE´corr² ÿj—ÜÅ‹›ûöîÝëQHX;QתUKÚ´ic¾Ó¬[·Nš7on–yóÍ7íË.(«#*¸†wM:ÕܯËY~uŸ7lØ S¦L‘?þñfÞ¸qãìÉë>µoß^víÚ%.\0¶K”(!óçÏwÚ'NHÉ’%%..ÎtÖm|õÕWfžÖëÿø‡¤§§Ë_|!Ë–-sz,!a¾DH (KJ 9xZÀFÃãúžˆ§ïÒas5$&’šJ=/êÑ£‡=$`À9sæŒG!a¥‰5”«ó#""äË/¿4ï- ÛjèXe”íÓ§Ü~ûíÙî§vÖ nß¾}åüùóÒ¯_?³^]WË–-娱cY: çuŸfÍš%UªT±? &»óüóÏKåÊ•Ír+V¬0ó6mÚ$ 6´×Oïì±ÇœGH€/(êúö‰‰¡°Ù·ÏàÚ´‰Z¼kÊÛgŒN¿ŸàwÜq‡=HÏÅ^€B¤ÁÊÖ­[SˆbìÚµk&hûÙgŸÉþýûM7Ýü¸råŠ ôZ´[qJJŠY¿·iÇÞ“'OÞô>9†wuYí¤|éÒ¥×yñâE³]—£´´4ùî»ï äù@^(êt(âÒ¥máP`Í[x+%…Z¼ëão„„ÿúWêx‰M]®\9{Høƒ> (€B³råJ)]º´ ]Å ~"B sgÛhç¹  M›P €wé(ú£!áÁƒ©à%´„ÃÃÃÍÕ–#GŽ˜Ï¤5z2P̈ ‚õëmº #.N¤];ê(:ô´~çП\xÅüùóí!ᘘB€B&£F¢(v.\¸ iiiríÚ5Š `"O>IŠ»èh‘¤€‚ñØc¶pÅŠ"_|A=/øóŸÿl ?õÔS’ššJQ…*66V"##)€0@ ˆ· ~æ µ(ÎêÕ?ž: Æ[oÙBÂ:MŸN=¯|}«g ÿõ¯¥ €B7oÞ<ó¹tÆÇǘ®^½*‡–mÛ¶ÉéÓ§y!ðB HX¶l™tíÚUÎ;G1²“‘!RµªHBµ(®tØ÷Ò¥E–/§€‚‘œ|#$üÔSÔ¸I™™™RªT){Høý÷ß§(€B—’’b>—-Zä³m:tHZ´ha¶[²dIó³jÕªù ¿òÊ+f?þøcÀ¿^ééé&\½qãFÙ»w¯8p€©M¿þú+ÿiÈ!aЉ—^zÉ?vì˜Ûû½qàÜÚFhh¨ü¦aEÚ ¤V­Zf™>ú(OëödÿŠÓÁÿlÅʼnÄÄð†/®¶o·…¶v呂‚¡ÝäjÔ°}ÞÜ}7õnÒ¾}ûìáààà<ÿ@A‰ŒŒ”¡C‡úl{­Zµ’š5kÊçŸnŽ+þûßÿ–É“'ËÙ³gퟙzìÑÓîÆIII2|øp9þ|À¼&Z}^'N”Þ½{KDD„Ù¿K0ÏIƒÂB¹…„ózàÜÝyk:­_¿Þí6¬ûo6$ìnûxð?Ï´îÚ9y’7}q´d‰­“°›>^mû¾"’šJ=€›ðÖ[oÙÿFjݺµù;ðꫯšÐîo>8Æ Ç÷ô³püøñÙ.óöÛo›eŽ=Zì^ =Ϊ¡`í¬\ºtii×®ÄÅÅIBB‚¬Y³FvïÞM'a: @¶ PLäÎ+wæuz°ºbÅŠ2dÈ,6l˜Ô©SÇ+!áâ|b Gzâ&4T$>žZG3fˆ´hAë‘Gl!aÞŸz7A>VHXÿ^ÒáÂðGŽ1ŸO;wî,ðm]¾|YBBBä®»î2ÿv•˜˜(uëÖ5ûÓ¸qciÙ²¥¬]»ÖÌןf̘,!á×^{MÚ´iã´?)))f½«W¯6·C¹p=øÿÓO?É„ ¤Aƒf¨ÄeË–™ûµÛFÓ¦M%<<Ü샣={öÈèÑ£¥mÛ¶æ$E¿~ýdÓ¦Mnk–––&#GŽ4ût뭷ʤI“äÚµk…÷b?ø ­ÃŠŸØXÛë@AúÛßn„„ÿòêÜ Y!á—_~™‚üŠ3Ó@­/<ýôÓæóPŹ¿Ôãt±±±æþiÓ¦™æb¶ŽöèÑC:vì(3gΔãǛǸ6°n?ôÐCæxâäÉ“%**JJ–,)§N2ËlÛ¶MÊ”)#ݺu“ 6˜±†‰sërìmÚY¹oß¾f»111rðàAÞŒ€|#$ @1‘[HØõÀù‡~h’k6))É„huø2•Ýy+$¼råJsŸþ´,_¾\ªU«&Ÿ~úi–ð³Ï>k†ÊstèÐ!³Ü‚ ²ì_n'\þ÷ïß_:tè ³fÍ2B*Uª$S¦L1Ág=yн{÷,]‰çÌ™#={ö”¹sçÊŠ+¤I“&&Pì®f½zõ’N:™“ zòDçMŸ>½ð^l­»†vNžä_Ü´n-2iu¬ëß E¿»é÷ûï§ÀM µ‡„­‹ðcÇŽ5Ǻ~Ó‘« Ø¥K—äá‡6Ÿ‰åË—7Çì®\¹b¿ßݨbÖ±¹fY_vÇ Û·ooš¨]»v™yºnuÏ=÷HÙ²eåâÅ‹öõhó]fܸq>©yrr²„……™ïz<€›EH€b"¯!a=(_¯^½l×çîÀ¼ÖÂÚ5X; [z÷îm†ýÛ²eËM‡„³Û~vÿ|ðAÓY-^¼ØÌkÑ¢…^P}óÍ7fÞ믿žíóÕ°pvÛÓÀ±EOšÔ¯_ßÈ/´n¶àÎ’%¼ñ‹}ÝÂùØw ýž¨!áÈHÛmy¦C£[aýûÁuä ›v°ÕÏ) ®úʪU«LHV·{ï½÷Ú½9 <éæBùìŽ~ÿý÷öet42ëb=v¨am4àHƒÊ¾ê$¬¡ààà`Ó=855•7 À+ PLä5$üÞ{ïÙ‡ëÓν®r «!C†H… äüù󿀻dדޅNKK³/óÙgŸeÙþ/¿ü’%ìkÑЯ”7Ëè°ƒÙmÏ¢ÝKtþ‰' ïïÖMdèPÞøÅɾ}¶°VJ µøæ»†~î‰lÞL=€|Ћ­pçÎ üRDD„<ùä“>ݦkëÚµ«S—_OŽ:Êî8¡ã²?ÿü³=$¬ÇñôßÏ<óŒÓz|^²d‰ k“_tn„„(&òVsæÌ1Ãû•,YRF-.\°ß—[Hxýúõæ~íÜ;oÞ<ÓD;rFHØñ9Y!áuëÖÙç¹ Ÿ:uJ,AAAæ95mÚÔ,³uëÖk¦ôÄ‚Îß¿á½à¯¾*R³&oüâD;kP _¸þÝЄ„uzã êäCŸ>}ì!a íÓ‹¾ð3zá¼Ó&¾¤ÇÛJ•*e¨‚ _¾|ÙíÒ¥‹Óz4°[Ð!aíÔ¬á#Fx!aЉü„„•†e‡.%J”ÿþïÿ¶ÏÏ-$¬´«W¯.÷ÝwŸDGGËsÏ=gæ{¶†3,¬p«V­¤Frøðas[‡:ô´“ð„ ÌüsçÎÞ nu•%hP|Œ%Ò®uøÆÜ¹7BÂ#—,Yb–9qâ„9ƨËé…ù¨õvHXj÷b 'kh·~ýú¦i‚.£Ç= ‚smwýûtFFo4@ $ @1a…„/^,›6mrš4äêz |òäɲpáB9}ú´|ýõ×"={ö´¯ÏÝy×°Èmܸ±}ž»°5OO8lذAz÷îm:ùæöäÄ@~Cº®ZµjI›6mL¸Y—mÞ¼¹YæÍ7ß´?ÎZûöíe×®]æ$FBB‚éºlíw¡:T$&†7qQµ*¡p€oi8XCÂ+j‹9êäv ´Â:}øá‡à·4´«£€­Y³¦@Ö¿oß>©Y³¦ùLÔã}úS/¦ùûßÿî´ÜóÏ?o:ýêý+V¬ðzHX}òÉ'Ò¿éÞ½»¼þú릫°.£÷6íN¬]šµ¾BÂVHØÝ´lÙ²,ʵ °uÐ]8МÈväz`Þ5$¬·oß.ß~û­}ž»ðµk×dРAR®\93ÅÆÆÊž={Ìr ,0˸;ŸÛ‰ü†„Õ»ï¾k‚Â:?""B¾üòK‰ŠŠ2` Z;®Ö¬Yö.`AAA2uêTÿxÑuÈà`‘ÌL~žLÒVRµøò ¦íóG§yó¨«W¯¶ÿ=.GŽ¡(¿6bÄiݺµ¹¸¾ è1¼äädÓYX/ÆwçâÅ‹&T«Ç}Aêçõ|àÕõjc ^Ïã{4 €ÙÒð®t¿téR¶ËxóÀüO?ý$çÏŸÏÓc òÄÀ•+WäøñãöÛº Ý–ÖE9†uÙ£GæX+ŸÓP·†vöíãÍètèM}­éâ(ŒÏÆŽ¥@Œ7ÎîÓ§!a€ßÓæjÕQ´•ÛÓf 'Ož4Çútij-ZH½zõäòåË^ÛŽ­5pS ¡k!a€|ÊiHC¿Q¯žH|DH Ћ,_NÕÂ…¶`–ù€¯}üñðÃSÀS¦L±‡„[·nm†4 ¨Ù·oŸ´hÑBªV­*£F’7ÊúõëeïÞ½ràÀ¦ëÓ?ÿùOY´h‘,[¶LÂÃÃM°zçÎ~ûšjhõ•W^‘ó=Åù@Ö¯__Ž;vSë¿råŠYßøñãóüØ—^zÉþý©D‰rË-·HTT”¬^½:OëÑç§ëøñǽZ»éÓ§›õŽ7Î'õ€¼ $ èZ·1‚:ªØX‘ÈHê(n ²…„õ;€\õèÑÃr6l˜¤§§S@‘”™™) aÿlcr?5jÔȇý™vµÕ}ÕÐ÷¡C‡LhøÔ©Sòá‡Ê£>ê!á¥K—ÊÚµkåµ×^3AáÒ¥K›ÎÖžJJJ’áÇËùóçó´} ÅëjHЀIDAT>d×9»aÆfÿj×®mžgA×Ã[û  x $ @Qñë¯"z ™)ð§½{E6n9|Ø;Ýa'N$´ÈÂÃEF¢€Â£ß34$\±¢ÈÉ“ÔÈ…vâ³CÚ üüóϦ›0„Ýw®W¯ž_wÖð­~7™¨Ç ˆ7BÂÇ·Ï{ùå—Í<í\ÐÞ~ûm³­£Gf¹/99ÙÜwçwšŸÚQ» ëáýP| ¨Ðð¨5”3SñšªVµ…oââD–,É{øfÍ[‡¿ß~ã÷(Ðè{¡ti‘E‹¨ ð tã{ËÒ¥ÔÈAFF†}èn–è÷{P,¾ÄÄÄHÍš5å¤^X×¢E ©\¹² {çfÏž=rï½÷JõêÕ¥N:2`ÀùÏþ“e¹Í›7›à¬®÷®»î’-[¶¸ ÅnݺÕÜ_±bEiÞ¼¹ ›»rÖ0®Î›{ö¬L:Uî¸ãiÖ¬™,\¸Ðé1uëÖ5Ûjܸ±Y^»[tdˆ°°09|ø°Y¦ÿþnëæI=tÿG-mÛ¶•éׯŸlÚ´)˺¬ýNKK“‘#Gšý»õÖ[eÒ¤IríÚ5ö;·º[ÛÐ÷k\\œéܼ}ûv~™€"ˆ0E„‹g'áäd‘åËEf̉‰  ¶†=í=×ýö¤îÖ6zôèaž×Ì™3ê è $ P”è „•+E¢¢lAœØXÏ: k°˜.eG‡€ŒŒ¤€Â•˜x#$ܦ õro kÅ]g8¸vïÞm¹³gÏö›}Òà§~7ÑŽ¸¹éÒ¥‹ÔªUK._¾lŸ÷Ã?H™2eL\‹†Nµ“ï•+Wìó4¨«Û7nœÓú´®åüùó&¬úÜsÏ9m× 8pÀ„lŸ~úi³Mí„kmÓ}Ë.$ܾ}{ÉÌÌ4ó4Ыó4TkÑë<×ðòüùóÍ|+|«ˆõö[o½å´œ§õp¥aawÛµö{Ê”)öy<¯_¿¾„††Ú» g·ßžÔÝÚÆÀùÅŠ8BÂE•vn×N¤jU‘E‹r^VCÅ>HÍ„]†hÀçRRDªU³…„õ{IF5²ñØcÙCÂ:ló>Fû Ø™4i’é>›ê'#C}ÿý÷…„­ŽÃC‡Ír_Û¶m¥U«VöÛ*TȲœd;ç^½zÕt×½çž{déÒ¥ö),,ÌtÓud…„­I­?þ¸¤¥¥åiß² k ,éééNyUva[½èK»ìZ4l«¯m—‹'=©‡# üêûúÀlÛ¶mN÷»>‹zuþ‰'²ÝoOënmã¤' *ø5BÂE™v~õU‘  ‘#l·ÝÑû""ŠÌÓZ¶l™tíÚUÎ;ÇkœíP¢a¬õë© ðýéO7º /_N=€lèpÐV¸E»ÆùÓPãÀ7ôó¿E‹Ò»wo¿Ø –-[Vî¾ûî—Ó°hvo5\Z½zuóo îêr®Ý€]C±ÖúBBBä¶Ûnsšxà§ÇZ!áå×ÿÖ8tè\ºt)_û–]HØ1lûóÏ?{>|ø°™§!ä#Fا?üáö®Çy©‡:uê” <Øžk×®-M›65ËlݺÕé±Ù…„uŸuþþýû³ÝoOëžÝ6=„„AR’-(¬)Ü æÍ³…v¼ØÙÏ:8¯Cع 7è âO—ùè£ò´nOBûÕÀ*]ZÇ&äý(|:­~áêdC¿;[!á7ß|“‚PLíÞ½ÛtçÇìü@dd¤T¬XÑ„T³sùòe)Uª”<ñÄYîÓŽº76ÿÖ‹þõ»NŸ>}œ–q Åêm 'ßÿý¹îŸuòøñã7µoÞ ëóÐÁ½zõrš´ñc(ØÓz(íx\£F @V«V­ÊS'á &˜ùVãwûíiÝ ƒ0@ Ø¾]S¶ °+ÆXC;ÉÉ^Ûœã0ëÝt³MJJ²ß³!a†Y·wÆ!«ë>|¸ƯXzòI‘èhÞ÷ÿ0uêð#PÀ ý.ë8Löºuë( ؆Cƒƒƒ%55µÐ÷åÝwß5ßO}ôÑ—ÓÈÚÝÖÑ/¿ü"•*U’AƒÙçé…QÚQ×ÑæÍ›³„b;tè eÊ”‘Ó§Oç¸ÝÜBžî[~C‰‰‰fÞŽ;Ìm Új§ßaÆeÙk×®™®¼5kÖ4ËyZ}n®ÛµBÂ[¶lqz¬µßÚ¥ØQtt´4jÔ(ÛýÎKÝ ƒ0@ Ù´ÉÖQXƒ:Ž23m]ggÏöÚ¦ôà|ÕªUM—‘!C†d¹_’שSÇ+!aw]/Š= „ÇÇS€øàƒ!áví¨àÆë¯¿n‡‡‡_ÿ꾉¢PÌi¨³ÝõïÏ^ý+?tD0í¸«ßS´nrr² Ë걸ŋ›ûöîÝ+«W¯6ËLš4ÉÜâÄ 0`€éŠ|ðàAûú¬Ž¶º® 6È”)Säü£™7nÜ8ûr_}õ•”,YÒ¬ÿÿø‡¤§§Ë_|!Ë–-sÚ?OBžì[~Cº.Ýϸ¸8Ó¥×Ú–kx×2uêT§c¢žÔCGjÓQÙÚ´ic:MëeÍ›7w;…µßíÛ·—]»vÉ… $!!AJ”(!óçÏÏv¿­Ñà<©;!a p4 ÚÁÚYØQëÖ"qq^ÛŒœ×Žz°½J•*ò믿ÚïËÌ̔ʕ+˘1c²„„_{í5s°ÛQJJŠ´lÙÒ`WŽ¡µãEݺuÍmP—[»v­™¯ÿÖƒØÊºýÓO?™ï 40C%Z·õ@¹vÑ@†îƒ£={öÈèÑ£¥mÛ¶"ýúõËÚ°Ö¯:FŽiöéÖ[o5'´CˆOék«!,‡“/*íöÿÿþŸíó©bEÛmNô{³މ‰!$ Laí2Û·o_{€³°\¾|Ùïӆޣ™ï1Ö_ï½÷žT¯^Ýéâ§Ï>ûÌi]:ò—_ÓЪ.£ÇÔŽ;–¥“°ÒïD 6´¯O)>öØcNËxödßòVÏ?ÿ¼Ù7½OƒÝ·ß~{¶û¡û©!\}]óRíè¬Aa!_~ù¥ òêã4¬íúû¬éàáèСCf¹ ˜ÛŽ¡5ÀknO›6Ít>räH¶õû÷ïo†ÌÓƒäÍš53C jwjoæÌ™Ò½{÷,]‰çÌ™#={ö”¹s皃åMš4É2<¡µ~íøÑ©S'™>Þ,³mÛ¶l·g8p ™âÄ ß¼®K–ØBÂÀŸüío7BÂݺQÀÏí8l÷‡~HQ€™KƒÂ111Œ8€„„YëÖ"‘‘¶k —._î•U;†„ׯ_oLkçÞyóæIXX˜éæ[!aǃãVHxݺuöyîB§N’Áƒ_/OyNM›65Ëlݺ5ÛíY¦OŸnæëð‹>%Ò·/ïm€ÿÑÏ{ýŒ×põê"™™ÔøÝÚµkíaýΩß\%''›ãj:jÕr/ÃCà¹pá‚i”೑Íi„„Ùöí¶ ÎÂ…¶ÛíÚ‰Œå•U;†„µoõêÕå¾ûî“èèhyî¹çÌ|OCÂ,Ôp«V­¤Frøðas{ÕªUwž0a‚™îÜ9ß½žú£]îÿð‡Ý„ù¼ì†n GFFJJJ Ené}ûö5ß´«ð‘#G( ß ºÎEÂÃE22DÆŽµu¢õǰzüñÇ¥lÙ²R²dIÙ½{·™ç.$üâ‹/šyzÂCiÇá~ýú™yóçÏ7ó\¹‰‰‰æöŽ;ìëñVHøøñãæ¶v¶X!aÝ×íi—GŠnÔ¨‘o^ËØØ¡ðG÷Ýw#$üúëÔø]—.]ì!áÊÉ“') ÈÑš5k¤uëÖæûC·nÝdÉ’%’ššJayBH@±¢A4í©!OŸ>í×ûÙµkW{X®(>˲eËÌsñI‡Mîi`W;÷Λ§gD‚‚¼2ü·kHØ ä6nÜØ>Ï]HØš7vìXÙ°aƒôîÝÛtòÍ)$|âÄ >Ž‹‹3ÿŸhçbo…„u]µjÕ’6mÚ˜p³.Û¼ys³Ì›o¾iœµþöíÛË®]»Ì°~ R¢D ·ÿ_{ݾ}¶×qÉÞÓÿõ׿Þ ?õõ~wûí·ÛCÂú=X¿ƒxbýúõ¦£pÕªUÍè\íÚµ“'Ÿ|RæÍ›g‚Äz(×wÎ+o Œ^Ìb…„;v¤ÀïÊ—/o ûä3pô¸}RR’9o Ýë1, [ß1˜˜üyÒ 0€ÂAH@±¡]*kÖ¬)Ÿþ¹9˜öïÿ[&Ož,gÏžõÊú÷íÛgsg4€w“² {ã9d·ŸVHX'íLàJ>Z÷ßLH8»íëú‡.çÏŸçÍ „#Gnt¡mÝZdìØBߥŸ~ú)Ï¿ó/^”””Hö6ý¿÷øñãöÛº Ý–†š]ÿ?Óe=*—.]òM±¶o·½~‹ñ^ø7þ¸Z5[H8$Ddÿ~j‚boÿõßÇ€„^Xà-ééétf¢“0€lP,h Õ]èÖ›Þ~ûm³ Ý,w!ao=‡ìöSƒ»Ú•¸bÅŠ2dÈ,6l˜Ô©Sç¦CÂÞ¬€<²:Ñ>û¬Hd$õÈ£Bëx®ÝÝ5Øcû7þîÎ;ot~ÿ}êboÒ¤Iö€°ŽÞ£¢à „„ —/_–¹ë®»Ì¿³£ÃÝß{ï½R½zuˆ0`€üç?ÿ±ßŸ˜˜(-[¶”“'OJ\\œÜrË-¦ί[·®9á׸qc³ÌÚµkÍc¶nÝj¶«áÛæÍ››«ù]mÞ¼Yî¼óN©\¹²YvË–-YÁž>‡œ¶—Ó~jH¸víÚæ9W©RÅéªîÌÌL³ocÆŒq ¿öÚkÒ¦M§íëÉN]ïêÕ«ÍmÇP]NÛ·j«]ok§Ñ &Hƒ $22R–-[fîOHH¦M›Jxx¸ÙÇ×pôèÑÒ¶m[S¯~ýúɦM›²ÔÉZZZšŒ9Òì×­·ÞjNÞZ]CvIÕÛ¶m“Ó§OûýþêkßµkW9wîÿ©å—ÕMø¹çl¡ƒ©IZHX? ‚‚l¯EÁàÁ7BÂù õ@±×£G{H8**Š0Àg (6ž~úisBNãǎËrÿ?ÿùO)W®œtëÖMÖ­['+V¬0![ k_eÄô_ÇŽeæÌ™fhz ¦ÆÆÆšû¦M›fºå9rDvìØ!eË–•‡zHV­Z%½zõ’Ò¥K;uÑݵk—ÙnŸ>}L wîܹ&ë®kpnÏ!·íe·ŸÊ ¯\¹Òܯ?-Ë—/—jժɧŸ~ê~öÙgÍú:tÈ,³`Á§ši¨.§í»†ï¬Ûýû÷—:ȬY³¤Y³fR©R%™2eŠ4jÔÈÔ¿{÷îN‰çÌ™#={ö4uÔ×°I“&&LìÊZ¿Ö¨S§N2yòd8ÖyÓ§Oøß}Z´hažoÉ’%ÍOí$}³aa}Yݱ~sÓñTƒÉµjÕÊsGjwï‘ü.SìÅʼnԬiþ{êTê‘.\0øôB‚%KlÁî… yE‡~Ÿ¶BÂÿõ_ÔÅÞí·ßn ëÇà„„—.]’‡~Øœ”+_¾¼ ˜^¹rÅ~—.]LxѱKï?ü eÊ”1i•@8p`–õkàÕ1¬j­S»ÓZΟ?oBµÏiÏßiHU»;’u]ãÆËósÈm{îöSY!aí ¬]ƒµ£°¥wïÞæD¦Õá8¿!᜶Ÿ]HøÁ4ÁRµxñb3OígÏž5ó¾ùæ3ïõ×_wûºkX8§íiàØ¢¡Öúõ뛀k wnÕª•Ô¬YS>ÿüsó¼ÿýï› ´UWOì۷ϼo¬½õ>²N~¯_¿>Ëc’’’ì÷ßlHØÝöuýÇ7ï}dCëUµªH£F"‘‘Ôß-_në ìrÁ~ïƒn„„õï7ÅI… ìéßñø !aÅŽvØ 3'çî½÷^ÉÌÌ4Р  :th–åµk¯*•Ré¶µÓ­EOºnWƒ¿î: çô<Ý^n!a5dȳ_´LOO7݉7mÚT(!aíÚiùì³Ï²„Kùå—,a_¥Á×ÔÔT‰7÷oÛ¶-ÇíY4®óOœ8°¿V}üMݽ–ú>ÒŽÄ+V4ï#WÆ 3¡xo„„³{/Á 7‚;ÉÉÔÃßhjÒ$[aíüL° Pô¾pŠ„†Þø¾áò](NŸ¦M›šû·nÝšãö,Ó§O7ó÷ïß°ïí–­ï“»îºË©s¶+­™.£ßæÍ›ËÆí÷%&&JݺuM­7n,-[¶”µk×ÚßGÚ‰ºJ•*¦3µEÃìÚ¥z̘1YB¯½öš´iÓÆiû)))f½«W¯Îòše·}¯ÿÖp»µŸzû§Ÿ~’ &Hƒ $22R–-[fîOHH0ï‘ððp³ŽöìÙcºˆë…Z¯~ýú™°¼#kýú»×¨QC>lnk×å¼tÖ ©Î××&=ýôÓæyjöرcYîß±c‡y?=ôÐC¦†½zõ2¯µõºi€666Ö¬cÚ´iæu=räˆý}´råJsŸþ´hǬjժɧŸ~š%$œ×ÀyvÛÏî}Ô¿éСƒÌš5Kš5k&•*U2ï™F™á~»wïžå}9gÎs‘€žÔ_±b…4iÒĊݽ´>:u’É“'›À±ÎÓÀ¹_Ó üm·Ýï0ùÇT¯žÈ¨Q"©©|PжG¹ñù6v,õ@1þUxÄîܹ3!a€OPlýüóÏR¾|y„U-Z´ÈÔª†  dnçÖŽ¢zßÿgïNàl®ûÿÿÿ5–±„/#K’ý+Kv)~H–- éú•R\Yêª+d½*— —¾‰ ×e½”Õ`hl™„/RLL5É–ËòúŸ×ûôùœeÎÌœa–³<î·ÛûfÎû|¶ó>Ÿç|>ÏÏë£áJ‹† *$'OžÌp;´’Ð-·ÜâÑ·yóf¿BÂÞ¯ÁŸõùÚNåVÇ7!Ñn¸AMŸwHø¹çž3SõvÂZmX«­jß‚ |ŽYFëωð±cÇÒ…3­°n»¯õiXwŠÖàh¨»xñ¢ 2ÄŒîC”Õ ¹¥cÇŽ¦"®åìÙ³&Äë^õÚWàÛÚ´‚°V ֊–ž={JLLLºýHåTUêŒö£|ÐìŸJ+dkŸþÎÿòË/¦ï믿6}¯¾új†cfUóµ>+¤®4d_­Z5ó»°Õ„5¼é¬"\¦Œˆþ­¡’pþWvüM düío®p‡ŒÂÖ=÷Üc‡„õûо}û@ž!$ ,|ùå—v8ñܹs’””$Æ 3'é–-[f¦yï½÷Ìã &˜ðíñãÇMÀQƒ‹ZWeÖé5P«ëÑ*´ܱc‡éÓjÄ+V¬´´4Ù²e‹¬\¹ÒžÏª\«•Hׯ_o†M›65}ãÇÏÖkðg}¾¶Sy‡„­@®UEYy‡;­ÇcÆŒ1Û®!P­ä›YH8£õçDHX—U±bEiÞ¼¹ 6ët 64ÏÏ;×ãý²–ߪU+Ù½{·ÓyóæIìm¢®\¹²‹{ï½W.\¸`´EŠ‘víÚÉòåËí¦Óie]Kf!aõÐCI±bÅLÀX÷E kÕ¬ü »‡Á­ýÈ}ýÞ©Ýé~•œœ,³fÍJW•:£¿  0ýº¿œ·ßѱþŸÿq†vþ¸ Gég-+$¬ŸQ%aJ/ ´BÂúßú @^ $ ,h¥ž *˜“rPÕK•*%¯¼òŠÇt‹/–²eËÚ'ðjÖ¬i…–ÌBÂjܸq¦zªN³zõjÓ§¡ÈZµjÙËÔç5ÜkÑ¥VßÕpª>߸qcùî»ïÒUö÷5dµ¾Œ¶Ó;$¬AÑ„„ùöÛoí>ïp§VIÕ*Ë(Õ-{÷îÍ4Ø™Ñús"$¬-Zd‚ÂÚW§NÙ¾}» MëøjYï÷òµ×^3ã¨?GFFÊäÉ“Ãî÷CǸS§Nf 4x›’’b~.S¦ŒÔ¨Qã=ðÀö|Y…„×­[gž×qŸ?¾ ë~•!áìîGêĉ2xð`³_èkÒJã:ͶmÛ²ü› Õ¬µÿþýõf;~§M@xÔ(qüŠ´lÉ w¤¥‰”/ï ÿqa#Nô"̈ˆûû¹÷Å«ä6BŠùâããMU^­›‘£GzTÍŽóçÏ›*¿†t§ËÓåj°Ö­´ªáÌœz Y­/£í¼?ÿü³ ;çÄ8å„Ë—/˱cÇìǺ]—ûX¸‡;uz š^¼x1¬7ôäu×®]ÍxhÕß^½ze:OV!a­¥¡ûûï¿_Ú¶m+cÇŽ5ýþ†„µ‚w~†„µ*vùòååðáÃæ±V]ö·’°U!\«e êÔ©ã Ÿ9#Rº´È¼yüÇrÏ=÷¸BÂO=Åx ìlÞ¼Ù{ /„¥¬ªB‡›_ýUŠ-j½êî»ï–B… ÉÉ“'3œ'66ÖŒáÎ;í>ïŠÔÇ7c­~˜˜hú|…„Ÿ{î9Ó—ššjk°[+lkß‚ |¾g¾ÖŸS!a ™ëc­l±BºýÞëó¾¨@Cѵkל7Xoi¬á` <(òî»ÎŠÂŒ7@®p|6´CÂ÷ÝÇx ìXßs¬;éÈK„„a)œCÂZ…:&&Æ„]µµVY6l˜eÜzÇŽ&ØÛºukY±b…©t½eËY¹r¥½œãÇ›itYZ1W+{‡„­@nݺuí>_!a«o̘1²~ýzéÙ³§©ä›YHØ×ús*$¬ËªX±¢4oÞÜ„›uÚ† ¦»E°µüV­ZÉîÝ»ÍxΛ7O (`ow@xôQg(8!Áõ¸m[þ€ÜõñÇ®p­ZÎ —€0rÏ=÷Ø!ánݺä9B€°¤aN­þzõêÕ°{íûöí“ *˜Õ²ÕK•*%¯¼òŠÇtz»V­ZöIí’%Kš0±»qãÆ™~}~õêÕéBÂZ8!!A¾ýö[»ÏWHX߇AƒI‘"EL‹ŽŽ–½{÷šé.\h¦ñøõ^N…„Õ¢E‹LPXûëÔ©#Û·o7¡i /]ºÔcù¯½öšCý922R&Ož8o¸n‹sæÍsõU®ììÈMÉÉ"eË:?‹èK‡1&+ÕªU³¿O1Âñ+‘Ì ò!a”gãããMea MgDÃÔGÍ0P}þüySXÁ×ë矖³gÏfkžœ\¿·Ë—/˱cÇìǺ]—5î!dö›o¾‘‹/Λ<{¶3”3a‚«ïÈgß®]ü€Üת•«šðªUŒÂÆ… $"" Oœ8Ñܱ€¼DHàùªT0^~ÙÆ5ʳþ|‘Ò¥¹Ý7È=æ ?ÿ<ã°±k×.; ì~‡ò!a€k!á D¢£AœgžI:T¤[7Þ<7þñWH¸_?ÆacΜ9v@822R>ùäç ¿ÿ.rà¸í«¯D6l9|X$)ÉըزÎ;'§N’«W¯ÆmÜ(Rµª³RpF·ó®YSdútÞ<76mr…„«TIMeL¢££ípýúõ%..ŽAä9B‚‡†0­“Ë4Z°¶¨(gˆ³Y3‘œU]µÚë¼y΀§†ŠìÒÀAÛ¶Î}L«''ûžNC9 :§È ))"e˺>ÿóŸŒ ÂÂwÞi‡„{õêEH/ T¦k%áøxg(S›Vw}ûm‘—_v†ƒ5$¬aa­îªáM N”(!ÒºµÈ¨Q"Ë–eøDx;rDdöl‘úõûî3ï¾›ù<|àÜÏ.\`ü@ÞiÕÊþë_„…råÊÙ!á'žxBR40@#$ @ ¸tIäàAgÐsÌgxXæÐqLŒÈüùΊÃJÖ@²“ h‡và<1Ñ0×ÀøäÉ">èÜt¿(]Zä‰'Döíóo{þyg¨ /=ö˜+$Ü¿?ã—––&vHxâĉ _ ÐiT+ÆöéãYq˜^-*J¤eK‘èh‘Y³D²¿/uëælyiÆ ×gš¦M„¼?üÐk‹ePù‚0ÁèÛo©$.•„SSsn¿©PÁYM /é¬pÉ’Zf•1AH{úé§í€p‰%Lh€ü@H $';ƒ9«V1 ï?‡Ü|³+(¼ic‚Ö¡C;$ܬY3Y·nƒÈ„„ÂÁ8C9ÒÈk]»ºB¯¿Îx ¤U¨PÁ 2DvíÚÅ ò!a€pðüó"õë3 Œí Æx d¥¥¥IDD„;v¬œ9s†ä BÂá [7‘Ge@þxã WH¸U+Æ!+>>Þk{å•W@¾!$ *T™=›qùãÓOE t†„‹ùæÆ!éoû›GH8..ŽAäB¡.5ÕÈIH`,@þHNiÐÀUM˜êªQ °ÂQQQ’””Ä ò !a€P·j•³rß… ŒÈ?]»ºBÂ>Êx $5mÚÔ wèÐ0 _uOÿüs9yòdÀok§NdÁ‚!ù^èÕãúúNŸ>ÍŽ ‚%D^~™qeâDWH¸U+Æ!A«˜Y!áÎ;K\\ƒ€ë¦•sÛ¶m+‘‘‘2zôhS)Ø+p«á]Ë¥K—¤Zµj¦ê°{5akÚø\†wHøÁ4ç·ÔÒ¥KM_£Fä—_~1}_ýµé{õÕW3\–ƒ3 k5á"EŠÈ_ÿúWûù¤¤$)P € «Ž;šêÈ­.¬!á±cÇz¼½€¯jÕª~ï—_~)ݺu3Ë6l˜$''³Ó äÔôJ_=¡ôª`ý·téÒ¾|ù²ÙÆgžyÆî{á…ì‰zÅòÍ7ß,=ôüøã¹² Öúô  ò¦z*V¬h¦ùðóµlïƒ>×: € ¡ ÞìÚÅX€À¢·¦µBÂ¥J‰¤¤0&z¥û²õÝþñÇç¶Å¸.{öì1z *$<òˆüðÙNŸÑ¹ kÿñãÇÓM›âõ],£°{0ù³Ï>Kwþè·ß~KPÎnHXõîÝ[ªW¯n??a¹馛̹,=w¥!b­,¼|ùr»U®\Yºwïîñ:/^lWJÖ*ÆþÐBDºl]ǨQ£¾(„„µ&MšØ·ñÔƒÿ÷ÿgn¡d]½|½ô¤ž†jSSSsdy™…„õêëÙ³g›ƒú¸U.UÔr%¯[·.Ýózë%ëùë û?]þˆ#ÌÞrј1âø©å" Xô"¦òå]Aá×_gLÔ´Ú˜õ=ZÛøñã}^” øãüù󦪭V·mÙ²¥_A׌BÂÓ¦M3ýû÷ïÏrÚŒBÂîÓY!á>úÈîË©ð»ï¾kk`W+k5à§Ÿ~Ú<§f}®L™2R£F öÀ¤9sæHÑ¢EM!­À|îܹLÇO×·zõj)W®œ”-[VæÎËŽ€AH@ÐÒà©wà6§ù:hq=2 ;vÌž¦V­ZæÀÅÅ‹sü5éú´ÚrñâÅMÅbo?ü°©fœ!áœ?„·•+WJ§NäôéÓ †?5:”qç½(Ò Ƙ ¨-Y²Ä#$üÆo0(¸nGŽ‘Aƒ™°ðƒ>(‡ÎpÚŒ‚¿Ï>û¬éw?®¨!a='ö_ÿõ_¦Ð̧Ÿ~ênÖsg… –^½zù=~'Nœ0Ë*P €<õÔSN§uš6m*%K–”‰'r!‡0€ õŸÿüÇ\1|×]w™Ÿ3¢WXß{ï½æÊ_ ¿öïßßã¶L±±±Ò¸qcsrLLŒ¹J8!!ÁôW©RÅ„¨[·®™fíÚµfžmÛ¶™õjжaƲaßëÞ¼y³ÜyçæÀ‚N¿uëÖ,CÂJ+$ëú¼_‡^í|Çw˜×Ý·o_‰‹‹Ëtú¯n«.ëõ?ªséú*UªdÆAo‡úûï¿Ûó^¸pÁ̧Wf{‡„gΜ)Í›7÷XWRR’Yö{ï½g»ÐÉhü¬ñNKKóÿŸþÙ¬Ò[IÕ¯_ßBÕ¼yó¤AƒR³fM³ Ùkùz;¬‘#GšmºõÖ[ÍmªôÊðPç^9:""Âüh8üÇÌÕõEEEù¬œ¥·«X±bŽ„Ð¯uš° ·‰ÓÀÍ’%ügS¿~®ð=÷0jÜœÏÓsX-Z´ðؾ»ï¾[ *$'OžÌÖøuèÐÁçñ¦çÓZ·n-ÅŠ3wÑóT@("$ ¨=þøã悆D¿ûî»tÏïÙ³GŠ)";w6,ôVAêÕ °V"VÖAˆ®]»J›6mdÆŒ&°«ÔèèhóÜ”)SÌUÎzÕ¶ÀЫ•(kÖ¬‘=z˜3ÞÕrwïÞmÖÝ»wo"ÖJB€Í,$¬ag­@¤Ë[´h‘ÇòôÖHÝ»w7ËÑ×Q¯^=žu§·`Ò$úzׯ_/o¿ý¶ÜvÛmë´BÂÖm›ô_˪U«ÌUÚÖÚî!Î?ÿùÏf»Ü:tÈL·páB±Ô:_F™úõëgð¼öÚkrûí·Ë7Þh(éÁ+}Oºté’î*sÆÄZ¾¾OíÛ·—I“&™À±öém¶Bµ-]ºTfÏžmÆK·ÒÊm¹¸>mzõ½·7ÚÏ_oHxß¾}f}Öï²µ|=AöìÙðþã8ož3pã66å¹ç\!áÊ•E|\` =ž`}ÏÑ.è®—žwºï¾ûÌ9*-ŠâÎ:~®ÇþuºsçΙ",ZEwÁ‚>§ÍËðñãÇÍ4µXVêÕ"#¾–¿eËû³µn¿»;v˜eh°wÅŠ¦No±èy =?¦aâ/¾øÂ™Ñs#-¢¢w-ÔsxO>ù¤©8 „2B‚šÞzhÈ!æ`AÑ¢EM˜To9d騱£©Zê^iX¿ükV+к¨0`@ºåûºý‘.S+ÑZ4Œ¨áÙ±cÇzÌ«¡T­Úê¾=fÔåéÉ+T©U5«•|µ’qV4ë½míÚµ3‡ÎŸ?o÷é•Ïîë´BÂZAX×¥Wc[zöìiÐX¯'$œÑøetIo•¥Uf•Zµ¯Q£FòË/¿˜¾¯¿þÚô½úê«Ùkùî§ôàSµjÕLµÛP¯&ì]©Z÷G½b^¤éïOn¬¯téҦʶV,ööðÛߋœ ûÚ¿ð‡nÝœ PÅÆºBÂÚvì`L´ôû¥dèæøNH¹IÏáhu\wÖñs-Ä¢w‘ÔŸ###eòäÉéæÏ°7nœ9/¥ýZøÅ×4zÎFÏÁé9¿_ý5ݶëgm=Ça}þÖå 6Ìc­Fl­GÿÕóÉÉÉöó›6m2ó¸ßáe„„„­è[¹reó…ÿÞ{ï• .˜ zdèСé¦×ÊÃMš41?[!RRRÒMçBÔ«^Y¬aÜåË—ÛM×í~²ÒÛy¯[šUÖí4h©ä«WAùå—>_«\õ`ƬY³Ì|Z=ØÚ6 k5ÞÌÖi…„•†8u;5è¬W\ëüz€%?BÂî·À²2¹¯ß×A¦¬ÆÄ×ú,zPHûõêõPæVºï7nÜØc:­ü¬ÁyýÝЫêûöíëóĶÞ~Kíz`Mÿݶm›YÖ믿î±iø\DjÝ¢¿—:ßÓO?îý9s¦4oÞÜc]IIIfÙï½÷^º÷RoMV¥Jó¸nݺfºµkך~ýY÷ge=Ö°ü³Ï>kªyׯ_ß®, •´ú´VûÒmÈî˜XË×ýW+7è6éÌ &ä_ý̑ҥՄU|¼HÙ²®ðܹŒ ‚’u1°ÕôÎ&î /¸?×óBz^&7 …\/-r£Çþ­¢1×JÉ=z4ÃãðÚ¯ë Ä1ò!a!C|èíô ˆ†S5ôë]µ×¢Þ²zBZ2‘*﫵L Ö¨Qã=ðÀö|zpB§ó®.œYHØ qê ½\+±jx×¢·;kSƒ:Ÿ†4•†]õ±Þ)³uº‡„×­[gžÓʽóçÏ7ag=0“!ák¹=«1Éìý6mšéß¿Hÿ^¸ï_ZQ{É’%æ}\´h‘ÇtsæÌ1¿ZY¯à¯W¯žOw¾Ö*Ü;w–õë×›ÛuÝvÛm>÷¯wß}×ôë¿–U«V™ü§Ÿ~zÝû—x£££Íã)S¦˜}íÈ‘#î_ýúõ3z­¢pûí·›ªÝº/Õ®]ÛT ïÒ¥Kº}ÕŸ1±–¯•ÃÛ·oonc¦cíÓ},_Ìž-Ž_ M+ð\zaS‹®ðÓO3&J7nô Oœ8Ñ\È ä¥ÌÎuo„„„=ø!]»v5Hýù‘GI7VêÕê£*;!a ÜjµÝ^½zeº§OŸ6óõîÝۣߟ°²Â»ÿú׿ì>­þZ¾|y9|ø°y¬Õ“Ý«æêë½á†¤cÇŽëÔ““…„õ9 KßÿýÒ¶m[;ÔìoHøàÁƒùÎjL2{µª¬öë{ʬýK«þj0V+ù&$$d9Ÿc½ß;­ ­û¿^éoÑ ½îa|kÿÒ Âº.­(léÙ³§ÄÄÄäKýÁ´+h(^û5j$¿üò‹éûúë¯Mß«¯¾š­1±–ï¾_êï•Þn8***ª ׯ/Í ð è ;>+ÁHoßì¶¾¿y‰0€ŒR~ýõW)Z´¨ ½* zWþÔ°©†% dgvà$66Ö<·sçN»O«‘j5Õ“'Ofº-¼å–[<ú6oÞìWHxñâŦï•W^1õ9ïʤV V—–fÍš™`¦VØUJÖtF!a5|øpüÔ€qbb¢éóâ|î¹çL_êÕI5pÙ·o_Ó·`ÁŸcékür*$ìï˜XË×êÎî4­UdCµé8è>¯•|5$ÿå—_úœ^®zkÜY³fy®õýÖýD÷w™Uª~衇¤X±b¦"vZZš™?..._BÂî￵¹¯ßW=«1ÉìïÇ€L¿VøÎSŠè8êí»Ýĉ®ðÿ·~ðbLt† b„õ;ÍÇÌ  Ï;wÎÏ—Â!aAKCŽVUR=ø‘””$Æ 3'æ–-[f¦yï½÷Ìã &˜±ö´²©ž¸Ó*¸*³°N¯áY]VœÕ°àŽ;LŸ-W¬XaÂ[¶l‘•+WzÌkUªíÑ£‡¬_¿Þ„›6mêQuUY!NÝf -þýï7AÎ"EŠÈÌ4ºÞŠ+JóæÍMWó 64óÍ;×^–ökõd J÷éÓÇT3}ê©§Ìtºk}î!a+0iUVV¾BœVߘ1cÌëѪ°ZÉ7³°¯ñË©°¿cb-¿U«V²{÷n³¯Ì›7O (`ow(ó¡_¼xQ:tè Å‹7á]‹Ë,‘‘‘fÿÐp½Î·mÛ6û½ÔÇO>ù¤Çò3 [±µrïüùó¥råÊ&lœ!ák©TÕ˜dö÷CÃëÚ¿ÿþ¼}Ã}T¤eKþƒÁ!6ÖÖÏ‚nŸë€`a}Ï×V§Nsa$‚0€ µoß>©P¡‚9§ATý·T©Rvõ]‹Vå-[¶¬}Ò®fÍš&$hÉêLãÆ3ÕyušÕ«W›>=éW«V-{™ú¼”ÝiS+íjU§iܸ±|÷ÝwV¶Z™2eäž{î‘O>ùÄcy‹-2¡XëÄãöíÛMPY—¯!L‹Îׯ_?éÒ¥‹¼úê«&èhU’µÖçÖÐfBB‚|ûí·vŸ¯§^}®•h5¼¬-::ZöîÝ›iˆÓ×øådˆÓŸ1±–ÿÚk¯™ýCÖЧÞ6øªTm…wÿõ¯Ù}ø._¾¼>|Ø<¶ª2[UsÿóŸÿ˜ß³Ž;z,_ÃÚ…„õ9ýÝÓÊÞZ¹yìØ±î_¾BÂäÏÏpVc’Ùßë" Çç™´4‘Ò¥EÞ~›ÿ @pHJ)QÂ~ýuÆAG/òµ¾Ï÷îÝ[⹫`z> S§NAS@ã÷ß7w*Ôc´Z°}„„= çéI8­,¬Ub3rôèQs«¥kqþüyS©X ¹Óåér3»}“VNIIɑתÁÜÞº=º]™­_ƒ´z²òwÞÉ‘møùçŸ=*Ð^Ïøåظ‡8uZ ”j5Ýpá+$¬Áyí³õúœ>Öê·+«^K³fÍLà[ƒçÖØ?òÈ#†„ÕðáÃ¥páÂ&`¬Ÿ•¯ðsÏ=gúRSSí÷QCö™UªŽ5õ ±%§BÂþމµ|ï¿-Š®]»vÞ¾Ù&ˆT¨ ráÿ1€àáøŒi‡„{÷f<Tôû‹ûE¿z畜úþB›{ñ-zQ®\9SC›¼ï gɪ˜J^Óc°zw@-øa!¹í¶Ûä‹/¾`ç€l"$ !D°+W®4'%õ`ßúõë¥Q£FRµjUS 6ÚÁͼfl^¶l™ åþýï7•®´ôÌ4ZñW+27oÞÜy5<Û°aC3ßܹsíeiDD„-ZTúôé#ÕªU“§žzÊL§ë±Öç¶¹uëÖµû|…„­¾1cƘý¶gÏž¦’of!áãÇ›ðqLLŒ©Ø«¯#§BÂþމµ|=`½{÷ns¡Â¼yóÌý<­Æ¡A­Â7{6@pÑ;²X!á-½ƒ{Hxâĉ ð‹uÜvùòå²víZ™9s¦ ëÝÖ¬b ¹!£ðÆeĈÙ.’½¤¾N«0Dvè˜èݵ‹”øôÓO%**JªW¯nŽÝ²4GÓ{Ómp´¯í-lÛïü©@€ $ !dõêÕ&À©ùŠ/n‡3wìØ¶cBHø“ÖeÊ”‘{î¹G>ùäé´â´†buš:uêÈöíÛMå »ê‰o‹Îׯ_?éÒ¥‹¼úꫦª°Î£ãl­Ï=$¬päÛo¿µû|…„µòó AƒLxY[tt´ìÝ»×L·pá ßËqãÆÙ•$tÿÏ©°¿cb-_X—*UÊü¬Õ-&Ožœ·oô˜1"5kjº™?„ ¸Lê —.-ræ c‚ 1jÔ(ï[Öw€¬øºÜTÇgc÷c­¹!£pnxóÍ7ͺ´¸IN9r¤Yž†‰ÝèhÏ;ZOG«ãh‘â<ùN£i;ÀŸ:BÂb4l™””$ñññæ£>gZÙõÔ©Sa?þÐÄî¥5à«ûRfc§AZ=0ûÎ;ïäÈ6üüóÏÙ®Vqþüy³º½y=&î!dVx_¼x1o߸ƒU„ß}—Ÿ÷ßw…„µåò한Թsg; ¬ ê……þð^·né›4i’y+76wÔ»©i¥a-È`Ù¶m›Üu×]¦`ˆÞmÆ éÖ³yóf¹óÎ;M¡Ö*àà¶Ö¥•{-û÷ï—nݺ™¢7Þx£4hÐ@6mÚdžÓ£G–;î¸Ã¦èÛ·¯ÄÅÅy,¯J•*v!]¶Vöw»}Ñ 9:¾VëÄ .íh­¥£Å8ÚCÂÞÇ9÷ìÙcæÕ€ð[o½e¾Ó§O7ËTsæÌ‘îÝ»›eêÞêÕ«gBÄ ëÝât™S¦L1U…9â×vû¢EZ´ha‚ÇùEÀÍÄyr½ƒ£-s´dveA€0ð‹ì-Z´¨9°«U¬*;vìÛ1É÷ð¬YÎ*ÂGްƒ€àÕ¸±+$üÄŒ‚BjjªÖ6`ÀsA%€?¬ðL€÷ñÇ—B… ™ »Z AYÇõs†·Ž;Ê­·Þj?Ö»³iØvìØ±vŸpo¾ùf{yîŸaÆï±<ïãœíÛ·7?ÿüs¿^†…½«üj0ػϟíöEƒÆº¬+Väýç>Gë#ΓêÝí »/€ CHøM+6hu¬øøxSµB‡³sçÎÉ©S§òg6nt„ß~›·!C\!áöíýNäÖj|—.]b`€_¬°Õ4(;|øps¬Ñbw½/Dºr助òÛ®];Y¾|¹Ý*W®lªûZŠ+&C‡õ˜WÃYU¶–_®\9ósfôóOrr²Ìš5+]¨Ø;$ìïv{‹•ˆˆ™7o^Þæs´ÊŽåh«Øm)BÂò×ï¿‹8@£_ûê+‘ DÑ[ÊZ“ÂÈ ‰‰zoc¯ƒùAiòdWH¸Bççj ÀM›6Í#س`ÁøÍ ¯ZµJ:$/^L7MFw1Óаö—)SFjÔ¨áÑxà3†uï ½þ„„­å[Ëòåĉ2xð`‰ŒŒ”J•*Iƒ Ì<Û¶m³§ñ û³ÝÞ/^lÂK–,Éó÷HCÁ%ÄY=8™]@#$ iØÒ:L£…ZÓgÕª"Íš‰tè ¢Uôà«V<Ð*°„p-V­r†g¢£ ¥€ÐðŸ£W¯fLð† âÞ´iƒüf…„õnmÉ($¬AßÂ… K¯^½2œ÷ôéÓfÞÞ½{§›7«°µüªzl;Mš4‘òåËËa-¢á°fÍš,+ û³Ýî>üðCSaùÿøGž¿?ËÄŽq4ŽÀv„„ä/* ÓB­’p|¼H\œ³i˜óí·E^~ÙÖ°†…kÖ)XЀ(QB¤uk‘Q£D–-I¦&2–æÜ‡t¿Ñý‰€0ûö‰Tªä OœÈ˜ àµjÕÊ—p|¯³Â/þ¸ž°ºûP¡BròäÉ çŠŠ’[n¹Å£oóæÍY†„­åëã¯ô8¸Ýf}Nï¬`±BÂ[·nµûbccMßÎ;³µÝJ·C+÷èÑ#Ïß›xq„ŸÂB!aòƒ<tVM3ÆÖÀ°†"4D#2¾³â°†’5¬d h‡Wý‹/œas­¬•©ußøà~@è}6nÛÖ¾ÿ~ƯtéÒvH¸Y³f’Äb@6\oHxÇŽrà 7HëÖ­eÅŠ’––&[¶l‘•+WÚÓ<ûì³f~ Ú®_¿^^|ñEiÚ´©é?~|¦ëÒ°o¤Q£F/GŽ‘ ˜ñ%Çç÷Š+JóæÍ%11Q>úè#iذ¡™îܹö2?n¶1&&ÆT6ÖùüÙn5zôh³¼#FÈÂ… =Zjjj®½/ZÂ#ÊÑúa¡ƒ0D«¨Íž-Ò§gÅaZø6 kˆ|É‘3gø¡Éºc‚¶ÿþoÆMƒ)V@XÛC=”«az®7$¬âââ¤V­Zög’’%KʰaÃìçÏž=+}ûö5a_}¾qãÆòÝwßùUIXiø·R¥Jöò+T¨`‡y-Zd‚ÂÚ_§NÙ¾}» þ꺖.]j/cܸqf»tºÕ«WûµÝªOŸ>Ÿ·Ü›{eâœÖÁÑZ:Ga„Bºo¿¥’p¸Vþþ{ö&Nt…„‹INfL°4øâTùË_þ €|sêÔ)9zô¨\½zÕçóZ­7%%åš—ÿý÷ßû¼ êòåË!ç+W®˜»+xoÇùóçM¿>ŸíÎk›.áhIìRB !aä/­Hæ~7…… ¬Q£Fy„„õÖÛ^‰ŽVÐÑæ3B!aä¯]»DÊ—w…„©ÌŠÖ«W/pBBƒ¤.9Z3GëöÇÏj  ]¸ Òª•+$ܧc‚€Õ A; \ºtiùæ›o€ 5ÁÑJ8Ú†@ˆ"$ €ü7p +$|×]ŒV©R¥ìp³fÍ$))‰AB‰Žéh³ !Œ0òßĉ®p©R"ÉÉŒ N²c¿´ÂÚzè!IMMe`‚ÌG«ãhíÃa\¹rE:uê$ ,‰×óûï¿ËÎ;åðáÃrùòålÏéÒ%Y¿~}®lÛÊ•+ÍXŸ>}:G–·mÛ6ùå—_؉à!aä?=m…„µýóŸŒ Î’%KóÌ3ý/½ô’éÿé§Ÿ‚âýݺu«´jÕJ"##¥dÉ’fÛo»í6ùâ‹/²5]ºt‘©S§šÇÇ7Ë9þ|ºiÛ·o/÷ߦËóìg×Çl^ãÉ“'ù@:„„ÿâãEJ”p…„Ÿ{Ž1AÀ1b„GHxáÂ… aè{GÛàh_9ÚZP´=޶ÄÑV:ZMG‹r´]ºY!áåË—ËÚµkeæÌ™&(\°`AILL̵õfÞ¸q£ù|öìÙ[×¾}ûÌëÌ»r蘽öÚk’––fª#úé§%Õ«W7ÕýñòË/K•*UìPpvB¾^›÷z‡‚½Ÿ¿–ñ¹ï¾û¤ÿþü@:„„ÿÒÒD7v…„;wfLp´‚›{HøóÏ?gP&}ÞÑš9Z qž`¥o«-Îàp ²BÂÇŽ³û´¢­öi¸4·dÎ o¾ù¦Y×7ß|“'c:räH³> ßfE«ñ+VLV®\i÷e'$ìÏk˪rðµŒÏ¡C‡¤P¡BÇmx $ €À U¬pÕª"~VyòŠV ³ÂúsRRƒ@Óš­Ý­ 8«Ïjtr£í* s%᪕„ÝCÂëÖ­3}“&M2ccc¥qãÆ’’’"111¦ÒpBB‚=ý¶mÛä®»î’âÅ‹KÆ eÆ éÖ³yóf¹óÎ;¥dÉ’fÚ­[·ú [ëÒʼ–ýû÷K·nݤR¥Jrã7Jƒ dÓ¦Mæ¹½{÷ÊèÑ£åŽ;î2eÊHß¾}=‚«º<­Ò«ëª[·®Y¶Vÿõw»µ:ðôéÓ¥eË–fºÚµk{¼v_&OžìwèvöìÙRºti>C½6ï1ô »?ïk]»v•víÚ™×înýúõÒ¤I9qâ„yÜ¡Cy衇øã „„ôd´ŽˆÐ3ÏŒ †Þê׽аV&$ @èšìh‘ŽÖÖÑâŽrFœáï Ž–€Ûç+$ܿӷfÍóØ ™jx´M›62cÆ {ú;wJáÂ…eàÀfú=zHÁ‚=²»wï–"EŠHïÞ½M÷7ÞêÕ«û {Z÷ìÙcæÕ€ð[o½eB°ÚÕeª9sæH÷îÝÍ2W¯^-õêÕ3!b‹†ˆ£££Í2§L™bªæ9rįíVï¿ÿ¾Üpà 2oÞ<Ù¸q£Ìœ9Sȸ6ôÕ«W¥E‹&xë¶mÛšà­;C½6ï1Ì챯eL›6Í<Ö×ëNÇYß÷íÔзw˜á0ÃÂ…®°¶×_gL0âãã=BÂ?ü°G55.8ZqVžïhÜÛ"4iPX«CwÀ÷Ø kðU¼?þ¸*TÈTؽ|ù²™Æ •0 Ýü;v”[o½Õ~|öìY¶;v¬Ý§Ü›o¾Ù^ž².Š?~¼Çò¼­ŠÕÇŸþ¹_¯GÃÂÞU|5øêÝçÏv«!C†HU½óŒŸ4h«ëZ±b…_Ókø¹OŸ>}þ†„3zmÙ ûZÆéÓ§¥hÑ¢æµ[~üñG‰ˆˆÅ‹Û}ÖÖùŽ?Î/9l„„ôö´‘‘®ðSO1&Võ.«Y·z¡CÂV…Ù] GÈKgµèÙ¶]VHØj”Õê©S§ìi¬PiJŠg-d­ «U~Ûµk'Ë—/·[åÊ•MÕYK±bÅdèСój`8«JÂÖòË•+—eµÚK—.Irr²Ìš5+]¨Ø;ëïv+ ÅZU”µênfbccMV«ûCÇ@«3Æ£?¿CÂjРAR¢D žVS§N•R¥Jyl“Ž™Î·kÁàBH!5U¤^=WH¸[7ÆC«v¹‡5þùÏ2(„L–v´ƒ Eؘàh%-9€¶É ¯ZµJ:$/^L7w¨Ô¢¡aí/S¦ŒÔ¨Qã=ðÀf ë4Þzý [Ë·–åˉ'dðàÁiªò6hÐÀ̳mÛ6{ï¬?ÛínΜ9¦²®zG-çÎK7†‰5 ¼dÉ’l¿.÷ÑGõèÓǺ}gΜI7}Û¶m¥gÏž¾6_ï×µ„„µª´öéë¹zõª›Ç{Ìc[Þzë-» 5`!$ €Àѵ«+$\·.ã€ÑªU+ðÎ;BÈ,G+èh0aå’£5r´ž´MVHøØ±cN“QHXƒ¾… –^½ze8ïéӧͼ½{÷N7oV!akùU«VÍpùMš4‘òåËËáÇÍã5kÖdYIØŸíö¦aä#FHä)¯»Ð|øá‡¦ó?þñl­ZµäÞ{ïõè›þꫯÒ-W·YŸ›6mšÝg…„·nÝj÷ÅÆÆ¦»ðΟíö¥C‡&ØkÑíÔŠÄ=zô¸¦ñŽŽöXžZ¶l™]Å×V.îøÞ:cÆŒL_[vC¾–¡ž}öYS=¹}ûöÒ¸qãtÛ>`À©S§¿Ôð@Hãõ×]!amn'—ü’ššêQE¸uëÖ„„ZI¶¦£µýãg„'Å–p´äØ–ë ïØ±ÃIõ3ëŠ+$--M¶lÙ"+W®´§Ñ°©Î¯AÚõë×Ë‹/¾(M›65}ãÇÏt]öÕê½5’øøx9räˆ,X°À„Œ/]º$+V”æÍ›Kbb¢|ôÑGÒ°aC3ÿܹsíe?~ÜlcLLŒ©z«óù³ÝjÒ¤IòöÛo›0±VÒÕ@p÷îÝíçGmÖ§U†.\èÑôs}VÖ®]kªÿúë¯vßï¿ÿnBÕUªT1¯Y·W—5tèP)R¤ˆüðÙ¾¶ì†„}-C:tÈþN2gÎí¾zõªÔ«WÏŒàŽ0ÇgŸ‰,è ÿÏÿ0&Èwï¾û®GHøá‡6¡ü&Kà„C‘¿4(ÞÒÑÎäóv\oHXÅÅÅ™j¸Öç×’%KʰaÃìçÏž=+}ûö5a_}^«Ò~÷Ýw~UVþ­T©’½ü *ØaÞE‹™ °ökUÛíÛ·›à¯®kéÒ¥ö2Æg¶K§[½zµ_Û­†nϧÿjõÜäd×opŸ>}<>»»7ïʼ¾h ·Aƒ2räHþ]»vIýúõÍr"""Ì¿z·‘ÿûßé–áýÚ²Îh|TË–-¥hÑ¢é¾hõáR¥J™€1àŽ0Ç… "z{T+$ܺ5c‚|7jÔ(pÕ¹ +Ô€ðË þØ¢­„NUéS§NÉÑ£GM•Y_4hš’’rÍËÿþûï}Vç½|ù²GÈùÊ•+æNÞÛqþüyÓ¯Ïgg»µ_ç»xñb®ŒÛîÝ»M…à/¿ü2Ýzõ5oÚ´I<˜éú3zmÙákZ™yРAÓiÕãòåËË[o½Å/2Ò!$ €À¢·ŠµBÂ7߬¥œä«^½zy„„W­ZÅ Æ8ZiGãþ°Ä‹38þ„„NP×Fï&â]M8¿}òÉ'æûˆV\v÷¿ÿû¿2yòdÞ4øDHå/q…„µíØÁ˜ _éí†ÝCÂ{öìaPrZ;Uà³ xYöǾ#…ÃÝo¿ýPÛÓ¥K©Y³fº ˧OŸæÍ@†  °,ZäžEtù«T©Rv@8**Jâãã‚Üóâ¬"|¡€zß ws´d†"55•@0²0‹Viu ?ù$c‚|³oß>*ÂíÚµ“]»v10±3â O`( ½,¬²£E‰34 Áˆ0KZšH¥J®ð}÷1&È7/½ô’GH¸_¿~ræÌ€ ¶ÄÑ"… ±ÈZª£õçIu­*|„!d  ð´oï W¯Îx ßÄÄÄx„„Ÿ¤²5A¯ƒ8ƒŸ€¿>p´fâ<¹ÞÙÑ– !sÁ0ÏO¸B‘‘"Éœ‚GþhÛ¶­GHøõ×_gPbIŽVÐÑ62¸ëÄYQ¸ôûQKG{ÔÑæ‹3Hœèh‡mƒ£}åhh´ l¿ó«R  ðüã®°¶÷ßgL/*T¨à^³f ƒ@›ìhQŽv‰¡ÀuÐýGƒæÏ8ZOG«#ÎÐðÿG£…@;À¯8@H!$ €À³i“gHxêTÆy.--M"""ì€pTT”ÄÅÅ10±šŽ6Ša@n}~* Ó¨$ €ÀBH'%E¤lYWH¸W/Æyn×®]U„Ûµkgú@pJçÉQþ7„ BÂLÍš¹B·ß.r‰›B#o½ôÒK!á~ýúÉ™3g‚ÔG«êh|ª„ BÂLƹBÂÅ‹‹|öc‚<ã3f ƒW®\‘N:É‚ Âæ5×t´Q¼õ€0BHiêTWHXÛ+¯0&ÈSmÛ¶õ Ï;—Aä¨^xÁþ¦@R®\9iݺµ¼÷Þ{¹¾îË—/›õ>óÌ3vŸUEÿ§Ÿ~ ¹±Þ'Σ»Øía„0ÓÇ{†„cbä) j¹‡„wìØÁ r”^¾|¹¬]»VfΜiþÿ)X° $&&æêº}…„7nÜ(#FŒ³gÏæèºöíÛg^kjjj¾õ,G+íh—Øía„0Ó‘#"7Ýä wêĘ Ϥ¥¥IDD„®\¹²2LW±w÷îÝR¤HéÝ»· â¾ñÆR½zõt!ak=?ýô“y¼gÏ3Ÿ„ßzë-î>}ºYžš3gŽtïÞÝ,oõêÕR¯^="v§Aâèèh³Ü)S¦˜ªÂzá¿Ûž>çIÑTv9@˜!$ €À5q¢+$¬mñbÆyB+!º‡„'OžÌ rœ>pà€ ïêE)… 2Õu/_¾lOg…w à1ÇŽåÖ[oµŸ={ÖmÇŽë1po¾ùfe¦¦¦šeê…1Þë±BÂíÛ·7?ÿüs¿^†…uzï ¯ƒ½ûýÝöœ0ÆÑê³»Â!a®ØXÏðSO1&ÈzÛt÷ðªUÜ ó¬°Õ4$;|øp9uê”ÇtVx7%%Åî»r助òÛ®];Y¾|¹Ý*W®lªûº+V¬˜ :Ô£OÙU¶–_®\9ósf.]º$ÉÉÉ2kÖ,Ÿ¡bïpv¶='4gP€pCH+>^¤lYWHøþû䉨¨(ЖVx §Y!a½åСCrñâEŸÓyWøUÖ¾2eÊH5<Ú<`O§cλBoV!akùîËòvâÄ |Ø<^³f_•„ýÝöœ ÷ˆt4>AÂ!a9†0 Wh Å kÛ¸‘1A®ÚèØÇÜ«wîÜYŽ9ÂÀrí{ôµ„„ÕÝwß-… ’“'Of:¿VÈ¿å–[<ú6oÞœiHØZ¾>þꫯÒ-S·YŸ›6mšÝg…„·nÝê1mll¬éß¹sg¶·ýz u´ìj€0EH@Ž!$ Èþ³gHØ-ˆä†ñãÇ{„„üq9sæ ȵïÑ×Þ±c‡Üpà ҺukY±b…©†¿eËY¹r¥ÇtÏ>û¬™¿G²~ýzyñÅ¥iÓ¦¦OÿßËh=ö-P €4jÔHâããÍE3 ,0ãK—.IÅŠ¥yóæ’˜˜(}ô‘4lØÐÌ?wî\õ?~ÜlgLLŒ©l¬óú»í׫²£MfW‹®\¹":u2€@CH€ìÝ»WF-wÜq‡”)SFúöí+qqqé¦ÓÞÓ§O—–-[JñâÅ¥víÚ’`?ŸUHØŸõ 4H7nì³iu¡#FH»ví̶¸Ó“œz›Ó'Nð†@¨™7Ï3$Ø Wég÷ðäÉD‹¹ãzCÂJ¿WתUËþ«dÉ’2lØ0iΞ=kþÓÀ¯N£ß±õ»{V•„•†+Uªd/¿B… vwÑ¢E&(¬ýuêÔ‘íÛ·›Ð¯®géÒ¥Û0nÜ8³m:íêÕ«ýÞöë‘(Γ¡ûØÕ€°ù{ªMÿ•+WÎü=zï½÷r}Ý—/_öëï) 9sæH÷îÝå7Þ0'êêÕ«' 4H7Ýûï¿oªüÌ›7Ï܆{æÌ™ràÀûù¬BÂþ¬çwÞ‘7ß|ÓnºŽÂ… ËM7Ý$¿ýö›¼õÖ[f½n5¯ËmÓ¦ o&„¢?)XÐnßž1A®ÒŠˆî!áU«V1(€€wêÔ)9zô¨\½z5Ãi´ZoJJÊ5-ÿûï¿—ÔÔÔtýŽs9ëE½III>·ãüùóæ9ï ýÙök1ÁÑj²kÙ²oß>sŒÏ×ï{ ³ŽK._¾\Ö®]kŽ)jP¸ ã»¤V;ÏM¾BÂzìR‹èE¼?ÈO„„¤£!^=°ýÍ7ßxô2DªV­šá|Y…„ý]EOöìÙÓ„„õ§JoKZ´hQ³-–üQ"""dñâżyŠ’“EêÕs…„õÿ¢K—äŠ .H‘"Eûì3³Œ/¾ø‚7B™†‚ÝCÂãÇ3&ÈO<ñ„GHøñÇ—3gÎ00‘ ަõQ'04ä©Çs¬;3åä²´Ú«JMMÍ•õáúèúmÛ¶5îëEÿZñ7#<ÕÏÁVÀôôéÓ¦`À!Cìi~üñGÞÕ»Ž)+ûâ‹/ÚÓè1½jÕª™jÅîÕ„õxžV¶èþ¡Ö±cÇúÜ=N¨ÕwušaÆ™»“ùb—|xº@´µ­)))¿sþnW±bÅdèС}ά’°µüråÊ™Ÿ3£áj BÏš5Ëg¨Øûý¹ž1@x $ „9=ð\±bEiÞ¼¹$&&ÊG}$ 64›çÎë1­Þ*ðí·ß6áµro™2e<6[ã—.]*qqqMOdµ­*¢·ùÓJ$ºŒ¯¾úÊ£Y'”ÞrÐ:请ㄸƒEªUs…„›5cL+j×®í.xçw‚ˆV®ìhCƒtûõ‚êúõë›ê«îbccÍEÒx9r¤T©RÅ\d=aÂ*­îÓj2&&Æìþ´´4é~þùgs1¶^°­ë^¹r¥y~Þ¼yÒ A©Y³¦Ìœ9Óç:tYú³n~vª[·®é_»v­Ç4z·†~ýú¥{½«W¯–-ZØáS­x«•_õSzÜH+ÂzÓPäôéÓ¥eË–f:ýü¦¯Ï²}ûvíÙ³§©p®ô8šVÞձбڻw¯_óù ëû }K–,1û[5ä±Ç³ŸÏ($¬Å´ÿþýæ±î“úX)ê2ÜÛ<évézuÑý¹lÙ²éŽ[ZÇ%W­ZeŽ^¼xÑçr|m«¿Û¥¿:w…Þ¬BÂÖò3{zç¶Áƒ›jÏ•*U2¿{:þNdöþ\Ϙ < ‹-2^= \§Ns2¥uëÖR @Öµhõ’%Kšéô_­â~‹?ïŠîMO0eµ=y‘ÑüÚ¼«Àè ½Ý¡ur âî¹Ç.^\Äϓ܀¿.\¸`.Vrÿü¡·+ 33ÓãWŽv€–om—£½ìh]­´£%Ù~¤!L ËjµÖçŸ^~ýõWç­Àa=Ì]•ôBn ïzßµÉ}Ú®]»š‹±õÎz‡'ïp¤õXûwß}·¼öÚkrûí·Ë7Þ(/¾ø¢ ßê¼Z‰Ö;4ê¾, ŸFGG›ÇS¦L1!F­æë>ÍüùóÍχöØV­~ª¯IéqŸÂ… ËÀMXZû5àê]øý÷ß7w—ÒóÆM€Ùû3›†Dû÷ïo>Ûéòt{•¾v­¬cùàƒ¦{¼ù k0[+ÓvìØQ>ûì3ó¼ðµ?¸Óð¹öŸ>}Ú<Ö0­¾Ç½zõÊÖkX·n4mÚÔœ8q¢½^à]¤Hùë_ÿj?¯Ÿ³ôÂq C*  jud‹VÖ`«wÕÖ!C†d¶t÷å—_J·nÝÌr´ª®ûÅîáF«ùjeY‹?9¾[=zÔçtZÚ×ÅúøÕp¶†ÔµB´¯}Ë{ÿÕ}[Ãæî4^¨P!s§²¬lÞ¼Ù(V¬˜Œ?ÞT½ÎÈõ„„³³]úûvË-·¤ÛÎÌBÂÖòõ±Þ-Í›n³wàß oݺ5Ë÷';c €ðCH@Púä“OÌñ¸¸8Â…ž0u ?ù$c‚¥w=p wîÜ™0 C³Åy¢m‚PI8P* ¿âh7;Z G+(Îw Ú³g©Ð«Á¾GyD~øá‡L§Ï(بA`í?~üxºiSRR2]†¯`§U%öÃ?´û~ûí·tå솄•V_­^½ºýü„ 䦛n2ag )kˆX+ /_¾ÜnzÑV÷îÝ=^ÇâÅ‹íJÉ{ý¼»ˆVcÕeë:FÖaÊÝ»wË}÷ÝgªÏŽ92Ýóº/i8&&ÆTÎÕ÷Giufësòœ9s|î[­Zµ2Ë?wô¬!ð xL»cdz| ÿ®X±ÂÈ·lÙbîBfùñÇ¥S§NæýzÒñ½ïĉY¾®ë û³]ÊªŽ¬•®×¯_o~/´Ê±öi9£õhØWÇCøñññ¦Â³ŽŒuŒõîkÍ›7—ÄÄDùè£LqîܹY¾?þn;ÿ?{÷gS½ÿü`04á¸Rˆ¹'ÊpääòKJ“K'9£:ºŸH9~ISqNù9tô«˜Ôq?sH?—Œ ¹ßCŽ4j0LŒû`ðù¯Ïw[Û^û2³‡Áž½_ÏÇãû`¯½öZköÚì½Ö{€ÈDH@¡¤'Òô²š—ÒPHé NÏpçÎÔêÙgŸu„„5°sìØ1 ð¡Ôhq„Z6‹+ Ü÷Ÿ¡øœ¢üjbÖȦ!©Ý…‘(® ðØÝNí$Ú»wo~ôÑGeÛ¶mç l´»šz# ÕðéÓ§å׿þµ 0@¾ùæG¸ùìÙ³¦³íƒ>tý´»¬.KC”/¼ðBÀùæÎk:½jhò7ÞàxR4Ì®WÕÐ.Ï6ín«ûlnû§¾–ºèëíb½cÇŽkÌviPÚ»[w°vîÜiŽmzÓÚy†œµöúøÛ¯O(××!aÚÑõ·¿½.YR$-º ÀÔ©SÇž>}:Eø˜!®lK(EÈš,®p°Fð´©v}žÂÛ«AYí–«aá~ýú™€Ÿ7;„©@OmÚ´1ŸaüÍ{5CÂ&L0·W¯^ëv<ù䓦“o\\œõÑþ·ŽíkÕª•/^\öïߟ¯úi7\í êmñâŦkéÒ¥eðàÁrðàAÞ—aÁ‚æõÔŽµöOÝy\[„„PxÄÅ] ë?žš @äää˜îuž!áõë×S€íPÛ‚2„´câ '^¸ÝÇ1ÖH ñí^»v­¹²~&yî¹ç÷Ù!Ì–-[šùNœ8!cÇŽ5]tÇçwÞ«Þ»w¯-ZTâããM§^ýlåoùß~û­û³–n¿§U«V™eh°wêÔ©¦S«Î?mÚ4Ç|zµ‡ÄÄD&^·n”/_^ºvíê¾Ïž=Ò¡C)Y²¤<ÿüó¦ã0._§N¤víÚ~;ÔB!aú“3$üê«Ôâ»ï¾s„+V¬h.ß €§tqu¨M¤!¯›5¾ð÷lk4³F5k†ÿÝ—.]jºãz²C˜ï¿ÿ¾”-[Öü=::Z|-BÂê•W^‘2eʘéIII~çÑ€iõêÕ¥T©RrøðaŸm×.µÚØþL¦Ëëß¿¿cíFl¯GÿìÙ³§¤§§»ï_´h‘yÌ®]»x# ÌÌL÷GCëÚåÚ_€ÀµEHçN‰ÞÂÈïÈÚ$’1_$›®2P(hç`ÏpïÞÔbÔ¨Qްs ¼} ®Ž´Ç(EÈûÄ嬑sáv†5jX£¶„~Ga<·gÏž•íÛ·ËéÓ§Cn;OžC;wî²–£Ó;v êt]O(ÖB !a \hàu⯗:&Ù2Bä|û„²¯¿‰Ž¾¾çj‚ѯ_?GHX/•}ì0€S¬5úP†B!M\'B×xLÓ^³u­QÙ Ùó Ԁ܄/¯“ð÷ "S¢EֽȾ¡LC›;_ —/ïš\¦ßýîwŽððáÃ) À!ËQÖ˜A) íü®Ÿ×QÃÞÚ:±=B€KAHlé3D&E‰ìK- ” p1$¬cÉj‚ËV£F GHxúôéà(®`i¥(4úZ£‹Ÿéz ¡gÅu¢´›5R Ás9qâ„8p@Ο?Ï æ´ãuÚ…±Íó­±É[Œ«ú+#ÇÞ¾a0xÊΙ#ò#3Y‹9CÂR\–ï¾ûήX±¢¤¥¥Q€CekŒ¦ …ÊVq Í­S°ˆ­Ñà¼ÿÄ™”— Ã3¬1ÔmÄ@·—5.ì_Ö°ðˆ ûÞdq…ˆí¡ûkšÐI˜A'a BÂàmͳ"sšPUÞŒ‰¹¾ï>j‚Ëò·¿ýÍn×®!a€ÃqTÛJ) íÒšä¼ÉÖxØå.¼Þ~T\aÎ/äb€“àfdM^ÝV\Ø7ž½°¿D‰+¬]‚_Wx³îf W!aðvhƒÈÄ_¹þ„ž¬,‘-.†„kÕÉá´;.]¿~ý!áøøxk7ã‚》´ƒpEÊP(ÅZãé|>F?Y.W8XCÂú3bí$ý+ÃϨf.Öx×k¬‘ÍÛ@!$ þh'áõ\¾BÖï1$¬cãFj‚KÖ¶m[GHxèСà Ýe¥ …Rk4+Àå¥ „é$|±“0?Uê €?ÿyWdVm‘óœî€4r¤3$ü÷¿S\²Úµk;B“'O¦(‡âê&ŒÂçkD Ý]‘‰0øsÆ ·lÙR²³³Í4 ë´?þ˜×^F²È¤(‘ÓYÔB~戎¾®WO$'‡º (¥K—v„„§M›FQn+Äu"m+¥¯Z£eDBÂðqîÜ9Óù÷Þ{ï•)S¦¸GµjÕL×`rrr$==]FíÛ˪T©’ù»?vHxçÎîiYYYfÚ;ï¼Ã ‚kïT¦+$|` µ€P“iýÝ´©³›ðªUÔyÒÏ®žáråÊÉ‚ ( ÀíkXß…Ÿ…qͤ€AH>222LP¢|ùòR«V-ÇèÞ½»cÞ}ûöÉc=&ÑÑÑRµjUiذ¡yì²eËËò~œ';$üË/¿¸§>|˜0BËÌ"?Ž¥Šââœ!á?¤&ÈÓ¤I“!áfÍšIJJ …¸ ´F ÊVôú@üþŠR"!aø8{ö¬”(QB|ðÁ<çmÚ´©Üxã²mÛ6s{æÌ™ŽNÂö²jÔ|Z0 …ÅÝDV?M  î ÿñÔy2dˆ#$üøãËš5k( ÀíQkÄR†°£¯)ßî‘‚0üjÕª•/^\öïßpž]»vùyíðÒ¥KËÒi›6mò»BÂ(ÖYІ:@(š>ÝîÒ…š OqqqŽð /¼ ÇŽ£0·ºÖx–2„:D¡eÚ´iÒ¡C9räÅ®BÂðkÕªUR´hQ‰•©S§JVV–|ûí·æ ­-''GªT©"wÝu—lذAæÌ™#76!‹=.ó­á"EŠH“&MdÉ’%’šš*ãÆ“Å‹›û £Pøq¬HReê¡hãF‘¨¨‹!ᆠ© òÔ¬Y3GH˜Ïo1Öx—2„dq ÝJ)€àïØ0ÛBÂ(%%En»í6wp¢L™2Ò¿Ç<Ÿ}ö™ ëýuëÖ••+Wš`±†‚'MšäžOÄU«Vu/«råÊîÀ1!a ûRD&Z_¡NeR 5éé"Õª] —.íšm>Ûz†„§kGj.È×I4þw?zÝ€rB¸Ú6oÞ,¯¿þºdf:­…b 799Y  Çç…@¡GHy:pà€ìرCΟ?ï÷þ³gÏÊ®]»Ü·Ï;'iii~çß¹s§Ï` PÈÎp…„3’©„šœ‘ví.†„uüóŸÔ­Y³ÆÖ±zõj pÛ,t› g]¬Ñ1Ÿ·³ëСƒ¹ÂWø~5È‘yóæ]‘ekíߑ#G l™Ë–-“C‡EÄþ÷ñÇ›ÏÝÛ·owL§k/pe€`M‰Ù:š:@(zöYgHøÏ¦&È"Ø£bÅŠæGnØæŠë$Z6¥KX#J\]…¯í¦jÑ«qUªTÉ\™ëË/¿¼¢ëÕúë:_}õU¿Ÿ {HSŸ_§Näí·ß6·Ÿ|òIó¼Nž<é3oÛ¶må¿þë¿‚úÌh×%¯Û—â믿–Ûo¿]öïßÖï¹ &È-·ÜbêU¯^=¹ãŽ;döìÙŽ:jc‰„„SFIbb¢ãñú˜ŒŒ ‰7ï™+V¸ï߸q£Üwß}R¡B¹é¦›$..NvïÞmîëÓ§<÷ÜsŽí2dˆYžgÝuM›65¯§½¾¬¬,Çú5ÐhÕâÅ‹åî»ï6W-Ñ?5®ûûßÿÎ?¼¸f @°¾ª+²îEê¡èÿp†„{ö¤&¨ÿþް†r <°FEʶRÅu’tÆ5Z¿ž2eŠ JŽ5Ê„£¢¢dÆ Wl½BÂÉÉÉ2`À9~üx­kóæÍæy^Í+нûî»&ˆj‡‚óö·½Þuñ{ß©Ïùþûï7¡Öp¦\ ëjýÞzë-ÓU855ÕQ×^½z™ñðáÃÍçó¢E‹Ê¾}ûótîÜYZ·n-#GŽt_ÙnýúõR²dI騱£Ì™3G’’’¤qãÆæ=¥¯ÅÀ¥lÙ²¦Ë´Ò«ßÝxãî÷ í¿ÿû¿M ×ßkÌ6._¾\Š/n¶C»Yk€XÃÄþÞsÀÕDH‚µ°£È¢.ÔBÑ‚ÎpóæÔi(Ä3$üÄO¸»„ žµF,eku­Ñ÷­Û Û!G¥Ýouš†¯”@!á+ACP €IDAT º®íÛ·_•šjGØÒ¥KË´iÓÜÓòf{óê|©Ïù‡~0áÒ”””°~Ϫ]×–-[Jv¶«ûÚµkÍ4}Œç<=ýü´}ûöR¥J9sæŒ{Úž={LM_zé%™?¾y¬võU«W¯6¡âßüæ7f±5lØÐ„ý½ÖÁlã½÷Þ+%J”pìo4ó <˜tpÍ€`mxUdF5ê¡H»ÀÆÄ\ ßt“È…NQ€·êÕ«;BÂvÛÃÖèCšv‹®lkñ‰Ñ_HxîܹŽÏ%&L0]M322$>>ÞtE]±b…{~ <ÞsÏ=rÝu×™®©„ô¶xñb¹ûL™2fÞ¥K—ú ÛëòüÑÔ÷ß/]ºt‘ªU«Êõ×_o”‹-2÷iWX _6oÞ\Ê—//=zôp\uyÚÑW×¥]WuÙÚ19Øí>w1BZ´haæ«S§Žã¹ûóÁH¹råÓ‚ Ú^ïºxG=ï´ í4¬áQ}Nž´ÓlÓ¦MÝ]hÛµk'?þxX¿çò ïܹÓ=MkªÓÞyçÇ<ú~ð¤]£££¥o_ßÈ¿îŸZc õ–*UJ† f¦ëŸÚíW; ×®]ÛLûé§ŸÌòußö÷Zçµúúj@¸U«VŽm¸šÁ| B¬NJL´¾F't!G/é{×]În«VQø8vì˜+VÌ?~<…8´°‘®ð¶ÙQÖ˜~ Öí/$g¦Íœ9ÓܶC‰;w–Ö­[ËÈ‘#Ýók'T $öêÕËÌÿÀHTT”#|©]Nµ[êC=d‚¸}ô‘Üzë­~‹ÞÈõë×›Çj@øÓO?5aW íê2Õ˜1c¤k×®f™IIIR¿~}"¶iвOŸ>f™o½õ– ‡¦¦¦µÝjÖ¬YR´hQ;v¬$''˨Q£dË–-¹Ö´M›6&ê)Øp í õw;Ð2´~:MŸ‡'­Ÿ¾®žÛªanï0q8É+$ìÙ¡ùðáÃ~CÂÞ]œ54¨S¯Ö¸B… æï ÖpºjÖ¬™Ù‡5¨m¿ÿçþǼ?mS^Û¸wï^ó÷çŸÞ± „„  @°2’]!áãiÔBQ\œ3$õÔS>ë‹5]•†€u_ûᇤH‘"²cÇ9qâ„ ­öÙg&°ý§?ý)è×Þ{u;4Ø®û¸§œœB¸æ „³s§Do‰¼‘µI$c¾È‰ì(X'Ò]!á½s©„"½4³gHØ«‹ þñ8Â+Vt\€,q@›N)ž¾ÆÚM8ó*¯× ÛCËh=pà€{;”¨R=i§Yíò{ï½÷Ê”)SÜ£Zµj¦sª­téÒÒ·o_Çcu5õ @Ú˯T©Rž]m5™žž.£Gö {BƒÝn¥áY»‹²vèÍ‹>/ h8Ð1=BªwïÞcBÑêí·ß–²eË:¶Kk¡Õ´…« &˜ç¨¥í¶`CªI“&ŽNÖêèÑ£rýõ×›Ú+ äëãu_óœ÷w¿ûtêÔÉ¿ýöÛ _{Û¨еô¾}ûÜû¥†— àZ#$ Î40«ÆHScD¾i'²í‘œcì¸|“¢D~K MŸî {œôlü㡜-Z8l× ´%”"ìåXCûÕ»ÊëµCÂӭϯÚÙôôéÓ>ó EjhX§—/_^jÕªåÝ»w7óhØXçñîÐLHØ^¾½,4ùØcItt´éà«¡K}̲eËÜóxfƒÙnOcÆŒ1x5üûÒK/™®¯¹ÑyŸ~úiÇ4½­ëÇ´„„³ ?ýô“Ïü52]^m¯¿×àRCÂ>Õ€jûöíeáÂ…fžuëÖ9æùóŸÿl¦ëkÎ^yåÓmWŸkRRRÀ}=?!a¥Ý§+T¨àþŒ_»vmSkOýúõó ³ë>«Óþð‡?äúþ fÕ‚ ä‘G1݉ÿö·¿™}XçÑÇ× !aD†ÓY"+úºº ¯Œ9O`—hQWðzÒÓµ=”³›ð¼yÔuêÔq„„5p⯻ r}!®h9ˆ YÖ(g«ù³òË «V­ZIñâÅeÿþý_±bE¹ùæ›Ó/^œgHØ^¾ÞÞ´i“Ïru›½ƒ‘vHxéÒ¥îi&L0ÓV¯^¯íö§]»v&œ›>}úøÌ3yòdw_OúÙïºë®“‘#G溽ù û[†M»×jݶmÛÊwÜásÏž=¥nݺñž;yò¤¤¥¥9:÷”;v˜NÚ¡â³Ï>3ûÄ¿ÿýoþ±À5CH‘E; kWáoÚ‰œÍ¦È¿ÕO‹Ì¥Š´kð=÷8CÂá ;;Û\Ø3$üûÀK‚5ªQ†ˆ2L\Aᬫ´¾Ë ¯ZµÊNccceêÔ©’••%ß~û­L›6Í=†Rõñ<ð€Ì›7OÞ|óM¹óÎ;Í´Áƒçº. ûj÷Þ&MšÈ’%K$55UÆgBÆ9Ögî*UªÈ]wÝ%6l9sæHãÆÍã?üðC÷2÷îÝk¶1>>ÞtÇÕdzÝjøðá’˜˜hÂÄÚq·|ùòÒµk×\k:{ölÓ©X»»ÚN:e‚Ò·Ür‹yº ™™™Ò·o_)Y²¤ìÞ½;×íÍoHØß2l?üðƒûóç˜1cÛ~þüy©_¿¾yÞ(¼´ƒ´î˦s¶¾ïô=¤]¹Ïœ9CpÍ@ä9´Aä_]Ý`é(ŒüÚœ ’T™:@¨jßÞîߟšàâã›7;Â:¼C)E‹ÉÖ­[s]f íÍ@ËЎ˽{÷vLÓÎÇ7Þx£|úé§¼ À½ßjçj}Ú¿€«‰0"×¶D&E‰\C-¼K\!ᣩÔBÑ{ï9C·ުmŨ Œ8BÂÍš5“ääd pÐ.Â)CDjfv”¡P›1c†O7áP ?LÓÏŸÚIÙÓÿþïÿJBB/€+†0"ÛÂŽ"sšˆœ'<„ i8XCŠ $Íœé +&²};uqÿý÷;BÂO<ñ„¬X±‚Âj[ã]Ê‘6X#š×¿Ð;zôhÈmS§N¤víÚ>e9 àŠ"$ €È–!2½œÈc©‚s6Ûþ)‘Z@(Ú¼Y䆜Aá>¢.0êÔ©ã ¿üòË~/Ÿ ˆàÃÖˆ²Æ”"b%^ؾ¢(@ú™“@0€k0°i˜HRe‘œcÔÁùWE‘-#¨„¢ìl‘–-!á!C¨ $''GJ–,é ¿óÎ;à&®“g\;&²=mk¬¡€¤_ø·QÇ6kÌ·Æ&kla\µqŠÝ—0p:ËÕMxãPjà,h#²æYꡪW/gH8.Žš@¶nÝêëøç?ÿIaKÄuò,RD´kt±F9kL§3úï[Š5ôºj¯Z£¯5:Z£…5jX£â…¡3¶°Ûà2”vžã yYú¨È’‡©„*íì¾óNjùì³Ï|BÂË—/§0‡ÉÂÉ3¸hPøÙ ûƒ†(3( !ÝogXC[#´W‡l;xªàvöo ë5³/ü;˜â1R…NÂt@aÆq@Êt…„·Œ ÈÛú"_· ªÆw†„Ë•9vŒºD¸—_~Ù®X±¢¤¥¥Q€ÃÖ¨FàákÔ¶F´5ºYã k¬‚’ŒÐ›.ìà]qaÕ€{kD‰+¬G±^Wx³¸Bð"!aÀ¶2^df ‘ó&Gþó®+TM‹‰DG;ƒÂóæQ—×­[7GH866VRSS) ÀA»m6£ ð¢GŠÅ.';±2¡8ô‡]¬ñ®5ÖX#›·0Ñ ¶¬Í"“¢DÒgP ä.í ‘‰ÖשºR@HÊÌ©_ß~ï=êá6lè ?þøãÖ®’Iañâ ×¹Ù)tf„f'aZðFH€³k×.yýõ×¥^½zÒ¼ysY¼xq¡ÙöiÓ¦I‡äÈ‘#¹~„‰…EVô¥ÈÝ%®ð‘­ÔBUûöÎðÓOS“WºtiGHxÈ!ࣣ58*Â!aBL÷îÝ¥iÓ¦2oÞ<™!á+VP€jÖø€2€0AH€òý÷ß›“Õ‰‰‰º\;$üóÏ?_Ñí&¤ûù矛yV®\éžöþûïK±bÅÌôùóç»§k¨Y; kxÚÛÇlæß¾}{¾Öeé£" ÚPänVm‘-#¨„ª™3!á’%EÒÒ¨K„:t¨# \®\9Çw lQÖ˜N@˜ $ @ˆ˜5k–Ü~ûíæ„uõêÕåŽ;î0AXÛÆå¾ûî“ *ÈM7Ý$qqq²{÷n÷ý&L0ÉÈÈøøx©T©’»3V0!a]þK/½$Í›7—òåËK=$%%Åg> 2wéÒEªV­*×_½4lØP-Zdî³CºÚÝ7!!Á<ŸF9BÏ»ví2óxvK~ä‘GÌÐéo¾ù¦{zß¾}¥cÇŽŽç—••eþ~Ë-·˜ùëÕ«g¦Ïž=;¨õ‡3­­¾ÖZ} ºSô•4mÚ4éСƒ£“ô5•>Cd¢õQ9;ƒœØüX‘u/RUkÖˆÜpƒ3(<~úÈ,¿~ýú&ìÉÞ úé§&˜;bÄY»v­czõêe‚ªÃ‡—ØØX)Z´¨ì۷Ͻœš5kºÃ¿JCÏ“'O–[o½U:uêä˜>jÔ(DzµK°šûôécn¿õÖ[¦V©©©A¯?\uïÞ]š6m*óæÍ3õܲeËe-ÏÞo¼GLLLo{Èu>›-2%Zä§DþqB`Kvu„¦lëÿó–-!á!C¨K„Òz~¦}â‰'Ì,ð´A\'ÎR)„„!Ú¥WOXöÙgŽéíÛ·—*UªÈ™3gÜÓöìÙ#Å‹7Ý•²ìÙ³§Ïrí°gµjÕL@×LDÃÂúÏKð¶mÛÖL[¾|¹ßÇØÛвeKÉÖP†EÄ:ͳ+²ž×.Ä999²cÇs¿š{÷îm:%+ ¸êôM›69–m‡HuyÞÛìúÃÑ©S§Lx׳Cóå²÷›‰'ÊÂ… ÝãJt(¹°ZÔÅYý´«›0 tõêå ÷íKM"”~ò :Ô|ÀS²¸Nœ£ L „ø Ÿ?^¢££MwaoÍ›77c•²ô× Ë{j×_ílC‡ùÌ«'ÊÓÓÓeôèÑŽ@ð¹sçLaí^¬÷ÇÞ†;wº§eee™iï¼óŽ{š>?¶jÕ*™4i’Ü|óÍfú|`¦kxY×_¹reŸeÎkýá¼ï$&&Ø2ƒé@]PB2$¼u´ÈôrÖ›ðØœ 2«6u€Pöê«ÎpëÖÔ$éwý.ãÖ«¸àí áÄ/ë „ø kèW§ <Øgþ®]»º;ïæ² &ì¹oß>yì±ÇL ¹jÕªÒ°aCó˜eË–9¶£{÷î—áo>ìÒµ»ÿå/‘gžyF}ôQ3Ýîú;aÂéÔ©“ôéÓ'à²s çµþp3kÖ,¹ýöÛÍó¬^½º¹”²Ý9yãÆrß}÷™ý䦛n’¸¸8Ù½{·ãñZo}Œ¾Æñññ&¾bÅŠ Cºíh­¡õòåËK=$%%ÅïþÝ¥K³i'iÝÇ-Zäxí233%!!Á<ŸFhè9ߎ¦ŠLŠ9°„œàßOÖþ95†:@(?Þ¶>«È…+N ò¾gyŽ÷Þ{Â|Xßò¤"ea„0!Ä_HøÌ™3R¬X1yê©§|æ•zõꙿ_nHX;ßx㦋¯š9s¦£“ðÙ³g¥D‰R£F€ËÈOHWì÷ß¿4iÒÄt¶Ÿk©R¥¤_¿~rÝu×™ðj e¾H_3턦ÏS;NkmÖ­['ëׯ7Ó:vì(sæÌ‘¤¤$iܸ± k×»n;w–Ö­[ËÈ‘#e×®]A‡„ÇŒcë}ô‘YGýúõMØ“½-Ö.Ö³gÏ6­5î¹ ½zõ2ûôðáÃÍþ]´hQ`¿f¾ª+²q(ÿ8Á¿½sE&Z_©r¸-„,ýARt´3(¼z5u‰0ú9Õ;$¬Ÿ[ð–`º”„B„!a¥AZïÐåÑ£GM7ÖÞ½{›Û—Ö@¨wÖ /]ºÔ=­U«VfÚ¦M›ü.'?!ÝÇ\bbbLZ¤6 †j7c}ÌÞ½{.[Äz{µGÈ#RCÂööíÛK•*ULøÚ¶gÏ)^¼¸éüë]·ž={úÝoªU«&5kÖt;HˆÂð p·mÛÖ:´ï´lÙR²/t÷³;KÛ]‘¯‰õEæ6ã'øwhƒ+$¬]§¡)=]¤~}gHX» #¢¼òÊ+Ž€pÅŠý^ù€g­K@!$ @ þòË/Ítí«¡W ÏÆÅÅITT”lݺÕÌLHxÒ¤Iæd¸ç8xð äää˜0é]wÝ%6l0]gµã¬>æÃ?t/GÃEŠ1¡å%K–HjjªŒ7N/^p…tÇo¦kPX»Û d¦7hÐÀ1¿÷²µÚe6>>^Ž9bž!á‹ûÎùóçMØZ; {kÞ¼¹éí]ÛŒŒ ¿ûvüÕî¿ö8tèßmÐ× ==]FíŸ;wÎtÖÆúwìmعs§{ZVVÖµí2’]!ÐS™ü_Ù®ýc_ µ€PöÿþŸ3$l}ÞDdéÖ­›#$¬?LÓï3x{Ôí(#„„!BÂêóÏ?— *¸Ol×®][.\è¾?˜°¿¡`¥ëÔ °N«[·®¬\¹ÒtõÕP°†‹m:ÕªUݯ\¹²L›6-à6 éjWcÞ®óÔ‹^öW§{vº ´líV¦L÷å‚ _Üw4ð«·ì3o×®];”×¾“WjÛ¾}ûä±Ç3¡dÝ7´ëµ>nÙ²eŽméÞ½{Àe„ìk—sLdR”ÈÞ¹üÿ4$¼s:u€PöôÓÎp·nÔ$ÂØŸOíñðÛ·à­5úPF PÈìØ±C8pE–­}wíÚå¾­]_ÓÒÒLWZoÚñ53óÚwW=yò¤ÙÆ@j#…wHøÌ™3R¬X1yê©§|æÕðw½zõÜ·/7$¬]‰o¼ñFÙ¶m›¹=sæLG'aݯJ”(!5jÔ¸Œx/h#²æYþñS¢E¶}@ ”½÷ž3$ܰ!5‰0¥K—v„„Ÿ|òIs ¼Õ¶Æ«”„BÂaÀ_ê&Mš˜®ižŽ=*×_½ôîÝÛ=írBÂ*÷òÚ!á¥K—º§µjÕÊLÛ´i“ßå„tHxë"_·`'ƒ³j‹lF ”Mê GE‰lÙB]"„þ Ðûj*o¼ñ…ø¥?o~—2€0BH ø ùå—fÚ°aÃLàvïÞ½'QQQ²uëV÷|y…„'Mš$)))ŽqðàA3v`«R¥ŠÜu×]²aÙ3gŽ4nÜØ<îÃ?t/KÃEŠ1Áå%K–HjjªŒ7N/^pB&$¼/Ed¢õ±ùT&;|ÍY?:@([³FäÆAá±c©K„ÐÏÇÞ!áÉ“'S€_ÑÖH¤ ŒþBÂêóÏ?— *¸µk×–… :æÉ+$ìohئëÔ °N¯[·®¬\¹RbccM(XÆ6}LÕªUÝ˨\¹²L›6-à6„LHøt–Ȥ(‘Œdv4øú¦È²>ÔBÙ±c"-[:CÂùG¤:M¥p²ä€Ðöý÷"QQΠ°‡Ö233aÏ<ó …ø5Y8iÂÇ;(h,Õ0!#rÆ¿*º:‰~ÝBdaG‘}E6ù)Q$s…ÈiºÔ… ‚î˜Là”‘ìúw çµ€þ÷:C¤~}gHxôhêæ&Mšä~çw( À¯¬Q2€0CH€‚F'áÈè$|`‰È¾ר9ÝÞ2Bdý@‘e}DæÇŠ$U¾$Öñân"ÿyWäàÞ'…‘†À—>J<ÿ¹;wN:tè ãÆ‹Ü"Ú@—i(,ºus†„û÷§&aîùçŸ÷ O›6Âüf”„BÂW’vÕPðc]†5,¬B kàT§ï+’µÑFÖP2áì‚ wŸÊ,˜×rͳ"³jø.òú믻C+EŠ‘J•*Ill¬|ùå—!¿{Ÿ={Öl÷«¯¾¹ïqýÑ€¾§õ‡€Ð6h3$ܲ%5 s<ð€# \®\9Y°`…øõ´5šQf \m*ÔÎÃÚqXC§“¢.vf\¹ñU]‘E]\ÝžÓgˆœÍÎßë¶ý×r *t|ž2eŠÌž=[Fe‚ÂQQQ²aÆޕ ‹kÐýB÷)@hûøcgHø×¿¦&aîÎ;ït„„›5k&)))àW7kt¡ Ĥ¥¥ÉÖ­[)¸d„„BÁ±Ÿè$|¥: ÚàêÖ¬Álí¼ +˜=5Fä›v®û‚‘µÙÍH.ЗÞ ïÚµË=íí·ß6Óþú׿†ônKHøÝŸtÿ„¶+œ!a«WS—0V¾|yGHø‘G‘ôôt ð«5úRBŠç•ø>Þt^¡A§ 6nÜ(÷ÝwŸT¨PAnºé&‰‹‹“Ý»w;Öóý÷ßK—.]¤jÕªrýõ×KÆ eÑ¢Eîû—-[&÷Üs\wÝuÒ¸qc™?¾Ï¶.^¼Xî¾ûn)S¦Œ™wéÒ¥~CÂÚ ù®»îrLÓnú¾üòË žS^ÛsîÜ91b„´hÑÂÌS§NÇ㯪™5D¶}Àû Bõ‘”+ç ¿óu S™™™>'‘  999àW k¼JahóæÍæ8´~O*lìãç'N”… º‡«…&''›ïšÇ/Ðõéw׺uëJëÖ­åСCfù½zõ’n¸ÁÜÈBˆlGSE–<ì꼸›È‰\ºË}ÝÂ5OòÖ¯N›9s¦¹mw#èܹ³9(8räH÷üëׯ7]:vì(sæÌ‘¤¤$ªÕЭ}ÀÒžGŸ~ú©Ìž=Ûl×®]kî_½zµ”(QÂdÔu>ðÀ¦;ÁöíÛÝÛ¤óê2zè!Øýè£äÖ[oõþÓŸþdïé‡~0óŽ?>ÏçÌöÌš5KŠ-*cÇŽ5b5˜¼eË–k³ͪ-²q(ï%uÚA¶vmgH8>žº„)ûGWžãBá€\XŸä]Ê(ä´¹ÂäÉ“Ó>þøcóÈóøêÕ–ššjŽûæ—}üü矾¦u½Ú5Ôãüº>mþa;räˆ9n®ÇÂòƒ0 v%2£šÈ¿*Šd$ûŸgý@×<È>È©W ß>óÌ3R¼xqÓE÷ìÙ³f;PÛ³gOŸÇ·oß^ªT©"gΜqOÛ³gYÆK/½dn·mÛÖ<~ùòå~·A—Q½zu÷míJ ¡ÜAƒ¹§iPW»ÛÛ¤ì}ƒv,/?!á@Ï)¯íùýï/5jÔ}gA‘\”BžvmѾÿ~ê¦^{í5Ÿð?ÿùO H¿í'R…}œí—_~¹*Ë)¨õ¡àiÃ… HÅŠÝÓôŠn·Ür‹yÍêÕ«g®î¦î½÷^(ö4oÞ}ú˜ïEo½õ–鈫WYÑÛúZzÒã¯zÕ7e¿ÕæÚ„bøðáR»vm¿Wi æÊpJëwµbÅŠ™yµ»p^ò ççX´®SC¾ú\bccÍ•ê4­r»Ÿ¿ÚÛîšæÊÁl”íד£×3@~í3O î°õ×ÉWé]íT`ÏÓ½{w¿ë·ï/_¾¼ÔªUË1ìÇh`Yçñìä« "$è9å¶=¶1cÆH©R¥ÌÁSíš|âĉk³Ï¬~ÚÕMúÞxÃ.YR[ Q—0t÷Ýw;BÂÍš5“”” ðK#;zÂŒÿ)\)úÃøÉ“'ªmÖ ¤~–öz^ ÈÔ *œ´{¯v–ÕFz|Ô³ñDn¯å‘#GÌqU½Z›M¯N§á]mΠìã·o¾ù¦{žœœ©Y³¦éTìÙM8˜+Ãyúî»ïLÇ^§ÿþ’žžð9ÚÇÏ5¨¬±GÚ…ïòù9ݲeKÉÎÎ6Ó4ü«Ó´6*¯«ñz?xçæÊÁlϯýk¶ö¦ÏWçÓ× X„„Ö½è ïKqNOª,²íƒ[}s×®]ç ¨Õzàö©§žòyŒvÐ.äÕ.5jÔð»lûþ|0àúõ€£®ÿ¡‡òyl°!á­[·f{Nÿâ‹/Êþýû}江?ñÄf{ØëÏOHxçÎîytÿµ»"çu5¾@5ô®S0Wþ f{T °>wïèÑ£üã ‚FHdE_‘U9êqÙ³%‹,ëS`«¸œ°jÒ¤‰9¨ïIê%Çô@¯jÕª•yü¦M›ü._ï×ÊþÂÚô$ÆÍ7ß옶xñb¿!á?ÿùÏfº}ù4=°Ú£G3mܸqy>§`¶Ç[»víä¶Ûn»6ûÉcEfTãý…Á’%"11Îð!Ô%Ì;vÌüÊ3$ü裚@þhÜLO˜ñ?€‚¤AX ÊjsèСrøðaÇýöñ1 jÓáÇ›à®gPÐ{ÞÎ;KëÖ­eäÈ‘îã‰ÞÇÙìÛÞÕãlï¿ÿ¾4jÔÈ/Ô®°ÀÕÇkÈÔ3ô蹜7JŸ>}Ìí·ÞzË$µ›¯÷|Ÿ|ò‰ùû¶mÛÛ«ÁO;਀µ)@¯^½L`Z§k¨Ó3l9kÖ,sµ0 0'''›ðò–-[ËÔàg\\œù¬¯Ë²·'ÒhˆW»ïj 5T­¯U^ü\uÿÔi_|ñ… ·ê•ÜþøÇ?úìsÞÇoußÔéßÿ½¹Ÿ+ÃyÓõj \ùzU¼?üÐgûøùÏ?ÿìw—zU;}?Úïµ¼®Æ¨†ÞËæÊÁlÒcþú^÷öøã›÷2@~9Ÿ#2?Ö5ôïJ»ϬQ`«¸Üð—_~iîÓ#z Q;(èÁr=0jwË[ºt©é´«â%K–˜èÖÕ¯Zµj•9¯Ý‡§Njº|ûí·îî"J»ŽØ'-æÍ›gN(Üyç~zêútúÀͼÚáC»$f{ô¤Ibb¢ ¯[·Î„Ϋ3ųsºÈD¾Z@¡ ?`iÔÈ~ì1êf.\èëÐ+è¥qð'E\'ÌøŸ@AЮ¹mÚ´1E_zé%Ó)Øûø˜g³égÖš5kšì{v¶çÕ.®–ãÖÊÙ]Q'Mšd¦éñÁC‡™i?þø£™ö·¿ýÍïr‚ Eêq;íÀúßÿýßîûÓÒÒ̱H «öíÛ›É6í\«Ç. äžöûßÿ>à•м}÷ÝwÒ¥K³ ˦§§Gä~¦ÇxµI„ÖA_kï ¶'¯¥îÚíW_û;”g ´_ÙìãÄzõ9•ß+ÃÙæÎkŽ/—)SFÞxã ÷ò¼]JH8˜«Úy†róº_°ï‡`®üÌö(=¦®Ý¼ý-GßÇùÁ™l 7'Ò]Ý„×tÝÎÚì „)˜ËU_nHX}þùç¦ ‚ÑŽ#z`×Óœ9s¤jÕªîy*W®ìݦ¤¤˜N¼öýzpV²Ûôà½vÖüz¿^RPÌúë$¬'0ôµž С]G´£E^f=åµ=O>ù¤™fß§'H®Ù })®}â<§“ P¸ÿ~gHøî»©I˜Ñ…wHØ»ž’…f.ßúõëMw^½B–†wïÞëüŽéq.®Í¼çõwuŒ@!aÏp²ý¿ÿû?÷4½™gHùRBÂꡇ’[o½Õ}¿63¸á†LàYƒ¨z|P; O™2Å=4œêùƒ=¾iwJ¦3®Z¾|¹Y®.ÿÅ_Ì×UɉvôÕ¸”íׯŸìرÃgž &˜újWgOøÕf ÚÉZ÷ú{½Cî€×nÔžòse8m\¡A×Ò¥K›æÌuþ¼B—zU;ïPn^Wã TCïeså¿`¶çßÿþ·¹ýŸÿüÇ=üõu~ï½÷øä Ç<€¼¤}á f®pÝÖÐðÖÑ!·™z8PgÛÎ;ÝLýÑÇër<;•xÒî Á^ª[ðj¸ørä¶=:M;“œ>}úÚ^÷ Ý?ާñ^€Âàùç!áJ•´]u #=ö˜OHØóÇQx³¾õK5Êà2œ œk]ãããMÇ^û*+?üðƒû;“ÖßßëܲeK³l}=ÆŽkšHØá[[0W†Û³gtèÐÁ„ºŸ·¾—ïÛ·/¨ç•WHøR¯jçÊÍëj|jè½ì`®üÌöèòëÖ­k‚ðzß±cÇLøY÷÷¼‚ÕÞ ÁXò°HRe‘ÓY"Ëúˆ|ÓŽšÀE»MkHøh*µ€Â@;îx†„u¬ZE]ÂÈï~÷;G@8&&F,X@a½k .Ü   h°P»…j ðÑG•mÛ¶œ7PðW»»êt "æ5¯¿û®vHXÀÿë_ÿZ  ß|ó#à|öìYZ}ðÁƒªŸGu9Ö|á…Î7wî\¹óÎ;ÍÆÞxã G­"†]Ûµó=výÊ+¯¸¯Ì¦áj›†Ú5œ­Á^¯óûï¿/eË–5ŽŽ–„„¿ëÍëÊp‹-2·s»¢ž?y…„/õªvÞ¡\•×ÕøüÕÐß²óºò_°Û£Áê ˜.ÍúܪW¯.[¶la'ùFH†v‰#²~ ÈŽÉ"“¢DNeRˆœÍv…„,¡PÌœéþûß©K©Y³¦#$ܬY3s€@†Y£ eP€4$«r5,ܯ_?s¥,ovPÐûÊ`mÚ´‘:uêø÷j†„'L˜`n¯^½:ÏmyòÉ'M(R;¦þö·¿uÌߪU+rÜ¿ÐõÓ«N½iWWíV[ºti>ÞtêÍÉÉ ¸üo¿ýÖýù[Ÿƒ§U«V™åh¸wêÔ©¦c­ÎïÙ¡uøðá’˜˜h‚ÄëÖ­“òåËK×®]Ý÷kGÕ:˜nªÏ[ßß´ã0.Ÿ^qE_3?ªÌmŸ@áBHÈ…EfTIé,òu ê—éåD~J¤PhXôÞ{!áÿú/ê&¾ûî;G@XÇSO=å4àO_kô¡ ® ¥K—šî¸žìæûï¿/eË–5ŽŽ–„„ŸÇ_‹°zå•W¤L™2fzRRRÀù´klõêÕ¥T©RrøðaŸmÔªv¶?£ë2û÷ïï¾_;ÛëÑ?{öì)éééîû-Zdæßµk;SêÔ©“Ô®]Ûo×_BÂáƒ0§³D’*‹Ìiâê{h5ÈWuE¶}@ °èÕËþÍo¨I˜5j”OHø7Þ 0€\i@¸/ep•y†0Ïž=+Û·o—Ó§O‡ÜvžmÚ4éСCÀËu…Ûúõrsº¾qãÆEÆÎ¹¨‹È¤b"ÓˉlL'áÂÞIxÏ\‘Ô±"3ª¹ºD\“¿ýaYWÀP8hh4:Ú~ã êî¼óNGH¸Aƒ²aà ÈU k$RWÙ‰'äÀrþüyŠæ2­‘val³Æ|kl²ÆãS¼-ˆ(„„@HëÞ½»4mÚTæÍ›'“'O–-[¶\ö25tì} b111ºíÁt‚¨U«–tìØÑ1-''GJ—.-õë×÷™¿I“&òꫯµì`;Q :ÔÌ·cÇŽËz¾gÏž5ËÑí {›D¦Æ¸ºÏ"tVrމ,hã M þqë^tÇ…Êb}Èt†„ûõ£.a N:ŽÏømÚ´‘5kÖP@®*Zc2eäC¶56\øÿc„5ž¶†é×Oôÿ–_1!:¶ð ¢!ëÔ©S&¸;räÈ]®ž8q¢,\¸Ð= ºKq0!Ý?üáæ9j0ئ!}\Ñ¢E]€÷ïß/EŠ‘o¾ùF’““eÀ€rüøqsßæÍ›ÍóÊÌÌÌ×ú!á|ÒPð”h‘yw‰|Ý‚7j8Ò ðÜf®°p°6 Ëßü€k++K¤sggH86–ºrÙÙÙR¬X1GHøÔÔTŠÈ•ž,K¦ €\³Æ\k¼hfÖˆºðÿ‡†›XãÑ ÷ ³ÆXk|a” CÃÄiB'a„Àµ;î’¾ÿþ{sb?11±@—k‡„þùç+ºýÁ„t?ÿüs3ÏÊ•+ÝÓÞÿ}w¸aþüùîéjÖÞööñÇ›ù·oßž¯õ+BÂùd£mE¦—ùq,oÔpu<ÍÕ-zG½¤þó®kßññÎð-·è%¨K!¶jÕ*Ÿ«…<õÔSŽäàMÿ—Гe)”à%ËŸX£›5¢Å Ö6C­ñ•5Ò) B $Íš5Kn¿ývsb¿zõêrÇw˜ ¬mãÆrß}÷I… 䦛n’¸¸8Ù½{·ûþ &˜ÇdddH||¼TªTIVèe¥%¸°.ÿ¥—^’æÍ›Kùòå¥G’’’â3Ÿ™»té"U«V•믿^6l(‹-2÷Ù!]íî›`žO£F¡ç]»v™y<»%?òÈ#fèô7ß|Ó=½oß¾Ò±cGÇóËÊÊ2¿å–[ÌüõêÕ3ÓgÏžÔú•wHØ^ö¡C‡r}œv^¾ûL™2rÏ=÷ÈÒ¥K†„—-[fæ¹îºë¤qãÆŽð³v|ëÔ©“©ãéÓ§Ó;tè ï¾ûnèì˜i_ˆLŠùá}ן§2y³†3íœTÙÕY8/?Yï™5¨&ÖçGHX‡õ…×?þñŸð;ï¼Ca¹Ò€—ž,ÛJ)€ˆ¥APº»FöØtáõ׿§XCHkXƒÁ1Öè#®PpoB„„@HÚ¶m› 6ÌœØ×p¬„×­[gî[¿~½”,YÒfçÌ™#III&xªA` Ä*; Û¹sgiݺµ áj W3fŒtíÚU>úè#³üúõë›°'{;4 üé§Ÿš`îˆ#díÚµŽmèÕ«— ï>\bcc¥hÑ¢²oß>÷rjÖ¬éÿ* =OžjÔ(DzµK°šûôécn¿õÖ[¦VzIå`×ïæqúõ¹?ôÐC&ð«uÒíõ^½zµ”(QÂ,oæÌ™æ’ÏQQQŽ®ÇÉÉÉR¤HyñÅÝÓ,•+W6aåp6[dF5‘5ÏZOêi‘mx£†»ÓY"S¢E¶ŽÎ{^í8ü¯ŠÔ ës‰OHøï§.…ØË/¿ìÖÏÕäF/¯'Ëø0PpÒÒÒdëÖЌާZã kÄ[£‰¸B ¿b0¼Fí ûˆî+ÇxK #$ B–véÕûŸ}ö™czûöí¥J•*ræÌ÷´={öHñâÅM÷_e]{öìé³\;$\­Z5е‡“Ñ¬>Æ3ØÚ¶m[3mùòå~coCË–-MW\¥áZæÙù‰'ž0]ˆõ2ÈÔÕû5ÐÜ»woÓ)YmÙ²ÅLß´i“cÙVº<ïí výB¹=Nƒ¾Z>{ö¬{9ÐÖy4Üëýzi7hÛñãÇMHxРAŽù^{í5Ö°õš5k¤X±bòïÿ;tvHí*«Ñé®°ðæÞ¤‘`E_‘YµEÎçq™ò})"•÷|þ?{wE}ÿ¼ÜQ#PAEDDM1 w± DŠüQîŠ6ŠJZ£E±)øC¼Š)ÅzáU±hA©‚‚\& BD ‚9ƒ |þóùNfÝÝÙ$›ƒd×óñø>ÈÎÎÎN>3vgÞû tXï7¬7%¾!á#¨KÓ/ùy„cbbdãÆP$ëÓ'ËPnœãŽþ#666$ÖÏÿ˜byÛµk—¹B™ûÓzÌõ›o¾©ôß[Öhس}Áë]¯¥aõkáÚV¿,@'a: Ï/ØòùS€Ãq²…„O:eNökwa:tvíÚ™ŸÞ¹¹¹®ùœƒõÚõW;;#PÇZ îæääȸqã|Á'Ož4ºµ{±þˆ³Û¶móLËËËs]öX?öÅ_Èäɓ墋.2Ó_~ùe3]ÃËúüÚU×ÙÁ„„‹{þÂBÂE=îÌ3Ïtm ûwvêtíµ×Ê”)S÷îÝ»åøƒ $7lØPZ¶li³lÙ2Ÿõ¸é¦› ]F uøá‡\!]§{ð?þñùË_þ"·Þz«™îtï8q¢ôêÕK’’’ ]vQ!áâž¿°paÛ³gùÙ¿p °S§sÎ9G.»ì2Ÿ¨vz¢Bç×n#Þ•F»ÉN¯+r8[dóëöÏtŒó:Š,½µèytßаþ '¬ÿ˯½Ö7$\ð…3„ãæðé$¬X=ÀݤI“B—lHW]|ñÅÒ³gOiÓ¦é ìü®gœq†Üu×]rÖYg™°paˮȰÜןÿûßûüBÂNn¼ñÆb··þ¾Zwí8¢ËIII Q;O®.òÍ3öm /êà 4šüo¼È”k‡.âbƒ?æÙ!aí< ƒû†„ëÔ9tˆº„¡7º.ë=|øp (iÖhBPNŠ;î¨aÙ+¯¼Ògš~©©mÛ¶2sæLÏ4=¨Ó´ojjª¹êV«V­$--Íç±zü´OŸ>¦ÉÁÙgŸm,Z´È<¾qãÆf]ôx©.köìÙžåêUÃk×®•îÝ»›æ ^x¡ôïß_vìØáó<Á¬O¿~ý=fyºe‰ÝAX_Ó\l„„@È*,$¬Þ~ûms <'g‚¦Ž`B†‚•>§ ×iñññòù矛«†‚5\ìÐù5Èê<¾AƒžðkIBÂÚ]D§wëÖÍgºvïp.•ì-вGŽ)µk×6Óõq§3$|øða¹ùæ›M=tº^nÐùü; + `ÿêW¿òÔI×óî»ï6÷ée 5j$÷Þ{¯ÏcôÉYg%½zõ’S§NUü¸o¥ú\ãõûhTCÂNWaDí­ûé".YþA‘ͯS+'˜ˆ‰ñ kwa„[n¹Åç}½†oôý$ÅI¶Fe@9qŽ;Þyç2lØ0Ïp®VÒð¶mÛ<Óô‹÷Îñ¹“'OšÀÚñW¤¸°oÓ+˜i§_:tvíÚ½>ª°°þþ:Ÿ^ îtÒ®Áqbw' ?#$ š[÷ìÙsZ–­}·oßî¹­ܵëG Àª ¯ÔŽ·Ž=jÖ±°“åMOäææ=¿n+Ýf•ú-‰óDfʼnÌOð …®ý›Èì¼ð¢Ñál‘IÖǧÜ…Ï£ûŒvŸ„}ÿ¦áï°ß—³ôÙÞ!aýšÓ±€¢$  <8!aý2} % ö%~=§?ßtÓM…®Kq!agþWS}ûö5 ‚]Õ²eKéܹ³kYwÜq‡œ}öÙ§½ö‰Ö¨ovCðAHð¦]‚5¬]aù¿õ±¢Ó‡ñ"_+üþ…]DÖ¥P'7ýúù†„{ö¤&a¨iÓ¦>!á6mÚE¯éôe@9)MHxÆ % ksƒš5kJ“&M ]—âBÂÇ—jժɠAƒ\Õ+ª5oÞ<èõ±ßV÷“Æ\–¾7;Þû¤÷tvAp!$ 8´kðâ~"ÓëŠì_ã¾F»›0¢Óêv·àÂè¾³ru€póÈ#¾!á‹/9q‚º„‘ÖöÒËm{‡„ ‚ÒÅ)”夸ð£>jîw®H¦W»ùæ›Í´7ÞxÃ3_0¡Ük®¹ÆÜ^·n]Àçš8q¢¹ÅŠ….WûÚØÛÁƒMçß”h}þûßÿšÛß|ógžýû÷›Pô³Ï>{Új®×8ÓÂIì~!a@i×àOº‰¼ßHdßJ÷ýGrD&YoŸ·Ñ“$jé¶×} ?7ðýË“í/'ú†„u¬]K]ÂÈ×_íÖñÀ˜ð0Åi!„„Q~Š /]ºÔÜ?bÄ™;w®é¾Û®]»R…„uYUªT1Aß%K–HVV–YÆâÅ‹Íý»ví’ªU«ÊÀåÀ潑ÿrgΜin§¤¤˜åëcú÷ïo‚½Úá¸$ë£Ë—k¯½ÖÜwèÐ!€>÷Üseß¾}§­æzͧkä°û@@„„ k‡ØãEfžgLJv@ô§¢Ö‰C"“«ÛûB ÚExI"u€p³d‰;$ðå°À÷­K™Ÿ@ Ühh¡zußpj*u #>ø +$sÿ˜E}ì@1¢›î7·|Ÿ†„µ#5 ¼ääˆ\v™oHxÀêFô2ÝÞa½<öÆ) (z¢,2a'£àõû:¥€"§×Éc"?¬g0*vä­É/rp“Þõ±È¦—E–%‰Ìh`wþ¤›Hö;"§N·/ëãtˆnÛ¦Ûáò@ûÍ7ψ|Є@8êÙÓ7$|õÕÔ$Œ´mÛÖ'$oºåPœ\±O”}H)€°ÓÏzͯ”ŠDHœ^Øœô £rÇôºv÷×¥·Šüo¼H~nÉöãc{íåì]Îk:Ú̲÷…¼L÷}[ÒD¦ÆR#GC†ø†„Ï9Gä-gžy¦OH811‘0 (ú¿…ž(Ë @XYbêÖø˜R@± €Ó‹NÂŒÊî$üS~Ù÷cí«Ý‡ËcYïÕÜUZC“øˆaéÕW}CÂ:>ûŒº„œœŸ€°Žûî»Oòóyß(Þ±O”­¤@XI°FGÊAá 6Pœ•CD>Œ§°iGêeIîé&×ð :O@ØY¸Ð?žº„©S§ºB£F¢0€ dˆ}¢,›Racœ5b¬‘I)€6mÚ4¹þúëåÀ ’Š3¯£ÈêÔ¶ož™ÝÂ=}Ï;$|8›@¸É¶þvÇÆú†„x€º„Ñ£G»B¯½ö…å±O”Ñ“·íÖ¨k±”yO?ý´ù|öý÷ß³^•Œ0Pœ©±"[ߥ°íøPdJŒÈ©¾ÓfÙ!ᨄ›½{E®¼Ò7$ü»ßQ—00hÐ WHxÞ¼y”4áDÜ~°Æ|k¬³ÆzF¥ÕÖ˜lÿZ£¾5zXã»)R233å±Ç³>ZïõL Õ0î‚ dðàÁrøða6ˆûвüÌã"†(p$'ð>¡„uúî já¨ßpÓ¦"'ˆ„º=zø„«W¯.7n¤0€ <#vWR@³F¼Ø'O¡7ªXãjkìeWBοÿýoóylóæÍžitì„„€¢|óŒÈŒî®±ˆnºKŸ8d‡„·M§>ŽFö ÇĈdgS—×¼ysŸp||¼µÙØn€à¤X£ eˆzyÖèbêÖ"vÇÚ„N¡ÖIX¶ÐI8üé{õ Jw®'NÈܹsOËzM›6M®¿þz9pà@¹,oÙ²e²ÿþ¨Ø¦'N”Æ›Ïcúù¬mÛ¶2{ölOHX» §¦¦J³fͤU«V’––æz¼>&77W(çž{®,_¾ÜÜ·víZéÞ½»Ô«WO.¼ðBéß¿¿ìرÃ󨤤$¹ï¾û|–÷È#˜å}÷ÝwžiºœvíÚ™À²ó|yyy>ϯ۫¨õ\¼x±\uÕUR»vmó¯nc}ÜK/½Ä „ïKëWÙ]]wíÚe•zåZµjÉ%—\"ß|óMÐÿé§Ÿ¤W¯^òÄO˜Û÷Üsù}Ž=êš·k×®ò»ßý®Dõ(îvIÍ›7Ï„M½ƒª‘J¸ÖÕz3ÆtÎÊÊòÔðöÛo7ááÑ£GKBB‚T­ZUvïÞíÚ½{÷–Î;ËSO=%Û·o—Õ«W›}E¯3gΙ1c†´nÝÚ„ˆ5x¬FŒ!uêÔ1ruêÔ)9ÿüóÍò¦L™âyŽQ£F™ý¯¨m]Ôz~öÙgR£F ³.T×±n_}ÜC=Ägò EÑ.›^¦ðõùÀÀáqí0ÌþáiÖ,wHø‘G¨KÓ“Ñþ!Œ¡C‡JNNÅe˜5(CTëfb‡OÆY#Æ™!¶^NHxÒ¤I’žžîÚ}´¢effšõq‚”jÁ‚2xð`9|øp…¯8õŠÕn­ºÈ<ï¼ó‚î¶ûÌ3ϘnµN(¸$!á`êáõ¿?Ð2ŠÓ³gOÓù6h0Xë·yófÏ4§¦:u’üü|3mÕªUfšÎï?ßm·Ýæ³Ìë®»N.¸à9~ü¸gÚÎ;MXwøðáæöüùóÍcµ«¯Z±b… _~ùåfq´lÙÒ„më`ÖóÚk¯•š5kúìoûöí3ó<øàƒüa!0P˜ƒYvgؼLj_ß<#ò~#‘S~¸œ'².…ú@8Ú¸Q¤zuß°ßIJ„½¬«HX;D9]¤(N²5¸vPôÒ¯øjØt9¥;îïbëä„„¿ýöÛJ_—@Íʤ`u}¾þúkÏ´˜ÐåsÏ=Wìãµï™gž)Ó¦MóL+IH8˜z×9¸45Ýh}ÆÔ@kFFFÄ¿&‹ oÛ¶Í3-//ÏL{òÉ']óåææz¦iGà˜˜INNv=W‡¤]»væg õêÕeRRRÌmýW»ýj‡á¸¸83mË–-fùú%Ó@Ûº¸õûlÓ)uÑ¢EfÚqW×¥yóæfy³gÏö,[à MvïÞ]êÕ«'^x¡éz»cÇÏýÁ®†(ÇŽ+;v”³Î:Kš6m*Ë—ÿ¿ïׯŸ\tÑE®ß¡K—.Ò¦M›bkûòË/Kݺu}¦¶þÁQïû-£wïÞ¦»¬þîÞæÎk¬»wï6·»uë&wÜqGÄ¿&‹ {¯øá‡BCÂÞói`¸°.½}ûö5û¬CCÁW_}µù¹}ûöòÊ+¯˜í ß¾}»<ÿüór饗ú|Å­ç®]»¨û£CCÀúÚÒ×S•*UdëÖ­räÈÓý÷­·Þ2ÛC_…=_që©ë¢û÷u×]ç³zB \ 35Vä›g¨ ß?6½ì;MCåËéCaëÿþÏ7$¬ã‹/¨KˆÒ°w@XO ‡Ê%•áAC¢£ QgØ]hWRа–!ö‰îPéí„„5 ª~¡Ý‚UIBÂ:u’üü|3Mƒ¿:MC˜}öÙgŸ\—`›x¼à‚ LÒ±sçN©Q£† >¼DëóÇ?þQš4iRhm~ùË_Ê 7Üàš®5Ñe8p ÈÚj:1Ñ·‘C°!á`ëQÜmÿeè:ŸqÆæw÷®Ÿ[ß~ûmÏ4 oëã´m$ÓnËú{®X±¢Ð«`CÂJ»Lëg>o4Áòx¦i ]¯mïùûÛßJ¯^½Ì6ùôÓOƒÞöÖS;kØÛ Çka 0á‚0Èî »Sì>N¡sÚˆ¬ðë9¥aB¾^}Õ~é%ê¢ô³Þ!áøøxO€`hH8…2D>ᯇ5XãP¬‹¾óÎ;eذažá„CKÞ¶m›gž¼¼<Ÿ°¢v¤ÕÀÚñ·°î´Å…bO:%111¦“¯¿:xºö³>JC±:­wïަ뮿ÂBÂZ}œ? £aLíâ:b„ï•»*;$¬4¨+‡6·Ÿxâ ©S§ŽÏ:M™2ÅÆ¬û¹n§šµvÙ-kHxæÌ™fzJJŠyœ>GÿþýÍëhÆ >ó6jÔÈÌûðÃ{¦=þøãfÚyççóZ)MHX»mkØXƒáX¿ä’Kä¯ý«™G_û¡Ž0Èê"3ˆœâã(ÄÒ[Eú]œtå»›0 <-Zä J]B^Ù; ¬COÖ”Dœ5R)CTÉûäèÇ”""8]¡Ç†Àº8!áo¿ý6àý% VÌÍÍ5·oºé¦B×¥¸P¬³Œ|ÐõXíÆª_Æ v}¯¼òŠ PjPT;9rÄsŸvwíܹ³ë¹î¸ãÓ¶8ºÜ{ïõý¢¾ÞÖõ8tÈïÒ¥‹ôë×/èzs;Ð2æÏŸo¦½óÎ;&x}Ùe—ÉŸÿügŸu™0a‚™G»ÝFº‘#Gšn»úûΘ1£Ì!a¥tï/‡ÆÅÅIzzºk¾»îºËÜ¿lÙ2Ï4í´­Óþô§?ùÌ[š°Z¸p¡ÜrË-¦;ñ /¼`º ë<úx€PGHD»ÄÒEÉLµƒäÞÖ¥¸ƒÃ€ð¡ÓØXß°W*„Ž>úÈ:t¨äääP@КXãuÊU†‰GdmÓkTö»ÀÒ„„µjICÂÚY·fÍšÒ¤I“B×¥¸PìñãÇMWÔAƒ¹› Í›7z}¼ihrðàÁR¥JÓeÕ¡ÝÆ|®6mÚ[Û_ýêWÒ½{wŸi©©©f=¶lÙâš¿U«V>¿Ûé kwZí`{Ýu×™àªÞÿå—_ú¬Ë£>j¦kwÝh ]”õ‹›…u¹.­­[·Êž={Bêw}뭷̶ýïÿËbò þòsE&Yo•³ß¡(œîºŸü”ÿó4 ÏëHm \å剴oïnÙ’º„ gŸ}Ö5j”¹¬-ÁеFeˆÚo´®5ÆQŠˆ’kúÖHªäõ(.$ì„EõŠJC”7ß|³™öÆo˜iÁ†r¯¹æ3mݺuŸkâĉæþ+Vx¦ù/[ù-ý>ëmÚ4Ó…[ƒúsçÎ5¯! ëkè Ô@™effšáÎAî°÷¿ñvøóØ^6. ·w¹½Ÿäeþ<í›gD>hBm œõïïÖËßjx!å¾ûîs…„_{í5 (=Iö1eˆïZCû¸r´'ò¼Sðzž^‰ëP\HxéÒ¥æþ#F˜€¡v×m×®]©Bº,íÖ«!Å%K–HVV–YÆâÅ‹Íý»ví2ÁÕš¶úE:ÿeÏœ9ÓÜNII1Ï¡éo}Òà®v8.ÉúŒ=ZÒÒÒä»ï¾3tÏ9çéÛ·¯ç~}~ Ê^{íµæñäÕ€ô¹çž+ûöí+¶¶³gÏ6Ý“õ±ŽcÇŽÉE]d:k ô9ôØtrr²ÔªUKvìØá™7˜zw;Ð2ÔÆ=ŸG^yåŸõ>uê”\qŦ>o3fÌ3Î8Ãlg ¡ë¿Úqû‹/¾ 8 lŽeèrkamQ{Eѹ†„sÞÿyÚ–4‘÷Qg£Fù†„u,_N]BÌ7Þè Ï™3‡Â‚¦]eõ$Y¥ˆ]¬q+eˆX‰bwΩ¤ç/.$¬QíЫVÚwíÚµæ1o¾ù¦™§${õ½oÆ =ï…4h`::FŽ)µk×6÷iÀ1вß~ûm©W¯žgqqq’žžî¹?Øõ¹çž{<Ï¥ÿj÷Üœß-±sçNiÑ¢…Ô¨QÃüþ_|±¬_¿>¨Új W»ë½­\¹Ò,SŸ·Zµjæ_ ¿÷Þ{®eWânZ†£cÇŽ&@šç÷åRí>\§N0FøÓ×pvv¶ ¥oß¾ÝÜ„„P&z°S;68ßž×˪iw=È=|øpéСƒé¡Ý!222>^³gÏs W—¥‰µ‹E¥h;qHdz]»›0PÝW´{°cë»"“«SgãÆ¹C½:4$àÖŽgÚA €`e !áh¢Ñ=ý´>RDô6޳F{±¿ª´sîáÇËmyÛ¶m+ôênG5¡Æ“'O¹Œ­[·šc³eá(üñÇ"çÛ´iSÐá`o«V­2á⯾úÊõ¼ZƒE‹™ÈE=°õ(J e´nÝÚÀ½i˜úüóÏ— &ðâ@¥#$ €2Ñ0°v¾ÐpƘ1cLWa hèåÕô²rzÙgí¬ —VÓ0‡?§+à 7Ü ]»v5—_Ó®:dTˆM/‹L‰±»ÄÅ™×QdõˆŸoïΰ» Â׬YîðÈ‘Ô%ÄÔ­[×'$¬—/Ö“õKÿ×ÐOo™”"*èWÁcÅ’"réWÆôúN=$´ƒÂ(÷ßßÕM¸²-\¸Ð|ñoŽñ¯ýKRSSÙh œ½@™i0X†nÞ¼¹Ðy4,h'$üøã{¦é%ä.¹ä©_¿~ÅwžÝBdYÁÑ}eq¿Ÿo;!aBæ¾´«Uõê¾!áž=©KÑNiÞa‰‰‰ærÃk‰Ø'ɲ)ETÐÐh2eˆ k¬ÑÀ]„Px$:xð`H­O¯^½Là ÿcØ`c d@™ÖÀoNNŽŒ7ÎÌóÙgŸùÜï„„¿ÿþ{Ÿé·Ýv›™¾k×®ŠûEl™\]dÏ6*‚£]„?ŒÿùöÞåvHøp6µ€p•›+rž!áË.£.!ä£>r…„‡j®f@°2„p´È·FŒ5Þ¡QCƒÂÚQ8®àgàtÑ/0†k 8§àÿ@›¬1ß묱žQaã/!PA  Ì…„wïÞ-øÃ$&&F6l(-[¶4ó,[¶Ìç±……„Ÿ|òI3ý믿®¸_dŽ"ó:²A¼ÿy¯þÏ·5¬!á<.X a­o_ß°v>Ä‹CŘ1c\!áQ£F™/§¬ébŸ$ãøÈ· `[çPЍ¢]„­a½“—aBWaDÇ>¿\ì/D¤Zc 5úXCv7»Ãö/!5Ö³Û€ BHe($Ü®];9ÿüóeÓ¦Mæö|P¢NÂ?ü°™^a~Ì™^WdKÁÛa‡‚,8Õt$Ǿ­ÓáëÿþÏ7$¬cÞ<ê"îºë.WHøµ×^£0€ÑOÿœ$‹³F ʵ޻«p¬Ø¡I®†H±Á/[#Iì°<Õ0pBÁôb†Ó ^ ^C¯Ã’-t¦“0ˆÿ@™Mœ8Ñ„3V¬Xanoß¾ÝÜÖnÀ'$¼téRŸÇ:!á={öøLïÒ¥‹4mÚ´â~‰u)"3ˆü”ÏEðœÎÁûVÚ·O°oïú˜Ú@8{ã wHxÜ8ê"ºvíê Ïš5‹ÂJDƒU1”!*hXneˆjz½ í®Ú^ì“ã¨Ô¥¾ÃÿÐk„$#4Ǻ‚ýRÎ;ì›,vðÝÙ—o-Ø—µ‹0³!a”Ù®]»¤jÕª2pà@Óù7??_.¸à¹òÊ+eÍš52gÎiݺµ püóŸÿôy¬îÔ©“¬ZµJŽ9"ãÇ—*UªÈЩù¹"ScE6½ÌÆDÉœ8d‡‚w|øó4½MGjo‹¹CÂwßM]BD£F|ÂÕ«W—ŒŒ (‘±CVˆlúUp ƒO§( ÝS50¬AË6ûÇ/Œ0úÿV¢Øaál^Î!a”‹‘#GJíÚµMPcÆŒòÖ[o™ °ÞŽ—Ï?ÿ\LøwòäÉžÇ9!á_|QêÔ©c~މ‰‘ÔÔÔŠ[ùÕ#DfÅÙ]`’ÒÔ¼ºKN®.²ùuêá,;[$6Ö7$ܵ+u ‡’jÕªù„„õ½æÊ•+) DRÄîÀˆÈ–!öÉÐ\J"h÷U: 3B¹“°îŸ\ÿ¥EHåæèÑ£’-'Ož4·úé'Ù¾}»ç~®÷Ÿ:uÊ3Í ÿý÷fþÍ›7Ë?þXq+}`ƒÝE8ç}6 JgN‘•^.}¿‘Hf*u€p–—'Ò¾½oH¸AêÒÓÓ}Â:Í{LJâ!kÄS†ˆ—b8ʈb„„P©¼C•b~‚ÈÂ.l”Þ’D‘ô?ßþ ‰ÈºêáîÆ}CÂ:¢.•ì?ÿù+$º@¸{öYwHøï§.•ìî»ïv…„ÿñP@‰u³Æ­”!¢eŠ}"t¥D1Bˆ>û׈¼W_dÍCÔe§óIÖG«Ÿ .sþI7‘eIÔÂÝôéîðÝwS—JÖµkWWHøÍ7ߤ0€Ó.ÂÉ”!¢·F}kœ €(FHÑeÛt‘ ìç)N¡hè\C‡³íÛKoIïA] Ü}õ•Hõê¾!á®]©K%kÔ¨‘O@8&&F6nÜHa%FH8òéöíCQŽ0¢Ãy"Ë“í0§v& Œòrâ½_í]nßÖýlaêán¹õwýŠ+|C—\B]*Ñ¡C‡¤Zµj>!áøøxÉÎΦ8€‹·ÆÊñÛxeD9BÂ9yLä‡õ‘3òÖ‰äÎÙ÷¥Ý9X»¿W_dVœÈŽÙÞ(SbD²ß±þ| Èüjánï^‘ë¯÷ ת%’“Cm*IzzºO@XGbb"!a@©4±F eˆXyÖ¨n4Jˆr„„`kµj$Ž©±"Ÿt³œÚñ8f·Ù0ÎþY;UOM $'û†„u¼ù&u©$ãÆs…„‡ &ùùùPb±ú eˆXKÄ> ºR¢!aDn'á#ÛØ¶¨D_û7ûçu)"4¡& ž|Ò5ŠºT’Áƒ»BÂ/½ô…”Šž K£ K¯õS×'( Ê€²Zž,²ôVûgí(<½.5€H0q¢;$Ü¿?u©$={öt…„§L™Ba%¦=èõÙ»”"b ³F Ê!a(3í¼°‹ýó–4‘I|Ô€ˆ‘!ë¾ê*êRI.»ì2WHxΜ9Pb9bŸ [@)"VGk$Q @™mzYäÃxûçmÓíð‰CÔÂ]f¦H‡¾!áÆ©K%ÈÏÏ—jÕªù„cbb$CƒÜ”P¶Ø'Èø_$rÅXce€0”ÙÖwEf4°Þa‡„gSwùù"½{û†„ëÖ9ÄA*ZNNŽ«‹p‹-dÍš5PbÄ>A¶„RD¤½B§h„„ ¬ö.ÿ¹{ðž%„„ ’Ü~»oHXÇܹԥ‚¥§§»B‰‰‰’Íÿ·€’Óp°ž Ë¢éã‚íË» @Ùi XƒÁ³~þy?  "<òˆ;$üä“Ô¥‚7Î:t¨äk·gJ(C‘F²±Ö¨O0 @Y:aƒwgüÖŸá綾Ü!á{ï¥.lðàÁ®ðßÿþw (ý´¦'ÈøªIdbÊ€AHÊÃÔX‘œ÷Eòs @$™7O¤zußp×®Ô¥‚uéÒÅÖõÉd¬£5’(TªiÓ¦Éõ×_/ •Œc Pfʼnüo¼ý³†„sPˆË—‹\q…oHøòË©K»ä’K\!á‰'R@©¤Y£>eˆX¬ÁW‰ r=ýôÓæsÛ÷ßÏzT2BÂP>é&²æ!ûçÉÕE²ß¡& öî¹þzßp­Z"99Ô¦‚œ8qBjÖ¬é®^½ºlܸ‘âJ%ÍM(CDʳ†õ‰\¦S ¨0™™™òØcYŸ÷z¦…jwÁ‚2xð`9|ø0D BÂP–'ÛC}ÐDdK5€H1p oHXÇë¯S— òÕW_¹ºÇÇÇKvv6Å”Šv™%$™–ˆ}ò3‹R@…ù÷¿ÿm>§mÞ¼Ù3޽¡ƒ0”‡Õ#DÒ{Ø?kHx3á1ˆ¯¾ê E]*ÈsÏ=ç '&&”ZŠ5ÚS†ˆ¤×ôÑ“Ÿ'(rŽ;&+V¬M›6ÉO?ýTâÇëFæÎ{ZÖmÚ´irýõ×ËÊeyË–-“ýû÷GÅv8q¢4nÜØ|NkÞ¼¹´mÛVfÏží kwáÔÔTiÖ¬™´jÕJÒÒÒ\×ÇäææÊÀåÜsÏ•åË—›ûÖ®]+Ý»w—zõêÉ…^(ýû÷—;vx›””$÷ÝwŸÏòyä³¼ï¾ûÎ3M—Ó®];Xvž///Ïçùu{µž‹/–«®ºJj×®mþÕm¬{饗xq€GHÊÃú±"œfž'’™JM R,Zä ÿáÔ¥‚<øàƒ®ð!C$??ŸâJå!kt¡ I?‰ÇQT‚Ç{ÌõžUGlllH¬_evu]ºt©têÔIbbbLÀR×Cƒ˜_~ùeÐËÐPq¯^½ä‰'ž0·ï¹ç³œ£GºæíÚµ«üîw¿+Q=Š»]RóæÍ3¿£wP5RiWúZ¯1cƘ®ÂYYYžÞ~ûí&<ùDêׯ/—^z©'ÜYœgžyÆt«uBÁ% Sÿà¨ÿý–Qœž={šÎ·Ñ@ƒÁZ¿Í›7{¦95Õ€¸óÏU«V™i:¿ÿ|·Ýv›Ï2¯»î:¹à‚ äøñãži;wî4aÝáÇ›ÛóçÏ7Õ®¾J;Uk°øòË/7ûˆ£eË–&üh[³ž×^{­Ô¬YÓgÛ·oŸ™G¿Ô ê P™„©]‹L²>b:a‡„WÜKM R,X Ò oH¸eKêRA´[“Høµ×^£0€RK‚¤‘JÃßC(C¥:vì˜ êmÚ´ÉtNHøÛo¿­ôu Ø 5÷ÝwŸYG ßG»ñžyæ™2mÚ4Ï´’„„ƒ©GqçJSÓ7š@kFFFÄïÿE…„·mÛæ™¦Aqöä“OºæËÍÍõLÓŽÀÚy:99Ùõ\:tvíÚ™Ÿ5Ô{ÆgHJJй­ÿêçGí0g÷•ß²e‹Y¾v<´­‹[O ¶k@øšk®ñYýûF'a. P™„©=Kìðál‘ô"Ë“© DЬ,‘Î}CÂuëŠ:Dm*@Ó¦M]!áY³fQ@©Ý*vP‘§5^¯Äçw‚¢þ#666$ês:#,]ºÔtâÔ`_íÚµÍó4kÖL¾üò˨Ø÷Š ?÷Üsrå•WúLËÎΖ¶mÛÊÌ™3Íí‰'šÛû÷ï—ÔÔTS¿V­ZIZZšky_ýµôéÓG6l(gŸ}¶é”ºhÑ"³ í¸«ëÒ¼ys³<íäë,[à MvïÞ]êÕ«'^x¡éz»cÇÏýÁ®†(ÇŽ+;v”³Î:˼_¾|y‘õÒåº}ùå—­_u}¦¶þ¯ ïû-£wïÞ¦»¬þîÞæÎk¬»wï6·»uëf®ŒéŠ {ÿ½ùᇠ{ϧáºôöíÛ×ì³ _}õÕæçöíÛË+¯¼b¶ƒ>~ûöíòüóÏ›®Õ…=_që¹k×.óóСC}Öƒ0'„„ <̲CÂûרáE}¨ D’»ïö ë˜;—ºœfzùaíÚ䲩^½º EPZÝ„n³ù¾AìŸ *qœ è¤I“$==Ý3/^\áë¢Zu}öîÝë™v:#hðòÅ_4¡J N~òÉ'R¿~}ÎÓ÷t‘®¸ðý÷ßoÞÇzÓN³ú˜7ß|ÓÜvŠ·ß~» £Ž=Z¤jÕªžÐ©Z½zµÔªUË„'L˜`j¯!ÝU«V™àoRR’YΘ1cLx3++Ë„t–¡Ë9sæÈŒ3¤uëÖrî¹çzö™`×G¿À§ÓÆoö1 D¯_¿¾ÐZi—Øßüæ7&xŒ.]ºx:Ç:‚ [¢nZ††Gõ¶þ¾Þ4ÀÚY¿`굞š÷Gšò ?~\ªU«&ƒ r=—?:4¬¯-}=U©RE¶nÝ*GŽ1Ÿ#ßzë-³=ôõWØó·žº.º_wÝu®Ïª„„@¸ $ ¢RqÝ ü; 0ÀÜ4ôrgŽeË–™o­ë2õ êüùó)6-~̳C»>ù| ÈÂ.Ô"ÉSO¹CÂÏ>K]N3=Éì߉/>>>*.Ù 8}ôÓZ eˆ8™bŸøÌ©Äu(.(Z‘…ö*Ú}÷ÝgÖAË‘ÎÙöPÕ¿ÎÐnÁª$!aíÈœŸŸo¦iðW§éötèsè´Ï>û,èmï„ÔÀã\`Ž;wJ5døðá%ZŸ?þñÒ¤I“ k¥A[]ÆÔ©Sƒš_ÃЉ‰‰>Ó‚ [ânû/ãÀrÆg˜ßÝ»~l}ûí·=Óô„>N»ÑF2=Ÿ¢¿çŠ+ ­± 6$¬Ú´ic:d{;xð éœ­çkH×Çk@Û{þßþö·Ò«W/³M>ýôÓ ·} õÔÅövÂñÚEXÌ„„@¸ $ ¢RqÝ ü ý÷¿ÿ5¡óë7ÑÏ;ïøà¹á†ÌßÊ< ‚M®.²%Md] !aˆ4'ºCÂ÷ÞK]N³)S¦¸B $ (‹8!$‰>–Ê?ñY\HX)^yå•>Ó4DªfΜéõÖÓn`°ÿ~IMM•fÍšI«V­$--Íç±zu ¢jˆRƒs[´h‘y¼viÕuÑŽ›º,í6ëßAi—ÔîÝ»K½zõä /”þýûËŽ;üÞ ·>þtÞÊ*Wô¶¿óÎ;eذažá„CKÞ¶m›gÝVÞaEm~¡€µãoaÝi‹ Åj'ߘ˜INNv=¶C‡ž®½Á¬ÒP¬NëÝ»·ÙŸŠþX5Ñ„6õ¸|04Œ©ÇñGŒá3½²CÂJƒª±±±žÎÜO<ñ„Ô©SÇgœÏ3+W®Œèý_÷sÝN4jí²[Ö°þMÔé)))æqúú÷I_G6lð™·Q£FfÞ‡~Ø3íñÇ7ÓôŽ÷k¥4!aí¶­û­Ãõóè%—\"ýë_Í<úÚu„„@T*®»Aa¦”DíׯŸ /]ºÔ3]»/\|ñÅžÛzpPX=ðÀˆÆ‹|óŒÖŸ‘ã?ÿq‡„{÷¦.§™ÓyË{hG:½D0¥¥G„ÆQ†ˆc}—Êþ$^\H8˜ ¨rŽMj3 ùŽ=ZLÏéd¹zõjÕ€ð„ LXß;i§W j&%%™eh×V 8êû'ÿcžÎ2zôèaBp3fÌ0WGÓêÞ½{K´>þôêo~óVŽå±íƒ +æææšÛ7ÝtS¡ëR\(ÖYƃ>èz¬vcÕÀx°ëãxå•WL€R÷ íD|äÈײ5L¬AËwÞy§DµÕåÞë÷M½­ëqèÐ!×ü]ºt1ÇG0·-C¯"¨Óô÷Ñýý²Ë.“?ÿùÏ>뢯MÇ»AI¤9r¤é¶«¿¯þ-)kHØÙgtt> ÆÅÅIzzºk¾»îºËܯWzth§mö§?ýÉgÞÒ„„ÕÂ… å–[n1݉_xáó·OçÑÇ„:B *×Ý ¨SÎß×_Ý3Íéàpíµ×šîÎÐo°ëUQB»k@XƒÂ4¡I´sml¬oHøòË©Ëi6dÈWHø‘G1©(­k¤Q†ˆ£}F»Uò:8Ç µ“©vøu†v V% wêÔIòóóÍ4 ÿê4 +*}½­A¸@‚ FjÓƒ .¸@Ž?î™gçÎR£F ô,ÉúøÓp²Þ?uêÔ¨ØÿJÖn¨% kg]m^QTŒâ¶½no ë4ÈõX k<Øõñ¦¡ÉÁƒK•*UL—Uo}ô‘ùý_}õÕ×öW¿ú•évíÍéR½eË×üÚåÚûw;]!a=' Çÿõu¤ÁU½ÿË/¿ôY—G}ÔL×îºÑ@»(ë߻º\—ÖÖ­[eÏž=!õ»¾õÖ[fÛêU(B!aµŠênPXHxúôéæ §v/óæt_8çœsLÇïQTWfé­"+îÙ’&25–z@$ÑËÃꥡ½CÂgž)’“CmN£ž={ºBÂÏ?ÿ<…”‰žK£ §‡5†Tò:8AÑ;ï¼S† æ»ví2÷—4$¼mÛ6Ï´¼¼ûl0`@‰ÖÇ_·nÝL°×¡×ãæ7ÜpC©j«]±½—§Þ}÷]O_oÚYø¬³Î’§žzªDõ(îv e¨‡~Øœ_ÐÐ~Û¶m]ë~Ûm·I|£G–´´4ùî»ïL'] {_]Otècô8¼îçÞà MeöìÙæØ»>·ãرcrÑEIãÆM ôwÔeiè]ô;vìðÌL=Š»hÞ¯_ڔěñ¯¸â S„·3f˜†3ºõ‘þ«·¿øâ ŠÂæ8@ÔóïnàP/euñÅË¥—^êê.ìÐz)>= J­yHd~‚Hö;vHø—B€ˆ2t¨;$üè£Ôå4Ñï0ñk·»… R@©åŠ}rìcJq4z›VÉëPš°2KvhËÂÖî—ú^kРA®Ç&$$˜\°ëãøè£Ìï÷ꫯFÝþWܶ×À¨vèÕ«펻víZŸm_’0öœ9s¤aÆž÷É 40N#GŽ”Úµk›û4àhÙèÖ0¸³Œ¸¸8IOO/ñv¿çž{<Ï¥ÿj÷ܯ+®$&&º¾øç ÿμ…}.ЮÇþW÷[¹r¥´hÑÂ,Çùܠݵß{ï=×2Š«Gq·-ÃѱcG ÕîÚÞ´ûp:u<ÄÞô5œmBéÛ·o7·Â!a•Šënàé½Î;›“'O6—qóG5Ñok7=ˆ>uêTsPðÓO?õ98 Âe¦Š|ÐDd×ÇvH8?—š@$7ÎþèËiòõ×_»BÈÈÈ 8€RËûäÿ›D–½ÛuA%¯GqAÑG}ÔÜïtO=yò¤Ü|óÍ>ÝdU0áLmX ·õød Pôaú/W;ÑjøÒÛÁƒåì³Ï6Ö’¬Þ§ÇXo¸ávÈ"ìÛ·O>\nËÛ¶m[¡Ýxõ¸µ†u?+ÊÖ­[M“Œ²p”?þøãi©ÛªU«L¸Z¯öçÿ¼ZƒE‹™À}QÏl=Šh­[·öy½8¯óÏ?_&L˜ÀN€JGHD¥âºxøÖ…u:ð?ЮíHìܧ˾ûî»)8-6¿n‡ƒwgØÿΦ&Iô}ŸH¸Gêrš¼ð ®÷Þ]ºt!$ (ý”FH8ò,)Ø®*y=Š /]ºÔÜ?bÄ™;w®ôë×OÚµkWª°.«J•*&è«-³²²Ì2/^lî×î¥ÚÐ`àÀràÀÓÕ¹3gÎ4·SRRÌòõ1ýû÷7Ý€5pY’õ>|¸¹=xð`Ó×{bJâý÷ßwu®lz•Ýïý?£üë_ÿ’ÔÔT6B!aµNgwí¼ ¸äerÞ·ÃÁ;?&$ ‘(3SD/íþõ¯©Ëi¢_¶ó ÿþ÷¿7JKc¡&Eùz§`»æUòzÖc…ÚqT;¢êHJJ’µkךÇh˜ÖL(WÍ™3G6lèy¯Ô AŸ«š9ÒÓ(aÆŒ—ûöÛoK½zõ<ˈ‹‹“ôôtŸõf}ƒj²”…vº%½zõ2¯ÿóÌB!a(/ûרáà=Kìó2© D’%Öß÷Ë.ó ×­+’ŸOmNƒ>}ú¸&tÑ.x”ú¿s±OŽeSŠˆ¢ý:…ÑúîÛ·O>\nËÛ¶m[¡Ýzõ*iÚ(áäÉ“E.ChãÁÓ×]¸‚s þ/Ô±Éó­±Îë6Žñ„0”—üÜ‚N³íwgPˆ$¼¸þzß°Ž þÞŸ×]w+$üüóÏS@™èÿÚzr쥈(­Ñž2ˆbÚI}¹ØÕS þ.ö±FGk4±Fƒ‚ÿÿ¡3Ö³Û€ BHÊ“†ƒs€HuÇîð³ÏR—Ó iÓ¦®ð¸qã(  L>NŽE¢>¢Åk¼l$±CÀNðTÃÀ ÓGˆN³Æ»bQÆYB'a: €hÁq(OSbD¶M·CÂú/ ²¼ü²;$­™.‹ˆ,1Öx†2 €vÃMq€IDATX^°OÜ+v—é.Öˆ+xýÿ‚ÁÓ¡áàD±ÃÂÙ¼Ô$BÂPž>ŒYû7;,¼K¢@ÄÙ¼Y$&Æ7$|ùåÔ¥œ=÷Üs®pûöí%33“âÊ$Eì΋ˆÚ9SOx¾K)¢–¾CknÖˆ-ØôßÖèg!¯ý×­ñŽØYu¬: 3£“°îŸù¼ÔPJ„„@x:yLä‡õ‘?òÖ‰äÎ9¸Iä'aaa‘ÏÚ!áu)Ô"Mv¶H›6¾!á³Ï¶Þ³åR›r4fÌWH¸ÿþ’••Eqe¢ŸÒ G ˆê Ï%”"ºÞ–[㡂׳níœ,vX÷‰” B âÊ,¹` rhè;¡óg‹ Ö“¤Ã¬‘E Œ0@$Xû7;(¬ÿ¨\[Òì×£„5Ĉ<Ë—»C¿ù u)'_ýµ+ k¦PV½—2DÜ6 ¶;´õ.Ît޳ÆJˆ„„"…'WÙô2µ*ÓÖwíð—÷‹,ìB= mÜ(ã>÷\mKmÊÁ /¼à 7iÒDV®\Iqe¦ŸÒøŠudÑÀïˆ æûرÖH´Æ!ʈ„„"ɺ;(¼g µ*Ëî ;$¼ò>‘ù Ô"‘vnÞÜÝMøÓO©M93fŒ+$Ü©S'Y²„÷¸€²ëhÊQb¬1®˜y¬Oê& œl ¾Öˆ&„„"Íâ~"49¶—Z•áÀ;$üù"³â¨D¢¼<‘Þ½Ý!á—^¢6å`ðàÁ®ðm·Ý&999Pfú)-…2DÎÛ2±Ov.(b=BÖÀIB@} D Ïh ²,‰Z•áHŽ^ñg‘÷QˆT÷Þë F]ÊAß¾}]!áGyDNœ Ö(; ‹Ž§ #S쓊˜G¯ñ£áðC” … D¢ŠL®.²;ƒZíÔ‰‚N²_‡€È4nœ;$<`u)M›6u…„Ÿþy (ú)-2DŒÅ>ÙYXø™‚m¾†R¢!a€Hµ$QdN;° bM¯+²ì6;, ˆLï¾ë ÿú×Ô¥Œ´[pÍš5]!áÿüç?P.ôSZeˆ¯[£n!÷e[#Ö£L€(Æk€H•—iw1Ýú.µ*ÚMD–ßa‡„OpASˆHk׊T¯î>ÿ|êRF999®€°Ž?üâÊ,OìcïSŠˆ‘j…Üw¯5⬑O™QŒ0@$[žlwP±>n/²øwvHøp6õ€H´fH£F¾!áZµD²ù»_Ë–-s„ëׯ/Pfú¿´žã•È1Ð=LÏ´Fuk¼C‰QŽ0@$;˜ewÎ]@-€Š´°‹HFOBÂÉrrDºuó ëxýujS¯¾úª+$œ@HP.ôÓ!áÈ¢á¦'[£½5NP"@”#$ é4¬øI7êT¤eI"ó:Ú!a ë"ÓÝw»C£FQ—22dˆ+$ü§?ýIV®\Iqe¶Aìc(EĈ·Æßü¦e‹ÝEø]Ê!a€ˆ—ó¾T<¶—ZåËa"^n¿övgPˆTO=å D]Ê oß¾®ð< ‡¢8€2["ö‰±lJ1b­á‡b‡‡é" !a€è0£ÈºêT}½}p1!aˆto¼á ÿ¿ÿG]Ê iÓ¦®ð“O>IaåB?é‰1£‘aoÁö\à5-ßuÅ Z•îé§Ÿ6'ÿ¿ÿþû æì±Ç\Á±±±³0«Gˆ¼W_ä§ÁJ³Ï%ö¿ñ"“«Û!ámÓ©DªE‹Ü!áÖ­©KœwÞy®÷ùÿùÏ(  \è§3NŒEŽ5Ûsƒ×´4kĈ  !`Á‚2xð`9|øpPó;!áI“&Izzºg,^¼¸B×;33Ó¬ËÞ½apÚaÿ;¬¸wyÔí_¶“ÿ>VÛáAƒÁúš›^WdKõ€H•-¢_Tó ש#rèµ)…CVݪU«æ ôÑGP.ôÓY eˆï‹}¢3ßkZ{k$S< €°ã„„¿ýöÛJ]ÿûßf=6oÞ…û ‰ÈÊ!Q·¿³Ân["ôíΰCÂï7²» "SNŽH‡înÂsçR›RX¶l™+ \¿~}ÉÈÈ 8€r1ÖM(CÄg^·³Ä>ñ¹„ÒàAHTº‰'JÛ¶m%//ÏÜ>yò¤Œ;V:vì(gu–4mÚT–/ÿ¹n0!ag™ûö퓇~X.½ôRiÑ¢…L›6ÍÜ?~üxiÙ²¥ÄÅÅÉsÏ=ð±{öì‘ûî»O7n,_|±¤¤¤È©S§<óèt]æÍ››ùgÏžmºÓ^{íµæwð6wî\i×®ìÞ½»ò ½~¬È{õEN8-‹×NÎW]u•Ô®][®¾újòк¼ôÒK>ói½¯¼òJŸiÙÙÙfÞ™3gšÛk×®•áÇK‡äœsΑ›o¾Ùq¶Óþýû%55Uš5k&­Zµ’´´4Ÿym'ï}.Ð<½{÷Ýíˆð—ùsHx] õ€H•Ÿ/2`€;$üä“Ô¦^~ùeWHX߯oذâÊ…~: µ°sœËÄêÕ BÀÓO?mÖçûí9̽n?d8kœ`WÀƒ0¨tþ'fÍš%U«V5AÞ ˜Péúõë=óv–yË-·È5×\#/¾ø¢ ž}öÙòøã›àñSO=%½zõruu{à 7H×®]eôèÑ&œ Óž,|hˆ5))ÉL3fŒéD›••%&L0Ót½½õíÛW:wî\¹…>°Á-î)ÿ~*«V­’ZµjÉïÿ{™?¾¼öÚk&˜­µx衇|æ½ÿþû¥zõê>Ó6nÜhæ}óÍ7ÍíW^yÅÔL—3cÆ ¹âŠ+L¨;Ð6¾ýöÛM¸W·SBB‚ÙwœoaÛÉ{Ÿ 4nçÝŽù¹öëm楄„ Òå H]JA¿pçêÑ£‡yÿ@ypB¤¡Ä9Î5iÒ$IOO÷ ý2vEËÌÌ4ë³wï^Ï4=6¢ÿG>|8ä¶g?kÜZð³ƒ5>ŒÝ„„@¥ó ÿñ”&M ïëâœpà€œqÆæwpìܹSªU«&o¿ývå{VœÈêå¾X T_xá…òÓO?y¦é %­Ïƒ>è3o0!a.,ÌÝ©S'É×.~b‡•ušnG íä¿ÏùÏòÛáACÂsZ‹¬¸—Z@$Ó÷Œþ!áž=©K)$&&ºBÂùË_|‚J”E²5Bl‚ù2|E t %”µ;ø­VŠ}Ò3“Ý„„@¥óljSo÷îÝÛtyõçœ<;v¬éÜë 'øë½Ì={öx¦iöÑGy¦Ÿ ÛNÅ…„C~;"N7B Ò å¾òÊ+¦“kÕªUeøðá>>‚é°h™NHxΜ9ži% kðT§ëÉUXHxþüùfú;ï¼cÞüöîN¦zÿøÍßÅú[In”%‰HBÙjóC*Ý$¢¨¯\¥\J7Q7µ‰R×õo¤o’ÿù—ü—¥õ/ÿYªÅ.ËîEþ¬Åâý;¯Ï™3fæœÙ™ÙÝ9óz>ŸÇîž9sæÌ眙9çuÞŸZµjÉ+¯¼‘¤W7=µ'x‹ÌÈPÏ÷Í7ßt›žŸðÑ£Gå¹çž“¨¨(uÒ '¬pûÚµksÝNþùgÐBÂ!½)<Ì«)²´™HRGö‘iŸŸm\CÂeËŠ8F: ÿÁ$׆‹Åˆˆˆ‚¥›ÖB횯ã\þ^lmëxöÙgUÈwðàÁ§Ž­á8 lݺUJ—.­Žµà‚{„€q>FfBð·[·njC‡UÇJöïßo:†b,£mÛ¶êÛìÙ³¥aÆrÝu×¹Uÿ÷g}ò‘eœäœåøáîâDT„0¢!.ЍP¡‚zÿÃûÚƒ>hz÷vÂʆ Ô¼ß}÷;¹ 4Hõïò¼ŒØØXÓwYÏæù¿<’ö)㳎gC‘–PHß…+†„‰ˆˆ(d¿€ã„AïÞ½åšk®‘×^{Í9½¨BÂo¿ý¶šn\‰í-$Œ7Õ«W—Ö­[;sË–-¡ÑÙWrD¾‹Ù=,h‹Dà9>õÔSnÓ ïÙ³ÇíäVãÆå†n½{÷ª¿ç͛絒pA…„Cz;RxXÚ\dQ#‘ñì "";Ó>ÇHýúæjÂIIì›dggKñâÅM' çÌ™ÃÎ!"¢ i%z5áPbçjÙ²¥ªðk4T †@CÂ-Z´PÿWá_LÃqÀcx_qåÏ1'¹ñÆåâÅ‹Îy>,%K–Tú²>ù±Iô“œÛ´–ìøŸ¾ˆ¨(á½NŒH‡Ññ0"]bb¢ "äézl9P"þà< .Ò¦äädõ?ÈõPXVaËKHØóù®_¿^C0*ç_ýõnÓ°/Ø}Ÿò¶/Ÿu¦L™âÖ'«W¯.ôímµ~Ë—/WýaŒ*IDDdG Q‘óuð¢U«VR»vmçß…F…\WñññR§Nçß6óaˆ'Oãà N¾`hŲ¡§\ ¢˜˜ùë_ÿê6 x¬BÂï¼óŽšn„A·S§NjÚøñãåСC¦ ¯^³fM®ÛØ*$lµ<ïëm[†ôv¤Ð÷c+íµ¦í7 ë³/ˆˆì žvíÌ!á/¾`ßà矶¬,´{÷nv .á|+ÄÖÉ8Îõ /H¿~ýœíÈ‘#êö@CÂtN;yò¤ó8 Ž¿ 0*þâw+¾BÂi £>uïnŽZ7kÖL]ôíïúä×4ÑOržÑÚp­Åh-‡»8\܈÷7¼÷yÂy†Š+Ê<`ùÞZT¼AñÿC¦M›”eªß[«ñ%/!a_ÏÛ#åDÚ>å­oü9§êû=Q¸cH˜ˆˆˆŠœçÁ ?8aÂ9v옺ºråÊòøã;ç7(L:U]5íÚŽ?n¹L4$ŒJ'¨p’••%cÇŽUb5àd ¤={öTÕtsr®žŠ0NÖ =:´:ü÷ "S´§÷m‘F•å'žxB–,Y¢úóî»ïVÓè6/‚¾˜Þ¿5oûöíÕI$#$Œ~DEš{î¹G¶mÛ¦¶†­ÄícÆŒñºß€UHØj;yÞ×Û¶ éíH¡o}w‘…wŠÌ«É¾ "²³3gD0¢‚gHø_ÿbßàóÏ?7„1ªƒQE‘ˆˆ(êj-!ÄÖÉWp&а·ã$éééê÷:x]_!acžÇzÇîªT©â÷úäÆÈªêøáï.ܽÉ‚òógY¡*´ƒ&MšÈµ×^ëµ)Þ7Ñ×IŽgŒ¾Çqé¾}ûª@i5$!!A]ájçΪ€ÅŠ+ܦ¯]»Vî»ï>)W®œ:~¾lÙ2ÓãîÚµKU£­V­š”/_^4h «V­RE3ð˜X‡zõê©å/\¸ÐçóD1úõë«¢!«e=öØcòÐC™.JÁùœ À(’¸æEàÕWøó|7lØ þ_â|ªÅúË3$l¬×‰'dÈ!rûí·«ÊÀ8gåíùzö?!á;vÈÃ?¬þwÞtÓMÒ¹sgIKK ù}*/û•¯Ï:#FŒPçƒ\áXî?þ|¿¶K~ÖÏX6.fòwû²>DDD¡€!a"""*rž#_zé%5T¦áç3Ï<£†R2¬šFHxÔ¨QêjlüŽ*)ø¢ïiÀ€Îu={¶ÛmÍ›7—2eʸX ç3E¦–ÐÃÂA‚U¨Œ 5úGpÀǪ’0HuíÚUU¯AëÖ­›:àâzrë›o¾QAaL«[·®:À§–p¸·mìíd“çv²º¯·m²Û‘Bߦ>"ß×ù.†}ADdw/¿l wîÌ~ À+¯¼búlÏ{öìaçQÐàÎá!¶Ny ãÿc !áK—.I©R¥¤fMï²ú _¼xQŠ/.½zõ2Ýÿ·¸ñw}ò µŒ›k —À£wær÷&æ÷žËBhï7ÆènÁ~¼HfTYoÓ¦×ypNï¸8Òõ=E70Š §ÄÆÆZ¾GâØ8¦÷ÝwÎi¨˜‹÷ôgŸ}Vw±ü¯p}ÿÞºu«:þŽ äW_}¥ÂÆ S…Qp<Çå±Ü¡C‡ª÷TâõaѦM›Jtt´ ÕâýÜ`µ,<ü}Ì.(1ªßÒþ<_ÀE4sâæÍí9çv÷?tèóoô/úÙªŠ€?¼m'_ó„ôv¤Ð¶3AdÎzån""²·O>1‡„ãâØ/Àç-Ï0ªORŠˆˆÈÄO&„Ø:ù μóÎ;êv#”‚c¸PÛ‘ÉàO(÷þûïW£‚ TÅÃí®Ãµ{.·Q£Fª"Ÿ+\„J}®ÇO :$ÜDk=E}ãÒÜîÞ!ÇóPٯ܎ÃQᲺ€‚·Ï£oÿþ÷¿{•M1Ï믿îöéZ¼£ÛÝrË-ªJ¯ë1p«@gëÖ­U•X޳#dùæ›o:§!(Šû­[·.Ïû*ËÆÇÇ«À*ÖUýYFëCáçŸÞ9ÏáÇUxwÒ¤I÷?Ï×ÕöíÛU%YÌóâ‹/º¡ñä-$Œ‘&³³³Õ4L1 ÏÓŸ¾óÆóA‘\|ãÚ?%K–TýªûT^÷+ã³î‹íb4cä @B¹m—¼®Ÿçg_Û'õ!"" <[MDDDä!ìa˜&,#1114Ÿä/ÃõjÂY©ö¾BÂá ä·#…6¼Î¾«¬‡„/e³?ˆˆìlÞÝÙªW¯®*õºÎƒ}Ë[X?· +^·>ú¨ E¢z|ZZZ®}`µ,\8‚÷cßùðÃÕÈ(ÔHøó|½AP÷Ãýûõë'ÇŽ3Íã-$|ðàAçDDD¡v<„ˆˆˆˆ\ã`9 áàl^«Þ8„ƒþ¥àÙ´CH8ä·#…¶”Éz@íl ûƒˆÈÎpAQLŒ9(ì8ÉH¾!@á¦ùš‰ˆˆ‚uxqRlyˆ­—¯0ŽI h…Ð †ÉÆpÙ®Áð7”‹a³1·ñÿ¶jÕªÎÀ! 0ÀôD8Ðj¹¨Y¥Jç2pìdåÊ•në]!ᓎm9Oô*Â#Cp{N™2Eõ‰ÑŒ vaˆ X£ 5,_¾\z÷îëè^y…PB§¨¶ˆpBéZ!T Œ}þ‰'žP•,1ô<^Vû¼1/FÎ@˜ðã?Výçùº1þFx•ÀG%wÞy§ªÜj¡ßâ¾8†™[è ïxïÀßC‡U!9\$à:ϸqãÔï{÷îu[W„ñœUÆK•*%Ï>û¬Ì›7OMG°Ï3(ùý÷ß« bÆ>‡óîÝ»m»íP!ªzƒP6ú÷óÏ?÷ú ØW0Ub žN„ËñwåÊ•¥V­Zn­C‡nó[ñtEˆlbÛ"èýÇ«e!@Ži“'OV}„õ{å•Wrý?aÕþ<ßܶ þ—!4Šÿ[cÆŒ1Íã-$œÛÿ¯ü„„ç3pà@Ómäb=CqŸÊÏ~åë³N !áܶK^×ÏuÙþlŸ‚þœCDDT&"""ò••¥*>ä'Šƒï¨¸ÒV·YX_äJÁ Ȉ~,ˆ“…%,¶#…®ôå EФ$‘-Ì!áo¿eßøCsbØYÏðÈ‘#Ù9DD4øV†“b‰aºþ¨$Ìc,¨|çu…€†÷V…Ï€@•·¡ç ô£—c[NuüÜBÛÉWª0ù ±†§žzJ…ó"Cx×€jÜ·Ür‹ÄÄĸk6æE…O«ex†„»téâ|=N:UMCEð'N¨iûöíSÓ>ýôS¯ËòŒCL\ˆðî»ï^}ßÔÞP}`@`÷ðž„`ß›o¾éö<žþy©Y³fDýiÒ¤‰\{íµ^ß§8D_£Š»Õö1 b4¦»“ö t¢8ÂÚO>ù¤×õ1æÉm;øz@©`cô ûZöYT¢Å~ƒ‹%pû–-[¼î£ÞúÀŸçkeñâÅr÷Ýw« _Þÿ}¯Çù ;$|ñâEõýš=ÅÅÅ©jß¡¸Oåg¿ÊKH£Îëú¹.ÛßíÃ0…†„‰ˆˆˆ"ÕÑD=¼˜‘ľ *Ç7] ŸLfÙ6¨®å<˜}ã£Bgs­ŽHDD”_)zRʛϴVIk¼Iˆ­›¯ *ªÞsÏ=îûfJŠÜu×]2þ|ç4TäÅ4„@‡ "·ß~»ª ;a·û¢2d»víTuhT—mР¬ZµJÝ5¬ MXªNËE Ô€*¡?ü°ªŽxÓM7IçÎ%--Ííqü]O¢êl$ðÐCÓ9bš+s[†ñ·kß[þðÃÎi§OŸ6” BÝ·Þz«óö„„¹þúëUØO„ˆQYxúôéΆ(ªkºBµq£R²?Uhí`Μ9ê9>Üâëb¦TªTIUƒöì{Ï -âããU…hWžNÀ²J–,)ÇŽóºN˜÷Û¹s§åíx]ãvTˆÎ ÞgP™!Î=z8ôþ, UT•Fum¼‡Xíïþô?Ï×€Êís–-[Viq‘MnòöÕw¹…„!¼_»Âëïãf‡ê>•×ýÊ×ÿÆwÞyGÝn\¼„÷›N:©iãÇ÷{»äuý<—íÏöaH˜ˆˆÂ CÂDDDD‘lE¼Èâ&ZM˜(b¡z°F(Ÿˆˆì­[7sHøïg¿øÁ¸6œ€Þ¾};;‡ˆˆ‚f½è'ÅRØáÿ±Kk‰µq‚1¤:á#lòðçù>|XÚ´i£ÞÓ^}õUË÷&+y ûê;_!a\‚å!ˆecy¸@ÿPA7T÷©¼îW¾þ7b™¸½ÿþ²dÉiß¾½4nÜ8O!ἬŸç²ýÙ> Q¸aH˜ˆˆˆòïòyíÛïn¶‚h'wФ/9½W»Y*2½¬Èªv"¿ ×+Ÿ²ß n;fäûE$É9Ã0Q$ùì3sH¸eKö‹fñ ×­[W’“Y‰Ÿˆˆ‚ßÊpRì »"ìÕ×ÚcZCÔ65ÄÖÍB¡j&*ü Õ‚!Ð0Â^ÙÙÙjB_˜†°'à1Œ@§B¡¨ô{ã7ªáÕ Ú¡š$‚¬,]ºT*V¬¨¦£Â¬kõ\»óüE%ULGÍ×¼E¾pá‚\{íµÒ»woùñÇÝÂÍ—.]RáÐ'Ÿ|Òï>AHËB`ïµ×^³ý>€ê§x(W®œê;ÑPÙô÷ß7mkôç7ß|ã|ÍDEE©JÝž¬êÿš#,j|‡ªP¡‚¼øâ‹nó`?Á…ÆBp A*TüÅïV|…BÊB€¬{÷î¦û6kÖLUqôw} «nÚ´IU¤EÕETõ¬`iWFedd¸M—:uêXÎ[˜!á‰'ª¿7nܘëz¼ôÒK*‡í×´iS·õC0òcÇŽÔ7”ÖŽ ïFxMþòË/²~ýz9{ö¬å<˜nì+˜¯S„´­à{¶ÓòåË-oÇrpÅkÚ¼v]«ƒ»BuZ\Èàí½$VËBur@½½f°ÿ!„ž[ú| K0úÏÅó}#ö©‚دŽ?îõùåE0ÖÏŸíCDDx<„ˆˆˆò•„÷’pF’Ȭ "«ÙóV.èíx|‹ÖÏ#E–6×ÃzêÕfɾæÕÔ^c•E~ŸÀ¾ "²»%KÌ!a@Îð½/÷Þ{¯)$Œ°Šë0«DDDù…oeÑ솰‡°wqу‰!¸~¾ª%öV¡0==]ýÞ¡C¯ëâ+$l,càÀ¦û>þøã*(êïúxó?ÿó?R©R%¿‚áεÚ2ª,geeÉØ±cU]Ï tQ„„TGÒž={ªªÆ999–Ëÿé§ŸœŸÉ±þ®~þùgµŒ¸¸8™1c† Šc~× 0xð`™0a‚ oÙ²E…űO‘ÿðúÚ¿¿ Ï¢Ò-Þ7På;ܬX±BíKV€z{÷)""" >†„‰ˆˆˆ"YRG‘uE®ä°/ [Êd‘Y•ôÊÂl“=aûb;ï˾ "²;œôŒ‰1…—.eßøÐ¨Q#SHøÍ7ßTÁ""¢`™ µšì†°×YkÚ'.‰ÑõËKHFFÈ ÃÊ׬é}¯ö¾xñ¢/^\zõêeº/B õêÕó{}¼™6mššgi|&6úhÔ¨QR±bEõ;*52Äë¼…†H… ÔôÙ³g[΃ʡ5jÔ2eʨmlþÚ“¨ªŸÛ±<Œ â ÕˆÇÁÏgžyFRSSù€;v¨×gÙ²eUÐÜj? >ú¨ÄÆÆZV¤eH˜û†„‰ˆˆˆ"Õ‰m"SKˆY̾(*Y©z¥Ù¹ÕE²ÓÙv„ªÑßňìL`_Ù]r2Æe6‡„ÇŒaßø€a²=CŸþ9;†ˆˆ‚j˜LH—´ü®µeZÛ©µÝlÒÖhíY­]£µ(­…êx¾BÂï¼óŽºÝþÜwêÔIMs­6ëO(÷þûïWïܹÓò±&Nœ¨n߸q£×åâb­ ¸ÝÓòåËK×®]Z+ cžuëÖÙþ=ƵâF8;+(Ÿ;wNRRRÔ¾—ràÀËð'`:'ªH”3gÎÈúõë%---lŸÞëP¹Ú ªmc?ò¶÷)""" †„‰ˆˆˆ"Õúîz@•U„‹‚¨6»¨‘H‡#·UíDf_'²©û‚ˆÈîPõöùçÍ!á7Þ`ßäC£š‘gHx)+0Q%h­y–ƒZ˜#µÖEkuµ†š°a+Ôv³è¡ïìÜÏ|…„׬Y£nïß¿¿,Y²DÚ·o/7ÎSHËB5H}“’’Ô0òXÆêÕ«ÕíGŽ‘bÅŠIÏž=UH£4x.wþüùêï„„µ|ܧsçΪÚ1*²>[·n•™3gªyD:uª שSGΟ?oû÷VE%""""¢PÅ0Q$BuF´H2‡” Ç7‰LbµY;ÚÐSdÖµz(Ÿˆˆìïå—Í!a— ld¶|ùrS@ ""¢ þ›ÖZ|>î¯}s—Ž¢W±­îXÞgZÃøL¨tËJÂ_Iø ÑOlÖÑZ%ÇvH ±ýÌWH3Q¡·téÒªuëÖM û|ýõ×Îùü­Ü»hÑ"©V­šó3TÕªUUP×0`À©P¡‚ºmöìÙ–Ë4i’T©RŹŒØØXY¹r¥Ûzû³>S¦LQ¡e4 gÛš5k&»v튈÷†„‰ˆˆˆˆ(T1$LDDD‰~Ÿ 2Eû(xjû"Tì+2µ„HFûÂN¶½%2³‚Èʶì "¢Hð¯™CÂMš°_rªužáèèhÙ°a;‡ˆˆ‚ —nvÉÃýP­¶§èƒ2^ ¡YÁ6RÄj­˜Övh­c»LÃçqüøq9{ölЖwðàAÉÌÌ´¼ U}SRRäòå˹.ãÀ’‘‘‘¯õÈÊÊ’äädYµj•zÌH‚çŽþCœÂ^1)޶Wx±´ó|{&"¢À0Q$ZÛMdYû!Ô,m.²°¾È•ö…]ü2\¯½"ž}AD ¾øÂ¾öZöK.zôèa 7iÒ$âB%DDTðpéf c¼à2ÞªŽ¶˜]†‰éøcd!(œÀ®!"”Ř¥µá¢W}Ç82ëx?ÿ [·Ý|'"¢À0Q¤¹”-2«’^¤Ðrb›^Mø·qì »H™¬Wí^|7û‚ˆ(üø£H‰æ ðŽì/ž~úiSH¸sçβiÓ&vbý˜?QkÑŽûe²ûBÆzÑOnÞç2m¹Ö¢´ÖQk'ÙED'Yô Z9Þ·ÿâøY_kíµÖGô pÄu²ãým›°’0+ Qd`H˜ˆˆˆ(Ò¤-ÐC‹Ç¼IIEæVg5a»H_®¿Þ°M‰ˆÈþöï©_ßž8‘}ãŃ>h ?óÌ3’ššÊÎ!"¢ j.þW›EÕ`„N»ií ».¤dk­¤ÖŠ‹{ a¿ºZ«©µì&"ÛKÑÚ[Ž×<¨Œjñ#4Ì#«DDDDDW1$LDDDi¶ö™W“!ÔPu2Y¯&Œ ´þP!á™åÙDD‘ÁÖ4‡„‡ aßxQµjUSHø7Þœ~V%¢àùì³ÏdĈröìÙˆ|þ—/_–¯¾úJþþ÷¿« 1Þ{ï=Ù¾}{Äõ‚dcý˜á2T ì" ™…ªÛµVLÌa`º{Š~òU…÷³«È×Çwa%ÙPo;Û¿'Š^18Nk%´†Kòf) """"¢Ü1$LDDDiÔÙÒýÊÖwYXŸAn;ÈJÕCÂSøÕ‹ˆ("dg‹üíoæp¯^ì 'Ož”âÅ‹›BÂãÇgçPعr劌3&×–˜˜h‹çúå—_ªçNÛòåË«÷—Çû5?BµÆv;qâDØo³Ç{L=ÿbÅŠIµjÕÔïÆ ‹¸×iŒÖ&øúߤµX­Å‹^±–B*_jm½èÕdq™BãíD¯$Ž Pmö/laÝðÝÇñ:ç‘S"""""ÿðL5Q$9µG+¦/g_„²ÌõúvÂO FH8;=ß‹š9s¦´iÓFN:Å~%" U¯¾j ?òûÅÂÖ­[Ma´9sæ°s(ì Tjµ?»¶_|ÑÏ5ÐÀm8®óÅ‹Ûm÷îÝa½½V®\©žGÆ %--MMûïÿ+Gމ¸×)Nˆ-ö1ª£2eºP(CĽ’èaîÜL½â¨,$z`˜pûØ£µÏDƒ×”«AÒªŽméýE Opì‰. Õ¦S„•„á’0¶CÁDDDDDy?&BDDDD‘â—á"ßŰBm8@%ᤎì;øî:=$|29ß‹ú÷¿ÿ­Nðã¤~a(ìÇ#"²…/¾0‡„kÔ`¿X˜5k–erÆ ì ;®!áo¿ýVíÇží?þ‹ç2uêTUÑö½÷Þ“?üPU=Þºu«ºíرcj¹7Üpƒz#GŽT£¹^4æùøž’““å›o¾‘wÞyGÆ'›6åáËëóÁãüßÿýŸ 4H>øà™={¶\ºtÉrÞ`‡„YgûÕ°fÍ1b„zN .ôúœ\×óàqßÿ}Ù³gºýôéÓêöÇ\=n—.]œ{äÈ‘<÷¥?ûR^ž8p@ÆŒ#o½õ–|òÉ'2eÊÓºæùß³è'ļý‡é§µ­¥òí,,œqlÏkµ6.ÈËÆ>ÀJ¡YIÛ%›»?QÀ&"""Š("$|ƒî…õÝE–űÂ݆žúkï·üŸº4BÂ8QÞ·o_¹ù曥Fª*Ø•+WœóíØ±CU kÖ¬™T®\Y:uê$‰á4„Y† &Í›7—råÊI:udýúõÎÛ'Nœ(wÝu—ÛPÒ»ví’víÚIµjÕTØ¢Aƒ²jÕ*ng""Þoë×7‡„ÇcßxxðÁM!á^xAÒÓÓÙ9v ?~\Í[²dIËÛkÖ¬éuYFà5--Múõëçöºæškä?ÿùé>£¾úê«R¬X1ÓëŸaÉ’%¦ÛŒ†@¨çã{nñ/¿ü²åýñyÏÙJ^ž>ƒZ=NÓ¦MåÂ… ^#X!á@ÖÙß~=sæŒê'ÏyZ·níöyÜsPnÑ¢…sþï¿ÿ^ÝŽõöö¸çµ/ýÙ—òò|¾üòKõzðœüøñAy.ý„˜UÀU†µolÂÿÔᥪÖîÐÚËì """"""¢\1$LDDDaUj¬N`EGG³sr³ªÈŠxöC89²X¯@›Í LXÛ™ 2­„þ3ŸŒðOnïÞ½»ÚîøŒmLC(×Û:´iÓFí/ï¾û®Úž‡R·£_ðO?ý´š¯GÎÇuíÏ@ûÒŸ})Ðç“™™©^ %J”E‹© òo¿ý¦¾Ë Êq0Lï'ĺ‹8e…ÒðR_kMµÖ„]ADDDDDD”+†„‰ˆˆ(dáDÁ8YäÊ cØÉ•+W:ÛêÕ«CbýBRν’iÊdîXáäJŽÈŒh½ 4…¯}cE¦\#²©O¾e„v1T¯óå“#·Ür‹ÄÄĸUv…°0î‡í®0Ì;¾Ï #˜Œ¿×­[ÇíJDäÍís×Ë/›CÂ;³o<\{íµ¦ð¿¦¦0åF(L׆ﯮ‚.S¦Œ$%%¹­‚›¸Íõû1.3ÖméÒ¥>ŸË­·ÞªæÝ¾}»åíV[Œ,iøLŠ ©Û×í3êí·ßîüŸßçã FÚÀ¼øéÏ:çÆßp ëœ[¿ý÷׿þÕí3=>‡£2qÙ²eåÏ?ÿ´\‡êÕ««‘F¼1*¿ÿþû~ïÏÞúÒß})Ðçƒ>Äü÷ÜsO½F‡i­ºÅt\’‹*ÂÃù6vÚ‰FÉ^^DDDDDDDäCÂDDD²P‘Æ*Ôf„„1¤f(®_H:8K ŸÏäŽn~l%²¶û!œ¥-Ð+B'uÊ÷¢¨"|Ýuש߉ˆ(by†„︃ýâÚY2m/Ž¢ðä¶jžaË`„„çÌ™cº­yóæê6Œa0Ÿ¸Íy £2¬·Š·ðŸÿüGÝþÔSOåûùx3fÌ5ïsÏ=ç×:çÆßp ëœ[¿öéÓGÝöÏþÓtFÁm6l°\TÎM^BÂÞúÒß})Ðçƒ`y… T€ûÊ¥K—‚þ$zåYO Â*Âá —áÞ.ú‰Îdv‘W QÐMœ8Q |âÄ 2dˆªtçwÊ„ ÜæC íᇖ*UªÈM7Ý$;w–´´4ç2n¾ùfuâ¨^½zjyºü 뀯o¿ý¶:W¿~}™9s¦º}ìØ±êÄTll¬Œ1Âò¾êÖ£F’଀ãmýz÷î­†êô Ð-Y²D7n,G-š²²­ÈêöÜ9êТšð%ž² ['¶é!á¥Mó½(o!á>úHMßµk—úï58¡aŽ1¬±q"Þ*@0zôhU­X±bòúë¯KVV–å㥧§«ß;tèÀmJDäË×_›CÂÚ{­ä°Îaþüù–AJã3?Q¸q [{=#$lx7TÛ´i£¦áûª?ònÛ¶­š6jÔ(Ëû L‹Ûñ½<¿ÏÇù1ûÄ uñîÀÕ8îPØ!á@Ö9·~5¶*1ãøƒkCÕ]ÜfÏô9ùö·/ýÝ—òò|ðÝßIpöÿO?ýT²³ƒ÷=¸;¶Ç4,½’èAa ?ÃÛ•„g±;ˆˆˆˆˆˆˆ¼bH˜ˆˆˆ‚Ε=ûì³*@;xð`‰‹‹S'{ŒìÖ­[UEJœH\´h‘Ìž=[6l¨*T¢ªÄݺuSË:t¨:Yµÿ~u_BÂÆ:<ýôÓrÿý÷«•8É…“h|ðÔ©SG>þøcyôÑGMÕ€û>ñÄÒ²eKµþc‚xàmý¾úê+5 CpºzüñÇå(š ’.2=J$u.wÎp„êϨj´¾Û!áùµ‚öþêÆÅ˜~êÔ)õ7.J¸á†dïÞ½êïyóæYV6à½'úQ¹ëµ×^³|lÜh £9.æ ý¢=«0¾…£P 7iÒDMÃwiä%$ŒÏŸ˜öÍ7ßXÞçÇT·W­Z5ßÏ ¤.ˆÃçW{õêå *‡cHØØF8vÒ©S'ˆ>ÌËsò¤/ýÝ—òò|ßWpÉèû[n¹ÅrÄ“¼h§5Ï1zP»'ÉÒù–Œíw«è•¢‰ˆˆˆˆˆˆÈCÂDDDtF¨¬E‹Ϊ/›7oVÓ¦…Ö­[Ë7Þ¨N¼pb 'HQÉ0¯g€ŒpõêÕÕ #£a8×uèÒ¥‹³ªïÔ©SÕ´F©*9°oß>5 j<ï‹0±!''G=ªàÕ„­Ö=TäDå×çU¼xq™4iRÑlƒD¾‹¹ÂÊuakQ#};RøšVZdftÐÞ_QéÜ‚¸ø:ävQ!á5kÖäºüV­ZIíÚµMg„’qÑ…¿Á"¢ˆ–˜(R©’9$\TŸCÐo¼a ãóýž={Ø9–B9$üÌ3Ïx ÏZÉKH¸cÇŽjÚ'Ÿ|byŸ)S¦¨Ûï½÷Þ|?|Ç4Œâƒ‹Œ cÆŒ Û0.²Æmž#å&!á@ûÒß})/ÏÇ€c. ,pö¾ƒª¿å1­¹Ö8æRøZ/úINlÇŽì"""""""¯&""¢ 3BetN;yò¤3´†>¨RÓ½{wÓ}›5k¦*¯ð°aÃTå^£Á_×up Ò­\¹RMûᇜÓNŸ>m {«Ôiœ ;räH®ë×µkW‰ŽŽ–³gϪ¿?üðC©X±¢œ;w®h6ÈÜê ˜†»M}D7a?„³y7ëÕ„óÖw½_dee©JŒ¨ú5~üx5.jÀE÷ÜslÛ¶MUdD¥vÜ'û]¡Rú„ 䨱c²eË©\¹²ª|îíý!c<.¶HJJRÔñ¸«W¯æ6&"r¥½GÊm·™CÂ#G²o:wîl ãb†„)\Æ÷WÌ‹ÏVÆh†Y³f©‘x‚Fpרâk|OÍM­Zµr…Âêñß}÷]5 ¯m+¸·¿ð ù~>÷ÝwŸåú…zH8·~5>w#¬ë¯`„„íK÷¥¼<O-Žq!d~Åjm¸ËßÉ¢Ÿ [η¯°•êØ†ÓZ]v‘W QÐY…lÿüóOgH8==]ý>pà@Ó}N«R¥ŠúÝWHø?þhŒ°ëÆ„„±î˜¾Ë1L´·õ[¶l™š>yòdˆÆ‰ÀW^y¥h6Æ‘Å"Ó£D²9xfX;0M˜æœa_„«e-ômxz¾ß_K•*¥†qÆÅx¯Á‰ó!C†¸Í‡ÛÆíuëÖ• 6¨¡~q‚UÕ /½ô’T¨PA͇Ÿ¸"555×÷C¼‡V«VÍš@@`æÌ™ÜÆDD®P±eKsHØâ"¹H… N~/W®œªŒìöOKKSŸ]1ÂŽUÝ@ŸOll¬š†‹å çÏŸW#ú`z›6mz +έ_ql⦛nR·ÿùŒp }éï¾èóÁ÷ ב¦ô¥™jŸr½X;?0®Ë—¿QU¸ºÖ8æRx+¡µnŽŸÙì"""""""K QÐù ãÄNâ„’'„ØêÕ«§~µðÛo¿­¦Už¼­Nc¨äÖ­[;:‹Ä²8‘µÝ¸S†;„¼0Eè›ÂÓÏ=õm˜‘”¯Å Z—Q!ï5xÿñ upÂÞµâæOIIQWøÓ½-ÇT‹w’˜ˆˆ<ôéc ß{/ûÅÁõ‚£uëÖMΜáEQž ÓO>©æ¯T©’ôèÑC4h þÆh5kÖ ZHfÏž­ÂǸ #N$$$È;ï¼£¾ƒß|óÍnó"LŠùbbbdРA2cÆ ·‘q¼=þ§Ÿ~ª¦ct \ĆŠÈ8`„Jû÷ïoÙ>Ÿ>Úû+¦á~¸ Ë­]»¶Ô¯__U`ÆÅoóæÍsû| !a_ýŠQp æyê©§T5_Œúçx×]wÉwß}ç÷:¸Ê-$œ—¾ôw_ äùLš4I®¿þzyíµ×ä믿–/¾øB4…ûºŽt’ç¯Ô¢Ÿ 3¾Q#ŒÊÂýùÖö°ÿDZ}y™‘5†„‰ˆˆ(è|…„•ÃpÔ»81ÕµkWõ÷ĉÕ}6nÜè6_a…„ ž'úêÔ©ãüÛÛúÅ8¡Ö²eKuò«H¤LÖC‰'¶q§´ƒ¹ÕEv&°ÂÕ¾±úëñ÷ ì "¢HϽž!áÛnc¿8T]›·ª¥Dá /!aŒàдiSçýp±éˆ#ÔmÁ ¾»"üéúºC€·S§Nnó!¸Ú¡C·ù0"?`¨±îFCEÙo¿ýÖk?ú|p1Áßþö7çòQmvÀ€*ÈŠ‘2Œé[·nõë1¬DHØW¿Â/¿ü¢Â¶¸°Úõù!0»víZ¿×ÁUn!á¼ôe û’¿ÏgÍš5rß}÷Itt´s¾%JÈ‹/¾è¼P;?0ž N†GGð­ •gSøÖöâ´Öɱ}g±;ˆˆˆˆˆˆˆ,1$LDDDAçOHxþüùêoTœÁm:²sçÎê$14)¦!hÛ³gOuR('GÒ O:UÝÚñãǽ®C !a ºyófÉÊÊRCob¸W×a2½­üúë¯Î[£G.üpE[—ïcE’:r‡´‹5]DVijÂ*#$¼åŸì "¢HñÉ'æpùò"9ØÜõ³²k9r$÷Š8Õaß¾}ÎïÁ…áĉòóÏ?û"--MÖ¯_o ²úËÞ°aƒéâÛ`Âȵ^WèË£G†ì6÷§_³³³ÕsÃÈ!ž#„R_ú»/ùû|¶Çÿ„’q¼&X0ž N†k‰oÖ]øöc ØŽ­´£µ!ì"""""""K QÐù 'Y¥Jg( 66Vy]¡‚ †·ÄíÒŒ°U3ÀÁ 5J*V¬¨~Ç™.Õ“Õúš7o®*¤8SdF´È/ù‘=Mœh £=±]’-Å‹7…„ßÿ}î/Td6jmÖþªµZ«ÇÆÆf‹v›Ö*h­¤èUf9î’=¡Rô­µÓZv‘ CÂDDDDáèÂI‘ "³*‰|+r|û$R`›§Lf?„›ÕíEæ×ÔCÞ ÓU[û‹Ì­.r…Õ#‰È†¦M³ Ï™±]²yófS@í믿æþB…ûDkÏiMû„¦’³±±Ù»MãÛžm¡‚0.;äøˆˆˆˆˆˆˆÜ1$LDDDf—ϳÂe(UÚL_&rz¯ÈÑD‘}cE’:ŠLÒCu{?É9Ã}6’¬j'²ñeöC89±M¯ö½î9½š0ðîPáéŒ$öÙÏþý"ÑÑæðøñÛ%_|ñ…eHxÕªUÜ_¨P ÜFk¥Ä:HXCX}•ÍN•„Kkí­äÛŸmÅi­¿Ö‹^1:›]BDDDDDDä†!a"""2C8-¶Ðk êê!ჳD.ñ´GDÚÒOäÇVì‡p²¡§þÚE5an;kèŸmo±ˆÈ~RRDî¾Û~ó͈풗_~ÙŽŽŽ–íÛ·s¡…oO]µVFÜCÁÚ§é+zÊ‘Z[ή"²•IŽ×úv…miß´¥›Öö;¶õv ‘-½÷Þ{–â»D(ø÷¿ÿ­Öç¿ÿý/7…†„‰ˆˆÈŒ•„C³’0CÁ¨&=#šÕhÃ*}Ϫ$²g¤„EÈ›Ìv YÜ„ý@Dö“š*Òª•9$ܾ}ÄvI=L'ökÖ¬)Û¶mãþBfŽÖªÊÕ`0*M"üµÖ6 +ŒÙÙIÇëþoì ÛÂXKñøú­5D§±Kˆ¼JNNVaÛÌḬ̀[w#$ôÐC*TìjÉ’%Ò¸qc9zô¨º/æÏÈȾ}ûªåÔ¨QCäÊ•+n÷[»v­Üwß}R®\9iذ¡,[¶Ì´~6l%JHûöíUU^ø 1Bî¹ç·i¸ë=þ|gàï'NÈ!CäöÛo—;ï¼S&L˜`ZÞ®]»¤]»vR­Z5)_¾¼4hÐ@V­ZåµeŸúè#ç}P¸T©Ròì³Ïª 2æGتâþªB³Å‹Wóc]rã+$üÏþS=–çcà>_ýµÛóÀã!à‹ç'ÅŠSahÃÖ­[¥téÒ* ŒþAxذa²yóf¯ýh,û¿ÿý¯Û2Ú¶m+‹-’Ù³g«Ðôu×]§}Ì h}ˆˆˆˆˆò‹!a""""¢p³ªÈš.ì‡Pw`šÈÔ"ç3ER&ë¿“w+âE6õa?‘ý`ˆ_«ðœ9רª…€gH'É‚EûÔ%¥E?ð]WX=˜ˆDz8Þ’Ù¶”䨾©ZKqüÎ÷}Š4¨Þ/QQQòúë¯«Š¿VhÅço×Ðî©S§¤L™2òüóÏ;§>|X}nŸ4i’úÛ³~ðÁÎyp‘ß-·Ü¢ªÕ„[·n­* Ξ=«‚»o¾ù¦×uß¾}»ªØ‹ù^|ñEIMMµœÏ #¤Œù†jÁHH¸E‹’­_N€à/¦¡o x L[·nßýèF_ÜxãrñâE·~-Y²¤ÚF¬Q~1$LDDDDn¶öù>–ýÛiisý÷ÝÃDæVgŸäfÛ["ËâØDd?{öˆDG›CÂ~q]±råJS@íÛo¿å~BA¸¹n§5ÔÃc5I"úÜñ¾°€]aK)Ží»Môj¨ ?ÝBÕj}ôQ<íÕ«—¤¥¥å:¿U¸ºvíªª#Ô jßU*V¬(çÎS{` Ï<óŒš~äȹ|ù²ªœûÐCÉôéÓ­zõêª*±/äâ¾XF¿~ý䨱cn·!á^xAÝn4<6>xð s\ÈèZÙx¨ø‹ßýíG×>BhíîÝ»›îÛ¬Y3iܸ±ßëCDDDD …›Ô¹zUÚKŒ<„´…õE¶ôÓG…\`s÷û‘Ñ"W8Ü<ÙLr²HóææpÇŽ×cÆŒ± ¯ZµŠû åÛs¢ìFC»%Z;Ãn!"ÑÃÁxoÅ®°¥lÇö]ìø‰¼Ìn¡€/*ï"Û\û¾±cÇŸ÷ñ^¶l™š>yòdp­U«–¼òÊ+ÎÛ½…„dÅô]»vIzzºú½råÊêþ®­C‡>× ;{ölέR¥ŠúîàÊ ÿñÇ–÷$$ìú<þüóO·P®ñS g2ÖCD6Ô­›9$\?òâ+ x„F@°(/ðIëAÑr# öÖ’Ù-Dä!Õñ>ñ»Â¶bE.ÕELÕä)Ò š/ªß"(Û£G9pà€iž‰'ªÏà7n4݆Ào±bŤeË–r×]w¹Ýf„Y322ܦÇÇÇK:uœßÿýR²dI9vì˜_ë¼zõjš-[¶¬ªº{üøq¯óú ¿óÎ;êöÌÌLõ7‚Ï:uRÓÆïö<|…rñ<0mçΖeÕžËnÔ¨‘4hÐÀí~§OŸ–òåË«Pw ëCDDDD”_ …£…õEvc?„ªÅMD6õ¹ú÷÷±Ü^þ˜ZBdïgì"²Ÿ?4‡„Ë–ÉÎŽ¨nhÚ´©)$ŒP@JJ ÷ ˜k@„'jãl‘·÷ ¼WÜÁ®°­8­uwüŽp0B¼¬š"ÕæÍ›å‘GQÕpûöíëvÛ‘#GT¸gÏžªZoNNŽó¶_ýÕù}ôèÑn÷3¬-Z´PËÏÊÊ’±cÇÊ5×\ã àÂÏ?ÿ¬–Ïø3fÌ“'OÊO?ý$3gÎt[ÞáÇ¥M›6RºtiyõÕWåèÑ£>Ÿ—¯ðš5kÔíýû÷—%K–Hûöí¥qãÆy cYxnú&%%©‹± „š½õ£ç²çÏŸ¯þNHHPûtîÜY…¸Qá8õ!""""Ê/†„‰ˆˆˆˆÂQRG‘ =Ù¡(;]»¦Î½:mF´ÈoãØ7¾ üΊËDdGãÆ™CÂh+VDT7`X]Ï0NÞ3$LBœ¥…è·+im–Ö¸Qn½žÝ`[íÍÐH®V&ŠTº¶jÕÊ4}À€R¡BõY|öìÙn·5oÞ\Ê”)£Â½®Œ0ë¨Q£¤bÅŠê÷¨¨(2dˆiù‰‰‰R»vmçç}<Ö‹/¾è6ϪU«Ô´C‡ùý||…„¯\¹¢*ô"xŒÖ­[7Ù±c‡ºÏ×_íö<ü å.Z´HªU«æ|U«Vu ;{ö£Õ²'Mš$UªTq.#66VV®\iêW†„‰ˆˆˆ¨ 1$LDDDDŽv YÚœýŠ~Ÿ 2=Jä‚ã„Ê¥l‘)ÚW¯#‹Ù7¾ ü¾¶ûˆìgÙ2ëð˜1Õ F Àµýãÿ3g8 8ù{K¹ž®µtv ù£µÒìÛÂ%Ô®GH0®O+v ‘WçÎSê]¾|ÙmzÆ UÐÖ“k˜õÒ¥KòÛo¿É… r}ŒŒŒ 9pà€ ï¦ãÇËÙ³gƒ¶¼ƒJfff@ýè ý€þ """"** …£”Ézð4‡¡š³²­Þ Y©ú¶:¾‰}ã˶·D7a?‘ý$'‹DE™CÂ|1]€ëža´?þ˜ûù „ï÷ ™ì"òÃíŽ÷~ƒ¶§á¢Á Ó´¦}ò’lv ‘ßV¬X¡>Ÿ£°'«Š·DDDDD>&"""" Gœ2xzÚFa„¸ ™ëõmu6…ýãË/ÃEfUb?‘ýàD{“&æpçÎÓóçÏ· þùçÜ?È¿YZ{J®„çh-•ÝBD~2*ïgWØÒdÇöÍqüâø{=»†Èo>ú¨ÄÆÆZVþeH˜ˆˆˆˆ(¼1$LDDDDŽ.œ™ZÂ=ŒJEïà,=œåY9²XŸv%‡ýãKê\öÙÓž="O=e 7m1]ðÆoX†„—.]ÊýƒüòÿD?˜­µ‰Â€0æaÇ{H»Â–;¶oŠË´úZÄ®!òFþ8uê”åmYYY’‘‘a &""""¢ÐÇ0…,V( òanu‘moñuJV·YÙÖ}‚Ü3¢¹¿úãÔ=$|šõ½ˆÈfrrDz÷6‡„«W˜.èÕ«—eHø×_åþA>õ‘«áY€0®»ã}d.»Â–69¶ï6ÿñì"""""""†„‰ˆˆ¨à%''Ë{ï½§ªbùòåÒ»wo9{ö,;‘ÈÊ­D’:†Äë5¯ËµÕë<;]¯îüÛ8÷é{FŠÌ«ÉýÕ¨ ŒpúröÙÏ¿þe W¨ ˆ#@çÎMáèèhIIIá¾A¹zGôƒØÚ§,%î0""½åx™À®°¥TÇÿ ×o’³Û<“ÝCDDDDDDŽ!a"""*p_~ù¥ üöÛoì ¢`ÚÔGdY\X¼^#â}`ßX‘éQ"NºOß™ôídk¨í´&"²ƒÿý_sHmãÆˆxúMš41…„1mÿ~V'ïFj­¸è±?ÒÚzv å‘ö­LJim»Â–rÿ+&¸LËÖšö ]……#E0GkògYŽˆˆˆˆˆ(<0$LDDÁvíÚ%íÚµ“jÕªIùòå¥Aƒ²jÕ*çí;vì‡~XªT©"7Ýt“ªþ•––æ¼}âĉr×]wɉ'dÈ!rûí·ËwÞ)&Lp›çæ›oVŒëÕ«§æ_¸p¡Zö믿.Íš5“Ê•+K§N$11ÑmýŒåŸû¬ þ eVýàu­%²Kˆ(Ÿ&8ÞSº³+l«‰˜Á Lj^i8Tà"ëiÓ¦…]ÿ†ÊQÆqªp}>¡Šy{­Õ½Âõ_ØØ ¸ñl¹bH˜ˆˆ(BµlÙRØEØÎJëÖ­åÆo”‹/:§>|XóPŒ0_‹-$;;[MCÈÓpàØàÏAd„…=çñôõxÏ?ÿ¼Ô¬Y“™ìïÂI‘©%ô°pX½^ñ~P£F çߨƒð›o¾é÷ëÎÛû@^^ç=ô -Ÿ;wιœãÇ«yX4ÛbS‘E¬oCa†^ý‡¾BP˜ˆÈnöì©_ßîÕËöOý×_5„ÑÞ}÷]ÉÉÉá¾Anpù[5Ñ\#L³Š]BDA°Øñ¾Òš]a[mµæùM2Uk%Û?àÂëúÚçÁ˜˜ÓmÆÈJÒ·o_5"ŽÅ$$$È•+WLóáB«ž={ª‚®#9YÖ„c&o¿ý¶Üzë­êñgΜ©nÇ…Þ(Ú«.ö¶Z,ËÛQ®óôéÓGž~úiÓóBqˆ¦M›:« çg¤*ذaƒ:&Õ¾}{UÝ8TaÍP¹¼ªã½GŒú‰^Õ|Ö¶ + ³±’0†„‰ˆˆ"¶¢J0"ãwO8ð%Ý»›ë«4kÖL7n¬~7Â|tÞŽƒÂ˜öÑG9§åF( 55UFŽi -{ úz¼I“&©i=ö˜ª`Jdks«‹ìý,h‹ó|½ïæNŸ>ÝÙªW¯®ªûûº 4$ìíuŽõA@øþûïw[Î¥K—Š®’0*9Ϫä}; <¼3ûª¿vYÜ„ý@Döƒ°Æ“OšCÂqq¶êsæÌ± ?žû™´ý 5*í͑ЪþHDá+ÑñÞÂoö…£˜VŸªšk­¨ÇöAAÙèèh4hüù矦yŒã!½ Å0²»žÇ=ùpüå?þX:äv›ç1„wqeÔ¨QrçwJùòååƒ>P\ÜÿÑG͵xƒ·¢\ç7nœú}ïÞ½nÏ Ç“ðœ ¿#UpZçÎ¥xñâjYÆhU¡áàv¢‡Ó±ïMÐÇÍ """"¢¢Æ0QB¥ ´íСC®·[UäD(°J•*êwÏÏ€ƒÜþ„„=*Ï=÷œ #W«VMU­À<¨&aðv`Û×ãÁèÑ£¥L™2ê 2*geeqÓ=¡âꆞA[œçëÕx?¨\¹²ÔªUË­y¾‡äöº 4$ìíu~äÈõû«¯¾ê¶œ" #Œð…“Ö·Ï«)’<„ûª¿R&ëáw"";Ò>ÿšBÂõêÙþiöÙg–!a„‡‰\=/úkTÝ[¨µ3ì" ’=Ž÷—›Ø¶…ª­u­>‡h-Zk'‹`pœ3>>^ÿÄqT öÆ8‚ð®Ån¹åUyب&lÌ÷Ì3Ïx]†ç1–.]º8 EL:UMkÔ¨‘œ8qBMÛ·oŸšöé§Ÿz]–Õq×yp7.2ÇHί÷))rÍ5ר@0c¤*WÛ·o—víÚ©e¼øâ‹ªEQÁEMCûªZoâK’ˆˆˆˆˆBCÂDDDa:TmðvÀõâÅ‹ªC/‹¡ãââÔ°rŸ0ªßpà Îê8Xìo%aB€ rïÞ½ÕÁè×^{žìiÇ  V]õ|½ïO¢ò¡¼½î‚ÆûBÈ8±ä 'Ί$$|)[dvU};xó]ŒÈo㸯ú+}¹È~U%"›:Ô®XÑöOûÿø‡eHxëÖ­Ü'Èé?Z+.zå½iª{D\ˆâ[Æuì Û¦µ‹é™Z‹½¢kaÁgTç-Y²¤:¾š––æó>VÇCa`LÇEÓ®óá¢n_Ë0þv '¯\¹RMûᇜÓNŸ>m (†§žzJn½õVçí rýõ׫c6Á©Ê Ž'c¹X~¿~ý䨱c…ºïaÃH•´6‹/E""""" A<óJDD¡0ĸîܹÓòvT“@u_W8`Œáèºvíªþö7´;qâD5 CʆÀóœÇ ¯Y³Æ9-¿!aC«V­¤víÚÜèdOi D¦G‰\ Î@Ìž¯Wãý'¶9Éâùº³Zn^_çMš4‘ *¨@2 ÈŒ“nEFa„€/äR“׃»p’}ADö£ý?4…„Ñl–ÅpОaTÄCu9"X®µR¢¬FÈ‹{„¿OŠÙÙ,Çöµú&ÙNkñ…´çÎSUmQݶyóæ~]½…„q,ÓwíÚ•ë|V·YÍk„„-Z䜬ðܹsE Pù*Þxã u[°Fª²‚Çš={¶\wÝuj¼1cÆÚ~‡¨v#Ñ«XïçˈˆˆˆˆBø˜E „qQéaत$Ù¿¿Œ?^V¯^­nŸ?¾:p‹Šè¡ZNîã÷ž={Ô<þ†vq_ÔíÙ³§œ:uJ²³³åÆo”{î¹G¶mÛ¦J7lØPÝÏõ n^Cƒ– &¨@ã–-[ÔÁg׊D¶’•ª*g CÏ×+ª½üüóÏj*‰Ï˜1C !ùÓO?ÉÌ™3ý~ÝY-7¯¯s¼g Ú9NuìØQ ½‰ªÅ˜ç½÷Þ+¼¾?Ÿ)2«’Hòïó èŠís4‘ûjíÓDD!eéRëð'ŸØúi£²›gH866–!aR~½òT÷ÓÚ6v âŽ÷šlv…-%9¶¯UPs®ã¶=…¸>8ÖŠB 8–Ú¥KçhjÞx ÿ¾ýöÛj:Ž¥ä6ŸÕm…¾pá‚\{íµj„©üÑ-ܬ‘ª<-^¼Xî¾ûnu1ùûï¿ïì§Â€ Â7Ž€@DDDDD¡!a""¢†ƒÁÕªUsž¨¯Zµª[èû¡ú‚ë‰|H6RÙwÀ€ê`-nCe‡o¾ùF…ñwݺueÆ *€ˆ¿S§Nµ\¾¿÷ÒK/9 ?1,_jj*78Ù×ìª"ûÆmqž¯WHLLT•÷ÜŽÊ8¼î¬–›××ùŠ+äé§ŸVÃw~úé§êäæÁý Íš."s«‹äœñ>ÏÙ=ðz‚q—€ ÏŽ,f?‘ýüú«H‰æpïÞ¶~Ú5jÔ0…„Û¶mË0© Þí¢¤Æ0Ý?°Kˆ¨]ïx¿á{JulßD‹Ûp™²öí]úÁz!$‹J¹ ÷èÑC8`9Ÿq<$##Ãmz||¼Ô©SÇ4_a‡„­Fˆ²Z>Žáx2ŠM4mÚÔmý‚1R•….p,¹lÙ²2pà@9~üx¡nWìSq¢‡„9…:†„‰ˆˆH<(™™™^oÇÁkÏÔyáö¸|ù²ú$:ä¼Óq;†ˆË/,ËB "ÛKê(²¾{Péùz5à½ï V¯S^wÞ–›_¸ð'¦æÌ™SHoœ³ô kÚ‚ÜçC5\̇°0ùšŸÀ~ "ûÁˆ5kšCÂ.ÞØFð ÿãÿ3gÎpŸˆpýµöª\”Ã.!¢TÝñžÃK8í Ûw®—ÛFj-Jô0qQؼy³<òÈ#ªšnß¾}M·Û-Z¨y³²²dìØ±ª F󜯰CÂV#DY-#OŸ÷°þ®‚1RÕáÇ¥M›6RºtiyõÕWÕEãEó±®\MDDDDDŠß—‰ˆˆˆˆ(œý2\d^͈yºÚ'ÒÓÓÕÅK–,‘FIÍš5åâÅ‹¿ç3õêÍzúž÷h¢Îb5ó€`Þ3’ý@Dö³i“È=÷˜CÂ>hÛ§œ––f £½ñÆÜ"ÜPÑNG‹èb>"*h Å{¥Y²훺Œór.Mª$ESMØÕš5kTu\OFàvÔ¨QR±bEõ{TT” 2Är¾Â ƒçQVóàrŒ"Q¦L52”§üŽTµjÕ*5¿ká‰Â¶\k%D¿À‰ˆˆˆˆˆ(0$LDDDDîŒjµDʼn(œl £råÊ©ŸõêÕSi Ü•‘•mE5¹”í{þÓôms…uñ²°¾È–~ì"²ŸlíGçÎæðÍ7Ûö)Oš4É2$æp%íÿø™3¶|ºÃ† ³ ÿý÷Ü".kC%G˜î%¬èID…!á’ZûŒ]a[íðQ+—Ûq©o¬„fÀ3· Á:P‰cyq""""" ' ÙÁêöz£‚ 6‚«cŸLöÿ~;DæVgÿjM‘[±ˆÈžú÷7‡„ÑÖ­³åÓíÛ·¯eHúPäAþvÑJ7ÑÚ|v ¢ŽZ‹–Ü+ÍRxÃx4m}̳ÀñhVˆ­;C¡o›è•¨ç²+ˆˆˆˆˆ(Ì0$LDDDDd¿™%rµL‚îh¢È÷±zØ÷ø¦Àî»í-ý¾˜ =E–6g?‘=}ýµuHxäH[>Ý'Ÿ|ÒŽŠŠ’_ý•ûBB…GF%á…ZËa—Q!ê.zH¸»Â¶†ˆ~Š/}ÿ‹ö„кgeeIFFFጔDÃg¥ˆãç""""" C ÙÂÁ3¢E~ξ–ÓûE¶ô™ZB¯j{>3ðe¬ï®W ¦À ó¼šì"²§%K¬C¨0lCM›65…„ëÖ­ËJÂè3ÑF£}«µLv ²—µv­èaa²'T®äÇ|¨lßHkõùÿˆü„ËùPEx»‚ˆˆˆˆˆÂCÂDDDáêòy‘?w³t;¹S$}™HÖAîsú¬œUQdï(‘[ùú ôu~|‹ös¹ÞOѾ.-¨+’¶ ïÛdM½Q`vŸU‰ý@Dö”˜(m w·gdé¶Ûn3…„ããã%99™ûBA¥Æò¢Œ ¡U¹‘ˆ"‡öMOn½ª9ÙS’ã?•^Sµ†q9~'ÊísL”ÖÞbWPÊÉÉ‘%¸PµÌœ9SÚ´i#§N Ú2×®]+'Nœà†#""" 2†„‰ˆˆÂ‚m°±^C•V÷~¦Wm% 5§~™Vš¯Õü6ƒQAøh¢È¥ìümT^Ï:U;8Kß|¯%";Ú´I¤Q#sHøÁmùtË”)c wíÚUë†ÿÏÞÀ7Ugÿÿ¡B•Eþ,_q, "«‚T©Š~ÙTP\YUPÜTpPtdì`U—/㈃£`F@YPŠD–Ù~ˆE )Ò²Z¡Àùßó¹MÚ4·mÚ¦mróz>ŸäæææÞs“4¹yçÜõ<"„µšŠ} Zϯð%PAô¼;5r^‹àN)9oý)Rª5š[£‘5¦Q>8УíÅî:ÍŠŠõüóÏû}®ÐQ]€^yå³>ÿýïC¦f§N’›nºI^zé%sù¡‡2ëøë¯¿úÍ{à 7È-·ÜR¬m,êrI|þùçr饗Ê/¿üƒ ˆ ®è$\þF5´¶j þ¨®BÅ™l‘EmE_!òã4: ‡JÇðÏcE6ŒäñY\ÐÖð±TjÀ}ÒÒD:wö _x¡ë6uÛ¶mŽ_ä?ùä“’žžÎc!Bè9ô ´ž#@OŸEITĜע–”ÂÕôoNr1æ?j!9·ÓÇF‚5VYc‰56ëûFÄ b‡Æg‰Ýiº®<uz6 Ûfdd„ݺ{BÂ|ð,[¶Ì;V¬XuLJJ’¡C‡Ê±cÇB¦f¯¾úª4nÜØ .NH8mÌ Î}Io7Þx£ôéÓ‡?hAþ¬ €âø-CdÝ#"Ó£ì.¡¿ePT¼Ôiv¨òH µ%óšˆlާÅ•¹Å~-3fø>Þyçó~|çκn)))²nݺbÝÆþñÇ+¼¶¡RÇÂh'ÞsÏ=WfÍšåVœp ÛXTçà’Öé»ï¾“³Ï>[’““ù£$„„Jjïb‘¹ìN¡'8á*˜Ö—õ ¡FCÂt/¾ãivH8=‰Zp§‘#ýCÂ:–.uÕfþíos ¿õÖ[<"€F´c§€e”@KÊyMªO)\-Ö£K¹ =Ï„é$¬ÑJ kð|{˜=æÍ›'-[¶”ºuëz§M™2Åt•Õ÷ã-Z´víÚÉÂ… Mç×믿ބŠóúì³ÏäòË/—}ûö™Ûêüû÷ï—Ç{Ì,碋.’øøx9sæŒÏíV­Z%W_}µT«VMÚ´i#K–,ñ[¿µk×JTT”ôîÝÛt› DQ!á×_]:tèà3-55Õ¬÷üùó½5ÐË”„„¹ôÒK¥uëÖ’˜˜è·¼­[·JÏž=¥AƒR£F iÕª•,_¾¼À:z–™ç‡Ÿ›6m’îÝ»K:u¤aƦ;îž={|öI ë£ûfìØ±kêÚ¬Y3Y³¦ðÖ¿ùæ›R«V-Ÿi†„ÝÆü!á¼×—æñ¦ºté"÷ÝwÔ‚„0@iÞ.2§¾>“M=P14P©­ÓæR‹Póau‘©Cqé멆„©·zûmçð¿ÿíªÍ|ä‘GCÂÿvÙvŸžº½©ØŸ5¬õ9%’%·;(Ü«§5Q‰F!Û‹>ë«Ü+¯¼RªW¯.£G–C‡y¯ÓÀêÀÍûñ_|ÑtyÕŽ¾“&M2Ó’’|¨Ý«W/¹öÚkÍÿ=aÐ[o½Õ„IõÌ 111fÚË/¿ì½v®R¥Šôïßß•u~ ;u’Õn±š­\¹²™_×¥0E…„Ÿ|òIs_ùïCoóÞ{ïùl‡ÞŸWu;âââ¤R¥JÞpªÚ°aƒT­ZÕ„µ>nÕî×_]`óf=ËèÑ£‡,Z´HæÌ™cBÓõêÕ“ŒŒŒb­Ï‚ Ì´‰'šý¤èmÛ ïqݹsgºÍ+Ðp ÛXØåÒ<Þ<ëZ³fM¿01J†c!¥¥M ¯B-P1¶·Ã¨§²¨E¨Ñ +áí’ù¨®È÷©wÒS¾:…„ÜU›yÏ=÷8†„?ùä.wØžµw™váã]*€P,¹!a^—Ük¸58Ï‚I»G[ã™^GíÞ«¡Ðèèh1b„éøëDƒšú~Þ”†²õ¶{÷îåE  þd:¹¢â,ë!òU_êjNdÚ!a}}@ñ-ˆÙO¸ÓÒ¥"ÑÑþ!á‡vÕfz¾\Ï?’“ùÛèfg¨,öçñ~§çà^%7$œJ9\+Á(‚LßÓD弎„íV{ÓM7™àéÃÖg‰={öþ>Í!´© `ºk¨W½ôÒKrÞyçyäùßýúõó9µã«vνþúëeæÌ™ÞѨQ#Ó%¶(ÈÕÛê2†.¿üò‹ÏõžðàÁƒÍõžá ‘'$¼{÷nï<™™™>‘=Û¡ êb[T€VCÓØ4È¿¯yÇŽ½~Y¥áYvóÍ7›½E9uê”é<ê½¾ °YuúÖ­[%==Ýü¿víÚæöyÇí·ß^äºéýΙ3Ç„sëÔ©#o½õ–Ïõžð?þèxûâ„„ónÇ¡C‡|B¹ží(l‹ Ðz–1jÔ(¿Ûj`Z·/Ðõñ˜0a‚éÀ«á_íD|üøñBë©ó>òÈ#>Óô².ûèÑ£~ók'êÞ½{¼\.éãMMš4É̳mÛ6^€‚€ÏÉÁr*Ë ¯F-P~ö|bw±þ-ƒZ„šÃÛí°†…Q|_tY÷uàNÛ­¿úlþpLŒ«6S¿àÏÖSÓIؽډ}À¹¥5ô'lÙ”@I•Ü0‰ÜkeÎ>N£2í"¬ÔOBl½RRRLgV ÈöíÛWvìØQ༅6µc®vüíÚµ«,[¶ÌÌóÍ7ßx¯/($üì³Ïšé‡6Ýk«T©"·Ýv[±·ADxÅWHÍš5å¯ý«Y^~% o·>w7$ìÙŽ&Mš«Žy—}òäI©\¹²éîœ_\\œ´hÑ"àõÉkß¾}2tèP9묳ä‰'ž(´¦M›6•îÝ»ûLKHH0Ëþá‡üæoݺµÏú–eH¸¨Ç›zî¹ç¼-”!a€`ú!Ñîêzœ¯"PN´ƒõâöÔ!íK&$\k‰¬H¸—~yž?$\·®k6/##Ã|1ž?$¬Á…-[¶°ÿ]èÏblÖhÆ} P!&UrCÂI”õRröñ'”e`¤54:z4×M»ùj÷[ ÊÞÿý²k×.¿y¦L™bÞ“¯[·Îï: üj—Ún¸AÚµkçs'ü¹ÿ~ŸéÚ}¶Y³fÞË×\sœ}öÙòË/¿´Î+V¬0¡ÙsÏ=×tÝ=pà@óö„JõsˆÒ ê]wÝe¦Mž<Ùg;Š åêvè´Í›7;Þ—Só/»mÛ¶ÒªU+ŸÛ9rDjÔ¨aBÝÅYŸüºtébBÀ…8p ß<3fÌðvðÍK; W«VMÆW¬m,êrIoª_¿~Ò¼ys^t‚„0@0ÉYC7a” kP¡ÇÎ>J-Jbí»›0¸Õˆþ!a_懣¹sçú„u aŸÛyŸ:u2Ë?~ü¸Lœ8Ñt´õpÍ{ÂÿüÇ,_ƒ¿~ø¡dffÊ—_~)³fÍòYÞÏ?ÿ,ݺu“ªU«Êã?n:䥨ðW_}e®9r¤|öÙgÒ»wo¹üòËKÖeé¶iÐwåÊ•¦[³.CCÍÕ1ÿ²çÏŸo.ÇÇÇ›ûÐÛôéÓÇ„¸µÃqqÖg̘1’˜˜hÂ×Úq·víÚÒ«W¯BëµpáBóÐåyüöÛorá…JãÆÍvézk¨zРAf_ìÙ³§ÐÇJqCÂ%}¼9sF.»ì2³ÝBÂÁæé&œ•N-P¶NdŠLÙCœ”:Í £d6Ç‹,‰£Üëos OêŠÍ?~¼cHX¿´‡»èWýÚ£Lßõ´µÆç”@Óתs…©ÛÅX#2 Œè¡ôÌ ‹C|=5èªgó{úé§¥fÍšæ½ùœ9s|®‹•sÎ9Ç„{óò„?ßxã 9ï¼óÌÿ£££%!Áÿ™–œœl:ØzÞÿë}=øàƒ>ó,_¾ÜLûé§ŸÞž¢BÂ,Õ½vÕ¡t7mÚdnóÞ{ïùlG {-Z$ 4ðnGýúõ}ÂÎùëè´ì©Ög»:uêx—#Ë–-ó«kQëóÐCyïKÿÕ.»ii…ŸÉP¹ÚÉ8P|ýúõÒ²eK³,Ï™_êÕ«'}ôQ‘•ↄKúxÓÄú8Ó1‚w<Áäé&¼i4µ@ÙÚ»Ø ŸÈ¤¡H0ðauêPRÛÆŠÌkB¸—~QíÎÓ‰+œiØ)$\ØisžôdÉz9Ú3­AŸh¡L_¯þÇñ”ÂÕ4y'e@Y¾×µF]k¤„éúÿú믒šš*§OŸö™Þ¦M´Í/oøóÔ©S²sçN9qâD¡÷±ÿ~Ùµk— ï–§ȱcÇ‚¶¼Ý»w›n»Å©c~Z­Gihõ¾Šª{^ÚõYÓß~û­ß²t»4¬­] [f Û¬Ç›†¤Ï?ÿ|™4i/4ADH ,hÌÙµo¢liˆraKêÊû‡kÉyº²€[}ö™Ht´Høé§]±yz*]§ðŒ3Ø÷.býµ–ÊbdÖŸHn¡$Bœ†ú´Ël<¥pµaÖà¼4(KÙ9±æÖpËÑߥK—š÷ëÚ 8?§±sçÎõë&Ê·ýë_ŽªP:„„ÊBVºnK›K-PvÖYÞ“:„*ý±ÀâöÔ¡¤4$üY¸ØâÅ"11þ!áÛnsÅæõèÑÃ1$œ¿‹Âø#5Š}€Y;6®¥$€þŒób±»€Â½4^CPÆ´·¬†„c­‘î‚í¹é¦›¬'1Ž ‡·#GŽ„ÍãíðáÃì0€2À7®ÀufÍš%ݺuóPʹÜ,ëa ¬hUƒ¨Mºo–v¦%µç;$œ•N-¸ÓÊ•":ù‡„¯ºÊ›×ªU+¿€p­ZµdËzͺÅ=b\®n‹€P×Ö-¬1ˆR¸Ú´œ¿QG)ÊXzÎ늆…SÂ|[222 <~~üøqÙ¿¿c€öã ÁGH]Ywxùå—ÍòGÐýWX§ƒÝ³ ¸¡ìd™%’žD-BžKg_²ýz$…Zp§ëõíž{üCÂõë»bóÎ;ï<¿pûöí%55•}ïÓ­a½5—ÇŠÝIÂþŒ³5úR WÛ’ó7j=¥@9Ð÷AzV…ZÖ˜M9„ BÂÀ‘vøzþùçÍ/º‹+))I†*ÇŽ+“ukÚ´© 4hÐ@N:åw}È„„5Ä9»–È÷y@!øö.¶”¿ÉYkÙ%“¹Å~Œg¬¡ÜkÐ ÿ°Ž£áß÷.@XÇÀ »áO´5ÎûÀrok|GI„ 7Ëùî••ówj1¥@9ɶF‚ØgXÐóÊm¤$B!aàèwÞ1_äïܹ3¤ÖkåÊ•f½®ºê*óïâÅþ‡ûC&$¬VôYÖƒ‚oý0‘/ºP‡P¦Ï}BÂ%§x Ó-€›ýå/Î!áÏ> ëÍÚ°aƒcHøÑG•ÌÌLö{˜»IìƒÊ‚ÑGj6%FôÇ ­­Ñ’R¸žþz•2 œiëž9ï•â¬1M8《GH€0³uëVéÙ³§é¢[£F iÕª•,_¾Ü{ý¦M›¤{÷îR§Niذ¡ôéÓGöìÙ㳌)S¦H»víäàÁƒ’ —^z©´nÝZ½×7nÜØ|‘ߢE 3ïÂ… ͲGŒ!;v”ÚµkË]wÝ%ÉÉÉ~ëèY¾'PÔý©Ó§OËØ±c%66VªU«&Íš5“5kü»G~ã¥À‹0aD;rU­ZÕ„'Mšd‚»¬ýúë¯}®ïÑ£‡,Z´HæÌ™#mÚ´‘zõêIFFnHÕšíß¿¿ 3Fâââ¤R¥J²oß>ÖSëž:pñë܇Î!á‘#Ãz³ôý¾SHøµ0?Gº4kÔû€²vâL¥$†„ÿ`º”Âõ4 Üž2 ‚éôüH 9‹y´äþèŠÁ`”ÝØÆK€!aÂÈ 7Ü`¾\_½zµãõ]»v• .¸@Nž<éöóÏ?ËÙgŸm:{xB³:u’¬¬,3MƒÆ:MÁJÿÕË;wî,p}4,ì4OA!ÝÂîïÞ{ï•&M ïã2yòds ,+íD¬—ÿùÏtÿV_tY3ˆ0‚'s‹Ýaõxµeó¬×´mc©CikHЀ›%%‰T¯îîß?¬7kذaŽ!á>ø€} ð6€IDATÆ.û`²ž¾} å¦48úá˱Hð¦5Q„(=„ : ”Žƒ&NŸ>mºæjW`ý~gΜ‘èèh4È?ŒÚ±cG¹üò˽—=¡ÙÝ»w{§effši/¿ü²¹\XH8;;[ÒÒÒdüøñŽ¡å‚Bº…ÝßÔ©SÍå›o¾Ùt2v¢Ý‡µ{°Ç±cÇLgá:tÿÖ.˜³kÙÝ_`Øù®ÈGô= yÚ÷‡DêP [ŠlI¸Wr²È%—ø‡„ÿ÷Ãz³z÷îíž1cûÿüóM`WÍ›7¯X„‹ + ":TÎ:ë,yâ‰'¼ÓŸyæ9÷ÜsåÖ[oõݺu3Ëyê©§Šuÿånžµß¶åŒà˜Sßî&Œ~ÑβCÂû’©Ei¬HH€»edˆõ†Ö?$¬Ãz_®bbbüBÂ5’7²ÏÃP/±"G[ãcÊ ÌigtO'a~ÊínÚA8Ê=D:B„‘k®¹Æ|Á¾yófÇëÛ¶mkºûæuäÈ©Q£† 0À;-Ðî”)SÌåuëÖ™Ë?ýô“_¨×þꫯ|î³4!a.]ºHÓ¦MÍÿ5 ­‹ì7ß™3gä’K.‘úõë›ù½ÿr§]_µû+PZÇÓìðéõÔ"”K%$ k‡ˆ,ïI¸Ûý÷;‡„§N ËÍÉÊÊ2?^Ìnß¾½$'ów1ܼ/ödc¬‘FI„9 Œzº£óWÉýZZc8eD8B„ ãj‡] ¯\¹RRRRdòäɲbÅ sýüùóÍðñññ&„»wï^éÓ§9µïöí¹'… $´«·­T©’ 2D>l¾ì¿à‚ ¤C‡¦Ø¢E‹¤M›6æ6o½õ–Ïz–$$ªËc)ÔÜh‡„¤P‹ÒØ4ZdigêÀÝÆŽu ÿíoa¹9ß}÷_@X‡þh1ïg„¾ kXï:ÍäöÖØJI¸@¢äþøa1åp½¾9€HFH€0£á\íªëù²];èΚ5Ë{ýÔ©S¥N:ÞëõT¿Ë–-óYF }Ÿ~úi©Y³¦™>gÎyÿý÷MPX/7oÞ\Ö®]+qqq&¸<}úô—Èý=ôÐCÞûÒûõë'iivŸª;î¸Cþð‡?Xír¬æ;ï¼3àû/wÔÀ`&'³D)­HWêp „õ9¯…Qr›ãE–ÄQî¦a`§ð!a¹9 ,p ?þøã’ÍœÂI7±ë©ÚgZƒ½À æJnH8‘r¸Þ«bw ’ LíÞ½[222 ¼~×®]²ÿþRßϯ¿þ*©©©rúôisùÔ©S&”ë¡Óõú3gΔú¾tº¬'N¸s§i÷×íãyð¢ô£ï'R‡P—žDH8¶$ˆ,ˆ¡ÜMφáîÙ3,7gܸqŽ!a=sÂÇ»’¢»×) —HÎóúö.åp=í­?vÉ¢€FH ¼|ÑEdyOꀒ;¼ŽÔá"uš½¯ÎÐs¯T~H™×„:p·õëE¢¢üCÂ×]–›ó§?ýÉ1$¬g%AxП¢ÖûÀ±þ^@I¸HrÎë[=k$PŽˆø›¦û{=¥D0BÂåeÛX‘¹¨Jîÿ½j?†ž†> ·~ÀÇ­ ÔñÃêÔ€»%'‹´lé¾ð°ܜ{ï½×1$üñdz¯ÃÄÍ’Ûeó=¡û"wYŸóúÖÐñ”#"ÔºF"ßZ”—ëíÐ`V:µ@É,‰Y5:„ tÏ®EJk× ûu3û(µà^"·Þêþ]x¶»ñÆCÂ6l`_‡EbŸ–]}ƒ­±’p™Ôœ×¸¦ÖF9"‚žÓëʈ`„„ÊË©,‘éQ"{>¡(¾ãiöãG;«"ômޙׄ:”Ö¾d;$|,•Zp·œCÂ;v„ݦ´lÙÒ/ \·n]IMåµ<ÔéOr‹}ÀXßŬ $\(5çu®­5ø ndxÆí) ‚(O‹Û‹lI (¾ïÚ!a:Q‡‡Ïˆ,ˆ¡¥µ¥>’B-¸ÛèÑÎ!á×^ »M¹à‚ üBÂÍ›7'$´sðïrƱCÃà6©9¯s7X£ 刳­mlJˆP„„ÊÓÚ!"Ë{F䦿òÊ+&$òßÿþ—ÇAI¬¼SäóXê.Ö YGJKÃÁÖŽÂàf“';‡„Ÿ|2¬6#;;[ªT©âŽ‹‹“-[¶°ŸCØ—Ö¨*öÁâÛ¬±‘’p©LÉ w¦!%gŸ¯§€EH€òvú7‘CÛá227‹¤/9²Cä·ŒÒïÿï'ŠÌmÖa x<ÿüó’‘Q¼z$%%ÉСC娱c³ÍAs*Kdf´È¶±¼†† u/ëAJK_w ˆì4(¬6cõêÕ~a½zõ"$´³bK±GYã ¡Û"wÓ×»ÿµF[J1êZã]ʈP„„(o<ÕÀ#<Çô(‘1v7àM£Eö|b8u`½½œ¬ô°}¿óÎ;&ì±sçΈyÚVø6ïžm?noç54\,ílwFééc?=‰:p·M›D¢¢üCÂqáÕ•~Ê”)Ž!á‡~X²²²ØÏ!ª¯Ø‰u ·ï8¸¾ÞÝj&”"bèOx‡P ¨fÍš%ݺu“ÇS Ä ¼ÑI8|; Ü(²w±È‰"ŸYg‡†?ª+²~˜}}Q4P¬·ÑÐgmݺUzöì) 45jH«V­dùòåÞë7mÚ$Ý»w—:uêHÆ ¥OŸ>²gÏïõêh×®ûlÓXyìvêÔÉ{:h ë4 Æzèÿó†qhX8ÿ<…„‹º?Ï|}ûö•Ó§O›iÓ§O7ÓÚ¶mk:«ï¿ÿÞLûûßÿîÝæ‹.ºÈ»=8¬!á§žzÊg]Y@¶¹Ìh8RSÇRyŽ… ¶nާÁªåÎw©wÓ õëçÖ±kWØlÆm·Ýæ^ºt)û8½ ¹á?êÃ’ˆ1Ö¸+çõ/“rD5jH8™R„¬ììlùì³ÏÊlùzF²nݺÉáǃ²<={™ç˜d$p:6J×^ |6í,¬_5|<ÍÿúÔi"V/8D\LœÕ.ÁÚØ¢ÍëÌ™3-ƒ ò»®cÇŽrùå—›ÿ{ìîÞ½Û{}ff¦™öòË/{§˜Õúiii2~üx¿ÐrA!á¢îÏ3ßþýû½Ó–-[f¦}úé§ÞiGŽ1Ó´»°§&×_½Ìœ9Ó;5jd:çÈzThHxQ[‘•wò¼ 7tžOš¸î¿ß9$¼paØlÂUW]åÖ³Z ´è§”ÿOìƒÃÖ'™NID8kÜ—ó˜J9"††ÃËãSºv[uz?T½zõ¨C(;O:eÎöÒK/y§=ôÐCf=ýõW¿ùµYÂ-·ÜR¬í,êrq}þùçr饗Ê/¿üâúçΔ)S¤qãÆ¦^z¶víÚ™³Øyj¨Ý…L=ôìo‰‰‰>·ÕùÓÓÓeÈ!æøõš5k¼×ëܺwï.uêÔ‘† JŸ>}dÏž=æ:=³Ûc=æ³.þóŸÍòòÖ]—¡Ç·u_zîOíæ½ t´Ž+V¬0ŸgjÖ¬iþÕ ¸Þöÿø/ {„„Ê‚v}Õpç–þAáŒ5"üÎî<zUÈÞ~ûí…^?jÔ(¿ë40«a•ÓÁñC‡Þ·oŸÜsÏ=&ŒÜ AiÕª•™G¦zr0Þéþœæó„„-Zä–7$ìÙæÚµkË%—\â3ò×)õ¨°p滋ðþ•<§Â>ǵ 4JOpAH@$9Ò9$œç}Q¨Ó/öóbêÖ­+©©©ìßÓ]r»ÿÙÛ) €¢çvœóHõÈÑ×=Ëá~øÀ¿ò –·-[¶˜õѧGRR’ :Ôœq+T¼úê«&„š7hHØi¶3ÿñ¿ü×´œÂÜxã&ÔêvÂÕÀ®ÖïÅ_4ÇISRR¼5íß¿¿ 3Fâââ¤R¥JæXqÞºß|óÍríµ×ʸqãä§Ÿ~2×é µÉC=Ì1Þ9sæH›6mLX÷ÃHëóÑyçgšR(m„qþùç›åi3¿üå/&Ìë´ŸYG¥.ôŒ{º.ÚÑZCÄ(ÖÛ>óÌ3¼€ ì(+ÙGE–ĉ,ˆù-Ãwº?Óæån´ÛF•*U¤I“&Ž×Ÿ†ös ë¨ûXÂz,9/mBA'a¸!a€²¦Á¹|;a~3Ü ‰†qÏ:ë,^¹r¥9åÛäÉ“½§2Ô/ô ¦LÕìÞ½{Íÿ¨¨(Ù¾Ý>¹p ¡]½­ž’mÈ!røðasÀV»>è7n4Á]=5œÞî­·ÞòÞ®¼CÂÿùÏÌzj·ä?üÐþòË/ý:“²ù·Ùsš»2µ¢·È¢¶¾ár„ÏsžpðhGmí& n·t©Ht´HøÊ+Ãdõ—:†„ûöíKH8„<%öa÷êŸYJ  ÊúZ˜H9"JKk”uܯ¨ð“O>iŽÇå¥iõ6ï½÷žwšçxUÿþýMpU;¥ê1.=>å ¨nذÁtVÕ€ð¤I“L@VCºÚ)UC“4ËxñÅMÈSæ?æY††/õ8Ûœ9sÌq½zõêIFFF±ÖgÁ‚æòĉ%))É¢·mÛVh½:wîl¡ù.hó®oAÇ!ó^vZŽÔ˺yõêÕK®½öZŸõ¬Y³¦_˜Øm vLµ Î.¨K¯ÖXëJ—W_}µùûöíe„ &¨­·ÕÆÿ÷ÿ'¿ÿýï \§@ûêåÇÜg= ÀM ”‡ô$»+ìÞÅöåoÚ—Oï$‡z _¿ð2êׯïˆ:uª9Àš÷Ô϶õ4´«ž~úis\¯Ó/Þÿ}ÖËÍ›7—µkך/ 4¸<}útÇå—uHXééþš6mêÝf]ç|Ðg[]üÛ\¦4\ª!Ó baiÿJ{ÿI¡Á !á%qÔ€ûéiŠÛ¶õ 7l«ÿÚk¯9†„}ôQï©}Q±V[£†Ø„‰}ÚuˆDÖs•hLó]ÊQÆZ£y߇'$¬AVíðëžM7$Ü©S'ï{) ÿê4 l*½½¼zõjÇu $ØÙµkWsLïäÉ“Þy~þùgsv®#Fk}î½÷^iÒ¤I±ê¥Ç2ï¼óN¿é„„ ÚF§í,êrþåh“íb«Û”·.•+W6ÇX½©±cÍí4hêfÁ ëãMkùðÃûÝ—SÖ ºÒ°>_ô9¢Ç™wíÚ%Ç7õx´¶õ9è~wZG] ·ës!/mAHnAH ¼hÐmN}‘ß2D2·Ø!Â=Á?É¡ž>-o§üô`êþýûK}?z^¿àðtÊÐî ÚÁÁC§ëõzú¸Š¦Û«Û]ÚuÉ¿ÍeæóX‘å=y΄+ýQ€>¿µ£0JoÃH‘OšSî·r¥H÷îþ!áêÕE d«]ÀœBÂz:j„†f’ÛEø/ú–…’ˆPÖs•è&â)GDYŸówpKÞ‡'$|¸wxB¤Å ëq>=K–'ܨǦ´°vü-è8UQÁN=N-ƒ ò»mÇŽ}:üµ>Józùæ›o6Ýy‹¢Ç5œ9räH¿ë*:$¬ `½¯.ÇŽ3—_zé%9ï¼ó|ÖiæÌ™ævëׯwõsgÊ”)f;×­[W`U !a¥gÄkÕª•Ï4mQ£F S{¥¨õöÚ]8ï¼×]wÜtÓM&h¬gŽ t¿;­£Ò.ÅÚÂÓ[›`&$ · $ P^²ÚA·o†Û—ç6ÙBhùècâÃêLÃYê4;$|&›Zö±"óšPî§?òê×Ï?$¬#€EE»ÿþûCÂùÏHŠ1^rÂÚ#m1%Á†‰ŽB‘H‚:¶ —ï ÿøãŽ×7$\P¸1==ÝüÿöÛo/p]Š {–¡?öÊOC™zF²@×Çc„ ¦¯†µ±v}-ŒÎûÈ#øM×iºì£Gú]×¹sgéÝ»wÛè´¾% /Y²ÄL›6mš T_rÉ%æ,yMš4ÉÌ£aV7Ó»îÓ!C†˜.ËÚe·´!áùóç›ëâããÍíô>úôécžÛ·o÷ÎרQ#3ß³Ï>ë¦g’Óiÿó?ÿã’/iHXÏV§c}§€pGH <í]l‡3Öˆ¬{Äî xì_)23ZdûxjÎ~H´Ÿç^= ˆ÷ßïž;7äW];Æ9…„ç†Áº»]¦54â£ïN4’ô†5ø)€Ho–b…‡SŽˆ£!ñ¶e¸ü’„„5Yܰv:­R¥Š4iRðçå¢BÂ'Ož4ÁH혚_\\œ´hÑ"àõÉK»±:TÎ:ë,´,LÓ¦M¥»žM#=….û‡~ð»®uëÖÞu.˰†O5 ÚµkWY¶l™¹þ›o¾ñ¹Ÿçž{ÎL×à¬Û=ýôÓ¦Û®nïœ9sJVÚ}ZÃèžÏ111¦Ö¾‘ì#®ZµÊ;mõêÕfÚ}L·cíp\œõ3fŒ$&&Ê/¿üb:îÖ®][zõêUh½.\h:"ë²òúí·ßä /”Æ›mÓu×`õ Aƒ¤jÕª²gÏž·Ñi}‹º\Ðr¾ûî;ï{Û &ø¬ã™3gä²Ë.3Ûð¦¤gÍš%ééé¦K·>7õy¥ºµã6îø¦€¡¹ºuëæ=õYþË¡¼®¥/$iˆPŸNJ,ëÁ4’Xo‡ƒ5$¬aa„?}~/nO‚e_2!a‘ô¦Ý9$|Ûm!¿êzªêü!aýR}ýúõì× ÔAr»¿jLJ’hºÖfΔ#"·F­2ú»XTHXƒ¥Ú¡Wƒ®:´“î¦M›ÌmÞ{ï=ï|vî]´h‘4hÐÀûþ«~ýú昩ÇÓO?-5kÖ4×Í™3Çq¹S§N•:uêx—#Ë–-óYï@Ö硇òÞ—þ«]vÓÒÒ ­—†qµ“ñc=æw¾lÙ²¥Yžç½f½zõä£>ò™/ÿ6:­oQ— ZŽŠ•sÎ9G23}1Ú}ø¼óÎ3c„7Ýߺußk§jý·E‹òŸÿü‡âÀø¦€râtà1˜ô`¬.Ô¨QÝþË£G6—õÔ^áR«²®i™:“m‡Bç]d‡ßžˆ8ÙGE¾n‡Å—v¦ƒ°›¬bïS‡'$¬Ïp»dë5/*Ê?$|Ýu!½ÚÚy+@XG\\œµIÉì× ¢=a}gò-%#1çµ1Þ±”#"é˜h±ÃÂåÀrìØ± -o÷îݦӮ“_ýURSSåôéÓ….C ïß¿¿Të¡!h½¯'N|=󄦿ýö[Çåé¶-_¾Üt6.h¹ncQœ–Ó¦MìÎKÒ矾Lš4‰'”Kx»Ú¹ú§Ÿ~2—· $ @1lÙ²Åtƒ(è€ka’’’dèСA=ø›WÓ¦MÍñÚ9BO‰•_qCÂ¥ÙÖÒŠˆ°:’"òQ]‘™Ñ"ó/ùö9‘kEmc¸mdnI_bíßoDvÏY5PdN}{ÿïxÓÃ=Ö Yy'u–ƒíð±TjÀý4PãÖi!ìã?v ß|óͲqãFökÐóSTûào”5Zƒwœ`›‘óú˜`&”#b=bFÖÈ¢!aîܹŽÝ„+ÚÒ¥KÍûÚü?|û׿þ% ì8a0ÅðÎ;‚Ú)+”è¯Ûu½®ºê*óïâÅ‹ýæ)nH¸"·5bBÂêÈ‘ù—Ø8FdŒ«‹|ÑÅŸà„Ï®´¢·Fph8XŸ;úà p; tîì®][ÏŲ«=~üxǰž>ûèQ:ÁW„[$·‹ðÖH¥$ûç6çõq²Ø!QD&ý„YÝc)EÈ8räHÈ­ÓM7Ý$111~]e>Ì6 \cëÖ­Ò³gOÓI·FÒªU+s2M›6I÷îÝ¥N:Ò°aCéÓ§ìÙ³Ç{ý”)S¤]»vrðàAÓàÒK/•Ö­[Kbb¢÷úÆ›/»[´haæ]¸p¡wÙ#FŒŽ;Jíڵ宻îòë.àY~fff@÷§ô´fcÇŽ•ØØX©V­š4kÖLÖ¬Yã·íƒ–FÉŽ;ÌúÝ}÷Ý~ó'$\ض®ZµJ®¾új³>zªµ%K–øÝ—gÛÒÓÓeÈ!R¯^=³ÞÔ)ïºíÝ»×tÐu¹è¢‹$>>Þ瀬SH8õ xÓn²¦“pcëD'a×w>¾›ëH°´3!á`ò„„÷¯¤Üoûv‘;îð ëØ°!dWû©§žr ßÿýìÓ °LìîÁzà·®Øa8@®äœ×È·r^/¹†[£–5ø 7 ¢gÙ ×@°ž05gì°†%ßlmŒr¿ñ@ˆ $ p… 6HÕªUM@xÒ¤I&ЪáÚ¯¿þÚçú=zÈ¢E‹dΜ9&@ªáU=Ч<Óþýû›`ì˜1c$..N*Uª$ûöí3Wí„¥ó¼øâ‹¦ÓnJŠÝÕp„ Ò«W/yûí·Í²/»ì2RΫ nA÷§,X`.Oœ8Q’’’äõ×_—mÛ¶ù,W;sU¯^]ž{î9sùÚk¯5Ûªáã@îß)$\ж®[·NªT©bÖyÞ¼yrë­·JTT”_·aϲõôº>ãÆ“Ÿ~ú) :å½½.ÿ†n0µÑŽ :íå—_.p›]¿p&[dQ[‘yÙá·ëy"n¡ÏíM£©C°d¥Û¯“û’©÷ÓnÁ>è~ï½]í{ï½×1$üÒK/±O+€~ÂòtÖÁ'ð•œó9Cø’,ÒYŸ6MHx¥@˜È²ÆÆœ×/í‚ýˆ5zX#ÎMÄþØï!3¶ñ@ˆàøÀ4Hª_B¯^½Úñú®]»Ê\ 'OžôNûùçŸåì³Ï6m•'pÚ©S'ÉÊÊ2Ó4d¬Ó4$«ô_½\TèTC°ùç+(¤[Øýé—íMš4)ô¾&Ožlnã ,k'b½üÏþÓg¾â„„ ÚV­£vôõ8vì˜ ájç0§ûêׯ_±ë”÷ö/¼ð‚wZvv¶\|ñÅR·n]o7áüÛèú…„Íñ"Ó£D>‹YÖƒ'1à&ó¬×í- Ô!˜4$œ6—:ˆ úã?§pžË…šnݺ9†„õý>Ê×’JаÈNJ~Rr^'ßËù÷(%‰hss)B¾>-»ëu{ñ=[D[kô͹.>ç1}ÚtÎÕ®Àúÿü4P-ƒùŸú½cÇŽrùå—›ÿ{§»wïö^Ÿ™™éÓ½¶¨°YÓÒÒdüøñ~¡å‚Bº…ÝßÔ©S½yµ»¯í>¬Ýz=4«…;tèà3_iCž:_ýõ2sæLïhÔ¨‘éìt_éééÅ®“ÓºyhèX§ïÝ»×o¾â¬_…;¸Qdf´È·ÏØAa‚o€»hHxç»Ô!˜ôµò‡Dê 2Xï‘CÂ9?n Ezv§ðŒ3ØŸåHC$çKnHx¡~ö¢,à'5çurJο©”$âÍy,¼I)ô,zT©·5¢Åw¶†ž³êk¤Q"ÅDHö4ˆª_@ß~ûí…^?jÔ(¿ë4!a‘cî\çpgé¨HzÖ§°ž)åçFÉ $PÔœ×Ê9ÿn¤$°¼*vSƒ™³ÄîÞJ×UFY}|-ÉùrÎcPÃÀ ®nb‡‚3yz(%B€°wêÔ)©R¥Š4iÒÄñú“'OJåÊ•åá‡ö»N»ð¶hÑÂü¿4!aíF|þùç›Ð®š7o^À„‹ + ×:TÎ:ë,yâ‰'¼ÓŸyæ9÷ÜsåÖ[oõžÓý>õÔSßQ!aOo»í¶"÷IA!ß@êTØíŸ}öY3ýðáÃ~ógý*Tz’ ÌX#²î‘Ïcyn£á}®#x´;ó÷œü@„ÐÄ9…„¯º*$W7++Ë|ÞÊ®[·®$''³?ˉ™*‹}°WC%k( (-çõò£œ?¡$È¡?{X£ªäþð†Á(¯c!ÖПåé ˆ \ášk®1_DoÞ¼Ùñú¶mÛš®µy9rDjÔ¨! 0— íN™2Å\^·nwžŸ~úÉ/Øë ¿~õÕWÞi¥ {téÒEš6mjþ¯¡XíÆ;xð`¿ùΜ9c:èÖ¯_ßÌÈýç ;m«Öùì³Ï–_~ù¥Ðýá´mÖ)ïí÷ïßï3½sçÎÒ¬Y³ï'Ðõ«0ÙGE>i.òÍpûòÜF"[xn¢Ïs ïK¦Á¤!áÍñÔ@dHM©[×?$ܨQH®îwß}çØE866V¶lÙÂþ,'—JnÀä9kp®(œ¾^NËù7‘r ŸCbwx¥“0£<: k;,žvÊø8aOC¦ÚeWÃÀ+W®”””™èsßNÛh<·¯R¥Š™ÿ¼óÎ3óGGG›àsQ÷ÈúUˆô$‘éQ"{Û—w¼i_>‘É“p“ƒí°†…=Jä‡Dj¸Í÷íç7‚KÂ+ï¤"ÇäÉÎ!ááÃCnU¯¿þzÇðŒ3ØeL»_z¬‘BI `Ž; LH¸!a€²p,UdQ[‘…-Eާù^·/Ùî4z`=uÜfK‚ÈÜFÔ!Ø4$¼´3u9V¯v ßv[È­êW\áþüóÏÙehºä„«[#™’@±´;$¬çxêI9€‹¶Ý³E>ªkÚò„•†?¬.r†“®³9^äóXêlë!$ ²¤¤ˆDEù‡„¯».äVõâ‹/v '%%±ËÐ¥’þ‹5Ò) ‹~º-vP8Žr#$ ,7Ьè-2=JdÓè‚CÀ+ï$ì¸Õúa<¿Ë‚†¯—ðÕ=€¢!á˜ÿðŇܪV©RÅ/ \·n]kRØeäUÉ ×·Æ&JŦŸÚYc¬5b(p1BÂ¥q"S$m®È²v8XÃÖ~›Åíí1÷Y3HdÕ@êlž×„:ˆ©©"]ºø‡„+WɳQddd8vމ‰‘õë׳Ë@–5ΗÜðkº( [_±C‰֨N9€‹„†Ó¿‰ÚÆ`„ÞÈÜ,’¾DäÈ»SðÞÅ"?$Ú!_ ÏŒù¨®Ý=T¯/Ê©,û6»gó¼ÜHCÂ:\;Þ$$ ²hH¸Oÿ°Ž Bf5gΜéîÑ£„ˈ¾Ëð„ÛZc+%€¿žêÏ;g _”wãØ 4hóƒß1¡?´[ð‚‘å=í ðžOìào ´Ë°.'+ç=àF_t±4€àÒgÌmDDŽtë½b¿~Î!á3Bf5_{í5Çpÿþý%UƒÎª]bw»ô„„ß·ÆQÊ%¢!áÎÖHÎyMå( p+B€Ð@'aF8tþ-'òý~"A7À͖ĉlާÁ¦!aý‘D’§žr LJÎß™#F8†„‡ &G_ ¶ÿ•Ü€pOkЫJn¤Ø!á9¯«¼¦·"$ PžÖ±»p'í4NH8øÒæÚ]Ø ’$$8‡„Ÿ~:dVñ¾ûîs 7ŽýdJn@X63ÛÙ”JL?µiH85çµ5™’—â[V€ò´¸½È–ê¸ÕÌh‘oR‡`Û—LH@äy÷]çp÷î!³Š·Ür‹cHxòäÉì¿ k*¹!á{„Ž—PZñÖho¬œ×Ö$J\ŠoYÊË©,‘éQ"{>¡€[iõ‡Dêlžp6§®AæÌq ·m2«xÝu×9†„gÏžÍþ "íËì G Ý. ^µF“œÿk‡v>Å·"$ P^2ÖØ!·¬tj¸Ññ4û9¾w1µ¶ëíÚK¥"Gr²H­Zþ!áúõCf/¾øbÇðºuëØA’m’n þ@é%JnH¸‘îEH ¼l|Fdn#긕X5Èzp#µ(«ÚI4$ãÜMxÏžXÅzõê9†„SSy½–?In@¸®5¾¤$‰Öðü즽5ÆRàR„„ÊË]D–÷¤€[í_Iµ¬xB‡·S ‘CCÂ;;‡„—.­ðÕËÈÈÊ•+û„ëׯOH8HŽŠ`ó„„G[ƒs’@p$Jîd]r^c܈0@yù¨®È‰Ôp«Ý³í ë‰Ljl§²ìÚîK¦"Çöí"wÜá~ùå _½… :vnÞ¼¹¬_¿žýƒ$7 cU”‚fšä~A6ÐC( p)BÂåáHŠpËÜB-·Ò|ÀG¬2£µMO¢"Gv¶ÈàÁÎ!á‘#+|õÞzë-ÇpÏž= ÁjkT–Üðx±; ‚#)çõUâ©á”¸ß`”‡]3D>¬.r&›Znµó]»c8ʆ†„éÆ ÒŒá~à _µ?ÿùÏŽ!á¾}ûÊ–-ü0®´®•Ü€p[k¬¥$TÉ9¯±©Öˆ·F%.EH <|ÕWä‹.Ôp³- "óšP‡²BH@$zë-çp¿~¾j<òˆcHøñÇ—ìl~WŸZ#JrCÂï]„ ØÖHnHx¢5b( p)BÂåaAŒÈÿ{•:n¶9^dq{êPV´Kó÷©€È2w®sHøÊ++|Õn¹åÇð¨Q£Øo¥t…ä„;[ƒ¾Ì|©’žfF”¸!a€²v$Edz”Èþ•Ôp³o†‹,ïIÊŠviÖ 6D’åËCÂÍšUøª]wÝuŽ!á &°ßJá}É ë˜i ú2@ð¥æ¼Î¦X#Yø² Ü>}Zºuë&“'O¦äÃq€²¶}¼ÈìZ"gøzpµ5ƒì²AH@$Ú²E¤n]ÿpåʾj111Ž!á?þ˜ýVBYÖh,¹á›­±‘²@™HÍy­MÖr9ÿÏ¢, Â=ÿüóÞÏ÷gu–Ô«WOâââdþüù!¿î§N2ëýÌ3ϰ#ȇ0@Y['²¢7uÜN»k7a”Em ˆ<ÉÉ"±±ÎÝ„÷í«ÐU«ZµªcHxÓ¦Mì·z@rÂQÖ˜+t€²’*¹!á4Éí* ‚oË–-&|š‘‘Áö†8OHxæÌ™²páByýõ×MP8**J6n ퟱ `„„³fÍ2§Á9|ø°ãe„©™"Ó£D¾ŸH-·û<–kYZÚ™úˆ<ë׋ôèáž:µÂVëèÑ£ŽaýÒ055•ýVúÕq5É ß#„Õ Lÿ–å¼ÞÎιì €Ò9}ú´Ì˜1ÃgÚ;ï¼c>3îܹ³ÂÖ+%%EÖ­[ÇöÁþé§Ÿ¼Ó^zé%3í•W^ éÇ!a FH€úáV?<þ÷¿ÿ-“å¿üòËfù£F èþ [Ÿ¢–…òC¢ÈÖ[®¬tj¸Ý¼&"ÛÇS‡²¢!áõè€Èrô¨HŸ>Î!áÉ“+lµ–-[ænÞ¼9!ázBrÂÑÖøŒ’@™Ó×ÜÄœÿëkï'”€R™7ož´lÙRêÖ­ë6eÊiܸ±ùÌØ¢E i×®Ü|óÍrýõ×›€m^Ÿ}ö™\~ùå²oß>s;wÿþýòØc™e\tÑE/gΜñ»ïU«VÉÕW_-ÕªU“6mÚÈ’%K|®_»v­ùakïÞ½M§_¶×™SHxñâÅfÚ˜1c¼Û¨ëšžž.C† 1†×¬Yã_Ï0Ô½{w©S§Ž4lØPúôé#{öìñ¹Ÿ­[·JÏž=¥AƒR£F iÕª•,_¾<àíS+V¬«®ºJjÖ¬iæýꫯCÂÚ ¹C‡>ÓôØ…nÃüùóÚ¦@Ö€P?€k”æ>III2tèP9vìX™¬[Ó¦M͇SýÀ«¿fͯ8!ᢖÅþ!Ë{Š,‰ãÉ D‚êŠìšAÊŠ†„× ¢"ÏO8‡„Ç«°Uú÷¿ÿíîܹ3!áÐÞRÕ%7$ü¨ÐEÊC”5ÞÍùÉ Š'X X]NY7|Añi`òÊ+¯”êÕ«ËèÑ£åСCÞë40:pà@³Ï^|ñEÓe×ÓG¿—Ë«W¯^ríµ×úìç[o½Un¸áP‰‰1ÓôöyiÇÜ*UªHÿþýMpWo£Ùü|¿ûî;X­\¹²™W»í²½¾œBº ¦÷•w]5ü¬ë?nÜ8ïü6lªU«J=dÑ¢E2gΪÕЭç»<Ï<úç¤I“dáÂ…2vìXùúë¯Þ>W—qÇw˜ýñöÛoËïÿ{Çð“O>inŸ¿6:ï{ï½Wä6ZoB!a€«„Â)|œ¬\¹Ò¬—þ¢UÿÕ_ÝæhH8e±¿CDöQ‘Ùµè, D í¾/™:”•e=DV ¤"Ï‹/:‡„|°ÂVéoû›cH¸oß¾„„KàNÉ [ŸäKJ墑5rþßÒ½€’ V–üË)¨IHY7|Aà´»ªþX4::ZFŒaºà:Éÿ]ÎáÇåœsΑ{ï½×;ÏÏ?ÿl¬S§N5—=ß‘½ð Þy²³³åâ‹/6{óv×íÚµ«éºë¡ q>õÔSŽëóí·ßš.¶:σÖgë´´4¶7‡'$¼mÛ6¾ýãÿ(gŸ}¶é¢ëiZäY×~ýúùÝ^×í‚ .“'Oúl«.Ck¦4­·_½zµã:²}ÔÕ.Åy)ék…ÓYX‹.h›ŠSoB!a@¹)êÔ1E~Æsª—ƒJBB‚\zé¥ÒºukILLô^Ÿÿ>úëSϲõÃgÇŽ¥víÚr×]wIrr²Ïúy–Ÿ™™Ðý)=5þº566Öœb¦Y³f>§ŸñôÐC>hϺæÿü¯Af Pä68ý~öòË/÷®¿~o©ÿwz­ dûÎ=÷\¿ûÑÀpi; çߦÒÔ€PBHPn ;uL §Ÿñ|@ÓÓ¹h(TOµ'•*U’}ûö9žÂÇsêœ &˜kzº]öe—]f¬yÒ-èþÔ‚ Ìe Äê¯×5 «¿®ÍëèÑ£æƒÿsÏ=g.ëijt[5üÈýç= PÜeå?-ŽЃZçÏ>ûÌn5|›ÿCsq>0kHùšk®‘7ÞxÄx5®¿tÖ`®Þ¯8É0$Só”f²_ÊÅW}íΗÜïðv;$|,•Z” /íLDžÏ?w _qE…­Ò&õ²6Òeä·ß~{¡ë¥÷«}x;Ѱpþù évzj &Mšz_“'O6·ñX5˜«—ÿùÏú¡Úéiq—•ÿ´8úKW çz~™¬ô@]þíÅùÀ¬§öüÚwúôéfZÛ¶m½Áåï¿ÿÞLûûßÿ‹:5Oiöw û¥Ìi÷à™Ñ"isy"Áþ•vHø· jQV¾NH@dZ»V$:Ú?$\½z…­Ò-·ÜâþË_þÂþ*†Kn@XÇKBa(Oúé⑜ÿ³FoJÀe4”¨AYm<2zôh9tèÏõžcðÚÄC¿ÃÑFÜÕiLtš7c’¼×åÿn£¸ Fò.§°&!yç{÷ÝwÍÿõÌ‹yéw!º]*¦%4ÑïHô ˜•+W6Ëò¬O¤Òí×î¸ZKýž(ÿ>ÈËé»ý^I»±ê÷EË–-3×óÍ7~¹ü¡M žëôÇ›Ë Õý{Ûm·ký/^,W\q…9ëæ_ÿúWïò"}{=!aÏóÛIAëªßñêóC»-ç§M€4ðïYÿ‚¾Ã dûtÝõþï¸ã¿ÛÞ¾}{@!á’Ö€PCHPæŠ:uL §ŸÉûm÷îÝÞëõ—âyXÖ®Viii2~üx¿ÐrA² »¿©S§zŒôëaýà«Í<4«å:tèPè‡j§¤Å]VÞÓâhíõƒ¬”+êCsqBÂyO1ä9°ñé§Ÿz§9rÄLÓƒyEš§4û;ýRæþß«"³k‰œÈäEˆ{‹L¢eis¼ÈÂÿŸ½;¢J÷?~aG–D„Ñq¸ ‹ˆ(àD. ( (²Œ2^@EAQ·1*ŒËŸa\à"Œ² û°HØ‘]@аˆ‘MÖ÷_ïé®¶—ꤓt’îô÷ó<çTWWUŸªtºOÿú=õè±G«T%&:W>uª@IßS8…„“““9_Ùà]E8QßsÑ%¯4$lFuÿ …VÍMJJ2Ÿ»hï1|oö¼=v¯ô3”ë®»ÎTö®&¬0‰÷mþŸmd·Àˆÿv‚ÿ{¯§Ÿèç Þ_XLMM•"EŠ˜@° ¥hIv |õÕWÒ¡C³ ­0«Ÿ9Å2­p«Uµ?yäÙ·o_À:ZýYÏ™¶½iVÃÙR×êÐNçÙÿúÕk[ƒæþïQµèбcDz<Þ+V˜ÏÚJ—.mŠçh!ï/rVú;î?“«~N¨_е÷˜ÂöíÛƒŽ9dõøô9êÚk¯ x¬N!aU—Û3×êóÒý÷ßo–iq¦¬Svú€HEHçB:&³ég‚½AÓo¾‡=zô¨üá0ƒbÕ«W7oPu=, ö¦6”ý©>ø@J•*eÞØë€Û™3g<·é7‰u} ;ë´WvÓ7®ºÜû›èYí?7ÛRGŽ1ËèÓ7¹ {ïà /X°ÀçÍ¿÷@c¨Sóäæ|gu^òÜ•‹"sE¶¾À+¾/2«ý—4$<;~{V­iÝÚ9$<}z’=í¯›^@ÇÞß*Â#¬vŠn€|ÕA~ ¿oµéQnË–-¦:¯†Ù´’ç¡C‡2M$§A`]®Ÿ)ø¯ë]˜$ØvrZ`$'!a¥ÕDk×®í¹}èСò«_ýÊžC-Z’“Â#Z„F·«Ûúé§c>@¨3A¶oßÞ«0`€Ïmz-ég5}úô1U`õÜ(ûs'mú™ŽÓyÖÙ&uÛúVzָ촭_¿Þl_ðS§N5áñ•+WÊ´iÓ<ëèì¥mÛ¶5çK?'ÓÏ y¼rž3g޹Mõ3=í ­À­Ÿ9jõ^µzõjó¸4P¼jÕ*S¥Y£†|C}|v…e­ ¾hÑ"ó<¢•’>oÖýéòÁƒ›u;uêd T…åxˆt„„y.«©cB™~&Ø´PC£úfï׿þµgúýy¨•„³ +}sÝ¿ó¦ö©§žò,×à­~;Wߤz7}c®Ûñþ¦zVûÏͶì~Ö7±ú­yo:8JH8”©wB ‡:5OnC™—<§aÁ)ñ"gòÄŠÝï‹Ìã#å<µs8!a±)5Uäá‡CÂï¾[ ‡tÕUW9†„çÏŸÏù Á9«U‘_Âúÿ t ä; ÷rÿ–ÕÊÒ%¢ØÙ³gMU[×oÖ¬YHA×`¡8×åZ15«unËég9 Ïš5ËóyV?ÖÏ¢ž}öYs[¨EKTv è¾f̘afÑÔb7~ø!¢¸™­õ‹®~žþy)_¾¼9Úo6½^µß5xétžG%*T0ÿ×B@Áf°III‘믿ÞóþT÷¥¿¶åË—›Ÿ3 ¿òxsVº×ß ûØÍs€7}.ТNö:ÕªUó Ýfõø´"¸VÖÏÿôv­ÌüÝwß9VÖßU­b¬im½zõ2Ï‘Y}æ™þ Ò䋬¦Ž eú™PB£NSøèYÿ`¯Ö7ïÁÞÔf'$lÓ}“¨4 «opÿøÇ?:é ”¾éÕõ²Ún·ekÒ¤‰yãjcX××p¶ÿ›æœN½Ê@Ÿ}=d55ONÏwVç%ÏÙU„7>É/>K¶½"²”ÉióÕšĪS§Dô}€SHØa6–üàÖ¶téRÎW4®à]EøUq‡ùKCÂö»¸÷sòEº@”ÓŠœú™Š†…|ðAOá'Á>G°+tjÔ¬Öuº-¿CÂçÏŸ7_dÔ‚!_|ñ…OÀ9Ô¢%¶P ,\¸ÐT-ÕÏ[^{í5Ÿ¾BpfOMM5Ÿ9Ù4hàù0ØyÖó¨×žë¬hë}ûö™ÏÎx¼KË»¢¸“ýû÷{>‹ÌÉãÓ°µS…s''Nœ0áâ܈äþ 3„„ù"«©cB™~&”ШÓ>Ú®¾új¹å–[dëÖ­fJß„ëý¼¿Ù“ð°aÃdüøñ&ìºyófómt{Š*6Ë?ˆìM¿ýë=½VfûÏí¶lúصj³~K¹k×®rÝu×™.]W¿ì}¾r2õN¨!áP¦æÉéùÎê¼ä9ª±éË>"Ë;ÐyýüúYý 6 ä~ä‘|?”;w:„«T©"K–,á\eAÃÀUå—€°~ýe Ýb°üÞå~^f4@a¡!Y­”«Ÿ±·ÙcðÍ›77ë9sFFm>7±‹…ø¯›Ÿ!á`EBœ¶¯EHì÷&ú¼…R´$«Â#‡–¶mÛšÏKè™­¹£ŸSé{I§ª¬…14kD>a们¦Ž eú™¬8Má£Óóh˜Ö¦·é:¹Fï¯Û eÚŸH¤jx˜9sfÀmá˜z'+ᘚÇé|ÈyÙ2Ø>ŸÁ/:k–&‰l{…~ÈÓÓ ˆ]«V9‡„ë×Ï÷Cùè£CÂmÚ´‘uëˆVeFß_%¿„­¶—n€3Ôj7zý¬ó–ðu…•ΨÕq½Ù¡ÄQ£FI… ÌÿãããÍÌ…þ "$¬œŠ„8­§ŸÔªUËÌ¢¨ÅFüeU´$«Â#Ë—/7ë{Æ„0¼GJO7p'Z×Ïrû€01eïÞ½æÛñiii&4½hÑ"iذ¡$$$È… è Ü8š"òYœÈÁYô‹æ&ŠìN?äõ󬆄ù"€X´s§H\\`H¸B…|?”#F8†„uV“={öp®2ÑS«_¤[ À¼cµ¯ŸkXm,Ý †x‡mõóýü ‹¡8 ɩ̊–D{A BÂÄý¦½~“^þÊ”)cþ­[·®™n ¹pæ Õ¹ÕDÖõ¦/€X5«†È·ã釼d‡„O§ÒbOªõÜ—à\MøÜ¹|=”ÇÜ1$üÇ?þQN:Ź bŸÕÊŠoá¯è(PúÎ;$¬U…“é1$³êÀ BÂÄûÛð«V­2Sc1uQ.Üå ÞLäÒ9úˆUZI|ÿtú!/Ë´Bo“&Î!á òõP´b°SHxðàÁœ§L´ß*ÂZ½’*ÂP°Æ‹«z°-ÉjÑ-b!a 6È©# ]ÕC4ù9þb•V×ðêñUôE^Òþ%$ VmÜ(Ò®sHxæÌ|=”¦M›:†„ßzë-ÎSã.&¿„ëYm/Ýn’ø~HÖÁjè1äÌ™3rüøq ‰Ä€ƒVKu·ÝV[lµíVÛI£Ñ ¬ýÌS È. o|ÒU9tia ÖihUë?í¡/ò£ŸOl¤/ÄžTë9ðá‡C¯¿ž¯‡R³fMÇð„ 8OAüøVþH¨" ‘ E|?$Ó*ÂMè@8èþ;6Új/X­·¸f/ifµ«Uñ{B£Ñ"¯íä©  Bsùg‘wÒh±×2¶‹¤-9±Ydÿt‘5½D¦Wùg‘Ýï‹\áã} æÙnÏ¥ÑyÉ M¡/ÄžsçD{Ì9$üÒKùz(¥J•r Ïž=›óä`­øVn`µMt D„ñýl¸¸‚UrîòåËÒ¶m[7n\ÃÏ?ÿ,6lÝ»wË¥K—8)ˆz:â8Ëj¯X-Éje½Þ_èß­Öâ ¿àþ[6Þj“Ýç즥 R…JÂ4•„±Š0 4–Ô`ËmjY‘/Z»ÂÁç3x^à²o²ë9y‹0€X7|¸sH¸k×|;„ÔÔTÇ€p•*U$%…çg'þU„GU„ R¬s?7tÿ<Éjñt Ø«¯¾êyU¤H©Zµª´hÑBæÌ™ǯ¡\=ö^x!ß÷½zõjiÞ¼¹ÄÇÇKùòåÍqüö·¿•Í›7G|¿éH3ÁÍØnÛÝç·ûï“þMzÒjõ¬'®`°V ~Z\༯@6ðI6 4T¦Åz%á3ûyàìßï¸*Œ#oi¥fBÂbÙ»ï:‡„Û¶Í·C˜5k–cHøÆo$$ì@{Ä¿Š0õ– r¤ºŸŸS½ž·õçtºÈ O™2EæÏŸ/ï½÷ž ÇÅÅÉÖ­[#þø 2$¬ý5jÔ(ÉÈÈ0¿øâ óe¶ÚµkËÅ‹‘§Ô£Xbµd«uW4^"cÚ{ZdµVë`µw¬¶Ñjçxz@.€ÜØ2XdÞôC~аVn€X4}ºsH¸V­|;„‘#G:†„µº!á@ÍÅ÷ƒ~ ƒPí "GªûùÙŽ]ntÿ¼‡®A²CÂð,{óÍ7Ͳ·ß~;â¿ CÂN `ŽgÇŽzº÷ÁV«æ~ži(®Š°£­6Ïýæ.AAr kÈW—Íž=Û³L« ë²{î¹Gî¸ã1b„¹Ï–-[¤dÉ’Ò®];Y°`̘1Ãj5p›žžî¹¿½ž„?þøc™?¾ >\6mÚdnß°aƒ”(QBzôèaöÛ±cG‰‹‹ó Û꺺.]º˜Àî˜1c¤víÚŽ!ágžyÆÜßÛ7ß|cÖýä“O2}L¡¿+W®HÓ¦M¥fÍšù~/º_ÿ•µZ;qU*€‚BHrca‘ Ñùav!a±KCÂ5j8‡„µÊp>èܹ³cHøÙgŸ5ßà2]|«ßnµEt D¤ÿr?oÛ¬wòÝ‚d‡„wîÜi‚·ú%­âÅ‹› º—.]ò¬gj»wïîsÿ6mÚÈÕW_-.\ð,;|ø°ÙÆ Aƒ<ËZµjeî¿víZÇãÐíÔªUËóóéÓ§M(÷¹çžó,Ó ®V*ö>. "ëv‡ ⳽섄ýS¨Çãï7Þ0Û›:uj¾žCb·¶ZE¿ç((„„ 74¸º}(ý_}½û}ú@lJMIJr ÿãùrv˜Ä¿ù‡@bá? U„ Réóôx¯ŸZíIºÈ ÛMƒ°ýúõ“ãÇû¬gj½¿¨¥•sããã¥wïÞÛ½õÖ[¥qãÆæÿ—/_6€µº°þߟ}ûwÞ)S¦Lñ´5jȽ÷ÞëY¯téÒûÒÀpn+ ûù,Ôãñ6aÂ)V¬˜Œ=:_Ï_šûyäF«íár! @nL¯(²w,ýdˆeZÊ×9$œœœ/‡póÍ7;†„ÿüç?s~ì—â[Eø«-¡[ b•µš÷»¹VëD· Ù!áéÓ§›íùóç׳µßÿ½g™†kƒ}Kô•+WöYï¾ûîsܶ}{¥J•¤N:>;†–uÿJ¾á {?¦PÇÛĉM@xÒ¤Iùzî´‚°†ƒ›‰+, ‘‚0äÔÅS"ŸZo«R'Ñù0€X÷¿ÿëÖåùàºë®s Ë—elT€èb½Ãï¯Úpà@¦ë9j/\¸`±>úhÀú-Z´ºuëšÿk·D‰’à¸mûöÎúµ NžÊ×óvÑýÜ¡!á .c†0äÔéTWH8ùb~=‘m¯Ðb—V…s wÊŸš‡Z½Í)$Q€0äÔ­EV?H?ä /M¢Ä. ã¶ní;6Owýì³Ï:†„  »vÅî¤ìT€èö¤ÕZû-«gµWè™)®*Â[é Q€0¢Ö•+WäÛo¿• 6È™3gr¼iÓ¦IÛ¶måäÉ“t*²G«oL?äBÂb†q;wv ¿ñFžîú¡‡r kx8===fO U„ º µšÿ;ŒX]Þ!áþýûËwÞ)—/_öÙî¢E‹¤qãÆrôèQN0\Nîr…„3¨“ov$}=å®_?Ow[¬X1ÇðäÉ“cò4ü·øFž¦œ€h¤#ñ~ËÖ¹ŸÛ·Ò=È‚^#¬'®/ ½`5ýñz¡’pa«$<Éjÿ'®*Â}„/ä‹mÛ¶­Œ7.bñ矖 6ÈîÝ»åÒ¥KÙ¾ÿÅ‹Ís^˜6mšé¿“'O†e{:v¯ãé(  ¬Ö®]+Å‹—víÚ™AO ãj0WC$/¼ð‚YGSK”(!=zôÙ³gKÇŽ%..ÎS5xÛ¶mÒ«W/sŸ7ÞxÃTÞ³g\¹rEâããÍ€g0 ,0÷ûè£ÌÏvX÷¥ãaÆI‹-¤hÑ¢žÀ¯wHøã?6ÿ_²d‰Ïvï½÷ÞlW(F!—¶Ä>O$(ßìKHfÎt ÿú×ú©sžìòСCŽamK—.¹Sð©ø„+ZmW&D%»j°Ï[=÷²Yt2‘,®€¹ÎåBwÄ †kµèHœKãÕW_õ¼F/R¤ˆT­ZՌΙ3'*úVC·ÞãÇ‘dõêÕÒ¼ys3.­E1ô8u¼{óæÍÙz|wß}·¼ùæ›æç~ýú™íœ={6`ÝV­ZÉïÿûL·ç?3^V?g×çŸnã±cÇøÅ(  ¬´ ¯€½8Oœ8a%µÊ¯jÓ¦ÔªUËs»VÖðsÏ=çY¦Á`½V0Ëþ÷ÿ7èþ¿þúk³Î AƒÌÏö€¨äž;wÎ,Û´i“Y¦ûð^GMµÚB©R¥ä¡‡òlóðáæzÞĉ9ÁøEê$‘©eé‡üôíx‘Õè±mͱ^8†„u™×ë¦pÒœÂ+V””””˜;ÍÅ7$ÜW¨" Ñ*Åý\îÿ5}×1’îYê*®êÁc…в±h¸¸¾$v0ÂŽË O™2ÅÌÈöÞ{ï™ °Ž¹nÝùµÑ#9$¬ý9jÔ(ÉÈÈ0¿øâ ©R¥ŠÔ®]ÛTÅ;ï¼cfγÇ̳Þ±c‡9¿éééžeZàBgijgÛóûßî´¬´oß^ºuëÆ/=@!@Ha£ƒ¤nÙ²¥ÏrïA^]§dÉ’&L¬ƒÖv«Q£†©ÖkËiHxûöífgžyÆülî߿߳Žèê²·ÞzËg{µgÏžR¶lYÏ ªVx¨P¡‚ã -bØŽd‘y7ÒùICŸò6@ŒÓPnB‚s5áùóód—ÿøÇ?C‰‰‰1žnµbòK@X+®ãª€èý³ê~>Oõ[ÞÌjOÓ=ð£áâ ‘o¤;b–FBëY­S„—ÖñS›Žiê2ûŒt‘v2`Às¼¾ÍŠVã-]º´L›6ͳ,;!a§qrYUeþ¾ùæ3c`,~1 °áÓU„Í‘#GÌ`ãÀ}–{ò¦¥¥™ÿWªTIêÔ©ãÓî»ï>Ï}œ.¯\¹b¦uÓJÄÁhe½ßG}d~v ýñÇ3 /^¼ØüÛ§OSixݺ_¾ò¶mÛ6¹ë®»¤råÊrÍ5ט*²‡òÙÎâÖ¡C©^½º”+WNêׯ/Ë—/÷ܾf͹ýöÛ¥L™2Ò A3ÎêdÅŠrÛm·IùòåÍú«W¯ k5ä[n¹Åç~©©©æ1Ì™3dz,³ÇÊñhQ‹áÇK³fÍÌz7ÜpƒO¿8INN9tûþûï›YX¼…ÖǦˆuݺuëšÇ©ãßöcÖbÊ|Ûûv§mÜsÏ=¦ˆ‡>vo‹-’ÆËÑ£GÍÏ­[·–‡~˜_z€(ǧ«› .HÑ¢EB¼:íš=È«a­6ܹsçL·¬ºA“&M䪫®òTùõ7dÈs?[å$$¬ƒ£ZÙXDzeËÌm›7oæÃײv"kzÑùéÈBB ¯qîºË9$œœœ'»|饗CÂ;vŒŠ©‹Ãås¡Š06©âôjµDº^FZ-Îjóè ¸5WeéHáÖ¯.›={¶ùÙÕ€èwÜ!#FŒð¬¿eË3û[»vídÁ‚2cÆ ªÕÀmzzºÏ:þøãMXUõ›6m2·oذÁŒûöèÑÃìSß/ÄÅÅŒïêúº.]º˜Ðî˜1c¤víÚ!a)NïïM«ÛêzŸx}A2Øã õxæÎkÆ´G-K–,1áä;wík-*Ñ´iS¼ ERR’ Þz 5$¬Áí^½z™ußxã 3f¾gÏž€ñìÌ~vÚ†Ž‹ëÏúx½éLÚ‡ÞÇ©Anÿ01¢ Ÿ® ¬4Ä«‡vµ ?úè£>ƒ¼-[¶4S•éTkÁh…½æz›9s¦YþÎ;ïÜG¬µ*ƒnß–“°zñÅÍà°Êju À¼E¶½B?ä§£)®ð¹4ú@ìJMÕOûCƒçÉ.ûöíëÖÐVòŠí„*ÂPèþ¬ºŸÓSü–w/?GÁ²Q\_NWÀËh÷óÄÆ9;$¬áV Þ>ñÄfüU«èêø¬²Ç@»wïp-–põÕW›"¶Ã‡›m 4Èü¬ã¤zÿµk×:ƒn£V­ZžŸµÈƒ†rŸ{î9Ÿõ4¬«•ŠíãR:®«Ûֶ솄ýW¨ÇóÐCIBBBÈ}­A[ÝßÔ©SCZ_CÕ]»võYjHX9ÓÈNHØi'Ož”R¥J™Çî}¾‹+&'Nô,Ó¸ÞOg@ô"$ €°ÒJ:˜¨ƒŒ:øyÝu×ÉSO=eu°Z­_¿ÞpuŠjLÕiÏV®\)Ó¦MólGu"N-µ±M«BèmZB×ÓÁTêúúë¯7ÓÜÙÕ+TNCÂö€³¶>ø€‹@SËŠìK?ä';$|:•¾»ÎÓO”CÂ~<‡‹¾¦s ë´³Þ¯Ñ ³¥XEø3®Fˆz§Ä9$œ"Ά{ô•ŽV•Nrÿð¼,·Z ‰œjÂvHØn†Õ êñãÇ=ëØc ii¾_¾ÖʸñññÒ»wï€íÞzë­¦ ®V’Õê¿ZYØ©ª¬}ûwÞ)S¦Lñ4­M«Óz+]ºtÀ¾40œÛJÂÞ+;Ç£¡X»±VÝÍŒ¶Ð±o­: }\:Ž=Øï V={ö”²eËzfì{óÍ7¥B… >Ǥ}¦÷Û¸q#¿ôQŒ0ÂnéÒ¥òÀÈÝwß-ùË_LUaLÔÁI›êµ®µú°V©óöüóÏ›åz»NqgÓA^ø.S¦Œ¹MZµiáo¿ýÖg9 «fÍš™°³†˜ç3\aÕ´%ôE~"$ ./½änÓ&Ov×¼ysÇðÀc¦Ë[‰oá?Xm+W" ú¼>ÏoÙA÷ò…tOÌK¶ZY÷5ø{_"§š°ž>}º Òž?>``c ®õ¯âkÓ@måÊ•=ëÜwß}Žû·o¯T©’Ô©SǧyßGC˺ž5ßp„„½W¨ÇcÓ":¬cÌZ9ùÌ™3ëh˜X“&MÊÖ¹Ñí>öØc>Ëôg=¾S§ç&IJJ’N:y~Ϋ°VœÖeúx4(®}óøãûËÇì©P €èûòÔßÿþw3˜8sæÌ€Ût`xß¾}f Ò‰V.Ði¬ƒU¨ø÷¿ÿ-ëÖ­óT<§ ˜Š @à…»ÊV=I]©|•¾Ž0¨wßu ÿæ7y²»k¯½Ö1$jõ¬h·A|«kÇU…†ÆÏÆ;,תñïÓ=1MƒÁ~‡®@ZMøF«µ‚¯4m‡„8t`!á .˜ðë£>p ®nݺ&Ä[¢D IHHpܶ}{çÎ3=N1N¡K—.÷%$¼k×®B¡7-tÑ¿)R¤ˆ™ÏÛ¿þõ/s,}ôQ¶Ïʸ뮻|–%''›cö/x¡nºé&Ÿs‘W!a[×ÊÊmÚ´‘eË–™Û7oÞìs,/¿ü²Y®ç Ñ‹0ÂJ§M›fª5è`ì¢E‹¤aÆfYœ£…VCÖP­x Hä «^:G_ä' k¿Ÿ`ŠC1nìXçpÕªy²;Ø)$üé§ŸÆDww߀ðVKã*€B£†8‡„›Xíiº'¦ ¶ZE«1¿23ÏýqzGnBÂJÇoëׯï³ì§Ÿ~’råÊyŠ(è,nzÿíÛ·;n_o/^¼¸;v,Óc­R¥Šù"¢·+V„„í€jzzºùYC­÷ß¿Y6nܸ,W¨Çã¯uëÖ&ØkÓíjEâŽ;æèÜôêÕËg{jòäÉž*¾Þ´²°Îž7bÄϲ &˜u7lØô1gõ³Ó6Ô‹/¾hª'·jÕJ5jpìÝ»w—o¼‘_t€(GHa5cÆ 3…š:ꀦþ«Õ&Ö¯_Uãî»ï–ÄÄÄ Žãv™@?ä7;$|4…¾ë/¸œCÂÚŽ ë®Î;çÖ6wîÜBßÕÛ¬VZ|C“¹ PÑwvNµñ{Y­Ý³ô AZEx$]èsE5«*ÀcÈmHxΜ9æ¶¡C‡Ê?þ(GŽ‘nݺ™ê¹Z½W­^½ÚTÙÕ@ñªU«dÏž=&¬«_¥ã¿8ÕêÃS§N•ŒŒ Y¹r¥)(áMƒ©º/ Ýj‰×_]n¾ùf³lÈ!žõtºlðàÁf½N:IãÆC ‡z<Æ “ñãÇ›0±VÒÕ@ð½÷Þë¹}РAfûZeX+{7;Àœ™ùó盪ÆÚ¯¶ŸþÙ¥kÖ¬iúòâÅ‹f[½{÷–’%KÊ¡C‡<ëê¹ÐÇѧOSÑW×ÍnHØiê›o¾ñ¼¿ûàƒ|Ž[ÇÅÿû¿ÿÛô¢!a„ ¦¦¦šN˜ŽÆ ­Ê2‚Úð˜È²vôC~#$ .:ÓAÅŠÎ!á™3Ãû'oÆ !᯾úªÐwõýXExW * ­6Ôa¹.K¤{bÖ+âª"ÌüA…¾>Œ·ZŸ<†Ü†„Õĉ¥råÊž×ûZ@aÙ²e>ë,X°@ªW¯îY§Zµj>¡[•M«æÚ·—/_^úöíë³Ó§O›ŠÀ8Öu´‚íwß}PIXÇ”µŠ±†fµiEÞmÛ¶™õ4 Êã åxúõëg–Û·kõ܃znïÚµkÐ÷Dþ•yh W«40ÀgùÆ¥^½zf;ÅŠ3ÿV­ZUþùÏlãùçŸ÷£éÈnHØi¶fÍš™¢¢ö¦Õ‡+T¨`ƈn„„ »4 ¬Aaä¯3 €Ò°Nùê~ë­°îJƒN†W¬XQvìØQ¨»y·Vþ³Õ.r@¡’$Î!áYîçþStQÌÑs^1Èu3Úýœ±¤<–}ûöÉñãÇ3]gÿþý™VÑÕûëv2+¡¡Ô´´´,çĉ&XœY]ôâüùóyÒ§›6m2Agÿ/Zê~µ/—/_n*6g¶ÿ³gÏšc¼|ùrŽÃi 40aloZõø×¿þµ|üñÇür„„ »f'ˆìH¦ ‚†„΢Ä6 ·ní<8¬»=z´cH8!!ÁT¾*Ì߀p)¡€/ ;ýõÜá~þßJÅœI⪠{®@6õ¶ZYž7ĬY³ª ´¥K—š÷wZqÙÛÿýßÿIr2cŸ…!aøºü³È;iájÛEÒ‹ü´[ä“T z5¨úíxú¢ Ð÷ ²k—H—.Î!á‡ë®ènÑ¢E¡®$¼ÏjåÄ7$¬ÓŽSE ŸÅìó§ïàã¬6.Š9­­Ö•n@èóF «%ZmÝ?ýôSDÏÝwß-‰‰‰–Ož<ÉÉ(D À—[5„GË›6¿žÈª®"û§‹\!f•2v¸ÎåñUôEA $ ":­ïþàþýïú«‡~Ø1$ܵk×Bî.¾ájVÛÆ•…Roq «†âú’bGª¸ÂáÌ€œÊ°Z3«Õ°Ú.ºÿÖ2@0@ $ _TλJÂGSDþ3ZdE'‘)ñ"³jˆì~Ÿ ÃÑæÐ‰ìÖ7 ÆìB ÞyÇ9$\³fXwsÛm·9†„}ôQ¹x±pÆgŠo@XÃk¸â Ðjµ¤Ln«AÅ”DqÇܺè~ÑÊÔú…ƒ=t €BH(H?§‹|ÑZä³8W•aD¾-ƒE>oF? kÀbÝ'Ÿ8‡„+Tënêׯï~饗 e·jÕ·ªâîaµt®8(´ôÝE°wxóÜ 2覘°Õ}¾7Òóu¥Ï1îcµUt €|FHˆ[_ùÔzyþïwè‹H·¢“Èê釂¢!áíCéøüsç°¶sç¶›5j8†„_ýõBÙ­‹o@XÃó¹Ú Poµ„ ·¥»ÿ,¡›bÂ`÷µp‘®@Xhµ®VÓ¹©Êºÿ¯£€úe ï¶Úb«m·ÚN­µŸy (P„„€H±û}WPx×Hú"’-hè u£`—õ냇„×­ ÛnJ•*å~÷Ýw e·Vß°~-(« µñ<$lÿmàë¼Á]¾|YÚ¶m+ãÆ‹úÇ’hµ§9¥Èc§¬6Éj½­ÖÂáõ'VÛN~õ !a ’hPø³8‘Cóè‹Htå¢ëü¤N¢/ ÊÜDB 6n)[Ö9$mB¹Ï=÷œg™uµR±÷qiY·;dÈŸíe'$ìÿ˜B=žpÑx=~…!a ’mê ŸÏ /"Á”x‘]#釂¤aª9€Ë;ï8‡„kÖ ËæµªŸSHø¾ûî“]»vŠ.Ô Ö‹‰oHø)«1Ä}þOÉäv­4«q×´<Ø·¶›aûõë'Ç÷YÏÔ¦¥ýrW®\‘øøxéÝ;ð‹”·Þz«4nÜØüÿòå˦°VÖÿû³o¿óÎ;eÊ”)žV£F ¹÷Þ{=ë•.]:`_Îm%aïǔ㠗¼¬ @A#$ D2 ÿ³ ÁÔHpæ È§Ö[¨ã«è‹‚¤!a­è ùðCçð…gȯY³fŽ!a­0ì=}y4Ó¿(þU„×re@ÌÑ(ëÂLn?ç^gzìÛ OŸ>Ý„hÏŸ?︞¨ýþûï=Ë4\ëTÅWi˜¶råÊ>ëé}œØ·WªTIêÔ©ãÓìûhhY×ñ¯äް÷c õxÂ%Ý}nçñk(¤ ‘îßïˆÌN¹r‘¾(Hg¹B—Îщ0übÊ”à!á½{s½ùºuë:†„yä‘BÑ}‡¬VZ|CÂÏ U„ Yï¸e|ëè»>y°o;$|àÀL×s Ô^¸pAŠ+&>úhÀú-Z´0Ë•yK”(! ŽÛ¶oïܹsÐýŸçª€˜¤ïôÆf±Î;V«aµp}77!aÕ°aC©_¿¾Ï²Ÿ~úIÊ•+gªÿÛZ¶liî¿}ûvÇíëíÅ‹—cÇŽ=†*UªÈµ×^ë³lÅŠŽ!á—_~Ù,·g¸|ù²ÜÿýfÙ¸qã2}L¡O8ô¶Zk~…!a ¬è”çÁHý@R?œÔJC·Þz«ù /\ôÃÀ¶mÛz>ŒJZÁvõƒ\‹mûP‘…MèP7 ¿ûn®7_ªT)Çð¨Q£¢¾ë´Zà5â¾Ûj©\U“šY-9‹uöXMë⦄yß¹ Ï™3Ç,:t¨üøãräÈéÖ­›©â«•{m«W¯–"EŠ˜PñªU«dÏž=æ=ºýÞýúõR´hQSxêÔ©’‘‘!+W®”iÓ¦y¶ñâ‹/š}uìØQ-Z$¯¿þºÜ|óÍfÙ!C|ŽK÷g¹H×íÔ©“4nÜ8äp(Ç5B8÷D3Bˆ:öhþ­lÙ²æöÌ>dŠZÇW‰|j½|?¹+Ïvqß}÷™ìôûɓ'ËÎ;ÃÖ—Á¦ªs5¿ž«š0 –†„©è .[·ŠÔ¨áþÓŸrµi­úçôzKÛØ±c£¾ë†I`aæl€Ø¥_ÉÂzúuÅǼï܆„Õĉ¥råÊž¿Õ‰‰‰²lÙ²€õ,X Õ«W÷¬W­Z5ŸÐmJJŠ\ýõžÛË—//}ûöõÜ~úôiS XÃÆz{£Fä»ï¾s|¿åÊSɸdÉ’¦õêÕK¶mÛfÖýä“OBÈêxrýRÊý`¿€BŒ0"ÚŽ;Ìföô”ÊþíÓO?5zÙÍ®~³dÉéß¿¿ùð*/ö_`æÝ(²%o¦÷þùçŸMÈzĈ>ËÃÕ—ÁBÂá\š5kfŽã†nðÜlÿæ§=® jÚ’°nvîܹòÛßþÖ<ÎZµj™Ç©áèÌúò‡~ääds¿›nº) \ì}þõ¯^½Ú1$Ží»¾Âj«uÜ ò‹ v¿OHlZÁ¯woçðäjÓúwØ) /7nŒênk.¾ájVû†« bš„{…¸®VnB—E½î×ëè Q@ǰ۶m+ãÆ£3m„„vk×®•âÅ‹K»vídÑ¢E&ài‡Píè† ¤D‰Ò£G™={¶tìØQâââ|*önÛ¶Mzõêeî÷Æo˜àêž={² ¿ýöÛæöï¿ÿÞçç{î¹Gî¸ã1b„8pÀܦÙ¢E‹ÊèÑ£eÉ’%òÞ{ïÉÎ;3Ýšw£ÈÆ'úÉÝ»wËСCÍãìÝ»·yœ›7oδ/õ¼ipzذaÒ¢E Ó‡G5ëlÚ´IJ–,)]ºt1Áo­DX»vmÇpN¶Êõv‹[ˆlÌ/w$øv¼È¬ôØ´b°SH¸M›\mvÈ!Ž!á5jüë¡\˜(U„»IäNÈúN²uˆë.qÿý˜G·E5­ ¬_?½HW1ÁOÖV¤HSDBÇçÌ™Çõ³´ @@ØÝyç&|öìYϲ'N˜L œ¨6mÚ˜ªµ¶Ó§O›ðsÏ=ç³- ¬êý¼ÃÃö n«V­¤C‡ž–ššjn<íÞ½{À±>ôÐC’¼*©Óþ ÔÎá"SËŠ\:ÖÍ~ýõ׿qþýï÷Y¬/›7o.çιŽACÁºÌ®>¬ïk®¹Æ ^ÛÒÓÓ}În¶ÊõVO‰L¯(’Ê„²ACŸòV<ÞxÃ9$ܨQ®6ûä“O:†„uö…h®$¬Ñiï€p¼ÕÆp@Ìjµ¤l¬¯óÌh5a¦ÑIGª¸Ï;€ÐíØ±ÃŒËê8_´±Ç“§L™bfŠÓBÖñè­[·Füñ@nðÉ*ÂJ§>ÓgË–-}–{dê:ZiVÞ:0k7­Lwï½÷úÜ/³ðÿøGyúé§=íÈ‘#æö`ÁÓ4’ÛÏĉ=U†µr°¿ˆ Ÿ9(òYœÈ‘…aÝlvCÂû÷ï÷¬“‘‘a–½õÖ[æçÒ¥K›ŠÄÁÎn¶ÊõvÇW¹B©?§ó  4¬MH~ñá‡Î!á_ÿ:W›Õ/W9…„õ‹YÑð!º“åV+&¾!áß[í Wļ‘V«—õµŠ°V¦O×E¥÷Ýç×@p:7yòdŸe‘2Nª3›è,uÙa'۳˩7ß|Ó,ÓñÈHGH¹Á'«+ êê€åÀ}–{djXWÿ_©R%©S§ŽO»ï¾û|î—YHø»ï¾s<†`ÁSûg|ð”*UJŠ-*ƒ ’3gÎdºÿ7¿žÈæ§ÃºÉ솄½ûòÇô„x?nþï_:»!á`Ûåú »íCEæ&òË)Ò–o':‡„µËùÌíÛ·w ë´‚X4Ò@ðùµ·¸‚â û&dó>}¬VÖj龨¢¯ŽjX­7]5{öl©W¯žT©Rųl„ R³fMóž nݺҨQ5küC€IDAT#S‘·ÿþ¦„†Š½-Z´H7n,G5÷ÕõuÜpÀ€f;:ÃÜСCåÊ•+>÷[³fÜ~ûíR¦LiР,^¼8àø¾üòKS¸S§N!¿7q /\¸Ð,6l˜ç1êqêØuŸ>}L¥áuëÖyÖ×wÝu—T®\ÙÌ¢Ö­[79tèÏ~tŒU¿XY½zu)W®œÔ¯__–/_ž­Ç§V¬X!·Ýv›”/_Þ¬¿zõꀱO­†|Ë-·øÜOgÚÓÇ0gΟsìq…z<ˆn|² €°ºpá‚ Û¶iÓÆgùÅ‹=™èÔj°;wÎr{ùV:`­ƒÚEŠ‘§žz*Óý¸É"Ó+Zz*l› WHøäÉ“æÿ]ºtñÙN¸B¡\_a· ¡ÈÆ'ùåŽGS €·E‹‚‡„³Y]Ë[³fÍCÂ:{ÃÁƒÑWwï¨Õʉo@¸±Õ¶r,Z+³J6ïsÑj¬f½;—±VÓXÕv«í¤EdÓ0÷;Vkï>g©\öB? ç¶Â¹?„‡D›6m*eË–•W^yÅŒÉÙ4 Û«W/sÎÞxã 3fª}?þøc³lÉ’%>ÛÒÙâî¸ãŸsݱcGiÕª• å&&&úÌL¦´:°Ž÷èÑÕu} ;Ë~óÍ7&¤[¬X1³¾KfœBÂz]¦ûò>NqN}Ĉžõ·lÙbfÆk×®,X°@f̘aBµ¸MOO÷YGÂÚ/¢>|¸lÚ´)[O××íèøªž“1cÆHíÚµÆ>Ÿyæsÿ~Ñõ>ùä“€ß5ÿÇ•þ@tã“U„]“&ML• Þ* ˆ>úè£>™-[¶”âŋ˱cÇ2Ý–V:ÐûyO!—!a[ëÖ­åúë¯ÏtÿîÌA‘ÏâDÎ Û&ÃVZeäÚk¯õÙŽV¿GH8Ôë+¬}­Ô´%übG BÂàK+g Ï›ãÍÚÚû·Áƒ›/çD›ÁXEx$WÀ-Erö™þEÔw¡¥þÎÐ"·ýÕÒ¹ìhÈS¿@úôé°oK«½êxž¦ ÷þ;ZM6))IâããÍ,kZñ׉S1- 3´=ôÐCže‡6á݉:ë‰ü2Þ÷úë¯ÿòüi½§¸îºëÌ8¢]MX‹h…a›^ZõŸ±ÌÛW_}e*÷êz}ûö ú…F{> ëj¥bû¸”þî趇 âY–ݰÿãÊI :ñÉ*ÂN«)è@°wíÚÕ øju^ŒÔYµ~ýzS¶E‹2uêTÉÈÈ•+WÊ´iÓ|¶uäȳžN…¦ƒÎ:€ΰV®?~¼ +oÞ¼Y*Uªd*]d¶ÿˆðy3‘5½Â¶¹p†„_|ñEOuZP?¸ù曲sºýP®¯°Ùý¾«jó¥sübG ;$|å"}jëV‘jÕœCÂãÆåx³:…®SHX«†Eý‹Q]|ÃAZ-r&WÀ-Åý÷!§ïü´Ö&•„#¿’ðp«Y¯š$ÞýZ`c^«—/_–É“'GÝqGÊL]Zm6¢ 0­|{÷Ýw› «~ÿСC9:={ö4Õ‡íÀ÷›o¾)*T³gÏšŸƒÍjhU—ëø«^ÛZ=÷Î;ï”)S¦xZ5|ÆjƒÑ`®ÞW·¡³Ÿø¦°Ç“í¦aØ~ýúù¢íãLKK󹯆˜5@Ý»wï€ýÞzë­Ò¸qcÏñkeaý¿Óïn¨¯téÒûrš¥-»!aïÇ•Ûþ@t!$ €<±téRyàÌ@ó_þòSõU#uPÒ–’’bªöÚƒ³ZV+>ø{þùçÍmºŽNåΰÛÛÖupÚ¿â„ÿþ#ÂÎá"³¶¹p†„õûï¿_Š)b–7jÔÈœ«pUõú ‹eíÂÆFü°Õ>J_€Ú¸Q¤^=çp.¾<£_Èq ëÔ´ÑæM ¬ ø¸ÕNqõÜv¸ÿ>ð.#^:¹Ïõíâ §EѱϞ=ÛzÙWÏT^õ§3aéø‹  5kÖ4B‡ê©Ò꽞†õ ñh\·nÏmúE~ïŸOœ8a¾^»vm³û þ£G–úõë›(Þ{ï=ÇãÑméÿõxôµdݺuÍòùóçû¬óä“Ošq:×´iSOøT+Þjå×2eÊHƒ LEXo|>|¸4kÖ̬sà 7xŸúòË/M¨²S§N¦ºq,Ó¯ŽÃjhmÛ¶-Ëû ëyÐå“&M2×[:uäñÇ÷ÜllVÇút¹ŽKê5©ÿ×zïvß}÷eylº_½^ôšÖ/<~øá‡>·ÛãÉÓ§O7AÚóçÏl#ØqÚÇæ_ü@i V÷g¯ìXC}|ú;¬ëùWó GHØûqå¶¿]  _høTgÎ ¬Ù¦ƒŸûöíóùП\§¦¦:VbÈ-ݯnÛip8?öŸ#ÇW¹‚’˜ŒPú!傸¾rìœuìSâEÍã8’h8˜0üB+ ·ní~øámR§àu k3fLÔuÑõâ.kµm\9/©î¿{芘ÐÐjZ-ÑjÖ«(‰ôyj4€©AY­ÔúÊ+¯˜/Sû³C€:«S«V­ÌÌYÞõÿÒµ½Þ=÷Ü#wÜq‡ùØ|nóÿ"·†w[¶l)£F’›nºIÊ•+gfÒ®Þ_¿ÀíõÞ–†O{õê噕Bƒ¦ZÑ×{±cÇšÿïÞ½Ûçqi•S}LJ+—(QBzôèaÓº\’Þû;w®™LÌK–,1áe}mëMC”ݺu3_ŠÓmé±Ä2}üZ XûòÁ 8Þ‚…„u¼T+жiÓF–-[fÖÑÛœ®oöld:{›†`õüvîÜ9ÛaáÂ…f3-òðÚk¯™íù³CÂöõî$Øq^¸pÁ\/ZmÙŸÎ’§áwûøœ‹:„úøôØõºtépÿPB»ví )$œ›þ@ô!$ €°Ób­*¢Qp\´h‘4lØÐ ’ê *ÂdV ‘m¯p}åÕõµk¤ÈŒj"—Îq­EBÂà+5Uç÷u çð_ W kÕ·¨z¹$U„ÛKtU ä½t÷߈UtEL°ÞíKE«m²Z¼ÕÞÐãÔª¹III/ƒ 2_²Æjx×vñâE¹îºëLåaû‹ùöz:“V°mø‡„58jiþ³Ï>3Ëtæ‡~0ËþóŸÿ˜e:ÓS°m9…K½×Ñ/š—,YRþô§?y½ÌM5³Ti XiU«#{†NŸ6I=ôPЦ¿¯¾úJ:tè`¶¡uýg‹5ZÍW+Èj<òÈ#¦ ƒ?­þ¬çLÛþ4ð«m ©k…h§kËÿÖë[Ãæ6 £/^\Ž;Ò1¯X±Â„tK—.mªüjÕë`rVzÍkålo?ýô“ ÍkÈÚ>~½ÿöíÛ·êãÓßÙk¯½6à±ú‡„_~ùe³,==Ýü¬¿§:»›.7n\–+»ý €èEHa§S»•*UÊ >êÔ~öt‚ëׯ§sÂióÓ"³D®\äúÊ‹ëkn¢«Y €¯S§D´¢•SHøw¿ËÑ&GŽ4$¼víÚ¨êž6žÎUp #R膘 QÐ8÷ù*®Y")ºeËSWÃ{Z¹ôСCYÞ'XPÃÀºüÈ‘#>ë9Íü,$ìì´«Äþë_ÿò,Ó ¤@9»!a¥•Sk×®í¹}èСò«_ýÊ„5ü¨!b­,'NôTJÖ Æ¡Ð×·º]ÝþÓO?óÉM›6IûöíM•ÙøÜ¦×‘ûôéc*Þê¹±i…fû=Ã|àxm5oÞÜlÿÌ™3¦Ú³†À½Ã¬:¶§Û×àïÔ©SMx|åÊ•¦X€·Ã‡KÛ¶mÍ98p =z4ËÇ•Ûðœ9sÌmz]j5oí ­H­¡j­Þ«V¯^m“ŠW­Zeª4ëãÓ€ovŸ]aY«ekqýÝÒJɺLÃÐ6ÝŸ.‹9²ë+Ü×—ö©QµYìð‰ôØžyÆ9$\¯^Ž6÷ÒK/ oÜ=Ï¿ ))¾áÛ$²B@€È¡eù"IìhhµÁV»èþ§9®³gÏšª¶û¬¹MCÍz[¥J•¤N:>M«ßzÓ€ª~¹\ÃZY©™Ñ}éÒ«V­*•+W–?ü_qP[·n°üù矗òåË›ó¡ýæM¯Yí{ ›:][£F’ *˜ÿk…ìäää€í§¤¤Èõ×_ïyÿ¡ûÒß oË—/7Ë2 üúËmHXi]¯ûØÍï„7ýݨ^½ºgjÕªù„nCy|Z%[+kàX×ÑÊÌß}÷]@%a½vµŠ±†¥µõêÕË'vÓ?¸˜””$7ÜpCÀzùž0a‚ùyÆ ™K¿~ýL¥ÖnݺIÓ¦M}ޝeË–R¼xq9vìXÈý§•pµJª¿+VH‹-¤téÒ2dȲDî,]ºÔœO­L›Õµ ¢Ýª®®Ê·È= [O-+²e0}©®\t…„Í£/À¶t©sHXÛÞìÇb{÷îíÖ ÅŽ;¢¢Kž–À* U„Á5WP±á”Õâ­æýÎRçijæ¾-ÒlÚ´IÚ·ooªé0 àv;„Ù¼ys³î™3gdôèѦ’î¸qãÖËïð‘#G¤hÑ¢Ò§OS­÷âÅ‹ŽÛ_¹r¥çµ§¿·õë×›mèkÒ©S§š*«ºþ´iÓ<ë 6LÆo‚Ä›7o–J•*ɽ÷Þë¹ýðáÃÒ¶m[)Y²¤ 8ÐTFxÜ}÷Ý’˜˜èX‰–0P°  ÐåŸE~ÜI GËØ.’¶Xä§Ý"§Só¦_%2¥´Èò"ÿ~ÇU]˜¾Ïþ9Ú3ZdF5WàúÒ9ž"™†„¿O?€mÛ¶à!á™3³½¹Ž;:†„;uê5!á߈o@XC@ë¸R™Ð€hoº!¦h Ø;®U„«X­«Dî‹V¯^mªãú³C˜£F’ *˜ÿÇÇÇKrr²ãzùVÏ?ÿ¼”/_Þ,Ÿ1c†ã:0­U«–”*UJ~üñÇ€cÔ*µZØ~}ªÛëÛ·¯çv­DlïCÿíÞ½»<øK}èåË—›õ8À/@˜¥§§›¸ ­k•k§1€¼GH48©!<-–ÚgÅ\„Ïgðé €¯ÔT‘øxçðÈ‘ÙÞœNíìîÕ«—µ«ÔˆïŽO¬'¾!á»ä—éÄpÒN\áPÄC(ÉoÙ*«•µÚ“]3xn/]º${÷î•óçÏGÜqž={Ö¼ž¼|ùr®¶£Ó}ûö9†Nu™î#?BÂD%áèª$|äs‘©ZIø‘]ïRI8§çèSLF BÂàKƒ»‰‰Î!á×^Ëöæ~ó›ß8†„}ôQ35t¤ûñ kûW ZE8‰nˆ)ÓÅöu3Ù½¼DOP8³ Á€ØFHˆvK“DVt¹r‘¾@l $ ¾4$Ü¢…sHxàÀlo®zõêŽ!á9ØV~['U„o²Ú.®@´rl3º!¶^B¹_+lt¸Íw°ÚÁ(x,„„Á¢Ù‘…"ŸÅ¹* ±‚0øÒp§NÎ!áž=³½¹bÅŠ9†„ÿô§?E|WhHÿ*ÂÏKtM(C­–@7Äœ*Vä¶UV«á^gz„?Ž3gÎÈñãÇåÊ•+œÔBLë©î¶Ûj‹­¶Ýj;i´k?óë Q ÑlAC‘eíèÄ–ÕDþ3š~ÛÁƒ"ýú9‡„Û¶ÍÖ¦öîÝëÖöî»ïFt7dXÍú Ꮇڮ@ÞW ±¥žÕËäöt«uu¿®ÐªÂ{è2„ùõ«Î„1ÉjÉVëã¾Î´ªy‚Ãk[-ZÚN~½" !a Z¥¯sUTM[B_ ¶ÌNÙ>”~oÏ>ënÚ4[›ùüóσ†„'L˜Ñ]0P?œŽ–)Âo’ð¡Y,êeµ&!¬7Ͻž^#úUíɼÆ@ì×ôºKðzͪaàîåƒÅï¾ÎR¼š†ÔS…JÂ4*  {ï¢Õ†ÇDæ×¹ÂÚˆ1„„ ЈÎ!ánÈÖf>üðà!a G*}5”(!á1\€-qÿíàvlyG\3„zÞŠëKH­'®Š¯Z‰x¬¸‚Ä[…ðf¬·íîó¯ÿOWØ··¸*•ësŒ†ƒ´ÚHqUÎà×@#$ D£KçDþYEdçpú±gACBÂàoÜ8çpÕªÙÚÌØ±cƒ†„,X±ÿ¯Öj[¹2!Jqÿý :ll±Ãá;²y¿‹îû¾`µNV»Q\¡áÿ¢Ñüš†ƒ»Š+,œÊ¯€@HˆF‡æ‰|j½œ?ÃÇ—ˆAK“ €¿É“CÂÿ•½á¿×_Ý1 /)))ûðï”À@Æs\€lØèþû‘JWÄ”t÷yŸ¦íiUX* SIx±û:8ǯ€@HˆF[‹Ì¯G? 6iHxë ôxûüóà!á;CÞÌSO=å®Q£†lÝ™uyS¬VZ|Â:mø® @6¤ºÿ†¬£+bŽVzL7 )BÂ@4š›(²ùiú±ICÂëzÓàmË–à!áéÓCÞL=C‰‰‰²qãÆˆ|è}%°Špw«âªdÃ)÷ß¾d{:X­Ý(¤ Ñæ‡­"ŸZ/åÓ©o„EH¥¦ŠÄÅ9‡„ÇŒ y3÷ÜscH¸E‹YIX]WK`Hx>W ¬¿¤2žnˆ9ïX­ Ý(¤ ÑfÃc"ón¹r‘¾@l"$ 4$œà~ùå7Ó´iSÇp×®]eÇŽ÷°GI`@¸©ÕrEr †ÕÞ§bÎF÷kˆ4ºP¢Í?«ˆìN? v€@nÖÌ9$üØc!o¦qãÆŽ!áûï¿ßÚEjÄ=ì–~«C VJ7Ä™@«HÏ£+…!a š_%ò©õ2>c}ص¬Èêéð¦ÞœCÂøCÈ›©S§ŽcH¸gÏžòÿÙ»è¨ê»ÿãa—E‹²•EÐ"‚,ÂxØŠP¢ DEQAzØÄ>ð T­Kã|TÄPe ¤@ v " 6 1€‘|ÿ÷ûKfš™¹w2! 3“÷ëœß¹÷w—ùýîd&™Ï|'===¨îò É ôä ëW…ÍÕ¸J­¬öÃP*5·Ú3  B‰VO]ÙŠq­& ø£GEFŽ´ ÷èðnj×®mŽŽŽº»)¾U„Ç[-“«p•zæ>¿ ô’;ÿ„BÂIÓ¦M3•ï¿ÿ¾ôÜéì,‘¥5DöÇp t#$ öƳ · üFeË–µ ëk¯`rHrª{‡„×s A¿¯„ héôNîk  !a½¤¤$LIKKs/+©°Ý±¯™cŸ‹|b½„?—ÌEÒ0Ø›5Ë>$Ü A@›ïÛ·Ï6 ¬í¥—^ ª»:S|½¬–ÆU(„'­Æo¥ÓŽÜש  Ì@Ð{ï½÷L8åàÁƒîe%¶;ö5³aÁH@{11ö!ánhóÄÄDÇpLLð|“A–ÕZŠoHø ®@!M·Z†¡TúÙjå¬6Ÿ¡„BÂ(66l;ï¼SªW¯nþÝ´i“´k×NÞ~ûm~ºü®»î’*UªH›6mdÍš5îu±±±Ò¨Q#NiÙ²¥Ù~åÊ•ù†„wïÞ-ãÇ—N:IÍš5å„„Ÿ~W®\‘—_~Y:wîlŽË-·È–-[üûšÈLYRUäðR.,`k4!a°óñÇö!á²eÚ|Á‚Ž!á¥Kƒç5ˆž‰w@¸®ÕþÉ(¤×¬Öa(µúZí†f  XlÞ¼YÊ—//}ûö•Õ«WËüùóåÖ[o5!“)S¦¸ûmß¾]*T¨ Ç—eË–ÉÀ¥\¹rîʽöŒŒ4ÛÍš5ËTöMNNÎ7$<{öl0`€¼ûî»/·Ýv›´nÝڧߊ+$""BæÎ+k×®•7ÞxÃ|Õ¶¿c_{¦‹,­!’õ3 ‡Umð¦f² k;p ßÍõõ“SHøoû[ÐÜÍâ)9(ŒùV«Ä0”Z¬ÆÇQá†0ŠE÷îÝMø÷üùóîe§OŸ6!“É“'»—õêÕK7n쾑‘aBÂ'Nt/Óp®nç «üBÂÞ4,ì½õÈ#H“&M·³;v‰ËΉ¯+²k  4$¼¬ ãÞÖ¯w ÇÆæ»ùÔ©SCÂ[·n Š»xÌjÕÄ7$üwfPþ"¼qVš}ž;ÿ|ðNø[ŠÜ•+WL@¸k×®Ë/_¾ìQIXûU¬XÑŠ/^ìn 64U€] ÎÊÊ’£GJLLŒé¯Žór}­ö}÷Ýg*{ Šð±ÏE–9—ÌÅ(BÂ`ïË/C¯¿žïæ#GŽ´ ×­[WvìØwqœø„Û[-…Ùµ¹Ï-™ E©”–;ÿ  Œ@‘;~ü¸ ”Œ;Öc¹wH855ÕÜ®Y³¦4kÖÌ£ <ؽÝÕ„„Oœ8!?ü°TªTIêׯ/­[·6ý7mÚäÓW¿Z»råÊ!ãÇ—_~ùÅï±KÜß;‹lŠäÂ\ €½-[œCÂy¾ÉÁÉ!ClC­Zµ’¤¤¤ ¸‹7‹oHx†Õ²˜}@Ø‘ûÜ’ÂP”Z­¬Æ÷8 !a¹K—.™Àm¯^½<–kUß¼!a kÅáûï¿ßïþ®&$ܾ}{¹ñÆåÀæö²eËl+ »h¨x̘1R¦L7nœßc—¨”¿ˆ|b½lÿià²?†0ØÑj¿µkÛ‡„<ßÍûöíkîÖ­[P„„X­œx„+Ym;3(ª_ÁsŸ_v0¥Ö3VëÌ0Â!a‹:HõêÕMøVi xôèÑ!aÕµkW)_¾¼œräˆY÷ÒK/¹—¹BÂ7nô{Þ={ö”›o¾Ùï±KÔª¶"ÛŸä‚òún>!a°£!áV­ìCÂC†ä»ù½÷ÞkÖðpJJÊ5¿{ˆoa½W?3ó€"òsîóËZ†¢Ôú\r>””ÎPÂ!a‹U«VIÙ²e¥råÊæ««›6mj*ôjÐD¾.Û¶m3U‡»té"K–,‘ôôtùꫯ$..ÎÝçøñã¦Ott´œ={ÖT$v…„.\( Mû׫WO:vì(»ví2çÒ¦MÓΜ9ç9cÆ ™?¾ )óÍ7R³fM0`€ßc—˜ïˆ,©*’‘Âä¥!áøºŒxÓp·nö!á|¾¹AµmÛÖ6$uÍCÂû¬VM|CÂ2ë€"¦Ñ÷†R+=÷XÊPAMÿvÜ»woó÷Zþ@±Y·n<øàƒÒ¯_?yóÍ7MUa š¼úê«ý4Ø«Õ{]A­@ü¸×WbOš4É,×õñññî°]Ó?ôÑG&(¬·[´h![·n5Aä2eʘ`±ËO<áÞ¯þûÐCÉÑ£Gý»Dür4'¹g:àMCŸðë,øØ²E¬^ö!áÞ½óݼAƒ¶¯­yäŸ×G%m²ø„[Xm#³(bú%ü&^ºu¶Ú3 ÔôïËú»Ê?þÈ9ùà]U” îêJ?ýôSÛõ§N’C‡Ivv¶íúóçÏ›*vW®\ èx—/_–#Gޏoëvº½÷þõ¶.¿xñ¢ã¾ zìBûGO‘ÍE²ømÀÇÑÏ €íÏÇ£"C‡Ú‡„Û¶ÍwóúõëÛ†„G]²ß¦`£•ø†„Ÿ²Z³(†çœç†RmŠä| @pHJJ2#ÒÒÒÜË‚1»víZ3fŒddd0i*¼« €bqðàASÑ755Õ„uW¯^m¾ÂºI“&réÒ%ÈŸý1" ˉ¤ma,;' €“gž± ßpC¾›–-[Ö6$ü?ÿó?×ô.}&9_ûí^ËlŠAO«E2 ¥Ú–Ü×) Eé‡ë{÷î-óæÍ ©óÖÄéß.‹‹þTÇåìÙ³E²¿M›6ÉO?ýTj®«÷Þ{Ïü^¢ov¡j/8ÞU@±ˆ—Ê•+›?ÖV©RÅüÛ²eKÙ¶mƒãOêÚœ€ðwó À !apö ö!á²eýnvìØ1Û€°¶©S§^Ó»4T|ÂÝ­v”Ù ÷dJµL«Õ¶ÚÜkpl­–êz V¦L©S§ŽtéÒE–/_c§…ôܧL™2ó­çܯ_?ùãÿè^öÄO˜û¡ß,æ­GòÛßþÖï>½¬ùÝ.¨¿ÿýïrë­·ÊÉ“'Ãþñ+5rÿm¹]»v²råJ÷juá™3gšñ¸ýöÛeþüùÛj-bmO[¶ü§(ÃîÝ»¥OŸ>R«V-iР :Ôü^dž "#åÙgŸõ8ý½H÷—wÜuíÛ·7sé:^zzºÇñ5ÐítŽ.6l;ï¼SªW¯nþÕ ¸nûöÛoóC…Æ»ª(6ÙÙÙ’’’"‰‰‰räÈs~h@ø¯µEvN`,\!ál¾d|¼öš}HX[žÊ[ÞôõšSHxöìÙ×ìîè ×ßðkÌ4 ˜®1½ûî»%33ç‘úõ×_›eÚ?oŸ‡zÈgŸ½zõ’zõêÉ¥K—ÜË~øá3¦ãÇ—5kÖ˜mµ¢¯Ú¾}» ÿú׿6ׇKëÖ­Mø×nž9GÕ½{w©P¡‚ÇõvúôiÓoòäÉü@@¡®¥ i"[£s»ÿ@@!apöÉ'Î!a]çàÃ?t ëºkåvñ ë—þf2Ó€b2×ju†ROÿ:SÛjKKø¸v!á/¾øÂ,sUll¬©^ššš*ÑÑѦúé–-[Ì:­¼Ú§O©U«–4hÐÀT›=vì˜Ï±öîÝ+ýû÷—úõëKµjÕLØqýúõîõŽ¼ë®»¤J•*¦Âª†&½mذAî¼óN©^½ºé»qãFÛ°VDîØ±£Ç2ýö1½Ë—/Ï÷>r>W®\‘—_~Y:wîlúÜrË-ÛÛyçw¤F>Ë ëùjbí§UbõܵúsÞû’žžnn{‡Gó®·ÛV¾Õà¨Þ§¼´ÊlûöíÝUh{öì)>úhØ?ý…„>ì^¦ã©Ë^zé%>zMå¥U+Uª$QQQ>ÇêÔ©“c õV®\Y¦OŸn–ë¿ZéW+ 7oÞÜ,ûî»ïÌþõ1g7Ïœ£Î±„»víêq¡X•Á‹0p-dý,²?Fdi ‘øº"‡—2&@ Îî'$ NV¯v Ïží¸™~M®SHØÜ(iëÄ7 ¬m%³ (F‹„7ÏãI«u+ácÚ…„5ä«Ë–-[æ^æ j˜ôž{î‘W^yÅl³sçNSíTÃŒ«V­’øøx¨ÕÀmZZš{{W? ðÁ&ܪ[­rª´jª‡nŽ;pà@)W®œGHSûê>~÷»ß™Àî»ï¾+7Ýt“m°ñ÷¿ÿ½Ù>/­„›÷iN÷)ÐóÑoƈˆˆ¹sçÊÚµkM0yß¾}~Ç»[·n&ê-°C###M¿Y³f™ krr²Ç}ñ‹ÚݶÛHõ¶Þ¼ `Æ&ïyj@Û;Lnü…„óVg>sæŒmHØ»‚³††ªôêkÀ^éãHƒéªC‡Ö¯S³MPÛõýóŸÿl®y§s ä?nn;Öã<  (ñw8»rAäÌ>ZaZú‘Ô5"çäT?ý÷\‘Ä!"‹+å„“fæ†NÃÁ„„ÀžœBÂS§:n¦•éœB®°HI&¾áÛ¬ÆO@qJÈ}ÎIg(J½Ï­V®„¯WHXí¼}úé§¥|ùò&¨¨¡AWøð¡‡òؾW¯^R¯^=¹té’{Ù?ü`ö1~üx÷2 ºêö›7o¶=ÝOãÆÿókxF† åNœ8ѽLƒºZ©8ïyiÙ.|Y°÷} ô|yäiÒ¤IÆ[CÒC† ñYHHXÙ…WóÞ—@BÂvû9{ö¬©b«÷)ï<–-[V,Xà^¦ÁnÝNƒ¦á¬¨CÂúøÐ±=z´Ï±ºtéb*:+ ëu¦×j™2eäСCòË/¿˜ÀúG}dÛzm:ïvç¨ç¢áv½ÆóÊÊÊ"$ €"CHÎ4äªAžuU"Öê¼ùÑsÕpæ„ |Ö]ë°1b„õ²¾ª D«?þñrýõ×{œ“Žƒn·Cc±±±æ~jEi§1V†„UÛ¶m¥uëÖËÎ;'ÕªU3c¯4¬¯Ûëu–·ï½÷Þ+ýúõ3A㯾ú*ày·;G¥Uе"ô‰'Üצ˜  ¨€3* m%áË™\S@Qp…„µ:7ÀÓ®]"͛ۇ„m*e¹hÅ6»°†/vé>KX¬ø„µ-e†Å,5÷9‡ß6 ¦[­…ä†K‚+$¼téR¢½xñ¢m?»ð¡†kíªø* 9ÖªUË£ßàÁƒí¹ëkÖ¬)Íš5óh®m4´¬}òVòUEötr>.³gÏ6x5ü«•“µê«?ÚW?,çÍõºŸöýö¯nݺɠAƒÌÿ‹3$¬•¤uÙ_þò×ûûÔSOyçƒ>pWžgZ)Yç4::ÚTYÖ*»… /_¾Ü¬›>}ºÙN1tèPsîß¿ßÝOÒ~Ï?ÿ¼{Ù‹/¾h–Ýpà Aû« ¯ZµÊŽõzÔÊÖM›6•qãÆ™~ú3(,B€ÐBHœ%%irÁ>$œ[ñÌŽ~½­]HX¿²ùZTÖ3õßaµ£Ì0 ðÁ¸hh¼’ÕÖ–Ðñ\!á#GŽøíg>¼té’ ޶ù`X—.]¤eË–æÿä­P¡‚ygǵþþûïw<¾5õø¿ûÝï|¶ 4$¬AÌ@BœO^Zu̘1R¦L´ôçæ›o–>}úø,Ÿ9s¦9—ï¾ûÎgÝí·ßîãâ køTªú:ýË/¿4ë¿ùæã¼ð f¹ÎG¸›4i’©¶«÷7>>¾Ð!a¥Õ§5<ïúݧyóæf¬ó9r¤Y·iÓ&÷²Í›7›e£F*мۣ˺uëäÁ4Šß|óMsk?ÝPç tg‰‰"ÿýßö!á<_ÇìíŽ;î° k ¤¤C¨.¾!áß3»€RÛj/3 ÈiµR2Õ„ VmÛ¶•Ö­[{,;wîœT«VMFŒá^ÖµkW³ýž={l÷¯ëË—//'Ožt~œÔ®-¿úÕ¯<–mذÁ6$ì ³¦¥¥™Û€}à̲yóæù½Ož·ž={š°ß¹Œ´í³hÑ"wß¼´²p•*Uä•W^1·cccM¿íÛ·ûŸün;íG«×jÝ=zH»ví|ÎS¿ ¤E‹¥æ±xþüyIIIñ¨Þ[:dªc“>úÈ\Ÿ~ú)?„Ph„„¡å—£„„ÀIJŠÈСö!á7ëØ±£mHX¿îv×®]%z4RâÖ ~‰Ì. „hänÀ\úMZ·$ªK6$¼|ùr³|úôé¦béñãÇ­—†CM_­Üë²qãFSiWCʼn‰‰’œœlºòUÛ¶m3áTýÀØ’%K$==]¾úê+‰‹‹sïC¬z¬ÊêÕ«åÅ_tðlòäÉç¥ÇÓå&L0} $íÛ·8$Èù̘1CæÏŸo‚ÄZq·fÍš2ÀχäÔÊ•+M•b«¼.\¸`Ð52ã“••eÎQQQR±bE9vì˜é§ã«çmªùj?»û’ßm§ý|ûí·î×å³gÏö8Çììl¹í¶ÛÌýFhÓ Òz-§¦¦šÊÙúÑǦVûÖ á@a„–ì,BÂà$3Sä±ÇìC :n¦_elÖP‰Vë*IwˆoH¸›Õ~fv%DŸw"ämµ¶RüÕ„ V ,Zµj¹_Ï5oÞ\¾üòKŸ~«V­’úõë»ûÕ­[×#t«ß&¡Uv]ë«W¯.?þ¸{}FF†©¬ac]¯•n¿ÿþ{ÛJÂhÕJưզ|wïÞmú~øá‡ùÞ§@Îç‰'ž0Ë\ë´ÊîÑ£GýŽ£†qµòò³Ï>ë³nÇŽÒªU+³¿²eËšëÔ©#ýë_=úMš4É}ÜøøxÛû’ßm§ý¨Î;KåÊ•M0:/­>|ýõ×›€1B›Î·Î±Î½VªÖ[¶liÂñ@Q $ =„„ÀÙÈ‘ö!á 7q½)íÝ4xáH(NZ-X+õy‡„ßfV%hˆÕú2 È#ÕjU­67„ÎùСCrêÔ©|û>|ØTÉu¢ûÐ}iÐ׎¾VÔ ¨8}ú´ †¿óÑeú·‹/¼¿¯¿þÚ—ÿùÏÚîOÇgýúõ¦³Ó~ÏŸ?oŽ{åÊ•BÝ7»ý´iÓÆ¬óÒÊÇ7Þx£|ðÁ<8ÄëÚÕÊÕú!§Çp5 B†„~Æ8€ýzg»°¶'l7± k5jT‰žºÖ‚óW²Ú>fP‚ž´Z†^¦[­®ÕÒаóÙgŸÙV¾ÖÖ­[g^“kå¼þïÿþOfΜÉÄ!a@èÑðwó°3uªsH81ѧ»Vbs ÿþ÷¿/±ÓδZcñ kÝ´,fP‚^³Z †6¯UZmC–Î;tçÔ¯_?iÞ¼¹OUÙ³gÏ2aFHz €³˜çðÒ¥>Ý]ÊìZŒî«„Ì߀°¶ÅÌ( „ý%÷9ˆ©ÀÛÉù–j¸¢$¤¥¥Ph„„¡ç¯µ €“ØXçðܹ>ÝçÌ™ãþøãKì´‰o@¸­Õ’™Q@ [›û<”ÂPÀÆû¹×ÇR†pt4÷g¨¶V[cµ=VÛG+±v˹ Bϲ&„„ÀI\œsHxŸþºcHxÑ¢E%rÊßZ­ºø†„' U%oWîóІž±Z9«Å0(%4ô›`5ýÈá«EY­¯Õ:[­‰Õj‹ý·‚Ю]ÛÇe €\„„¡‡08[·Î9$$ܱ£O÷§žzÊ6 \»vmIII)öÓ.¾! '2“€kH«ÃN`p •„i¡UI˜æá0 ô¬hNHœhH¸gOûp«V>ÝüqÛp“&MŠ=$¬Ê´R£wHøn«¥2“€kH«ÂF2 Ä„žuÝ €“ýûE~÷;ûpýú>ÝhnÛ¶m±‡„çˆý׿À,®±'­Öa!Ž0 ôgì:Ô>$\§ŽO÷þýûÛ†„»uëVì!áâ.gµDfpÍ´Z †„8B€У!á°“™)òØcö!á²e}ºwîÜÙ6$7%1 „ ‹‹‹“Þ½{ËÙ³g @h!$ þýéOÎ!á÷ß÷èZ·n]Ûð¸qãŠ-$¼Ïj׉oH¸ÕÒ™=@HÏ}nZÊP€FH€ ׬Y3éÛ·¯Ç²¬¬,¹îºëä¶Ûnóéß¶m[™2eмúê«æýüÑqßô (ý£'!aðçí·C ΣlÙ²¶!á1cƘß=ŠÃñ kû33"•¬öÃB!a‚HRR’L›6MÒÒÒÜËF%U«Võxs~ÇŽæMûˆˆ*À'Ož”2eÊÈ?þñY»v­yS?##Ãqß„„!K„„ÀÙÇ;‡„§LñèjÖ6yòäb;½vâ®aµMÌ ˆ4·Ú DÞ{ï=ófüÁƒÝË,X`–mݺս쭷ÞrWûZ³f{ù'Ÿ|b* _¸p! }„,BÂàß§Ÿ:‡„'LpwÛ¾}{‰‡„×Y­œø†„ûKÎW»,zZmÃB!a@©·wï^éß¿¿Ô¯__ªU«&­[·–õë×»×ïÞ½[úôé#µjÕ’ ÈСC娱cûxã7¤cÇŽËRRR¤]»v²|ùrs;66ÖÜþé§ŸdæÌ™rë­·Êí·ß.óçÏw¯oÔ¨‘y3¾eË–¦ïÊ•+åÈ‘#fÙ+¯¼âÞ÷ƒ>hš.ñÅÝË£¢¢¤oß¾ÇKOOwÜ·+$¬Õ…íÎ € ¥á/û2à$)É9$üðÃîn®%Ú5ýpbq-¾amfÖA&Új Jµ;wJÅŠM@øƒ>0ÁÙ—_~Y¾þúkõ¼]µj•ÄÇÇK›6m¤N:&Xëòûßÿ^Ê•+ç±ïo¿ýÖ¼±þᇚۮ@îðáÃMPwƌҥK‰ˆˆ'N˜0rdd¤é3kÖ,Sù799ÙlÛ´iSwøWiXyÑ¢ErÓM7I¿~ý<–k`9ïñ´J°Ó¾ó;'”œ¤¤$™6mšÇuðCCÂëº1àüS¤n]ûpÿþînsæÌq üñÇÅrj·Šo@¸¶Õ61k€ 3Ýj  Jµ=z˜7¿7oÞl»¾W¯^R¯^=¹té’{Ù?ü åË——ñãÇ»—$$|÷ÝwKff¦Y¦ad]¦¡]¥ÿêíƒzìë±Ç3U޳²²äСC¦V1b„©p¬öíÛg–ïÙ³ÇãxvÚw ç„’á4÷[£ €?nÒÄ>$lýžã¢ßXâþì³ÏŠü´ô7/ýÍÉ;$ü Õ²˜5@y_x# „6þ¶(µ®\¹bªkU`ý¿·ììl©T©’DEEù¬ëÔ©“´oßÞ}» !áÇ»û¤§§›e/½ô’¹íýè£ÌòmÛ¶ÉÂ… åW¿ú•YþÎ;ï˜å˜˜©«•Âr$$ìïœÂÙÞ½{¥ÿþ¦’´†°[·n-ëׯw¯× Ì}úô1Al­ÒSRR¤]»v²|ùr÷²ØØX³ì§Ÿ~’™3gÊ­·Þ*·ß~»ÌŸ?ß½¾Q£Ffܵ¢³öÕªÖ?vÿ0ø³¿HçÎö!á;îpw›:uªcHØéÔ…ñ¬ø„µ½ÎŒ‚PbîóÔQ†„(B€R+55Õ¼ñ=xð`¿ë'Ožì³nÀ€î ¾ª !aWhW9s& °«zðŸþô'yúé§eذaf¹«ê¯†Lûõë'‘‘‘îm öwNájçÎ&$®á>øÀ„r_~ùe3¦y×÷íÛWV­Z%ñññÒ¦M*OKK xÞóŽóðáÃMxƌҥK‰ˆˆ'N˜0²Îö™5k–™«ääd¤àÏžé„„À­$ܳ§}H¸ukw·qãÆ9†„‹ü´n߀p%«mcÆAèhîsÕZ†„(B€RëòåËR¡Bi¢_ÁkãÒ¥KR¶lY=z´Ï: xjØÓÅ.,ºÿþ" «ÆËo~óiÛ¶­© ì:ÇÊ•+ËÈ‘#¥J•*&,ìBHØ¿=zø­ŽÖ«W/©W¯žc—~øAÊ—//ãÇwœw!á»ï¾[233Í2WÀ[ç%¿¹Ø $ þé‡ÎôC„v!á<ß@¢d³ ë·ª$iи-µš¾zö ÿÖj™Ì Hés×_¢ Jµ®]»š7À÷ìÙc»^¹­óTÙRçΓjժɈ#ÜË^xá³W…Ù+W®È<`–Í›7Ï, $«!_½½}ûvŸsyôÑG¥jÕª&¸¬Un]4°¬oàëvÇw/÷>žÝ¾KkHXçG«kU`ý¿·ììl3¦QQQ>ë:uê$íÛ·7ÿ/hHøðáÃîeéééÄ64$ü÷ÎŒ89zTäé§íCÂ7Þèîvß}÷Ù†„6lXä•„߀°¶—˜-@kkµ—¢ Jµ7J™2eLXßONN6¡Þ 6˜õË—/7oOŸ>Ý„g5„;tèP ÕJÁy÷£ý&L˜ «W¯–Aƒ™ iACºÿˆˆ‰ŽŽ–³gÏJVV–»¯†Nµ¯…µ ²ËĉÍòV­ZyÜ7ïãÙí»´†„SSSÍ}´ò¬VÖê´Ú"##e÷îÝaÑ@¹“&M’êÕ«›åñññîåßÿ½YÖ³gOck]>~üxåvÇóÞwi kȺB… &ø`çÒ¥K¦bóèÑ£}Öiåæ–-[šÿÛ…„5}Z222Šä\Ο?/)))råÊ&üÑðÂrŒø³h‘sHøãM—zõêÙ†„õÃpúº´(Œ߀°¶Ì ha­~ÿCB!a@èÑð'üJ ~%$8‡„_|Ñt©P¡‚mHø©§ž’Ÿþ¹HN£¥ø„õc_0C€ÑÂj1 A¼£ =G?#$ ùÙµË9$<~¼;vÌ6 ì …O%'ìî`µtf"†X-Ša|è·¡8p@6oÞ,'Ož¼æç'½{÷–³gÏÕ±Šâ¼Ž?.7n”ƒJVV€€ñŽ* ôœH $ ùIIq ?ú¨$&&:†„µÖ…Ä7 ¬m"³!°Zg†ððí·ßJÛ¶mÍkLjˆóo5Š,,üꫯš}þøãW½ÍÕì£8ÎïjÏCCغmÍš5ÍöeË–uÿÛ´iSùþûï¹ä‹wT¡ïÊ‘3ûhÁÒÒ÷ˆ¤®9w@$#å?-›ê€"DHò§!áºuíC¿ý­,]ºÔ1$ ¦jHˆ:í¯µE–5ù{g‘/ûŠl‰Ùý‘ïæ‹¤m¹ÈòAHò§!áæÍíC½zILLŒcHxòäÉ…>üj«U߀ð­V;ÊìBHRîsXJ)ºÏÇ—7ÊÁƒM4ÜÅÅÅ™@æÙ³g‹¤_¸Óp¦¾fœ2eJPWqV.̱®æ¼/^l¶ùÃþÀa/ï½÷žýù ¼£ }TJ§s]Ú/Í ï{Ydç‘M‘"kºˆÄ×ýOXCĉüë5‘Ó;¸Îž @þvX¯£»t± ßq‡¼û!áW^y¥Ð‡Ÿ!öU„Ÿbf!ægÉùàËŰo ãêsï¤I“<–k•̼ÏÍ+V”[o½Uú÷ïo¾ À›«ÿ… Ü˲³³åþûï—FTqS«”j˜±fÍšf_eË–uÿÛ´iÓ°ªZêÚ 4ÄY’!Ô`véÒ%sÜu×]æÿN6mÚdúT©REÚ´i#kÖ¬ñX+íÚµ“ÔÔT‰ŽŽ–:uêÈ–-[<Ö¥§ç”ؽ{·Œ?^:uêdŽýÀHBB‚ßùñÞLj#Ìm»vòäI÷~ r,} ?ûì³æqÖ¸qc™>}ºyìåwÝä76mÛ¶•êÕ«Ë™3gš=ç>}úH­Zµ¤Aƒ2tèP9vì˜ÏXŸ>}Zžþy¹é¦›¤U«V&ø®æÎ+­[·–æÍ›Ëo¼a;O§Nò{_7óÈöº­_dzeË–f?+W®,ÐØ]o@8ãU\²~Î ÿ{nN…a kLćå,?þ…Húîœ0²†’ gÿ'œy‚k@é@Hò—œ,Ò³§}H¸ukùãÿèÖqaý·Ø‡„?ef!¨…Õ^+†ýæþä“Odݺu²bÅ yë­·ä׿þµY>zôhpž]HXŸë5\¼cG`À× ¹ºçž{N¾ýö[>qâ„9ö¨Q£B2$œ””dÆÆ;$½víZ3fŒddd˜Û„„ îé§Ÿ6c¡N»kcûöíR¡B>|¸,[¶L(åÊ•ó¨þêÏûî»Oî¹çóAµ#GŽØŽõìÙ³eÀ€æuj||¼ÜvÛm&Ôêo~¼oú駦 ­«iVÏñ†nsçι÷ScéýêÑ£‡Ì˜1ÃluÙK/½ä÷¼ò}lWªTÉì7;wî4õ¾}ûʪU«Ì9kðXC°®kßu>ø tíÚÕü<¹ýöÛ¥Zµjòâ‹/Ê-·ÜbÆ¿_¿~>Uz½¯Œ›¿yd{ GFFšígÍšeæ1Ùú½§ c`w½áŒwT@ðÓJÄZyX+¯h.²°Ü*Ó<Û²9š Üi…zý¹w1±'‰ÖÏʨ(ûpݺ櫋BÂ~øa¡½×jÅ7 ÜØj|)0  ³Zd1ì7¿°wøò—_~1ÕuÝ¢E‹|ú»B«W¯–ˆˆ™7o^@ç±xñb³½¾>' ô<Ú!$\p/^”GyÄŒGåÊ•MàòòåËîõ½zõ2Õf]4­A؉'úŒçC=Tà±v}+†]˜5 ÑÄ4h ënܸÑï}õw, غdee™ªÛµk×öñ{ŸG~c£ÁUíÿØc4º¿zõêyTuþᇤ|ùò¦2oÞs6l˜ù€Z¸p¡Y¦U‹úé'³ìßÿþ·Yöæ›o^Õ}ÍoÜò›÷@¶·{\d ò;.n €ÐôówT¶«$¼w¦ÈâJ";žáÞô$Öö’’D"#íCÂ7Þh‚N!áD Â+b_E˜·ã¡J«7/†ý4$¬Ž;fªŒjPïþÖmjÖ¬)O>ùdÀç¡!ÁêÕ«Ë™3gòí«•<ûôé#µjÕ’ ÈСCÍ9å+íÚµ“Ó§OËóÏ?/7Ýt“´jÕJâââÌú¹sçš ¡ZT«¹zowêÔ)yöÙg¥Q£F&L9}útŸ ¢ž‡†ÿ´’­Þßx@<ö¥Û븴lÙÒìwåÊ•ÇIOÏùà©+<¨óáï¸v¡ÓM›6É]wÝ%UªT1•K׬YSªZ ·aÆf\ôºÈÌÌ4!T­êÚ½{w@w5í§•b½Ç355Õg¿N_ §=zTbbbÌúÍ›7;nã/$ìz̼ÿþûŽ÷­ ÇrѪëZ²ëÈØ>|8à°«êp”~8Ћ>6Ú·oïqúØrùòË/Ͳ¿ýíoîeZQÙ;\ûšß¸å7ïlï.è8W„„ÂMêÚœ °V_€pEHò—býŒ7Î>$lµèèhÇðÒ¥K uèûÅ>$ü³Q ¹Ïe™E¼ß« «{ï½WÊ–-kÂtyûk5P ªÞyç¦Òk \»=zäÛwçÎ&àØ·o_Yµj•ÄÇÇ›ãÕ©SGÒÒÒÜý\a¼|Pºví*o½õ– 5W«VÍ„o¹åó¥~ýúy„ý\Û 8Мό3LX—½ôÒKç2{ölªÔj£z·Ýv› »hˆ822Òl;kÖ,,LNNö8Žw˜4¿ãzo·}ûvS‰vøðá&,«ÛkEØü*‡Þ½{›±ÑqÖ¦þ_ÃÛÍš5óhƒvϼ¼×8qB~øas­Ö¯_ß̵®×¶Ó6Nû×׺eÊ”1p;Ws,½^tùÞ½{mû26$ÖëJçùqíoòäÉ>ëôñ¡a~§óu…„õ±ìR°÷} dÜüí/Ðí½CÂ… 4 $ ޾yNdi ‘¬Ÿ á‰0ä/3SdÔ(ÇðèÑ£CÂÛ¶m»êõÚõâ®jµ¯™@ˆÒ¿°T²ÚçE¼ß« kÅ̼ë]ý‡ "•+Wö©ìëÏ‘#G®ZÚ«W/©W¯ž\ºtɽì‡~òåË›ª¾.®0Þ°aÃLàQ-\¸Ð,ÓªÅfVÿþ÷¿Í²7ß|Óc»¼E B7mÚTj×®íSM8/ ç *ï0¡÷ùy‡Ió;®÷v:ZqØý«jF† Oœ8±Ô=FtL4¸~ß}÷ÉåË—MÈõþûï÷»MABÂZ öÆo”˜ÛʾšJÂÿüç?MÕg ƒ»BöÞ®æX.Z9[—Ÿ={Ö¶o c£•·õ<58ë>uÜõµ½·.]º˜*ÚNç[ذ÷} dÜüí/Ðí½×… 4 $ Ž.¦ç„„÷Lg,„'B˜±cCÂcºus '&&^õ!çŠ}á^VKgF!¬­Õfñ>¯6$¬•kuý™3g<úO:Õ]97P‡($ìª8¬eo:u2?WïÔ©Sîe®@âßþö7÷2ï@¢Sˆï¡‡2Ëu¼¼iÐóèÑ£ã(,hH8¿ãæí§ág­ªÜ½{wY¼x±»5lØÐT/-môZÔ€úoû[s[+HkxüäÉ“ŽÛvÙóVuvH7nÜð¼êõ¨¡î›nºÉ1(ZÐc彯U7ë5¶VÊöw?›>úÈl3J?ô—ßϦ¶m=ªh»[Z¹{ĈŽc]а¿ûè¸9KA¶5˵’waÇ(  „«D>k(’ÅX?„„ 0S§:†„_¸ûnÛ€°VËKJJºêCŽûðDfâž³Z—"ÞçÕ†„ïºë.©S§ŽOÿÌÌLS½·L™2²dÉ’€ÎAîZÙôÞ{ïõÛ/55ÕcòäÉ>ë4[«V-÷í« $:…ø48¨Ë÷îÝë^¦V~øa\®_¿¾ jŸM›6¹û6$ì}ܼý\ãQ³fMiÖ¬™Gúͦ’«^‹éééòÕW_I\\œßëÄnÁµ‚uÇŽe×®]æjÓ¦Y?gΜ€æUCî÷Üs©8«U­÷ìÙãÑΟ?o¶)è±î¶^Sýõ×fæÎk{óæÍó{½26ú¸ÔõºÝÀ͇ø4ˆ­×²ž¿®ÓóVË—/7ý¦OŸnúèÏ•¡C‡šªÖû÷ï/Ôc2Ðûè¸9KA¶×û§ã§× V1Öm¯v €Ò€0@¸ÒàÜÂr"Ç¿`,„çÏ8 ŸÞÁX€?¯¿î~«eKÛp“&MÜo¤”V n$¾aëU©$2€§ÑǪVË,Â}^MHøÐ¡C&øæªØš·ÿ… LØQƒvžÝ²eK@çѪU+©R¥Š Þ:¹té’ XŽ=Úg[Z¯-\Š:$üüóÏ›åtÑÊÅ7Þx£8pÀÜvU-ÊJÂÞÇÍÛïòåË&\}ÿý÷—ºÇ‚~ ¬nݺf,4¬©ÿ^ýõÖKÏ×=ú%$$ÈÍ7ßì~Y½zu&öw8­Óʺ"Õe-Z´­[·šëNƒªšÍo^õqáô-ÞUi=–οöÕû®}õ17sæÌ|ïK cãzÌéc[›yÏU£Ø´´4wß ˜ ¾«OóæÍÍc®°É¼Û¾õÖ[~ïk ãæoÞÝ^éÏL3íÕc”„„ÂÙ—}E6c„WHøDcþÄÄ8†„_oÜØ6 Ñ¡C‡«®$ü™ØW¾ËjIÌ Ä¥å>¯m)Â}4$|ñâE2dˆ ï۷ϧ¿†„]ûmРÜpà ¦Êk~4œ§Û5Êo¿¶mÛšŠ½yi¨°Zµj2bÄ÷²Â†„O:åqŒnݺÉ-·Üâ¾}äÈÓO+ýº¸BÂZÝÖ%66Ö'jw~×{»®]»JùòååäÉ“¥ò1¡ã nµ²°V—u¢ãªáv­æ[ÌÖ¹wÑj»z}v¿Ws¬ŒŒ ÷õ¢ë4ˆ®Ï‚ dltþ,ÐÇVµö7Öº/ï븰¼Ãñþîkaç¨ Ûkð[×iŸâ ”g‡‰,©*r9“±^~9JHñ!áך4± k&0‘­+hÖšhYÌ ´²Ú”"Üß±cÇÌóïÔ©S=–»B¿Z=S+Ž~þùç&¨§Õs+V¬(ï¼óŽmWHX}ýõ×R¹re¹í¶Û<*ðÚÑVìÔ} 8Ð?Ïœ9c€zºnÏž=²|ùrÓgúôéf½†‘µ¢©†–ó~AaCÂwß}·9 CÎ;×T7ož{»¬¬,SqT+&ïÚµËì³M›6fÛ9sæ¸ûéùi¥Ûèèh3ºÝùz\ïí¶mÛfö¯ã³dÉIOO—¯¾úJâââx° lPm„„ÂYÖÏ"‹+‰ýŒ±~ @þ-r ¿[³¦mHX«îرãªw»Ø‡„c™ @˜xÒj‹ppÕçßwõƒ=y¸B¿®V©R%SÅ722Ò£‚°wÿ¼!a¥aU ºöéÓÇuréÒ%³Ÿ*Uªø[ƒÀiii¦ß‚ ¤V­ZîõÍ›77༠~ë­·äúë¯wæÌ™>ç«Õ5(¬}Z´h![·n5a]½¿lvÑ*ÍÕ«W7ýâããmÏOoW¨PÁìÓßqíî—†¸o¾ùf÷xè±üq,„„€ÐFH Üm$²%Šq~ @þ´ŠCHø•ÜŒw‹ŠŠ’äääJ£A•Ä7 \Ûjû˜ @˜ø<÷ù-­û8räˆ|ÿý÷¦iø¶|ùòWõÜ[\²³³Í¹i¨wïÞ½¦ª®C‡É©S§ŠôØyÈ—/_6•Œ/^¼èØ_ûèxºhEdýF½y?Þ,×õv222Ü÷Eûäw\;º½Ž‰÷±P§?ôúæÚB!a€pwà‘øº"Ù|Á3€0£!áã_0àÏ–-Ž!á¿\wcHXC45Kì«ßg5^‰ÂÅÏ’ó¡˜ù…ØÇ›o¾é~Þ½Îz>ö®"\šQ±€¢EH ÜKÎ ÒÞÁX/ú³í»ùŒø³Ãz X®œmHxN™2¶!á±cÇ^UHXÃÀv!áiÌ ÌôµZÿBl¯X­Ò»qãFIOOg@ó $ @Ñ"$ P,k"ò¯×á…0ä/!A¤IÛð6amãÆ“Ÿþ¹@‡9hµ:bþY„™¿X­œÕ’Š"÷Ë/¿È©S§$;;›Á(iVKÉm¬¶Æj{¬¶F£¸]àG B!a€Ò`K”ÈúþŒ€ðBHò·¿cHøS‡ð˜1c | Û„oµÚ·Ì ÌdY­¶Õžc(,/ù¬¶ÔjZ"àIÉ©tÝÍjÍ­V×áuF+\ÛÇ„BÂ¥Á¡E"Kkˆdg1ÂÇÂr„„ ?»v‰tîlÞäž”„©—­VÉjG \I¹×`O«UÍ}Ý¥ÿ¶²Ú «=cµéV{_r*_'ä6ë•!•„i4¡’0JBÂ¥AzRNÅÍŒÆ@øø¬!!aÈOŠõú¯[7Ûð‡ð¬Y³ tˆL«5ûðÿ0€0¥ÃÖ@æ†%õ²ÎjS¬Ö$÷u–VŽ’œpRî5 €7BÂ¥E|]‘Ïe„eM @~4$Ü·¯mHx§CHxêÔ©:D¢8ï2fƶHN5á‰BEVZѵ=¹×“þ?Ar*w±Z9«5”œ ð~€(-¾ì+òÍsŒ€ð¡!áý1Œø£!á¨(ÛðQ‡ð믿^ CLû€pG«¥2€0·Ôj׉ófh´Â¶æV{ÆjŸ Õ‚GH ´Ø5E䋌€ð¡!á=ÓðGCÂÑѶ!áT‡pLLÁ>€ÑYì-S}@)ñ£PI˜Vô•„¡`@á(-Ž!²°œH6o/„„ ™™"Ï=g¾\!ác’ó5ëv!áŒ>×!a „$%%É´iÓ$--ó\FŠÈ'ÖË¿Ÿv1ÂÃÊV„„ Ï>kÖVÉ&$ð®‰}@¸†Õ2ò\S„„ ðý÷ßËØ±cóí÷Þ{ï™7ë ηقýü‚M\\œôîÝ[Ξ=Ë}Pr´êæwáa]7BˆqãCÂmB‹- x×#Ä>$<Ðj™Œ<×!a lݺUjÔ¨á·VñiÔ¨‘y³®eË–Ò®];Y¹r¥ìÞ½[Æ/:u’š5kÊ< >ÛjÿÔÔT‰ŽŽ–:uêÈ–-[Üë7lØ wÞy§T¯^Ýü»iÓ&Óÿí·ßv÷ÑewÝu—T©REÚ´i#kÖ¬ èüàìÕW_5ãõã?Û1š5k&}ûöõX–••%×]wÜvÛm>ýÛ¶m+S¦L øüJâ>(bëû‹ìx†q @`^{Í1$Ü¥!á,«5ûðÿ2ê\s„„ HHXÃÀ‘‘‘æÍºY³f™ª½ÉÉÉ2{öl0`€¼ûî»o‚Ÿ­[·öØÖä¼ï¾ûäž{î‘W^yEŽ9bÖmÞ¼YÊ—/o‚¤«W¯–ùóçË­·Þjú»Â¢Û·o— *ÈðáÃeÙ²e2pà@)W®œGÅ`§óƒ³âØ&%%É´iÓ$--ÍÜ5j”T­ZÕƒ]vìØaŽáQøäÉ“R¦LùÇ?þan¯]»VÆŒ#¶û.®û ˜}óœÈ?z2Â!aŒõ{ºSHx¨MHøóÏ?h·úñãÿrhËu®9BÂ@$$¬4x«oÖå çzÓ°°wWó¡‡òéß½{w>þ¼{ÙéÓ§MÿÉ“'›Û½zõ’Æ»×khTCÂ'N,ðùA|æ¥(¶Þs°`Ás[¯1—·ÞzKÊ–-k–ç­ýÉ'Ÿ˜ Ã.\øú#$ „ ïˆÄ×e„B˜9sCÂ#lBÂÞßPää5±·´ÚF€kŽ0p üðÃòÁ¸ÛóÏ?/•+WöX6oÞ<Ÿíü…pµRìÑ£G%&&ÆôÑ Á.® gjjªÇ6W®\1á®]»z,¿|ù²»’°ö©X±¢ /^¼ØÝ6lh*z~áDÇäå—_–Î;K•*Uä–[n‘-[¶xôÙ´i“Üu×]f}›6m<¸Þó’7`Èv{÷î•þýûKýúõ¥Zµj¦rôúõë%66V5jdöÙ²eKi×®|ôÑGæ¶VvyðÁMÓå/¾ø¢{yTT”©(í¢ûÓ}¤§§Ûî{åÊ•îû Õ…gΜiªPß~ûí¦"5€ •ºVäë%à…4Æ@èÓÊè»ÿÀ8@~>þØ1$<²!áÁbbµLF€kŽ0p hUW €ºÚÍ7ßl*»æ]vÇwølgÂ=qâ„<üðÃR©R%ÕÀ¨öѰ©‹Sµ×ãÇ›åcÇŽõXž7$¬ÁbýÍš5¥Y³fmðàÁùž_8Z±b…DDDÈܹseíÚµòÆoȾ}ûÜë·oßnÂ×Ç—eË–ÉÀMåeïqñž—@¶Û¹s§ më\k˜\ƒºXþúë¯e÷îÝiö9kÖ,3ÉÉÉÒ´iSðoƒ dÑ¢ErÓM7I¿~ý<–ë}±;?§}»úè9kxxƌҥK3>zmB™©9!a @¨Û•Óþ½ý¶cHø^aýûB !aýr#± ÿ/#@P $  רQ#ß~v!ÜöíÛË7Þ(0·5\êTIØ;$|éÒ%æìÕ«—Çr­Jì k`Xƒ«÷ßÿU_8zä‘G¤I“&Žëu<7n쾑‘a¾'Nôèç=/l×£GŸùÍo{ì1SqXçõСCfý‘#GdĈR«V-ÓGCκ|Ïž=Žçg·oWŸ»ï¾[23sêDi`Y—iAjIU‘½Æ8}„„ 0Ÿ~êžäÖßw /·Z9± /cÄ „„ hH866Ö¼a§g•=õöK/½äîã oܸѽÌ)$¬:tè Õ«WwW}ÕPðèÑ£Ý!aÕµkW)_¾¼œ‡v/KOO÷¹.™•­Dv<Ã8}„„ 0+V8†„g_eHX¿‡Æ. ÜÒj;q‚!a >~ü¸©ü-gÏž5•[ëÕ«';v”]»vɪU«¤M›6æM½9s渷óÖmÊ–-+•+W–!C†HÓ¦Meܸq¦ÿ´iÓL —êq»té"K–,1!Я¾úJâââüžŸV® W³gÏ6c¦÷wüøñòË/¿˜å©©©fìjÖ¬)Íš5óhƒöØGÞy d;WïýäeäuUþÓŸþ$O?ý´ 6Ì,wUüÕpw¿~ý$22Òñüœömwm9s†0ì6 ùGOÆ@è#$ ±~÷w ¿ëîܹs@!áGÄ>$<Äj™Œ8A0 «I“&™Ê¿úÆ]||¼©«Aa½Ý¢E ³/ ó–)SÆTUþBÂjݺuòàƒš è›o¾iª kÝÎEß ¼ùæ›Ýoê9<þøãùž_8Óq3fŒk V+­Ä\¡B¹ÿþûóÝ>ï¼²«VurbäU7–ßüæ7Ò¶m[SAX]ºtÉGŽ)UªT1aa§ósÚ7!a Dí™._—qú @`4ôëžçîÖ­[¾!á4É©lþ_F€ AHAçÏŸ—””¹r効­áÑ#Gޏ×ër]Ÿ}Uû×à±¾1øé§Ÿú¬;uꔩLëoßÞçîzöìiÔ.]»v•òåËËÉ“'ýnç° d;í£ÛìÙ³Çv½}uýöíÛ=–?úè£RµjUS5zçÎîå(¯T©’ÙF+Aû;?»}BÔwóE>±^fg1BÛÖh‘M‘ŒäGC¿Öï~v!áU^!aýö™üBÂú[a9± /c´„„RN«ÂÆÅÅIjjª ¯^½ÚT›ÕjµZi¾f̘!óçÏ7aÞo¾ùFjÖ¬) p¯ß¶m›DDD˜î’%K$==]¾úê+3ÎyylÙnãÆ¦r±ÎQbb¢$''˼yódÆ f½}uÑÑÑröìYÉÊÊ ~øá‡æXÖyv™8q¢YÞªU+Ÿûé}~vû&$ „¨´-9!ásÉŒ€Ð¶û"ëº1 ýê·ÒØ„„—z…„£¢¢ò ÿ?±kuáŒ6Aƒ0PÊÅÇÇKåÊ•ÍUªT1ÿ¶lÙÒVaï‰'žêÕ«›±Òzè!9zô¨G}CU« »ÞdÕ~?þ¸G»€m Û­ZµJêׯïîS·n] ñ¤I“Üç§ó«¾ÿþ{s[«{Ï¿.?~¼Ïý´;?ï}BÔ…´œðÑÏ ¡mÏtB ý6on^íÖ†æ~DìCÂC¬–Éh4 ììlIII1•i9bn#°1»xñ¢ß~§N’C‡xLÙîðáÃ’––f»îüùóæü®\¹Rä÷½8÷  -©*²?†qÚ @`4ôÛ¥‹mHx›WHxìØ±æ[kœèo¡Z1Ø.$ü¿Œ4A…0@iô÷Î";'0B!aLb¢H·n¶!á^!áqãÆ™†:Ùnµrb^ÆHT ”F‡‰$a„6B˜-[D ² ÿPÀðÿû€°VÞÁHT WëÊ‘3ûhEÙÒ÷ˆ¤®9w@$#%§e¦r­@qØ5%§š0„2B˜„‘¨(ÛpšWHøù矗ÌÌLÇ]="ö!á¾VËd¤*„„«¥¡ÖOþ‹V’mi ‘eMDÖtù²¯È–(‘}/‹Z$òÓ.‘˼ ;ðŽÈâJŒ€Ð–4“<@ CÂ➣ @Ð!$ ëî’'$㸋b¾Ýjü@ð!$ ü]Î9¼TdÇ3"+[ý§Ê0-4Úç-DÖ÷Ù9!'̨ó&Š#$üÞ{ï™}ò§ 8ðãüöî>ªòÞÿxAÖ²T@Ê"KAñ \ lAP@¤TCñâW@í¥pY T´XÅÂU‘Êjá" ,!D!"b”°™°T#û’ß~Ï8Ó™ÉÌä$™$s’Ïûõz^0gž³=çäd&óß}ë}4`Hø·BÂúN¬ƒø dtK„„O¾£’p¸Wþ1ÁYõYÃ?ðÖJÐð^QAä“îÎç QFF†Ìš5KÚµk'åË——&MšH\\œWŸØØXéСƒy¾eË–²iÓ&¯çý…„³›G}ùå—Ò·o_©]»¶T¬XQZ´h!Û¶m“Å‹KݺuÍ2›5k&­[·–õë×óóŽÀ>j+’ð<ãÀ¾ €u/¼0$ü”…ð׎)þCÂó]Â!a€}\=ë¬ ­•…50¬•¡õqfzoÊÚµk¥dÉ’2þ|Ù¼y³¼üòËrðàA÷óñññR¦L6l˜¬Y³Fú÷ï/^~}CÂVæÙ·oŸ”-[Ö„ßzë-Ö°òÞ½{eÿþý2|øp³Ì3f˜ªÂIIIœ7L–b‡3ìKCÂú"@öæÌ ëþç?ÿéwöWÅ@XƒÃŸ2º„%BÂ{:Ÿ$3Hä=ǯ²í÷‹\:Q «1b„Ô¯¸ra=¤^½zîÇ/^4ß &¸§ù†„­ÌÓ­[73Ï®]»ü®WƒÁú¼g°(þq‘Mö¥!á÷x[ –¼ôRÀð³!áeË–ùýñþ£btK|š °·“ëDV×y¿ºHêæ[í»ï¾k>@ïÓ§©àë)##ÃTûíÚµ«,_¾ÜÝêÔ©#ýúõs÷ó [™ÇÕ§FæÿþFŽ$Nwþü€]ë,žm!$ü[ñèhéŒ.a‰OSöwõ¬³šðÒ‘£Ë lµóæÍ“råÊIÉ’%eܸqréÒ%3=55Õ|¸^µjUiذ¡W8p {~ϰ•y\}<—á‹0r$y‰3\—I¬€Më4ü›Ëp’£Õÿ!ágYŸ¦Š 9îyÒÖÀP9uꔌ3FJ”(!Ï<óŒ™vãÆ )S¦Œ 0 輞!a+ó¸úÔ¯_?`BÂÈÙ ¼Õ®;ŸÄX°'BÂ`]ðœlBÂo‹ÿ€°¶UŒ,a‹OSEËçcAa ? îÝ»KãÆÝ;uê$¥K—–Ó§OœÇ3$luí£ó8pÀïó‹/6ÏÇÇÇs. {“áº31Œ{rUDd/HHølBÂ’À!á¯YŸ¦Šž¸‘"ïWÏ×ê¨S§N•E‹™@ïçŸ.U«V•~ýú¹Ÿß½{·”,YR:vì(+V¬´´4Ù±c‡¬\¹ÒÝÇ7$lež;wšªÅ­Zµ’˜˜IJJ’… ÊöíÛÍó)))fQQQrîÜ9IOOç|@pª?ºŒq`O®Šè€ìY ¯[·.ˬ‰ÿ€p3G;Ëȶø4Pôd¦‹lêèl™ù’ýãÿ(•*U2¢ë¿C‡•'NxõÙºu«©.ìú°]û5Êý¼oHØÊ…0P¼?&8ƒÂÚR6ˆ[ᘶO䧃4Ï–v@$u“È¥cœ3ÅÁճ΀V»q…„õ €à´’pýúA+ û†„§IàðŒ(l*»ðâÅ‹¥uëÖ’–æ,@–‘‘!³fÍ’víÚIùòå¥I“&çî[·n]³¼fÍš™ùÖ¯_ïÔGÅÆÆJ‡Ìr[¶l)›6m ¸=©©©%5jÔ0ëß¿¿Œ7Nî¾ûn©Zµª á0 x¹’*òñÝ"ï•p†ŠhÁÛšú"Ÿ¥ÊlQ§Ç:y ãÀ~\!áS[ ÈNð°ÞöÐe¨øWq´ÏQØTv!aß°ìÚµk¥dÉ’2þ|Ù¼y³¼üòËrðàAóœu‡núϘ1ÃT NJJò ê/eÊ”‘aÆɚ5k¤ÿþ‘¥Ú°k{úôé#;w–Ù³gËñãÇeÞ¼yÒ¯_?Y°`DGGËí·ß.-Z´¸?ºünݺÉÔ©S¥Q£FfÚÌ™3î·ÕíÞ ŠWD¶õy¿ºÈ7óDŽ,¡’p°JÂÿÚ-r`Š3(¼4Bäà,‘ÌtΣ¢hU‘¯æ0ì‡0X§•Mš7÷>ùsHxÈ!^•F:‹ÿðŽ–ÆˆÀ¦r1b„Ô×/à ¡_íïžõ êÓ£GSÑ×åâÅ‹&„;a¿Û3tèРû¥aaßuxÎ?mÚ4÷´ôôtiРT¯^Ý]MØw¿­n€ðFHP|Äw„5Pë4¬aa Ç "(\­kê<Æ`7„„ÀºdÇ5³K¿!áÔŸCÂ#GŽt‡„O8Z]ñîËhÀÆr~÷ÝwÝ•|µ*°¯Ü„„322¤lÙ²ÒµkWY¾|¹»Õ©SÇTö·=©©©~·W¿'Nœ¹sçš~»ví º?.:Öé)))Yúådû„7BÂ`#zÛW}±zöìY¶/§Ž­r†ˆŽ.ãDÊ­ÔÍ"Ë#ak‚ÂEË–."ñ3ìçÒ BÂ`•ÅpœVÖ—ˆâ? ¬íMØXNCÂjÞ¼yR®\9)Y²¤Œ7N.]ºä~.7!a üêãªU«JÆ ½ÚÀ³ÝuêÔ)yä‘G$22Rj×®--Z´0ýbcc-Í?sæL3ýË/¿ÌÒ/'Û ¼€0¡/>Ÿ~úé }ü½° 'a»}×ÒD¢k:íÈWPøà,Æ¢(ù´·³J4Ø!a°&1Q¤{w¿!á ?‡„‡ "É&vx]‡„_b4`c¹ + åŽ3FJ”(!Ï<óŒ{znBÂ7nÜ2eÊÈ€²ÝÞ@ÛÓ¦M¹ùæ›åðáÃæñš5krTIø…^0ÓÏ;—¥_N¶@x#$ aâ³Ï>“*Uª|~ñâÅR·n]ó‚¬Y³fÒºukY¿~½¹•…~Kíî»ï6ßàt{ýmÏñãÇÍ4­ìâ ïܹÓïügΜñšÞ¥KiÒ¤IÀõXÝ>á0„‰ìBÂ>|¸yA6cÆ ó-³¤¤$sK‹~ýúÉ‚ $::Zn¿ývs ‰@/ûôé#;w–Ù³g›ú 2}Q×»woÙ¸q£,Z´Hn»í6Ó÷ùçŸwϯ/Tõ[bÆ 3/,û÷ï/îo¹Ú¾Bw>ÉYùöÐ\N²PÚÒÅÙ2Ó‹¢àÀÇ;ÆúŒ{Òð‰ÕŒdGCÂ#G ?üðÃîðýâ? \ÙÑMؘ+$¼téRS„ͳiÖ7,;uêT“¥Ð°ìçŸn ¸iNÃ%%%EJ–,i ¶iUÞôôô,!a}vïÞm¦uìØQV¬X!iii²cÇY¹r¥×öú ëüµjÕ’»îºKdÆ ¦Ø›ö{ýõ×ýÎÏ=÷ÈÞ½{åÒ¥K2þ|SyáÂ…×cuû„7BÂ&² +·¨ð¥aa}\/æ†ê5½k×®&ü{ùòe÷´~øÁô}î¹çÜÓzôè!õêÕs?¾xñ¢ O˜0!GÛWàâFЬoN˜5ÔÒÕ„¿[ÄXß̉®É8°' óû²— 2bDÀp¤£é-õýªø 7u4îÑ;s…„ý5 Àú†eÿøÇ?š;3ë4ýWs'NœðZæÄ‰Ý}´À›oHØ_¥Ád­JìZ¿>?jÔ(¯eªlüÎ;°>×´iS“;Ñ@¯†5í9¿æB´åÊ•MÿÈÈH™>}z¶ë±²}Â!a($ßÿ½¼õÖ[îö /H¹r弦y~cK áê·ÄôEèܹsM­ìïÅ\jjª{ZFF†y!¨·ˆðtãÆ ¯JÂÚ¯lÙ²&P¼|ùrw«S§Ž×·ãÂ.$œºÙd=à —âY×”q( Ž­r†ìÓ°#BÂ`V4(`H¸ãÏ!a¥•‚µb°¿p_FÅPff¦¹ ×µk×öÑâlÚG39í£Œ5P¬ëÉ Íwè]¤]t¹º|Ïåh8]¾ëyÍtÛr»} !a($ú .½Õƒ«é7¯J•*å5íÎ;ïôšÇ_÷Ô©SòÈ#˜oyÕ®][Z´haúÄÆÆzÍëï_z; öôÓOgyéÖ`±>Ö[f4lØÐ« 80èöÞ+ôt‘Û‰ìÂÉ–_.&‹¬¨ ’¼„±°; ÒkÈîÒ Æ€ýkrÞ,þÂÚÆ0’Ø!a®R¥JÐ>þB¸mÚ´‘›o¾Y>l¯Y³&h%aÏðõë×¥dÉ’Ò£G¯¾Z•Ø3$¬¡a­8<`À€o_¡9üšÈòHBù~âF‰lhEZ»ÓÀ·†ì~L`,Ø!a°Foø_ÿe)$üº Oc$° BÂ&¬„„/^lB¸ñññæ±Þ2BÏœ9ÓÝÇÞ¹s§×¼þBªmÛ¶R©R%S‘Xi xôèÑ^!aÕ©S')]º´œ>}ÚòöW…ÛCs9±òÛÙ8g8ëÔVÆÂÎ4L¯Ç1å#Æ€ýë4l!$¬÷š ^À(`„„ LX §¤¤˜Ê¿QQQrîÜ9¹råŠÔªUKîºë.IHH 6HË–-MP÷õ×_÷š7PHXç)Uª””+WN $ 40 kßÉ“'»ûíÞ½Û¬»cÇŽ²bÅ IKK“;vÈÊ•+nŸV$.p7®8+ÛnéBuÛ‚¢cÿ8ã`w„ìpý€¢/›ðÔ©SM·A8$¼ŽQÀ6 @˜°V'N4•5Ä-ï¼óŽ ëã¦M›šåh·D‰²téR÷|BÂjË–-òàƒʽ÷Þ+¯¼òŠ©*¬}uO[·n•Æ›ç´évŒ5*èöü@F‰¼_ÝY#y‰sÌ eÛ[tM‘oæ3ìgi„È·o2`E6!á9sæ˜níÅ@¸®£%1ŠØ!a°¡Ë—/Krr²ddd˜Ç7nÜãÇ»Ÿ×éú|fff®–¯Ác ù~ðÁ~Ÿ?sæŒ=z4àò}·¯Àœå ¥næ$)HéDVTp†…a_kê‹ìŸÄ8°çõëÀƬ°Nstk"þCÂíôå?£€m€bîÛo¿••+WJjjª oܸQZµj%õë×—ëׯÛgGÍu„.ã †CD>nÇ8ØÙGmEâgØ!a°nÆŒ€!á?‡„÷8ºEŠÿðFaàØ1‘M›D9xfÇvõ*ç1PP @1-åÊ•3•ƒË—/oþmÖ¬™ìÞ½Û;™.²o<·/ôwa«DÞs¼¬¸t‚±°«m}Eb1ì‡0X7gNÀðŸCÂÑâ? ¬íŒ Ib¢Èر"Í›üÍFMƒÂ !a€dffJrr²ÄÄÄÈñãÇÍc[¸˜,²©£Èª*"'×q Ó+"+*ˆ|3Ÿ±°«Ï¢D¶taØ!a°ÎBHøU þF쑨(‘ˆg@xút‘ØX* SI€U„„ö£Ôƒ³DÞ¯.²¡•Èù$Æ$ìâ¬F {Ò€ÝGmöCH¬³~N‡„ÿÉ %'‹4m*R¥ŠÈ’%"ééŒ ä!a€}ü˜ ²o¼3¬íðk"™¼ ZE8º&ÇÄ®ôçiuÆ€ýè† €5BÂÃ$pH8ž@9qB¤Q#‘V­œÿä!aÈ­Œ«"?¤…²¥IÝ$rþ°3œò‘3¸øY”Èúæ"ï9~m­u¼ 84W$ýç`¸9wÈyŒÎÄ0vtt™óø€ÝléBH¬z饀!á޶lÙ2é-CÂÉŒ À… Îppóæ"gÏ2$A ·4Ôª:Zþ6 ïâ¬R›–ÈyîôxíŸÄ8ØÑ©­ÎŸ9*A°BÂ`Ý«¯ ÿåçðâ? ¬÷œHfPÆŽ©PA$!±€¼"$ ¹E%áü­$|•¯ÚÒž'E¶õeìèlœ3$|1™±`/„„Àºþ3`Hx¢£-ŒŽ–&â?$|‡£¥1‚Èg11""‹1 „„@è|û¦ÈŠ "7®0vsé„3$|>‰±`/„„Àºeˆ„Çk5á?–Hñ¾—Ñ@>KOiÚT¤woÆB…0s‡œAÓ¹ï‹íh°[ݙƀ½hHxÿ$ƬÈ&$í-òYãVd~ríÚ€!á'=ä#­"\½ºÈðጄ!aZ;‡8ì'º¦Èw‹ö7ÒÙÙ þ“£ Û¸1`Hx:£€|ôæ›""IIŒ„!aZ_ÍYSŸq°£õÍ© À~ €u«V ¿íh÷ÅÄ ¿Áè 5m*òøãŒPc€IDAT„!aZgbDÞs¼Ä¸–ÆXØÍ–."¦0ì…0X¤’ð;ŽÖmÏž€!áUŒòÉÖ­Î?S%$0j„„@h¥_Y)rb5ca7ŸöÙ7žq`/„„ÀºlBÂ÷ïÞÈè ŸŒ)Ò¥ ãù0½uME§3vóY”HìpÆ€½ë² ·>y2`H8‰Ñ@>¸rE¤J‘ÕÔ €|AH„^üã"Ûú2v“ð¼È'Ýö¢a­„ÈÞªUCÂo;Z›´4¿á*Ž–Èè è÷ÚkÖIOg, ?¡wø5‘5õ»90EdSGÆ€½hHx ÷ Kbb†„_q´fçÏû ë+ûdFù o_‘ÇgPüdddÈáÇe×®]rúôé°ßÖž={ÊÂ… m»¹µråJ³ïçÎ I¿Â@H„ÞÙ8‘÷/3®¥1vòÍ|‘µöBH¬ .WNê\¹â7$ÜÖÑ.0z± D"#Eââ /_ýµ´jÕJ~ñ‹_HÉ’%Í¿UªT Û í7Ì6>ÿüó²“&M2Ë;zôh¡ïû‹/¾h¶å_ÿúWHúB ô®¤:C©› ;ùn Ø!a°.XH¸J© $|7#€|°d‰H•*"é錊—6mÚHÍš5eÛ¶mŽó?]¾úê+™:uªüøã!Y~bb¢Lžé.òYã`«w#qÎ ÐéÜL€ë¶m ^P±¢ß€°¶AŒBì‘ÈH‘eË /ׯ_—ªU«J‡ÌÿÙ¿¿ôêÕKªU«&·Ür‹<ôÐCròäI÷ó‹/–Ö­[KjjªDEEI5$..ÎL¯[·® ¬6kÖÌôY¿~½™'66Ö¬·|ùòÒ²eKÙ´i“ßuoß¾]Ú·o/•*U2ýwîÜé ¶ºÙ­/жz†„óº?ÆIÇwܸqr÷Ýw›}+²©#ãVè'.BÂU®0$Ü—‘@ˆéŸª4$œ–ÆX øyâ‰'L TªGŽÉòü¾}û¤lÙ²Ò»woÙ°aƒDGG›©\µŠ¯r…Rûôé#;w–Ù³gËñãÇMøuøðáæ¹3f˜*¼III/eÊ”‘aÆɚ5k¤ÿþ‘¥:ïÞ½{ͺxàj]°`Üzë­Y*g·VÖh[=CÂyÝŸ@ã4oÞ<éׯŸÙ?ßÛo¿]Z´h‘e?\óëò»uë&S§N•F™i3gÎÌÒ϶º}0ÈÉKD¢k2vré„3$|îcÀ>LYÛˆq+‚…„«U ÍÈ ÄÆiÛ–q@ñtíÚ51b„ •–+WÎWoܸá~¾GR«V-¯*½ßÿ½”.]ÚT¿U®PêСC³,_ƒ´úœg U—©p].^¼hB«&LðšWìZ¹Øs{4˜¬Ë{î¹çr´VÖço[=CÂyÝŸ`ãäIþëðœÚ´iîiéééÒ A©^½º»š°oHØêöB€$&&ÊäÉ“Ýßaû„µ³qÎÀé5¾úi+zÌNme؇†„×ÔgÀŠ`!áš5†„ÿÀÈ Ä5ñ(J KZa¶N:&\Ú«W/¹råŠ FFFÊÈ‘#³ôת½mÚ´1ÿw…RSSS³ôó Õfdd˜êÀ]»v•åË—»›®[«ézºé¦›²¬[ÿ¾•„ƒíCNÖ—›pN–lœ”~Oœ8!sçÎ5ývíÚåw~Wø×ECÇ:=%%%K¿œl_A $ „-¹þôÓOgÛÏßE1œ„ûö!ôV®\)={ö”sçÎ1ðóJêS;Z!’º™q`„„Àº`!aý#®ø ÿž‘@ií9ý³ÔêÕŒ ¡RÍÞhæJ³Wfõ­Úë¢ÓjÕª™ÿ ¯*ß —k™U«V•† zµºç;sæŒéç[í6XH8Ø>d·>Ûª² çdùÆéÔ©SòÈ#˜@víÚµ¥E‹¦_ll¬¥ùgΜi¦ùå—Yúådû !a |öÙgR¥J• }/^,uëÖ5fÍšIëÖ­eýúõ²ÿ~SF^¿)¢–ÁƒËÖ­[³Ì«ýõ%5jÔ¸¸8÷óÛ·o—öíÛK¥J•Ì¿z±Óþ¯¾úª»NëСƒ”/_^Z¶l)›6m²´}ð¼uœÞÿý|_—þréÝ»·×4ýŒ~ëçöÛoÏÒ¿U«Vî_èÁ^Ld÷‹p‹®)rh.ã`'´ûnãÀ> €uÁBÂõê@pý™ŠUNš»)Uª”ôéÓG®_¿nþ?zôè,ý:vìhrY*'!a ù–)SF t;´H Î÷ÀxMÏ.$ì»V×ço[Uv!áœ,?Ð8iEæ›o¾Y>lkEäœT~á…ÌtWaEÏ~9Ù¾‚@HVBÂ>|¸¹˜Ì˜1Ã\ü’’’dÞ¼yæ[" ,èèhüÔo6ø»XéE¸sçÎ2{öl9~ü¸yN/l¥K—6AÒ7Ê¢E‹ä¶Ûnóº°ÇÇÇ› ×°aÃ̱ÿþáuq´}È*99YÆŒ#ûöí ù²eòäÉŽÒÎWÒ=ö˜T¨PÁƒ]öìÙcŽSÉ’%½*Ÿ>}ZJ”(!Ÿ|ò‰y¼yóf³/^ô»ìì^pÆ–.Ž“îIÆÁNÖ6ùöMÆ€}뢣sÇÈ „ÆiÞœq\~úé')W®œÜwß}æ±ùóÍ?^*V¬(?ü°y,³£Åõ9Í|¹têÔÉdÄ4LõêÕå׿þµ×4-@™]HØw¬®Ïß¶ú†„ó²?þÆIss:M«»¸BÂ;wîô;¿VYöÔ¥KiÒ¤IÀõXݾ‚@HVBÂÊß7'|iXØ·ë"4tèÐ,ý»víjÀ—/_vOûᇼÊÖ÷èÑCêÕ«ç~^C£ö--oeû¿|Á»ï¾kë9æò÷¿ÿÝ|sG§{V„~ï½÷L…á«W¯Z>ÿ #[q#E¶õeìäãv"‰Óöqp!a°Jï<($Ü AÀðsŒB¨];‘‘#O_|ñ…¹¼†Q/]ºdŠ Ž5Êäo–i™m‡?üÐ<ž2eРߦ¤¤ÈC=dòZ‡2}‚ev´¿ÔõhA-.¸{÷n3M«¯X±BÒÒÒdÇŽ²råJ¯y]rµˆ¤œœ6mšÜyç^Y2+û`u}þ¶Õ7$œ—ýñ7N:­Zµä®»î’„„Ù°aƒ´lÙÒô{ýõ×ýÎÏ=÷ÈÞ½{ÍþΟ?ßb\¸paÀõXݾ‚@H(ßÿ½¼õÖ[î¦Wý&…ç4Ï‹ˆK°®^¼Nœ8!sçÎÍRúÜuJMMõš'##Äõ› žhšN×_ä.#¯Àµ¢´ï~ê/)Ë^¿~½ûÜÒêÂÓ§O7U¨ï¸ãS‘0Í%¸e7êþ|,ãÀ>¾[Äï°*XH¸qcBÂÈwW®ˆDFŠ,YÂX xÒ;y׬YÓ}pý·råÊòÒK/yõÓ€ժU3ÏkkÔ¨‘|úé§îç³+ì7qâD©T©’é£w§W[·n•Æú·àŸ—©Ïk¸×“ÛêÎËþ'ÍTiPXŸkÚ´©)À¨^Ýï¥K—zͯù:í¯û¨ý#1ÍIe·«ûŸß …@/*u5½heWÏiú _þB¸§N’GyÄ\|44ªQí£aÓì.vú- þôÓO{M÷ kVÿ_µjUiذ¡W8p`¶ÛW¹Æ³OŸ>Ò¹sgÀÕ2ôJËÚë/†aÆ™2ôú­ýç˜èñ×ùßÿ}¯åZ™wß¾}&´­ÇZÃäÔ5k–ù¦ÊþýûeøðáfÙ3fÌ0Ç#))I4hàþ½å–[Ì·vn½õV¹÷Þ{½¦¿üòË~Ï›@ËvõÑmÖððÔ©SÍ/L} ç& '׉¼çx¹‘~±° ­þÇ×vØ!a°.XH¸IBÂÈwZƒMÿ$•”ÄX xÓ¯9®k×®åh=¹Ý¾P!$ „ V©R%Û~þB¸mÚ´‘›o¾Y>lk¸4P%aßðõë×M˜³G^Óµ*±+$¬C ®0 WÛW¹ÆsèСYžÓ±¬W¯ž×/ úN˜0Áëxû [™·[·nYŽovÇàøƒ©8¬ÇUáèóú îá‡6ß8R4ÓµÊq óÆß²=Kê_ѯû9h`Y§i@Îr†„L`,ì"þq‘˜AŒûÐðòHÆø™ÞåãÍ7ß”!C†HóæÍ¥~ýú4Ú¿[ÍšRßñ~Í_»¹tiù…£¿V™±+ÖM¯%ƒ 2·ÐÓòbÖ,‘êÕ((„„0`5$¼xñb¾ÔгJƒžúxæÌ™î>®ðÎ;ÝÓ‚•—oÛ¶­)eîªúª¡àÑ£G{•ˆïÔ©“”.]ZNŸ>£í+ª\ãéûmý¶ˆVùíÚµ«,_¾ÜÝêÔ©#ýúõó:Þ¾!a+óºúÔ¨Q#à·füyµÜ½NÛ½{·)‡ÿë_ÿÚLíµ×Ìt ˜Ï;×ÜÀß~Z ;vÌ=M?0ô=/QŒÝ¸"²4BäÄjÆÂ.LÙÒ…q`~·¶À… dìØ±R¡B÷m«h4-ÔMÿ~µjÕ*.º ׆¹ÿ~Æ Ÿ¤aÀjH8%%ÅTþŠŠ’sçΙʭµjÕ’»îºKdÆ Ò²eKó¡Í믿îž/XHXç)Uª””+WÎT…iР<óÌ3¦ÿäÉ“M —êz;vì(+V¬0!Ð;vÈÊ•+ƒnŸV®-Ч††uzÕªU¥aÆ^màÀ^ÇÛ7$le^WÏeùòäuUþë_ÿ*O<ñ„©(¦\5Ü}ï½÷:^ˆºŸÁBžcñÓO?†7½üWs»Hœ.òq;Æ€}äСC¦Ò§o˜¯B…›¤~ýÚ4–§V¥JÅ,×—éÓ§sñ¹Ò´©³š0 `ðI*¬†„ÕĉMå_ý@&::ÚT‰Õ °>nêx%¥ËÒ0o‰%LÕX,$¬¶lÙ">ø  оòÊ+¦ª°ö×ù\¶nÝ*7v¤Û0jÔ¨l·¯( 4žZ…¹L™22`À€l·oHØÊ¼®>z«Ï@üyU½zõäw¿û´jÕÊTVׯ_7áðG}TÊ—/oÂÂÁö“0rmûý"ñ3v¡a»5õöºnF1–œœ,5ò¨òYQ¦Lù£$&®+Wv9zì¥Ñh´<·„„¥2rd?‰ˆ(å¾ÞPQäTZšÈ/~!ÃX@Aá“TÀ†._¾l>ÎÈÈ05§ÇW9rÄ<îÞ½{–ã¯ÓÇgi?}—MH–œÚê oݸÂXØéx]£"› $ŒbÌõG`mZÝ“ð"F+ˆ–°Ô}í4hc`ÙÈ‘"C†þv´iÓÆd-¶mÛf ¤}õÕW2uêTùñÇC²üÄÄD™)[¶¬ôîÝ[6lØ ÑÑÑ&ÀªáYן]×>}úHçÎeöìÙæîÝš>|¸ynÆŒ¦Â¯•‹—2eÊȰaÃdÍš5Ò¿S`γòïÞ½{Ízxà–]°`Üzë­Ù†„ó²Î`û2oÞ<éׯŸÙƒÛo¿]Z´h‘e¼\óëò»uë&S§N•F™i3gÎÌÒ϶º}ù-=]Dc<*ˆã˜;ÏU (!$ äVÆU‘ŸÒBÙÒ8^ n9ØòÐv¥è|%çÂ… æ›Vžß,Šm}E>Ë8ØAfº3lGågvAHÅ!aFHØÅ²e"Uª„Ƕ\»vMFŒaþ¾Q®\9ŠÕ;C»ôèÑCjÕªåUiXï]ºtiSYW¹¯C‡Ͳ| éêsžaW]¦V×u¹xñ¢ ÄN˜0Á=MC²ZµØs[4”¬Ëzî¹ç¼ÖáÎË:³ÛOö]‡çüÓ¦MsOKOO— HõêÕÝÕ„}CÂV·/?iæ»{wç¹¹j?§(š ¹¥¡V #Ð ®­rüF^S_dSG‘O{‹Ä98Kä¨ã•ä "7®p^áJÂús {Ðkîw‹ö@HŘÝC«VýUÆŽænß|ó¾,ZÇcLHÀE á¶m^Û¤ÕkëÔ©cþÎÑ«W/¹råŠ ´FFFÊÈ‘#³ô×ÊÃmÚ´1ÿw^Sý”Fö ìfdd˜ Á]»v•åË—»›®[+õºèÝ©}׫áì* çeÙí‹ÒÀï‰'dîܹ¦ß®]»üÎï ÿºhèX§§¤¤dé—“íË/º»­Z‰4m*’”ÄÏ(Š.BÂ@nQI¸`* §%:ƒÚ4 ¬¡µSœÃCD68~[¿_Ý Yá|¬Ï\'r-ó‰Ó!ÿÓ[œLžû̼à}ÿý÷‹ÇëÏ¡þ\†¸â·¾9ÐojnܸQ–-[&Ï>û¬×›`oÌB© ÖS`Ö7w^OÀÎ"$Œb+!aßgví¥—Æ !ÓÂoZ‘·G»-·ßþö?„pþï/!a€ÀªW™3'<·M?ç-Uª”ôéÓG®_¿nþ?zôè,ý:vìh X©œ„„5è[¦L0`@ÀmÐÂW:Ï<à5=·!a+ët ´/úYüÍ7ß,‡6µòrN* ¿ð fº«¨—g¿œl_¨¥§;CëN#N„b€0€¢)ý‚34üY”Ȫ*"Ë#E¶tqV3ÕéiûU‹µz1UœÃ³šôÕ³EúMNN–1cÆÈ¾}ûBºÜÄÄDSY÷ìÙ0¿31ΗV‘«W¯J… döìÙîi›7o6ãzñâE¿oFòk||×k{z½$$ À.4LHÅ!áâ×®]‹“?ÿ9JÊ–-ã÷øT¬x“DF–!$œ‹¦Õ–ÏÛ.„„ €ÐÓgñ ‘¸¸ðܾŸ~úIÊ•+'÷ÝwŸyܪU+S5×Óùóç¥bÅŠòðÛÇÁB‹/6ÏÅÇÇ»§uêÔIJ—.-§OŸ¸Õ«W—_ÿú×^ÓônºVB¹]g }Ñ»úê4­ìâ ïܹÓïüZ ÙS—.]¤I“&×cuûBmüxgh=)‰ŸM„„}Z¹ôØ*‘=O:«cºª ÓìÑÖ5ÙÖWdŸãUÚ‰Õ!¯D[Ôø~;0lhè[gêæ-RoI¢ûºhÑ"ËofÂv|ÂVaOxžq`„„QŒåGHø‘Gî•wÞù߀íË/WJA†LWÈÿû¯¸Û¿þõ‰ç`æŸþôh–p›6MeÍš—%9y­dfî1ýΜÙ,»v½-Ó¦=.íÛß!={¶BÂYÛºus¥U«&R­Ze³}/¿<.`_ÎEB ÷4¬!áp¨ÚúÅ_HTT” º^ºtÉø5j”ù[‡Þ½V}øá‡æñ”)SL€8%%Ezè!‰ˆˆC‡™>ÁBÂÚ¿dÉ’f=ZE7==]vïÞm¦i5â+V8Æ"MvìØ!+W®tÏ窼ۿs7ÝiÓ¦ÉwÞi¦=÷Üs^ëð çvöEç¯U«–Üu×]’ 6l–-[š~¯¿þºßùï¹çÙ»w¯×ùóçK‰%dáÂ…×cuûBiófqG‘>âçÅ!aÅÓ…ï¨$î•„LpV}þn‘3à­•M5ར‚3À˜R¸¯Øô[x­[·–ÔÔTó"»FŽ76ί=ÆÆÆJ‡¤|ùòæEò¦M›²ÌàÀ3ÿ–-[¼¦[™Wñ}ûö•Úµk›o*ê7·mÛf¶©nݺæEµÞâD—¿~ýúðù¹‹®)’¼$$‹Z»v­ÜvÛmf_ëÕ«göUÀ®ã’öó»KÏ7ÙOvcì˜û®×õøÇ”éÓ§›m½ãŽ;²šõ[ŸíÛ·—J•*™ut¾W_}µß¥t6°BÂ(Æò#$ýôS÷óÁBÂjâĉæs`ím¦mݺU7nì^¦>¯e½síàÁƒM¸VŸ×ÏŽ9b©’pn×l_ÞyçÖçš6m*Ÿ}ö™ ôêö-]ºÔkþ2eʘþ:–Ú?22Ò|VžÝz¬l_¨\¸ R§ŽÈ!üL¢x!$ °­F«U¡µ²°†µ2´>ÎL/ðMq½xíÓ§tîÜYfÏžmn·¡·îпÆ 3·ÚÐoøé· }+×ê‹gÿý÷ßwO³2ï¾}û¤lÙ²& üÖ[o™ë¬Y³Ì·ñöïß/Ç7Ë1c† Í&…Óý1>n笇6ßÚÔ}9r¤Ù×Ï?ÿ<Ë› ÏÇÁÆÇÊØ:æþÞ̸ëò4û¾Á+pŽÎ5€=F1n!a­¬ºyó?Ì2ž~zˆ¼ð¯Yÿ,Û¶½!ßÿ‘ä¶’°V{u5Õ[õIOß-±±o;^7þQ&O%k×þMÎÛží~ܸo–3gÎ3f?ÆŽ&¯¼ò¬¬^ý’ãõø{f¹æ=tè}Yºô/Ž×s#å¹ç~/ï½7C¾þ:ZòÈÔ Á÷ÜÓÒk¼:vl•çåêqѪ¸/¾ø´<ñăæ_}|òä)Œp^Ç/'ç ã1c{mßcõwŸG‡ãs1cl=®4ÕŽÿû¿6•½¯\Ù•¯ç3!a*úñgÇŽáµMúÙnLLŒ©,¬•oÑî™3grµŽË—/›JÅ^ÓuyºÜÌÌL¿óiq*-^Uë äÆîÏÅ•.W—ï¹ 7»ÆHŸ×ÏÙ¯]»–£õävûrbüxý»zxT´ !a€=O‰ä m¿_äÒ‰]½+:tèP¯é=zô0•m=_ kØt„ ^ýü…„­ÌÛ­[73ŸLýÑà«>ïJ îÖ"ZQY÷U¿è{\ü…„ƒ•±t̃­Wo§råÊ3MƒÜ:M·AuíÚÕ“õMšË?üà÷V1.þqgÅn°WHø|cb'\BÂ2Ôdùòå¼–åÙn»­äWÈÔ_Ÿ/¾X*U«Vʲ·Þz‹8°<ྫྷYó²4hP;à~hû̧áã‘#ûùí¯U5þô§G%##>×ÇIܾˉy+×ËÓÊ“&=–¥2±«ED”2Û,„Êp^Ç/§ç .+Ø1Ö¦ÁòÜìK^ÇÖßzΜÙ,wÜÑ8˲š5»UŽû!?Ÿ €PëÛWäñÇž„‘ˆ‘Õ« ?„„övrãU\‘÷«‹¤n.°ÕºB žßÞÓoÄi•_ ._¾ÜÝêÔ©#ýúõóšß7$le^WŸ5jdùÖŸKX‡„µŠðÚF![\¨BÂV›¿cžÝz;æî£ßöÔi3gÎ4ëÔ€p§N¼–£ß ‹J¦ˆlêÈõ€=¸B§¶2(vÂ!$|á¿áEÏ[õtHøŸÿœ.¿þõÍC‘$MN^›e9;w.t¼.,ãÕ·R¥òÒ¼yC¯À±o¨2%e£Ô«WËk>=&5jü2K•ÚܧeËfz-«iÓú¹^VZÚVs<|ƒ«MšÔ5ÿzNÿÍoêÉ?|*ùÎëøåæ̯p(ÆÖw=«VýUZ¶lp; èêw\r{>ù¡Q#‘¹sŽôt‘víœÕ¬ÓÓ?„„öwõ¬³šðÒ‘£Ë d•¾¡P¥áQVµjUiذ¡W8p ×ü¾!a+óºúø.ËSX‡„“—8C\éB²¸P…„­7ÇÜêzÕO?ýä §¤¤˜ÿ?ýôÓ^Ë «ðº¦\[Ø!acù~晡²uëÿùmþæâ‰½æ¯\¹‚ éþë_Ÿ˜ê®Gެ•%K¦ÉŸÿ%þå/+™ph·nwɬYOÊïß×+,ªmÔ¨Y–3dHÏ,aãÌÌ=îç5Xüù䃹ZŽï1Óêå˱^}®^Ý%¿úUU¯õÅļ•/Ç/¯ã—×spþü¼Öÿ·¿ýw®Ï×P­¿ŸÉ?þq ×Ïß-·üÊëù½{—dÙÞܜτ„@~Ðp°†„Oœ`,Pð‰Œ)ìàÂDHP´|>ÖÎç P Àh§N¤téÒrúôé óû†„­Î«}t¾ø}~ñâÅæùøøøð;67®„4Ä›p ñ±2ö¡ «¶mÛJ¥J•äÔ©SÎá¹qCF!a=Fïñ2€MF1VØ!áÿý_ïê¶Ã†õÎÓºC~å•g³ô¹v-Î]‘ÕÕvízÛ«O§N­½žïܹ|ñÅÒ ûð ðšgõê—²ôiÞ¼¡ûù®]Ûæê8uér§×züUfÎMEâÿþï‡ýöÓŠµžýt?óãøåuüòz†2$ª±õ]O¿~ïâ½ú<ð@7¯>Ÿ|2?Ëzrs>%+W®”ž={ʹsçBÒÏîûY˜û:gŽH… Z0‰ó+-M?—iÞÜùÿp“‘‘!‡–]»ve›1 ‡mÕëÇÂ… 9±lˆô è‰鬂z>)ßV(0º{÷nS½ªcÇŽ²bÅ Ç Í4Ù±c‡yÃåÉ_HØÊ¼;wî4Õ©Zµj%111’””d^„mß¾Ý<Ÿ’’b–eÞÜ¥‡Û;­õŽW߉ÓC²¨Ü„„•±uHxÆ RªT))W®œ 4H4h Ï<óÌÏ·9ž\¸Çéè2gàNƒÝî £Ëðcõw¼F}Ñoó÷Á{xÍûöÛ“%BÂþúø Ú.]ú¯ç/žê7­áJÝß ¦¶ºzõ1¢Œ7Ì«yV}mÚ´~®Ž“Ïõ ~o®–ã{Ì–,™æ·ßòå3½úÝ—|96y¿¼žƒ¡ ‡jls3®þB¹9Ÿ @ñ¢ŸGy¾glܸ±Œ;6<‹Y`åó:+óY5iÒ$3ßÑ£GÃj¿óc_ó**ÊÔ  {>,²i“ˆÖÖ:xFûwÛ·OdÉ Å‹´j%R½ºHbbø]³¾þúk“ûpÝ!Mÿ­R¥J؆…µè™oÁ3Ïß#š}¸å–[ä÷¿ÿ½|ÿý÷ü’ 3„„EOfºãAGgËÌŸl°7P[·n5o¢]/†´Zì¨Q£¼úø [WÃ¥µk×v÷©Y³¦W˜uâĉf>}.:::¼Ž¸·õ É¢r6>Ù}¨CÂjË–-òàƒʽ÷Þ+¯¼òŠ©*¬}tþB¥A; ÜiðÂݵ4ç5+u3cb'?BÂóæM´ÁÚÑ£ëÜ·œsµçŸ™ãåø³@ÛûÏN÷ê7bDŸ|96y¿¼žƒ¡ ‡jlCÎÉùLHÈ ÎNŸ>Ý}÷B}ߦí?ÿó?åÈ‘#yZ¶¿ Na ´=¾!ÉÂb‡d8ò~ýõ×Í4ýÜÊSll¬tèÐÁTnÙ²¥lÒt¦‡'Ÿ|ÒÜ=Ó—ÞÕó?þã?ÜÕ}³[ÎâÅ‹¥uëֿ󳍍(©Q£†ÄÅŹæfÍš%íÚµ3ó7iÒÄýœç¼iii^Ç:%%Ežzê)©[·®Ô«WO¦L™âU,Èß9‘Ývúžÿºn]¾>nÖ¬™ÙŽõë×çyŸ÷ïß/ãÆ“»ï¾[ªV­*ƒ6ŨüÓÙíg^ö5/®\q}5Ü›íÓ¶­³¬V^¶LäÄ ~ß ÷ôr ç”†…/\ŸíÒ<€þLëÏ^°l€^zõê%ÕªU“[n¹Ezè!9yòd¶×¼\“\¶oß.íÛ·7¯s´ÿÎ;³ +­¬ëóÝì®e¾ëÔu[uY¯¾ú*'sm1ƒï>k:oE^Èô…O©R¥ä¦›n2›ôGÅŽVxÖ —†…‹9ý£H¹rå~þ`¾¼ûúîÝ» ãôçEÓ©­\CØ!aS…ž3ç¯yo»­AŽªädHøÄ‰ Ž×âÿÙꇶ?üð©¥íLHX*¥KGø ¿öÚD¯é¿û]ɰ6 xz®«lÙ2rèÐû9Z†ï1<¸»ß~ÿõ_ƒ¼úÍœùD¾›¼Ž_^ÏÁÿû¿?yÍÿì³Ãs}¾†jló+$lå|&$ äLß¾}ÍûË¿üå/Ž÷'Ì] 5ðÒ¨Q#nùüóÏs½l»†„C}ks« 玿p—Æôó«+šìü™VÉ.S¦Œ 6LÖ¬Y#ýû÷7Å<«S¾ùæ›fY‡µ¼«‡®]»šþV—ã:>}úô‘Î;ËìÙ³ÝÛ·víZó37þ|s·Ö—_~YjÙÐÇÖõX×Ó­[7™:uªùùt¾Ÿp>+Ûé{þëçÀÇ7g̘a*xjñ¨¼îó¼yó¤_¿~²`ÁóÙâí·ß.-Z´ð{Ng·ŸyÙ×¼p\Lè7XØW/ƒ9û9.­aWõö¦çSd¤H˜üJu{â‰'ÌÏ£gý}¹hß¾}R¶lYéÝ»·lذÁ\ô­A`×ïÙ@×¼\“ÔÞ½{ͺxà"ÖkЭ·Þ4$¬aç%K–˜åé”=Y¹–íÚµKJ—.möW¿¨²hÑ"¹í¶ÛÂêõmZuEÇ+¨ña±9.\0ßÜòüvW±³¦¾ãÝàtÎMqÞ‚,99YbbbÌ gßoó*BÂì„0Š©Â §¦~,UªTôšÿþçQÇkš=R˜!a aúE}¶C‡öʲœãÇ×ÜÖ¦Më{Íòä3=-m«Ô¬YÍë9 ¾ZÎùó;$##>WÇê§Ÿ¶I­ZÕ½ÖU©RyyûíÉAçÛ·ï=™+ÞdBÖùqüò:~y=7n|ÍkÞ;îhœëó5TcªpnÎgB€u|ðyM¬á_gΜq¼ö¯lÂ:¹e×p¨omn!áÜq…»^yåSö7¿ùã½mùðýúõèÑÃT¦uѪÀ›0a‚{šVïÕ@ÙŸÿüg÷4ý L 'iÍêr\ÇgèСY¶wĈA߇ O›6ÍÝ'==]4h Õ«Ww.ç;Ÿ•í´zþçuŸ}iÀÎwV÷3/ûšK–ˆc;?#R§Ž³ÏªUü~Aþ˜;×YÑ:!!|¶éÚµk溦?“úå øêï[ÏëG­Zµ¼* ëª5H«Uy³»~äöš¤4<¬•‹=·GƒÉº¼çž{.Ëï­ú[±bEó%)Ï ï9¹–é—J4À¬_ºrùᇲ¬¹CHPô}3_d©ãß{‹p°çI‘Û1áNw'×1ìsÍ"$Œb(?B¿ùM=ùíoÿ#h»pa‡{þ ¼+±jëÙ³™þÑG¯Ê_ÿú´<ð@7J,¨°¶.]î”wß&Ÿ~º ËóZqÆ_ÞÈÈ2r÷ÝÍMEØ?ž'II«e÷îÅ&tê9ÿí·ßê5_tô‹YÖÿŸÿÙÆ,gÕª¿šïÔ©£¥[·»LpÔsürÚtyúášïú™Œ3XþñçeÅŠYfÝŒnÑÂY5¦F_º—1þ ^óÖ®]ÃÌ£û»fÍËæð|þï/ùòÎëøååÔp¬žžóÞ³M:oN÷%cªpnÏgB€5mÛ¶•_þò—&\ã†Yô5³ Qnîbå–Þ.ÙÝ&<»uY¹Í¸Õíñ IæåÖæÁ¶ÙÊ-Ê]!©””vÕíÐÔ”)S²hñ¶zëõ¢ÆîÒãìºë¥à=edd˜ð¯†·–/_înuêÔ1U!=iÅI­4é¢ãÿ«_ýÊV­.Çu|ô\ðõî»ïº+fêyá+PHØ7®a:×ùâÛ/'û›]H8ûì¢c¨ËçÎkújÅÍ`ç´¿ýÌ˾æÅøñ"Ý»ûNCÁ*8««4 ä•ãGHÚµ |.&ý"…þÜéÏf¯^½L%wýÝ)#GŽÌÒ_¶iÓ&ÛëGn¯IJïŽí»n_rýÑíxøá‡Ík£Ž;Ê_|‘£k™n›„;uê”í:‘;„„Åç½EV×¹–ÆX¶”œa®K¼Ó kïW'pÀ> £˜Ê°•¦Õ_]ókÅÖ±c‡e Zú¶òåËIA…„5úuÀí(Uª¤¼úê¿c¡¡Êìöý—¿¬ä7`›£ådWéYÏ­¸©ï½5<~éÒ¥€óZ–ž:ýË/¿ÌÒ/'û›]H8û|êÔ)yä‘GÌ5§víÚæÜ×¾lÏn~ßýÌ˾慆2Ÿ|2ëôeËœá¨(g€ÈoZEX« ¯ Ã:Yú3©¯+ôgR¯%®ŸOtõwbµjÕ²½~äöš¤wDÐ~¾Õ…ƒ…„]¿³µ:rwǽ~ñÄó‹TÙ]ËôË úøé§ŸÎvÈB€âAÃÁÑ5E>éNP¸°Ý¸â lïŸÄX„³5õE¿Æ8°½cÀ·o2(vÂ!$ìjqq‹LÕR­ôêÛ_«©jeׂ k­"«HÏé Ö1UÅèÑ¥cÇVò«_UͲº_£F #GÖœ_+µöíÛI*T¸Éï¸5hP[~øwríZœä%$¬íúõÏdúôÿ’:u~ôXUªT^î.Ë—Ï̲Œ;JÛ¶Í$"¢”×|Ø<Ö »ÕJ¾û™—}Í Ç ,Yâ=M‹¬k@XÃÄQôò¦κp!ü¶M.K•*e¾0sýúuóÿÑ£Ggé§•zµbv×Ü^“ôš¡óé—…úÈL{ï½÷,_ËtõËú;Ù“þ.'$„„ÅÇ Î °¶” "ÇV8¦íùé ͳ¥IÝ$rÞñíbrþ´ÏŸYYÉñ¯ãûŸ1æ¡|õÕWæ¹BC²ú˜ÍÌÌ”GyÄ<>,X`Ú|ôÑGævtt´ ësŒ~C«ÝïÚµ«ÜçÌ }NR®JäzuO?ýÔTê¿ùæ›K]UÀõwDûüÉ'ŸÈÿýßÿ™Šòúœ;vTè¹Lçkõd J1ÂüÒjñÚN÷ƒÊ!$ …ù"_ ù0Läß3Dö½O%áÚª$üIg+̺~,•„«ò¼}»Òª’½e¼HLˆô={a—Ïû‰¤Œãy@` $Œ EH˜0!a vhµ; Áœ8qÂv¹hô5sRR’¹í+ÄS‘Kzû{™p_ûògýŠôG•®lŸUy—(/k}WÈIË®­¿ý««ìBÂêÝwß5ó5Xæ’˜˜hªöº>Ñjh+ICôíÚµ3!/ µ•TÞvʺ/h•bmïZO+Ekui_ëêm=¿óæÍ“fÍš™e6ŸÆÅÅUú˜µï®Óå;v” 6˜pŸ€cbb*tœ•9Ö õÔSV(ØEŸB7ÉÌäïjׄ VEk­v]ÒÓÓ¥eË–æ1§¡]ý©_Wõ]­Ê«ÕÙ]ÏððpY³f_Ïúœ¤ôõÍÈ‘#Ís¶éÞ½»ìÛ·Ïg%aפ_ÞøÅ/~!Ÿþy…ŸË”®wÿý÷ËÝwß-ýë_Í…t=NT!a@ðHc„Oð®£V}¿É 'ÜÎXT§ÒD>·‚sNAH@à $Œ EH˜0!a v,Y²Ä¼&~ã7J-ËÍÍ5•Xõ’Þ.e…xü½¤·òç2áeíËŸõ+ÒŸ’!É ½´¹¯>û{‰r×úZ ÙS¿~ý¤C‡eîËßK¯Ã¢c¬ç[ÃÀµ±m¯7Ïœ9Sn[ ¹¹îçÎ3áuÖ«l?O:eú¨û¬ŠcÖ0»g[·«Ûwm§*޳*Ï­§ž=E¢£­ßÓҬꭳgó8BíÓêÖ‘‘";ŠäåÕ^?ôo‘~¡H+ kEa_ô±Yòo\M<'i¥a­º_Ê{.³£ábý›­¯»P9„„ €è·‰ô›8úáý« ±V0uÿîHµMƒ§\,rðCÆ¢ºi ^ƒsZQøBÎÓºC0‚!aBÂLL„„€Ú3xð`SýoêÔ©æ’ÞÂqUçkÒ¤‰lÞ¼Ùݶ¬à®¿—ôVþ\&¼¬}ù³~EúS2$|¡—6÷Õg/QîZ¿oß¾fÜ5h5kÖ,S¡pΜ9^Û,¹//½ b4W¨¡àâ§EÈÔÀð!Öï€h¬ECÂ}úX÷WÔ.ý‚ƒþíÕP²Šõ5HDD„ùüñìÙ³ P%‡ÐÒü¿ÿýïËlSò=NãØþɉkiUFí[ÜD$¦øaa>cQòÒE5Ù5­bëiHøó~Œ€À@HAJ? Ó×ß_&%XÊ99 ’‘±Ô=:•,„8™˜ªwjÞ¼‰yþéÒ¥ OÆZZO‹ç4jÔÈ}¹p´2íÞ½{½Ú–Üõ÷’Þ.å]&¼¼K—·~EúS2$¬.äÒæeõÙŸK”ëú—^z©i«—k×¶¡¡¡2yòäRÛ³Û—?—^P1 HñãP$?ߪ&ܸ±HFãgÑppD„æþY»ô5CÆ Íßa×k«N:™/ó ò €CèZ½ô/zyž¶mÛºÿêò+VȶmÛäÙgŸ•Þ½{K‹-Ì›v}#k·¾®£ßºÑoï^yå•’’’b–é%‚n¹åó†W&''›¶ûÛß¼¶¡óo½õVóY¿¥»jÕªrûç['ˆÄíé\îhµí‡4«¢óŠ®ŒEMÚ3Û «À;›´DVE2v!a)×?âtŠý“\dbbª‰)--ÆýÜ3bÄžŒô4,¼sçNó7 Ø^¨Š^ÒÛŸË„WfýÊ\b¼2—6·SÞ%ÊuÜ]—a×eZÐèÌ™3U>&ü7fŒÈ€"iiVXxútÆΤ…õ¾ªqØXÆ£6éß_ýûž””dþîó÷¸ê‡(/$¬aà1ů¤õŸp¯¾úª©Ú›‘‘!3fÌ¡C‡Ê;ï¼c¾YÓ¹sgéÚµtÓõ­X½ôÑí·ßn.}¤Tׯ_/õë×—Aƒ™rýsçΕo¼±Ô·SSSÍ7pG-Ë–-3— qW öÕ¿Z§¡È…¡¯¢Šê¡aÕ˜KD6?ÅXÔ´5ƒDÖ÷¿½†í–qé`âãpBÂJúÏGWP¯M›ŸInîçB€‘‰‰©º§qㆺŸ{ôò½ž´z°F¦Nµ*´j³ €qséýS‹ÏkÅëAƒ¬p;P—‡(/$¬4x«ÿ„ssíhXØ®+$üàƒzÍ¿ãŽ;LøW¿Ñëòý÷ß›¶'NtÏ8p ´k×Î}[¿‘«!áçž{®Bý«q)ãDVt)â]‡#$?d…„5,Œš•—^<ö!"9IþµO/~´´ ã 0|Þ0‚–~ÙÏÖë×ïfÉÊŠBŒLLLÕ5iÕòKÌsŽ~†¡•ÅcÈä9és‰>§Ìš5Ë<Ç*Nez™z­D©U(5ܯŸÈK/Y—®Ï¢f êéÓE.¾XdÀÆœ€08„?!áC‡™Ê¿QQQrôèQÉÏÏ—V­ZI¯^½$--Mâãã¥[·n&¨;sæL¯u}…„uK.¹D6lhþéwíµ×Ê3Ïeg‹Œ'Ò ýû"&¦ªœÂÃE¢¢DÞ_äøqˆ¿òJ‘>} ¨m„„ :uJ233åܹsævaa¡ãQÛ¾YnÓ¹åŸ3BÂV«'$ çý«ŒðWÿmšŒÒÒ¬÷=:Íš%òÉ'TfªžJ»w[ÕT`5w®HÆÖçMúÜ ¨=„„ ÈíÙ³G/^,ÙÙÙ&lüé§ŸJDD„´oß^Ξ=8¢•²4 ¼'Õ‰\¡T¾ßÄxÔ¶‚ã"‹[_ ó &$ ç}ýªïðο˜&„„›¬,‘öíE"#­j€ê£Ï³!!"íÚ‰<õ㵉0¹¸¸8iذ¡©ܨQ#ó³S§N²qãÆÀ8€¢‘­¬€ðžÙœP§Úö’Èâ¦V(áLãá©‹|Þ¯ì6z¾²–2VœOÂÉcpI›è;$üÓÅ 6ˆté"’›ËX@MèØQä?ÿS$,L¤ €ñ€ÚBH EEE’™™)IIIrðàAs; œÈY)ÛܪT çúbˆÈòN"†1Nq Vda¨U1Ø—¸–"{ç2VœOCÂå}ñ‚ !aðkU´Üµ‹±€š2nœÈm·YŸ9%$0P[ †w¼nNã#DŽe0&N÷Y‘•7[?á §s­ Üeì—µ'$ 0o[ÿè;$¼{¦iBH@°ÈÏiÓF䥗 ¨IsçZU„ÿã?D¢£¨-„„ã‡4‘­¬p°N»§‹q]’€°¨±UõY+ Ã9Vö´S¾|nòÀé €·Ô'|‡„÷ýÓ4Ñ fͲªçæ2P“´z»~Þtÿý"ŒÔBÂp¡ÎùqSUNyÛE²W‰Ûm‚­´‚À¢DVt±þ¡­¡E½I{Î %ã]Ÿã¤>î;X·!ŠÐ€À°uÏWàr2Kä³[íCÂË;º¯ÚBH@]·`õ'+‹±€Ú²i“õ\œ-&͘@MãcP}ÎäY—4Þö¿V(¡¨€1qš½sE5¶?7ZaxU$cÀùôùŠ0XNdŠ|ÒÉ>$ánFH@]7dˆH$q@­ÊË IJ™0A$<Ü9};wîœìÞ½[Ö¯_/GŽqìj?ï¼óN™3gw¨2,^¼ØŒÓÑ£G«´-Pð±?¨>¹)Vaûÿ‰kÉx8‘†Hô}¿©ô2 Ýiµ9p:¾ÔÞ¯Á—¶± ÞßÝìŽ; ¨Ûš7yýuÆj[Ë–"Ó§[Aaýìi×®ÚïÓ¿þõ/‰ˆˆ(îÏER¯^=ó³yñ'†… Mÿ^xá¯ù/¿ü²™&¥ Bi¸¸U«V¦Í'Ÿ|R-}{饗Ìö÷ïß_ëãôç?ÿÙôå»ï¾«Ò¶@]ÀÇþ ú¤¿Qù0Ì o}Ö‡ñp* pïšVzþÎ7¬€ 8þYÖžq•—n]ÍÃ.$œ8ØÝìÞ{}‡„ ¸€ç¤ ».]DžzÊúÌIÃ%²®µ¢GÅ}i)_|ñ… ØîܹS&Mš$?üðC•l?==Ý„xsss+½­òBÂ:­\¹²Ôz îå5®Êã®(B€o„„@õùbˆÈšA"¢¬Ÿp¦µÃE’Ç”ž¿w®ÈÂPÆ€ó€ó¯¶ë´~¬»Ù/é;$œ•Å0lš£ÒKÚó%H¨}#Fˆ `ým=?×& °Ú…n«Òßÿþw³={öTz[e…„µúq£Fäá‡.µÞo~ó¹úê«k4$\•Ç]Q„„ß €êóqñ;¼­DV¿ëK}œñpª-ãíÃuÖ0IŸ¢p8BÂpÞþ…¾C©Oº› ä;$œ™É0lZµòqþ-ŽðÒK"aaÖïú¹“~þ”P{ý9{ö¬´hÑBn½õVó»/Û¶m“»îºK®¸â ¶5j”|óÍ7îåóçÏ—îÝ»Kvv¶DEEÉ•W^))))f~Û¶mMµS§N¦ÍŠ+Ì:ÉÉÉf¿ìíÖ­›¬ZµªÔ~×®]+·Ür‹4mÚÔ´]·nÏpëÖ­M¿š5k&§OŸv/ËÏÏ7ëÿñô ë1=ûì³Ò»wo3#GŽ”ÄÄÄR}p[NNŽ<ýôÓæxÚµk'ÑÑÑRTTäqnχ„Ë:nŽÝ×xúÛoWð÷СCeöÙ³­gHØŸs*B zœÉ³.s|¸øÅùòŽ"é“§Ê|ß äg{Ïÿf¹ý|pBÂp^Æ;¾CÂ_Oq7{è!BÂꦼ<‘‘÷ßg,À bc­Ïœrs­ÛZUxP-_„öÉ'Ÿ4!Q îÛ·¯Ôò­[·Jƒ Šû9Hâãã%..ÎG5¸šûÓ¸‚¦ƒ–Ûo¿]¦N*4Ö1cƘe¯¾úª©®›‘‘!©©©r饗ÊèÑ£eÙ²e2lذâ¿W!^Uw7oÞlö{ß}÷™ê;ï¼#×]w]™!á¥K—šåúóü˜ÇÊå—_.«W¯ö Ϙ1C†j¶«ÇÔ¹sgéÚµk©ãw›ö±ÿþ2iÒ$ 7ó¦L9ÿ£gHØ×q+ŽÝ×xúÛoûìÙÖö§@ #$ ªÇ÷›¬ Âéâ7I CEöÌfLœêD¦u®²K|eWÞ:_—€“€óv½é;$¼kš»Ù3ÏP7iuJÏ0 v¥¥YÏËIIÖíåË­ÛYYµ×§3gÎȯýkmذ¡ ¤º—8PZµjåUiøÛo¿•úõ뛊¶Ê4}ðÁKm_²ºÌ3dªÛÔʶ.'Nœ0AÔçž{Î=OéZµØ³/JÖmMœ8Ñk®°VÖªÁZQØeøð᦯« ±+$\’†nKöÓóØ^yå÷¼‚‚¹öÚk%,,Ì]™×3$ìë¸ý=ö²ÆÓŸ~ûÛg϶®°?ý!aP=v¾!×R¤¨À>€ gù0¬t;'É:wÇ2ÎFHÎûêEß!á}ÿt7#$  ®š0A$<œq§8~ܪð>Ûã_‘íÛ‹LvÀ…hµjl›6mL`ô®»î’üü|& •qãÆ•j¯•‡{ôèa~wM³³K_•µdXöܹs¦BðwÜ! .tOºo­ërÙe—•Ú¯†Ëª$¬~øa³®†[óòòLUÜÄÄDŸ!a ÏfeeÉ´iÓÌòõë×{-/¢uѯÎ?tè¹íOHØßc/k<ýé·¿}.ÙÖßþŒ0¨_ I}\ädAÓ@a/O® ÃZQœŒ0œ—ü}@X¯îqä w³ÿú/ß!áôt†@àŠŒyê)ÆœD¿¼¡_âp™5K¤ys‘2ò 5Fƒ¢wÞy§ jÈUCªv•{•†F¯¸â ó»¯Pª*–um³E‹rýõ×{M÷Þ{¯i“““cÚ”¬^ëOHxåÊ•¦MLLŒÌž=Û\5üZ2$|øða;v¬ Aëº]»v5Ë“““½¶íëØ¦L™bæýõ׿¶?!a޽¼ñô§ßþö¹d[û2B z,m#²{úùj´…ùŒ‰“mˆYÑÅ{ž+àMH€ÓéßBÂ`Ys§}HxI+¯/îé?e|…„yù €5n,²`ãN2dˆ5¹huá°0 ™:£½ä’KdðàÁröìYóûc=Vª]dd¤têÔÉü^‘°}µºï=÷Üã³G5ëÜwß}^óý k…] /ÿêW¿’~ýú¹ƒÆ%CÂZùª«®’Ý»w›ÛZI¹"•„_|ñE3_ûªü ûsìå§?ýö·Ï%ÛúÛ? UOÃ1!Åïdv‰d¾/òacâtÿže³’4PòÍrÆ€³íKHÔ™<‘Ïú؇„—ÿ‡µü'o¼AH@Ý“‘ÁRÀ‰4 ¬Õ„=M›f}±#+«öû÷ã?JÆ MÈVEDD˜jµžŽ;&Mš4‘‡zÈÜ.+Ô:þ|³,55Õ=ï¶Ûn“úõëË‘#G|ö#,,L®¹æ¯yk×®-7$¬}ôQv­W¯ž¤¥¥™yž!ლߵ²®‹+l«í<¹ŽM«{Òr‡<ΫwHØî¸ý=v_ãéo¿ýí³Ý¾üéÈ €ª·g¶Hls‘¢‘¯‹ÄG0&Nçªø|²Ä»p§á;p2}žŠkÉ8À÷›D>édNø…WSBÂê"½|½V¦,(`,ÀIV® ñ~~ÎÏ·‚ÃcÆÔl_¾úê+‰ŠŠ2Ó“'OJff¦<òÈ#&4ºà§Rô}ô‘¹mć’Q£FCˆìڵ˴)+$¬í5¬«ûÑ ¶ZéwãÆfžV#^´h‘äååÉ—_~)‹/v¯çªz;lØ0ùôÓOå•W^‘›o¾ÙÌ›8q¢×>J†„׬YcÚ¹*+ϰö¡U«VÒ«W/"Ž—nݺ™å3gÎôÚ¶ëØúöí+›7o6ã4«øìÅ_,sæÌq·+¶;nåϱûOûíoŸíöåOÿ€@FH‚ˆ¾€¹óÎ;½.£T‹¤"_üt½˜MOÿÎ¥á` ˆõž¿¨1!aΧÏSðöäp¢õúÍ.$œ4Ê«éìÙ¾CÂqq %€À%2bãN“™i}îôS¾ÖméRk~BBÍõ%==]Z¶liB¢ ÕŸÍš5“¿üå/^íÞ{ï=¹âŠ+ÌrÂÃÃM×¥¬°zþùç¥iÓ¦¦MÜO¸%&&Ê 7ÜàÞ¦.×€²Ë‰'däÈ‘&ت˻wï.ûöíó«’ð¹sç$%%EöîÝëžçVóæÍ3[×±cGÙ°aƒ ÆêþbbbJÛ[o½eÆF •É“'{õ¡dHØ×qûsìe§?ýÖõµ’²¶-«Ï¾öU^ÿ€@ÆQÀ•iW×_½ 4Èkž~+ê²Ë.“Î;—j¯—¸p½ô§?ÕÑgÀÖ‡a"»§[¿¯.’ú8c–¶)~W\âMÒ²öV5hp2BÂ`9gÖió“^MµZ°¯°V€@Ô³§ˆMPË´ lh¨Èò套 "Ò¦HvvÍöIsIII¦²°VõE°999´S§N™JÅàõ¤ÛÓíÙ®§•l³«i@ åàÁƒîÛÚ7í£g_<³%Ú~Ïž=ræÌ™J·?Ç~¡ýÖ€µë<鲊ö¹²ýœŒÿ¢jú 1ývUnn®{^BB‚<ñÄæ„¯6víªÂï~÷;iܸ±û’ jÓ¦Mîo°yV>räˆùVÔêÕ«ýî7!aԽı†òÒ­Û‡—žÂ™VÙå=OCÂÛ£ÎFH~z>ü‡ïðŽ©^M ¨‹7‰eÀ‰ºt™6­ô|͆…‰ n…‰QûÈ–u ÿEÔþþ÷¿›6ú ¢Ê´©*z¹ Ý—^ÁE/ßpÉ%—˜ù«V­rÏÿàƒL…áÓ§OûÝo^È¡FhÕY –ýôna¨ÈžÙŒK Ѐp|„÷¼•= p>BÂ`Ù>ÉwH8ó¯¦II¾C¯½ÆPû¬ôîÝ[Z´h!#GŽ”D-‡d³=½CTT”\yå•’’’bæë¶õ…M§NL›+V¸Ûëå|µñÜ®¶óìÏ]wÝ%W\q…\}õÕ2jÔ(ùæ›oJõå‡~É“'Ë7Þ(7Ýt“Ì;×,×K#辦N=_áéþûï7“Îå•WÜóÇ'ƒ *µí²úíz!§Õ…íöÚ}]g^hÞO$eœõûé\+À ìž.ײôùÜ2ž±àl„„À²ñß!᜵^MõŸæ¾BÂ<ÂP>Þô§[·n&”¬¡\ÏuFm»zl‘‘‘R¯^=9|ø°isíµ×z…5l¼`Á¹îºëäî»ïöšÿæ›o–:βúíÏþQ9éééòòË/»Ï¹KBB‚<ñÄrâÄ ŸíJ¶ Hgò¬ÊÁ™ï[·H³ Gwqçß,·ÎW~öùy«œ}€S€ó¯ÝìÂq?ó~W,3ÓwHø™gJgòd‘ž=p*­¬!àü|ßm¦M³>Ÿš0/}@UῨÇdõ¬š[PüêOóaaae~SIúîž={JmïÁ,Õ^ó¾Ú»Â¿vmìÚ 8PZµj%gÏžu·ùöÛo¥~ýú¦Ú±ç:}ûö-~ák½òݼy³™§ûQ¿ùÍo¤I“&æ˜÷ïßo–i¨ù¡‡2ŠÕŽ;ÌüíÛ·W¨ßþì•ãëþr¡íÎX+„pú§ðó¡•Öí‚ãÜ9ÁɬҕŸ5 œ<†±àl„„À ¯èb^qS©æzQ_!á`8}/3†³À±²²¬ÏžÒÓËn§…CCEúõÉÎfÜ ²ø/*Ç)vuѯÎ?tèP©u4P›UüŠrÚ´i¦ÍúõëKm/ÛæÕcU…„5¸Zü*uܸÒÕ6{÷î-=zôðZçÀîåyyy^U’çÍ›gnoܸQbbbäšk®1ó§OŸnæïÞ½ÛgË–-Ë·²Ž­¬ý×UóçÏ—îÝ»›Kb<ýôÓÒ¶m[i×®DGG{ϵ ³†ºõ¼µhÑBFŽ)‰‰‰>·§÷«¨¨(S1Z+ëvu<µR³._±b…W{oýÝ®gÏþÜu×]& ®Õ£G%ß|óM©~üðÃ2yòd¹ñÆ妛n’¹sçÖÎ@§>.²æ|%lÙ3[$¶9Ol$&Ä:o.ÖŠtàd„„ÀºŠÇ¢Æö!ᤶ«ø {\ÜFD„u){€s5o.òþûå·Û´I¤cG+,ü "%.ä ¨þ‹ Àq|…„5Īó¿þúk÷¼Ã‡ËرcM@·uëÖÒµkWÓ&99¹Üí©ª kPTŸ8qb©} :Ô]Ø®/?þø£WH×U=øOú“<ùä“òÀO%œ\5z÷Ýw˘_…®HH¸¬ý×õûÕ°aäÿþ2iÒ$ /uì3fÌ0çL«RÇÅÅIçÎÍýÊ×ö,·ß~»L:U>ûì3s^tþ«¯¾jÎAFFF©±×à¯]»’çgëÖ­Ò A4hÄÇÇ›þtëÖÍ’szäZgôèÑ&p¬Ç)õêÕ3U˜/òa˜ÔrÙ:AdU$OlD«Ïm{éüí-ãE>ïǸp¶o–{W²€`tøsû€°N[ÿh» !au…Ö_ÑKØ/_ÎX€“ "òøãþµ-(™=[¤}{ë9~À-®&²r¥^}YdÕ*½ø²þÎÄäÄéôiópBÂÇW¨÷Å_4ó=êž§z¯ºê*S]W-[¶Ìg%áê Ÿ={V.¹äyì±ÇJíC›ÞôÕ»®V¸ýå/)¦‚°Ò}4lØP~ûÛßJ£FLX¸¬q#$l¿zå•W<ÞTȵ×^+aaa^Õ„=iX¸¬ó¯®Ë»O]èù8p ´jÕÊœ{—o¿ýVêׯoª{®Ó·o_ÉÏÏ7ó\rÝG:kU¡Í÷¨Ú­ËÖq­â€¢ç˳ÒÜöèâwÚ=Îv8Ñ ÁÈd,¯ý }‡„ÿý¶í*—^jîߟáXô¢ú~f×.Æœlüx+ì[Q±±"ZGM«Æûúâ;“Ó& N@H€ã¸B999^óûõë':tpß>xð`©p«+$¼nݺRÛ³ kÐV—¥¦¦úloׯ®zKVœ=vì˜4iÒDzè!Ÿ}± é>üðÃÒ¸qc<Öj².8ÖªÉÚþСCeöÇŸcóµÿº|¿*y?ЯÝxj€8++K¦M›V*xî¹=­"í©ªBÂZÖs=nܸRÇÒ»wo÷\çÀîåyyyµsN“‹ß•­î=ï³>V%ZŽ’ÕŸ5$¼¬=ãÀÙ €ÈŽ×}‡„5@l£ukû¯õŸ-HfͲ.I¯U'ε`HãÆ•{¾ÖuµŽ•„™¨$ ø‡0Çñ¬ŒªQOž3o@‰ëlè¾uþ³Ï>ësÜÊê7!áÒ÷ƒ_|ÑÌ× µÒ ½W]u•ìÖ¯ÊùêÔ¾* WWHøìÙ³¦’ôc=VêXô>Þ©S§ ݧªV›]ÑE¤¨ÄW>í‚Ãp¶œ$+LR˜oÝÞ;×:àd„„;}íöÅPû°~á«È¾4ËÕWÛ‡„oº‰!X 1‚q§ÓšlZIX+ j!aŽãzÔ*º¢$üYoŸ«éÛ »pÛ¶ )€ÀÒ¾½ÈK/1´VÚøñŒÔ§¼Ê¿@eîW}ûö•Í›7ËÉ“'eÖ¬Y¦êôœ9sL›‚‚S™ºW¯^’––&ñññÒ­[7³ÞÌ™3ýºŸ:tHêÕ«'QQQ¦:±nÓ®½]»’m>úè#s;::ÚuQ£FIHHˆìúéú+Ž k88¶¹È™<ïùÙ V(ÁGÕ28˜Vþf¹õûþÖy,8θp.ýb!aÁLŸÿ†Ú‡„×ö¹ÚÏnnÞœ!8ô_1!!"³g3^xA¤OÆj !aŽCHÕy¿zë­·¤Y³fæ÷ÐÐP™WÝÅXN‡>³ëôõk>WÓËñÚ…„/âC$#Ãz“˜ÈX@ XºT$4T$?Ÿ±€šÀGþG+¼æääHQQƒ*ã¦-,,”={öÈ™3glÛêòƒºoŸ;wN233+tŸ®!²í%Æ)í,~G¾¼£õûÉ,‚wœ0€`Vp\äóþö!áÏ~^æªQQ¾C™™ -€À0a‚HÏžŒ’qãD†So j!aÕãÜi‘w0Õõ)o»Hö*‘c»­pŽNùÎ,7uòäIÉÉÉ‘¢¢"ŸU!õq‘…¡eW—ý0LdÏlÆ*e¾o…J\ô÷ìÆ€sìÏúÚÛ.$œüP™«¾öšïð..$ @hÈì$³f‰´l)RPÀX@u#$  zh€Ôî”LÁ5Å6YÖÞª8»fHÊ8‘¯‹ì_ òCšï ´p¶]Ó¬ó{ Öw ‹, \9IÖùÓ*ÂJ×à08!aÁì›|¿'K›XæªzIG_!áDžRˆ.]DÆg ¤¥YŸAed0PÝ ¨TÞJÂyéV@G' ï+²=ZdËx‘uˆÄGœ¯rbÝÖeß,9“ÇcÇé¶½d7ýY–ï7YçØ¡•¥Q {†¼© Àé Ž¼þ5ÍwH8óƒ2Wýç?}‡„u‚°0‘éÓ$ZA˜ço¨„„µCã‡VZâÕ¬à©þ[×0"ag9–a…¼õ<ý{Vùí³–Š, eÜ™žkW0X+‚ëcœŒ0€`µù÷öa}=÷ã×e®š”ä;$ü§?1´œ//Ïz³r%cæDFŒ` º8ƒVÔÐð†(‘ØæVÀôó~"é“­ùyÛ¬ªÅZ½˜*Î5S!úû-"bE’Lj,jlÒü;ŸzÞVöä~È4ìªMH@ $ XßG­d^Ù£ÜÕwíòþŸÿax8ߦM\®Õ´i"-[ZU…Õ‡0Ày ó­pꦧDVt9_e˜©æ' kèà›å"Exw–2NdípîËì³>Öytýžú8cÀÙ Fú%>}Ïd÷Z>ù¡rWÏÎö~ê)†€óia}sü8cÆõö””ÚíGQQ‘ìÝ»WRSSåäÉ“•ÞÞ¹sçäÎ;ï”9sæ8bœÖ50 0ßK%áš®$|òÀ…Ÿ/ *ìxûm Ó·Ä•V‘v†À© Fúe>__ªôóJ¾B£G3¼œoút« % 0ésøoÔξ5<;yòdiÚ´©\tÑER¯^=3ýâ¿}ûö]ðv Íö^xáGŒ±¯þ¼üòËf~XX˜Ø”sÖñiÕª•ióÉ'Ÿpg!aPõb›‹ì_À82­¬aoõÅ‘ä1Œ gÓ@\vã ¸üëo¾¯ ’õ±_›¸ì2ûð A /ç?^¤KÆUT”Hddíì{È!&üÚk¯IVV–œ:uJ%<<܇·lÙrAÛ ´°N+µ4 îå„„ÀFHT­£»¬P± Æ"ížnU¥SZExõÆ€³éßž½sÁ%õIû€ðâf"Ç÷øµ‰¶míCµõϨˆ!CD†g Pi6U?‹ÊʪÙý.Y²Ä„_ÿüç?—Z–““#Íš5“Ûo¿ý‚¶H!áæÍ›K£Fäá‡.µÞo~ó¹úê« u!aPµ­´‚ EŒE ;kÇÓ¹"iÅo?ïǘp6B‚Ma¾Hâ`ûðÊî~¿¿é&ûp×® 1çëÓGdÂÆU~¾Hóæ"Ó¦Õì~{öì)—_~¹œ8qÂvùĉM86))ÉÜž?¾tïÞ]²³³%**J®¼òJIII1ËÖ®]+·Ür‹©>|뭷ʺuë|†„“““M ævëÖMV­Zåµ¼¬ýø³~Eú£!áÖ­[˨Q£L(úôéÓç%߬ÿÇ?þÑ+$¼mÛ6yöÙg¥wïÞÒ¢E 9r¤©¾\’ë84pýôÓOKÛ¶m¥]»v-EEEÜñFHT­ôÉ"+¸¶WÀËM±&?¤‰læœp>B‚ñõÚÇÿaÞå÷fz÷¶ ·iÃp¾öíEfÍb g}飦hH544Tî¼óNŸmâããM8öí·ß6·µâ°ÞëçQ5³? ÝjXõw¿ûÏ6_ýµi£Us•+ôúàƒzµÓìÕW_-………îy¹¹¹¦­V#ö4pà@SM×E«kÈ÷¹çžsÏóµׯH\!a­ ¬Uƒµ¢°ËðáÃM%cWbWH¸$ ërÏ ²çq¼òÊ+· äÚk¯•°°0ª 5Œ0¨âwq=­Ê³|‹‹ì|à Ý}ÀËFGH@°ù÷Lû€°N9I~oæ¾ûìCÂñò€ÃeeYï]ÒÒ dú¥ýÂzttÍìÏŸðöíÛM›?üáæ¶+ôšíÕî²Ë.“qZ ÙƒtKVî=wð{ÇwÈÂ… ÝS›6mLe^_ûñw}û£\!aõðÛu5xœ——g*'&&ú kà7«øñ´iÓÌòõë×{-wÇwß}ç5_ÃÏ:ÿСCÜñÄÇý  ßÁ‰ ÉN`,ê‚ÃE¶N $ 0|FH@pÙô´}@xY;‘Ó¹~oæ™g L))Ö{—¼<ÆÝøñ"íÛ[áê¦UlCCCMe^_V¬Xa¬o¿ý¶¹mzÍÉÉ1ó<+ù*»P®†~u^‹-äúë¯÷šî½÷^w;_áZÖ¯H”gHxåÊ•¦MLLŒÌž=Û„5˜\2$|øða;v¬?]·k×®fyrr²×¶}Ç”)SÌ|­Ô  æðq?¨:¹)V0áD&cQ¬ ²î‘o–[ç5?›1à\ËÚ<Îä‰|Þß>$œ8¸B›zôQß!aþÑÀÉ–/ a .Ø´Éú<*1±fö׳gO¹üòËMå\;'N4aÖ¤$ëŠ]v¡×£Gšy÷饺<Ø…ružVç½çž{Êì—¯p­?ëW¤?Ê3$¬•¯¸â ùÕ¯~%ýúõsK†„{ôè!W]u•ìÞ½ÛÜ^¶lY…* ¿øâ‹f¾ö@Í!$ ªŽ†³b›‹0uAÊ8‘U‘"‡ p>B‚ɱ ëu·]Hø«ÿ©Ð¦þ÷}‡„32jÎ5}ºHÇŽŒÔ"“ú)ŸZíl±S§N•C‡É©S§$11Qn¸áiÒ¤‰lÞ¼Ùݶ¼Ê¸Ã† “O?ýT^yå¹ùæ›Í<­FìiãÆf‘‘‘²hÑ"ÉËË“/¿üR/^\î~ü]¿"ý)^³fiשS'÷<ϰVnÕª•ôêÕË„ˆããã¥[·nfùÌ™3½¶í:޾}ûšq üáÏD¾ß\¡M}ú©ïðG1Ôœ+*ªæ*NjFûö"Cj¨&Õ¹sçLP¶Q£F&Ъ\´bïÞ½{½Úú ïž8qBFŽi¯º¼{÷î²oß>ÛʽÊBÖå:5mÚTyä‘r÷ãïúéOɰŽGJJŠ×±{†„Õ¼yóLPXçuìØQ6lØ`B˺¿˜˜˜RÇñÖ[oI³fÍÌï¡¡¡2yòdîä@- $ ªFQLÈ|Ÿ±¨+r’¬sz:—0çÓðöhÆ@pHb^ýŸÖëò HIñ¶¹Ú"8††ÈÆg .™;×ú\J?³ª)ŽÝ¹s§ ÈjÈöBhUßììl¿ÛçääÈþýû¥¨¨è‚öWÞúíOEÊÁƒ½Æ/33Ó«/žagm¿gÏ9sæ wp –UãûMV0áD&cQW˰ÎéiVEáC+ÎEH@°ÈÏYzµ}H8mb…7—™é;$7€:'=]$$„/‚2B€³Uã‹!"Ÿ÷cêšØæ"ÿže…ïô'8!aÁbç_ì‹‹Y{A›ô¾÷^†€séû–„Æê¢×_ IIa,ÑÉ“'%''GŠŠŠ À ¯›PiEV˜”pVݳ¢‹È¶—Dâ#8¿œíãpž§‡Ø‡„Wö)Ì¿ M6nl¾ã†€3¹®Š²kcuQAHŸ>"mÚˆdd0P„„@å}¿É &è¥Q·¬$’<ƪú8ãÀ¹VEP÷ÉYÑÕ>$œòÛ ÞlÛ¶ö!á®]rΔ”d½oÉÏg, ®Ò/„„‡‹´oOP*ƒ0à‚-^¼Xî¼óN9zô(ƒQôR{÷î•ÔÔTsy_<(/¿ü²têÔIz÷î-k×®­þÎi(kaèW.ƒƒi0xõ+,œ2Žñà\úeBÂêºïSEbBìCÂï\ðf#"ìCÂ-[2äœiéRëª(€º-3S¤cGë9ölÆ.!aÀûóŸÿ,]t‘|÷ÝwÕ¾¯—^zÉìkÿþýA7ÎçΓɓ'KÓ¦MÍÔ«WÏL¿øÅ/dß¾}¥Úß{ï½Ò£GùôÓOeÁ‚²cÇŽê盧4HŠº'}²ÈòŽV@˜s ÀÉ ÿ~Û> ÛLä» ¼Y½t£]H¸ys†€3iPL+Kê¾ãÇE¢¢¬Ï«ºt™Íc¨(B€ V!áôôtS777×k~u„„}íËi† bBÁ¯½öšdeeÉ©S§$11QÂÃÃMpxË–-î¶§‹_7nÜX¦NZs,8nUÖ0)êžÌ÷­ó«…5€NEH@0Xÿ}HxUßJ]Õcð`û°N ;牎‰Œd ˜¤§‹Œo…}}–ÅT÷§š¨‘Ô5„„¬:BÂÿûßÍ6÷ìÙã5¿:B¾öå$K–,1}Ô±.)''Gš5k&·ß~»{Þ×_mÚÏ;·æ:ùÍr+˜ðý&uQN’u~Ó^‰`<8—†„7=Å8¨»ò³E–¶³ o|¼R›~øaߺë%ÀiÆ3†q€`uà•„©$ À_„„ H;wN^ýuéÓ§4jÔH:tè )))^m’““åÖ[o5Ë»uëVü"{•×r»pyë( ²juÜÖ­[K“&M¤k×®òÅ_Èüùó¥mÛ¶f›:u’îݻˊ+Ì:%CÂÚV—ÿðÃ2yòd¹ñÆ妛nò Ç–uŒ¾öµmÛ6yöÙg¥wïÞÒ¢E 9r¤©Ú[’?û/ëXý¯ž={Êå—_.'Nœ°='N4Ç””$ü±é‡Þn׮韡«Ý–ñ"†‰Qb¬N:‘iO¶OYƵÛ8˜†„SÆ1ê.×—·ì¦=ÿ¨Ô¦ÿ÷}‡„µB 8Í A"&0@y @Ò@i½zõdÖ¬Y’ o¾ù¦ìð¸.Cjjª\zé¥2zôhY¶l™ 6LBBB¼ªî– û³ÎÖ­[¥Aƒ&4ûî»ïš`®y7oÞlºcÆŒ1Û|õÕWMÀ5##ìW2$ìÚ·îKC¾“&M’ÈÈHsL‡.÷}íkÆŒ2tèPyçw$..N:wîl‚½%ù³ÿ²ŽÕŸñ***g-üz€IDAT’ÐÐP¹óÎ;}žÇøøxÓ·ß~[vïÞ-ÑÑÑæö¸qãÌ1mÙ²¥îLá"I#xPÕUþÖàÉÖ?Š, e<8!auÝοØ„?ü™È÷›+µéüÃwHØæ;“PëzöyýuÆ(!aR¿þõ¯¥}{ßUAhªÑºh%[ °>÷Üsîy%CÂþ¬Ó¿³Îúõëm÷«ÁV]î,V¾BÂ}ûö•üü|3O÷:ÏU=·¼côµ/O¶kãÏþË;ÖòÆëàÁƒfýßýîw>û§•еV?ö¼=oÞ¼š¹#ÝeÄò ªËâZФ>ië®­ÕÅ5t?gÎÎ)PP×­kÖç¿J¾FKJòþç?zÎ&RââŽl€ õÞ{ï™0éàÁƒMU]O¤Ó ¸wÜq‡,\¸Ð=µiÓÆTÙuñ û³Ž«Í•W^i~·SÑðÜmòòò̼)S¦”{ŒeíKHVV–L›6Í6è[ÞþË;VÆËŸðöíÛM›?üáæv‡„·½$Û< ƒ£ðÃg}DÖÝo…PNdVzs/¿ü²¹ŸêtñśljVâþ裪õ0 Í>_xáÛdzë !auÙ± ‘O{Ù‡„¿úïJo>3ÓwH8:šáà<ú~eÁÆ(÷µ3CÁkƌҰaC©W¯ž©D{òäI3?;;ÛæZ´h!×_½×tï½÷º×÷ Öù³Ž«ç6JªhHØ3Ô÷ã?z…„Ë:F_û:|ø°Œ;VBCC¥uëÖÒµkWÓ&99Ù«?åí¿¼cõg¼ŠŠŠL?´â°/+V¬0Ûyûí·Íí k…Ùuð`ªëô¯¹Ó ¡ä¦Tzs®°ãõ>üæ›oš °VÒNKK«¶ÃðNHH'žxÂTó®*éééæ8sss¹ÿ5eÍ BÂê®oãE†Ú‡„}VéÍëÅQ|…„Ÿ|’áà,YYÖû•ÄDÆ(!arŠÕpœVó|æ™gÌ< Ò]zé¥rÏ=÷”¹®gPÖŸu\mÚ·oï³MU‡„}£¯}õèÑC®ºê*Ù½{·¹½lÙ²2+ ûÚyÇêï÷ìÙS.¿ürŸáʼn'š}&éõ¥†CÂÙ V(áp"¤ºN+F¯èbo=ï•ä kµl—×^{ÍÌÓÇVuñ®eU*PM4 LH@]õõû€ðÇá"Ç«dÛ‡„û[†€³h­ }¿²kc”‡0À0`€Üpà îÛ·Ýv›Ô¯__Ž9âs’AYÖÑ6ºÎöíÛm—ÏŸ?ß,OMMõš_™°¯c,¹/ ,–\ß^·n]™Çn·ÿòŽÕŸñZ²d‰ÙÆo¼Qj™V(mÞ¼¹ÙŽK†„¿"²´HQ ºnÏl‘ØæVeïÜJoÎ.$¼råJ3oÒ¤IîÇg÷îÝMÕí¨¨(Si8%å|c­î}ë­·J£F¤[·n²jÕªRûY»v­ÜrË-Ò´iSÓVÇv!a×¾òòò¼KC† 1Å›4ibªŠñÅfÙ¶mÛLeòÞ½{›jà#GŽ”D’º½¶mÛš}uêÔÉl[+&ûÛïsçÎÉ믿.}úô1í:tèàuì| $  .Ke^ÿp•íâê«íCÂÇ3üœ%!Áz¿âñ‘. @Ò ÞܹsM@uË–-&è6tèP÷ò7J½zõ$22R-ZdÂs_~ù¥,^¼ØÝ¦dPÖŸu4¤§}#""LõÛŒŒ ™3gŽ ó©C‡™mh(ðèÑ£RP`P/$$\Þ1–ÜW~~¾´jÕJzõê%iiioB|ºÍ™3gzŸ?û/ïXý/5xð`ÓnêÔ©¦Ï§N2D þøcó˜Ÿ5k–$$$È›o¾);vìà~”‡0€ºêX†ÈŠ›ìCÂUøz¼øm‹mH¸ONgyÿ}ëý €òñÒ‚Ô£>jªkjˆM>øàƒ’••åÕÆDÕ6®v<òˆ{¹]P¶¼u”†o5|çjÓ²eK¯`ìóÏ?ïî›ðÔ…„„ý9Æ’ûÒp­…õvÇŽeÆ &Ä«aߘ˜˜2Ý®’qyÇêÏxiUQ UjEQm£áA´‚ðÞ½{½ÚÖXHxËx‘ÃD óy0ƒÒ~ºœõõ"Û^ªôæ\!a ¾j€÷É'Ÿ4UµµÂnaa¡×cL·% 8PÚµkç¾}âÄ ¶}î¹çÜó4€{õÕW»·§´ú¶nsâĉ^Û+ùxîß¿¿¹½~ýz¿ŽGÃÂÚÞ3ì«Áà’óüé·úõ¯-íÛ·ç~T”„“Ç0êžo–‹Ä„”ë—ö¯®²ÝhØ.$Ü©§€³èÅùð!abEEE’™™)gΜ)³]NNŽ çj{ù³ÎLhÏŽVËÕ¾i@¶º±ä¾4TèYáTçëòŠEŽÕßñÒ~ìܹSRRRL¸°Ö¸ª§OæA, Ž[A”On¬’*®°kÒ ¬†úõqàâ îfgg—zh•ß;î¸C.\èžÚ´iãU)ü²Ë.“qã¼ûªíò* »¶å•W–ûü£•Îõ‹Ó¦M+*.ö·ßê½÷ÞsWQÖªÄü¤ÏO«0ꞯþǾŠðÊ^Uú¥½_þÒ>$ü³Ÿq 8Kt´Hd$ãøƒ0¨˜ Q"q-©"l–¶±.sýÅJoÊŽ•ýë_¶!~»jÝJCÃ:¿E‹rýõ×{M÷Þ{¯i£acmS²B¯?!a×ö]Û²søða;v¬„††šJá]»v5ë$''»Û” ûÓoO3f̆ šªáÏ>û¬œé,²ªòå\!aÏŠÝ%ù kÐ÷ÒK/•{î¹ÇçºG5ëÞwß}¥Ö-/$ìÚ~û2®U×£G¹êª«d÷îÝæö²eËÊ­$ìO¿KÒ0òO°¸Jw5q¢ïpE€§áqãÀ„„€Îä‰,koU’-*`<‚Mêã"K®¶* WReBÂê¶Ûn“úõëË‘#G|®&×\s×¼µk×–vm_ooß¾½ÔvµÏºlÊ”)îy®ðºuëÜóæÏŸo楦¦V¨ßv  7Üp÷A <„„ÔEß|lþ¨ ®B³fù §§s*8G¿~"%>æà!aP> ÖG$®¥ÈÉ,Æ#íš&² ¾UIº’*Þ¸q£Ô«WO"##eÑ¢E’——'_~ù¥,^|¾šÞ‹/¾hÖ6l˜|úé§òÊ+¯ÈÍ7ßlæMœ8±Ì}iØW«÷FDDHRR’dddÈœ9sLȸ  @Zµj%½zõ’´´4‰—nݺ™õgΜéÞæ¡C‡L£¢¢Lec]ÏŸ~«I“&ÉܹsM˜xË–-Ò¢E :t(÷A <„„ÔE_ý·}H8qp•ïªøeÏpL §€stì(Í8þ $ ʦ¡à]¬€p%Ä‚VvÂùPÊéÊ]oº²!a•˜˜hªëjš6m*<òˆ{ù‰'däÈ‘&ì«Ë»wï.ûöíó«’°ÒðoëÖ­ÝÛoÙ²¥;Ì;oÞ<Öù;v” 6˜à¯î+Æ#AóüóÏ›~i»¸¸8¿ú­}ôQ÷zúóÁ”¬,Âù@¹¶Œ'$  n)8.²²§}Hx×ÿUùî23}‡„ÿô'Nç ±®† |„„ P;-òã&¦ªŸò¶‹d¯ÉùRdÛK" C­ð± wÁ,?û|(å‡4Çt+''Göïß/EEE¶ËµZovvöoÿÀ’›[:]XXèr>wîœdff–êÇ©S§Ì|]^‘~ë|]ïÌ™3Ü÷mÿÿìÝ xåùÿÿ Â" „ŸA²DŠ,²Z‚/¶ ŠlE[¬Ö¥U‹ ¿ò3ZÛ‹ö«ˆ—Jý–ÕHY„jØÂ.Â" !˜°T"k€÷?÷3Nz–9É$„䜜÷ëºæ‚3gæ™gž™,“ùœ{â (_¾Ûj=ÅÁ7 <¿†Èñµ7d“B¿û‡@pÈζ®S.d,7 @¨Ò0§SE)&¦’œ–6Ù7ͪb$Þj‡ùë+€ DH@yóï·G_qÈ•œ²ÉZµœCÂO<Ááì§ ¤¤0€„„ TQI˜éFW¾ü=_g𶦿ÈܪV…i6„„”7›s osÃ6Ù°¡sHø¡‡8‚ömÖuJFc¸AHîh8x^U‘ 0‚!aåÉ… ‘E·;‡„¿™wÃ6Û¹³sH¸C €à”d]§äæ2€„„àα$+˜²¼-c øhHxUã |8ú©s@xÉ"ço\¹¬~ýœCÂ-ZpH‡… E""À-BÂp'÷¬ÈÜ*"ó"E®Q¦@ÑðâFŒ€òá«ÿë^ÿóºÙÇw GGsH‡3Dbb·«W¯ÊþýûeãÆrüøñ ïkïÞ½eæÌ™!»ŵ`Á³ï§OŸ.‘åV„„àÞú!V@%;•±\ (/®äˆü«‡sHxß´ºéÿ÷ÿœCÂ+ò(_Á!>^¤ysÆÁë믿–¶mÛæ]OÿH*T¨`þ­]»vÐm¯\¹búøÊ+¯”Ê>L˜0Á´÷Í7ß”ù¾ÿéO2}ùÏþS"ˬ À½¬ÕV@eU‘ﶉ|¿‡)˜§ì]yÇl•Èåï9wQþP^|·UdN„@x~u‘Ó_ßÐM/YâÖ)#ƒC ì+Ò½;ã€àÕ¾}{‰ŽŽ–5kÖHnn®ìÝ»W&Nœ(§N*‘öSSSåµ×^““'O–H{N!á’Ú§¾ú†„KzŠ‚0 \@Ñ̿ٹ²SðNs«ˆ|ÑWäXç/Ê/BÂÊ‹¿íüó\–ß`Û¶ ¯[Ç¡PöFyäÆÁIƒ®¾Û’öî»ïšm8p DÚó —ä>8õÕ7$\ÒûS„„á‚0Ü;“fU¶Ûú •„C¥’ð·+D2>Yû°0Ú}¤nݺrûí·Ë°aÃäèÑ£ùïÏž=[Úµk'YYY2fÌ©W¯žlÚ´ÉÌoذ¡ ¬¶hÑÂ,³lÙ2³Nrr²ÙnõêÕ¥M›6²jÕ*Çm¯]»V:wî,5kÖ4ËoذÁ+ìv Û^ ¾z†„¯w“Žï‹/¾(:u2û2tèPIJJò[ßÿfffÊóÏ?oúrÇwH||¼\»vÍo9ϰÛñ €{© "G2 UG—ŠÌ‹ÙÄ_ÑQý{!a¡ïô×" kù„õç÷‰õ¥Ò…Ê•CÂ/¾ÈáPöÚ¶ÕJ¤Œ‚׳Ï>k¥P=tèßû;vì*UªHß¾}eùòå’˜˜hB¦pÕ*¾Ê¥öë×Oî»ï>™:uª9rÄ„_GeÞ›8‹±@ù¢çô¢Æ@hK{ǹŠðgKíCZÑÑÎ!áÇçð({11"ññŒ‚×¥K—ä±Ç3¡ÒªU«šàê•+WòßïÕ«—Ô¯_ß«Jï·ß~+•*U2Õo•J>|¸_û¤Õ÷<©Ú¦VÀµ;w΄V_~ùe¯u5̪•‹=û£ÁdmoüøñEÚ7Ûsê«gHøz÷§ qò¤aaßmx®?iÒ¤üy¹¹¹Ò¸qc‰ŠŠÊ¯&ìvÛ?‚!a¸s%Ç —¦ÄX„º]ñ"ókˆäd1(?4$ü.q„¸õ?w §¼Zj]ÐÂ:N!á~ý8<Êž^Ÿ¼÷ã€à§fcbbL¸´OŸ>’““cB§‘‘‘2z´ÿÓþ´joûöíÍÿíPjV–ÿßð}CµW¯^5Õ{ôè!óæÍËŸtÛZM×SµjÕü¶­á_ßJÂíCQ¶WœpQÚ/hœ”~322dÚ´if¹7:®o‡m:Öù™™™~Ë¥ÍïÐ \ùn›R!Xú´áâF"›F3(? uOæý|nè>¾¾ÔºçÖùP–rr¬ë“¨c¡¡ÒÞ½{›€©†a5Ìê[µ×¦Óºuëšÿ ¯*ßP­Ýf:u¤iÓ¦^Ó Aƒò×;qâ„YηÚmA!á‚ö¡°í9õU.JûÆéرcò裚@öm·Ý&­[·6Ë%''»Zÿõ×_7ówïÞí·\Qú@°à*Üù÷ ‘£‡ò⛹VèèT cò0€P—ñ‰s@xeG뉥dÈçpãÆ"e+=ݺ>IJb,:4XZ±bEéׯŸ\¾|Ùüÿ©§žò[...NZ´haþ_”°†|+W®,,°§OŸ6ë <Øk~a!aß}p»=§¾ªÂBÂEi?Ð8iEæ[o½Uöïßo^kEä¢T~õÕWÍ|3ßåŠÒ?‚wPàζçD>»—q(Oôx®Â8 | $ Ô}ù[çðŽ±¥Ú ½Oé®S‡C lmÚd]ŸìÛÇX t|ÿý÷RµjUy衇Ìë¶mۚʶžÎœ9#7ß|³Œ9Ò¼.($<{ölóÞÖ­[óçuëÖM*Uª$Ç/°/QQQÒ A¯yk×®-4$ì»n·çÔWßðõìÓ89rÄÌÓjÀ6;$¼aÃÇõµÊ²§îÝ»K³fÍnÇmÿÜA€;Ÿ÷Ù<†q(O/™!r.±@è#$ ”]ÊùôNçpÖ¿Jµ+o¼áÖ)'‡C ìha½6ÑŠÂ@0úꫯd̘1&Œzþüù¼s5]ž|òI0;w®YfÉ’%æu||¼ ßfffʰaÃ$""Böý€/($¬ËW¨PÁlG+ÝæææÊ–-[Ì<­F<þ|ÉÎΖuëÖÉ‚ ¼Öµ+ä0@V®\)“&M’:˜yãÇw½n·çÔWßðõìÓ8éúõë×—{î¹GRRRdùòåÒ¦M³ÜôéÓ×ïÚµ«lß¾ÝìïŒ3䦛n’™3gÜŽÛþ,¸ƒŠ2wõêUéÝ»·×/YáFYÔ1°W@PZÜHdïŒCyr-W$1ºÔ+7ÄÑ¥„„„®ëÂ+Ú‹\)Ýdî'Ÿ ý5‡ @Ùùè#>Àˆà–šš*ÑÑÑ&Pª!Rý·V­Zòç?ÿÙk¹?üPêÖ­kÞ×)66V¾øâ‹ü÷ «qãÆIÍš5Í2‰‰‰f^RR’ÜyçùmêûîõtîÜ9:t¨ Áê2íÚµ“C‡yUv»n¶çÔWßðõìO qúàƒLPXßkÞ¼¹lÞ¼Ùzu¿çÌ™ãµ~åÊ•Íòºº|dd¤$$$º·û@0à*ÊÜ•+W }|E0hÚ´©ôíÛ×kž~ ­ZµjÒ²eK¿åõ1!ºO…ýïæ—|ÊþvŽTÉXÄX”7»âEÅXa ”K"$ t¥Œs oÿM©wE‹ S@Yzï=ëÚvzßýúõ¦*¯V§ Dƒ²'Nœ(Ö6.\¸`ªüjQ6OÚž¶{íÚµ€ëjåÛ¬¬¬Ù7Û Ô×’Ú'šC9räHþkmWÛ÷lGCÓöøëûK—.i;Åí¥‰_¡Qæ®'$¬Ÿb{íµ×ääÉ“%Ú'§vùË_J5L0ضmÛ¶üOÐyV>~ü¸ùÚçŸ.«W¯–gžyÆü‚¨mB€ —jUô_”/çÒEæDXUXPFH@¨Òc­ìàþvYéÿÚ—8$üûßs¸”øx‘˜Æ( î ¢Ì]OHøÝwß5ëê'ºJ’S»úȧ¢°ýío“Š+šù«V­ÊŸÿüÃT¾xñ¢«¶ {ÓOéõîÝ[fΜÉ`@°Ð©UrÏ2åÑŠŽ"É£„6BÂBÕñõÎá%MÊìw¯ŠCÂ#Fp¸”§Ÿ騑qŠ‚;¨(uk×®•Î;KÍš5¥K—.²aÃÇprr²y¿zõêÒ¦M¯®š={¶4lØÐ¬Û¢E i×®,[¶ÌÕºj÷îÝÒ¿¹í¶Ûäæ›o–Ö­[Ëš5k¶«¢ÐyS§NÍoãç?ÿ¹™tþ¤I“òç=Zúöí›ßOmCÙ¨m;$¬Õ…䮻ï¾[fÍš–çÈõÇ7Èþ7EæE2åÕ¾i"ókX• PEH@¨JäÞüË2ëRÆÎ!áûïçp(;£G‹tïÎ8EÁT”ªíÛ·K•*UdðàÁ&¸ûÎ;ïH“&Mü¡[·n•Ê•+ˈ#dñâÅ2`À‰ˆˆðª¾»sçN5j”YwòäɦBoZZš«uwìØaú¡á÷ßßu§L™bú¨]Õ¸qãüð¯ºýöÛeîܹfxà¯ùùË_Ìÿ=«jÛ^Fû¬áá‰'J\\œT¨PAŽ;vçÉõ„„SSSåµ×^3ë’v#Û€ ·c¬ÈÒæŒCyu&Í #iÈUvH˜°;€ºÎûžõ¯Î!áC³Ë¬[?ù‰sH¸M€²Ó³§È#0@QF©ÒÀ®h5jÓÀ¥BÇŸ?¯W¯^rÇwä¿>wîœ ú¾üòË^íiÈV×õ »Y÷þûï7ëmܸѱŸNíª'žxÂTÎÍÍ•o¾ùÆ,£†GŽ)uëÖ5ËìÙ³ÇÌßµk—yíÔ¶½L×®]%'Ç 5h`YçéòáæzBÂŽ]I¸‘m@Ð[?DäóžŒCy¶¸‘Èæ1ŒB—>—ÎXY«­jþ¾áO›Š\Ê.³n=ôsH¸A€²Óª•È /O®^½*û÷ï7÷œ?^.Ç|Á‚Ò»wo9}út‰,€ÒGH¥ªZµj2ZŸãÁ7ªSZå·G2oÞ¼ü)&&F|ðA¯u}C›nÖµ—©W¯žù¿“@aÐ>øÀÌß²e‹Ì™3GüpwìÍ7ß4óõ"pÚ´i¿NQB‡Ο—mæ½þúëåþ¼X»v­tîÜYjÖ¬)]ºt‘ 6 '''›eªW¯.mÚ´1©m³gÏ–† šuµ"s»víL•èÂÖó´{÷néß¿¿©2­ðÖ­[Ëš5k lÂÂg÷æ}3Å8”g[Ÿ¦Z4B!a¡(u’sáí¿)Ón=÷œsH¸F €²Ó¨‘H||pôå믿–¶mÛš{‡útXý·víÚ%ž0a‚iO‹V•5ß{Ý×»J!a”š'N˜ ßjÀ¾!ᬬ,óºN:Ò´iS¯iРA^ëúnݬk/ãÛVAíÚìêÁüãåÙgŸ•G~xž]õWƒ¤<ð€Œ5*àQA!aÏ‹¦ï¿ÿ>,BÂ:vÚ…vïÞ½2qâD9uêT‘ÚIMM•×^{Í<}׿vZ¦´„[HX¯y÷ïÑzSúàà={˜˜Jwºx‘ïõ€’GH¥F-¢õäÖ×è8p`¡múnݬk/ÓH?jê²]OwÜq‡üìg?3Ÿ }ó‡«ÐË—/KÕªUå¿ø…©T«aá@D„„½i`÷öÛo7ÇŦ¸ºïãÇ÷Z¶W¯^fümçÎ3a_Ïà¹ÓøºYOÝÿýf]}$PQÏ (÷æDˆxq(ÏrÏŠÌ‹Ù7±@h"$ ä¾o}.²°¶@xe+@\†Ö¯Þ·C lè5Éܹeßû^¦ÓSQ‹Êéþ£oH¸,ïQ–×pn®ÈêÕ" "?,Òª•Bt-ÌÄTZ“…(ñߣ”¦¨¨(iР׼µk×ú]DuëÖM*UªTèãX4Œ«ëj¥Ø¢¬«Ëèz»ôã.Ûµ=þøãR£F ©X±¢©‡@Ù]§$%•}_´€”>Ù¶K—.æÿ$''›e´ÈT›6mÌSU=é}ㆠšû-Z´víÚ™'z†„-ã¦}{ºŽ>mw̘1æ^è¦M›ÌST_|ñEéÔ©“Ù—¡C‡æ­ÿàÚ÷±õþ÷óÏ?oú¢Å™âããåÚµk~ËyÞïvÓ¿Ò–š*2v¬Ht´u>µm+ò "3fˆ,]*’’B%a&* ÊBÂ(U¯¾úª¹8Ðê±+W®”I“&I‡üªÆnÙ²E*T¨`‚·óçÏ—ììlY·n,X°À«=½Ñåô‚F+ë£\ܬ»aù馛L5àõë×KZZšÌœ9Ó–µkûûßÿnú«AaÏê·Z•Vç·Ò:\8ÙDNm‡kHøÄ‰f}+ú:…„õÂUçéEjÓ¦M½¦Aƒå/çäu»ž½œç<_„„„­“›¬ÀJv*cQÞí+’Í8 4I#$ thÿ/z;‡„¿]]¬RÅ9$\Î?Ë H¥§[×$â Ï>û¬¹o¨!ÛC‡ù½¯£ôé¶#FŒÅ‹›ûãú¤SÏûŒÔ5j”igòäÉæ^¤Þ·ö ZÆMûʾݯ_?¹ï¾ûdêÔ©räÈyë­·LA¥wÞyG¥eË–Òºuk¿ý°××öõ©¬'N”ØØX¿ûؾ÷»Ýö¯´h8¸ÉëƒÈ½÷ŠÌš¥÷‡ùºá0JÕ¹sç̧5 « ú©E½hrz‹~RñÎ;ï4ïéT³fMyòÉ'ýÚ7nœyO—Ñ ·ë._¾\n»í¶üe¢££½‚ÄNí*»¿={öôjO—Ñùú‰K§ 'ϰoÛáÖ´îãàÁƒ½æ;…„už^H8°À6}ƒ¼n׳—kÔ¨‘ë¶ l^hV.žd,Ê»ŒE„,Â霿BDZÏEÖöÿ³µÈµÜ èbãÆÎ!a‡?ÍÀ ·i“uM,ÁÎK—.Éc=fîV­ZÕ„o= LõêÕËTܵé}r ÉúOrºÿè´ŒÛöíûÐÇ/p4,ìtÔ^_‹Ù´V㼋F}а]MØ÷~·ÛþÝhZ ,!A¤F ‘¾}E¶mãk „BÂ(ZÝ7ËåœV›Õ ÏÇ•øºpႤ§§ËÕ«W‹¼îáÇåäÉ“Ej·$ÜȶC‰^<6hÐÀkžVtv ŽwëÖM*Uª$ÇØž>2G×ÕO§e={9]w—>;ÆeÛö¿)2'‚qç3¬€Ò7s „BÂBÉ®ÿϹŠðö‚¦‹?ù‰sHxÈ€Ò—”d]“­’cî!öéÓGrrrÌýß*UªH=dÞ¼yù“.§Õ{='$\”öíðn {óøÍÈÈiÓ¦™å6nÜ踾g±+¥¡c¯OÑõ]®(ý»‘4 u¿j×Y¸¯!¾ (S¯¾újþ#jV®\i>…Ú¡C3oüøñ^ËnÙ²E*T¨ qqq2þ|6_·nWh½ÕeÆŒc*ë…­›õÔ† L•ë¶mÛÊúõëÍ£zfΜiBËÚ€°°s‚È¢Æ!\,n$²í9Æ¡Ç ŸIc,·Ü³"ÿêîÖee® šn>ôsH¸{w!€Ò÷ÑGVØ3i0¶wïÞæþ¦z5«ÿ¯S§Ž4mÚÔk4h׺Š¥ý@!ßcÇŽÉ£>*‘‘‘æé»­[·6Ë%''»Z_Ÿ†«ówïÞí·\Qúw£h&ºm[‘æÍEÒøs!s„„”)}´ÌСCM8W/Ûµk'‡r¬$¬’’’äÎ;ï4ïëT³fMyÒçY§ãÆ3óõýÄÄD×ë©åË—› a{¹èèh¯0±SÛPîm#²*Žqáx#D±L·Bv'Ö3‚ÛñuV Ø7$¼ª›Èµàù0ê/éŽå(}3fˆ4j¼ýÓplÅŠ¥_¿~råÊ©\¹² 8°ÐõŠ.JûB¾íÛ·—[o½Uöïßo^kEä¢T¶ Aia%ßåŠÒ¿A+k8øÞ{­°0@¸#$ (hu߬"\¥8qÂ\_»vÍñý .HzzºyœMQÖ³>|8ïòd‘Ú€r닾"ëy®tØØ7Md^dP…”Wìð±$Æ@pûêÿ€°N»âƒª›/½ä®VC ôÅÇ[¡Ï`õý÷ßKÕªUå!},KžnݺI¥J•äøñã®7{öl®Ýºukþ<ß°Ó2nÛw ù9rÄÌÓjÀ6;$¬O^uZ_ï±zêÞ½»4kÖ,àvÜö¯¤éƒ`ãâ¬pv6_7Š0 ¶¼­È¶ç‡p¡UX5¨ôÝ6Æ¡…0€P{VäóžþáùÕ­ ÃAdÞ<ç°NTbPÚž{Nƒ©ÁÑ—¯¾úJÆŒcµçÏŸ7Å…ô ¦’;w®YfË–-R¡B‰‹‹“ùó盂IëÖ­óz‚©ÊÌÌ4Ëi{Z•777×/$ì´ŒÛöBº~ýúõåž{î‘””ó¤Õ6mÚ˜å¦OŸî¸~×®]eûöífg̘až;sæÌ€ÛqÛ¿’6v¬HT”HZ_36BÂ(ØâFAWÙ7†—ôèÞc,Z '“­Šý¾!᤟]ÿÔÔÀ!á}û8”J×èÑ"£FËõRªDGG›P¬aõßZµjÉŸÿüg¯å’’’äÎ;ï4ïëT³fM&ö5nÜ8óž.“˜˜èvZÆmûN!aõÁ˜ °¾×¼ysÙ¼y³ ôjøwΜ9^ëW®\Ù,¯û¨ËGFFJBBB¡Ûq»ÿ%eõj‘ˆ‘+øzðDHEsõ¢È÷{˜BaÊÞ%’µJäÌ~+0¡S¥~۰6Ñp³¬•ÈÖ§„BÂBAj‚@X§¿t]ÍÉ ö(¥¢gO«šp0Ñ@ìúõëMea­°ȉ'Là÷Úµk—¹pá‚©H|õêÕ"/ã¦}'W®\‘#GŽä¿Övµ}ÏvÎ;gÚ·ß?pà€\ºt©HÛ)nÿŠâìY‘˜‘GákÀ!a†Onf1…Þôq”UrUœÈšþVhï"‡Šd§]#@¹’cýÜÈä£÷a%y”ÈŠŽŒBË¥lB‚ÿ÷ªÏ{:\Ÿ× ÚõÖ©ã~ùe'€ÒÕª•H|<ãgcÇŠ4j$’ÍXø"$Œ¢¡’phWÖð¯†&túf®URÿå "k¶ªίaݤÔõ楾r¡aWç3¬Ÿ ßmc,ÂÉþ7­G¡óó¡†0€`–½ÓúùêÞü‹ írëÖÎ!á‘#9œJ—@§Laà/%E$"BdÑ"ÆÀ !aþΤY!âÍc¬jÃzÓrQŒ&Ö÷áC?(¢?ôÃ&'Ö[ÇýT cÐBH@0Û9ÁùI?Ÿm—;wv ÷ïÏáPº4:kão¹¹"÷Þ+gýþ (Üé}VEa;0¼¼­õZ=¯•´b±V.¦‚³»êÎçsN‹¬ïýT” /—²EæDäýÜZÍX ´¬rÏŠ¬èèþ´‰HNVÐv{ÈçðÝwsH”â%U®u-²bcoÓ¦Yòê]DH@ÑhèbÇXëæ¦†‡œª 1>ͯa…­µ:ówÛ8¯¯ƒ³D>Žb‘>E`ïŒB !aÁJŸÖãt ýåoƒºÛ/½äŽâ×C¥(#úÙ´‰±ÀíÛ')òÊ+ŒE0¹zõªôîÝ[fΜé7ÿþý²qãF9~üx¹Ü÷ ˜}?}út‰,@I!$ àúœ=H%á¢VþîK«2£VcÖ °Þþ¼'tœRD–6gÂÑg÷Š$bZô÷ª£KÁgããÎ =±>¨»½h‘sHX§œ+€Ò¡Ubõ:$-±€%;[¤cG‘V­¬ÿ“_ýêWyçëäÂ… ~ïÝÿýòÐC•ëcsåʳÿ¯x¤·¿þúkiÛ¶­™_¡BóoíÚµK$,Cdqcÿ€ðÊŸˆ\ î¤mVVàðW_qh”ޤ$ë:äìÙ’k37WäàA‘U«DvíÙ³‡)ا;D>úH«°Š´mk=å&55øÎ×P §æ âk¯½&'Ož,‘öœBÂíÛ·—èèhY³fMÞ×^®ìÝ»W&Nœ(§Nºî¾ú†„KzŠ‚0 X€`‘žwU;¿†¾BI&AB+É®Â8„£ÏYÃ8 ´ŒöþÙ¹ŠðÞ7B¢ûUª8‡„}ž 7ÌܹÖuÈõЀ±>-eÔ(‘æÍE""(’)ø§fͬàp0 µð»ï¾kú{àÀiÏ7$¬a]ßÐpIöÕ7$\ÒûS„„ÁŠ0“ìT‘Äh‘Ï{ôûÑÖ§‡p¤•î5Àt)›±@è $ %ýÌ? ¼°¶Èé¯C¢û;ß}é%-€Òñæ›"1Ŭg OHyî9‘ÈH«G™6MdÅ +dJ%áЬ$ܪ•UIxß¾à;_‹ž={¶´k×ÎTÔMHH»îºKî¾ûn™5kVþ2W¯^•)S¦È½÷Þ+Õ«W—f͚ɦM›¼Úݹs§ôéÓGêÖ­+·ß~» 6LŽ=ê·¬¼/ˆ1cÆH½zõL:¿aƦ¿-Z´0Ë,[¶Ì¬“œœ,]ºt1ÛlÓ¦MÞ×Ê*Çý]»v­tîÜYjÖ¬i–ß°aƒW(øòåËR§Nóžþ?¶¨¯ž!áëÝŸ@ã¤ãûâ‹/J§N̾ :T’´Ä¹;ü›™™)Ï?ÿ¼éËwÜ!ñññríÚ5¿å]CLgÒ „B‚Ͷˆ,¨åÞúlÈ\ïµoï~â /€Ò/Ò¨QÑÖÉ͵ÂÅ5jXÒ3Dr¨ÏSndg‹tìh[­LŠ¶Ã¢#FŒ0¡Ö‰'J\\œT¨PAŽ;f–ùôÓOÍëy'ñêÕ«å/ù‹ìñ(£¼cÇ©R¥ŠôíÛW–/_.‰‰‰&dªW­âë¹~ýúÉ}÷Ý'S§N•#GŽ˜ðë¨Q£Ì{“'O6UxÓÒÒdëÖ­R¹reӯŋË€$""¯:ïöíÛͶlB­ï¼óŽ4iÒįrð³Ï>kæiÈöСC~ãâf{úê¾Þý 4No½õ–<øàƒfÿt|[¶l)­[·öÛ{}m_µÏØØX3ïõ×_÷[Î »íÅEH‚ѱ$‘ù5DR eK«›ÿ{ãŽ4¸4/RäèRÆ¡cN!aÁeÏýÂ:e~2»Ð¿¿sHXç@ixúi+ê–Hï½W$" çR“§\Ò*ÂZ!Ú#‹ŠîÚµ«äüb×à­ÎÓ€«zì±Ç¤Q)ù^½zIýúõ½ªô~ûí·R©R%SýÖs;Ç÷[_·£ïyRµM­€k;wîœ ­¾üòË^ëj˜U+_¹r%ž“µ½ñãÇçÏ»té’Ù_µjU¾õ\Çíöœúê¾Þý)hœ'$|øðáüyÙÙÙ^•g?üðÃüê¶Z)×ëO×®Idd¤Œ=Úo[Zµ·½>Èc;YYþð Õ^½zÕTîÑ£‡Ì›7/Љ‰1Õt=U«VÍoÛþõ­$lÓ*¹Ú޾ߧOŒ.ÊöŠ.Jû“ÒÀoFÞ7™iy'ž.·qãFÇõíð¯MCÇ:?33Óo¹¢ô€â"$ ÁlM+ì’{–±Pú.ž´‚,ZÝá)y”ȦьB‡þÞ´ÿMÆ@p8¾ÎzBŒoHxû³!µzÃÕ)$Å!P:ºw5ªðå´‚pl¬HÛ¶ZÍ”q Z%Z«F÷ì<}zúé§MôìÙ³çrwyøá‡ó_;…J¿ÿþ{¯°zë­·LÞ *˜êÀçÏŸ7ó5Ìê[µ×¦ÓºuëÜŽÍ7Tk·Y§NiÚ´©×4hРüõNœ8a–ó­v[PHXiz÷î_-Ùíöœúª ¥ý@ãtìØ1yôÑGM û¶Ûn“Ö­[›å’““]­¯ÇRçïÞ½Ûo¹¢ô€â"$ ÁL«KéMå ¥ïLšd9M¹…°µí9‘/ú2ÞÏ8;Æù„õ) ß. ©ÝX³Æ9$¬ÓOB€ªys‘±c ^Fó˜;Š4j¤¡@Æ,œha­&¼tipô'!!Á„><è÷ÞÝwß-O=õTþk·!a¥AÕgžyFnºé&ùíokæ]¾|Y*V¬èÕ¦-..NZ´hp;6ßP­†|+W®,,p?OŸ>mÖ æ³{ýCÂ+b=­!„è£z…„yt/€Ò O2™2¥àeyD¤vm‘´4Æ+iˆ\âgƒàá¬sçÎ5Ð>úÈk¾V®^½ºL:5^QB¶ž={ÊwÞ™ÿºmÛ¶¦²­§3gÎÈÍ7ß,#GŽ ¸ÛìÙ³Í{[·n͟׭[7©T©’?~¼¯Í(iР׼µk×Ö}ÔÊÈ=ôP‘¶çÔWßðõìÓ89rÄïxØ!á 68®¯U–=iéf͚܎ÛþP\„„ ØéÍå£D¾|±Pº/´Â,×r‹pu,É:.e3 „„‹ÌϬªÁ¾!á/_ ÉÝ©\Ù9$¼d ‡À§×ï½øý¹s­eô_„' ÇÄXañ²vñâEœmذ¡¬_¿^rssåäÉ“2zôh©R¥Š=z4Y7!á‰'ʬY³L€ôË/¿”:uêȃ>˜¿ü’¼‹s]>>>Þ¬›™™)Æ “ˆˆÙ÷ç{ ëò*T1cƘJ·Úß-[¶˜yZxþüù’-ëÖ­“ x­kWÈ0`€¬\¹R&Mš$:t0óÆo–ùꫯLÛ¨=þ¼¤§§Ë“O>i–™ûíÛí9õÕ7$|=ûã4Nº~ýúõåž{î‘””Y¾|¹´iÓÆ,7}útÇõ»ví*Û·o7û;cÆ SýyæÌ™·ã¶û÷i†BÀþ7©&  ôí™b}Háëô>+Ðtš2„„‹mÏù„ÖùÏÖÜÆCÂ'r¨ÜXöÓMV¬p~ÿäI‘èh‘Ñ£«p·zµHDDàs¥Tÿ,°m›´jÕÊA+V¬hþ­W¯ž|üñÇ^˹ ÿêW¿’š5kšyúïðáÃó¾.¼ïøá‡R·n]³ŒN±±±òÅ_¸OãÆËßFbb¢™—””d*ÛmêûîõtîÜ9:t¨ Áê2íÚµ“C‡yUNMMÍû6ó4«ÿÖªUKþüç?{µåf{N}õ _Ïþ§>øÀ…õ½æÍ›ËæÍ›M W÷{Μ9^ëW®\Ù,¯û¨ËGFFJBBB¡Ûq»ÿ!aWrDÖÙ1–±PzR^ù4–qgZEZ?¤rt)cР߳ (kúáÎ%MüCÂÉÃCö qqÎ!aîU¸ÑRR¬ëmÛœßᑨ(+, Œkiieß—k×®ÉáÇeÍš5¦¢ï¥K—®«-­À[X”=qâD±¶qᳫW¯zÍ×ö´]íC Zù6++«Àö5«••µ²°VØ ÄÍöõµ¤öÇÉ•+WäÈ‘#ù¯µ]mß³ MÛã¯ï8p Èǽ¸ý  „„ T¤&XAaù ´l#²*ŽqwºÔªÒ@(øWwBÂÊÞ¡ýÂ:ퟲ»4dˆsH¸wo7€K«ÃêõGzºÿ{©©VåØiÓ'Xrs­º6o®ÁUÆ@€P‘“%2¿†È÷ ¥cM‘õC‡p§Aq*Ù#T ’Gú„—µ¹²»4uªsH¸E 7àdÁ‚Ò»wo9}út¹ëoiïÛGY×¹fÑ4vìèü—V•Öð½÷ŠRÜ ,€P’<ŠªžJ~¿ÑjÂoÛž³ã@( $  ¬eïI¼Õ?$¼õ×!½[Ÿ}æ®Y“C€ÐõÚk¯åý^û£üéÎ;ï”^xA¶nÝê·ìŸþô'³ÌþóWm»Y~„ f}¬|Y+Êþu,®×”)"QQþóSR¬*Â+Vp.߆ƒÛ¶µÂÂiiŒo„„ ”œXoÝ`>ÃÕ,€Rði¬ÈÎ ŒC¸KMùì^Æ¡0€²öï·ýÂs"DŽ|Ò»¥õu 뤚€Pd‡„çÍ›g¦gŸ}VªW¯.7ß|³|ûí·^Ë®^½Zžyæ9w¶‹NMM5}:Y¿dsHø…DZµòŸ¯U„cc©"ŒÀôK©gO‘ÚµE.d<@ø"$ ¡æã(B{JÇü"û¦1áîðBëg  (K×rEÖö÷ ÖE$÷lÈï^ÅŠÎ!áäd=B“>räHþ¼ßýîwfÞœ9s®«íâ„„ß}÷]óúÀ¥>Á~ä+èé)#ê"Í8(›Ÿ—K›ù‡„7 /7»øä“Î!á!C8üMvHø¯ý«©žûãÿXj×®-K–,ñ[Ö÷ž¥iõõÆÛ¶—ïÚµk~àXÄ:OÀÊ3$¬t¾¾ö ×öêÕËTõµé}[ á¾üòË~Û>¼ðk ûnÇ^Ò¤IùóôžxãÆ%**Ê«š°ïX¸éßõÐ0çŒÿ}½h‘u-’•Å9ŒâÓÈÇêÕ" "?,Òª•Hd¤óu/S(O äCÂ.–®—S»~ø¡™·yóæüyûÛߤbÅŠf¾çcSþñ˜ Ã>–ãÔ¶Û0ì'Ÿ|b–Óå}8qBjÕªe>,ãx½Â5$¬Õ¢{÷î-3gÎ ©~ë1|þüùryl,X`Žç‡ÊÄŽ±"‹•Ú£ßCõœp/´‚-—² ˆ|%’þã€à§!áM£¥/ýýÂ:ûW¹Ùʼno6uêÄá@h²CÂZ„©zõêæÿz/Ö‰ç=K½g¢U„ëÕ«gþ_Ðò‡Ο—íU™×MHØÞV=dÞ¼yùSLLŒ©컽¬’³úÕTÓ¦Mó 8º'«¡cŸ™™YàXÖ¿âÒ §^wh0ئT¼÷^Î_Üy_¦Tf¢’0 Ü)“ðÚµk¥sçÎæ‚«K—.²aÃÇprr²y_/ÊôÑ.ž!\5{öliذ¡YWÓÒ®];ó(7ëªÝ»w›ª¼ú˜›o¾Ù GϾÛôq7}úô‘ºuëÊí·ß.Æ “£Gz]çÔ©S÷EÛxñÅ¥S§NR§N:t¨©†\Ðw8¹žà|YÐ?è±Ö¯i»²¶N?ýéOåСC%º­²>'‚æœ<•bÝpþnç$ß7€ãà,ëû  –6ÙÏ8 øPVÖñvo©}°³4hVÂ)$|Ûm~„&;$¬÷€¿ûî;ù?ÿçÿH«V­‹@yÞ{Ð ®þРAÛvºWñý÷ß9$loKï§6mÚÔkòÜ~A÷FŽ;&>ú¨DFFšûâzO\—Õûé…­¯}Õùz_½ ±(¬Å•žn]w¤¤X¯õ¡¸"QÏp­Ô“úý4áàÁƒMpWgÒ¤I¿ð™V"­\¹²Œ1B/^, 0%ñ¼(Ò é¨Q£Ìº“'O6Niii®Öݱc‡é‡^½ÿþû&;eÊÓ¿@í*}¤ŠþU’;w®Ù‡xÀkþ_þò¿ ¥@mÛËhŸ5¨;qâD‰‹‹3AK½pSêÕ‹7­æÈòåËM;o¿ý¶×¶u ô±7Únll¬×hAûë{Ah›Žn+11Ñ„°õ“²pö\§ }y뭷̧Gõøk-[¶4¤n. ÃÁõ2SSSÍ5ìãQ’µ­a{=¾øÃÌ'/\¸`Bßz®ipøË/¿,±í­^½Zžy晀Aù-¨ÎI­ê¸÷ ÎÉ ;G€rcç‘E1Œ,kÎûýiÆÁ0€²½[da-ÿðî×ËÕnîÛç®XQäìYN„ϰҧIêë±cÇú-ëyHï™è½èFl»¤BÂö¶Xà¾tÿª}ûörë­·Ê~-šG­$üꫯšùžOØt‹ÂúW\ZK¯;ìÛ@3fˆDFZÕ^¸Sê!a «j€V/lîÒ ­‚këÕ«—©xkÓ°—}_~ùe¯öœ.–ܬ«Yß‹ŸÂÚUO<ñ„©:¬cÑ 6ûÂqäÈ‘¦²®Ú³g™¿KŸ?ápQåÔ¶½L×®]%''ÇÌÓÀ²ÎÓå•]Éø—¿üeÀñÕOqê2Z¥×³]Ï*ÇÚw ;GEEåW´¿¾}×±­_¿¾\¾|9™o¿ýV*Uªä·Í‚öÅ—†…Ýl?\\O 3б, Nmëc—tž+_ZÁºV­Zrß}÷•ØöÊZP“›Çˆ,oË9dçPnè÷˜UqŒþ{>|Þ“q@ð#$  ,ìø@øãº"§¿.W»©âq {VõB‰oHX=üðæ0κuë¼–õ½?Ô­[7¯ûÁ¾ŠÖ§µêk-ˆåI·¥÷b?p_Ý¿²ï/ÛÛTvHXŸö뻾ÞÛóÔ½{wiÖ¬Y¡cQXÿŠK+רñß×={ê1âÜŠ¢ÔCÂÕªU“Ñ£½oÚú†Ï®^½jªÕöèÑCæÍ›—?ÅÄĘ곞|bnÖµ—Ñê·ú'‚g|ð™¿eË™3gŽ4hÐÀÌóÍ7Í|ýæ´iÓ$:::à…RA!áÇçÏËÎÎöºhsÖ Q]楗^*ð‚pøðáf~fffûë¹¾]ÉØ÷ø©N:™O¡ºÝ›–µò¬Ž™Sh;\BÂk×®•Î;›ª»]ºt1å™úè]¦zõꦊ³Vä¶é6lhÖÕ*ÎíÚµ3U² [Ï“͵2°VÙÖ@¼Vx^³fMÀ¶;vì(·ÜrKÀª­þ×uÖëG}裮«dxþùçM›êÏ­´/öúÙÖjØ}úô1A}ý°aÃäèÑ£^mé:§N’„„¹ë®»äî»ï–Y³fyõUÛѰ»žÏúX¤¡C‡šŠÈA{N]jÝ|¾x2$ÏI·çeQÏIßsÄíñ÷ÝoýWû§ëþÏÿü¿1 ü¬éoM€ÒÊõ+:2~„„”¶Ky×+;ú‡„·þº\în½zÎ!áÿý_N„§°Þ;­]»¶)¸tæÌ™üù¾÷‡ô¾ÉM7Ý$mÛ¶5÷Àô)­3gÎ4÷œ–W……„uÛP3fŒ©Ü«÷Q•Þ—ÖùúäÖùóç›ûbÖÊÇúgÓ6´Ô=÷Ü#)))æI±z?F—>}ºßúZJ‹??^f̘aöQ÷Ë“ï¶Üô¯¸DZµ²þ¿m›HD„ÈÒ¥œ»@Q”jHXCzÁà[ Ø7$œ••e^kH¯iÓ¦^Ó Aƒ¼Öõ ·ºY×^Æ·­‚ÚµÙÕƒÿøÇ?ʳÏ>+<òˆ™oWÊÕ0Ú< £F x¡TPH¸  E;¤«Õ|Ñ€œ®óöÛoxA¨mê| ß´¿žëÛãæYñÙ¦l»’²›}9vì˜<úè£f4ø§¡?}_y]d–Gzîhh}ðàÁ& ©U•›4iâÈÔOë#{FŒa>å«•¹µJ¶}Ü4äªçž®;yòds\õ…­gÛ±c‡é‹“÷ßßœOS¦L1}tjûßÿþ·9†½{÷¸úǧsRû ½'Nœ(±±±~!ò@ûâ{NØ}îÛ·¯ÙVbb¢ùã†~àäϲ×Ñý×0©nSÿP¡°ÐsÑöÖ[o™sY¶Ó²eKsní9©7£çDˆ^r礛u‹sN:#n¿~HA?é®çÒÊ•+MˆXÅÅ­  „<‚vð”þ‘È¢Æ|ï_ŸZ×e¾!áÃóËåîvìèþýï9zœBÂJïGè| ëÚœîé})½¡óuÒ"Rv0¶8!a5nÜ8SÈDçë½*›µ¹óÎ;ó·¥Ë<ùä“öϦE°4(¬ï7oÞ\6oÞlî“hX‹bÙëë=]VŸªËê=@-¾âËi[…õ¯¸´vUÿjY<ý´äõŸó(ªR ë'õ¢@ƒgž|CÂúZ/BXh›¾áV7ëÚË4jÔÈu»ž´êéÏ~ö3óÉP­ ¬._¾,U«V•_üâ¦"¦†…](7$¬ŠZµ5Ð᫯¾jæë1)h=××}¬X±¢<õÔS~ÛÕ I ߹ݭ:|ë­·šÊËÊ~¬M8VÖ`¤V¿ÕóÒ¦áV§@¶Äõü³éy ¡JÏà½Ó±t³žÒЮÓqÔ¶›êÖD×e´B¯ç14iRþ2ú)fýDvTT”W5a7_+ºoú‡ =?mß~û­ {únS?ýœ£ÏG•ÿûuh8ÖÍ×j™ÒªŽÛž ¹sÒíºE='Ž‘Ûã¯èõgÃ… òç}÷Ýw?”{ŸÆŠ¤Ç2WX' Ømx„0€Òµ~ˆ@xõ}Ö‡:Ë¡!CœC£ùÖ €0¦OWµ ×”½O‘žžîøD\-Ê¥¡bÏûinè=Ï0´¶­Û°ÛÑ{4Ú¶ýžÞw¹téR‘û^Üþ'ò Öÿ5 ÏùU©ßé×`ƒ ¼æécW|+5vëÖÍ„üŽ?^`{ÆÕuµ"eQÖÕet½]»v¹n×öøãK5L`V«\þ÷"%Î|¢R×ÓÇÁØ|kNm» òÉ'fÞo¼á×/½øÔÇßè¾ù¶k_ÔÙºwï.Íš5+t}û¥Áhßʪú¨›o¾YFŽéj_ì`©ç~Ù!a}4OAÛ/ªU«&£}î¦ùçí r­¨ªAÆyóæåO111¦ú­Í74év={9­ÀëôG§¶Ý„„õkL—y饗 <¦Ã‡÷ûÚ),jW×íp7²S§N&Œî¹Žþ‘Ʀ:ò=mZÎÈÈiÓ¦ùTƒîœÜ9AdY«:'Ý®[œsÒé¹9þÚ¾„=¿Úo l|%’šÀ8ÀòÝ6+ôtñ$cà¦aBÂJËÉd‘µüCÂåøw¨çŸw ðÐ+(¶˜‘iÓD6m²®=’’ ¨J=$lW°ÕJ•ú8w­&Ú¡C¿J[¶l1‚×àíüùóM kݺuùh±i P—ÓǽhU\ ÷¹YWèú ½jÕ]}DýÌ™3M`9P»¶¿ÿý樂ö¬´©Õ/u~«VÞ=ßÀšSÛnCª_¿~fý©S§š¶ôÓ¤ö#\4¬«2}·­4uþùóçeÆŒfßu G§¾/Y²Ä¼Ž7ýÓõ† fªîÛ·Ïqß}Ѷµòë=÷Ü#)))æQ½À±+o4¼­ûç[Ñ×)˜˜••eæÕ©SGš6mê5 4(9ßФÛõìå<çùòmÛéö*ànà²eËÌ:o¿ývÇTÏ ¯•‡mÏw}»ÏNU^5hZ·n]Wç¤íرcò裚}ÒÇCi ^—INNÞs2kµuú|FÈœ“n×-Î9étŒÜý^¦¯ó›ßºß@ØÐï-é1°h5D='Nnb,Ü4 ¼¦?ã t|õý‹å]pì.·»¬Jr û|ž®ÛÙ³""«W‹Œ#¢·à=nÙp©ÔCÂú¨’¡C‡šª¯Úµk'‡r aÙÁW}O§š5kÊ“O>é׿¸qãÌ{ºLbb¢ëu5œªA@{™èèh¯ ±S»ÊîoÏž=½ÚÓetþ‹/¾è5ß) æÛvQBÂZñòµ×^“êÕ«›÷5Ü«“VÀ±>¤ÎI·ëõœ,nHXýë_ÿ’ŸÿüçòÀÈ_ÿúWSUX—Ó6€°’þ‘ȼHÆÞ¾è+²c,ã€àFH@©\È#’x«HøÐ?Âb÷õa>N!áI“85”Œœ‘ÈH‘Dbc­×Їp9§UZOœ8!×®]c0‚œVQÍ*³9õ¸~óÍ7­VóMOO7Þ¢¬g;|ø°œ”{¦Xá­KÙŒ€ë³¼­õ=ðtb½õ;”>fV»â©x àÆù~·ÈÂZÞ[ЪÂG> »¡¨RÅ9(œÅg³P‚6m‰Š‰IáAŠaG«FW¨ 2ccòI¬N¡Û’ôî»ïšm8pàºÛ*($¬ÕõI­?þ¸ßzO<ñ„Ü~ûí¥.Éý.*B€`D%a¦ðª$¬áßcIÖôÍ\‘ïYA‚/_Yû°È²VVÈRoôé¿ZIQß?¹‰Ð0‚ßÅ“"ó"­°;\ý¨?#Oú»”þŽt†r-b„„ÜHiïúYÿ–{6솢];çðÿþ/§ J†£Ô§U "rö,ãŽbb¬ ðÃ3(Ÿ._¾,uêÔ‘.]º˜ÿ²sçNéÓ§Ô­[ׄm‡ &GÍöìÙy×éí$++KÆŒ#õêÕ“M›6™ù 64!Ô-Z˜e–-[fÖINN6ÛÕ`o›6mdÕªU~Û]»v­tîÜYjÖ¬i–ݰaCÀðm·ÝfúU«V-¹xñbþ{999fýßýîw^!aݧ_|Q:uêdÆ`èС’””ä×{ßôIÅÏ?ÿ¼ÙŸ;î¸Câã㽞ë.h¿Ýì{ ñtÛo;ø›™™Y`Ÿ=—õ »96ÕÀ†_4D¼yŒ2Ћb¬01Á³M£E£Ãò&5€’“eýÜ;º”±€7ýÙ¢ç†V‚!a7Š~(syÿð×ÿ–ÃñÀÎ!áñã9Upý4o¥áÑ£Er©á¶zö´®3jÕâ<@ùõì³Ïš¨†N:ä÷þŽ;¤J•*Ò·o_Y¾|¹$&&šà¨Wµ±²ƒ¦ýúõ“ûî»O¦N*GŽ1ÖQ£F™÷&Ožlªë¦¥¥ÉÖ­[¥råÊ2bÄY¼x± 0@"""¼ªînß¾ÝlwðàÁ&¤úÎ;ïH“&M /Z´È¼¯ÿÚ.\(·Ür‹|þùç^!á·ÞzK|ðAÓ®îSË–-¥uëÖ~ûoï›öñþûï—‰'Jll¬™÷úë¯ç/ç´ßÊ;O·ývÛgÏeí°›þP„„7Nïûoà@oêcØõuæ ‘ìVÅb­\Lg¦¢V·.éI«^/¼EäóVEáï¶1îe}¼Ïæ{(Bïgžþ¬Ó_Z±þà,ÆÁ‹0€%ý"s"¼ÂKšˆ\ÈËáxâ çð£rªàúhæ-:ZdÔ(‚¡áî÷¿ÿïµÆ¶mŒʧK—.Éc=f‚¢U«V5Ô+W®ä¿ß«W/©_¿¾W¥áo¿ýV*Uªd*Ú*;h:|øp¿ö5 «ïy†LµM­lk;wîœ ¢¾üòËùó4œªU‹=û¢¡dmk¼Ï'„í°VÖªÁZQØöðÛj¼vb;$ìKC·¾ýôÜ·I“&åÏËÍûáиqc‰ŠŠÊ¯Ìë´ßn÷½ ñtÓo·}ö\Ö »éÅAH(ªcI";ÆŠ¬è胉‰‰Éiš_Cdý‘ŒE|EðÓ*±zÞjEaÀ×§±Ö‡P€`EHÀ²a¸ÿïù[~¶ÃñÆÎ!áÎ9Up}ââDbcEÎòÀİ÷É'ÖuFݺÖ5PžiÕØ˜˜íÓ§äää˜0idd¤ŒÖ²ê>´òpûöíÍÿí iV–ÿ}ß°ìÕ«WM…à=zȼyóò'ݶVȵU«VÍo».¨’°züñÇͺnÍÎÎ6Uq“’’†„5<›‘‘!Ó¦M3ïoܸÑë}ß­M¼:?33Ó¼vv»ï§›~»í³ï²nû@q®×ÙƒTf ÎJÂûþL%á`8Þß})rx¡ÈšþV`UœÈ©¾w"xéùªÁök”é€ý–ò ã€à•š@H@É;•÷;ýÂÚþÔß÷ÔVñr 7nÌé€âÓ hD„H BGž}û¬ëŒ»î2„ñ@ù§AÑÞ½{›Ð¨†\5¤êT¹Wih´®&è%p(Uù†eí6ëÔ©#M›6õš d–9qâ„YÆ·z­›ðŠ+Ì2sæÌ‘÷Þ{Ï\5üê>vì˜<úè£&­ë¶nÝÚ¼ŸœœìÕv }{ýõ×ÍüÝ»w›×nBÂnö½°ñtÓo·}ö]Ömÿ(BÂPžl-’-’ËG샒†¶?»×ªB~pãà´gŠU-ôs&yã€à¥?_ (ñßþè_E8éga}Ý¥€v W­Êé€âIO©QCƒ^Œ,99ÖuF›6"øs„†E+V¬(ýúõ“Ë—/›ÿ?õÔS~ËÅÅÅI‹-Ìÿ‹Ö ¯V÷8p`À>œ>}Ú¬3xð`¯ùnBÂZaWÃË=ôtïÞ=?hìÖ*È·Þz«ì߿߼ÖJÊE©$üꫯšùÚWå&$ìfß O7ývÛgßeÝö€â $ åÅÅ“"ó"y |(Øðˆ,ø÷ ÆÁgç‘ugàlÇX‘/ú2^„„”´ó"Kîðë‡þ2> û¡Ñ‡SP8#ƒÓE÷ôÓ"±±V0°U©"òã[×YYŒÊ¿ï¿ÿ^ªV­jB¶ªmÛ¶¦Z­§3gÎÈÍ7ß,#GŽ4¯ µÎž=Û¼·uëÖüyݺu“J•*ÉñãÇö#**J4hà5oíÚµ…†„Õ¯~õ+v­P¡‚¤üPÞ3$|äÈó­¬k³Ã¶ºœ'{ß´º±' 7kÖ,ÿµoHØi¿Ýî{ ñtÛo·}vÚ–›þP„„ ¼ÐêŸúÈÛKÙŒE(Øöœ.8¹‰±@pÑ»V‹ý¬¡Ò4‚!a%-í=ÿ*ŸÅqÝ•§cGçðGqÚ hRSE""ø]þêՉ޶ÎÕ«”/_}õ•Œ3ÆLÏŸ?/éééòä“OšÐèܹsÍ2K–,1¯ãããM€833S† –÷5!ûöí3ËÖå5¬«ÛÑ ¶ZéwË–-fžV#ž?¾dgg˺uëdÁ‚ùëÙUo  +W®”I“&I‡̼ñãÇ{mÃ7$üÅ_˜åìJÇÊ3$¬}¨_¿¾ÜsÏ=&D¼|ùriÓ¦yúôé^mÛûÖµkWÙ¾}»§3fÈM7Ý$3gÎÌ_Î7$ì´ßÊ;O·ývÛg§m¹éÅAHÊ‹¥Í­à)BGò(‘…µErøø;þöî<¦sïÿv‚”x¥J…×ùT¶c»QÅnU¶c[ÝTÿ­]Užm7—ÃSúj_G»¹ªšâªcSJ*%‚ %uj’‡8Ÿùýó½—5æ°f²&sÈLæû¹®¹˜5k­¹çÎJf¾ëw5͵ (‘‘Œ"Ëk°(p1$LDÞ¶áiÇðOØ/yzô0 ž!""""÷ ¦Ý„v?ÃEd*ÂeËŠ4n,2…§­©ˆIKK“¨¨(E0ÿVªTI>ýôS›ùæÏŸ/UªTQ¯ã­‚¸:W!a3fŒT¬XQͯ¦%&&Jݺu-ëÄë(ë®\¹"ýû÷WÁV¼Þ¢E 9~ü¸©JÂwïÞ•ääd9vì˜ešuH¾ùæ¸Å´úõëËŽ;T0ï·páB‡Ï6cÆ Õ7øXX˜Lš4ɦ ö!agŸÛÌgwÕŸfÚåQIóºj³³÷ʯ}DDDÁ0QQp.E»X}>•}Ln_Y-²±û‚ÂuÙÉJоoˆþ~ad""oÈNYfþ±ÈµLöMžW_5 ̾!""""ó22´*±÷‹fÙèÒE;Î0@dèPöMˆ&%%©Ê¨:ë °ÙÙÙzk×®©JÅðZÃú°Þ{÷î.‡J¶YY¾)vtçÎ9yò¤å9Ú†6Z·Å:D‹ù=*7oÞôøs›ùìm7ÖúÏ ¯¹ÛfOÛGDDd„Wø‰ˆŠ‚}ãµ°)–Ì;²çP ÷nkA˜S«ØdL¿)åFû‚B ²‘·ìîXE8ùöË}³f‡„Ûµcß‘y£G‹Ô¯Ï*Âd Á`g|ø¡VM˜ˆBK~U’‰ˆˆÈ^=%"* VÕÙ;šý¬v½)%r3—}A…ëRº~¹xˆ}AÆ®fr¡ÀÆ0yKî¯"˫ۄ±ÏþÇöÍ}©©Æ!ájÕØ7DDDDdÎõë""sæ°/ÈØøñÚqÆ'Ÿˆ„…1LNj&""ò^=%" vz¨i)8!t‡ê­¨MT˜ðwO®g±/È9l#Y ì L ‘·ü2Þ±ŠpÊHmä²(QÂ8(|ù2û†ˆˆˆˆò§?s8h9±`vŒ1{¶öoZû„(”\½zU²³³åÞ½{ì """ðê)Q°;2Sä»H^¬vûcE–„³š0®ËD–Eðï ¹¶°¤HÆö&†„‰È°OþccÛ€0¾ÿ~_ľ±S½ºqHU†‰ˆˆˆˆòÓª•ȰaìrníZíãÿý?‘ðp‘E<,#""""r¯ž»1"?wb?»9ZH¡o¢Â’6Idm+ö¹¶¢–È¡éì L°3$LDž:ò…cá¤~"·Y×^ÇŽÆ!áÿþoö ‘¿-]ºTºuë&/^ôê¼¾’ž®í;&qDr!9YÛNFމŽÏ‰ˆˆˆˆÜÆ«§DDÁa-T¡¥à‡ŸãêÆ¬âJ…7lèÊ~ ×$ßdzñ Î$2$LDžÁ¾xⳎ!aŒ¸@ 2 ¿õû†ˆˆˆBÃøñãóöþ$¿ÿþ{¡·åÿþßÿ«Úò¿ÿû¿^×WÆŽÕBŸ·y:œ\ÈÈÐŽ1zõéÔI¤_?ö ‘»xõ”ˆ(˜]J×.XgóVû"áj¦6Œ1ND…as-(Läʦž"É’CÂDä©Óë´}rë€ðÚ–¬"ìÄŒÆ!áîÝÙ7DDDìCÂiiiòÑGINNŽßÛL!aƒkÕyï=nCäÚåËÚ1F‡Z5áÆÙ'XNœY¿^dÿ~‘øà#07nðw•ˆ(Ôñê)Q0CåÙø(‘;×ÙEBšÛ†²¨p ’õÁiìr Aò=ؘ&"¿ç^s¬"Ì‘[œÂÐÐF!á Ø7DDDìCÂ_~ù¥z~ôèQ¿·%˜BÂ))Ú~cZ·!Ê_ñâZÕééÓEÂÂX}š ×õë"qq"}úˆDDóÁG =&"¢ÐÆ«§DDÁ C¾§Œd?%§V‰,¹‘þ ÿÂÐÚØöŽÅ±/È5¥~îÄ~ ÀÄ0y"wŸÈÒŠ¶áïþCäüö³.Ë5¾øT©/ÜQh° Ï›7OjÖ¬©ž7lØPZ´h!«W¯¶Ì»mÛ6iß¾½”/_^š5k&ëQzÒ –Ç2YYY#U«V•äädõÚ¾}ûdÔ¨QÒ¦M©\¹²ôïß_m–׃¿§OŸ–wÞyGµå±Ç“ØØX¹wïžá¼Ö!áüÚçM£G‹Ô¨Á}F2§bÞaZ•*"k×jÇééì*sæˆDE‰„‡k!á Dvîd%a>XI˜ˆˆ¯ž«›¹Ú0¸'–±/Ššï"EMg?]ÍÔ‚0ع’6IdU}ö&=$ÌQˆ¨ ~çXE8ùíf*r `£ p!Ï#"""ò;ë0‚¼C‡UÏ'Ož¬ª §ßO3îÚµKJ—.-ƒ–+VHïÞ½¥dÉ’6‡õàîsÏ='O=õ”L:UNž<©^ûüóÏåù矗ٳgK||¼4jÔHš4ibÓ}y¬»K—.2aÂ‰ŽŽVÓ>þøcÃyõ°™öy±±Ü~ÈœêÕ%oûÉÌÔŽ5V­bŸáÙ®]µíï½÷D._fŸQpaH˜ˆ(X¡â,.Z³âlѳu ÈOmÙä_çR´¿)׳ØäªM/‹`?P`ÒCÂW2ØDäÜ\ðcC»*‘"™ß³oòÑ®qHxÞ<ö }Ö!a@0ÏíõÏ<óŒªê«»råŠ á~ðÁ–izpwРAù¾/ÂÂöï£/?qâDË´Û·oKíÚµ%22Ò¦š°}HØLû¼%-MÛ_LJâöCæ4h m3×óÛ""DfÍbŸÿ ܪ•Ht4ÿnQðbH˜ˆ(XíˆYÓœýPé§ó©ì òŸßiÛQ~ô›TXU‘ù;”!a"rWúlÇ*Â[^à÷ C‡‡„ÿùOö }fBÂwïÞ•2eÊHçÎeñâÅ–G5Tu`ÜÍÊr~?B¿™™™2}út5ïöíÛ–׃¿:„Ž1ýôéÓ†óšmŸ·L›&‰ÏÂí‡ÌùóŸµcŒŒ -¬‰J®Dþ€`ºÆöGDDD¬B6 ‚ÞnݺÉܹsCzXºt©ê‡‹/ºµ†7ú裤aÆҦMÙ¼y3›ˆü U­Nc?UñQ"¦°ÈöY^ƒý@ùÓ«N_Jg_PàaH˜ˆ Aà„§l KФɾ1á?ÿÓ8$3!a„~1­råÊR§N›Gß¾}-ó9 ùªÃÝ3g䥗^’°°0yä‘G¤I“&jÞmÛ¶å»üǬ¦ÿú믆óšmŸ·tê$2p ·2¯W/í#%E»I±gOö ùÇ›oŠDE1 LDDDÁ/dCÂwîÜQ¼cÇŽ èvâ¼G6Óp—p¹rå¤Q£Fó7oÞ\}&W'¬™™Ïþà¤@Ë–-eݺu²hÑ"yë­·Ô<_|ñ…ÃòX7^ûî»ïøGä-¨0‹ ×jQÑ´u ÈúŽìòŸ¤~"{°(_â;(›c«QbH˜ˆ âÔJ-lNü«ÈÍ\ö +W‡„Ÿ~š}CDDDEŸ™0®I–.]Z^xá—ëruÍ×ä~øa9räˆz¾bÅ Ó•„ǧ¦[ ²ž×lû¼!=]¤dÞ®÷òåÜvȼaôcŒ„‘éÓµª®D¾6s¦ö÷ ÛQ°cH¸!á´´4UE7''Çëí²_÷k¯½&ááá*¬KIIQm/^¼¸ÍýÙ³g¥X±b²aƼÕ1b„\¹rÅe› ¾qã†jÓÔ©S-ó`ݘ§R¥J6ÃCÂD>°w´ÈŠZú¶(ûm–N¸‘þ ÿXÝXûÛB”¦ð÷éÄ2ö†„‰¨ ’_± ã‘>‹ýbFÃ6 ׭˾!""¢¢ÏþÚ¼yóÔó]»vÙÌ÷ä“OJ©R¥ÔµoÀà©r»!÷à’tÞfœ·=‹ddhÇ)h“|q‡V­xLKDDDEGÈ„„4l×®T¬XQÚ·o¯î¬uÞ¶m›š§|ùòê Û:ˆ‹;€kÖ¬©–Eˆ±E‹²zõê|—³†mÏž=å‘G‘ *H“&MdÓ¦M†ëþæ›oÔs몽ûÛßÔÓ'Nœh™>lذ¼ƒë–vbyÄ»j³~†'Mš$ 4¦M›Ú€­Op¬\¹R̓ç=ö˜ZÈuâó¼úê«êµüѲ¼³ð¾}û¤{÷îR¥J©^½º 0@N:e3þ9Ο?ï´}îô}(ð$ïoö'Ï oß¾jجuëÖÉ¢E‹ä­·Þr8ѕ߶UäOÕ.\Ÿã"að”‘ìò=½2ìï‹ØdþïÓþXö„ƒ&"wì|ñŠðž÷Ù/njÔÈ8$¼e û†ˆˆˆŠ6£ëcÆŒQ×#1=>>Þ2=11QêÖ­«¦ãy†nyÝUa\/DP¯×¯__B à… Z–/]º´š#bÞ°°0u}ÍžÑ{å×>O!l‡*ÂÓ§s»!÷,X R¢Äƒª®ØŽ0È@Gµê¼?‰DDDDEFH„„q·l™2eäÅ_TáÑÙ³gËã?n¤Äð?8€óÏ>k3ý³Ï>s8¸w¶^ëùÐnˆ'L˜ N*àná3gÎ8œà8räHÞX¬zŽP2ÖµgÏKHøÜ¹sRµjU ¾råŠZÞ(È©÷>îxÆI„{±,Ëö')\µÏl߇ OBÂiiiêgiý3ðgëµ?y†*Øááá6¡x,‡ypB wà[ ÙðÞÑ"+j‰Üãí«EÞ®7EV7f?ïá¦Þ|@îØÐ•71P`bH˜ˆÜqù¨È²ÊŽU„Ïíf߸©W/ãðäÉì""" M×®]“ŒŒ 5ú£½ììlu]äÞ½{n­×0£ëÆ{èëÁu9¬[ ×ÉnÞ¼évÛ Ú¾ü$$hûˆ‡qû ÷ ¬‰mgäýÓ‘mÛ> y*wêÄ~ ""¢¢%$BÂ"@‹ƒgŠ~øá‡6ó>óÌ3*àªÃ5§|ðe‚±XÖ:„jf9èÒ¥‹Zvûöí†m5Z7ªó¢â0†ÂA9^ÇI€!C†¨*¼pàÀ5}ÿþýê¹ýÀF뵞C]¿~]MC`Ó° Ø9Q Ïq'²N  Ôë￯UÞ1 r¢¿pÇó­[·,Óþøã)Uª”Œ5Ê­ö™íûPáIHØÙvâ)gëu¶mYWŠÆ¶…íÓûal+!FõÆ}ãù  N,Ó‚ ׳Øä[GçhÛÚíËì 2gÛP‘¤~ì }ºDEEY–q7$|âÄ Ë´ÜÜ\5íã?VÏÝ ‚»%J”ÔÔT‡ 'î<ÆðFà ®µiÓFZ¶liº}fû¾(Û¼y³´k×N ûÔ¾}{Ùºu«aHxÛ¶mêõòåË«ªÍ¨ªmmÞ¼yR³fMµ,ª6·hÑBUº6³¬¾]ôÌ;"Çv€P{“&MdÓ¦M.×k½m­\¹R4h ž#ôù°ÝêÛÂòxíÇ´¼§³0ªgwïÞ]…èqƒÀ€äÔ©S6Ÿë?þ¼f ïÛ´iS›p²Ù~ó»ì$íÂõ¥t~ƒ…„ƒ–ÔÂÂD¾„ å¸Ȭ1"?³œ =$|&‘}AD®Ý¹®U ¶/«$’¹œ}SßoÎ;4'""""’Ë—E""D¦Og_ûÒÒ´ã‹´çØŽê×g¿÷¡‚0«QQTäCÂ!Bûª²F!ᬬ,5­råÊR§N›Gß¾}-óÙnÍ.§Ïg=ÍžQ˜W¯üÉ'ŸÈÛo¿-TÓõŠº<>ûì³2tèPË2õùàÂ… ‡„ñ>eË–•Ö­[ËÙ³gm‚œz?ØWq{õêÈfÚg¶ï‹*lI¿øâ‹*¼:{ölyüñǶí]»vIéÒ¥eðàÁ²bÅ U]Õ–­·k± aÙÉ“'«m&==ÝÔ²{÷îUíÀ6ðÕW_©ð”)STûœ­×~ÛBØ=66V=G€óíٳDzm;wNì Fµh0 ëméÑ£‡¬Y³FâããU¸Ë¢‚¸õv…Ï„àò„ ¤cÇŽR¼xq9sæŒ[ýæwe­ïÈo¯P²º±HÊHöùÖ¦žÚƒÈ¬´IÚß'¢@Ã0™uø«o"rï6û¦0d´QH¸E ö ‰ FKÉ’"™™ì r_F†v|ÑøþéÈ„m{ºÌñÈ‹’“µí Õ„‰ˆˆˆŠš"¾xñ¢ "DiÍ($Œi¾ð .×i¸5»œ>_­ZµL¯[‡`ä_ÿúWiÞ¼¹ª ·nÝRAÜ¿ÿýïªÊ)ºÂ –Ç|xÍ:ȉv£Êðo¼áðùÔDhÓlûÌö}Q…Ð**å¢tÂÚ‡°QÙÛ![„]íÃóFÛ‰™e»t颖۾}»[Ûµ»ÛÖ‚ Ôëï¿ÿ¾znF{«U«¦¶3Ýü!¥J•’Q£FÙlW:tëׯ«izèmu·ßüæf®È²‘cqüö %¨ðÊjäkñQ"ûƳȼŒÚwQ aH˜ˆÌZ÷gVö"Z—)ã.WŽ}CDDDD"=zˆôéÃ~ ‚ÑCÂú º¨ „ç©©ìòžÑ£µ úmÞ;LDDDEПBáCFFFÊ£>j3móæÍ!axòÉ'U˜ÕoAˢʨ;ËéóaÙýû÷›^7¼òÊ+®Âµ¨”ªC¨6,,L-súôiËtûp­³õú2$Œfã¼=i„x태;7iÒÄfþK—.I… dÈ!nµÏlßEåÊ•SUw­ÙàïÞ½«*ëvîÜY/^lyÔ¨QCUn¶fæ5³¬>*õâÿF¼wñ{šwäo¾wïžú}°ïhÓ¦´lÙÒf»:qâ„åõÜÜ\›íÊ~ó›#3E¾‹de«Psj•ÈÂ’"·yK<ù‚1¿/b?yY Úvã…¿Mù£[·n²víZY¹r¥ú?¾—õïcŒ6€‘ü½¯·téRÕÜthôÌkfY}ûu¹Z¯® ÛÖ Ú­[·Va!ë°Þûßk@°·Êý³f¶+wúÍ/p±ze4+}†¢9Zhá\ û‚|ãj&u侜dm»ÉMóxUçÎSß¹‹-’¸¸8õÿË—/ËáÇÕ>3žc_ÿFDDø-,l¿¿`´ÿëÖGí8~ü¸ß>‡³ŸY@¸žÅ¿iD”¿-/Ø„ñ8Ï~ñî§5 óZQèÂåÈN´‘'ôã ªS¿÷û…¼#.N»™!3Óÿïýú믫ó«×®]sx £ùöêÕ«Èö»Ñèß ŸóF1ÀÛ¥.ÆÈ˜çÇôIÛìs …ÉsúÞ¼ŽADDEl:>ä•+W¤ÿþ–°j‹-ÔEt£HLL”ºuëª×ñ¨X±¢ >Üfž1cƨéx=>>Þôr°fÍzÔç‹ŠŠ² ´­[oo×®]mÖ…×1}Ô¨Qù~ù­××!axë­·BÂ0þ|ÚÔû!::Z6nܘïç°oŸ;}_” ìÏúâ‹/ºÜ™ÆsTs~á…ò]§}˜×̲ú<µjÕ2½^g;×f·-üì1Ÿ~€ ‡„Q½U†ßxã ‡6 DÞ°aCÓÛ•;ýæGçˆ,ÓÂ|z?8ý@¾jÕÆ\Jg_yzóôZW…ïo|¯ZµJ}§cŸ£`ì'oÚ´I)¥J•Ê·òÞ¼yóÔ²»vírkỸåöã šÉõí\› #˜‚êÙñZ‡„›4ib3ÿ¥K—¤B… 2dȧ;ÇFás³ýæs¨"¼¢–HêX~k…ªmCE’ú±È7@_ÁáµÉ}¦ý·Y^YU™2eÔM_?ýô“úÎÆ>²³úü%¿ ¯³› ¼±nwäÎï½½õ3 ( ‘+;‡;VΘÏ~ñ‚E‹ŒC¸ØJDDDˆrsµ a¹rÆû1|xþ(QBdÕ*nkä¹jÕ´m*#C{¾`&òâ#¨"ŒcÚÂl!aO΋Ûsƨ‚åË——W^yÅa¹W_}UªW¯î×°7?·»&""oø»€(x7NíäõîÝ[Ö­[''N”'žxBMûðÃ-óíܹS ÓjºK–,Qù-[¶ØT°†Ó§O«ùbbbT¥bTí3³ìÖ­[U9t“’’$==]æÎ«ËÎÖk´síN•êíÛ·'€¦=€IDAT[ªƒ[W©þá‡Ô´ØØXüÅ{0 ïதº«ºÙ°Ù~ó¹#3µ «‡.„8gˆ“|aë@‘µ­Øä>T9÷Ò ,¿üò‹ªt{ùòeuÓnª\¹²´oß^ýßnBÂ!çÎSûD?þ¸º‰Hÿžž5k–ºq£U|öÙg6ËîÛ·OÄѦMõ>uWk®‚¼xïš5kªç©íX½zµWÖ­Ã( O?ý´Úÿp%¿°ÞOúz̾׶mÛTÿãDl³fÍd=J*¹ø™†„‰È™s»E¾² ¯ï r3—}ã8ä6 †ØÝÇKDDDPçys‘ˆ‘9sDP¨•„½[I¸A‘âÅT~%òD½zÚñEjªö<-M{žÎòÈCqqZHør! 0d6$¬ŸçÅH{“&MÊûÛ@š6mš×þ8›eP,nÊ”)Ò¶m[un·^Þ/Orr²Í<8‡Ý½{w5ê3¶¸–~êÔ)Ëëú{¡®ïW­ZU­ÃÕyñüÎ'²íÚµS£Bc^d œ…„‘@»*Uª$7nܰ¼v=ïKË¿ÿþû6!a3çå­?ŠÏ½óÎ;êó<öØc*[`]ˆÎ:Çàês›ùìÎúÓl»õsúÈ=¸j³õ¼ÖçÿÍülˆˆ¨ècH˜(ˆ!˜E=,‹KDŒv¦±3Y·n]ËÐØy>|¸Ã:Ák˜'>>Þô²kÖ¬Q;ëú<Ü:Lk´^OBÂðÖ[o9„„aþüùê Fo ÂA7nt¹slv§ß|ù/ Ï;BÏ >”e'iÅÉV7Ùõ&ûÜ·¡«Hò0Ÿ­þí·ßVß½89f€Õ¿Ïÿö·¿©êÿ3fÌP'EQÕ7NáäçÔ©SåÙgŸu¸ÃÿóÏ?—çŸ^fÏž­öK5jä0« /NÜ :T=ŸHœ_¸Öìðbî®û§Ÿ~’%JÈ¿ÿýoSýäIHØÙ{=óÌ3ª7¦áÄá|Û&B™Ëù;JDv_,¹"ßW· ÿÜI»1“¼¦E ãj¼öDDDDdÁmÕƒÉwP•ýüÜsì òÜ€Úöd nÛVdäHö ¿ ×*ÊwCÂ:tPÕtÁ[LùjΩתUËéûáÜoµjÕlFðûã?¤T©Rª¢­õ{ 4Èay£óâfÎ'#œŠªÅÖçø‘)°!ô0*£€* ëúô飪ñêUˆõ°=£óòÖŸ …Fl·¥víÚiÉØ;sv=ÀÌgwÕŸfÚm¶ÍÖóêׂþ\?y CÂDDêà4-¼—“̾ ­ÚëAV9#/;—¢dP­šÈ]¦ˆ¬ªïó·ÁÝí5jÔP'¶0š~T?Ùe}CF°?1xéÒ%‡h:œHËÌÌ”éÓ§«y¶oßnyÍÓpAÖ½eË5|ª(›Uа³÷Bà:wî,‹/¶<ð3@Eƒ €¿kÇâø;JDvß[;V>ò?ì/ëÛ×8$lu½’ˆˆˆ¨P!¸Š ²/ü¡\9‘ºuÙä¹aÃDЉ‹{0íÍ7E:ubßPÁáf³:©åQ°K‡BböÕd1â®^µp­!L–÷ûä8B FôkÙ²¥Í{)³?/nö|r¹¼/û÷E`ØU%axå•WÔ²·âó¢*.Fvvu^Þú³Y8 ðbúéÓ§Õs3!a³ŸÝUši·Ù6ÛÏ[$Îõ‘×0$LDˆ0Dö’p‘´Iì Ò$õÓ*KyÓÑ9Z@†ÕÊ© ~_¤ÝÌrï¶Ïß '´ºuëfSÁèĘÆ0i:£0†_{é¥—Ô QœlÄð]˜gÛ¶m–y ödÝ­[·V•}:dºo vö^8Q‰×+W®,uêÔ±yôEò+0$LDö0zšf¶áµOˆ\É`ßxÙ˜1Æ!a»ë}DDDD…fÚ4‘’%E2¸+è(^X±"û<7z´HX˜È”)¦Íœ©ý>ß¾Íþ¡‚A%jT¤.Lo¾ù¦:{ù²ãušN:©Ê¹`t>üÂ… !aøüóÏÕè|Å‹WÕ¯^½ª¦ëç~í+÷B£UªTqú^:ûóâfÎ'£Ð汯^k&$¼víZ5Fœ3gŽ ¸"üj6s^ÞÕgCbú¯¿þªž› ›=—îª? r=ÁY›íç-çú‰ˆÈk‚#$|÷FÞÎ>øðÏ#wÞÝz‘KG´ †xpøQò§‹‡D¾‹Ù:Ð/Á+ ûcµí‚È›RFЬŒf?PÁà†„¬®fúåípR ¡ÖçîQéIH~øa9räˆzŽjÅÞª$ìɺSRR$**J¤³®ìJACÂÎÞ 'fQá…^Þm“!a"²wðSÇ*Âi“Ù/>ðÓOÆ!á~ýØ7DDDTø$ÄìÉGºu)^œý@ž‹)UJûW—œ¬o¤¤°¨`ð0©ë5MÊkÎ×;vÌᵦM›Êo¼¡þïNH>1b„+VLÞ}÷]5íÖ­[껾Nk;v”† :}/ýyq3ç“/^¼¨–yñÅm¦› £Â.Â˨¨ŒÐ´4¶ ›9/ïê³7NMG[ÁLHØì¹tWýYë ÎÚl?o‘8×ODD^!a7í/æðÁGa=–Eäíå1¬ï(²±GÞè0m¸mTÓ;ŸªU("*¨Ü4mûÚЕÛÙÊIÖþÝÈa_÷à» Aa¢‚ÀTø»tÎ?gáqÂÕì‡Ws7$|òäI‡§ú‰7œX4:™fô|Þ¼yêù®]»,ËxcÝ{öì‘ððpùóŸÿl©ðàJAC®ÞëÉ'Ÿ”R¥JÉÙ³gƒsÛdH˜ˆ¬áÆË5-lë¨-r-“}ã9Ó($œ÷UCDDDTèôaå(ôTEŸçð´6yUÀQIÛ”îúu‘ðp‘Y³Ø?ä¾ÌÌÀøNX´h‘:_»`Á›é¨,\¾|y™:uªzînHX×µkW©[·®åyóæÍUµZk8‡^¡B2dˆÓ÷Ò7s>922R}ôQ›i›7oÎ7$ ¯¿þº »¢2rjjªšf6{^Þú³Ùé@¹^½z–çö!a£Ïmö³;ëOw¯'ä×f£÷ úsýDDä5¬$Ìf* #¸‰jyx ŒÐªzîyO«öº¦¹Vá1ì6žãµS«Dnæò/ ™“‘wð·$\dSO„ÉÑíËÚß—¬öyþæà{¨ ‡ù$ŒùË/¿HLLŒ:†ðjFF† >\ÜÂISg'ÖÌ„„Qy ZµjÒºukuBó6kÖLÍóÅ_8=™fÿüôéÓê¤$Ú‰;õ±^o­{ݺuR²dI5ÄîöwE c¸µÄÄD›Nä½vîÜ©>ªG,Y²DrsseË–-²téÒÞ.‰(H›«íG[‡„S?d¿øPd¤cH8’ƒ¢Q8°ð‡•5ß|£íÚöN䶸8-$l_ ¼U+íw›¨ ÛŽUoò ®7nÜPáÙš5kJRR’:Çœ“““·­“2eÊÈ©S§Ô|fCÂ&LÈûlq*Š"•+WVç~u?üðƒZ&66V-óÜ Pçˆ:äô½tFçÅÍœOÖ«ÞöîÝ[“Æùú'žxBMûðCÛó4ö!aý¼¿^é¬CÂfÏË[¶:ÈîÝ»Õõ‡Y³f©ŠËsçεÌg6úÜ`æ³;ëOw¯'ä×f£÷ úsýDDä5byÑõ¬¼=ĵZ€•`õ ‘øÿÑ9 “1T`ÜÜGÛ^ö×*]Y-rd&û¼ãâ!í;êR:û‚ 7F¥ŽõújÓÒÒ$**JÌ ,ü[©R%ùôÓO-ó4$ ß|ó:ù†éõë×—;v¨“d8©†°­ÑúÞo̘1R±bE5=>>Þ«ëÆ‰\L3úÍš6zàD_Aß !cT˜Ðׅω vPÀ¨ ‘nC»*Âçƒíf¿øPË–ÆÕ„Y=Žˆˆˆ Sn.+ކ_~Ñö¿ü’}AžA‘UlK}úØNGeáÆÙ?価CEúõ Œ¶¤¤¤ämÇÕyØ%J¨«V­*ß}÷e³!aTÝÕÏYãßAƒIf¦íhJóçÏ—*UªXÎýFGG«së®ÞËšÑyñüÎ'_¹rEú÷ï¯Î“ãõ-Z¨ÑñÌT¾{÷®$''˱cÇ,Ó¬CÂ`æ¼¼õg›1c†ºæ€ÿ‡……ɤI“lÚ`vö¹Í|vWýiöz*)c^Wmvö^A}®Ÿˆˆ¼†!a"_BåO„†wĈ,‹ÐªšýÜI$m’6=wŸVµÕ‹YÅ9tªTŸÛ£UƒE˜|m+íB5¶‹ó©ü!×Pez×›ìòT/ÇwoL OlªýmòœÈBõTÆÝñÞ„ª¹ÎK‡¨X|ïÞ=·ÖsíÚ5µ–÷öºªãDhPµ!a"ÒXæXExï?Ø/>ö Æ!áû×툈ˆˆ †%KjaaòÜ(†}Áwße_gµmé/±ŽAÇ0=#ƒ}DîAá@ºqç_Oœ8!›6mR}oÞ¼éѺp>:¿uà¼/Îÿ„ÑyqÈï|2*Ùfeeù¤Íœ—·Ñbþ£GºÕ×Î>·™Ï^Ðv#`­ÿœðš»mö´}DDT40$Lä/w®k(SFЬnìx¡’Ðz, ת/îyO«$Ld*M¯öþ-ñ8 |Xš7o®ˆ‹/®þˆˆ°„…ƒá`!g´³råÊ6C1áßÚµk«áŠ ã³|ß­ª/’:–¿Wä™S«´¿KW2Ø8&"}ßÙþæÜÝïp?øé'ãðË/³oˆˆˆ¨p –@XX`UŒ %eËŠ´kÇ~ Ïè¡Îõ 0-&†}DæÍ™#¡}?PhaH˜ˆˆBCÂDDDÁââ!-Ü•àµU¶lÙR¢¢¢ÔðE¨¼{ðàA™0a‚œ?Þ¯ËiiiòÑGINŽûhT:Fß{ï=zFhøÌ™3²råJyíµ×,!á„„1b„–ÇìßÏ“Ïèutb[b%sòÔÕLm[ú}û‚BÂGç°ˆBÝÖÁ¬"\H0j¨QH˜Á"""*, ¬Y˜þã?DêÕc?g22´ßãrå_{óM‘ZµØGd^¿~"}ú°BÑÕ«W%;;[îÝ»ÇÎ "¢Â0Q°@Õ³Åa"§yeu«"\;v¬ój²þ ùå—ê}Ž=êÖr‹/VË?>à|ýŒ>@'¶%VÒ#oXÛJ$e$ûBÂûcÙD¡ìÜ‘¥ìªÿÜ÷ñ£êÕC¨ GDDDT ¬_Ÿ# Ëc‰T­Ê~ Ïè!á?¤ââ´é¸a‘È TŸž9“ý@DDD¡ƒ!a""¢`òS[‘mC½²ª[·nIåÊ•¥}ûöêÿFô0Å“&M’ HÓ¦M%gÝììÛ·Oºwï.UªT‘êÕ«Ë€äÔ©S–×çÍ›'-Z´¬¬,‰‰‰‘ªU«Jrr²š^³fMõ> 6Tó¬^½ÚÔghÞ¼¹T¬XQ.\¸ï¼úûçææºlî×_•ž={Ê#<"*T&Mš¨ŠËðÙgŸIëÖ­mÖŸ‘‘¡Ö÷Ã?8¼Ÿ³ÏˆªÇS¦L‘¶mÛJùòå¥^½z6mð™äa"ë;ò÷‰¼aÌå5¼¢ÀÁ0%õ· ÇG‰älc¿øQÞ!†a5á@¸_ŽˆˆˆBOãÆZP˜ GË–"aaìòÌõëŽ+ìëÃó’%Eq°32Û ¶#\Š!"""  “1^ w¾ýöÛ*¸Ú¦M9~ü¸ÃëzHxðàÁ*Ü:aÂ騱£/^\Μ9c™oïÞ½R¦LéÑ£‡¬Y³Fâãã¥Y³f*x›sÿŒ¾®çž{Nžzê)™:uªœ‘wœKÑX)ïhÿ¿p€>Ì=r÷‹d­¹éåjõ …ø÷’Aá=£x3‹Ÿ½û®qH8o7˜ˆˆˆÈ¯._Öƒ˖±/ Nß/Î~ ÏéLJ9¾Ö¶-o(lK—.•nݺÉÅ‹½:¯·­]«}/ xNDDD2ûÒì""¢ òÛ,­b§—ܼyS^~ùe^-[¶¬ ÊÞ¹sÇòºtíСƒ\¿ÆAYLûÒê ÿ3Ï<#ÕªU³©HüÇH©R¥dÔ¨Q6ë4hC;°.¼vÔÒbôb™W_}ÕÔüÎBÂFíAð¯mß¾Ýp]}Fô}­Zµü» éNüKä-ßUµ cñÁ‡;…%D6÷¹‘ãí‘!a¢Ð¶÷}V³f‡„ÿõ/ö ùתUÚ~HVû¢°¼ô’ö3@`›ÈåÊiÛRb¢ãkÓ¦‰DFŠÜöãý¡}ô‘:ç™÷Æ· Þ# ⺠æùñÇ}ÖŽñãÇ«÷øý÷ß õçcMÄ[ózÛÈ‘Z…yoÀÀ•GŽˆ¬_/²¿jÀðÁG(Ê£¿KH¸ys‘˜÷–AÛV^W«ãÚúõEÂÂŒ{ùà#þ•ˆˆ¼‹!a""¢`rçºÈÂ’"§Vy}Õ8ƒá¬«¨¹pá‚MH![<ÿðÃÖùüóÏK•*Uò=éc íÓ§4kÖÌðu À[ºtiùË_þR TÎÚ£ž¾}û:]—·BÂðù矫*ÎÅ‹WU—¯^½êÛmh}G‘”‘ü]"ïùm¶Âúc5û‚ îf®ÈÚV"+£En{XZèçN …*üî[„‡‰ä$³_ î94ºˆÔ°!û†ˆˆˆü«m[‘7ßd?¦3´}Ádîš“‡ZµÒ¶¥¸8Ç×âD%áØXÿµA܈ˆ)_¾¼¼òÊ+¯£ÀIõêÕý.ÈÈÞ !aT4Ç¥™3ÍÍì7BÁy?fµ¾S0Æè9¨TŸšÊJÂ|°’0†„‰ˆˆ‚ BTi“|²jœ)Q¢„ªlëìD}HøÖ­[j™7ÞxÃa};v”†÷“Íhܸ±:wæÌ·O:9kÏ;wTø¸V­ZN×e>tèPB€ö1BŠ+&ï¾û®ï¶KéZÈ<+¿Gä=›zjA¬9ì ò ªRÇG‰ìòðê-CÂD¡É¨Špò0V.D?ì.[–ýBDDD~<̼î^Œ|cÝ:m_ð»ïØä™N´ê­hAxUbý!áGyD  •*U’V©9ŒÖX±bEyÿý÷BÂUC0cåÊ•¥ÿþ’˜˜h³îyóæI‹-$;;[Þyç©Y³¦<öØc«Fw´fÆr˜ÏqmëX½Z+î°mÛ6iß¾½º¦‚b,ë‘l5xOR‰ÉëLŒ¶˜|?Ýo¦Íú5‘Ó§OçÛf£ë3ùµÏÐdü=JIq=Àz(½kW‘E‹D23ù;HDDDÁ‹!a""¢`³#F åùÀ¨jÛ«W/õÜLHš7o.Mš4±Y×¥K—¤B… 2dȧëÒáä^Ûµk—[íýæ›oÔr¯½öZ¾óš ÓO>©^Û[¿ üóŸÿT¯ëÃu¡ª1NŠaÚܹs ×oæ3víÚUêÖ­ë»máòï"–!ïZ^CdI8û¼ãXœì;ŸZðu0$Lš|Â*¦sgãj§N±oˆˆˆÈ?ÒÒÌ…ÁÈ·1ÄÏaÚ4öyaÍŠW Ö ‡ù§=zHxùòåêÜ?þÕ-[¶Lzè!Ù°aƒCH£ bÆÙ³gK||¼4jÔÈáúŠ~}¡wïÞÒ¥K™0a‚DGG;\›ë0¼C‡UÏ'Ož¬Š—¤§§«ë(Ž2xð`Y±b…Z/ ¡X5ÑßEdžzê)™:uªœ$üÃ?¨i¸#¯ãNqÜ=“8‡îŸEqÊÅüÅ‹Wí¹xñ¢Ü¾mî³!œ‹jÅú‰§¤¤$õþ8q´páBõšôu'$Œ>AU_„Ÿ±NœDCøwóæÍ–×±ìèÑ£eݺuÒ§OiÙ²¥Ë°ÑgÄI²¸¸89{ö¬ìÙ³GÝm>³ª¾Èž÷ø;DÞs3Wda1‘°/È;ðݶ¦¹È†®_B»8–,QÈýíX׊U„Ì«¯‡„çÌaß‘à'†ˆ¿ÍÝÂB•‘¡íŽþ Ï ¦X2~¼óy¢¢DFöO{ô0*£j0®‰èpÍ@¿þb¶‡à­ý(„úõ…‰'Z¦ášBíÚµ%22Ò¦2¯uHŒF5|æ™gTU_Ý•+WÔõ›>øÀá= ”ïg÷´Íö×OÌ´ÏîØÑøµ¤$‘5$¯­yó÷ˆˆˆŠ†„‰ˆˆ‚ÍÅCZðáRºG«IKK“¨¨(u"áUü‹!±>ýôSËôÕÒ¥KÕk8™… ÉeÊ”QÜ™;ô1ß×_ítýöŸñõ×_·<Ç¿8ù–é«1«Î$jÛ +ê‘7KѶ«Ä¿²/È{N­òìïBÂQèHŸÃ*ÂèûïC£F±oˆˆˆÈ?bb´áâ©p]¿®í¾ôû‚<ƒpµjڿΠb5*Åææú¾=zH^yå)W®œ ·ææ½9ªâ&&&º #@‹ëÓ§OWólß¾Ýòš³ë¸†€é(J¢Ë/$Œb+¸ŽÑ¹sgY¼x±åQ£F ›¢%ú{fee9ýÌÞj³õ¼fÛç ÑÑÆ!r„‚ÃõêÁ¾ºDCDDDT˜&"" F¨$ŒŠÂ^€“0¨–‹Ê¨(ì)œˆÊÎÎ.в׮]SqRÈ]î?~\“ýõW¯|8qâ„%hlïܹsꤟ'ŸíÆó›7oúv›ÙÔS«ÎIäM¿/ù¶˜H*KÁ—áïÕ¶¡[–!a¢Ð‚jÁ«›²ŠpÒ+ÆÙ?úôaß‘´më:LHþS¬˜ÈÓO³È3þ£R°«c œÊGHØ#˜X‡„×®]«B¯ápNÞ›#àŠkF!á3gÎÈK/½¤ `ù&Mš¨y¶mÛf™ÇYàÅ[0×@tù…„úÅsŒdX§N›Gß¾}ó}O_´Ùz^³íóÔåË"%K:V FÕy„±}±ò<U £¤~ @‘yzµ×Œì ò®SD–9ÊqÃÉË~›¥U½žåþ² …–ãóYE8€U®ìnÚ”ýBDDDþÐ×Ì™ì‡@P¶¬H›6ìòLl¬Hd¤H§N®ç8P¤~}ß>­C¨°‹‘{õê•×¾NòÁ¨éF!á–-[ÊÃ?,GŽQÏW¬Xaº*ï¸qãÔô‹/Z¦å¾s玪lü /¸ü<®BÂÞn³õ¼fÛç©„í˜Ôº&LR’ö]1r$ÂDDDT´1$LDDŒŽÌ‰b…42gs‘•ÑÜ^Èû’_ÕY§V±/È»n_Y.rhºûËnìÁ0Q¨À¾ n `á€Õ¼¹cH¸\9mÈi""""_ÊÊÒö=ÒÒØ bE‘ºuÙä„„#"DZµr=_JŠöû¿|¹oÛc†×_]…]‹/.©©©jš}HøäÉ“ê9ªëêôÀ-æÕé!ZûQ@®W¯žÍ4ûð¼yóÔó]»vYæyòÉ'¥T©RröìY§ŸÇYÈ×m¶/3íóT^7IãÆžgfj¡ó~ý&""¢¢!a""¢`”›¦… ²“ØäÚ¥t‘…%EŽÅ±/ÈûÖwÐþ¡Z5‘·mª~Ý…€ CÂD¡áØ×Ú~«¬ÁƒCÂxüò û†ˆˆˆ|kíZm¿ƒ7'†5D}”ý@ž™>]䡇DjÕÊÞ¶mµ0±/ßö!á7ªàkÆ -ÓìC¨8\­Z5iݺµ ¯Y³Fš5k¦æùâ‹/,Ëé!Ú:ÈîÝ»åêÕ«2kÖ,)V¬˜Ì;צö!áÓ§O« rLLŒªÞ‹÷ܹs§šÖ±cGY²d‰äææÊ–-[déÒ¥ïiöE›íßËLû<•·jU1X×µ«¶\¾Ìß-"""*ú&"" V«ê‹¤Že?s¨¢·¡«È𿬍G¾±¼†ʺ’Á¾ ïË\®…ÿn丷CÂD¡³ŸÃ*Âï“OŒCÂS§²oˆˆˆÈ·ÆŽ5$$ÿ¨SG«&L䉸8íxÕ_󓔤ͻʇ Ù‡„ïÞ½+ÉÉÉrìØ1Ë4û0|óÍ7*t‹éõë×—;v¨p,´ .Tóè!Ú3fH¥J•ÔÿÃÂÂdÒ¤Ií° Ø1cò~ç*ªéñññjZbb¢Ô­[WMï>ܲŒ³°;mF%eÌ›_›Þ+¿öyA༦Ȳe¾#ÂÃE22ø{EDDD¡!a²´9rD¶oßîÓa<ÌÀ%8¨Â]–mÚ´‘Í›7Z[pwb·nÝÔ]–DDgßx- Ç ¹ÚFPQï|*û‚|ca -”Å¿Cä ·/k!áŒî-Ç0QhÈø–U„ƒ@r²qHøïgß‘oõé#Ò£û!P4i¢òˆ<À¯~LaÆÀ"ÑÑYQüÎ;ꚸ×ê322äÞ½{ê¹uˆó=zTnÞ¼éÖ{\»vM­ë¶–­Åú{y«ÍW®\QëÖ_+H›=iŸ+Ë—‹”,)’›+’šªýÎþNQè`H˜äðáÃÒ¼ysu a<ðoDD„W®î8t¦oß¾Ò²eKY·n,Z´H8àtÞ:uêH»³<ò¤\¹rÒ¨Q#‡ùñ9ÇŽkº]i?‘ß\<¤#²“Øäè蜂…ëˆÌºžu?”U–}A¾ƒ*¡Û†º· CÂD¡aÓ_YE8v®‹”.íîÒ…}CDDD¾Õ¸±È{ï±öÿJ”`?gSdeå??ªÄ"œ>~|ð}V^£ö®7ßiÛ9‘V­DzöÔþODDD*&ÈŠŠ’M›6©€íÁƒe„ rþüyÓëHKKSÕsrl‡NHH#F¨;͸qãFÞÁZ¸L59îäk¯½¦æ¿mµŸ’’b <[WFèCžlذÁ¡]ÎÚÏ0" xIýD–?"òÛ,‘ó{E.à#T¹ûEþX›÷X©mKÂ&ßBµF„²PÑœÈWLYQ˽à‚‚[²ïˆŠ²Ìå¬"DÜ1$\»6û…ˆˆˆ|—ŒP%rÖ,öE èÕË|õW"g’’S:dnüÀ߃„„àú¬¼FíÝï„ÈH‘I“Dbcµàxz:û…ˆˆˆB ÇBB±8À@u]O|ùå—j=6Ä¿þú«ZO\\œ©ùçÏŸ¯æß±c‡eÚŒ3¤D‰júúõë-Ó¿ýö[UaAd³íç¼ÿÝ%²°„m5>Bû±¨Œ»Ä³\äcgµmn]+öùÎùTm;;—b~ü Db"*ºžbá Ò»·cH¸lÙÀò—ˆˆˆŠ„±Ïª£^}Uû™ØÕê!r *ëÇîü~÷é#R£FpC¯^½*ÙÙÙrïÞ=þà=´v­¶Í,_.&2s&û„ˆˆˆBCÂjß¾}2jÔ(iÓ¦T®\Yú÷ïŸw°ãx´3oÞvì˜ìÚµKU“ö uuëÖMæÎŸ/ÐÚCDDJè"ìxôèQ›éz²C‡rýþ8»wïVÓv½xñ¢”-[V^~ùeË2üñ‡”(QBæÏŸ¯žß¼yS½Že0/ªòÞ¹sÇ­¶à½\µOiâ}já6M'~ýõW5ÿ7ß|£ž›iÿ«¯¾**TÛ·oËï¿ÿ®–G5Ø!C†H•*UÔ<zbúþýû Û•_ûõ/yܨ¼£²M›6©ŸáÁƒUÕ±ÍJKKSÕsìÆ©B¸Õ´¯\¹bj=7nÜððp›ÊÔDmßx‘å5Š ¢Â±ç=‘%å´¿ED¾„@:ª ›Å0QÑ•ù½cáÓëØ/κڗõcð`ö ùÆÐ¡";²ÉìÙîW%²‡KµØŽÊ•™>½`ë˜4I 6n¬ýÛ6‘õëEp uƒø(;DþùO‘èh‘Ò¥E"#ERRwÛFx£W¬XÑRX ¿üå/†EÞÌBæë;vl@|NgíÁu~LÌûAÝ6(õŒþ©V­ššçÇäC""¢`H8Àa'(333ï@gºÚéÙ¾}»Íëzˆõĉ–i¹¹¹jÚǬž#,‹à£”ü¯ÿú/©T©’\»vÍf]+V¬5j¨e»wïn Åši‹Ù0‚½xþÜsÏ© ¾öìCÂfÚy±ÌÎ;eáÂ…ò裪é3gÎTÓQ¡mFÕY»òk¿«þ¥‚C¨×&Î~~îÒ·¿8wo?&*,«ê‹¤Že?Qá@åÆ%åEÒ&±/È·Î¥haÀëYææß;š!a¢¢jSOÛ*ÂÛ†ð†¹ QµªcHøÏf¿‘o´j%2ŒT.HõW"{ØŽþã?DÆ{P·ʾ÷ž6º¡‘¢õ¨^] ²ž={ªP0rÈc ‘˜÷‡3::Z‡÷ìÙS õ[Hµw“ 0˜þ:CÂDDDÜf¦3gÎÈK/½$aaaòÈ#H“&MÔNÏ6ÜÎhÅ>ì .\° ±®_¿^=_°`¢¢N:òÖ[o¾/Öƒ!¬+åši‹Ù0|þùçª:0vtGe3T†QH8¿öëÕƒ?ùäyûí·eà@m(b½âï¼yóäÙgŸ•¡¸uÜI»Üi¿}ÿEpãgÓ¦M©\¹²ôïß_ˆØCß¶hÑBUýÅÝ 4¦M›ZB¶¨âÛ¹sguwŸµuëÖ© Â8ÈÁúÛ·o/·nÝ*P[Іš5kªŸIÆ U{V¯^mÓ>»í˜2eŠ´mÛVÊ—//õêÕ“äädõÚÊ•+Uû±žÇ{L-שS'—íÇïQ¡ÉMÓ‚ÙIì "*a¢‚ã±8öùÖíËZåÐS«ÌÍ¿?–!a¢¢èì&Û*ÂñQ"9ÛØ/AAû µy‡øDDDD>¡U¥À¡‡„ÿçØä™°0‘ºu½w#êD±’pÑ®$\ªT`WþþûïÕõiäìegg«âiO=õTÖL!ሼ/o\¿å•W–ÃÈÒÕ«WgH˜ˆˆÈ (~øaUPå×U%aW!VQ!ø™gž‘7ª×\Ým†u•(QBUû5ÛwB¶€p%¤ÅŠ“wß}×2Ý($l¦ýuþõ¯•æÍ›« €Ð)ÂÈÿûßÕ%£ÎÚŰ-¹Ÿþy™={¶ÄÇÇK£FT8ÜžÞ?ƒVÝ &HÇŽU?㯾úJ½Ž»û¬aÝúÁ ‚ݘ!`£áRòk BÄ€c“'OV?ËtÜlðóCm›5k–jÓgŸ}–w ¨Ý:Ší;66VÍ?lØ0µžýë_ù¶Ÿ¨Ð™©#X9ˆ ËÊh-¤ubû‚|ouc‘”‘ææeH˜¨hú¹‹má_þÉ}á 2|¸qE§Œ ö yj†`?à!¢ÔTíçbuI¨@jÕ©S‡ÕÂÉ\2.Yy :œ•xmlÕª•<ôÐC–Q•í}øá‡êzuR’V4H/’••÷abbb¤jÕª–¢X›7o–víÚ©êÃ(ÒµuëV§!a„Ã<ÈQ4kÖLn³æê}Ì,ïN{F±º¨Pô7,¯aôk,ÿþûïÛ„„Ý-z†Àõ;ï¼£Š![‚\ Ô… †„ÐÉ“'B¨z0;NÖ̆Xǧ‘]ºtQ;A®`y„k{õêeº-ع´]»våÛ>k]»v•º¸Ýó>£°™ö㎲ððpnÞ»w¯e:«¨€Œuž>}Úi»Üi(„„í! ë*DÝ¡Cµƒzg„l/^¼¨¶¥—_~Ù²Ìü¡~NóçÏWÏoÞ¼©^Ç2˜wêÔ©ê.BwÚb6ä÷©…³NØofÚOTh’ú‰$ó,¢ÅåµÖ™DöùÞÖ"ë;š›—!a¢¢çø|Û*Â+눜ÛÍ~ "3f‡„íNÿy •"±Ÿqèû"àæ0ü\pó‘'ê×iÜX¤Gö™Ó³§H»vZUá®]EnÐýÆ©"Ë€‘žY³fº~ýïÿ[=ׯ£àŠZáÚ:2¸F_¦LyñÅU`×ÔüqÃP.2¥K—V…ÀýèÝ»·”,YÒæZ»³÷1»¼;íÑCÂË—/W¯ã_ݲeËTˆzÆ 6!aw‹ž¡Èš èYtÞÆjy"""†„Ðí¼=ÓjÕªIëÖ­%55Uíøáî+ì¨|ñņ;5ù…X>¬¦á&Ý/¿ü¢îüBà÷êÕ«yéyèÃÕ|‹-2Ýp⟬¼}ïÚ¾}ØéŠ‹‹“³gϪjÀ¸« ;o:g!agí×}ýõ×ê5…­¦|ðšÞG‹.úÍlûõoQÞ333eúôé.+YŸÀX<÷åææÚôÏ!CÔÏE¿ûñ¿þë¿Ô€×®]³Y P1ËvïÞÝ:6Ó³!a{õƒÜ]hÏhû3Û~"¿û.RäXûˆ Çë‚ZçSÙä{øÎÃwŸ = OÙUÏ*ÂA&-Í8$BÂ+x¥ˆ¨ÈXÝĶŠðÞ°O‚T«VŽ!áêÕÙ/DDDä]o¾©)ð`ÿ¯aCöy™ÃfÍx3¹gèPÔÃ`ÂøŽèÓ'0Ú…Ü eá:´3«W¯V×§ÿýï«çF׿³³³Õ4ëJ¾`ÊEèÓ0â3ŠcY?úöík™ÏÙuv3˻Ӱ ¯]»V̓busæÌQ×éq½Þ>$ìIÑ3@–Ó‘ "" ‰ã1vAhøùçŸÕNî²bûÉýŽEëJÉz0;ßùíTUZ7nœªÜÛ¥KiÑ¢…Ë÷Çò¨ôÛ«W/Óm™7ožš¶k×.S;ý:Tž®[·®å¹³JÖî´ŸÈ/vĈlêÉ~ ¢Âs&ñAX‹7,¿¬ŒÙ;:ÿù&*:ÿm@xu#Vb¸ïÛ>$Ì¡À‰ˆˆÈÛPe4PÂ_d û~õ9ðy!alGbÊܰh‘HX˜vü™š*R²¤Èœ9ѶV­ZÉC=¤*çùðÃÕõk|£ëß/^TÓ^|ñE›eB¹˜†ê¼/¼ð‚Ëv9»ÎnfywÚÖ!aT®R¥ŠÊ têÔÉ4¶ {Rô pýÓÑV""¢8c„†gŸ}V¢££ \…˜íØñ®V­š´nÝ:ï )UÖ¬Y£ª8c'ù‹/¾Èw§Ú($|øða5 Ï?ÿÜ2•«cbbÔN=*X£ŠóðáÃÕ|‹òŽÖ̶À Ä‹uaG˵o„ 'gÏžUÕ€q‡£õ°'ÎBÂÎÚOThÖ¶I›Ä~ ¢ÂsbÙƒÀ‘¿à37É0$LT4à&û*©cÙ/A,ïÝ0$œÀ¾!"""ïAxpôhöC *WŽ#Içðûݨ‘v,qù2ûƒÌÉÉÑ‚Á«ViÏ‘Q ÉÌ,ü¶}ÿý÷êô´iÓ Ú#òä“OZ[‡^###åÑGµ™¶yófÃP.ÖWªT)uÍÜù1¼ób\f–w§=Ö!axýõ×U×ÿ‘ëpAŠž¡º±5ëÕ«Ç_"" ¼ª2;¾9A}T°·?Ø $‹p.v˜ëׯ/;vìŽ;J±bÅÔЮŒBÂжm[U!877×2---M¢¢¢ÔüØÉÇ¿•*U’O?ýÔí¶Œ3F*V¬¨æ‹7l(ôyðï Aƒòþý9 ;k?Q¡¸s]nýÔ*öž£sD—Yξ ÿA8Õ„óƒi& ~>aá"&-Í8$üŸÿɾ!"""ïA¥È™3Ù("B{y"6VäÿüíX"#ƒýAæµje{I§N¸þaóçž{N]+Ÿ:uª*ŽuíÚ55Â2FÄ­P¡‚ìÞ½Û2o~•q{÷î-ëÖ­“‰'ÊO<¡¦¡±µ;wª÷Ã5÷%K–¨ëß[¶l‘¥K—æû>f—w§=ö!á7ªù6lh™f.Hѳ:¨~Dá²Y³f©¬Áܹsù‹ADD!ƒ!a"2„á>pžîîÝ»ªÒoA«9cÇ|Æ5€ƒ ‘‚ÊÂØ1/h[pÀ„éxÝ,ƒynÞ¼éµöùÕ¹-$q=‹}AD…!Ìï"Ä$ÿÊX }Þ»íz>„عm?û*ÂûþÅ> r¸ðZ¦ŒcH8ŸN‰ˆˆˆLËÊÒö/V±¾B@züq‘ŠÙä™éÓµŠÔø]?tˆýAæ! Œ °u¤"#EúõÃH»…Û6\ÛFP¶|ùò–âZx bï±cÇlæuÞ½råŠôïß_…_ñz‹-äøñ㆕{A!ë£é¢ÀFüÍï}Ì.ïN{ìCÂèääd›Ïnw‹žÍ˜1C+ÃÿÃÂÂdÒ$ŽØJDD¡…!a"ò¹ŸþYípã`í'òÐo³´JÂDD…)e¤ÈŠš b’é7Ê䦹žïXœÈòì/¢`vb™¶Ï«„×4Ïû°›ýR4iân׎ýBDDDÞ‘œ¬í_¤¥±/Qýú"Å‹³È3qq">ªý®ó²¹7”,)rýúƒiII"áá"#G~PŽ=xð  È"d[¨ê›•e¾ÐPvv¶üþûï.–ßòî¶Çf Y‡1ÿÑ£GÝ.&FDDT0$LD>÷ì³ÏJttt.Ø~"+;bDV7f?QáJ&²¼¦ÈÚVì òŸ›¹Zh0s¹ëùþ–‡ºDAmC·aüÞšÆ>)"ž~Ú1$\µ*û…ˆˆˆ¼cÑ"mÿÂ:Fã‰'´Ÿ‘',ÐBØ–Ød^n®¶—ã»ÛTLL`…É»ò«ˆLDD*x(æKwoˆ\8À¹ûE²Ö‹\:"r%ãÁã^Ñ>âÈÉÉ‘‹/²ýDÞðS[‘mCÙDT¸’ú‰üPGäçNì ò/TNËg(8†„‰‚Ûñom«o(r#‡ýRDüóŸŽ!ayˆˆˆÈ[¦L‰Šb?ª=´}¿îÞ“ Æv¡U&r*šO3¸yÙ2-(ܳ§Hf&û©(aH˜ˆˆHÃ+§¾„P¨~Q‹>Ì>¾‹Ô†îFe¾ ]µJ}©cE~›%’• …Љ(4ᆂÅa"YIˆ ÂÁ«ˆlêɾ ÿÒ÷]aH˜(¸÷w×µ²­"|j5û¥ùö[ã0¦yjôh‘¶mÙ á;ìûed°/¨àPÛQíÚ"Ó§³?È=¸YaäHã×’’DjÔ‰ŒÔBÃT4\½zU²³³9b0…<^9õ%VæÃl%áì¼£Ž3‰ÚãÄ2-Ø€ ÂÁA ±2úA5¥%á"ë;ŠìyOä÷Ey{·¼¥‘($\<¤ý ÈâZDTÈV7ù±aþaÍÿŸ½{¢>÷?~ QAîA£Dÿ‘‹‚kT´ÜŠ hAPPh­"Ás¬âù£9+XZÁƒ§¼Úˆ9& RÊ¥ 0J„ h*‘‹ðüóü~Nv³›Ë&›Ë^>ï×k_ÉÎîÎLž™ÝÉ|ç ¶m›(²"¶òç‚WÎü²'Ñf<,R|œº„½¼ky!áÿwjü7b„ÈèÑÔ!Pe·ý²³©jÎ ë  ÔÕ3eŠHïÞ?®Îõ»D×1=±!'‡š€ÐÀ‘S ˜hW% æ-Ùþ´ k`XžjˆxK¼È¾ù6@¨¡d $k0™€v`…Äøšu5£'èûË-hhK;‰¼mOhêSöl{âœnW„0¼û»+{¸ÂzüuÔ%µjå¾ûnêü§Á¯øxê¨&M²Û~òj*3Ó®G·Ýf»‡Õ±b…H“&"EEU?O¿St]ÓîÃ))"yôìAŒ#§@((ÌÙ;G$}DÙŽÃÜ÷¦áîU=m7èï¶±Ã7;¦Š¼×ž:hxº­±âÿˆìL ¨_‡VÛm©£•´Ò+m‚Ïž?–ÝgÚü]„CTß¾Þ!áîÝ© ð_t4EÙ³ÏÚm¿T.”?äæº‚›ã¹ÈªI;kHxõjßž¯Ïӎ­[‹DFÚÖ=&2¾ kh}ï^‘µkEvîÙµ‹[8ÝNâ=9BÕñ/è$¨„¿ûÔv{Ö`•…õ¸v…>’Éz‹Êm*²~0uаNÚï®eÑ"»gRÔ¯c9vý;°¢âçN#$  /»Ü^ܺdŸi u Q<ànÞ¼êNNUÑàWb"uT³gÛm?–ü¡Ý\u=Òàæ`— ôÄÕêv¡..¶'8L™"2|¸Hl¬ {îÛr ¯›…9€†¦„5ü©]58\Ùå³Þ´Sø®Ô@Ã:‘k\K¢D¾H¤¨_º´°‰Hö슟㄄é@ O'•í"¼í ÞÃ!LC!å\Û°Ú€šËÏ·ÛiiÔ"з Ãzr¡®G÷ÞËIP3îß¿vÆUXH'a:  @ ÈMYÔ܆ÏÒB 4$¡Aò|®Å 9\—\JH cE¬È¶‰?î„„5Ð ð<,òÞ%®€ðû]D¾ùº„°¬¬òCÂ/¿Lm@ÍedØmŠœj¨–.µËh&¦‚Ÿt=Òn®:Q T_R’HëÖ¶;0@ØlCS …Y¶3ãý £,í8­¡‰SÔ@Ãr˜É„„Ñ0ô„ªõƒ«^G Á!c\Ù.»_£&!NÄ6mê7ŽÚ€šÓËÀë6…vuD`Ò.ϺŒþßÿ£ðOT”Ȉv}ª+;›“J@øaÓÍÑ’½Ó÷Ú‹lm/© ¨}óíz M;š;A®C«©êßÖÇDV÷®øqBÂ@ð8¶WäÝ®ï•57–ìí¡.aàšk¼C·ßN]@Í%&ÚÎ\éév»oÒ$jÿDG‹Œi×§ãÇ©ª¯ys‘”êÂ!aDnYT²‡š5ZÀÚo;L@CËM²]„5Ì¥ßW@}Û=SdqëÊ·£ ÁáÃûÊvÎy“š„‰»ïö k70€šJH°ÁA.íÚ©Û}cÆP ø§wo‘ŸÿÜ®OYYÔÕׯŸÈĉÔ„B¨4“)RA- ²²»ÈŽ©Ô@ÃÛ;Gdi'BÂh8_/¶ëß©‚ò'$ ‡‚D^ì ¯í#rŒk}†‹çŸ÷ GDˆ|õµ5/GYn®Ýî<˜ZÀ?ð1®OiiÔÕ7gŽHL uáƒ0² CE–E‹s½¤°v¶ÈƬ ÞΑ÷¯²®BZu É´ëßwÛÊœ06+ÛEø«…Ô$ŒlÛæÖÛ¬YÔÔLÿþ"£GS‡@æ„„  ðÿýþÀv}JI¡¨¾ôt»þçð+„„ å‹,jNÙp§!< NüG-4¼Ì)"«zÂDÃÑ“§tý;´ºüÇõ* ¬Ÿ@`Ë[.’á Ðßîû |>Ê‹mç`ÏðãSP3½{‹L™BYAÝæëÞZÀ?cÇÚn‘‘"‰‰ÔÕWXh×:Q€pAH]öl‘…Mˆ†³½slGéóÅÔ@ÃË/²ú'„0ѰÞko¿Ë£ë%ë'ØÖÞæ ë¾NÎ|j†®¹Æ;$Ü·/u5-2outºÍ§Ë ðG|¼Ýwˆ‰™9“z ftš8‘:€0Ù£à´[ža>L-ÂÕæ±"é#¨€À°q¸Hj?ì:]H=Ð0VÄV|¥BÂ@`ûâ/"É‘®ð¶'ø> S÷Þëþ×¥. fš4)ÙU\AnóµoOàŸ©Sm@X» '$PÔŒvŸ×.ôa±/F h§<º ‡¯å1"»9@€X×Odý@ìʆ¡ö$šòÛßov„—D‰üócj¦þó?½CÂö²¯Õ‘Ÿo·%¸l|àkÖL¤Mêÿh0X;R*2™þ:¨¡Œ ûÝ¡ß!¡Ž#û Ή,n-²ýijnNØÅwÛ¨€À°²»ÈÆ{ £am›hëåqBÂ|wçË®€°Þ>ý‘óÅÔ%LiˆÇ3$¬··Þ¢6 zrrìv„þD`Ó.ÂSøgút‘¨(‘ñãEÆŽ¥¨™ãÇE"#E/¦ ôqd‚EÖtæR¼áåÀ {9æâãÔ@`X-òÑÃ"K;Q 4œìÙ"+bËÌ N£N@ ù[WW@xyº‡¹¢¢òCÂÏBÂL6YÛ—:„í’¸c*u84ØõÑC|¡adØu±¼Nû„„Às®HdigW@xåu"Ç÷QÈСÞ!áîÝ© ¨žyó ‹^½ì6_n.µ@Í¥¥Ùõhöl‘¨(êšËȰë’v¤e„„ ˜|›nªË¡á@»G'GŠZM-†Sö{hË/èrކåËÛ&"$ žÏþ³láÿEM`<ý´wHø¢‹Jv…Ѝ ð]B‚H_Îe ·Üb·ù²²¨jNº¥¤ØŸ@Mia škGa€PÆf3›÷ÚÓY6\|½Ø^Jý,GȈ£Ù6Üõñ¯EÖ¦h8úÝXQX» ëcœd†ã_‰,nã oe¿Oquó¼­[Gm€ï&N>œ:ƒ#ìö^Zµ@ÍåäØõhñbû³ €š æÆoØ+Ú¼ð %ëñ¿˜[DD„tìØQÆ',}Ϋ¯¾jÿç?ÿYæ5íÛ·—bM:{8wîœtèÐÁ<çoû eºñ·wï^ùè£ä›o¾iÐyÙ¿¿ÙXíÚµ«ÜtÓM²qãÆ›—wß}W(Ge%Apút²È²h‘óÅÔ"Ôm}Ld--0 djÀ+}„Èæ±Ô kI”ȉå?¦ëiE¨_ã]áEÍE­¡&(¥ƒË ¿ø"µ¾Ó€—Þøœpj*µ@ÍååÙõhÙ2û33“š æœ°ynnÃLß ü&''Ëœ9sdذaæ~Ÿ>}JŸ“Zò¡9aÂ9qâD™×èmõjïF ú|çqBÂ@Q{ö쑞={š ¿Æ›Ÿ­[·®•°°ç™j¾¸ï¾ûä†n5kÖHJJŠìÚµ«ÂçvéÒE.Û™NÏ€»øâ‹¥[·n^Ï׿sÊ×ñeÞj2ÿ@@9’i°·Z„ºå1"™\ã@9°Â~}ô } iE¬Höìò#$ ȾËv‘EÍ\!áÆÙn߀½´«gH˜¨ŽþýE¦rñ½ ðÈ#v{/%…Z æ´qªÓ‘:2’Ð9üsü¸]fÎl˜é;_mº¦Îž=+W_}µÉxœ>}ºÂ×hö£Y³f¦ë°§_üâ¦#1!aà $¢4%6l0ÛÝ»wË´iÓäÈ‘#ÕOVV–ÙÈ,p»N‹ç™jU9uê”4oÞ\^y埞ÿ«_ýÊ<ßýÒÛ¶m+ <»wÖÐs£Fäƒ>(wÞÊ›B ՎÂ]Eù_FІ.õ³iÃPBÂhxºV´=DH iw¹ÂK.ùz15—¼CÂ7Ü@]€ïbbDæÍ£Á !Ánï%²Ë?éz´t©H§N¬Oðßðáö„“†àVšõèÕ«Wéý ˜û………¥¯¹ì²ËdÔ¨QÒªU+“ÇpIË–-å?þã?Ê„„wìØ!O=õ”¹êsÛ¶meäÈ‘’¦I{δ¾ýö[ù¿ÿ÷ÿJçÎåŠ+®(ùüNóçϳ²¬ÛÏ” ôh V7øœîºþøÓŸþdƵoß¾ãóÏ?7ãHôqíí·ß6Ïß²eKé°?þña†¯]»¶tø;ï¼c: »oøV5ÿ„„¶?-²,Zä|1µU{çØË1Ÿ-¢Ǿù"K;‰¬ëG§s4¼-ñ"›Ç–ÿ!a áå½/’é oÀþ Êõä“Þ!áví¨ ð^™ )‰: 7jD¨µó¾×õ(6VdÎêÿèwˆvÎË«ÿi»‡„Ïœ9S2/I%ó)o½õVés<ó NHxéÒ¥f¸þt,^¼XÚ´ic𬹇„çÎ+Æ “7ß|S–,Yb®àÜ£G¯ùq¦uÏ=÷ÈwÞiÑÅÄĘa/¿ü2+ AŠp-pΦÒ.½Ó§O—k¯½V®»î:¯P¬ž5hÐ i×®¹¼ƒžÙuàÀkóæÍrË-·˜KH\ýõe‚³ºñ¨géãú{y|9SLçEÏ Ó ¾®]»šùZ¹r¥×™jçΓ3fH\\œ™Ÿk®¹F222ÌcË—/7ƒŽCÏ0Ó×õë×Oî¸ãó:wkÖ¬1gÅmß¾Ý<ß½óðý÷ßon:ü·¿ýméðñãÇËàÁƒ½ê§óVÑü;¶¦®¬Æ¨?º.ìÝ»W>úè#Óº!é˜îXé:£ï7fÑŽdÚíßm ùõ#h–ImÓFó °dMYÕÓÞv&P4¬Sm`½<„„†÷÷Ÿ¸Âï_%rh 5A¹ôX¦gHXo[·RàÝvHM¥Á@CÂÄ›9“ZÀ?ÑÑ6¬‡‰Ÿ~šzÀ?EE"íÛ‹LZÿÓvBÂ7ß|³´hÑÂtv²ŽŠBÂÚHMŸ¯¹ÇðáÃ%>>^6mÚT&$ìIÃÂå5‹s¦åžÉÐ+@_yå•%5jO7a‚u¿™øÏÙPzðÁMˆMϦêÛ·¯4nÜX>lž£Á׋.ºÈZW­ZeÎÎÒpï%—\bªÕ×Ö­[å /4ÏY¶l™9‹KÏ&s߀{â‰'Ìx4P÷å—_zͳ/gŠixìØ±fûì³ÒçTVãÆ3W^>qâ„i¤¦9mWQHX¿yyy%ŸÇ³ÍãÚÄË]EÇYxà3üСC¬,!BµÀÙPêÓ§ÙËÂòÉ'f˜SÕ€¤C‡e:û}ÊÖ«cüã¿© ª4p wHX;ƒT%-Ín; 8è¿úuyÑùþ1BdâD‘éÓEbc©jÇèÑ6€^Ÿ*^x¡Éjdê!eCÂ:nÏ,„Öç¹s¦õí·ß–®Çhõ8.N„„kAU¡S ?FDDȯýk¯×öíÛ×è|×Ù³gÍÞ½÷Þ[­yÔñé þìg?“ž={šÂJk©aä_þò—&P¨á¿Ê–!áò×Õ|ЬwÓ¦M3ë î08×íÛ·›nÕƒ–U«VÉ’%KL¸÷’K.1}Úºu«Y_õyºŽÝsÏ=%;V‘e–‡†Àu\8ýòË/½æYè¦óÍ7ͼtëÖÍ„ÚXÕ°¸ŽãÅ_4Ë<''§Üe­¡SÇyóæIjjª¼öÚk²k×.ó˜¾Ìóµë·ŽçùçŸ7÷S=®+£ósÛm·ÆB]ÝÛ†µjQeuòe™T¶\êc™xNÃ×õU?ÿ.¸à³îkèXCÄNHÙßn×Õ¢9µãZ€vˆæ–LjìL $ŒÀ ÁC]¿Ûæý˜†„³¦S# ¾mã ë‰oÞ§&ðɆ Þ!a½ùyÁ ´Dt4uNçç›o¦ðO|¼Èðá®uª¨ˆš v ¬íÐ[?ÓsBÂ)))&Ðûûßÿ^Ú´icŽ×;ÇL« ;y ÷܉{HX» wèÐAn¼ñF"Ö €ÿ×Çßxã2óãL«OŸ>¦›6‡Ó㸚ùóŸÿÌ @"$\ | jÐÕ3DwìØ1iÑ¢…Œq;]Ö—qÝzë­&ÈöÍ7ßø<: ×êe&ªs¦˜†pu¸†=+›Gwýû÷—«¯¾ºô~y!a¥—¤ÐÞwÞi:uz7nœ4oÞÜ„›5¸êÐpŸv@Öq:t¨Òeáëü‡[HX7ê‹~Ü[vº3;]¦5¸­; î}-?ü°y­®£¯¼òŠ ÃWDƒ©žÁïòÂàå-kNt%ÿ-ô\Wõr):Oú:÷Zè:©gp„SEVv¯ÕQVU'_–IEË¥>–IE!áªÖWíP¬¡ö“'O–ûî»ï*ì_gVõÙ<–/WIƒ—Úéœ0…†Ë»ª‚®«hP¾M·W:qBÂ[âEÎSøD/S²[çþïÿ¦6 rÓ§Û0‚ƒ茋£ðövÑõH›¦ê:•›KMP;´•v^¼¸~¦ç„„›^ÅõöÛo—uëÖ•>§ª°6hÓ+µ~ñÅ¥ÃÜCÂJµj@‡ÅÆÆÊ–-[LîBÿÉÉÉ^Óúãÿ(­Zµ2¿k6C¯Ö ‚!áZàKèôý÷ß7÷µ+¦>¦áÖQ£F™ÀdvvvµÆõñÇ›p­n´-Z´H åÃ?”wß}×<þÙgŸI||¼ÙðÓ3»rKöŠyä‘Ò3Ъs¦˜Î§NKǧá<}­çwÉ’%^óøè£–>®?xàtTVqqq¦+¨ö<}ùå—æuÚ™ØÎƒwºÚVU¿ªæ¿¢‡ãºšŸŸ_a×T öêúëëzêŒKCã]ºt)s»ï¾ûÊ?ßÀËtx=|ø°<ôÐC&¼¬gDjGn}|óæÍ¥¯ó5$¬4®ëœ¾7tÒ }eëêÚµkͰ¤¤$³ƒ¤óÿøãÐÞ\‘ÈÂ&"¹Iµ:ÚÊêäË2©h¹ÔÇ2©($\Ùúª'èý'Ÿ|Òkg¹^CÂÚmM;CÓq @ ÒàWîÿrBǺ~å‡ õkÿâ²]„?›Â6-ªí§?õ ßy'u•Ó€°†¹´Û«nçEEQ øG›švêdCœÚõuéRj‚Úsü¸]¿ž~:üþöª®* ‚!áðÕW_É·ß~[+ãÒñèøÜÏîrè†[zzºé,ìºsør¦˜C;têcúœòèkôñêžE¦Œµ+h]«jþÃy£Þ=,yæÌ‰ˆˆ_—ÓªGCä]»või<Îú¥Yï½÷ÞjÍ£ŽSçA;Ë*í^|饗ÊÞ½{Í}í8\ÓN ¹N˜0Á„â'MšT:¼¼@ª®3ÚáxÀ€&Ô¯kÇ쀲a¨HÆøZmEuòe™T´\êc™Ô$$¬ë¾†”uœî´[r½…„OØ{çðE 0åÛàס¿ÛŸzYy ¡m.²m¢÷ðU= õiE7W@8õv‘ãû¨ ªí…¼CÂ-[RP¹~ýD¦N¥Á _r µ€íº¤4Ì9{65AíJI±ôÔ0» !aB!a4˜uëÖ™ L튌†Û¨÷ KöìÙÓt†uwìØ1iÑ¢Ei Û×nÌ·Þz«\pÁòÍ7ßø<:í*{÷Ýw›»ç8@ê¦M›J‡-X°À Ûºukµvb´KµvävTÔõú¹çž3Ò;ï¼Szõêx 6{¶È{íë¬S—{|]&-—úX&5 «Þ½{›®ãXVt×À|½…„5Ȥ!áÓ…|XL'rˆ„åP4¼O'Û¦¼v6úêËç/¹Âup•„½<°gHXoûÈœ€Jôì)’Àî_ÐÐwÁÔþIJ²ë’vîÞ]dòdj‚Ú7q¢í|®'8„ m>§êÊk,‚!a4˜!C†HLL ˜õÈ—°äûï¿oî'$$˜Ç:$£F’ÈÈHÉÎÎöy<êã?6ANíB¼hÑ"),,”?üPÞ}÷]ó¸v¹Ž7áRÝáÐnÏ<òˆOJJŠéâÚ¡C¹ñÆ%33SV­ZeºOëão¼ñFéttu::®£Gš×•7ŸÓ¦M“ÄÄDZÖγmÛ¶•aÆ•ާ¢@êž={Ìp½Í;7𬆴j±£ceuòu™T´\êc™Ô4$¬‹v±Öúˆ#äÊ+¯4]õy/hK«:ÝãγŠ´¼À 2ʆ„54 4´¬é"óNH¨z5Œ%Q®pÆ8NzCé®|É.™WHøþ‡Ú€Šµo/2ou&Îvàíîªë‘†7û÷;–š nöS‡µÝªÃ)( Bp?Œ ¡˜à ê¯aÉ·ß~[ÚµkWÂÔ0÷úõë«=¥¢µ3¬3.íÔªA`•••%QQQf¸†Iõg«V­dÖ¬Y¥¯×p¨†Rõ±ØØXÙ²e‹ 7jÔH’““KŸ÷Ì3Ϙqëó–,YRî|>ú裥ÏÑŸ<ð€äå啎£¢@ªŠ‹‹3áQ :¤•ÝE2k§ÛmUuòu™”·\êc™Ô4$¬´Ãùý÷ßoNbøÃþ`º ëótujëc6\A @ ;°ÂžÐp8ÍÁ~È£&hx_$Š,‹öNH¨[w„—v*ÙÑßLM཰ŒgHøÙg© ¨˜n/$&R‡`Ò´©]nùùÔ5—™i×#ý9~¼Hß¾ÔuC; ÇÅÙ pFõAºïL T䫯¾2—© :_y£5¼™žžn: kGaOgÏž•ýû÷—Þ?wîœé:ì9®“'OšáúxEô5úœÓ§OWkþµ[î˜1cwaiÚå1µ6ºªêäë2ñe¹ò2Ñp²†„ÿú׿ÖÝD´trdÉ.…Í c:!áóÅÔ /o©È¢æÞÃ5$L‡~ nÙ.²°™+$œ=‹šÀo÷ÞëÖ®`åÑ©n/¬XA-‚IT”«,PSºþèz”–&’ MMPwŠŠDâãí:7y² BÂPí.«AQ튰¾ÛfÌÉd™Ôо}ûäÝwß•üü|‚^³fôìÙS¢££åÌ™3uó‡·áîõƒy£|Ù³mçú¯Ûï 8¡õ³E ýl§~ugý W@xuo‘"Ú€Á³g{‡„;v¤. |î!AÎír£#'üQP`×£¥Km7ñÖ­© êÞüù"11"Í›‹ .’”$òñÇ"k׊ìÜ)²k·Ên§N±ÐP8ºU2dHÉ_L¹]rÊŠX‘mY&5´dÉiÚ´© 7kÖÌüìÚµkÉÎýÇu÷‡l+²¸µÈ‰\ÞhßμԎÂÚz‚”=¿Ku]ÍO}€ºòÅû]à„„õ hPÄ3$ažÒÓíöBNµ&qq„»Q;t=Ò€pjªýýÔ‡âb»ÞiHXÃéžû°Ü*¾iP4ж3%(qî”È÷»¸q«Ù­p§HþZ‘c{m8Á¹q îQPP G üÝ5Ã^nût!ˤ†4tœ››+ééé²ÿþº †k [ƒ´K$>,²a¨ /íD=~ȳE½ª‚;BÂ@ÝÑ}ÝeÑ®€ð¦Ñö @-ÐK¸^x¡÷Ä?ý‰ÚoÚÁQ·ŠŠ¨E0¹õV»Ü4Ø øC»¹jXsÛ6»NegSÔ¿¯¿¦“0„|„„•=ƒ[ܸÕÅí½öö ª^‚õƒþ6°9EäóDòSé"ŠÚqª@da‘Ý3©E Ó …~6èg í~®Û0ú=£Û5@ ÐïÔ|#‹„„ºóÙó®}Ý%Q"G÷PÔªž=½C¿úuÞæÍ‰äbGAgôhWXÀ11"3fغN­^MM€òVtæV„¿M9œfozéUíº§¡ k`AÃÂËc\—hÕ°kûÚ.}_¥Ø®h@u麥êé䘴ˡ¾Ïõ}¿o>õ\tÛeÇT‘ vº­ÛÚî6'$ Ô…3…"K/w…„?‰š Öi Ø3$üÓŸRà-!A¤; :ãKv×5™Ï¿Èá§~ýìç€jÝÚž8À!a ¡é¥Zf‹ä-Ùþ´ àhÐA¸jgK¼ jw4 %k YƒÉ´C'P^›·‚ ‘ÅmJÖ£;l(]C©Ô¾a—÷wŸÚ6 µá` Éä³@ðÑϯ¬é6$¬¿B·™³g—¦aýîP»6?è ¯º^äø>j‚Z÷ÆÞ!á¨(ê¼i8°{wêl4$|ÑE®p'PSýû‹Lj×®ÂS¦P <„„@U˜%²wŽHúˆ²‡¹qã|7 þë{YOÐ éöˆž¸¤!áuý¨‡†ÖwL-;LC¬§@í:¼N$å"×6.WÆ@ÉÉñ ë­°Ú€²âãE¦Áæé§Eš6u…;š;ֆΕ†G¦&@y Áäøt¦“°ï„³gÑI8–÷_óÙ 4,l"r`…ÈÖÇ_"°hÇàŒñe‡jߺÛ]áõƒDN“ØDݹäï0—£ž48~à0„Š]3lW/.û ¨mÖ`؉\ÛE8ƒV/°m Õ½ËÛ™@H¨-ã\a}¯é‰#@[ºÔ;$|é¥Ô”cC‚.NH¸»í¨…u):Úþ¾b…Ýo8Î…6/„„ T¬ˆÙ6‘:jßá4;[dƒ—[£&_$Š,íTv!a v|$²¨…+$üÅ_¨ ê…Ø÷ ë­sb€›¨(DpII±ÛvqqÔþY¼X¤}{û{v¶]¯23© à‰0„‚ï¶ÙƒöGøï |•b¿g”/wL¥&‡V‹$G–FH¨©·»Âé#ìÉ"@=iÕÊ;$<>u.º} ÝC\ÒÒì²»â jÚY—Tq±Hd¤½* ýgJ!@ÃZËc¨ nìš!²$Êþ¾²» `ÂétíN×ѵ}© àìY6€¯ï¯EÍKÞkë¨ êÕí·{‡„ùKê,½Â€nhHÁÅ v^~9µ€¶m³ë’^‰DEG‹ÌœI]O„„ ¬ˆÙþ4uÔO'Ûp°Z-’5š pͶ!Æ¢|×0 ëö€š9U ò~WáϦˆœ/¦.¨WÿþïÞ!á© °rsíö†\œpË–ÔþÉ˳ëRNŽ½ß¿¿ÈĉÔðDH‚ݱ{àþÛtj¨ãE6 µ¿kHx×úF9‘k·…4,ìа®«j棇\áU½ìû ¨gï¼ã¾ì2ꬌ »}˦jÐqº¿þ G©á§ââ²Å{Ì…”ÅsDÞkOg/@ÝÙ8Ü…•/¿H¤&g‹lñpšk!a æ¯Yx±}_-l"’û5AƒÐKˆGDx…wì 6@$5Õnh'Q§ ´ÞާðOd¤ý}XÀ €`v,ÇÀÿ6ZêÎÒN"û~üo»~ïN£&,+bËž4EH¨¾3…%ï›Î®ð®WDÎÓ~ kâDïðÍ7S ’P² Ín_Ðr¶í¶m£ðžX¨Ÿêøq‘&MD–.¥.ÁBƒ»å…nkÓŸþô'3}ûöù=®ªBÂû÷ï/}ÞÕW_m:#Ÿ>}š ~Œ@Ó0Ì’¨’½Í"j¨ú£a±Ü$‘Ó…„„˜ÖõÉtûçè/’1Þu_C‹¸î,à³¼å"É‘ö3þ½ö"‡×S ëeÄ=ƒÂ[·RÂÝøñ¶ƒ(‚S§Nv».5•ZÀÿÏ‚ñnÿ:TdôhêLžxâ °Õðì—_~éõøöíÛ墋.’Áƒ˪U«dÉ’%&Ô«A`íD¬^}õU3Ž»îºKn»í6yå•WL`Wƒ¹cÇŽ5½øâ‹¦«pNNNÉ>åV¹ð åÁ”eË–É=÷Ü#‘‘‘eº òÉ'fº?ÿùÏM€øÍ7ß”«®ºªÊ°†“’’ÌøÞzë­ÒçÌ;W† fÆ£C·nݤG^ïG}$\pù{׬Y#‰‰‰ríµ×ÖyÇeÚ @°ÒnŽz ÿëÅÔPw 2\Áàc9öw D†ºîkHøvwŸ½µ«‹ðç¿9O›Vޏ8ïðóÏSÂvÕ‚St´í&œ”D-àí"ìþY0y²HïÞÔ%˜œ>}Z~øa‚mÚ´© øž={¶ôñH‡Êt>xð  Òjg^å„„xà¯ñk0Xsë8¯¸âŠÒû'Nœ0¡Þßüæ7¥Ã48¬]‹ÝçECÉ:®gŸ}¶Ì4œ°výmÑ¢…鬌+£aaÏùRwÜq‡ 0ŸÆ”ìĶiÓFúöí+Ÿ}ö™×üK^^žÌž=Û¼F;;tÞ4 |ë­·ú4]_qÔ‚•†aVõ¤€ºõUŠÈÂ&öw'0L€ fg‚ÈÊî®û„„ßèÉ ›Ú÷Ë{ííç<`þðïpl,u ÜéÕ{Œ:+ u¶j%2}:µ€fδ¡sGZšÝg( ¿NPúç?ÿ)4X ÷jè·¢ºèm×®ùÝ ëë=y†„q¶mÛVºtéRævß}÷™ç|ûí·æ9î…UU!áýû÷›ûÚ¹ÿþÒ¬Y3Ó¥X>|Xzè!z¾ì²Ë¤Gæ5›7o.Ï¡C‡Ì°'Ÿ|Ò§éøŠ£¦0Þ}÷]³Á}ôèÑrï+=smïÞ½æl¶o¾ù¦AçW7°uc»k×®æ,Á7Lí€z£ñwϤ€º¥aËeÑöw÷®Â@ ÉžíZOUn!aÀïãê"œ5Ïw¤Ü\ï°v+*¢6„³èhÛAÁ©‘¨(–!ü—”d×%‡6’Õ} #8iÐ7""Bîºë.9sæŒùý׿þµ×ó´S¯fTuB¸Õn½÷Vr‰=ùùÏ^f¸¯!aµzõj3ìwÞ1÷µëñ¥—^jòJ;'{vÖ¿·qãÆ2`À€2ã×îÄ„€?8jŠr7œ=ïïÙ³Gzöìi†é†©þlݺu­„…+Ûh¯ˆžÅ§ÒkÖ¬‘””ÙµkW…ÏÕ³þìµ!­—éÖ­›×óõït6°}™·šÌ?à·#™ö@þwÛ¨ nihìïqöwí*LðHCÁ‹Ý®%éÚT,g¾Hr¤}¯¬»CäûÏ© VûöÞAáåË© á¬ys‘Ù³©C°?^ä²ËD¦N¥ðÓ9ØžT8>µ Vßÿ½4mÚTî¾ûns_Ýk×]wÇŽ“-ZȘ1cÌýÊŽ×/X°À<¶uëÖÒa·Þz«\pÁ•fÚ—ìˆ^~ùåe†iã2_CÂo¿ý¶6kÖ,3\ùå—KwB›6m*3®Þ½{KË–-Mça¥Ád Iþà¨)ÊÝpö¼¯Ü¨¨(Ù°aƒ ØîÞ½[¦M›&GŽ©Öt²²²ÌFrÛ5^RSSe„ ¥—ڨʩS§¤yóæòÊ+¯øôü_ýêWæù:ߎmÛ¶•žÝ;ëŽ@£Fäƒ>(wÞÊ›BÂhÛŸ¶ÝòÎS @Ýút²È†¡öwí*LðÈ ;ÛFž÷”¥ïå1ö}²°‰ÈþÅÔí'?ñ {\}„ÝHL¤ÁJCÂ;ÛŸ€?ÒÓíçû•Fúö!K>ûì3‰7AÙ~øArsså‘G1ÇÞµQ˜zÿý÷Íý„„ >tèŒ5J"##%;;Û<§²ãõú|Íèt4 ™?þØ ÓnÄ‹-’ÂÂBùðÃÍ„Ï=÷œç=÷Üc—ýö·¿•û·3Þ}öÙ2ÓpBÂ:ÏûÛßä÷¿ÿ½´iÓF.ºè"ÓìL§Ù¡C¹ñÆ%33SV­Z%×_½yÍo¼Qf\ú˜vOÖ ôˆ#äÊ+¯”I“&™çêtj´M PÞ†³û} ÄÖÖ™iž—ó¨‰Ï?ÿÜŒ#ÑÇÿþ8gémÙ²¥tØÿøG³q­Ã×®][:\/÷¡†5ˆìëü®œîL 8°4Œíy_;wÎ\ZE/§RÝ©ý¡grê–^žæ¦›n2g„$= ¯¡-êš„ï /jNMx¾M·aǹö¾þ!ÚåÉoß#zÓOP´I“¼CÂa$/Ïn¬^M-‚ÕÓ%»!QQ"cÇR ø'7×~ä丆ÅÇ‹ŒAm‚6èÒFeîW3nÕª•é¾ëN÷·k×Î<®·˜˜Y¿~}éãU¯æ™gLw^}Î’%K̰´´4¹úê«KÇ©k@Ù¡MÄFŽiŒéã½zõ’/¿ü²ÒNÂέmÛ¶rûí·ËºuëJŸóÖ[o™ °>k² RÖñ'''—Ÿ¾îþûï—!C†ÈþðÓUX_§'@M;vì§žzÊuƒT7fu£×]e!á3gΘ×ÝrË-æ÷šNC/åѹsg3^ `ê†ôÊ•+Ípý]ÏÐS1c†ÄÅÅI³fÍäšk®‘ŒŒ óØòåËåÚk¯5ã¸âŠ+Ìëúõë'wÜq‡y;=£O; oß¾Ý<ß½ó°nTëM‡ëYŽñãÇË`·£LîóVÑü;µÒ0õôéÓÍü]wÝu>‡˜C]U]ª÷ìÙc.ã¾ó׺uëZ ×$À}ß}÷™õF×=ÛSÏî 8G2íÁüï¶±‚êÞÚ¾";ìïÖNö@ 9–c·ŽýxDÈ ;¡a.ùkD’#í{dÅÿùçj‚€ç\BØývÍ5Ô€på„=C!ˆ$$Øp¿~ÔþqNÐŽÂŽyóìúU̦‚†ËM/YˆÚYX; W䫯¾’o¿ý¶FÓ8yò¤éTì™)ÐñéxÏŸ?_îë4'ŸŸ_+çÙ³gMÃ*‡Î‹ÎSEÓvhÀXyÿõ¯ee5BH8 Ì;W† &o¾ù¦93®[·nÒ£G2Ï©*ÈùÄO˜ûÖ3äj2 ;ÖŒçÅ_4]ysrr¼¦¥A` ‹Î+ÙƒKMM•×^{­4¨©ÝfõR"ú| ôê8žþys_ŸëNçç¶Ûn3¿ëe8Üÿ;v4Ы®ºÊœç>\§W^]ªšÿ|Є‡§M›fÎúÓ¿AÏê wU­[ÈÕ3D7lØ`.µ²{÷nSÃ#GŽø< =ËTÏÐÔ ¶;]'&L˜`Îôô…vnÞ¼y™@y@ÒN_ÐâòÙ€ú ß9ûæÛßwÍ $ŒÀ¤]P5ð¨á`åÙY€¥ûzU§‹pÖtö+޹ð²!ለ’}þí@XÒ¾2º=•E-‚•†„[·éÞZÀúyà~˜X?<» ÁB¯h¬WæÕ`²†Šµ±•6ÜŠŽŽ®°¡@•ÛÌ” ühWCšºé¨*Èyúôiyøá‡Í°¦M›š¥n”VgJƒµUM[§£¹ùüóÏÍóõŒ9uôèQ3Oú:ÇÁƒ%""Â\zDýâ¿-Z˜ªž ¨¯×³ôÆŒc.M¢4ˆ¬ÃwîÜYá¼U6ÿ}úô‘¢¢"3ì“O>1Ãôù᮲uKC½å]’¥ºÊ[.5á¬[ßZêï˜Ê‡ ~,l"r`…ý]; kga ià1ÿÇ#BNgaBÂ@YŸ<á T²}4›š h迊<» ÿå/Ô€pä\e —]¾ 5{¶ Gs.:jv NJrÝ×õ‘‘"+VPmȦÙ=f­W]v®rüñÇSPc„„ÈdóòòJv¼g›É>ú¨ô±ªBÂŽeË–I§NÌcƒ * Åú2 åKHXƒ½zÿ®»î2Ý{=y†„•†}µ¬Ó1ö¥—^’V­Z™Ë†(çºñœœœ,—_~¹>gÎ3\;ëV5 HçÎKwzõê%+W®,}LïëòPzÉ–3fH\\œÙ©ºæšk$C[ˆí`}íµ×šñ\qÅæuýúõ“;î¸Ãë²3zƦv@nNÑNW¼cœþ ¨Eùö{§À~_šð:®‰µ¨¹È‰öw ¼÷%^lßïwùz15AP¹çïðTΟ ,9!áb.Š´´W‹†„›7§ð_LŒÈÌ™e‡i—ê§Ÿ¦6NçÏŸ—ÜÜ\IOO7Ïô>€? ‡ 2>ôÐCÒ¤I¹ì²Ë¤G&¹yóæÒçøV:làÀe:åú2 åKHXÍ;ל!׸qcýá‡J+/$¼víZ3,))Él$wéÒEüñÒÇîÁ¿ûÝïä‰'žÑ£G›áNÇ_ “2DÆŽ[f~«vŸÿï¿ÿ>,Bºœ† f:GëYݺu3˾²zÞ×å¡÷5üå—_V{"Öå¦ãxñÅÍ2ÊùñúAžÓÒ °®SóæÍ“ÔÔTyíµ×Li¥Añ„„óüñãÇ›ñ<ÿüóæ~ªû5ŠJèüÜvÛm Sô-ñtpԟ¬²AËm #p-‹Ù7ßþNHð¶îNWá¼!ržD‚KÉ.ºWHxð`ê@8ÒŽ¡MšP‡`–’"Ò¸±Ý¦ü'âyÑÒ#Dúr8 0Øõ ÚñôÒK/5!H¥Ý€kÚIØ¡Ã#""L·__§¡| Ù* O˜0A5j$“&M*^^HX;½j‡ãÈúõëÍãŸ~úi™ñiwØŸýìgÒ³gOÓAXi÷Z #ÿò—¿4e5,ìŽpõh·ªúxÞ?}ú´<üðÃf˜.‹W^yEΞ=[­i”·\Ê›–N'º’kWy®[G5ó¤¯sP2c†HûöÔP„„Cœ^~Â3¬êx7mÚT:¬º!a Ájxòî»ïöyJC¸:|ëÖ­NÛ{Ç®¿\}õÕ¥÷Ë «çž{Ît‰½óÎ;¥W¯^^ã7nœ4oÞÜ<·oß^:¼oß¾¦²ŽóСCe^ã9o¾Î¸…„‹‹‹%//OfÏž]㺮3ôÖÇ $EEE>OÃ×°{õ¾†Ûµ±§òÖ­1cƘõæÄ‰æþK/½$­Zµ’“'OÖ¡÷Îy¯=¿õGOLÑT›ÇÚ 0ˆôj ŸN¶¿;!a ºáîØÞ’ýˆKì{bI”Háj•GÈn€IDAT‚ ¤á‘ˆˆ²!á‹."T@8Òð_L ufî!áìlêÿh@¸ŸÇÅ϶m³ëWnnÝM÷…^0Çõ¦ÇŸ;vìhŽGkÃ! q¬ìСƒÜxã’™™)«V­’믿Þ쬼ñƥϫ,ÈùÙgŸI||¼ üþðÃ%;S¹òÈ#˜ÇSRR|ž†Ò®yu|Ú¥U_ë9íiÓ¦Ibb¢|óÍ7¦pÛ¶meذa¥ã¨($¼gÏžÒ±¹sçzÕâ/ù‹yLŸîjó›ß˜áÝ»w÷zç¼ù2ÿ*\BÂÚíù¡‡2!ëË.»LzôèaþîÍ›7û´nyÒa4kð××iøVºnhÀ]—ãSO=eÖéÊÖ­µkךaIIIrþüyéÒ¥‹<þøãõ_l kw¼Sù`ÔŸ¬é"«zºîП0—ûúY”OHp¬èê"¼ïÏÔA­GïnÂÿû¿Ô€p3uª6€¡Á,=ݵ=—Æ®;ü4y²ˆça^íE)2o^ÝM× '''›«Øêñl½ß§OŸ°©½ž´©^»VdçN‘]»¸êíÔ)>+g„„À5Ä«;%±±±²eËÓ=·Q£Ff§EUäÌÊÊ’¨¨(s_ƒ•úS;©Îš5«ZÓp<óÌ3Ò²eKóÜ%K–xMûÑG-}\>ðÀ¦ƒ¬£¢°Š‹‹3ÐÂrÚÈ|ùå—æuÚ™ØÎƒ×À¨§òB¦UÍ¿ —ð 7Ü —^ziÉÎß^sßé ]“N®gÛj·__§Q°Òàñ„ Ìú9iÒ¤J×­sçΙÇ õë×›Ç5¼^ïöÍYØDä‡<>Ôõgëc6xéX×0—vºÞ8ÜuŸ0`OöpÂé÷‹§&j<â~ñEê@¸‰÷îŠà’“ãÚžKM¥ðvŽöÞ»·ÈcÕÝt°^uWi“*½:®O?}útHÕ¸¸Ø¾Wõ$áÃEbcEš4ñÞ?ã¸7 €ðEH8LèN‰³ƒ¢4ø¨µ3ª¯4h™žžn: »w_­É4NžÐ9bu ÜŒ/2v,uf¹¹®í¹ÄDêÿ$%ÙÀª§)SlP¸®x†„•6?ò<–¸cÇӬꦛn2WÐ9r¤¤•ÓB{ãÆróÍ7›fUúS¯ªªãzýõ׬¶«WÛPpëÖ¶3s\œ=QC;4¯X!’™I'a: €`@H!cݺufG,ëÕ‹ââbÓ=úÆo,ÙÌ”U«V™¶.ƒ7Þx£ôy•…„5p_²'©_ žkðú‘G1§¤¤ø[oµ,(°WkÑz*’Íú  #d”ìµhYÔ¯³gÏ–¹ŒÎ¹sçLGàꄵ5Ä›^²¯…µ£pM§¡;Î:\¯ˆ¾FŸsúôéjýÚÁx̘1õ_à CmØ…ƒú€úv¾ØÌòS]Ãô;ɽ³0H4о¸µë¾†#ÝCî@¸8U ²äRûПß|HMRô 7àÕw@ˆŽ™>:;ÝŽÓeIàþr:Sgfz?Ö¯ŸH||ÝL× kÓ"=†Ø¦MÓèHw–G¯„ªÍ‹fÏžm^§Ýƒ•×Ô€ð­·ÞZæùz|´>; kØZ¯ÔÒ¾}Ý«Ð@û_”*·nÝ:³ž––V¿Þ=Ó†³ h‰h'rmÀìXŽk˜†„÷ͧ6L¹Ivuèv!a„£GØ÷‚Þöüžz ä<õ”wHøÉ'© á¤ys‘ùü{"è5i"rõÕ„„á?í¬û«W{?¦'ÄÄh@·ö§ë„„FGÚ ¨ÿþÒ¬Y39qâDéó>,=ôPÉ:ßD.»ì2éÑ£‡yÝæÍ›Íã‡2÷Ÿôر©Ï°†‚õ³U»»]„!‚0TaÈ!S­îÈ~;œ&²¨¹½l6 AORÑ€™{7{ýn"t‰@¥ÛOºÎž.´÷5ÔÎúŠp³çu×÷ÂÖGlWa ÄèqtÏðÍ7S‰~ÿ'²»ô´‹pl¬ÈĉÔþkݺü“¶m³Ÿú³¶y†„ÕêիͰwÞy§tØ 7Ü —^z©ìÝ»×Ü_¶lY™NÂgΜ‘ÆË€ÊŒ_;×GH8%Å„µãr]„©ûÑ”*WPP G­¿ Íy¯½È¦ÑöRï4íʪ¡`w:;°‚Ú 0É´ë¨vÁVt¾F¸9¶Wdq[û>XÞEäŸS„$=h­°ÝCÂM›Š?Nm……öû?5•Z»Þ½Ezö?žZÀ:¯¨+uûö¶£pm+/$üöÛo›a³fÍ2÷õ1½ÿòË/—>Ç oÚ´ÉíýÐ[Z¶liº+í"üë_ÿºÎCÂéévÿJÃú„B!á`pî”È÷»¸…Ë­p§HþZ{€Wΰhx(̲–ú‹œ-¢€†³{¦ÈÊîe‡iðL»µH·™uÕ®”nSíL .kzÛ÷€vÖ€<ûaÚ9س›ðÂ…Ô€p›k¿ûÓÒ¨E°ë×OäÆE†¥ðŸ†Î{¬üÇ&OéÞ½öC°NH8%%Eþö·¿Éïÿ{iÓ¦\tÑE²k×.óíÜ¡C‡’uýFÉÌÌ”U«VÉõ×_o^÷Æo”ŽK‡GDDHÓ¦MeĈrå•WʤI“Ìót:u!/ϨK&G@ ÄÕ}ܸ97í2«¡‡Õ½m˜4c¼Hæ‘ÌÉOuuOCpq:6nJ@Ðð¶>f·3úÝDH¬øxÙu”0ÂÉîY®ýÅíO‹œ* &i¿ø…wHøõש áÀ çäP‹`7x°H¯^"qqÔþÓ°ùرå?–‘a?7ôgmrBÂέmÛ¶rûí·ËºuëÊ<ï­·Þ2Aa}Nll¬lÙ²Eúöí+5’äääÒçéëî¿ÿ~2dˆüá0]…õ5¯¾újÔ¬ûþãª,¡p0 “0„õömº <èíëÅ"_$ÚÖ°†x–ÇØ®Qz`XækûŠ|:Yä«‘òx/ªï¶‰ln—ÝŽ©tü†õƒE¶Ä»îë¶„ncè÷¨t=´ÚþNHáâû"‹ÛÚõ?õV‘#ŸQ„¼7ßô ?ôu ¤§Ûïþ΋ zãÇ‹ôí+M-à¿øxz­Hl¬ÈÓO7Üü={Vöïß_zÿܹs’››+çÏŸ¯ð5.Öð_ÿú×ZŸŸ)SDš7·'^ ôBLõËyKm) k`XkˆXÃ>zéYí8¬¡d $k0™€výÀ¿ûÔÖ_C+«¼$ðº~"G2YC·Ü–zÒ’~gqÅ2½â†žLWÞ: „ª•=ì糞tøåÛÔaÁé è~ëÒ…ºÒÒìw?‚Ÿ†„ûô‰Š¢ð_B‚H÷î?>s¦HëÖ"Ez!Ï}ûöÉ»ï¾+ùùù&P¼fÍéÙ³§DGGË™3gjuZ™™"‘‘"óç³Þ„ v£pQ˜%²wŽHúˆ²‡¹5ÌMƒÛ«zÚNÏtd"ý®r–ª ƒ0ŸvÞ5Ãþ®'aF¨ÓC}ŒOJö-йF(‡†I<ƒÂ_}E]u))"MšP‡P _ÿíß}£v̘!Ò¾}ÅÚιII9ÿK–,‘¦M›šÎÁÍš53?»ví*üq­N§¸X¤wo‘¡CíïìváìøtnˆNÂ?|ͺlEù6p¦ï‡Ó #ð­ˆÙ1ÕþNH¡îð:‘…Mígsêm%ûwû¨ ÂÊOê^¾œºêE¢£©C(˜Z²ûÞ­›ÝŽ Ôî®þÕu©²àëäÉ"11Ž=þ¼äææJzzºìß¿ßܯmÚqYÃÒ99¬3á„0€²œ@ðÑlïaçi1¦Áà-ñ®ßõª @(ÒÏâåרÏå÷Ú‹ü5AØyòIïðþ'u Ôi·ÐØXê 4¬Ø©“ÝŽ#°¥¥U½.ååÙNäsæ„g23Ãûïg„„”õy"É‘eÁVØ0È4œ1Þûw Ôlm?“õ¶ó¿DÎÒv á'5Õ;$|ÇÔ€P§ÁÒ~ý¨C(˜>]¤cG»—‘A=àŸìl».¥§Wþ¼)Sl'ÝììðªÏñãö‹þý·“r8:wîœ 8Pþüç?S P§8Ê ,í¾º<¦ì°/E5§6l‡Û›"$ŒPµ‰Hr„ o}DäD.5AXÒƒÜ]T6$¬û¹T5¡í±ÇlÈ ÁoÞ<‘ÈH»§'€þî躔’Rùó4 Û»· Ì„Om†‰Š²Ý”Í£>Z²ìþENž<éõØwÞ)wß}wÈ.›³gÏš¿}Ц×ݼð f¸Þ"""¤cÇŽ2nÜ89xð ovP#„„”•>Bä#n^MmØ4¼îÇ–R†Fè9](²ô2^ÞEä»O¨ šÜ÷ì&¼|9u ”/ÙÍ;–:„‚ÄD»ýÖ¾}ÕÁNÀzÒàìÙU?¯°ÐîKhhvþ|‘µkEvîÙµ+tnÛ·‹$%‰¼û®HLŒ}ŸmÛ˜Ë-ØBÂYYY&Ä[P )óªBÂÉÉÉ2gÎ6l˜¹ß§OÞè F (kew‘­•¶k!a¾íO‹ü=Îþ®áõƒ© B‹®ÓNŽÙ=‹z ìMœèÖËV€Ð5¸d“8>ž:„‚Å‹íö[çÎ6¨ øK»?ý´oÏÕ °~–\|±÷>E¨Ý®¹Æ‡U°…„ÿô§?™ùÝ·oŸßãª*$¼ÿþÒç]}õÕÒ¸qc9}ú4ovPm„„”µ°‰H¶GÛ "Ëc¨ ›{˜Ý½«0 ²gÚp°†„wþ—HQ>5AØ[¶Ìûø˜1Ô€P'2u*uéévû­G‘3¨ü׿¿ÈèÑÕ{Í÷߇~'áèèÐè$¼`ÁéÕ«—9rD¦OŸ.×^{­\wÝu’¨mÉÝœ;w®ä3eFÉ÷Eœ4kÖL®¹æÉÈÈ(óœ;vÈ Aƒ¤]»vÒ±cG5j”8p ôqgZùùù/—\r‰‡ïܹ³™ß®]»šç¬\¹Ò¼fóæÍrË-·˜i^ýõ%ëÕZ¯¿gãÆróÍ7KË–-Ís7mÚäSHXÝpà fzîÃSO=%7Ýt“´mÛVFŽ)iiiåÖØ}ºúSçUÇõúë¯óÁ@˜ $ ÀåXŽ  XQv¸vh]Û—ú °}‘(²´“ý0BÉÑ]"ï¶±ŸÏé#íg5ÉÉñ _}5u ”iØ-!:„‚ìl»ývË-"“'Søoüx‘¾üûÒËñã"C‡ŠDE‰äàùƾ†„_}õUó¼|Ðt§M›V²¼ûšîº‡.}ÍòåËͰyóæIjjª¼öÚk²Ë­•òöíÛ墋.’Áƒ˪U«dÉ’%&Ô«Aà‚‚‚2Ӻ뮻ä¶Ûn“W^yÅv5˜;vìXóØ‹/¾hº ç”ì˜nݺU.¼ðB3oË–-“{î¹G"##Ëtþäÿ³w'ðQÕ÷þÿ ‚HYÊb AÀ‹² •àþ€ÔâeD¼é½¡r-n·€ÚR(†Šu¹Ø?|ˆHe5€"K !¬A‰i¤A# $jd Ï?Ÿïq†™ÉL2™L`Îäõ|<Î#™³Í™Ï93“ɼÏç|ü±¹ßûî»Ïˆ_{í5¹å–[Ê _¾|Y–.]jÖ·xñbçwîœ õNž<Ù9NƒÃÚµ¸°°Ð9NCɺ®§Ÿ~Úí>!aíú{ã7šÀžÝ=iXØs»T¿~ýL€Ùµ¾ß~û­×ûá‹0€«þù’ÈÊz"Eÿ-&$ ;8™d) óENç˜ExØûë¸^!rdu|púå/Kv~ûmê@¸Ò÷z+Ëæ´a§îOíp:r$õ@ÅÍ™cHïRSE"#­:…’ò†„=ꜞ——gÆ=ÿüóÎqo½õ–³ °vþuUTTT\ƒH‰õrfBÏž=¥[·nn÷•í¥õ²gHøÊ•+¦C°†qW¬Xᢢ¢L§_‡n¸¡Äýj`¸´NºcÆŒ‘ÿøÇ¦kò§Ÿ~Zb{ $++KfÏžm–ÑÎÁºmîÓ§_÷ Âø³4%à”2ÁêXéICÂÉ|cƒ—»ûj'l oá“°¹Œ×¬p°ןÍÉϦ&€‡Y³J†„œºŽ´q¤¾×oÚD-Â…îÏ¡CEúrŽ/‚`íZë˜ µN¹¡dút‘zõD²²Bg›&L˜`«g½\¦oñ‹Ã°aÃÌïŽàî7ß|ãœþý÷ß— «¹sçJ:u¤zõê¦;ðùóçÍx ýúê «ÞFù¼/ϰc 6”6mÚ¸ #FŒ0óäää˜y\; «²BÂÇŽ3·/]º$ ºuëš.ÅêäÉ“2nÜ8znÑ¢…têÔÉ,³sçNçzNœ8aÆ=îñ!™0Uð³%डJoaàXAa ”i8XÔ9ÉVHø½¶Ôöõý!‘5-¬c:i°Èétjx‘–V2$|÷ÝÔ€p”™i½×—qÅuØHD„ÈèÑ"Ý»S Tܾ}ÖkDFµðEÔ]ºˆü» ñññ&°úÅ_”˜vÇwÈ#|¸ÏÇxúôi³Ì}÷Ýç6Þß°Ú´i“÷ö—ÎÑ®ÇM›6•Ç›ÛëÖ­+ÑIX¯¥èq Š!$ àªw‹¤Å—¿µ¯Èž8êƒÐv>Ë Tf'Z!áuÑÔöµ©‡u<ëqüõûÔ(ÅìæÄ'GHX"R³fM9uê”Ïíhܸ±üô§?u·mÛ6¿CÂo½õ–÷òË/›ñžÛÞ±c‡Ûººwï.õë×7¡i¥Ád I j!$ Àr1× ¤]]rš†„L¥Fm…ùÖ1üÅ"+ìNHvµï1ëX^!’ù–ulðI›"yvNN¦.„í ¬ïó¹¹Ô"\tì(òŸÿiíW B)üÊ4Z¯žHVÖõß–‹/šðlË–-‹?Ç%›.·¹Å/ô±±±R»vm9~ü¸™ÏßðŒ3dÑ¢E&°ûÉ'ŸHÆ åÞ{ïuN÷ÝwÍ2Ó§O7ËŸ8qBF]|ìDHzzºÏûrÐùµ;o\\œé¬Û»wï^3N»¯\¹Ròòòdûöí²jÕ*çrÏ>û¬YçСCeóæÍòÜsÏÉÏ~ö33îé§Ÿv»GHXÔï¿ÿ¾üßÿýŸüøÇ?6õ8tè¹ÏæÍ›K=$55U6nÜ(;w6ËÌ›7Ïm]:M»'שSGFŽ)­[·6•u^½P5ð‘ €E»¯j(-/­ä´]¬Î¬@¨ÓP¥†„uXÝ€zÀ~ϵŽc}=þô‘ülj”á÷¿/~ùeê@¸IJ"Lnúöµ: ë~-( ¨¸¶m­,ü{þõê¥{¯ÿ¶ìÛ·O:vìh‚«hÕŸMš4‘wÞyÇ9¿!áßüæ7¦s®Ž×Ÿ>ø dy¤¡µ+o£FÌ<:´->p>üðÃRïËÕ”)Sœ÷‘ðÃ{T’éXìX§N?~¼s™sçÎɨQ£¤Zµjfz×®]åË/¿,µ“°cРó¿ÿû¿ËÖ­[ó,^¼Ø…uzûöíeÏž=&¤¬ë_¶l™Ûút¹ûï¿_î¹çyõÕWMWa]N'¨ø( ÀrxŽÈŠH‘"/ßÊhGVB°ƒµQVa ¿ÍG^ØLÞ‘„¦Ö±»}˜È÷ŸQÀŸ—þµ%CÂ=F]7z%zBÂáeÀ‘‰­ýš‘A=Pq11"cÇRhn¶qc‘‘#C#¤_TT$G•>úÈtô½téR…Ö•™™Yæ:¾úê+ÉÉÉ è>.\¸`îãÊ•+nãu}º^Ýo´ËpvvpN/,,”cÇŽ9oë¶è6ùºo kHxÍš5<¨"ø( À²o¢È†ŽÞ§iðò_ó©BŸÃh'$ ;Úx‡uÜ®o/r"‘z~ÒïWkÔp ÿüçÔ€póÒK"QQÔ!œh˜óÁ­¿ß’“©*0ü£Ï»zõ¬°>ݼÃÓ‘#GdÕªU&˜¬¡âÍ›7K—.]$::Z._¾L¨"øÆ€eKŒHòHïÓ–EX¡K Ômí+’20ìg×8ë˜ÕŽî_¼é½«;Ÿn½Õ=$\«–vh¢.„“éÓE¢£©C8‰µýû-‘ó$S§Š4kFÊcùr+(GP8%$$H:uLçàºu뚟:t½{÷Rª¾1 „ée‚¦M›f>°÷ìÙSf̘!ƒ ’Ó§O‡Ü¶ê™È¡ºmþÐË0éö/\¸ðº×Ç­¬'’ï}š×¾ZNú4è¾;Väøzë¸-̧&}‡çZ'cè1ûù_EÎgQ œÆs ëðÚkÔ€p2a‚H¯^Ô!œ<ù¤È!V¨séRêŠÓãH? äóï rY½Ú ëó1‹I„¢¢"ÉÌÌ”äädó½£ÞU !aüðâ‹/š³k¿ùæ›kz¿#FŒnݺ™Ëÿ,_¾\~÷»ß]—íå‹^fI·ÿ™gž¹îõ±{-aSg2¬pZînïÓuZ6-]`þp°ÈÉ$ë¸=—IMÚN%‹¬¼Ñ:^÷ÄqÌr„\‡ñã© áD;ÎöíKÂI|¼HLŒÕ!zölêŠKN¶> ¤§S‹@j%Ò¸±@ø $ €åÑG•sçÎù½LZZšéœ››Ð}^¼xQêÕ«'/¼ð‚s\e†G+º½„„ƒWB¸.´ëª^âÞÛåí/æZá5 ]¡.e‚ÈÖ¾„„a—òDÞ¿Í:V·öùöcj(;[¤F ÷ðàÁÔ€p2l˜ÈP‡p²`HÛ¶V‡èJú·,ªí‚«ŸéuýzhäH«†ÚU8#ƒš„BÂT’×_Ý=9ÐòŸ}ö™Y~Ñ¢EÎq•­èö^} ãºÐ`冎ާiÈRlyiÔ ¡ïàtëX&$ ;Ю×zœ®9þ.õ*¨U+÷pË–Ô€p¢]„Ÿ|’:„ý×·v0@dìXêŠ+(‰ˆ°èÜúõ"Ý»_=ùrùr+€ {"$ €–,Y"]»v•¼¼<·Ûß}÷ÄÇÇËm·Ý&wÜq‡3ЫÓ[¶li‚ž:t0ónذÁïû{ï½÷Ì:uùV­Z™å5Äë-|Ø„GuùØØX³ü'Ÿ|Rb;öïß/µk×–ÁƒËÆ%!!ÁH›4i"¹z]¨Ì;Wî½÷^yíµ×Ì<·ß~»têÔÉ9½¢Ûë­Fþl[Yutصk—Ô¬YÓ¬kóæÍ&DìQÒù÷ã?6Ûvß}÷™°­Öå–[n)±>ëû¿ÿû¿¡ÿ!sñù矛õ½ùæ›nuèСҿóXÛ¶mkÆ=ÿüó¥Ö2%%EjÕªeê´nÝ:³½¿@»>ÛEbb¢<úè£rîܹr-§m]N÷_0¥¥¥É´iÓÜö½ $$ìk]×Ó4¤öÅ"ïÓÏd¶„}d.½z¼êO ¡æÈëÖ뮣Úýú<íx€`Ð?å=CÂøu \hHmþ|êN´…þͦ¢;v¤ µÒ™:¸´Csb¢õ™kØ0+ˆ­_‰x~þb¨:ƒ…€}À¾B½{÷–ü|«ë›Ouœl•þÔÛ9?ûì3³üâÅ‹}nÇÀ¥yóærùòeç<_ýµ Ôjç`_4ë¹mÝÞ@¶ÍŸ:ª~ýú™ì… œã¾ýö[3ßÓO?]îmÕ­v.,,tŽÓ°¦çúü­oyBÂÏ=÷œsž‚‚iݺµ4nÜØ­›°·Zj×a ÍêýMž<™'ç5äë9HH¸¢Ï· ûvŸTóRËI¶¦_Ìå@@èËN´Ž×¼ÖÏ“IÔ¡åTñ1¹úÇÖñ¹ûa‘ÓéÔGÈÄuˆ¥.„ }o÷r2ØØîÝÖ~‰Ž¦ítC®½ø&„é$ lðyšP6_!á£Gºü3$Ï­+le‡„5Ti: {êÙ³§tëÖ­Äx ¥feeÉìÙ³Íz´C¯C0CÂþn›?u¼råŠ ÷éÓÇm=ð ´“ð 7ÜPbÛ<×Wžú–'$ì8†|ðA3þĉ^k©_»kPzÅŠÎ!**Êt‡gK–,‘®]»šcÂõöwß}'ñññ¦›ôwÜa:K»:xð ™oëÖ­nãwîÜ)wÞy§Ô­[×t„Ö.ÒÞžwC† ‘-ZÈ7Þh:nôÑGæ¾[¶liö‹v½ÖõoذÁ,ã.k;K[—võ¾ûQ£F&È>zôh9~üxåûÐ,‘wûž®!Ë·ùè›p„ÞswFè9[üwÖÚ–Ö±¹õÿÉÙAM€ Òó‹ÿtv ÿìgÔ€p ÿÒ÷öÕ«©E8ÉÌ´öëìÙ"‘‘ÔÁ1k–Õy€…oúðƒ¯°kàóûï¿¿¦!áììlŸt5<ª!C‡“'OʸqãLèUÃ|Ôe54ḛ́¿ÛæO5<«·üq·õÎÉÉ1Ëyváõ\_yê[‘°>N¯û»´Z6lØPÚ´iã6Œ1¢J>ïzè!®1c†ÄÄÄHõêÕÍ1î°gÏ3ß;ï¼ã—’’bÂæºìºuëL7iÝg®ÇûþýûM [Ÿ#o¼ñ† îΚ5Ët·ÖðîØ±cÍzgΜiž/f9ÏpYÛék]Žû·ñž!áòÔ×[H8==ݯð³Ï>kÆëvy«¥n—†[‡Îóî‡Û½{÷–|mWL¼:N_o!a=~Zµjå¼}îÜ9³Ï\Ãâýû÷/ñ¼påë9â+$\Úvz[—ncóæÍͱçðõ×_KÍš5å©§žªÜb¯¬'òÅ"ßÓu!aØEQu¼_oýüj95¹ÎæÌ™#¯¼òŠyí­Ò>h“«ÿ¡ðJñ3¤Ê 6¹†„uX³†º`w»w[ïëééÔ"Üè~ýÛ߬Ÿ*J_'ôxJM¥€ùÜE ([ !á%K–˜ÛÚÁ4e…„U—.]LW`WgΜ‘o¼QÆŒcn;vÌm»”#$¼cÇÕK\Wt{Ù6꨺wï.õë×wv‹Õଆw «ÆËOúS·qÛ¶m+±>ƒúÃþ`–ut{½r劌5ÊŒ[¸p¡ÛcÕNÆ®úöí+·Þzk©µìÓ§ Šž:uŠç]ñí£G:çÉËË+q¼x†„uh‡Þ~ýúÉŠ+œCTT”é í:víÕß½)oH¸´íô\WQQ‘éô[â~{öìi‚þ•&'Ù ­.å[¶´x‘„f¼À>4ø~dul—€÷ƒ>?çÍ›ç6èk»vüþç?ÿI­ý ï›úš§'>TY{Ç[ÇãŠÈâ?òŠß .ær`•D» z†„ÿ{ê€Ý9:ƒfeQ‹pYü1iÑ"kÿîÛG=PqÚ·A§µk©  à‡@BÂ'Nœ0pãââL—Xí|û׿þÕt/9sf™÷éOHøÝwß5·§OŸnî_ïsôèÑæ>Òh«¡÷«ÝI{ôè!©©©&ÔÔ¹sg³œ*º½l›¿!aÝfíê[§N9r¤´nÝZžxâ 3ß´iÓÌ<åÙVG÷Þ¡C‡ÊæÍ›å¹çž“ŸýìgfÜÓO?íœÏŸÇ 4l­óMš4ɬoذa&Ôé-$¬Ýeµ«ìùóçeþüùR­Z5ç<¾j¹wï^³o´ƒñÊ•+Màtûöí²jÕ*žw^ŽÏpvv¶¹Ý°aCiÓ¦Û0bÄ·y·½)oH¸<Æ÷ïzü9h¹Q£F•WèÔgD6t,}žƒÓEÖEófûÐãõÐ,«ckCÂzâ€>?} ½zõ’O?ý”š—¢Ê‡„½(², œ!r.“ƒ¨DgÏŠÔ®íîߟº`wK—ZïëÔ"ÜD„×êþ]¿žz xÇÕK/Q@À†§L™b:àêø„„yõÕWÍïÁ «·ÞzËa¥¶mÛʇ~è¶.]‡…uzûöíMˆR§P]¶lYP¶7mó·ŽjëÖ­rÿý÷Ë=÷Üc¶K» ë|ºUžmÕËk§_}üºL×®]åË/¿ôڙ؟új—Ií,¬hu;v¬8pÀÌÿæ›o:k­ZµÌ¾¸é¦›Ì4íïW-“’’¤]»vÎíÐý4~üxžw~„„µó´Ö~øðá>ïË1Ot´ï le†„/_¾l‚ðÚ!Û“>W;tèPy…Ö0eÊ„ÒçÙ?©ì 1JÖ··Ž[=¾ÿY±o„\CÂÚ…|çÎæ$=D»;Þ.\¸pMš¾oϘ1ÃVÛ*ÎxMdEm+ üñã"g2x~×@÷îî!á¦M© v§a¿Æ©C8*þH- XûWÁ0dˆÈP@ ’ih(33Ó„ŒTÿþýM¸(Ø4 ˜““ãsº† ;æ¼­Û£Û¥×ÊÞÞ²¶-¶ÕÀÑš5kœãÊ»­Ú‘W;¸ë1|ûí·&€ìŽw,¯µÕpè¥K—Êý¸uº-žû-+$¬úôé#5kÖ”S§Nù¼?G—;xð ×éK–,1ÓSRRÜÆö¶®.]ºH§NÜÖ}æÌ®Óz¥Ð°š×N&•>ßîX‘­}yA‡}|0À:n5$¬°+À5$üù矻MÛµk—sšv•¿n¹åsvê^\eC§¶‹¬ºÑzMù­Èétž›À5òè£î!a<Îó63uª&Eø‰‰Ñ> zî¾îg &NéÕ‹:Š0׆5Ü£aR¶×¨]µj• ôjØyóæÍ&P©]_µ«k‹²3$¼wï^©^½ºéÊ»råJß¾}»9®4à§Ý¥õØJNN–ŒŒ Y¸p¡lÛ¶ÍL?qâ„YG\\œœ>}Z ~¸¾e !aoëÒ€»Î£ÝIu~gôèÑ!éé•,ÓðdB3‘ÂüÒçÓ°eòHJØÇαÖ1[É!aåèÀïÚùÿý÷ß—µk×J~~¾yßÒîÃúÓŸ¼>—ÓÒÒ̲øÃdÁ‚²oß>¯Û¡'9è:›6mjîoöìÙæ¶ÞNPñw½®þõ¯™NÅÓ¦M“?ÿùÏò÷¿ÿ]öïßïuÞò¬¿¬°¾~Λ7ÏtóÿË_þ"o¿ý¶y ´µœd‘5-¬€pÒ¯D¾ÙÃ󸆊ÿÜ+ž3‡º`gqqV˜áG;¾Nšd:u?Á ÿGFR@àúì³ÏL8‘í-Ÿ„„©S§Ž Õ­[×üìСƒ ~Úµ¶([0CÂ*))IÚµkç ûi°oüøñnólܸQZ´hᜧY³fnAâ)S¦8z\ª@B¾ÖõÖ[oI£Fœ÷ß¶m[ùðÃ+¯È:Ìo_4p©AaÀ.ô¸ÞSü¤î"òÉ“ZUi!á‹/J5Ì4}qp„b¿üòKéÝ»·sù÷Þ{Ï9{'L˜àœæ:Œ5ªÄI/z‚Œ·yuÐpo ëu,óøã›“<—éÙ³g‰yË»þÒB¯¿þºéôî¹.=IöÎYÓÜ oî!ròž“Àµ~ž©]Û=$üðÃÔ;Ó é°aÔ!ÅÆZƒîß±c©‚c÷nës@f&µ [(**’ÌÌLÓáõرcæ6àõ4`–˜˜èuzNNŽ ô–v =zTrss½N»pá‚958XQ¾Ö¥Û§ÛY©´Ë¥ؾ-»»¨|0À¿01*Lµºoí[á€{i!aí´«ã5(ìz¢Š#;hÐ Óõþü£lذÁ¼9h VçéÓ§¤¦¦šÀñ?ÿùO>|¸¯ábWº~íHì8‘A»øêm´cq ëu]FOÄÑЮ†y³²²Ì6kgaoó–gý¾BÂú:«a혮'ihY¯ 'Nh§b[ºpRäÝ6Öëë?zŠ|½‘ç#ptïî¾õVj¨ôs‡^DO°×“þWH²;ºÌ†/ݯž0nÑ=qP?¬_O-B°=íÔ›‘‘!………¦³¯Î|]Ö?ÐîÀ›ºû7¯-5t ØÅá9"+"+-$¬¯5o¼ñ†³x||¼Û2ŽPlTT”œ8q¢Ä:?úè#3½qãÆædWzÃm·Ýf¦¿ýöÛ%–½å–[Ì´O?ý4(ëÕ*ïÿøG©µt»}…„õÄߣGð8î.剼÷oV@X»X{§¸0<ëdâD÷°?\ø€ ò¼ÂÐõ6bÄéÖ­›¹ÉòåËåСCaQç¶mµÖoáùé[üñ}útk?Á%òÒKÔ $ Û;pà€éäyà 7HµjÕJöàáL†È²‘Ì¥þͯA˃өìãèj+¨ùѯ‚îܹ³´oß^"##„}ôÑÝÀ¡XíòëÍã?n¦ëOo^~ùe3ý¾ûî+1­´p ë}ì±Ç̸^Ú–« n·¯°5h­¯Ûº¬†¯mKÃÀî°Ž»µQ"_-# \gï¼S2$üÿþu_ !a½z†vüõu%£@è•>êÕ«'/¼ðBØÕYÃ~sæp¼…# wé"2{¶¿ÔÁ3dˆÕ¡¨ê  ,œ={VvïÞ-ǧeI)².ÚÿÛ†Ž„„a/9ÉVX3y”ÈGC*´*×ðÍ7ß,:u’ÿøÿßýîwrøða¯Ëø Å: <ØLÿë_ÿêuúš5kÌôŽ;–˜VZH8õ4ȌӰsYÝîÒêñâ‹/JõêÕÍôèèhyõÕW%??ß^Ç[añön¹Ó:æôµõÈ««0€ëü·¡Hî!ᇦ.€à 4$üú믛åŽ9´mùì³ÏÌ:-ZvuŽˆY¾œã-iø»øã Ù¿ú7›þÃ3ψÄÄP€0 j¸rQäûC :äÉÞ"ræ°È¹Ì««†ìD«‹ð‹ü_FCo‡i×9ŸõCHø>«vEþ„p þùç~-SVHX/ý«Ó/^ìuú|`¦7k֬ĴÒB¬·{÷îfœv0+K Û]V=víÚ%:tpÖ¹uëÖ¦C¼-hxs÷«„µ‹ußh¡¢S'÷pñKAç^²d‰tíÚU¾ûî;s¥£Ûn»Mî¸ã·à®ÎÓ²eK³œþ-¬óoذÁLÓ+’ÜyçR·n]s5“-[¶¸ÝŸcýÙÙÙ'Mš41'M¿÷Þ{æ¾t­Zµ2óhYÿ¶~ê©§¤gÏžÒ°aC5j”$%%y},22dˆ´hÑÂü¯'I~ôÑGÎéem›~~š5k–¹R‰Îsë­·šm«ð¿2²­÷r› ›[ºTD?F&'[û9=š 84x®Ý©ív.²Ý­ZµÊœ”~úôé Ì€Š#$ ¨4©á ÿ†w[ÁÐMÝE> ²;V$õ‘Í·B¦*†ýhpm}{kŸ–'®Á·ò„ŠëMo}-Û1ZdKÅZÆTFHxäÈ‘fú_þò¯Óß~ûm3ý¿øE‰i¥…„Yïƒ>hÆ7®ÌÇèv—U³ËŠŠdýúõÎÇ×§OŸÐ?Î4 ¬¯©Ž€ðW+è „˜áÃÝCÂMšŸgHX¯–¡·zè!ž1c†ÄÄĘ+hœzôh¯ÓµË—Nÿõ¯]bZ›6mÌ4í¾Œõjà×Ñý÷ܹs¥>®@·ÛŸ°Cnn®DFFJµjÕLÐ!d](~Ï[›{aÂ@ÈyòI÷°?4i h|…„{÷î-ù?œ¢A[§Á]ý]ǹ†lhº;èßèÄ~–‹v„%GaG sÁj‚àiÐ@Ä¥‘{P…rH8--ÍlŸþŸåZ#$ z  |´Cçét‘¬µ"û'YÁS kPJCÄ{âDŽ,°:k(YÉL& }}á_oùj™ÕíRC“ßî+ßþÖЛî[ Àvbºf´œP!a¯—Þ­Y³¦¤{\GõøñãrÓM7I5¼v Ö ®ûùçŸÊzõ’ŽÖu>òÈ#RXXèþpéR…·ÛW=ôK Ë—/»Ó/¯ô>tþ'N„æ±uúu\9ÂÇÖˆÒšEÚøÐ3$üûßS@pù =zÔ9O^^^‰¿ã=CÂúÙC;ùöë×OV¬Xᢢ¢L'`Çú³5Qé¡´pAAdeeÉìÙ³K„÷ݤIó»·ÏEþlÛ[o½åìr¬Ý’ƒeéR‘zõ8Ö•~¼Ô¿Ó23E7‰§&ž!CDbc+gÝ¡öv"ʵBH ô@p䥉ž#’<Ò½ã0Ãõ–×¶ºAçg—¿j—i]‡v˜ìäÃÁ"›{ZÇoTFHX½úê«fž† J||¼¬^½ÚÝI“&y]îOú“™Þ¸qcóÐÊ•+åÂ… Z¯^rX/¬Ó{ôèa.Qü‡?üÁ\¹eË–Þn_õÐÁO~òyâ‰'äÍ7ß4Ízöìiæu „”¯ßy§‘u\i—j=¢€vf@(»é&÷ð AÔ\¾B®¡§ï¿ÿ¾Ì°†~këD\‡#F8—+-Tå-$|òäI7nœ¹bG‹-¤S§Nfž;w:çqÜ·ëý¸òwÛÔܹs¥N:R½zusµ‘óçÏW¸Æmßžc-\i8XÿNKKéÒEdâDj‚àÑ×îÝ+gÝe…„õd }Ôÿuèëç¨Q£$))©Ä|cÆŒ‘®]»zN:%>ú¨9IÃó$ŽÍ›7K·nÝÌë¼ë{Ñ’%KÌÿsôv‡Ìz6üpI}í¿óÎ;Í Ú;w–-[¶”Ø]^—Ñ×þ¸¸8sÉîÝ»ý~<Ž÷)=ùû±Ç3Û¢èõÿMEEE¥¾Ÿù³}(?B¨|x©÷WÞ°Èš6m*‡6·×­[W¢“°ã¾õï|oüÝ6 ¬i¨­Zµjæ¤ÀŠšPüñnÀ޵p•›ký–˜(2x°È°aÔÁ³~½HD„uœ[Y!a=iBO‚Ö“¢õíÛo¿Ýœ¨áiÍš5æ=Á1¼òÊ+æ5WO¬>s挼ñÆæ~õIâB×}×]w•x/Ò0ïØ±cÍí™3gšufdd˜ÿýèzzè!ó^0tèPóÏnÃŽ÷í ¯ëá…䨱c~?ÇòºþþýûËŒ3¤mÛ¶%Þ=ßÏüÝ>”!a¾åî¶q§Ó©ìåÐ,‘U7YÇo ]´¯åÓ,7WöìÙ#999~/süøqÓÅÅÛ%†+²Þï¾ûNöîÝk–­ŒíöFƒØÀÞ¿¿ùò+$í›xµCþG÷Š|½‰€0`¿û{HX‡šh†„µS£ŽÓP”CŸ>}¤fÍš¦s¤/å k¨Ëó~!a=iϕ޷Ž?xð ×ûõgÛ< 0@ÚµkWákptìX޵p¦!ÎåË­@x¯^ÔÁ“—g_ùÚ (+$ìIõ®'‡x£v‡ f²Ž×i=‘Z;´?üðÃÎùôDì5j˜«4y{/ò<E 8Ðtôu8wîœ áNž<Ùëû̃>Ðãq,ÿÜsÏ9ÇHëÖ­Í•±Ý„=ßÏüÝ>”!a¾ia ÅÏ¢°—ãë­cWíˆ âRžÈæ^W¥‹|³‡º6òñÇ%C¿ÿ=uO !a½ {õêÕÍ¥Ü5¦*=aOÇÅÄÄÈÊ•+%//O¶oß.«V­r.Wž°®³yóæÒ£GIMM•7šË·ë<óæÍs[VÃhÚù·K—.’œœlºN.\¸P¶mÛf¦û³mÚ-rÑ¢E&HüÉ'Ÿ˜ËÑk×ÉŠêØQë̱΢¢DæÌ‰ñÑÐXûö•óâoHX_‹³²²döìÙ%:¹ûZç‚ ÜÆ3Æ\‰Iƒ³êÏþ³ÜtÓMæŠSÞÞ‹ý©0 ’U”¾—{äåf4¬!Î¥K­ý Ó¤I•Ó¡º¬ðÉ“'eܸqi^[;uêdæß¹s§×ùW¯^m^›{ì±Ó¶lÙb–]Zü$ÑN¼mÚ´‘ÿùŸÿñù^äÖÀ¯ÞÖ“7tY×a„Ç$_ï3þ>_Ëë{ Ž×÷*Ïùʳ}(?BÂ|ËZkä;Ò`§¿ÚUðWÁY‘í#D–Õ°ŽŸ„f"ÿš'’—Fm›êÖÍ=$Ü©5„í™™™iº(ºÊÉÉ1a/ÇeÙ+¢°°PŽ;æ¼­÷¥÷ékÝG•ÜÜ\Ÿë+mÛtœ®ûÒ¥KA©n†¾'%q¬„³îÝE&LIL´öw^5Að¬_oW¥¼¬¤¬p·â"M›6•Ç›ÛëÖ­óÙIøÓO?•ºuëJÿþýM§^Oúº­]u(~ø¡Yvlw(+$¬ïµjÕ’áÇ—ù¸|…|ý}<¾–öÙgÍxížï9_y¶åÇ·ý|ûb‘È;©ìéƒ"+j[Ç1à 'üäjê-½E¾~ß °­qãÜCÂÚ‹º`»w[ïßAhHŒÖ·¯Hl¬Hzºµ¿Ó8GAt¶ø#}ƒV§ê`*-$¬'fxvw„jwìØá6¯žxѪU+¹å–[¼v‰wÐmõêÕM¸k×®nÓÞãÑ·°òçñ8–¯U«–™ÿ¦›n2óGFFJ|||™÷ãÏö ü ðM;°n‰¡°§Ky"oW³ ëÿMäý U}x§‘5¬m)²¼ÖÕ`°k£D>›)òͺaH¯jëîÔ‰š`]ºXR„·©SE¢¸UÇŽ"O>IM\¹¹""Ë—_Ûû-,,”cÇŽ9o_¹rE233Má@h÷Þ1cÆø=¿†õþô~]åää˜@qy·ÃŸÇsîÜ9³~Çô#GŽÈ¥K—Êu?n¼#$ À·ƒÓE¶ö¥°¯åîAPÏA»¥ë ß~,r>‹ç ¦Æs k@àäIê@(ÓF™úž½`µwÚ98*Êú}ð`‘‘#© ‚O-ìjëÖ­¦»®vÛʃ0ßöMIæ›ؘv^ö#: 3XÃÊzVpü½DRþG$ýe‘ïRE.æò\ÂÜÒ¥î!a.¤.‹^é|Ë‘ƒEb…aß>‘‡‰Œ´:€"üÿVÓ}­&LéÕ‹š ø´‹°žx™iÏí¿çž{¤mÛ¶t×@¹àÛα"»c©ìI»Âj§Ø5-¨,Ù‰"'“DN§‹ägS *=ý‹Ÿò5j¸‡„Ÿx‚º¬¦µk—<™„!4†èhŽÑª 1ÑÚßgÏŠÌ™s50 S~¾HãÆ"“&ÙsûsssåôéÓìH”!a¾}0@äÀTê{új¹ÞÚZäÖ[ÝCG¿ü%5€ªnÖ,««äôétÅN­[['ùh°á-)ÉúûL;¼®]kýNiT†©SEêÕ³N"ª BÂ|ÛÚWäàtê{Jb…„÷ÄQ €¹d¹kH¸I‘‚êUÕ¦MV@xõjjª^~ÙzÏNH á.-ÍÚ×ÅåS­ß5(›v«nÖLäÉ'©ªBÂ|ÛØE$}6u€=}8È ú µÈÒ¥%/a®]ëUž$-K-B™#,ª'ú ¼iWWÇßfÚAX׎Â@e}.ГD’“©ªBÂ|[-òÅ"ê{z¿ƒÎZC-&|¢—,w ¿ðu€ªhþ|+ –™I-BY^žõ~ݵ+µ¨ \;{7h 2›sÖQ‰ô$=æ^zIdË‘ƒEb×áâEŽyPµàÛÚ(B°¯Õ¬p­a––-ÝCÂ#FP¨ŠÚ·;–:ØA­Z"7ÝDª‚fͬ¿êÛWäÉ'© *v”æ‘ÚµK^m„!ü Te„„ø¶,B$;‘:ÀžVÔ¶BÂg2¨À4ÈýËâ›o¦&PÕìÞm½èO„> ŽêþÊϧá.:Zdútëwíò:l5Aåûæ: ÓI üàÝ¥<+`ùí>jû)Ì·Ž_ÎeR€1sfÉ®R))Ôª’‰­N°‡ŸÿÜz¿NO§á®Këù©4,ܱ#5€` $ À; V°„Ý_ i9°df– ¿ø"u€ª$*J$>ž:ØÅXï׉\ä(ì ,2r¤õûòåÖ~/( .PQ„„àIKK“iÓ¦Inn.Û°B°³œä«!a\8.[îÆ£&PUìÞm½ö§¥Q »˜4I¤zu‘ ¨E¸‹éÛ×ú}ß>빚‘A] ¢ø¶*èË/¿”ǼÌù^ýuùÑ~$GŽ ÉÇêÛjV­Z%ƒ ’Ó§O{½ œ!ËóYÔö“µö‡pujp£]ê\CÂ;S¨*¦Nißž:ØÉìÙ"Ö¾CxÓ@xLŒõ»ö2Ñ¿Ó6m¢.PQ„„ ‚öìÙ# 4(už%K–HË–-M·C‡ÒµkWÙ°aƒ8p@žzê)éÙ³§4lØPF%III%–Õù³³³%..Nš4i"»µåŶmÛ&¿øÅ/¤~ýúæçÎ;ÍüûÛßœóè¸;ï¼SêÖ­+;w–-[¶øµ}ðíÅ_4õúæ›o¼Þ® mÚ´‘Áúm¶‹‚‚¹á†äöÛo/1—.]ä™gžñ{û®Åc`3'“¬e×v„ ¥Ï¶Â+ëQ €›™3ÝCµk‹|þ9u€ª K‘þ]›X´Èz¿Ž‹£ánÖ,‘èè«·õk—ùó© T!a¨ BÂ;v¬ `Μ9ÓtíÍÈȹsçʽ÷Þ+¯½öš$$$˜ g§NÜ–u7õ«_É]wÝ%/¼ð‚;vÌLÛµk—Ô¬YÓG7oÞ,‹-’Ûn»ÍÌ¤¤H­Zµä¡‡’uëÖÉСC%""­c°¯íƒo×"$œ––&Ó¦M“\m›Pì¿ÿû¿¥^½z&ì°oß>s¿Õ«Wwë|êÔ)©V­š|ðÁævbb¢<úè£rîÜ9¯ë®¬ÇÀæX;:8]dY ‘Õ ¨ÀMf¦{HX‡—_¦.P^ÿµ#mb"µ°í$«ïÕwßM-ÂÂ빜çÛ·¯ÈĉÔ*Šoü ‚ü + ÞjÓ5œëIÞó8‚›>ø`‰ùûõëgÀ.\pŽûöÛoÍüO?ý´¹=pà@iÕª•sº†D5$yë­·Ìm=æþú׿J5Ìx×Ño¿ý¶é0|ñâE¿GBÂJøb‘È;©lúGZœÈ²‘5ͨ „fÍÜCÂãÆQwK—ŠDFꕹ¨…$'[ïÕ½5¦Ïѹ|s­Ý£=.¬!a(§¯¿þZÞxã çðì³ÏJ:uÜÆ-\¸°Är¥…pµ3lVV–Ìž=ÛÌ£‚ÁÍììl·e®\¹bÂ}úôq_XXèì$¬óÔ®]Û„‰W¬Xᢢ¢Lc·/Ü|öÙg2dÈiÑ¢…Üxã¦{óG}䜮•ï¾ûniÔ¨‘Ü|óÍ2zôh9~ü¸Û:ü ïܹSî¼óN©[·®tîÜÙ-Ä[Ö¶,Y²DZ¶liÖÙ¡CéÚµ«,^¼ØÜÖnÒ÷ß¿tüsÏ=çk:L;èútyyy^×½aÃçcÐîÂñññ¦+õwÜa:T¨¢Íy¯-u€=íx@dyM‘w9†%éÇ%×pñG6@˜‹2„:Øã ?ù µwIIÖ¾Î˳nÏšeبBÂPNÚÅUŸŽ¡]»v¦“«ë¸Ÿýìg%–óÂ=yò¤Œ7N"##MHT¢:†K|uw=qâ„ÿøã»w k°Xoذ¡´iÓÆm1bD™ÛŽöïßo‚ÓZo tk8vÖ¬YòñÇ»M×€íÆ%!!ÁìÓ&Mš˜ð¬¯ýây;%%Å„¸zè!Y·n :Ôtpv­oiÛ¢Aå±cÇšuΜ9Ó쟌Œ iݺµ[øWCÌË—/—[n¹Eî¹ç·ñ¯¼òŠ×íõµnÇ<ºÍž1c†ÄÄÄHõêÕͱ   :8]dK u€=mí+²¬†ÈúöÔPBñG!·pñG3ùüsêá¬}ñGƒøxê`7u¼_#¼¥§[ûYªõëÝCÀÀð‘*HCà 4(s>o!ÜnݺIÓ¦MåðáÃæ¶†I}uö _¾|Ù„7è6^»;BÂÖ êðáÃÚ¾pÔ¿ÿ5v¥õlÞ¼¹©¯ƒv®Y³¦<õÔS>÷‹çm]O«V­œóŸ;w΄„'Ožì÷¶xÛ'¿þõ¯MÇaÝÏ_}õ•™~ìØ13fŒé|¬:dÆyÒ Zv´¡£ÈÛÅyßçš´€’] ]‡¿ýº@¸Òsÿ#"D©…9Þ«]z8 LŸ§ºŸµ£°ëßkÉÉÔ*ô¹š@Åø^²d‰ [j‡Y¥ÁN½ýüóÏ;çq„„wìØáç+$¬ºwï.õë×wvyÕPð#<â «>}ú˜€ë©S§Êµ}áèÊ•+¦s¯vÖß=™®Î±zíA={ö4¡n_ûÅõ¶ã~úõë'+V¬pQQQrï½÷úµ-Ê[wñâÅfÜÞ½{eÙ²eòÓŸþÔŒŸ3gޝóÙ³gK3ë°•'$|ôèQ縼¼¼Ç)€*dwñëaòHê{Zm…„?D-^éÇ&×°Ë9€0£I5$LGR{ºñF÷³_ú<]ºôêízõDæÏ§.P„„ ‚ü Ÿ8qÂtþ‹‹“Ó§O›N­Ú±¶G’šš*7n”Î;›@æ¼yóœË•ÖejÔ¨!uêÔ‘‘#GJëÖ­å‰'ž0óO›6ÍÌ£aR½ß˜˜Y¹r¥ }nß¾]V­ZUêöi§Úp“mj3bĈR§?ýôÓ%¦i¸×Ñ©×Û~q½íXOÆ ¥M›6nƒã¾ËÚå-Èëèü—¿üE~ûÛßÊ<`Æ;:þjØûž{cǺ­« r`*u€=i@X‡¤_R €W3gº‡„µ³p~>u€p4dˆˆ—‹‡Á&ºt©^]dõjjQöõĉWoO˜`Ø!a¸Æ.\¸ ™™™råÊs[âǎsN×ñ:½¨¨( õkðXCkÖ¬)1-''Çt¢-mÝžÛnúôécêsðàA¯Ó5xÛ©S'·qgΜ‘o¼QÆŒãWZHØq?5kÖ”S§N¼-ôÕé)))nãÿó?ÿSêÕ«gÍû÷ïwŽ× sdd¤YF;C»òÜ>oë&$  „MÝEþùu€ý\Ê»N¾Ÿz¼*þèëÖÁËGi@Ðî¤óçS»êÛW¤n]‘ ¨E¸Ó@ðÈ‘WoëóVOä à À5CHlL»À®ZµJ²³³MØxóæÍ&äªÝiµ³,JÚ±c‡éÔ¬uJNN–ŒŒ Y¸p¡lÛ¶ÍL÷ÝwM(vúôé& «aÛÑ£GKDD„¤§§;×SVHxïÞ½R½zuÜ]¹r¥äååÉöíÛÍþòw[ô¾uqqqrúôi)øá?¡o¾ù¦¹/ ë~w˜jaWnØPdútjîââ´ÆÕÛiiÖóW†;ýî`РAæÿõÞn²ŽP~|v}€KHH:uê˜gݺuÍÏ:˜€*|Û¸q£´hÑÂÔK‡fÍš¹…wßzë-iÔ¨‘szÛ¶måÃ?t[GY!a•””$íÚµs®§~ýú2~üørmË”)SÌr:M÷·úòË/Íí”8tüSO=Uâ1{Û>ÏuPÂÚ(‘Ì¥Ôöó]*!a€_´[kHxÐ jáfýz‘ÈH‘³g©…]igÙ¦ME&M¢áî™gD¢£¯ÞÖ¾úü]½ºrîoÚ´iÎÿÍkC&Mš˜ÆÚLäZóç;‡ò®cêÔ©æ¶^aòz+Ïã ä±ð0Ø\QQ‘dffšN´ÇŽ3·áŸ£GJnn®Ïéú³œœœ ß®C×UÚ¾)m[.\¸`öñ•+W‚^ƒÊ\7€0°,B$;‘:À~N&] §>M=>ÍœéÖÎÂùùÔÂɬY"^.¼‰iÔÈú‰ð6{¶HT”û¸^½D&N¬œûs„„W¬X!6lW^yÅ…õÊ‚©©©×ô±_‹pZZšyÌ¥}/r­_°æP6BÂJº”g,5l ØMÖÚ«!áC³¨À§ÌL÷°6P'cÇŠ<ðu°³ ¬yô oK—Z¹ÒîÂÝ»WÎý9BÂÚ€ÅáÏþ³§AÕkéZ„„_ýusûÈ‘#×|ß®BÂJ:—i,óÒ¨ìç‹EWCÂú;¥ÐБkHø¥—¨ „íB:u*u°³éÓ­î²11Ô"Ü%'[¹6º]¾\$2R$//ø÷ç-$¼iÓ&3nÆŒÎq§žzJzöì) 6”Q£FIRR’Ûº–,Y"]»v•ììl‰‹‹3‰wïÞí÷òþ„„wîÜ)wÞy§Ô­[W:wî,[¶l)u®!aݾ–-[šÛ:t0ÛºÁå츲Ö¬ÇwâÄ yì±Ç̶´jÕªøù=½ÄUyì|#$  jºrQäûC ÁòŠdo9sØ –éŸÍ±v•»Û XžÏ¢°ŸôÙ"ËkøE»º†„Gޤ&N4\¸ˆ¶¦'ð4h M-Âþã|ºõ÷XšË9ëÖq 6o!áÑ£G›qëÖ­sŽ›;w®Ü{ï½òÚk¯IBB‚Ü~ûíÒ©S'·u9‚­¿úկ䮻î’^xÁ¹Þò,ï+$œ’’"µjÕ’‡zÈlÛСC%""­+pi!a òŽ;ÖÜž9s¦é*œ‘‘QîuWôñéºû÷ïoBØmÛ¶5ãžþùRkáÏöð0€ªIC­Žîr ×fXÝ@d]´È–‘‹ì޵.ÿýÕr‘ïRE ó9. ”œL²^¿‹ ¨ìçàt‘U  ü2s¦{HX;ƒæßôµÝ£¡%lFCÞó]h·`}Î&&º×+?TÆÕ!áC‡™Î´¿ýío¥fÍš¦cmaa¡Ïå4 «Ëy Ñ>øàƒeÞoiËû 8ÐtÞu8wîœ ÊNž<Ùç:\CÂJƒÁž÷[ÞuWôñ=÷ÜsÎqÒºuëâçwc·nÂväÎN¤€Refº‡„uHI¡.Ö®µ^×óøW£­-]*R»¶HDµ¨ ´û÷œ9îã&L°®þlްcÐàéo~óÉÉÉñ:¿†Z³²²döìÙfþ]»v9§9‚­ÙÙ¾¯°èÏòÞBÂW®\)~Ô–~ýúÉŠ+œCTT”éàëkþ„„Ë»î`=> ëø'Nx×ßíàßú®¿ül‘›¬@ϬÀ°†zô÷#  Àõ 'v艀¥>#²¦…õ÷„ž¬@´;kH¸2:Õ®½øxë5ö¦]eïÑ\ð(ìµm«áV÷qË—[!ñ³gƒ{_ŽðêÕ«åóÏ?—K—.yïäÉ“2nÜ8‰ŒŒ”-ZH§NÌr;wîtÎã+èò®·5˜«¿7lØPÚ´iã6Œ1Âç:ü ºî`ÕçùçŸ7ã?ûì3¯óú»}|#$ =g­Ððž8‘Õ DVDŠlí+’oÏ;`u-ÖîÅtqýîÒçrLv¤¯¹ë¢©ìiw¬ÈÚ› ü¦é\CÂ#GRqq"½zQ»KJºú­W@x‹‰‰u§ÝÀµÃ°v&GHøØ±c¥Î×­[7iÚ´©>|ØÜ^·nßr]Þõvaa¡ÔªUK†^êvtÝÁªÏ³Ï>kÆŸ>}Úë¼þnß B[a¾ÈÑÕ"û&ŠlèxµË0ƒýÝŸsØ hš%²m˜Õz}{‘Ì¥Ë@(Ó¥vqì(y¤Õ ›0ÀOÚ•Ð5$¬ÃþýÔì®A‘Y³¨ƒÝ¥¦^}Nâ#^Ø›8Q¤£—óÖçÌiÜX$??x÷åOH¸  @š7o.=zô(>SeãÆÒ¹sg³Ü¼yóœóù Ѻ¼çí½{÷JõêÕ%&&FV®\)yyy²}ûvYµj•Ïux†„Oœ8aÖg:÷궺î@_ïÞ½åã?–óçÏËüùó¥Zµj²páB·uòØøFH\[ç³DRŸ±ºBkñ\&5BчƒEv<@`OúþòÞ­VHøÛ}Ôà—fÍÜCÂY€Íœ=k½ž/å+Ë:6m Þ}ùV‹/6AX·}ûö²gÏXÕ€ë²eËÌ<¾B´.ïm}IIIÒ®];3^‡úõëËøñãÓË «)S¦˜åt|BBBÀëäñÕªUËÌ{ÓM7™y###%>>¾Äúyì|#$ ®Óé":Ьn ’“L=€P£!ËÝ\“6>~×4·BœŒð“^ÖÚ5$Læì--Íz=×.´°7×ð‚Ô#Ü­]kíëÜÜ’Ózõyà:Ó^XXè&¾råJñ±™)EEE×dyW999&øȲêÂ… æ¾u‚µî²ß¹sç̺ÓŽ9"—.]ºæ¨Š €ë§¨@dçX««ð‰MÔ%âß?‰:Àž6vYÓ‚0 \fÎt wêDMÀδۨ¾žkGaØ[~¾µ/6ñÒtaf÷nkkÐß“vŽŒÉΦNà/BÂàúÛg…s½@ d¬Iã›7ØÔºèâc¸%!a@¹¸v)ÔA/s}àu»š5K¤Aê.ô½¹ys‘©S©E¸ËʲöwbbÉiyyÖóš°8”ã35%!A; ¿ÓX$Ÿ6@HÐàþ®á ›Ò»#$\˜O=~kÑÂ=(üüóÔìjâD‘˜ê.7i×N$6–ZTúwØÿ–zòIëxÐÀ0ÀÏX”„„‚³"ïµùG/‘¢ê\o®ÌZK`Or_ýcë8 †w MMÀ®† ;–:„‹èh‘ÎÙ§UET”ïnÁ¹¹V7a ÊÆ7¦ t|—*²"RäÐ,j\OÚÑ[Õ'“¨ìG;ëñKH€yóÜCÂÿöoÔìªK‘gž¡áBCÂ={ŠôíK-ª‚¬nà¾Ìž-!’œL­ ,|c BKZ¼ÕòLµ®—¼4+\™»›ZÀ~ÎeZÇ瀞 Ê-3Ó=$¬á“]»¨ Ø‘¾†ÏŸOÂE÷î"?ÿ¹HL µ¨ ´cô°a¥Ï3r¤õ<é%‘-[D9tˆÁÿáâEžk¨øÆ„–¢‘õíEöÄQ àzÑ®$¬;"$ ¨ ›ov ÿéOÔì&;Ûz _¿žZ„ í ¬aí(Œð§]À{õ*}ž‚‘I“Dj×vÿÛÁßAƒÂ@UÀ7¦ ôd­µº —J-€ë!;Ñ Wœ¥°퀭ÇïŠHB€€ îÐÛ{Ù·Ïz Oå_KaCCÂÚM˜pÕ0gŽHd¤ó~ó „è$ ”†oL@húG/‘PàzÈ\j,;rtÂÖaymê(·yóÜC·ÜbuªØÇÚµÖkxn.µX„7¦UARÏaB 4i7a xN§ÀµöÏ—DÖÑš6åNø õ”[ffÉKïÚE]ÀN´ iDu'< r×]Öû2Â_zºµ¯ÓÒ¨T¥@h**ÙÐQdßDj\k©ÏXݼ;:ºÚ%$ÜŒzróÍî!á?ý‰š€L*Ò¥ u'±±Ö>Õ÷å³g©G¸Ó}¬ûzÓ&jEH„®Ì¥"+ë‰ðŸàšÚ'²µ/u€=}±ˆ0 Â†w ëm€}Ĭ2„:„ wëf½/kׄ¿ÆEæÏ§PQ„„@èÒp°†„ÿŃkê£!"É#©ìÉ5$ünkêȼyî!á[n)þxR@]À. ™0:„“I“Dzõ²Þ—ÓÓ©GUyOä"sPa„„@hK™ ²©»HßÈ×Ì?zYÝ„;ÒðšfVHxS7êˆv(t ëðé§Ôì¢}{‘øxêN¦OéÚÕzONJ¢UÁر"ÆQ¨(B ´}»Ï zå¥Q àZY-r`*u€=ýó%‘µQÖ{‡Þ#ˆä^{š€]Ô«'²`u'/ÔkÙÒzONL¤UÁ3ψtìH ¢ €Ð·¡£È'O†ô&®ZµJ $§OŸöz°•‘"‡çPØÓÁéVzB€ zôQ÷0—­{ÈÊ"HŽ-‰Ž¶ö­þŽð§Aÿˆ‘.0BH„¾Ôg¬®…ù!»‰/¾ø¢üèG?’o¾ùÆëmÀ6 ÎZáʯ–S Ø“ w#$ ¨°mÛÜCÂÝ»R;ؽÛzÝNO§áDƒÁQQt‰®J’“­ç²ÿ#$ Àu’––&Ó¦M“ÜÜ\¶¯,g2¬°WNrÈîÏkõcaâ\¦õ|;™D-`OzbÉæŸT˜‚5ˆä ×­+²w/u€P·zµõºÍ‰áECº_µ›p|<õ¨ òò¬}ž”D- " ðÿ³w'ÐQÔéÞÇGÙ‚`@EÌEpeXDA¼€(0,‚lAщËeXG½Ã˜aà w¼tÄÁ3ˆ}‡UAÙ ‹€@ÁÈ0ÈóòüËêt7ÝéNÒIoßÏ9u’®®®®~ªº’®úõSÅàÛo¿•‘#Gæ;Íßÿþw"ýæ›oBò5„Üò-©-²stÈ®ó’ ‡ú6ƒ¡a| Wž¡åÂTêP‘u­íxõƒÔP$­[»vþë_© „º·Þ²:Î"²¬\iý-ֿ͉‰Ô#ZT®,2cu€¢ $ @1غu«TÖ#˜^Ìž=[jÕªeŸ 6”æÍ›ËòåËeÏž=2fÌiÕª•T©REúõë'ÉZ%èãõ1™™™’ Õ«W—T½–¢è%q7Ê< ±±±æç–-[Ì´u;›­ãÛ´i#*T¦M›ÊêÕ«}._P¥MYTCäjñ´ùꫯ¤{÷îR³fM¹ù曥I“&²aÃÇýºn~øa©ZµªÜqÇÒ¿9zô¨ã~BÂùÕÜ×r„ä:AdÊXl…+/ѱaJCÂë»ZÛ±þ † s ?ý45€P7a‚HË–Ô!Òè!Rý[üë_[ëÑAßË/½D ( P |…„5poŸ“'O6b:$Ó§O—=zÈ;ï¼#‹-’F™¨;;€Ú­[7iß¾½L:U¾ûî;ùüóÏ¥L™2ÒµkWYµj•$%%É=÷Üc¦}ÉéhêöíÛ¥lÙ²2hÐ Y²d‰ôìÙSJ—.íèPëmù‚êûÝVàëôŽ€Ïz×®]R®\9Ì}÷ÝwMøvÊ”)òÅ_¸Ü¯u]±b…Y7òÕpvVV–Ë:ñöUs_Ë’ë‘é›™Ö{ Wº‹¬ùµµk`€"ظÑ5$¬A._¡-!A¤{wêiìp—."Cù¨Uïç¨gÿ(¾BÂJCžøt‰ºÓ°°§iìêÀ]ÆwìØÑQ/^¼èwúôi3íøñãã:wî,wÞy§ãöùóçM`uìØ±Z¾·8Îê(`=ôy­²öDëuûí·Ë?þèwìØ1ÈÖÎÏÎëÄ[HØŸšûZŽ\'ˆ<ú[ÌuYÆÖvIîFH®X1/$#ràu€PÖ©“,Dd±CÂ}ûŽ&Ó¦‰4h@ ( ÕίöðòË/Kùòå]ÆÍš5Ëå1ù>sss%##C¦M›æ14jP333ã~úé'n׮˴W®\qé$¬Ói·Z Ï›7Ï1ÄÅÅ™.Æþ,_ÐhØkeK‘«kÝe×C»ëïî®^½*1112ÔÃÙ‡V­ZI‹-\Ö‰§°?5÷µ!»Ny¶?o½Ï€pµ¢™ÈÆž„„Ó¾½k7á¹s© „²ÆE&L ‘fÇŽ¼p×®Ô#Z,[f}IëÜ9j p,X ]ºt‘3gÎd:€pDH€ÐÎÁM›6u õë×—R¥J¹Œ»÷Þ{]ã)ðyâÄ 2dˆ ¥Ö¬YSš4ib¦Ù²e‹ËcÝ©êøñãfÜÈ‘#]¦u k°XoW©REêÖ­ë2ôéÓ'ßå ºS)VèëûÝ›¥]ç×îé~çNÌ6 øV­ZÕã:q¾íOÍ}-GÈ®Dž”¾"ë9Û†0¶¤¶žSŠ0 &Mr EM ”U«&2s&uˆ4ééÖßáøx‘¶m©G´ÐºÞwï¦@8™0a‚9—qøðá /‹§óiE™  hh¸råÊùNã)ð©]io»í69xð ¹½dÉ’|; ;¬øñÇåÆo”Î;»L«]‰CÂ֎ý{÷.ðò…„Åq"i“6;»µk×öx¿ÖUßÏ=÷Üu÷µmÛV6lèq8ßö§æ¾–#¤× "ËÚ+Þìð¼‘Ý/Q@‘¥¥¹†„[·¦&ªrs­}µvEd±CÂO>)’Ïá3D þ'%QDãç4yå•W$+++ì–Ý=$Ì×BH€0ÅŸðìٳ͇íÛ·›Ûß}÷¹ýꫯ:¦±C›7ovy¬·ƒ-[¶”ØØXÓ‘XiðTíÎ!aÕ®];)S¦Œœt9žÑVù,_H¸!2§´HÆâ€ÎVÖ5kÖtÔ£F.Þ>ø@ªV­ê¸¿^½z²~ýz¯ëÄÓ:ò§æ¾–#$× "Gî9+`y˜Ô ˜nÃ{^û[Q†0 `&Mr AM -^lí§ù^uä9wÎZ·z±´_pv3ª$%‰hv2ÒÞ×kÖ¬1ÏóçÏ|^äÔ¦!YYYÅò| œÞÿýR±bEªÕ%6 ÀÆÇÇ›ó“'O6xµ©È»ï¾kÆéútÖ£Giß¾½ùÝ>7ѳgOy衇dâĉæ|†û•,µ;pÙ²eeРA&¨¬ÓkØS·ß˜Æ)Ú¤F§×eÉsHØÛkñ÷ùí×Ó­[7ó§Nj®Ì9}útóºßyçs®¤Q£F×]² õp?§Sú„:>Fd/^”ôôtÇ7¿¯\¹bpØt¼Þïþ oiðXl|üñÇï×o“ëoów_¾°¶ƒHJßb™õ‘#G\žºÓZiÍŠÂWÍ}-GH®D†óéVÀ2s µ@ø²CÂs Gf9‡„=œ{„ Òe6rÙ„õgv6õˆ¶ÿô›tIÓã¯sÃðÂÔsÁ3ÚAP¸Òî´:t˜˜Ó ×ÛùOëQ¯0¨W’|â‰'ãŽ;f»ÚèDÙa×?ÿùÏŽiôª„zåIíVlŸ—èܹ³é¨kÓ¹†`ÇŽëuÙ¿üòKéÞ½»™N dxiÝïööZü}~ûõ 80ߺjXØÓvïo=ÜCÂ…©@È~ž¦D=ø¡]gõ²K6ÖKL5kÖLj×®-?þøc½Ð™Öeä/e±Ò@:•b,Ï¢OÚm^·áχX' ¨F¼°Ð¤&j^{M$.Ž:D*ýøÀÑ)ٟθJœ:_ÿèÑ£åäÉ“Q¹Mk÷ZíH«aá§Ÿ~Ú¦u6{ölS_íêìN®ÚÅY;Y7oÞÜã¶åt×¼v¤¶iÇjÝîý]7n”¶mÛÊM7Ý$ãÇ—Ó§O{Ö=$ìéµøûüžÞoÚ Ç½s·Þ¼ys¡êáþ<­@(#$ Â׺N"«ÛŠäž£@ h‡îõ]©Â׉d+$¬Û²†„ÿ•DMuÇ®Aa?³€Ò¸±Õq‘IC‰‰Ößà$>îE•¬,‘Ò¥¿xñ¢éj«AÍÖ­[ûtõÖÀ¢Ž×h~ÓyºÏÓ´vHxÅŠŽq /^¼ØÑuU;kGà^xÁܧ¡f½¯J•*R·n]—Aƒ­Î¦OŸ.åË—7UíÀ|áÂ…|k§ÏµhÑ"©^½ºT­ZUÞ~ûí¨Þ¶¿øâ yä‘GL×Ú#F¸Ü§as­kBB‚év›ëô Řu¤ƒ®OÛÖƒ>hæ¯ëdÆŒ¦Sô¬Y³ÓmÛ¶ÍÌ_ƒ¿óçÏ7¦7mÚ$ ,p™ß±cǤK—.&Ø=räH9qâ„Ï×åöôZü}~Oï }üí·ß.÷ÝwŸìÞ½Û¼Gš6mj¦sߦü­‡ûóø»|á€0ê§K"?ìcä½W$sµÈÙƒÖåß‹cÐn oY×Q䟯Y]…©½ëåÂÞ÷¸Þg­E¶&P„/GH¸ŸÈœ nÔ(×ðßþFM ”hˆtÊê©Z·¶BÂÉ…c¢N³f<,žy:tHl ƒæ;½·ð¯vwÕñ‚Ìo:O÷•tHøòåËrË-·È°aÃdݺu.áæ+W®˜ÐjïÞ½ýªŸ†Fu>º¥ÿ0{±råJ¹÷Þ{%66Vþô§?9ê1Ýo;i;|7ãÆ3õÒõ£áj×}bkÐÖðª§mëÍ7ß”J•*™ßcbbdÒ¤I×Í?99YêׯïësipÞÙ† Ì8íÞë/÷°·×âÏó{{½ÿþû&(¬÷5hÐ@¶nÝj½ºΙ3Çåñº=ëôùÕÃÓóø³|á€0JÓ*b`ˆ¦a~E‘ÍDv޶ÖÀ’Ú"{&P„/;$œú„õ“0 À’“]CƒS%+Òa6’uè òâ‹"qqVXÑE×½v /N’ÕN¹~úé§]ŽÎì0á©S§Ü¶Ñr÷Ýw_7]I‡„gÏžmnoß¾=ßeyöÙgM7ßþýûËý÷ßï²|íÚµ“2eÊÈÉ“'ý®Ÿ†\5PénãÆ&¼yÓM7ÉøñãåôéÓlР¯ÓÓÓå§Ÿ~r¯s{ø@â¼®5ð­aq …çG·eÝÞµÓs0^KaŸ__ŸsxYç«ówžÏùóçïU½ßŸz«>Å…0æÈ„þ“ðþÿ£“pAÖËé×~®Ù›h…5L·®“È÷»ÙD³9¥E¾¡ÂØ‘…yû3B€b“#R®\^Hø—¿ÔKÝRçÎYûæ5k¨E¤ÒðСVÇhBÂÑÇþ²Vzzñ?×_|!<òˆé>:bĈëî·C˜>ø ™öÂ… 2cÆ ÓÁtÖ¬Y×MWÒ!áãÇË7Þ( ¦[oîµX=ÍÓ¦MŽ©ºüζmÛfæ¡áÞùóç›nµ:ý‚ ÓLœ8Q’’’LxçÎR¥JéÑ£‡ãþcÇŽI—.]®ýÿ\NFŽi:#0Ö®]kÖ›vºõµm„„@øÚØKdyc‘ÜsÔ¢¨²REV·µB¢¾JÒ!êädZ¡Ê£Ë¨—†‚u?¶¶ƒµ=_IM§MÖœ» §¦RÔýòn¾ÿ±:u²BÂÍš‰ N=¢~1«re·,k±Ú¼y³éŽëÎa¾ùæ›R©R%ó{LLŒLš4Éãt%VãÆ“ØØX3~Ñ¢E§Ñ®¨wÞy§”/_^~øá‡ë–Q¨ÚØëüžyæÇýÚ‰Ø~ý9pà@ÉÈÈpÜ¿aÃ3½s§WÆ£>*õêÕóØÙ–0ÜáI;ÞjL/-À9ø–ȼ‘”¾"Wr¨G´½§4T©¹p¥!áÅqy!aþFŠÁ¸q®!áiÓ¨ „‚””’ë2ŠàЀð€VGáøxêtý{Èì–8çæ•+Wä›o¾‘Ë—/‡\½.^¼xmŸ˜.?ýôS‘æsêÔ)9|ø°Ç@ªŽÓçÅ×ɲ²²L—hO´³µ®3Oë щ0O[D–5 ÅACuó+Zšé(=Ò?´B•„ÃÎþùšÈ’Ú„„ÅjÇ×pÿþÔB^q]÷ËÙÙÔ"RiHX¡EÉ[¸P¤téà¿ÏéÔ œá'÷œÈÂÊ"ûiÙUlN¥XAá\»1jì›"òQ5ê€ð¶7Qdi=B€âý8’+›®SG$‡ïY@Ð}ø¡Dä²CÂöODŸsçDbbDfÌîrN €ð£O甹A-J¢Îú‘oçh‘å©›†„W·YÓž0 XuìèÚM85•š@°½öšH\uˆdv8xøp‘–-©G´ÒNÒºþsƒx´ .È©S§äêÕ«¬–•%’žn Ь^-²w¯È¾} E.]âýJ!a~6öYÇ5K„v֎²#_J_‘õ]©›†„µ‹ðÊ–„„ÅjÂ×°ÓÁõÒK"õêQ‡H_Ç­[‹$^ûèW»6õˆV))V×pý Æþý" ZÿÃ?ÿ¼H÷îÖôoH®ÿç30Ç Aa€’DH„—Üs"óbD¾žA-JªÞKë‰l@-"ݲ"»^¤oÛŸ·BÂKî´B§8c(ii®'yûô¡&l "mÛR‡Hf‡ƒ§M©X‘zD3 têû=˜Ý„^ÿ»O™"Ò©“µïÐÿßõgãÆ"½zYÝÉuÿ2s¦È‡Š$'[ÃîÝtf “0ˆ „„@x94쥡¯ã+©E0h7áÍè&‰Ž.³Þ[¹ç¨ÂÛÚ"ÛŸ'$ (ç®ýëT¶l^ ¡M‚LÚavæLêÉìα„„áìßÿ¦“0„EäqÀB |ìMYTCäJµ†ÉVèîT µˆ4û¦ˆ|T: üiHxÏ‘…Õ JDãÆy!áØX‘¯¾¢&,+Š,æHÍ §¥Y?wì &øBH„•-Ev §ÁôYk‘-ñÔ!ÒhçÕÕm©ÂßòÆÖJ4 LHPv½¼ñÛoS†œœ¼³ˆ\kÖäuf}àB <ädŠÌ)-’AK˜ úz†ÈüŠ"—³©E$ÙÐÝ ánIm‘´I„„%fþ|×ðСÔ‚ÁîÞM-"™†‚u=Ÿ;gýœ;—šà !aþ•$2/†pj°iýVùf&µˆ$ˈüó5ê€ð§!aÝ?”í\Y¶l^H¸eK‘Ü\ê%íС¼³ˆ\vH8#Ãú™”DMð…0ë»Z‚/¥¯Èê¶Ô!R\͵ºt_I-þ4$¬_*±CÂWIiŠ_«Vy!á D6n¤&PÒRR¬ý0_ÔˆlvHXÃà11"3fP|!$ ª¤¥¥É+¯¼"YYY,NrÏY]„Ó?¤¡ c±¾»Ä¾*"|¿ÛZŸgöS „¿ùE¾• ¼øb^HX‡¿þ•š@I³Ã£ˆlv\Cµk‹$&R|á €ˆñí·ßÊÈ‘#óæïÿ»üâ¿o¾ù&$_C¨/4GZa¯ Ô"hh{ae‘ýÓ¨E$8<×z]É¡º-û>!a@‰Ú±Ã5$üä“ÔJÚ‡ŠÄÅQ‡Hwèõ·6-M¤qcBÂøƒ³¦"ÆÖ­[¥råÊ^ïŸ={¶ÔªUË„p6l(Í›7—åË—Ëž={d̘1ÒªU+©R¥Šôë×O’µõ„‡Çëc233%!!AªW¯.©©©æ¾7Ê< ±±±æç–-[Ì´uk¤ãÛ´i#*T¦M›ÊêÕ«}.BÃ_þò³nþýï‡åüÃÞÆ^"ë»R‡P’ÒWdu[ê ö&Š,­G4lß JеóŽp‹"9|ÿ JÔk¯‰4kF"vÖ¿µzø¾C‘矧&øÂYSÃWHXÃÀñññ&ˆ9yòdÓµ÷СC2}útéÑ£‡¼óÎ;²hÑ"iÔ¨‘4iÒäºÇÛ!ÎnݺIûöíeêÔ©òÝwßÉçŸ.eÊ”‘®]»ÊªU«$))Iî¹ç3íK/½äxüöíÛ¥lÙ²2hÐ Y²d‰ôìÙSJ—.íèìmùÖ¬Y#Æ “óçÏi>iiiòÊ+¯HVVV±Ì?"ådŠÌ)-òÍLjJ2[¼KYÔ"ÜiCwê€ðw9›0 hú÷Ï ÇÄè—‰© ”$í(«¡QD6çp¯^"C‡R|á¬)€ˆá+$¬4x«!\;˜ë‰†…=Mc‡„è2¾cÇŽ&ü{ñâEǸӧO›iÇï×¹sg¹óÎ;·5 ª!á±cÇhù"Õ·ß~+#GŽ,Ò<~úé'™;wnH¿ÎPZÇB×ðzÈûz†È¼+ü…СëCÃÛGR‹p·¤¶Èî—¨Âßùt+|ü3B€7kV^HX‡W_¥&P’FéÎ÷_#žvê·CÂ0€šà gM„­cÇŽÉ»ï¾ë^~ùe)_¾¼Ë¸Yz–ÎI~ÍÜÜ\ÉÈÈiÓ¦™i´C°3;$œ™™é§¡T ·k×ÎeÚ+W®¸tÖéÊ•+gÅóæÍs qqq¦‹±?Ëéü yçG»37nÜXªU«æ2~öìÙÒ¼ys9uꔌ1BjÕªeÂÚ‰‰‰rõêUÓê:NHHêÕ«KjjªË}ÙÙÙ.·5®ÛÞ]wÝežÁ‚æþ3f˜ŽÔõêÕ“×_Ýñ}~]Ç 64_¾|ùuó>|¸<þøã×½Fít}ÿý÷;º oÙ²EÚ´i#*T¦M›ÊêÕ«]¦×ínÊ”)Òºuk3ÍÝwßíx=vÍ5¨Þ«W/Óá8d-kpíÅÆ³Ó E+[Šì^,³ÖŽÛú^q*V¬/Ýþ›ðïÿ;¼×aî9+HI§nD‚³‡¬íùT !a@‰ÓŠ¥Jå…„µ³0 äh`”®²ÑÁ k0œîÑøñYšWpÔ`¤=Ô¯__J•*å2îÞ{ïuyŒ§î‰'dÈ!#5kÖ4ÁNF˜Î<ÂŽ?nƹwÀu kèToW©REêÖ­ë2ôéÓ'ß勦õY˜°c58«ÁÁ &È?üàq½õìÙSzè!™8q¢ îê¸WÝZ;ÙÓvëÖMÚ·o/S§N•ï¾ûÎãú·ok˜WCâo¾ù¦üêW¿’›o¾Yþüç?›@®>þÑGu¬Ó={öH||¼¹=yòd³¾µ›¯ûügΜi~?xð ËòiÈ\_‡ÒÀP4h Hëx ü:o;K—.•o¼Ñ–׬YcÂÊûöís™ç¤ÿþæ½£ó²—'d|¿Û ye¥²Ó Ei“D>ª&r57à³¶CÂÿøÇ?dýúõŽac®Û¬!z]ž¬¬,Ç8}O 6ÌÚ[ÙiÖ{Lßk@¸³ÃÁG—E“&y!ák;%›‹¡@‰éÛWäùç©C4п³z1¹ÄD‘–-©>?KS‘Ÿ©§n‹-ä¶Ûns25p™_'açð?þhB˜;wv™V»;‡„54¬ÎÞ½{xùXžiˆ»C‡&Ü=fÌÓ)Ø{½ip×yýÔ©SÇtvî&lO;pà@¯óq 0ÀtìUsæÌ1ãš5k&ßÿ½÷õ×_›qo¼ñF¾ëØyþÚMX;OÿñtÜŸžž.7ÜpƒÙ>•nsÚÙ¦AE ;Ö1î‰'žÚµkûUÏ/¿üRºwïnæñÌ3Ϙ®Ú!A»Ô®hÆ.TÙÓÓ;>k;$üí·ßýeFô¾ù_I"ób¬ŽÂ@¸;‘lí“ϵ~Î+GM%êÉ'óBÂ:üüñ P´£ì„ Ô!èߨ¤$‘I“Dü<ô @t–¦"…?!ÓÙ³g› —vaUÚ%Ö½£¬Þ¼y³Ëc½]Z¾eË–k:+ ?÷Üs.!a¥ÝfË”)#'Ožô{ù"Ù±cÇäÝwßu /¿ü²”/_ÞeܬY³®{Ü®]»Lw^­¥ÖùèÑ£ù>·õ¦A`¯Ý Ý§ÕÎϾæcßv'k—S÷é§Ÿ:Æ={Ö%¤ìOHX=öØcr×]w9îOLL”[o½Õœ5”¬!bí,ptFÖ.ÆþÐp¼ÎWç?zôè|·×bw)Kdáµ÷ôÁ·ØÁ…2í$üÏ×>[_!aíŒ}ß}÷¹ŒÓ0}óæÍå“O>qìSõ¶†ö'Mš$÷Üséø¤g’Ü|õÕW&(¯åµ#¸v•ß°aƒ™G­ZµÌ²4lØÐÌoùòåŽyg;µ‡Ó÷ÙÃ?,U«V•;î¸ÃtévÞGù»<úŸ2eŠ´nÝZ*T¨`:“§¦S7ííÏ‹,oÌvŒÈ`‡„­°~.Ž£&€5¾kHø¿ÿ›š@IiÐ@dÆ ê ì°q|ìÀ÷giJ RøÖ@¨vþMHH3gÎHNNŽÜ~ûí&h¶{÷nY±b…4mÚÔ„ÁÞ~ûm—Çz ›êcJ•*e®}ûö5jGe¦Õ›mÛ¶mæ¹Û¶m+óçÏ7Á²M›6É‚ ¼.ŸB#y}i­í¡~ýú¦ŽÎãî½÷^—Ç\¼xÑt¹Õn·žó'øêm½i0\Çk0Ð×´žîó4­ÖmÂVØðâÅ‹­µÛ±v~á…Ì}bÖûªT©"uëÖuúôéã2ßéÓ§›mS·+í¸|áÂ…|ë¥ÏµhÑ"©^½º :º¿JÔÞD+$|™kô†´”¾"º|¶¾B¿ÿýï;ÀÙÌcÞ{ï=—÷Õ AƒLÀwâĉf¬ïû‹J¿| Áx ë4¬!Ý/¾øÂìgâããÍ|&OžlÞǺî=kÏ£k×®f ï#Ýé{)++«@˳téR3nÆŒ²f͈޷o_ñ¬¿ÕmER‡²#2Ø„í°0!a@ ËÉ‘kÿæ…„¯ýk(!ÚQÖÃw‚ìð‡Џž>KS‘Ÿ°7nœéü«A- q½ÿþû&(¬·4h`棡­n¸AæÌ™ãx\~Òµk×Êã?n:ܾñÆ&ì¥Óêcœ%''›0¬Þ§ƒ.‡†^ó[>Ößõ4 7xð`0`€›_QäkZ-!Bü+‰0 èZ·Î W¯.âãâ7€©xíãí²eÔ!è!díœlý½ùãã3€¨¤i5h¦—tWºüî»ï÷ëx½_»ª†5ôõñÇ{¼ÿÔ©Srøða¯ów_¾hP°MC³Ú9Wƒ‚O?ý´©©;;”§5wÖ¡C¹ûî»=N[œ!áÙ³g›ÛÛ·o÷ùÜÏ>û¬éæÛ¿¹ÿþû]¦o×® ž}:ø„vþ¨]„ÃÁÙCVïôŽ€ÎÖ ?õÔS2zôhÇ ×UABÂGŽqL£]Üuœv·÷÷ÚX;þzÛçú ë¾<&&F†½¾#o«V­¤E‹~/úàƒ̸nݺùÕ1½Ð²Ó¬u÷ýn¶cD kð0 ˆóBÂ:ÌKM $è>WC£ˆ|ú½jý{k‡„Ï£&ä‡0‘†Æ,X ™™™&l¼jÕ*iÖ¬™ééÜQù+LHئ8yäÓ]wĈ.÷9wîÔé.\¸ 3fÌ0]ugÍšåqÚâ kÀñÆo”„„Ó©777×ëü6mÚäè:­ËìlÛ¶mf>î?¾ êôº-Ú&Nœ(III&H¼sçN©R¥ŠôèÑÃq¿v9íÒ¥‹ HŽ9Òt —²¬Î´i“xc„ âx}Ù!áo¿ýÖãý ;¿¯~øá—P®î»õ¶~áÀ_!a{²w§ï9 ûû»<¶éÓ§KùòåÍû\;ë¾+ðÀfZaüw‚FCÂKj‹]f…„—ÜIM%îÚ¿†RªT^Hø¹ç¨ ·ìlkŸ»›ïÀF;$œ–f­÷Ÿ/:B˜ž¿Ôs’A½Ših“]~÷sË„ BÂPD‹-2A. yU¨PÁülذ¡ qÂE Û6oÞlºå:³Cyo¾ù¦TªTÉü®?'Mº>ÐX!a5nÜ8‰5ãuûñ6?íNzçwšíKƒ„î’““Mg`;H¬ó|æ™g÷k'bûyôçÀ%##Ãqÿ† ÌôÎ]´CÂæVè4—6 a#u¨ÈºNeaBÂû÷ï/pHX¿Ü¡_0Ð/vxã+$¬_)Uª”<ç!¢A~ý›àïò8Óàþ°aÃÌ—Føõ–Ò×€H±oŠÖ°° צ&€ ¨S'/$ܤ õ€âvèµÏu:ì…f‡„5¬ë]à0ìs3ÕªUs4:r¦aÙÛo¿ÝLóé§Ÿú=ßüÎÁæ7½<ö çEõª“îWl-nz.IŸÿ¥—^*–z»+V,‘õì휿ë > @h˜3==]RRRLàRo#48ˆÑpò»|ùrЗëâÅ‹f›ÑÓEuêÔ)9|ø°ÇíÎÞ6Cá5ûåÈB+Ø¥] >Ï™#r%'`³ôu€âøƒ¹?++ËÜÖ÷R¿~ýÌ8û›Üþ†rÛµkgÆíÝ»×ãsÍž=ÛÜï|ÐÉ}ÞÚA¾‰[D¿$póÍ7ËàÁƒ ´<îôËzà+°¸r­.ÂßbûE䨛(²º-!a@Ð]û·ÔÖïµíÜIM 8¥¤XûÜ\.”7¶B ×õ¾f 5 PœC«+W®¼îþ5×þðÚ÷%$œ––fžË>Çã<mžrþüy—å™7ož~÷»ß™¦]zîE¯˜ZRŠ;$üüÃ4£²‡7ì9<ÕÚ×98÷õP˜ç„B€ˆÆ7ÃÈ¥kÕÙš@-ÂMvšÈ;‘°Yú:@¡Ãõþ_|QV­Z%½zõ’-Z*$¬óÒn½ôÕ/{:tÈÌÃ>süøq¹ñÆ%!!Á\ K¿=ï>ïO>ùÄÜNLL4Ï¡éß¿¿év¬Ž ²<'N”¤¤$9yò¤ìܹSªT©"=zôì:ËJµÖÙùt¶_D ¯í@HtÿøG^HX‡¿ýš@qJN¶ö·ˆ®}ì{ñEëw]ïIIÔ€@Ñs3zåW â>ùä“×ÝÿÔSOÉwÜQä°§+8z[Îùª¨/¼ð‚7gΜ«Kq‡„½ Oµôóú»>ÁÃa@D#$&´«éú®"+š´-JÐâ8‘´I›¯Ú%[;ô–+WÎ ñññ²gÏó˜÷Þ{Ïëûß[çÞ+VHÍš5߀¯Q£†,X°Àqÿ¸qã$66ÖÜ·hÑ"óþàƒ¤jÕªŽyÔ«WÏ|ã;¿ý‘§åyöÙgÏ¥?(¾fêî—D–Ö³Þ{@¤Ø1œ0 $œ;'×þGÍ BM 8Í+×>ÇS‡h¡!á¡C­ßµcÿŒÔ€@Ñs3z®D› TªTI.]ºä¸/''Çœ³°CºvHøõ×_—ûî»Ïe>z•ÓæÍ››+Êùüˆ^½±V­ZævÆ ÍtË—/7Óé}z;;;Û±<î!á·ß~ÛŒÓ2ζlÙ"mÚ´1ç¦M›ÊêÕ«¯{}zi̘1ÒªU+Ó E¯P™¬ß8s£MdxàózužvãO!a_Ïk¿¦ÌÌLÓŒ¦zõê’ššêòú¼ ógyõJ›S¦L‘Ö­[›e¸ûî»ó÷Vk_Ïë¾ ó€ÐBH@ðütíCÅû9dïɼöÁãìA«;¤9™Q½™]¸pAN:e…Q ÞÐ]ä£j×¶ÝCÔ#\m^ä³Ö%þ´§OŸöûrGþ8räˆ×Ë!]¼xÑØÒƒ!ù9|ø°Ùï…î³ô¹._¾\<…[ÞXdçh¶[D–Ô¡")}­ðܲ"«ÛR@дh‘®][$—ïf@±ÑN²µùŽ`Ôp ׫'’˜HM;$¼xñbúÔŸ¶… Ê-·Ü"ëÖ­s ÿþ÷¿7WUtvàÀ¯M]4øª_ôöäÉ“MZ½Â£ûtöò¸‡„5ˆ[¾|yZ¶mß¾]Ê–-+ƒ ’%K–HÏž=Í2¹w¶>}º¹rã;ï¼cÂ4jÔHš4iâ2Í_|ašÓ<öØc&ð«ÓÞu×]CÂþ<¯ýšºuë&íÛ·—©S§:^¯°®?Ë»téRs5Ì3fÈš5kLh{ß¾}æ>oµöõ¼îë¡0Ï-„„†ZµËCÉ +[]õ44£][5L³oŠÈá¹"ß旅+Jžv1Õ®ºmf§QpöÍLk?s!ƒZ„º3ûEæ”É\C-Y¶Ä[ÿÛhHxAeëï A2jT^HX‡ŸìŠÁk¯‰´lI¢Eß¾y!á¶m HvHX;k]í(lëÕ«—é„kwÕ-lHXiTo»‡x½…„ßxã 1b„üò—¿”Ê•+;:Û:wî,wÞy§ã¶6—Ñe;vl¾¯W÷îË¡Aß;î¸C®\¹â§ÍetºñãÇøyíפWôTo½ï¡‡’îÝ»;m"ãïò>ñÄR;ŸoÌyªuACÂ…y@h!$ xè$\2„5xy"Ù4 ¬Á™½‰VÉÍDV4³:¸j¸OCcz[ï;ºLär6Û)Šn“Kë‰,Ž9½ƒz„;íZ®û¯¹ÆcÈK›dí÷¯ÒÎf]'B€±v­kHXl€â¡ ݺv¥ÑBÂX¿wºö1pøpj@ Ø!aõä“OÊM7Ýd‚¯ÙÙÙ¦cnrrrPBÂX®P¡‚ùýã?vyŒ^ýQ;ÿvìØQæÍ›çâââL^Orss%##C¦M›fæùùçŸ;îÓ×<ÔþFÒÏ40ìÞIØßçµ_Sff¦Çzë}O=õ”Œ=Ú1?~Üïåýàƒе«¯»@„„ ó€ÐBH`Ñ€ßñ•V€XC6öÓà°þ®B #Pβ‚èºéöu)‹šD íP¾¡;ue Öp¾¾H£¡` ïŸFHüØ9"7ߜ֮‡€â‘ O¢…fv:tÈûÝ-ÊÀ9$¼råJüœ3gŽÌœ9Ó„_5Œðwß}'§OŸ–[o½U7nl:Û4|«ÓT©REêÖ­ë2ôéÓÇeþ'Nœ!C†HLLŒyMš41ݲe‹¹ÿÔ©Sæ¶{bO!aŸ×ý5¹×;¿°®¯åµMŸ>]Ê—//7Þx£Œ3F.\¸à¸/!áÂ< ´x–{Î oMYXYd^Œ¶Ñ”:>{ÕµX»ÓÅ™!¿ÎÖ§w^û¹&/€®áóe ¬nÕˆ,Ú­\×/ÁïЕþ¡Ð×Nó@¤ÑÿS4¯oæßLHt<’¾õV½<)5€â@P4úÖ·sH˜€8ãÖîµU«V•ßüæ7×þövpgý ïß¿?à!aµ`ÁsûÅ_t__‹-ä¶Ûn“ƒšÛK–,qéÌ{æÌsû±Çsyœ§°¿Ï[”°¯åu¦âaÃ†É 7Ü £FrŒTH¸ Ï-„„¾]É9²PdÇp‘åóº 30dÐ`°†·N$[Û"v©ý¨šÈ?¹–rÈ®Ÿ%µE¶pö JÿÎh@X‡…·Ýë¯ç…„uøùÜ( À:u™0:D‹áÃóB£G‹´mKMç°zöÙgMV»ÇîÞ½ÛŒs ÿá0·³~þf¬vîׯŸ7kÖ,3Î=t:{öls{ûöí.Ïï+$¬zõêe–gÓ¦MŽqíÚµ“2eÊÈÉ“'½¾6‡ÎëÕW_uŒ³C·úšlÕªU“ÿøÿpyìÆ¯ ûû¼… û»¼×ÿoÜIêׯï¸í©Ö… ä9¡…0 pÎý‹N þu¾p„÷K4ÑpÞ¢V7r„–]/ZáéôŒH¥!x;$üq B€ Óó£¥Jå…„Ÿžš@qÐÀhb"uˆº®[¶Ìû½^=j@ ¸‡„ׯ_oŸ 6tŒs Û·µ»ïªU«LˆW;àæ>~ü¸ ú&$$˜î½ÚµØÓtžBÂúØÊ•+K:uäìÙ³fܶmÛÌüÚ¶m+óçÏ—ììl"ÖÎÃ6}ŽÛo¿]î»ï>x^±b…4mÚÔÌÿí·ßvL÷òË/›q={ö4¯çÏþ³Ü{ï½fÜøñã]êåÏó6$ìïòNœ8Q’’’LPyçÎR¥JéÑ£‡K½Ükm?ïœ9s$99Ùe8uêÔuË\˜ç„B kPoÝŠìŸ&rzùPëù²ÕÑûð\¶QD.Ý÷ì›BHRš4É ·i£'ù¨ Zƒ"3fP‡h¡ÁàÚµ­ß'M‰‹£&Š{HX»§¦¦Ê¿þõ/Ç8÷ðÕ«WeðàÁR®\93ÄÇÇËž={Ì4ïý|IOAÙqãÆIll¬¿hÑ"Óy «wß}׌×PªM®ÚÝVÇë ó~æ™g\÷þûï›à­ÞßàÚ?‘[·n5ßn¸ÁfÕùóçM'd§Ó5oÞÜ„x=uöçy öwyµÛ³]Gý9pà@ÉÈÈp™{­íçõ4hÀÙ}™ ó€ÐBHuè]+Ê:ÜR"ßÌdÛDdÓ°nçvHx}Wjº§ŸÎ W¨ ]†¨ Zµj"IIÔ!Z8‡„gδþÆ€à;}ú´ ØÄÅ‹%==Ý„‘E;á>|Ø„—=¹råŠKèXŸ[—Á}zí œ™™°ç-,–W×q—/_.¶Z—ÄsŠ8—²DÄŠÌ)#òåÓI8T: çœ`ÛDä›_Qä_Iy!áÔ¡ÔtË—ç…„uø¿ÿ£&hº%$=¦MË ø¡µþéÔ€w„„8;GŠÌ)}íçï©€’¥]³.Ùý’ÈGU B¹s"åÊå…„Ÿ|’š@ i8T÷¯+WR‹h¡p;$œœl­ÿôtê€7„„9™"sËZA½3û©€’¥ûžÉ"[D>ªFH2ZµÊ 7jtíßæj’‘aí_5,Šè !á¸8ë÷´4ký§¦R¼!$ €ÀH›$2¯œÈò_Q %ëJN^HXÃÁ× $ £Få…„KëE7vRí «ûW ‹":Ìký=u^ÿkÖP¼!$ €ÀXR[dÑ­"»_¢JÖ… +$|z!a@ÈÑàZ©RyAá¿ýš@ ¤¤XûV ‹":h×è_ü|vS»óëï~H]ð†0ŠîTŠЛSJ$“ö-JØùtk¤?íðöç© dÔ©“2„z@ ØÑìljmëܦ]…“’¨ ¹¹"Ь^-²w¯È¾} á7\ºÄ{Š!aÝ®Eæ•·BzgQ%++õúðÞDêƒç…„50œ™IM .t Œ"ò¹ÃãâDÞz‹º¢vÔŸ;W$>^¤Y3ë‹3öçN†p4( < èV·ù¬µÈÂÊ"Ws©€’u"9/$œÒ—0 ä,ZäzÒKN€¢Ó²11Ô!šØ!áôtëvË–"‰|üDíüÚk"5jXÁàND¦MY¹Ò XÒI˜NÂw„„P42Dæ”YßUd]'ê äÙ!aý’ÂÚ„„!çÜ9‘råòBÂÿû¿ÔA1ÚIÑÃ=$ÜáÚGÀ ¨ :,^,Ò õ%©I“¸J ð!aÍá¹V8ou;‘]/R%ïè2k?¤ BÔ}÷å…„»w·º?ŠF;ȶnM¢ÉþýÖßRý© IH .€È7eŠÕ98>žp0(BÂ(šÃEV4ù¨šÈ73©€’÷¯$‘ù­ß5$¼ !a@È7./$|Ûmy…§!aí$‹è¡?õo©vVÖ°‘lôhëïß[oQ Pp„„P4Kj‹lÿÕÅS»y@IÓ°î‹!a@ˆÚ±#/$¬ÃÒ¥ÔŠjøp‘¾}©C4q O˜@PÙôo]ÅŠ"Ë8ý ‰0 ïì!+|à¯ÖO½ %mß”¼ð²" +„¤J•òBÂÿýßÔŠjèPk@ôÈÊr kGÅ ¨ 2Í+Rº4aP4„„Pxß²Âxß™#r5—š(y^ZÏú]Ä„!êñÇóBÂ>(’“CM (´‹0!áèãNJ‰‹£&€È³{·ÕAxÊjŠø9š Ð6tÙØKdûó"+šQÁ±ëE‘Õm­ßípÚ$ê9sæä…„µÔ'ŸP(ŠD^|‘:Dý;ºfõûÊ•ÖßT"‰~¡´qcë\z³€¢~ަ(”+9V÷à¯gˆ¬ë$²y5©CEÖv°~·CÂß̤.€£'zË•Ë NM (Z·IL¤ÑFÿ†ja•’bÝ&@ˆ$“&‰T®,rèµøM P('’EþqíßÉóé"ˈìM¤&‚Ã=$üQU‘%Q@Hjß>/$ܶ-¡&(Šzõ G#ç°†§ôvz:uD†Œ ‘ŠE¦M£ @Ÿ£)yÒÒÒä•W^‘¬¬,–ðeÏ‘¥õD®æŠÌ)-rd!5NékýnBÂÕ BÖøñy!áØX‘/¾ &PX yë-êmœCÂçÎY·SS© 2èg4à ¥ €Ÿ£) Z|ûí·2räÈ|§ùûßÿ.¿øÅ/ä›o¾ É×êËhß}÷ E7lØPZµj%'N”.]ºÈ™3gþ\Ç—Í›7›ÚæâÈË‚ \–ÍývDÒ ÞÎÑV'aí(|*… €àX×É Ûû&B€¶{w^HX‡ÿý_j…åEô¨QÃu½ëv°f u„¿ýûEJ—æÿX„„QcëÖ­R¹re¯÷Ïž=[jÕªeB¸JmÞ¼¹,_¾ÜÜ·gÏ3fŒ ªV©REúõë'ÉÉÉ×=^“™™) R½zuIuja±qãFyà$66Öüܲe‹™þ¯ý«cצM©P¡‚4mÚTV¯^í×òEª>}úH‹-dÕªU2wî\yá…Ìëÿ÷¿ÿùÿôÓOò—¿üŬSo©R¥?ëÔ©c‚åþÒù8/›û툓fƒOï9‘lýž“ÉŽ@p¬ípí}‚õ;!a@¨W//$üÄÔ #;ÛÚ.^L-¢Míkû^{-ﶆ†?üºÂßС"ÍšÑE!a@ÔðÖ p||¼ vNž<Ùtí=tè¹oúôéÒ£GyçwdÑ¢EÒ¨Q#iÒ¤‰ËãíPh·nݤ}ûö2uêTÓ W}þùçR¦LéÚµ« ¼&%%É=÷Üc¦饗Ì4Û·o—²eËÊ AƒdÉ’%Ò³gO)]º´£kp~ˉ.]º$+V4ut¯qAƒ·iii¦#qVV–Ëxíô«ó=z´8pÀ„†Oœ8!K—.•ßþö·!öö:‚b÷KVïj®È73EVf' x4$¼g‚õ»î› BÜÀy!áæÍErr¨ Tzºµuû?¢€†„ónë—ofΤ.€ð–™)#²p!µEH5|…„•o5Øis½Ñ°°ûtv(t žíuÓ±cG¾xñ¢cÜéÓ§ÍôãÇ7·;wî,wÞy§ãþóçÏ›ðرc ¼|‘૯¾2¯5ÉéšJ… ÞzªÛ¼yó̸ &dyK"$RëY‘]/Z¿ïMYÙ’ €àYÑÌÚ)íl>· !a@H[²$/$¬—’¥ &œŽàïÐà ÷pÛ¶®·GzºªZ5¾D 0 b;vLÞ}÷]ÇðòË/Kùòå]ÆÍš5Ëå1¾B˜¹¹¹’‘‘!Ó¦M3Ói‡`› ÍÔ¯ú:Ñî´n×®Ëø+W®8: ë4åÊ•3ab ¯ÚC\\œé`ìïòE íäkwZÖàtóæÍÍkwÞjwå1cÆH«V­¤J•*Ò¯_?Ivk3{öl©U«–y\Æ ͼ–/_.Íš5“ØØXùá‡üZ&}®‡~XªV­*wÜq‡ôïß_Ž=zÝúÏ/$¼eËiÓ¦T¨PAš6m*«W¯¾îy4ݽ{w©Y³¦Ü|óͦcõ† ¼¾Ž 8‘l…ð²R­Û©CE6`§ x–Ôv ë@HÂô¤ïµ÷AáW^¡&PP;vXûP #º´ní îÛWäùç© €à9uꔹráÊ•+Íù ý=;;Ûã´Ç—Í›7›óÊú1zW—ßý¼r8ЫÞêUJõÜ¢žOݸqc±×Dï;xð 9~òäIvH "–vÖ ¦=Ô¯__J•*å2îÞ{ïuyŒ·î‰'dÈ!c›ÜÔé4ôióÖ9Vøèø‘#GºŒw k°X× kݺu]†>}úø\¾H£Ík:t¨yÝ;wî¼®ÆÓ§O7!jíì¼hÑ"iÔ¨‘Y7Î4Üo7yòd3¯¯¿þڬˇzȯåÙµk— qwíÚUV¬XažK·ŸêÕ«KVV–Çõï~{ûöí&,>hÐ Y²d‰ôìÙÓtŠv^—öóè6¦!v O™2E¾øâ ¯ãP°Zåh(X; ÛÖv¸Vè ìtÏâ8‘¯gX¿„‰òBÂÕóÌ-Z´U«V™íø…^È{Ã[M8`5é}7Þx£ù©Wú%, ÁEH544¬Bòã-„«žn»í6^UòôÖIØýCÕ?þh>uîÜÙe¼~¸¶?<é) öîÝ»Pˉ´£®¾Ö÷ßßïƒöT÷ºé·fõöSO=åײèºÓƒº.mÚ©ºL™2¦“±§es¿­óЮȶóçÏ›ðرc]>ð»oW!·þ¯äˆ,ª!²ZÞ8½M@0Í)·"$ “&å…„kÕ þÉ`7vHÑGC ¶i6¥S'ê xôÜ»_¶l™|ôÑGrà 7ÈÕ«W÷k·M½_àӠ¥6§Ñδ¿ýíoC.$œ––f™v“µfÍ6l˜9· ¾BÂî˨ºøZ·Òµ«5›s(W»'{ª³}QBž¶1OëÑ^û ¬¿ûÝïÌÕ:õJœzž®¤„KHؽ~—.]’Š+ÊÔ©Sþ^öV=§^£F s•T=þÏþS&Nœ(ßÿ}‘öA€¢áð jøž={¶ù@ãü T;Púꫯ:ÆÙ!a½$”·¸ÎZ¶l)±±±æ ýÁé¹çžsùðÔ®];:Íï›”ž–/R$$¬2322dÚ´iC¶îáÚ#GŽøÖƒ=Úux¨ó™‡Ÿéeyôî§es¾­ü´CpÇŽ2tˆ‹‹3•=v'Öß= ‰ð73EæÅˆädþ\üsVïD2;Á£û¡Ãsó~'$ iiy!a>ûŒš@A,\HH8ZuïîÖ/Þ4nL]º,X`B¢gΜ »eÏïròp¥Ç÷“““¯ý_ÿ™ 0Úô\€ן0!0Wã+‰p(6¬ñöU§âX·’ž.Rº´õ¿M(ÔYÏ¥j÷É'Ÿ¼î~=¯vÇw9$ìï6f¯w=Wk³;áΙ3§Äê.!awö¹Ví‚]5ÑPo êMM³ ¤pø5ü ?~ÜtýMHH0ì4|ªƒv‘½ï¾ûd÷îݲbÅ iÚ´©ùpòöÛoûuÀA£—*_¾¼ôíÛ×\>jÔ¨Qfzý€«¶mÛfž»mÛ¶2þ|ÉÎΖM›6™ˆù-_¤ò'$¬¡ë!C†˜oÍš5¥I“&æþ-[¶äûaRljçæ_ÿú×>—#33Ó*o¼ñ† ¸êôú8›~Õƒ}ö?]ŽgžyÆçòE"BÂÚÅ÷¶Ûn“ƒšÛv‡g_„UãÆÍ‡O»»³7ú!VÞÚùÙnúÕ×9=ª¡äÞ½{{}{šÚµk{&è!á£Ë¬à]VjÞ¸# ­qWrØÉŽKYyÍíîæ„„aB3Ù!á.]ô*)Ôü5mšH>‡QÁ4 ïôv½ºv`ŠÂ9”»R7*7zyvûþ¢†„=]FÝýòïöòØW¥ûÝï~gŽgk˜óرc%VBÂEc_©PÃ~¾ìÚµËt¬íÚµ«i<£ç4<§BçmÅWHXƒäz®aРAæœIÏž=¯í#K»œW°ŸKàï¾û® àM™2E¾øâ ¢Œ¿¶“ÕyNž<Ùœ—8tèÐuÏSÐåÕåÑó)'N4çV´!ޝó3žÞ£ÞB¾êòÖ[o™:¬[·ÎåqþÔ«¸µl)2`@èì u»X¼x±©Ÿþ´-\¸Pn¹åSCç}áïÿ{S3g0Ó¼÷Þ{×­oÛ˜§õæ)$¬Û™6eÊqJUû»§OŸn½óÎ;f›mÔ¨‘ È;Ó÷nÛ=ö˜ ¯ê´wÝu—Ç}¡?Ïk¿¦nݺIûöíeêÔ©Ž×ãoHØß÷‘sýôÜibb¢¹­WKÕ:ïܹ³PûŒ‚ÔDÿ^éx b{z¿úz¾ü¶@áÀý0¦ßrÕîÎÜ?„ê}:ä) ¿êœ?þøºûN:%‡ö:oOËi|…„u]èﯾúªã~;$¬ß^u¦ß:ÕñÎ]ìúÿö·¿õ¹,úM÷ƒgÏž5dìרvíÚI™2eääÉ“^ŸG§ÑÇxû&º§×Q¢>k-²®“븾&²˜V-‚è|º ÎNËûݹ³0!lýú¼°vŽâJšà¿ÄDBÂÑJCÂ:äÝNI±þ–:eÒ€Ó š6Ñ î“úM.7O=õ”锈°?Í <ãìîvã’’@H¸hìóºýøÒ¹sgӬƹû¦Âõ¼‚v>õ¶=¹ßÖùh×P›Ï5€7vìXÇ8 zj¸bó´zzž‚,ïƒ>èujàPÇéóä=ZØðgŸ}fšÁüíoóXw_õ*Nš}Ô¿akքξPCÂÚAXiGa[¯^½L'\»ƒlaCÂùí½…„µùÒˆ#ä—¿ü¥ÙWÛŠ‹º5ìê¾ZÕý½îÿl|÷tÕQž×~M¼îù öõ>r¯Ÿ? ™üy ©ÉåË—å‰'ž0÷i˜[CÑÎóçùBâʪa PôCÌ‚ Ì¥dôƒ^Gƒ§Ú56¿Ë­D3_\õ’ozJ/a´{÷nóMuýö°Þ¯—rvüøqómZ=xqæÌóX Xë·luzýp›’’b.÷¥ëJ²ê}vXW6ètú[Fç§FôCëþýû}€RÛ¶m3Ë ó?¾¹ŒÏ¦M›ÌvaÓ+ÚZ· ]ýfì¬Y³Ì%|¼½Žcw>•â:~ûó"k;°Á;¬?CÂÚY€§ÿÒÇÆæ….¤&à/ ·nM¢Ñðá®!a;`•žNmPxv0NûVªTÉälÈÒ°œÒµƒq¯¿þº9>íL›{è¥ÑlÎÇŠ½]FÝýòïžBÂzÜ[Çéùw¾.¯5¸©õRðýúõ3W6tçÏåäý}Nû5éy=¦­fSSS£j»:räˆ_!a»ã°vût§ëL¯ªèi{r¿­ç=´ÛgÇŽ]¨uˆ‹‹3ÝS•=®oh|…„ ³¼Z ›nçÎM`´C­v4ö4ØáɆ„õ<Œ¾§µ»©;êUÜ^{ÍúÂh¨\UÆÞ*ýÂÄM7ÝdBœºÎ´û«î7‚Ö}’îk<5_*ÌzÔók2mÚ´ëóúšÝ·mO_˜ð÷yíפûBw ç÷>òT?_çZý} þÖÄ™6vÒùè4?ü°ù[êïó€À#$ @ ÐKÖè·%õý!VjpžùóíV½OƒÂ:®Aƒ²uëVÂÕ ­{7…qãÆ™ƒ:­®¥m=À`¯{Ѓ[z0Øù’X|ðT­ZÕ1M½zõd½¶ýòqʾ­ôàIýúõóÐåyæ™g\–SÃÎzÆž¦F.AbO¯£ØåžYZOdc¯ëï[ßU$u(,€à9{ˆ0 ¬=òH^HxÔ(êþ=Ú5(Šè¡qçuŸ‘aý²ì!ÌÆ-^¼Ø{ÕŸ6 0ÞrË-²nݺã”ó±bo—Q÷Œs kWÏ3Ø]$mþ\*~úôé&€¥]3õ¸r£F®»z^A.'ïÏsÚ¯©[·nÒ¾}{ÓMÒùõD Äi~ýë_ç;†=uäTºÞôÜ„§íÉý¶= ‚×­[×eèÓ§ËsÙ·=ñ.Êò*mÆânÔµº}{Üß k_»Û _<Õ=¿z·¶måÚ>!ôö…jåÊ•Žîå3gÎ4ANݦƒÖ}ÇéÓ§åÖ[o•Æ»|‘£ ëñĉ2dÈsP_§îõ±ú¥¥WzÕÛîˆ=bý}^OïÛóÏ?oî;wîÜu÷u¸öÏŽ¾7ü}yšÎ×¹V^CAjâNŸ£K—.ŽŽÇþÖŒ0!aJˆ~³Z»h‡Xý0«·Qtú!ÔùÀ¢ Ð:{ª¯~Wïsÿv¼N«–4ô«˜/\¸àõù>l>…>^ç“ß6 ßÎòrDo¯£Øì.2¿¢È…Œëï[Ö@$m"€àÑç ¾”EH–¦MË 7mªÝ€¨ øC›™õíK¢‘{HXi6‰Žü( ;§Á3mÒ M$lÒÒN¸… Æ)ÂqÞ‚qo¼ñ†Œ1B~ùË_JåÊ•]:Ûü¹t»; »/CA.'ïÏsÚ¯iàÀQ½mi Q•h8Ñmh¢AÖçž{îºû´1Š6ñ¶­8ßÖu§¡äÞ½{{}®ÿÏÞ½@GQ¦ù%HˆA@QQƒƒ¹Œ(ÁAŒ¢"‚7¢2»AD¼ *Y³Š+þ]Ttñ‘•‘‹  ‚ˆ.b„È  J#r àùçyËêtwº;ÕI:éË÷sNèêJwõSÕTõ¯ž×^FGºô§²}´:ë«|…¼G«^·niÆ¢!DïïvœÔ+”òó­ß_n×$„Íg¡Òn»øÖn¶XµßßN> 5”]Ó!a¥Muôöˆ#ª´µËu‹-dË–-æ¶^äàÞIXGñÔÛz±„÷¾âˆuú¼B£G6÷mß¾½Â}—_~¹ë=ª°“×LM|ÑçÑÏ ½`ÄiÍ @Í#$ ÿ4d7-Nd[¦ïûõ¾YÔ @Ý~N½ÿÛ¡-!a@Ò¡Ñí°~¯úñÇÔœ¸ûn+(ŒØ£!á.]<çµn-2~<µAÕ¹ãxà3´º_u8w 4é(quÖÀ²=ÞìÙ³+¬·Ó¡Ûmú+,,”qãÆyã”Óáä>§ýš´sd,ÓpžÖá?þã?.—œœ\¡»ó/¿ü"gœq† 0Àï¾â}»GR¿~}ùñÇý>—.£?³qãFŸ÷O™2Åܯ£ý=oU×WÕfHXo¯_¿^äøC…&1Nê*ú¶Ò¬vÙÛ2,? Õƒ>h>O=õTÉËË3ó¼? ŸyæsÛn|£Ÿýû÷7ó&NœèsûøÚÇ}º7 Ò 7t}>ûì³ ¶£>†÷~g‡„õ5Ùå¼óÎóøÙ+Vø Ä:yÞ@!ᬬ,sßÔ©S=ækgaýì×ìÁ¼‚ ;} ÁÔÄ›®§vÁ×°¹Óç󷪎0|Ó®œsÛˆ,K9éã,•vÖ ÞÍÔ @ÝÙ™]Þ—KH‘ô‹a;(üàƒÔœèÕ‹p¬3ÆúÝé.)É [UåŒ[´h‘ 'M›6M233MøUCouÖPÛþýûåì³Ï6iµÓ±;§C·kÛûî»OâããÍëÔp§þܪU«ÌýÁ 'ïô9ãb‰î;Ú]Wk¡Ýšu´I Íéö×}LïÓ°®v‰Öe222Ìý»wï6­uÓ®¬þêê}{Íš5&@©;cÆ t×0¥v`µé¾|Ê)§˜ ¯®ÏÖ­[M˜SCJŸ[C;hkQ —{?OU×WU'$¬5Óоû¤ûoeuY¼x±Y7 ²»wËvR¯PÑ ^† ßÏB¥#pjÝ»C{Ú·µ»¯ÖYC¼Ú±7PHØ×>VÙg¡MV;«_xá…&˜ît;ês´jÕJºvíjÏ .”+®¸Â<þ›o¾éZîé§Ÿv½_õõ<ÿüóÒ¹sgŸ]Õ¨÷QUBÂN^ƒÓš|ýõ×®ÎûÈ×QQ d–Ó@´Óç󷪎0 ŒÏœ-;ÂÙÄTÓSñF‘¢%"¿l±:.êTRÄþOÇŠEæ%YÓÑ}¾—±»w/¡^êÎöÉå!aûsI§Ÿò¨ bèÃvH¸sç²C4þÄ€J¥¤ U“'W ÷ìIhÕãŒÓ0R³fÍL×Þe;—œuÖpdM‡„•†§ìž;§C·k`¯E‹²eËsÛîžiwf8y§ÏIH¸Ü¯¿þj¶©ÝÚž4´­ÁZ»ë{ï½gö=ûþ¤¤$Ò TW_uÖàlÛ¶m]£©5¨çN’ºÏÛË´lÙÒ#¤÷ä“OšŸÓûfÍšåóyª²¾ª:!a_“®·“ºL.û¢óìñØNêUÓt“ëÇGvvø~* ¹çææÊöíÛ]ó¼? Ožøàƒ ßGU ;y Nk’ŸŸo>Kt¾†|õß3ÏH´ºÇ.Iù´·ÈÚ!"ÿkuj,Î÷ÝQÑE;k8X÷…_¶ú_Nƒy³ZR/u+tùg‘{HX/‚ B¬YSŽ™?Ÿš@e´slFuˆE¾B©©"ýúQTw0îÁ4AX 9iÇIåŒ{æ™gÌm;à©a: Q¹wÏTÞ,_è; ÆiwN]í¸è®²¡Ûõ1¼ƒdvHX_“-˜áä OH¸" Sj°Nƒ´ÞÓN›¾ìرÃtÇ­.} },}^vîÜéÚ‡½9rÄtÕ};šZߺæ¤^5eìX‘„‘ââèÙ¿µë¹†Iƒát«Éí¨:¸¶êsë:x/¯nµszmì?ú3ú^üôÓOÍÅ&ÇŽ Ë÷€Óšèç¾vFÖÎÂþ>çœ<_(öˆU„„á‹Nµ×IXÿ¬ÒiG–ȶL‘"ëYÑGdA‘ VèJÿý¤—u¿ëNh8ºαBâÖý"Ý4LuI?‹æþöí0!a@kÑ¢<(üì³Ô*£!QB±IC‰‰žó´‘`·nÔUçÖ§\Û·oïšç¶okw_~]C¼Ú±·²°¯aÔ„„õçš4i"^x¡üòË/®ù• Ý®¯3»víjÏÚAöŠ+®0ÿæ›oºÇépòNžÓ×ëP.9™ø öÎiWY ¯N·YšÓÚ ê8‹ðw`³Èª4‘iqVüè¾ÊfYªÈºaÔ@Ýúj„u1‹"$ ˆ`ÚýÐ ßz+õ€Êhçõ ¨C,Òðï¼¾á=ºbwa Þ!aíZ˜››+Û·owÍó kçÃHƒ Ì”––&6l0ËLš4Éõs¾Â²Þè; «wÞyÇÌ×€±»Ê†nסæ5(¬÷µk×NV¯^m¾:tü´iÓÌ2N‡“wúœ„„ßV®´~•½…j!aPu,µ;8j ka²u{÷"‘â VÇbí\Lçðë$½}Ù¿9ÖöÒP°n¿ùíD¾b\c]~ó8ÞêVî@‘¥=­ÿD0m6g‡„Ï?_¤°š@ úy©aQÄ_!áÌÌŠÝ…Ú²ÿ~° V(†Q4tûñãÇ=BÇú¼úüÞË:NÞÉs¨(-M¤CíòM-@í $ j†³´›ã¢.V7Z;¤ÅÞ“}µ´n¿ã%ÁmóéñÁ…Š 4$¼²_ùï"B€µoŸH½zåAáÿû?j>3õ³r>§%bRvvŰî :¯¤„úÂWAHB‚HVµµ‡0ƒÛé$΄ï¬Þöýe«ÂÓnÒP—V¥YAaµ3›0 ¢uìXþë_©ø£†éŽ]ºÝuû»7:µ‡n/àPÆúôéÙ“:€ÚEHÁÓÂÚ1ú$ãa¨cŸôYnýûdB€ˆ6hPyHøê«~ü!$Ûì°{ xëVk^^õíN¯Ÿ':mÙ"²d‰ÈÆ"›611ÕÌ´nÈØ±"·Þj3o^ù>WÓû0“çtô(¿ç@@ðòG‹ÌK¢êÞÒž"FYÿ'$ ˆpß~k}i¬!§FDÖ¬¡&àKn®õY¹™Žb’¯®Á%%Ö¼ùó©ë3A/ÈÊ3FdÈ‘ÔT‘”‘6mDË/ÎcbbbbŠÞIƒÂBÂ¨Š•ýD–¥RuOCÂ3¬ÿDvíÊ¿ÌúÏÿ¤à‹¯N²ˆv×`ïí¯¡¿ ¨‹Y´HäÑGEºt‰‹³>'ôs!9Yäî»­û22¬Ï‰©S­ß%:i˜˜.¬L¡î$üòËå„?ý”NÂLLt€ÚEHÁ[˜,’7’:¨{ :D•¿þµ<$|íµ"¥¥Ô¼Ù!a …!öhÊWH8)IdÔ(êÄŠâb‘ÌL‘>}Dâã­`pÏžÖç€v/,¤F?½z‰ôîM@í"$ €àœ,™'R0•Z¨{sÛˆloýŸ0 ,XPnÜXä믩 xÓn‘¿ã®˜e‡„µ£°»”‘´4ê«vî¤{f´NºMuÛêÿõ"‘±c­0°ƒ¬÷½†‚54 „;ýÝ¥vý[ ¶p Áù)Ï àí_G-Ô½9­­p°Ò³›D´’+ì`…_š€·Éeú7iBb•Ö° »»ï¶:4"6èh úY ]dõóÀþÛ‰)ú'ížž.2u*å™ôs«[7êj!aG;kïx µP÷´³¹{HxVK>£ïê«ËC<@=À›Û´¡±Ê_HxÄBW±"3Ó Šj7ÎÞ½­°èš5tŽöNÂ[¶XÔ‘Î!/Z€ÚAHÁÉ)² uP÷Ž[àÙÖm÷0LÃovHøÒK:¼OH8–Z¿#sr<ç'Òº5õ‰fÚ=øÑG­í߯ŸÈæÍÔ@dj×NdØ0êjßœ 8ËREVô¡êÞ¡+¼g¹uûcE>8›0 âé°É ”…çÎ¥&à.#C¤KêËô÷£^TãξÈÑKƒÁññ"&P ‘môh‘ÄDëâ€CSeNk‘Ô@Ýó ëgÓ‰„„Q¡GòðOPp7r¤HÏžÔ!–ù Û÷ëÅ6ˆ>ÚA8.Ndþ|j òi't_]ñBr M àØ±b+|÷=gã„}¹ÖgÒ߯%$ ˆ"ÿùŸå!á뮣ànà@B±ÎWH8?ßš¿y3õ‰6S§Za:ˆ&íÚY£#„üšÀ1 kø®¤ˆZ¨{ÚAX?“Z· ¢ˆtÒ©iS‘o¾¡&`ÓðÝwS‡XÖ¤‰È¸qžó´ƒ°þÞԎˆEEÖö6ŒZˆ.éé"ÉÉÔ„ßœÀ¹McDæ¶¡ƒ>YjÝÖðÜó ¢FË–åAaï IJ>}¬ 0bW›6¾»/j˜43“úD“~ý¬n›¥¥Ô@tÑ‹ZôXO/%¾9€sËRE>§U€0Q8Ç3¼n˜Èüv„„QcðàòðP°õì)2buˆeþBÂ:ˆŒE}¢ENŽH||Ùáþ:j zŸñ7 5¾9€ssZ‹üc,u¶Où ±üvî@B€¨²jUyHøÒKEŠ‹© ¨.]|D;txv_û@ïÞ"iiÔ'šÞët ÍFŽIJ¢ ´øæÎ.´‚wûiÝ LhHxn›òÛvHØ=8 @„kÞ¼<(éUö‹mTùmB€(¥Í•êÕ³BqÉÉá1 -ÔBÂPîéçT•þ® ‡nŒ¨A¡Oê 6ÿ¾ÉÉ©ÛõÐpè9çœ#wÝu—œyæ™rôèQ×}%%%¦‰‘ÒµC¯¼òŠtíÚÕëõ˜&E~ø¡¹íþ½Z fFv3¥âß®ñ~óÍ7Í<ýžÌ]eM””“†Nʽi“>æçŸî7$ì¤y“¿QÁ†„¬ÿ‰'d̘1e¿O»™uºä’K<RÙÛB»8=Ú|×|ùå—›ïÝ÷ïºëw“ú:ª[OM°¡EH€ 8 +'WÀjXØ{ûÀìž{î©°üu×]gÀGŽqÍÛ¿¿Yþ©§ž2·o¸á¹à‚ \÷ëp<~â‰'‚^?H…íʰ¯¡•¼CÂz2&!!Á„ÇkÝüv"3Ø„½xÁý³iEB€¨Õ©“õ¥qÙ!žÌ˜A=Ä.½Ö]?óó©E,ÓŒŽ¿°v¾ûnj‰ŠŠ¬÷÷üùÔ@ìéÕK$5µn×Á Ï™3Ç|?¥ÿÚ²³³å¬³Î’O>ùÄ#$üøã›ï"Ý}ûí·f™I“&™Ûîß«jfäýý›¯°ªq6lhBË6'M””“†N_~ù¥4hÐ@î¸ãÐÕe/ºè"Ÿ!a'ϨAT°!a'ë?oÞ<Óñw„ ’““cBÜî ‡ìõÑuÖösÏ=')))ægöìÙS¡î¿þú«L:Õ¼®wß}7èz:i‚=BÂðÃ?È;ï¼ãšž~úisàé>oâĉ~.P·´´T eܸqf=8ò>0Ó«IÝéUŸzÙ£GùîÃÛè2zЪaâéÓ§»¦Ö­[›4§ë‡Šj#$ìk›x‡„¿ùæsÛýjÞZQœ/ò~ÙŸ?å±3/Þ<®ü¶†† ¢ÔCY¡œzˆ]+WZŸ…Úq±K‡e÷6ÌêF‹È3a‚HB‚Èo $ ¦èú7NaaÝ­ƒÖ¦5ÚõU; Ûúôéc:áÚ]u«Vþ¾§ô~õÕWåᇖßÿþ÷¦™“Ý¡Øæ´‰’7_ 4è{î¹çšï`mÚàǽiS0ϨA”ýú´ÖúºÜ§ÓO?½BHØÉúßÿýÒ¦ÿóãöútïÞÝ´Ö`´ÎÓíâ¾^Úõ÷Œ3Î0ëçÞ8˜õqÒ z„„@;ë©öÔ¶m[©W¯žÇ¼Î;Wø9_·zõå}÷Ý'ñññæ[¯¤ÔetH¿¶Ý»w›ùÇ÷˜ïÖ`±þ_‡s¹øâ‹=¦¾}ûVº~ÑJƒµ½{÷65×Y­û§Ÿ~êº_¯XþÓŸþ$Íš53ýzÂãûï¿xRÂ×vr2Œ‘¿uñ7´’{HX¯üµ¯¬ÕºŒ}°r›ÆˆÌi-r²”áEÃÀÛ'—ß¶C :P@Ÿ–‡„o¼QäàAj 6éÆúYÈç`lÓp—.¾ï;Ö š"òôë§!4ê vi¶sôèº{~;$¬xàTÕàkqq± z./ûC¬.BÂRÕïßôÿ³gÏöø™`š(Ù5tÒ×âvz@›&&ZÝ„ Vég ~ é#OZ+ÜC‹-2ßIM›6M233MøUCŸuÞµk—é>{öÙgK‡L§c[0M”*kè´wï^sÛ»±¯P«Óç 4:©ýú¾ûî» ÷Ùa_÷°“†Tê7Þ0#ãêwË=ö˜>|8àúüüóÏ>CÂZwuìØ1éÕ«— jkhÜéú8i‚¨œF NCÂÚVn4<ªô ÊýàJÙ!a=˜vr Ø¥Ks¥¬pÙPƒö8ˆÒ+1ëׯ/?þøcPë­®¿þú AlwºnÕª• aÛ~øáSC=hö·]¼o;N¨²uñuBÄ=$¬´±Þ~÷Ýwk¯ˆ¿ly¿ìOÆÃ…|?ÓâDŠrÊok88çZB€(>Æ)ï&ûì3sÐhýô`,ÚØÃühW`ý¿·“'Oš+[½‡ RW]u•9°õ·]Üo;N¨²uñwB$,B›ƈ|Ü7?€ðs¬Øºˆaÿºòy^úGB€¨UvØà ß{/õ›ÆiÝš:Ä: ‹û [¿+³²¨S$ѼW‡ÔôB˜„‘Â:èÝâV>ø  ÂêwŠúý¦ò ?óÌ3æ¶=B§~Ö¿3oâĉfž÷÷lþšUV}úô1ë£ßÚœ4QrÚÐ)11QÎ;ï<Ÿ]±b…ÏP«“ç­©°Óõ÷¦€Û¶mp}œ„„íõyùå—ƒZ'M°¡GH€ 8 «'Ÿ|ÒôèAάY³L°SƒÂz»]»væ±4Ì«WpêP=•(ª¥K—ÊwÞ)7Ýt“¼úê«æ€J—ן³-_¾Üìé|t TéúE{˜ï¡„¼ïê©§*ܧá^½:Úß³ûm'à U¶.*,CÂ'KEæ%‰l¦E€0t¨À ë¿®_”„„ÑM‡áÖ/‹5øtÙeÚ‰šˆ=þáˆBÂJ»0ŽC"‰„É €uÜ—”$’–VûÏí^¶l™ù^ª}ûö®yÞ!aû¶v÷]¼x± ñj#ž@!aÍŒœ„„õgõ»Zm¦ôË/¿˜yNš(és8ièôôÓO›y·Ýv›y=Ï?ÿ¼tîÜÙçwŠNž·¦BÂN×ÿ¹çž+û;i² .¯_¿Þ|i75ò·>þBÂYYYf;ÿÏÿüœuÖY¦!Ò¦M›‚Z'M°¡GH€:r䈸ºÇêÕ‘î²:_ï×®¶U¡aQ=ˆš={v…ûöîÝkÂ¥Û{ý¢‰=ÌO?ßè7zPªW«zÓƒy÷BÂN†ªl]TX†„wd‰L‹9\È›@ø!$ ˆQ½{—wÖ€Ä Ómú;0P/‡ÔT‘ôtê)´û³ŽTŸ“C-@Í™cóÕöç¢wHX¿?ÌÍÍ•íÛ·»æy‡„õ{Ș©Niii²aó̤I“Ì2¾‚©¾š9 «wÞyÇÌOwûe契’“†N‡2už.wå•Wš¯¿Î·•=oM…„®¿v¶ëªÿÞsÏ=RèÖ–:˜°=iÐøü£ifl=•“&X€Ð"$ @„Ðð¨^yª]i5tªW¯&''›à©^Q‘ó£™7nôy¿Ö¯cÇŽóôªã3Î8ÜÐðwÀì}ÛÉpB•­‹¯¡•ê<$¼,UdU;€ð´w¥v¿aI !a@Ô{ãòð=÷h÷j ¶ &Ò“?ùc^V–õ»ÐŸ!CØO"Iv¶H|¼Èo#Õĺ@´uk­22Öwÿþý&`ŒP43ª¬‰’Ó†NÚ¸(ˆâ;iÞTœ¬¿þ_ç;v,äÛ½* ²5Á„!a"„^E«C±èAS£F\ÃûèP6ðM¯fÖ«U5 ¼råJÙºu«ÚhÅŠæþ?üÐÔ1##Ã\%«CÝu×]'›ÝÆí­,$ìd8¡ÊÖÅ×ÐJu.ʱºÿ”ÇŽ <íYn…„Oº%£æ%‰,êDHÕ©WÏ Fµm+âvè1aà@«K,bÛòåCÂcƈ$&R§H1b„ŽîFÀæSõwYŸ>\ŠÈE,„„ˆ ö•Ÿ2Õ«2C}5j4X¸p¡É§eË–á]®§Y³f®û“’’dÙ²eQYHX9ƨ²uñZ©NCŸöYч@ø*œc…„ÝÍmSöa›LHõ.»¬¼›°Û!Ä ë„ØVYHX‡g×û‹‹©U$èÐA$#ƒ:€¯ßgÚi}ìXjÈD,„„@Lعs§ì 0^qu( êr2œP u ÅÐJAÓ.¼ۻ’@øÚ>Y䯶P„„1â™gÊCÂÆQ±¥_?BÂ( k‡}_ ¬û×­£VáN·a\œ„T4a‚õ99~<µ@d¢ Ô=BÂp;R/™ßNdu:µÞ6™—ä90 Fè5‡õêYá§«¯¶n@¬èYöçþˆÔ!Öåç[¿5 쪲²¨U¸³ßü=þg}Vêß@¥¥Ô‡0Ê­&2«¥HIµÞ6fˆ,Iñœ§!á¯&$ ˆ ÉÉÖ—Ä:ôìÂ…Ô@ìÐpFuˆuv§à@!á.]DFޤVáN·QëÖÔ*£…õøOÿ*â+B€èwâ¨ÈÏ›˜jr*Þ(R´Dä—-"‡ ʧ“\¾ѶO™'²ƒ+"ÀúG+†§Ç[Áá•ý¨ ê=ñ„ŽÒéÅ©€ØÑ®!a”‡„µ£°?ii"½{S«p׫Û œZ·Îú[HÃÂz‘]Ø€„„ÑOC­ïÿŽ©¶§­ŽŽ‹ºˆ|ÒK$w HÞH‘N)ʱBÅS­€píUDý½âÖß?Öûˆr›7—‡„ûôaÈY±£M‘±c©C¬³CÂË—û_FÃ亿 ¼%&ŠŒOÀ)=öËÌ´~ÇÅÅY[èçè¢E"›6‰,Y"²q£õ&¦hŽ峂AHýè$\{„÷®ٳܚvf[iÿ1Ö žj`KÃÂó’¬0ª¹f$Xa.í©Ýk²¿Ö6íþ¼1ÃÚ&ºè R¬JYî90 Æ´ha¤Î=·ì×âjê 6hfòdê뜄„çÏ·–).¦^᪰ÐÚFÚ¼ìl«s~rrùE¤LL±0iPà!aPû4ˆz`³HᑯFXáa k¸KCÄúÚ–iuÖP²’5˜L@»æÞÿZ#’?Úªwv«“0Dýݱa”çÞ½ã0Sh¦¹m¬îÁG÷±ïˆ<‹ºXÝêÝégÛ'ÿFH3Ö¬) ß?õý´>órr¨¬}!++ð2‰‰"ãÆQ«p5z´H‡ÔBzüL @X;¸N¡è$üëÏì["›^è°}²ç< /½ž0 ¦œ{®’ºürkèuˆfú9WY÷XÄ']¥{õ6ŒZ…«~ýDÒÓ©„ôø™"ΜÖ"S=çiHxa2!a@L¹õÖònÂ3fPÑÍ ¯[G-à,$( L=D·Í›­Ï;:§C%&Šdf^fþ|‘øx‘ââЬóÏ>[¶Oþ®l]¥´´´Âý'NœV­Z™e>úè£Z«Íßÿþwóœÿú׿jd¹PÐmWvh¿r%û2„!a@d9Vl‚÷,/Ÿw¼„0 &•”ý lÜØ Íuì(²u+5½–/'$ŒrmÚˆdd^&ÔAT;$¬Ó¢E‹*ÜŸ““ãº?Øp~~¾yü}ûö½^‘.+y?<Ⱦ ¡DHYXàâüòy‡ bÖ7–wž:•zˆ^vHØGÃVÄ '!a{¹1cB³âmÒ¤‰4jÔHxà ÷ÿå/‘sÏ=·J!á·ß~ÛüܶmÛ‚^¯H +Ò®û1„!a@dÙ—k‚5l³ƒÃ„„1èþ§<$üÈ#Ô@ôÊʲ>ëÕ¥‹³ð!"©©¡Y ŸsÎ9r×]wÉ™gž)GuÝWRR"7–¿ýíoB¯¼òŠtíÚÕã± äÊ+¯”?üP¦L™"矾ù¹öíÛ›ù , 6Èc=&W]u•4mÚTú÷ï/Ë5=ïÅÿîÞ½[~øaóX\pAY½2ääÉ“–s ¯ZµJ®¹æ|¾âŠ+dÉ’%!©]¿~"iiìÇjœJD–=Ë­@ðI·öaî!ἑÔSJJD¬àÜ5׈TaTrˆ“'‹4iB`éÙÓYHxÂk¿ Ej;$ÿüó®y¥¥¥rá…Jbb¢«›°wHø†n0‡]‡Ú‡™õ|â‰'j´nö6ÉÉa?€P#$ ˆ,Û'‹|è9ï—­VHøÃ  bÒÿûVØF§ÿú/ê :i ”0l½z‰ ælÙ–-CÓµÖ «x@N?ýt¬-..6y—/_’°~ eܸqf™/¾øÂã~ïð¯íž{î1ówïÞ]a¹'NHƒ äºë®“éÓ§»¦Ö­[›îÅ5)/Ïú›¥ €ýB0 ²ä™ë• Ø»Ò ÏiMH“öí©WÏ ÜüùÏ"%%Ô@ôÑpr2u€eà@krbÈ«ópMs /Z´Èn§M›&™™™&\«ÁÛš ïÙ³Gî»ï>‰7ÏÛ±cG³ÌªU«<Ë_HøÅ_4ó¿ùæ› Ë™ÿ7mÚT.¾øb©oß¾5Z· ¬à6 ô "ËúGEtðœ·g9!a@ÌëÞÝ Ÿ{®È§ŸRÑ'==4AOD¦`BÂsæX¿#õ¢ššäÖî¾Íš5“[o½µl?í)O<ñ„™ï4$¼yóæJCÂ:u’-ZÈ–-[Ìí¹sçÕIøé§Ÿ6ó8Pa¹ãÇ›îÇ·ß~{È·]ZšHïÞìÃP "Kî@‘¥^ÉBÂȨQVJ§—_¦¢BSS©Ê÷ ›:qð H“&"™™5»î!aõàƒš í©§ž*yyyfž¯ð3Ï¿Ûs!adóæòð=÷hGCj ºh@ØiçXD¿aÂë,­âš™{‡„—-[fB·íÛ·wÍó¶ç1B/^,}úô1]‚ÝC»wï6aãôôtÓù·¤¤DZµj%]»v5ä… ÊW\a~æÍ7ßôX/;üÛ½{wùòË/åðáÃ2aÂ9å”S\ワ^³fyΔ”™1c†ËgŸ}&3gά±šX«dg³@m $ ˆ,ÚE8×+`‡„ç^ ò±Ô³.ºÈ Þ\v™H~>õ]4JH¶ŒŒàBÂJ‹),¬¹uð kGàÜÜ\Ù¾}»kž¯ðÉ“'eÀ€Ò A3¥¥¥É† Ìr“&Mr-÷ä“OJãÆÍüY³fÉ»ï¾k‚Âz»]»v²zõjèÕðï´iÓ\?§á_íh¬ËŸyæ™fùøøx=z´Çú{‡„ÕòåË¥mÛ¶f¾Núüƒ ª±šeeY«üÖDb„„‘eA‘¯FxÎs…„ÛˆlŸL1ëÎ;Ë» ¿ý6õ]’’DF¢°hH8%Åùò%%"MšˆŒ>¯aÿþýrèС€Ë9rD LY?~\víÚåº_çëý<¶écîÝ»×uÿ¶mÛ䨱cA­›þüŽ;<·&è{¸Cö_¨-„„‘eNk‘|ÏîG„„°|û­H½zVHxð`ê º´icC¥û‚îÁ2Äú™ÒRêWW’“EFŒ P[ "Ë´8‘m™žó à¢65$Ü­›HQõ=âãEƧ°T%$œŸ/WvH9u*õ« úw‰þ’•E- ¶D ÎñœW”CH€ß jptúâ ê zèçÚdþÜÇoF>$¬z÷i׎nÂuAÃÁÒÞ·Z@m!$ ˆ%EVX;»Ó`0!aŒÕ«ËCÂÿõ_Ô@t(.¶>×æÌ¡°h`¼I“ànùr+¨:n5¬m={Z!m@í!$ ˆÅùVx_®ç|BÂx8ûl+L—š*rð õù ¬Ï5 xJC¿«â7C†ˆ$$ˆlÞLk‹¾wu{-ZD-€HpâÄ ¹ñÆeâĉޖߵk—<ûì³Ò¾}{¹êª«dÅŠ1B·e]š9s¦Y×ø¼ ª†0 rha ÿ²Õs>!a<Üu—ĉùúkê òÙ!áÜ\jKuBÂ¥¥"))V'â D–,Ù¸QdÓ&¦šžÖ­³º6_t‘Hr²U{ –üýï/û¬úüë_ÿ ‹ÇqêøñãæùFŽéhù¾}ûJ§NdñâÅ’••UöþßÄÆÁnËpz¿Ôö~@´"$ ˆE9V¸Ô«%¢ƒ§Åà7ë×[Á)Þxƒzˆ|ùùÖgš†…•míUí˜_R"2b„Hƒå¿3™B;=öû-¢ù÷T¾é¤»oß>ù9992tèP9tèPµ¿¦Ç©`‚¥G•„„y饗b~{‡#B€0 rL™_q¾ƒç´¶î#$ €qÁV çÎ;­ D²åË«EôîÕ ŽkîˆN¡í$ü "§ŸnMéétvâĉrã7Êĉ+Ìß²e‹|ñÅòã?R¨0òöÛo›0ã¶mÛ¢âõ,ýæ›o̲“µÅ;Û;¢·e]#$ @hDŽŒµº{Û4Æš¯]† ` l…§E¢$« †ÙPÀ{Ÿ »tdÈÈ9ã ‘FD23Ãoý´#¨Ѽ'펪j;¨æ+Ô÷í·ßJrr²™ê©§š›4iâ ¦ Þ† äOú“4kÖLÎ=÷\¹ë®»äûï¿÷XfÊ”)rå•WÊÞ½{åᇖóÏ?_.¸à‚²}:CNž<éZFçkýÛ·oo–_°`ÇÏ{ÜÞ¿¿<ýôÓrÑEI‡dæÌ™æþ &HÇŽ%))I^yå• ëa?΀Ìm_“w€|ÕªUrÍ5×”½ÿÉW\!KôÊ/+V¬«¯¾Z7nl–ýüóÏKçÍ›'—^z©YVë¢Ï¯Ú`ë[TT$éééÒ¼ysÉÍÍ øœ•½žªÖ¸ºÛ[;=_wÝu&ÌïnñâÅÒ©S'Ù³gßýð±Ç“«®ºJš6m*ýû÷/û·ÜçzýôÓO2zôhSóË/¿Üg0»ªÛRéº3Fºuëfê{É%—xlªÖÖÉkôõ9Æç5ƒÓ)€È‘7RäãnçoÌ $ €—O?-Þ{útê ²eeY=6íP«¿ãòó©E$Ø·O$.Nä¾ûDš4), ¯õ³CÂï¿ÿ¾,[¶Ì5iØNåää˜à¡C‡je}|…„5dزe˲¿ñ>•ÒÒRùÇ?þ!Ï=÷œ ÖÅ:Fº¯¾úJ4h ©©©²páB™5k– œjHuŸî°¿±CŠ·Ýv›\ýõ¦æ€Ôy/¾ø¢YFiiifÞ /¼`B²[·nõøyïÐãwÞ)=zô×^{Í„=Ï8ã yþùçM(ó¥—^’›nºÉ£S­÷ãÌž=Û<=i ó´ÓN“³Ï>[~ùå×ú¯]»ÖÌ¿÷Þ{eîܹæuÄ•½Ý;à~ùå—¦wÜq‡ ܾõÖ[&üé$Xª­5@«Ë8ЬËúõ냮ïÍ7ß,×^{­yí»víòû|N^OUk\ÝíýÎ;ï˜yú^twË-·˜×æÏo¼a–Ѻk.»ì2´ug¯—¾n &ëz¥¤¤˜ ÜÃÇÕÙ–JCßú˜öÕסûÕ&m _ÍÚ:yÞ/„„¨B€ȱ:]diÏŠó àSóæV€jÐ †öÙ´Q^›6Ôå´ƒ°þŽóшaªgÙáü¿ÿ»H‡"}ú„׺Ù!áï¾û.,ÖÇ;$¬¡J§!?8sà 7H«V­ä×_uÍûᇤ~ýú¦ã©Í)jÒ¦!í /¼P]Ýe5(ê8uÿyïÐãÝwßíê8;mÚ43O;EÛ¡ïþóŸfÞ«¯¾êóqÜé:ô){SixV»Æz¿Ní„kÓ¹†jŸxâ ×< Äj§_Ýïlö>÷ÔSOUZËo¾ùÆ,ûî»ïV¹¾÷ÜsãíVÙë©j«»½8 6”ûï¿ßã5׫WOÞ{ï=Çû¦iý…—»wï.%%%fž‚užÝ¹¹&¶¥®{›pU§¶•½Æ@ïBÂT!a@äø´·ÈÊ~çÀ§~ý¬UR’ÈoÍÌ "c}–6B‘gìX+쟙im»Í›ÃgÝ* O™2E®¼òJ)..6=í’Ù»wo9vì˜kã7–½Î±®y«V­’k®¹F5jdº¨jgO_´cñÕW_-76ËkÐÓ=¬A˦M›šûÜC—þÖQ 0ÀÜö5ýøã?ët=£…=ãããMç[oW]u•éÚlóRÔP«Îß½{·¹lHxïÞ½®e´kµÎûè£\ó´°{X5PXÒÞ3õÍåFCœÚUöºë®“éÓ§»¦Ö­[›®®¶ÓO?½B-|u³öÇ;$\•úUúþ˜zˆ\škII¡(g‡„½FuGË͵¶™n».]Dz÷Ÿu«,$ìTË)ÛñN9åyôÑG]Ëh—Ζ-[º:i®]»Ötv½÷Þ{eîܹ¦Ã§v<õj7P >ÞqÇ&œ«6/ºè¢ ¡¾‡zÈÌÓ¥¯õô^ÇÙejÑž^yå³>gŸ}¶ ðÙœ®g4Ñ@ª¿Îª6mÖ¬™ßºÚ4˜©ó5 «‚ »?ž²\¸p¡kžÓpvv¶Ù~øa¿¯Sæ_|±ÇÔ·o_³Œ†=u÷N¼ª:!ᚨo íèõT§Æ5±½õ=¬ó§NjÂÒºnýë_¾®={öÈ}÷Ýg‚ÕçœsŽtìØÑ<††÷­×Ï?ÿ쮉m©Þxã ÓùÔSO5]Ÿ>\íÚ:yNß/ x„„¢”ž(>|x¥Ëù;™.Â}ýjËÌ™3M'²,ŸpL»oUq¾†„—ö$$ €‰öôÓ­@ΠAÚ¹‰šˆLÚ¯gOêÏßqúûmêTj)´€n³ìl‘ ¬ÿ¯[ëf‡„¯¿þzÓ!Øž 4Ñ,¾ƒjO?ý´ g.X° ìu¬“zõê™`®í†n .¸Àu[;‹jøÖ;À§¡ÜsÏ=×ùÊkµ¯BÈR»ßÿýf¾ø^zé%Ÿ ¦Ó°bŸ>}LX»»sºžÑD»1ëö á´h!â• €ˆq÷Ý"ýúQxÒßo“'S‡HÒ¦ÈØ±VÈ»uëðé&l‡„ÿò—¿˜îÀö´{÷ns¿¯seÊÔóžz^ôÒK/•;ï¼ÓuŸµ;ðu×]'Ó§OwMÔNªîN?ýt¨WB¸ êÓp>ŽÞÿ§?ý©¬–%~×ÑûõeffzÌf=£Mrr²éfêNƒgœq† 0À5Ï®«viu׳gO¹ä’K\·õ\¶.§™Ý…*$¬ë£ání:èn=¤~ýúòã?ú]&11QÎ;ïûì33’œÍî’«çèõ|¾>gçÎ+t³öÇWH8Øú:=íäõÔDH¸ªÛ[}ûí·æ1tÒïZÑŸkÕª•tíÚUòòòÌúiCýÙ7ß|3àkò®î¶|î¹çÌ÷9ÂÖÈúÙà~Á@Ujëô5:}¿€*;S€èä$$¬ü ‹åNÃÂÞËØ'gî¹çž Ëkç »ŸŒÜ¿¿Ç‰(§ÃØ9Y¿X@HЊÿ!`BÂÔ²¥ÂéÓG¿ˆ¦"†„«ÐQ.1‘p¤Ñ.ÂíÚYÿ׸úÿ””ºÿû¤*!á_ýU:uêTöÚ¹Â6 ùêùÑÛo¿=àój¸PöŽ;îð˜_YHXéºhHT›8ø[ǯ¿þÚŒâ¦MK}ÙézF«÷Þ{Oš5kæ t&%%™À£¯mÿÚk¯É™gžiþ/£G®ðxO>ù¤YO—Ñæ¾¶KM„„õ¼»½Î¾&ïî¶:J vƒµï×u4hë~=7¯£ jVï×î·ú^¨N'á`ëÌyèÊ^OM„„«º½mݺu“† šse´n¢ÕÇÑÏýnGCк=4îï5ù Ww[>øàƒ®×¤ÿê÷?………Õ®­“×èôý‚GH JüðÃòÎ;ï¸&½b\OB¹Ïs¿ÒÝ(„«'ŽõиqãÌ2Ú!ØfŸœqï¡tˆ:=±¬Ã~¹s?±Ì0v±Ö“©½{÷–sÎ9Ç »¦Ý›?ýôSzïÛ·ÏœÔÎÌ—_~¹¹ªßÝ+¯¼b®ÈwWPP`Nj÷¥C¡éíŸ~úÉïcù:ù¦'=ÿíßþÍщM $ö®´BÀ6W¼ouºÈ’î„„ðCG¿Öðùç‹|ù%õy’’¬p!à®Mö‹H3uªõ7ÉÁƒÖíùó­ÛÙÙu»^U k3„æÍ››ó£C‡5]E5¼hÓó£:Úšvä $11QÎ;ïVχ}úZµ±/zÞ×û|¨ëÊ×S5µ½µSî€?¯>—=R£ÒÇÓÇ­êk«Î¶ÔçÔçôº«¢¦_#pŽ0@”Ð+¯õÄ“=é•ôÚIÂ}ž+åÍWwÏž=rß}÷™+ä5°ªaU]fÕªU®eü]Á­ÃléüáÇ{Ìw 3Œ]¬„„¿úê+œÖzk {Á‚2fÌ3¤™{½ï½÷^iß¾½öK¯´×/t{ÙüqÓ‘Ù=¼Ù¤I“?–÷ö?~¼yÜO>ù„7êNá+|t_ÅûrŠ|Ü0~|ðÀÑé­·¨€È£aP:ÆÂ×~áÖ¼`Ý:ëï‘ÜÜòy½{[£ØÁáºlHX;gê¹´yóæ™ÛG5ç_õÜž^ä¯Ö¬Yc–Ñón3fÌ0¡½Ï>ûLfΜéñØÚìAû¶Ûn“Å‹›Î›z×}T6휞ž.Ÿþ¹>|Øë´sª.“••Ua5twíµ×šóÃÚ¥sãÆ“ûpN×3VÑÉ”í¬¥K—šÇp¿h .ˆRnÒ¤I¥Ëù áê0y-Z´-[¶˜ÛsçÎõÛIØûd™³§'•o¸áùÚ•Ø 3Œ]¬„„uÈ?ﻳëݽ{w)ѱEL€XçilÁ„„=–ûöýøãÍ ÿû¿ÿË uk[¦ö…0éèÒge…r‚hhaCuµã(à®[7B‘FƒÀú~ÎÌ,Ÿ·u«H|¼HzzÝ­W0!añÎ΀IDATKGD2dˆÇ2z®Q£FrÓM7¹:cjHP›9èÏêÔ¸qcîuwèÐ!éß¿¿œrÊ)fL×ý“p~~¾´lÙÒÌÓs¯úï™gž)/¿ü²ÏuÔ°ýœ¾¦µk×z¬ƒ“õŒU„„ÙÞÁÒÏ€¤¤$:䀰AH J9 O™2Åãİ÷¤·_|ñE×2vHX;UØ,ëÒ¥‹9‘lw¥ÕPðàÁƒ=Nl;ÆÎ{ý¢‘«¥]„uxBÃÐÙõÞ¹s§kžvõðÞVÁ„„=–½Œv Ñ/zè!ÞT¨{ù£Eæ´ö}!a*õç?[!á¶m5hB=D êç ùà­gOB‘¨C‘aÃ<çM˜`½Ïsr¢ó5ïÝ»WvìØ04¨ççt¶@ô\ìÊ•+Mgaí(\ëk´ÎZjÂövJ»‰8p€b€°AH J9 ïÞ½ÛtŸÐáêôÄ•v–mÕª•tíÚUòòòdáÂ…f¨< Œ¾ùæ›®Ÿ ÖŸÑγ 6”~ýúÉ…^(<òˆY^»r(§ÃØy¯Ÿv$Ž6zò_kÓ·o_¿Ëøª÷Ï?ÿ\­p Ç²—Ñý@·åæÍ›yS¡î­"²¨‹ïû4$¼¢!axç+|£ÓosvgK{Ò L/½ôRéÝ»·dgg‡ä9ñcbAõÙµnûBÂTêê«­ Ýe—¶"þî»ï<æë±Ùí·ßnîËÊÊŠú:ÌŸo}vi€p§g¤‘F¡ûëmP\,Ò­›HëÖzá;µBEzÚSÿŽÕiË‘%KDô”ê¦MLLLL§£GùÜ€0jܶmÛdæÌ™RTTdÂÆ‹/–äädÓ)÷×_¥@>|þùç¦S³ÖiåÊ•²uëVê]±b…¹ßiHXGç1ÂÔ½OŸ>Ò©S§j…„•>–v(¾å–[Ì6êļ$‘ ~Æ‘u à[Düyýu+h§Óÿýõ¿°úþûï%>>^.¿ürù«V­’k®¹F5j$W\q…,Ñô”½˜t̘1Ò­[7³Ì%—\"¹¹¹®û§L™"W^y¥kRï7zlzõÕW›Q~ô_}]æuýPñú¹Ÿ~úIF-—^z©Y·É“'W»ú^ƒæ!áÈ”—gý-RTäû~ýøÑŽÂ$Ö‹ýô"Ý/ôº—²_Q2dˆHjªµèàk‰‰åÃ21113iP€XGH5nÖ¬YÒ°aCóE¦~á¨ÿ¶oß^Ö¬YCqX¸p¡œsÎ9¦^:µlÙÒ„­•Ó°vc0`€4hÐÀLiii²aóܤI“?–¯eô‹]{8[ NÌHÙ<Î÷}î!áCÔ ?JKEš5³¾,4ˆzá.PHXýñ”zõꕽ·KÍíµk×Êi§&÷Þ{¯Ì;Wn»í6sÁ§^Ìk›7ožœzê©2aÂÉÉÉ‘W^yE6¹¥'¼¿øâ ©_¿¾¤¦¦š HõØPÀºÌÈ‘#+üœ>·žxî¹ç$%%Å<מ={ªU‡Ñ£­à-=]äC¤),´þ)û ø7KF†u€nã­[©[49xPdÑ"‘GéÒÅÚκOh89ÙÚæzŸîe¿®dêT‘åË­IÃÄtfbb¢“0Î@HhXµ  ÀtÅݵk—¹ gvîÜ)ûtܼjØ¿¿:tˆb"z”´À;ü ¥¬!áÕÿNHî¸Ã ahóÑ~ma­²ðÀ=î¿á†ä‚ .pݯDž~â‰'\óî¿ÿ~3Ò?Þ!áë®»Î9âqÌ©Ë<õÔS~®{÷îR¢-!Ë|ùå—fÞÛo¿]­:Œa…Èo ìÙ“:DÜ!~©H|¼Èøñ•/«Ðnݬ©†ÂW®¤~‘J;DgfŠôécmݦúþ5Êê­áq50 üiðWÀE~Ú iHxí`BÂ80{vùЫ³fQ œUÖ®½z¿ŽsâÄ 3¢Œ†z§OŸîšZ·n-·Ür‹ëgÞ{ï=ó37ß|³yÆ›{HXSÂ=zôðXæøñã~; ë…¯¶âââ #àTÅÀ"½z±? "B‘«];kû9¥]gûõ³Â¥ ÖÿÇŽµÂ¥$¦£løLº t[èÿµó¯n'}ŸÚÛ.-ÍÚnz„„áoïJ+ü‹ŸñE5$œû!aÐî}ge…„‡§@8«,$|Í5×HóæÍÍÿ‹ŠŠÌ²M›6•‹/¾ØcêÛ·¯ÇϽñÆÒ°aC9õÔSå±Ç“Ç»îs ïÞ½Ûü¸×‡E °ÝXix¹&BÂÖ 0àmôh«Ë,"OïÞ"C†ÿsŠLj}&¤¤ˆ$&–_üÄžSR’ÕZ·›n?µ‹0 üí̶À¥~¾M"$ @Pt˜g mtîÌÐÎ@8 Þ±c‡ÄÅÅÉ­·ÞjnkpW»þÞ~ûíŽ{Ïž=2tèP9å”Sä‘GqÍwûþúë¯&H|à 7xüliii­†„5¨ÃÑÞ&OiÓ†:D"ýø¨©ázÔöít·NÂÚݹ¤„}¨k„„Âɉ£"?obªÉ©x£HÑ‘_¶XÁA{:YÊþD’-ãE¦Çû¿a2!a‚0iRyw·Y³¨®ü…„;&ýúõ3!áMšÈúM=¤~ýúòã?:~Ž^½zIÛ¶m]·½Ã¾]ºt‘Æ›P±Ò0òàÁƒk5$¬!Ð ØP!áÈ•™)Òº5u€P#$ N4Ôª7¦Ú>H™ÛFdQ‘Oz‰äÉ)òÏ "E9p°a”õ>õGï#$ €cÚÕ­aC+$<|8õ•ž6mš,_¾\æÏŸo¸:u’ Èøñã=–_³féü›’’"3fÌââbùì³ÏdæÌ™®ež{î9™ø ™gßwÏ=÷”}”ø û.]ºTî¼óN¹é¦›äÕW_5]…u]6ÐÏÕDH¸¨Èú¬*{Y@sæˆ$$P‡H´u«õÞÎË£J„„€@N–ŠØ,R8Gä«VxXÃDÔñêt‘m™VÇa %k YƒÉ´ý¶ïd¿Bð>îf½ßü!$ @Ð&M²Â9:ÍšE=€h³wï^Ù±c‡œœz?]ºÐiþŽlcÇÒ)BoO„=ËEf$ˆ¬èCGa”+˜j……Çõ~BÂT‰vèÔ€UçÎ"……Ô@ø(-;,LH°‚„€/z±‹þËÍ¥‘hþ|kû•p­8„ ßž/{WZAáuè,›Æˆ|xBÂTÙk¯YfÍ¢ÂG~¾õÙ´r%µ€º,_N"QQ‘µýô½Ñq3%v´sì´8ë_`ý£" :^FÃÁk"$ @h÷¾&M¬ÎðáÔ¨I?ÿ,²d‰ÈÆ"›613­^-Ò«—H‹VGaÀB‘->Þê( Ñq3%–´“°v>̘×1oe?‘e©—1!á!„„¨¢¾}­UçÎ"…üùT[n®HjÙŸ° ”wêfªÚtÎ9ìO,.N$'‡:Dªäd‘±c©„ ßžO¥Eæ%‰|~7µˆuóÛ‰|5"ð2Î{Š0UôÉ'å¼iÓ¨PvÓÐbïÞÖûé£è$\ÕNÂõêYAk 6mD&O¦‘jà@‘»9õ!÷§Â×÷ó­Ðg-bšv”Þ<.ð2„„¨¶ÄD+$ü׿R  ªÆ³ÞGãÇS‹špé¥V=‹‹©ü#$Ù22Dºu£*|{ ¼­è#² ƒÈÉRj‹Ž[ÁßÙ—#$ @µ¥¥Ya¼ÎE¶n¥@°rsEâã­ 0jFÿþÖçÒŠÔþµk'2auˆTS§Šüöî>¦;ÿÿxD—Q·,JXuiPý¹…ÅõS–ªR—îÚmºõëV[¿m«úèOè–_mW[µú¯µªu­Vk‹J·©ÆJ ÅR!QAJЏFòùçó==Ó™d&™Ì%y=ó9ó=—ùÌÉÈœyÏçÔ¯O ´ðé)€À–™,²$D$í#jQ^Ÿ þflõ=ø´›ðÚöt.N¬±‚¿Ù=¹”FH€Ò¨‘Ôùýï©Póç[]„ÓÓ©EIúüsë5é¨<#$Ü.^´~Ϩ”>=øN%XáÏ3‰Ô¢¼Ù?C䃈ÂÇd¥XÇÇ7/‰|I͸¿ùÔiÓF$9™zÞÐ.ÂM›Š<û,µ(iiiÖkRt4µ€gˆ¼ðufõë‹ÌžM_ÉÉÉ‘C‡É–-[äôéÓ>ßþŠ+¤ÿþrþüùrWw}Ü ,à >EH@pø¬‹Èæ±Ô¡¼Ù1^dCLácìð·³DV7¥fÜ‚o¾±y:½óõ¼¡]„#"D22¨EIÓ¶¾Õ«G-àÙ¸qÖ„à“÷¶?6–:¾pðàAiß¾}Þÿ¯·IÅŠÍ¿µjÕòiXøÕW_5Ûýá‡ü^_îË7̶^à›-ÀÇ ÿž'²<\äZ&µ(O¾d… CH€e…òF²z ת•È3ÏP‡Ò¢¯GááÔž~ãóÞöwéB_èØ±£Ô¯__¾üò˼¿õ³åÛo¿•©S§Ê¹sç|¶Ž—'žxB²²²J}[„„€¿4¼²–È‘ùÔ¢}ºÜu×]r÷ÝwËÂ… ]–Ù·oŸ 4H6l(Õ«W—víÚ™îÅÊ khÙÓ:ìí¤§§Kll¬Ô­[W¶nÝê¸Ïž=rß}÷I:u¤Q£F2räH9qâDå‹ÚO{\f¦uõº1cƘÛî¦Ó§O;–Û¼y³©cXX˜DGGˆ  ÔsãÆÒµkW©Q£†»iÓ&BÂÀ/8­ x¤}d…A¯fP‹òà\’õ|Ÿ/âSÂS Ö¸¤ç PBþó?­°Î³ÏR À“+WDjÕ™7Z”¦Úµ­×£ôtj÷ââDzõ¢ÁìâEë÷|åJj”¶?þñ&¨Ú¹sg9zô¨Ë}ÿûßÍ}ñññ.ó,={ö4?ÛßÑ£GKëÖ­eêÔ©#+V4!bµ{÷n©Zµª ë:?ýôS™1c†ìÚµËëuØcî¿ÿ~³í™3gJjjªËú  k×®•U«V™ ®‰5xìí6œÇÙ]?üðCyçwÓk¯½&UªT‘;î¸C.\¸`ÆìرÃÌÓu¯^½Z† "!!!räÈÇzõ±ê>>øàƒ&@üöÛoK³fÍ ¿ $ xd_YYKäÀljQ[j…o\)|œþúiB”wßµÂ:;Ф¥QÀ ³…†ŠüÔx¥¤^=ëõH»œîLŸ.ÃE‡‚^Ó¦VWh¥ëÚµkò›ßüÆ„U«U«f·7nÜ0÷?ÞÌÓûmßÿ½TªTIÞ{ï=sÛÕvïÞ]®\±ÎÙi Vçi¨VõéÓÇÜÞ²e‹Û}ðfö˜Q£FX¾_¿~Ò A—nȺŸ•+W–‰'z½ çqvHØYnn® :Ô‚µ °óö›4i⸕•eBÂÏ=÷œcž‡µÃ±][¥fÝÖ¤I“8€O\‡‹làÓ¿raoœÈ'QEstžDH€¢Ÿ£×¨aó>ù„zî @÷R_hÓÆz-JH poþ|‘¨(êì†4ˆ:¾¢p###Mhõ¾ûîsiÇŒ#ááá&øªþüç?KÍš5åòåËæ¶ª=~ü¸c]™™™fÞ+¯¼"999¦ƒ®võÕŸÝ)jÎcÒó]J@ƒ»¡¡¡2nܸëÕîÈõ[Ž^nÃyœ»ð”)SÌ}óõ?šŸØ¯wïÞ²lÙ2ǤµÔŽË¶Ûo¿½À>j`˜NÂÀ  Ä%''›hö¥½Ø?”¨´¬@èUž¿2oãP‘/½ø„Ð k¨˜0%føp+˜÷ßÿM-€ü4G£]„çÍ£¥­{wëµ(ߕχ… ­.´nqq<€¯i0¶ÿþ.Ýu7lØ`n/^¼Ør›7ož÷~àç7îBµ?þø£#|«¡^ýyذa·[Ô:ø`e  $ €bÙ¶m›ÔªUËãý‹-’Æ›“]zB®C‡òé§ŸÊž={dâĉæ’_ú-û‡zHÜ\+T—×eôù±±±æ²d[·n5÷mܸQºví*5jÔ0ÿnÞ¼ÙŒ}óÍ7]Ö¡ó»uëfNäEGG›îEí_yVØ%ÕÖºN";Ÿ¤þeùùξhÌ/z,!aJMD„ØY¶ŒZΞ|’Ž—¾2r¤õ:ôÿþµ€{v¸Á-=Ýz?úˆZ¾¤ÁÙjժɯýkǼɓ'KÅŠMHVÏŸ;ó&|Û£Gs{ïÞ½n·y+!aÕ¾}{i׮˼ .HõêÕe̘1^oÃÝ8íܤIiÖ¬™Çó§úø*W®,§OŸ.ä}T„üâ¿p™§ŸoþÀ[fKQ!a ;Öœìzùå—M×ÞÇË[o½e.÷õöÛo˪U«¤M›6Nä)û¤œv.èÙ³§Ìœ9SRSSeË–-æÄÛ€dýúõ²páB¹ë®» œTÛ±c‡ù&ÿèÑ£eõêÕ2dÈ qt ö´åY||¼<ñÄ’••<;<]䃑Üì ¯¿¯C»Aó|g&[ÁßsIE=¶”0¥dÔ(+°+’M=[§N"ãÇS_ЋéëÐÓOS ¸§ßA'$\6´j%2}:uJ‹vÈÕÆ›6m’K—.IJJŠ<öØcæÜäÒ¥Kã8pà€×ÛÈ?.77×|&¡Š—,YbBÎÎÓåË—Í2Û·o7!jí\¼|ùrÉÌÌ”¯¾úÊ\1ΦAk]¯~>¡ŸgL›6Mî¹ç3oÒ¤IŒÀ§xË €b)*$¬4x«'»ì`®;v7Æ>)7JÓNz÷îm¿ö‰8uöìÙ'Õô2húM›!õäàsÏ=W¬ýC€³¤gwýC ÊNξðÝB‘e¡VGaoÆÚ!áµí©%hóf+x¥—qß·zêbÞŸ¨yo3eÝ:já /¾h½ýþ÷ÔîÙ!a¾ÌüÆ0€:¥%99YêׯoÎEjÈUÿ­Y³¦üå/)0¶K—.¦Ã°`y¾]»v­4lØÐ6ÖíÚ!Ú[ «÷Þ{OêÔ©ãXTT”|ñÅÅÞOçqúÙƒ½>w“6(ùùÿžiÑ¢…ã>½ú¡®mú¹„^MQÃÒz¿vd>zô(„€_@¡¾ÿþ{ùûßÿî˜ôðzrÐyžvpVX7;;[ÒÒÒdöìÙfŒvvfŸ”K×k þ$''Ç„õ2^ÎnܸárRMÇU­ZÕŠ—-[æ˜"##Mcoö¯¬ÑË«é Hw“}9´E‹™Ûö _û¶^Zm„ Ò¸qc¼ÖÎ ÚM!`h'áog•øj‹óøµ3õĉ¥sçÎR»vmsâWOç·oß>4h91®—½Ó.Ú_~ù¥Ë1ï|Âúù矗ÿüÏÿt<'ÞnGiGŽ®]»šÓúïæÍ›ÍãyóÍ7 }¾Ï;'Ó§O7ºï¾ûnÓ­»8ë-q;Æ‹|ÚÖ»±vHx[¬Èç½xá „5mj…¯þñj¨Å‹­ß‰|™”’Y³¬z;]p‘”d#))Ô"ØÍŸ/Aà(mzR;üjgaí(ìNtt´9·|«Ž?.¥öXŽ;fÎãú‹n[÷ÁÓys=ëüY€?@¡´s°ž´'ýv¼^nËyž^&Ë™»î©S§ä‘G‘ÐÐP”Ô¤ŽÑ ¡3wI½\˜Î{J¯1ê$HXO¶ém Q6oÞÜe6lX¡ûWV}øá‡æñÚÓk¯½f×wÜq‡\¸pÁmÍíÛz)´>}úÈÔ©SM'†ü]ü.q¸È—ƒJ|µÅyüz¹=  kgìU«VI›6m̱íl÷îÝ&¼®Ç½†ê?ýôS™1c†ìÚµËmýçÌ™cº_ÿë_ÿ*Öv”†î+W®, 0—±Ó ¯†~O<=ߣG–Ö­[›Ç«—ÊÓn"ú{ëízK܆‘­ã¼«!a ëxB”8ý3\ÃW#GŠ\¹B=€ØX‘¶m©ƒ¯,Yb½uîL-àž†ƒ — XÏer2µüéóÏ?7çý<5)@p!$ €bÑÐp­Zµ ã.„Û±cG©W¯ž:tÈÜ^½zu¡„CÂׯ_7Å~ýú¹ŒÕ®ÄÎ!E kö(öþ•ÚÍ`èС¦F›6mòXsûö´iÓ\j}çwJDDDàt>4GdeÞ±˜[²íenåñkˆ7ÿ±¥AcwǺ»úöÙg&„ÿ·¿ý­Ð}t·¥]´õùÕKãÙΞ=kÆNš4©Ðç»{÷îrå§Ô˜užþ®x»Þu#o?–‡‹ü{žwã5$¼º)!aJÉÁƒ"!!"QQ"ë×S S'+( ßÐ|’†[·¦pÏ kÀÁM;ëiÇyó¨àO4Mêªr¸i„„P,Þ„„-Zdƒ;vì0·SSS taµCÂÎaUå.$¬:uê$5jÔpt6Õ@ðã?^ “i=LÇÓÓ§O{½åÅ”)SÌ㞯×n,¤æžžƒQ£F™ùÚÙ9 \8,ò~Þ[š³;Ktµ7óø5Dœ––&³gÏv çää˜.ÂuëÖ5?¶½¯¾úJjÖ¬)üã=î›§íØÛÒ ¯þ8ËßqÛÓó­—þ³éeðìßYo×[¢2“­çö\’wã Pꢣ­ÖܹÔåÛÅ‹Vh>ßÛ*”¢­[­×Ÿ»î¢ðü{©Ç /ˆáÃù"àorþüy PF@±xÖ¥vþ5'µ;iƒ äÞ{¤$Y»v­DGG›€áÜ|)OM]F;¬V«VM†nºº>ýôÓf¬†_mÛ·o7ÛŽ‰‰‘åË—›°£†/W¬Xáqÿ4xYÖ­\¹R*T¨ &L(pŸ·!a Œêü}ûöÎû(R$yz‰®²8_Cë<òˆ„††JÆ ¥]»vfÌæÍ›Íýéééæö°aÊܞþ~è1~ÀM룢¶c×:ï)½¸oCÂÎ÷Çt„„½]o‰:2_äƒï»Dë1@H€R¥YÐÖˆ (¿­ß…;©…¯Ø]bëÖ¥ðŒpÙ1c†Hd¤ÕUPï™)ŠÃ›°zþùçMç_ ®ZµJÞ}÷]ÖÛ­Zµ2ëÑ ¯W—,YâXÎS@S}þùç2bÄs¹³×_Ý'u¬.ã,!!AZ´haîÓI÷ã±Ç+tÿʲo¾ùF¤OŸ>nÑÞ†„'OžlæT …þ«o‰®²8¿cÇŽR¯^=9tè¹mwȶ;üjV»ð6mÚ´ÈííܹSêׯ/Í›7—3gθŒ)j;êúõë&üÞ¯_?—eõ9¿•°·ë-Q‰Ã­É[{ã PÊÒÓE*U‰ˆùì3êòkΑÐPÂk¾d‡„kÖ¤ðL‘uë¨CY”d=ŸIIÔB¿¸­Wa;räH¹hr Mú÷ïSçoeY Ì¿g¦(-—/_–””ÉÉÉ1·50™ššê¸_çëý¹¹¹7µ~ kHñÃ?t{¿-;æqýù÷¯,Ò4iÒDš5kæ6x­<…FóU{õê%-[¶ ¬xl©È²Ð¼ƒëJ‰­ÒÛǯDz¤µÙá]ýÇÖ£G3oïÞ½EÖÿ믿–ððpùÿø¹téR±¶£:uêdÂï ·çüñ[ {»Þ£Ýƒµ‹ð¡9Þ/CHŸÐï ihgútjòkìXýû˜:ø’v/×מªU©<«__dáBêPVh'áÙ³}»MûJJÚXÀ¦W/³›èT5ï…è®»î’Aƒ™«våg¿zõªcžž—|à¤qãÆy¯gE_ŽAÏS깚ڵk›uéU§ìõÊjG-3ϳ· nfÙâ¬+˜dfŠh DôTãþýLåurz™(!a혡!ÒÓÓM@qýúõÒ¾}{Ó¡U;¢ ý¢gÏžæCíÖ¬!UçICÒÊÓIôîݻˮ]»LXuÞ¼y¦ëó‚ ëAf&‹¼Ÿ÷¶æTB‰­ÒÛǯ\´;ö½÷Þ+III²víZ‰ŽŽ6ËÎ;×1Nƒ¼º¬¯‰‰‰røða³ž7º­¿Û!!!2xð`s¬{»¥÷éó]­Z5>|¸ùðèé§Ÿ6cõƒªÂžïÂBÂÞ¬·ÄdlµžÓ¬ï—!$ €OäýId‚z}ûJÞß4ÔåSÛ¶"ãÇS_Ó×žÛøD …Ð øÌŸOÊŠqyoï‡÷í6 ¿ÿþûæ gŸ|ò‰¼ñÆòË_þÒÌ×/P;7'pþóŸÿlÂÅz)oh7\]Ç3Ï<#4¡aýÒ¶nûÑG Úprr²©sP:>>^žxâ ÉÊÊ2·‹ì-jÙü÷»Û~ ÓÆÑyA^zIdèP‘V­¬+Øÿ21iPÀëó*”Á`ÕªU& ¨'{ÃÂÂÌ¿­[·–íÛ·S4ìÜí$ÿ´cÇ3ÎShT?ô¨Y³¦ù944T¦j˸"E’KnßŠóøµ›µxuL«V­dÛ¶mcBÁ̶iȶaÆŽÚׯ_ß„ÞÝÕ_-\¸ÐñaSq¶£ôC«#FÈÀåõ×_7$érºÂžïÂBÂÞ¬·Ä$½ òI”ÕQØ[þ¬ !aJÙ•+"5jˆ„„è• ¨ÊŸ‹­ãŸ ¢ïÙ˜ôtj÷4$GÊ í ­H}Ýõ•ÂBÂùƒ¹ú…rí¬÷-]º´Àx;$¬_¯X±¢×_º_¶l™Yþ%M†–1ï¼óŽylÚ“[éþ[Ô²Þl?¬[g…‚kÕ²þæèÒE$6Öú²Þš5"IItf¢“0¸‰ó*”ÁB;s¤¤¤˜n¬©©©.:PrœOªk'[=y~íÚµÀÝáã­€¨Ÿ¿ŽÑãѦ^ô8uw|?~ü¦;–g;Î4`¬çÃ?,Ѳ—ÖzåÓ¶"_?S¼e4$¬á` oÊ/1¥hÄ+¨÷Ì3V‡3 <Ñ&zü{Ù %¨bE«öyo·´Ë7!á²COh@Ò)[êŠV'Nœ0_*¿ûî» Œ×°.S»vm_Œöózª5j˜/o{cÏž=rß}÷I:u¤Q£F2räH³_¶E‹I‡äìÙ³2yòdiÖ¬YÞïJ[Ç×õÊYíÚµ“¨¨(yíµ×\Öm/{æÌ™0a‚4nÜXš4i’÷{Wà\”îÇĉ¥sçÎæ1?ôÐC’à².]Þnú ëýôÓOÛÈÌÌ4ãìsrú\µMOËÚ!açûÝmÿþûï—Þ½{›ókÎ4ØÝ±cGóåx_Òp§N?_µCý´4^ P2 pq+];üâÈ|‘÷óÞÚ\J+Ÿß¹GŽ˜zÒÓÓM¨X?ØÐ˜š6m*ׯ_¸õpþ€È’‘ôøâ-·-öç°N Ô|ñ…^Ð< Á”7ÚÅOCkÚU¾UµªõÚ“œL-à^¯¼·„ÅÈb"  2|¸ï¶WܰúÕ¯~%•*U’쟾9e?wîœDGGK×®]½þ⽆`5tܧO¯ÆïÞ½;ïµ±j^˜+XéUØt›uëÖu|AÝ>Ç¥W†êÑ£‡¹j–†š«W¯.Ó¦M“–-[ÊÌ™3ÍU£òwÙµ—2dˆÙ§©S§š0qþ+O©·ÞzK,o¿ý¶Ù6mÚ˜ð±MCÄcÇŽ5˾üò˦«ïáÇ=^íÊ›mu¥,çÛëÓÛññ®ç ôqôìÙÓgÇ>Uzœëÿqƒ‰8Àï>J!a.‚.${%Ý –þ{^ù|üNôƒ˜jÕª™ý stHÙ¾}{@®·€äé"Dˆä³-¡ƒ à3†Ï>£(_ž|ÒêV ßË{;b^wœS.4$<Ž·ƒeÊÊ•"¡¡"?5Š-u7—wÐ9ßo>|¸9âÜÕ·(zõ(]öw¿ûWãûõë' 4pùòö÷ß/•+W6]}•}Žëá‡vtÌ]²d‰™§_þÖ0³ú÷¿ÿmæ½þúëŽuÙËj˜Ø¦aè;ï¼S""" ½²•†…ó‡Ž5˜ë)ˆœ?ØëÍ6‹v·ýóçÏ›çè7¿ùKý4ôýÞ{ïùä˜KL‰Œ”¼Çfï@i!$ PÖå\ùq?SIN™{EÒ7ˆ\8$’•bMT-#.]ºd.%XØÉþ€óÅ‘/•ßÇïD÷;%%EÍL%õ8Jk½?o [ä“(‘¯Ÿ)þ²vHXB”: JjX/6VƒÔåG—."cÇR #$ŒÂ jM(;ôo PΟï›íÝLHxôèÑæþüÑeü‹/¾èèZë­ãÇ{¶»s“Œïܹ³tìØÑüleõ<—í‹/¾0óþùÏ:æ]¸p¡@8×Ó—èGeæk½ >gÙ’––&³gÏ6c¶lÙⸯ8!ao¶y«!a5fÌ —¬¬,sûÏþ³Ô¬YS._¾\êÇ›†‚ó6mºsu”6BÂe†Z߿ɗÓÊZ"«›Šlˆù9´¸†È±¥"ç’DnpmÚ§µÕÚ_Í Á*e±ÕZC÷Åe‡„ín Ti¶¢R%‘V­D’’¨Ê óÌšEüU{ ¯[G-àžf%µ›0Ê–gž‰‰ñͶn&$Ü­[7©[·nñW®\1Ý{+T¨ Ë—/÷jûÚé·J•*ò«_ýªÈ±éééf;“&M*pßàÁƒ¥N:ægw¡[;$¼víZǼ℄_yå3ß¾}Žy§N’GyÄ—6l(íÚµ3c6oÞìs+!awÛ,‰ð† ̼ŋ›àuóæÍå¿ÿû¿KýX[ºÔú/ÜÀW ”utöM'áÌd‘S Ö¤ÕïŠì³º¢nzXdm{‘"¬ «!õ¶ÞwbȵLŽÓ[¥]hµ¾ßò‰}Ð>¬ß|“mÙ às;[=_u÷üíÀ똧þ —b¯PAdáBj÷ —M[·Z¯½‰‰¥¿­â†„;&!!!òë_ÿºÀø«W¯šn´÷Þ{¯ ÎnÕâ…¶mÛJXX˜ ÝæúõëR©R%yüñÇ Ü#­[·6?—FHxòäÉfþùóçó´sq½zõäСCæöêÕ«K´“°»m–DHXƒÙ‘‘‘Ò¯_?G]¾þúëR=ÎôXÖ€°^™ƒ€0|…0àKWÒEN®³Äÿêk†58¬?™O`øVhMWÕɾH-‚Íîg­Ü7Û š0>7{¶Ú1B$ƒ‹9 HH°ŽyŽwÿhÚÔê`NHž<û¬,©CYÔ¥‹Èر¥¿â„„¯]»&Ç7!áýû÷¯!a{5’;î¸CRRRŠÜ‡wß}×,ÿè£9¶}ûö¦c¯3 ûV¯^]ÆŒcn—DHøÌ™3.ÛèÕ«—´lÙÒq;55ÕŒÓn¿6;$¼iÓ&ǼE‹™y;vì(°üÁÞ¢¶Yزžn»Û¾ÒrÅŠ¥OŸ>Ò¡C‡R=ÆÒÒ¬/½ä:„àS„„Ò@«††·ÅZ!Ée¡VÐ1yº5?sÕµX»—ÅÌ%9ÏÛÆG‘"ºY…Ïî¤ëu0ßL¶‚òÚûfi0xãPBÂøÐż?c«W·:¡}öõ@Ù§]³ë×§þrç"+Z_P܉‹³Âä({V® ñ"c{KNœ8aB¤/¾ø¢cžú]²d‰$$$Èš5kLøT;çV­ZUæÌ™ã²Žü!aµk×.©V­š´iÓÆ¥®;ÚÙV;ë:† "‰‰‰òã?šî·ºzßÞ½{ÍØ?þØŒ‹Ë;øuŒ’GŽi‚Ë´ý½”LH¸{÷îæ1\ºtIæÍ›'*T 8ÆeggKƒ L×䤤$³Þèèh³ìܹsãtÿ4Œkê Ëy öµMw­¨Ûmûs—a&¦²<-©duѾ ¶» Àg|Ðê¬ú·¿Q ”}zYpº”úO§NV'a ‚î.Ûôõ76¶t·¡W оýöÛŽyvèמBCCMß±cǺtÎ?Þ9$¬V¬Xa‚®÷ÝwŸ#œêÉõë×Íz l[CÀN-íß{ï=©S§ŽcLTT” ÛJ"$üÆoHÍš5û0}úôû¬5(¬cZµj%Û¶m3f}Ìn¶i—æ5j˜q«V­rì­R¥ŠY_QÛ,nHØÝöm]ºt1AîÌÌÒ»ÂÛ /X_®+í°;à!a ]üŽNÂÅé$üq«“ð¿ÐI8Xއ+§ný÷äËA„„ðƒüà wËûó«3@@0Àº<8ü#&Æ ¿ôµ€{3fÐí»,[·Îê&œ”T²ëMMM•£GšI¸•+W–ÇÄcÎÍÍ5û¥¡Þ}ûö™®ºž;vLΜ9S¢ÛwÙÞ¸qÃt3¾víšÇñ:FëiÓ®È)))æq8»|ù²™¯÷ç—••åxzQÛ¼njSjÏ¥·züΟÏï2üƒ0€²aoœÈªú"Ù\³¯Ü±ÃÁ„„ð©+WDjÕ²‚Ÿ}F=P¶µo/⦑!|DCÂ+–~'Q¯… ­ÿPvõík½ш·X^ýuGÞÛo¿Ý¥‹pyç®oYôù矛ǙP*ë×ãU»áT²Ç.P¼]ür³E>ˆùvµ(œC»Ÿ¥øÐƒZ¡¬ÿùj²M/¾r%uð—=¬×š±c©Ü[¼˜pY§ÝXCCKö €ÕN½›6m’L.‹à¢¼„„(QQQ:—”¸8ëoˆiP €rŠ·Ë‚ß±¥"ïç½½¹šA-Ê# ýŒõ¯v”>£—ÿÖPVçÎ"ÉÉÔeSZšuœ8@-ü¥ë90€ZÀ=mªÇ9ϲmöl‘‘5k¨Ei»té’œ9s¦Ô³"##CΟ?_*붃ísæp<À¿ ~_ ùru(¯ìp0!aü¢Y3+˜õP ”M;wZÇxßIô›Ñ£­ç gOjÂOSR¨EY7~¼¼$(Œ@vñ¢H«V"}ûŠdgSø!aÁíJºÈ’‘Ï£åÕ†BÂøÑŸþd³y„ʦŋE""¨ƒ?ýö·ÖëL§NÔîi8˜pù k nuŽ‹ão $R¿¾u5”¼œœéß¿¿,X° Ðq©©©2eÊiݺµtîÜY6nÜxSÛ[±b…Ùž7]§‹3ÀW nG拼Ÿ÷ÖægÝË­ÕM àGÚ]µJ+D¹oõ@Ùó "]ºP²CÂMšP ¸—žn#[·R‹òbÆ +(i……·oÙ°Adï^‘ýû™˜|;íÞm}©hÅ ‘¨(ëïbípˆþð‡?ä½^Þ&—/_.p_Ÿ>}ä׿þuÀÿþ߸qÃ<†ô´Ÿ¼úê«fÞ?üà˜7lØ0騱£¬_¿^–.]š÷\íw;®(ÅYæfÖPÚ n›ÇЬ£T¹FH¿ëßß gýå/ÔevÔ þóÒKÖkŒ†OôIH å‰vŽ~öY‘¦M­çŸ‰)¦–-­àp *«!áøøxyâ‰'$++Ëܾzõª„‡‡ËÌ™3]–Í?΄„@п_¦‚ÚG‘"ÉÓ©CyFH¿[µÊ Eܿȕ+Ôe‹vÖügÖ,ë5¦^=jÏôY¹’:”WÇÓI˜)0: khNÂ¥Ë]H8¿}ûö™1 .¼åíAÿ~™Zç’DÞÏ{[sb µ(Ïìðg] à'ÙÙ"Õ«‹„†ÒÅe}æÏ§þd‡„+U¢ð,<œßUþwñ¢u‚úõEÒÓoÿ¼ /Z´H:tè çΓéÓ§Ë]wÝ%wß}wЭ=îìÙ³2yòdiÖ¬™´mÛVVhb:ϼyó¤]»v%¯½öšË²{öì‘ûî»OêÔ©#5’‘#Gʉ' ìׯ¥k×®R£F éÖ­›lÚ´©@HØÞÌÌLùä“OÌþê˜&Mš˜ùï¼óNqö>Lœ8Q:wî,µk×–‡z(ïýŒë;ø{òäI™0a‚4nÜØ¬7..NrssÝŽu oÞ¼ÙìwXX˜DGGËýF€¼ŽÌY"r-“Z”gvHø“(BÂøÑˆVˆŽ«(K22¬ãú£¨…?ýõ¯?_ÆðD»wÆñ–@РpT”H߾֗鉷!a;ì:zôhiݺµL:Ubbb¤bÅŠrêÔ)Ç2ö¸yozôè!o¼ñ† W¯^]¦M›&-[¶”™3gÊÀ͸#GŽ˜åvïÞ-U«V•ÈÚµkeÕªU&@[·nݼ¿¿2ëßµk—÷àƒšpíÛo¿m‚ÈùCÂÎáÜC‡™¯Þ7nœ ýõׯ©·ÞzKlÖ«ûЦMjvf/3dÈS#­…†žuÞ+¯¼âv¬½þ;vH•*ULW¯^mÖ⨀/p:@ðÚ:Näó^Ô¡¼[U_dÿŒŸÃÂÀ/’’¬ßÝwf×4àf8`×ÉÉÔŸ´i¡´°!aö·±^ecΜÀگↄ»wï.W®\1ó4°«ó쮼Îã~øaÉÉÉ1ó–,YbæµoßÞt"Vÿþ÷¿Í¼×_ÝÜîׯŸ4hÐ@®_¿îX×÷ß/•+W6}mªÕ.Ã7nÜpÌÓ±®kÒ¤IöÃçîÛ·ÏÜ~÷Ýw]£»N¿Î4,ìfv^FC϶ì¼?Hî¼óN‰ˆˆpé&œýú8µë°-++Ë„„Ÿ{î9~I€Ï¼>ŠIžNÊ»÷óÞÚ~·0 M+Ä÷å—ÔeÚ5SÁÒ¥?‡„ÓÒ¨ÜëÔIdüxê pèÂÃëÿ®â†„?î¸?33³@÷\{Ü™3gó¾øâ 3ïŸÿü§cÞ… A[ Õ†††š.¿ùuîÜY:vìè¸}ûí·§áÂ: «â†„5ô›–÷DÍž=ÛÜ¿eË–"—5j”™òäI·c54­]{÷î-Ë–-sL‘‘‘¦{1€¯œ.¶Â¡g©EyGH€€¡Á4Ä÷ä“„*Q6hÛZµ¨ƒ¿%$üNI¡p¯W/7y3ðý{¸}{‘¡CgŸÆoB¬/^tó:Ú+o_­uŒýñÇ=†„ÇÙ!áµk×:æ9‡„ÓÓÓ t¶ix¶N:æg ë¸ü]wK2$|êÔ)yä‘GLh¹aÆҮ];sÿæÍ› }ŒJë óu[îÆÚ³víÚÒ¼ys—iذaü‚Ÿ!$ 8š#²²–H.é“r0C³Õ«‹DFŠCH@ðÉL¶‚¡gwR‹òîj†u,¤Ç[!aí( üîî»EBCEvï¦nQQ"sæPKI!$Œ¢½ô’H§NÔ@`Ò.Â"Ç‹dgûw_vîÜ)mÛ¶5aÖJ•*™ëÖ­+|ðcLi‡„Õ{ï½'uêÔ1óuŠÊûÃK—u–••%=ô äê˜:ÈÑ£GK¤“°Òû5(¬óZµj%Û¶m3^ÝÞ’%KËT©RÅŒ­Y³¦š÷fgúôéjë® y¼´hÑÂñ8kÔ¨!=ö¿Àg >‡æˆ¬¬%’›M-Ê»¬+$|*0äÍ7­0ß‹/R ·‘øxêàoÎ!ažx'Ò´)u¸EÂÃEž|ÒÿAáÜÜ\9~ü¸|ùå—¦sïµk×ü¶/ÇŽ“3gÎ:F;𦧧—Êöoܸ!©©©ŽÛ999y{¤˜) *Ûû§÷9rä¦ê¥ëÐÇj¯ÀW >ÿê+²q(u!aTf¦HÕª"Ý»‹”Ògù€OŽc ¥îä&~ç^¼˜zÀ½yó |K—ZAáØXÿ…P>ðRrr²L™2E222Ø?ÀŸ®eŠ, 9¾’ZÀ5$¼ª>!aÈÀV oÙ2jà¤á`=†5  ÿr /äO~x ÇFh(uøV®´‚ƒ‰¤¥Q”.BÂyŽ=*O=õT¡cÞyç¹í¶ÛÌ¥¤Q ï,+V¬þýûËùóçK}[zé3ÝÖ‚ ÊVO¬±B¡W ÄC~ ŸK²Âã„„ëÖY¾Q£D.^¤Îc8$ïOÌ+W¨…¿i€Š0Š¢]¦oã“OA"1Q$2R$" ¥…·Êy¶mÛ&µjÕòxÿ¢E‹¤qãÆ&„ÛºukéСƒ|úé§æ¾={öÈĉ¥sçÎR»vmy衇$!!¡ÀòºLzzºÄÆÆJݺueëÖ­Žû7nÜ(]»v•5j˜7oÞlÆ¿ù曎1:¯[·n&ÑÑѲaïö¯¼zõÕWM=~øá‡b-×¼ys0`€Ë¼ììl¹ýöÛ¥M›6Æ·oß^^x᯷ç͸—^zÉŒ9vìØ-ÕàÆf=ºeë6VdC /\°Ø!aû_B”V­Dê×ùæjà3gŽÞA`ÐðgåÊ"óçS ¸§§ãô8!Ø XèE‡·^»´«ðáÃÔ%0€Ö ðرcMàòå—_6]{ÿtÆî­·Þ’ÁƒËÛo¿-«V­2AÒvíÚ¹,oCï¿ÿ~éÙ³§Ìœ9SRSSÍ}[¶l‘Ê•+›`êúõëeáÂ…r×]w¹„;wìØ!UªT‘Ñ£GËêÕ«eÈ!âè\Øþ•WñññòÄOHVVV±–{ôÑG%<<܃m;wî4µ­X±¢KàÓ§OK… ä_ÿúWí%''Ë”)S$##Ãí±@Hø&åæ=/Dˆ|;‹.X ÐfͲBú'©ÓŸØ@Pˆ‹Ó/†R‡@¡¯%¡¡"Ó§S ¸§]9õ8II¡‚Ëš5":Y¯aÚ¿béR«‹>P HÑ!a¥Á[ \ÚÁ\O4,œœ ¥×ÙͧwïÞ&|ùòeǼ³gÏšñ“&M2·ûõë'Mš4qܯAT ?÷ÜsÅÞ?î½÷Þ3uÔcÂöÆoH¥J•Ì|çÎï¿ÿ¾é0|õêU¯B·èÄ+z¶°_S À.^”¼¿¥­ÐÃÎÔÁ%6Öêî‡À Á©jÕ¬ð6àŽ~_^:qVëÖY…õ£Š‘.]DÆ·ºèk8)IäÐ!=E½w¯ÈþýLåuró‘€çs*””Gßÿ½üýïwL“'O–jÕª¹Ì[°`Ë2E…pµólZZšÌž=ÛŒÓÁ6;šžžî²LNNŽ ÷èÑÃe¾s¸SÇT­ZÕ„‰—-[æ˜"##Mco÷¯,3fŒtèÐÁí¤Ý}Õ¢E‹ÌíÌÌL—ÛgΜ‘ &HãÆMð:..NrssëÖÏZGíöl1b„™tþ´iÓóÇg:@çßžþ¬ë×ñ­[·6ó?ýôS—cA; OŸ>Ýt¾ûî»Mi[þ°½îsçÎy\FmܸQºví*5jÔnݺɦM›<†„7oÞlÆ„……Itt´KøùÊ•+2pà@4h\»vÍe~ÿþýeÖ,?vñÝ+²!†1ü,3™0®O+´5w.µ@péÛ× æ 0háðpBÂðL;ëÿ7 Ô@pÓ+pÄÇ[Wã:T¤U++4¬¯qLL:iPÀ[„„@¹¤]b5iO-Z´0bçÝsÏ=.Ëx áž:uJyä •† J»víÌ8 aÚ}úÈÔ©S%**ÊÌ{å•W\Öçw:¿ªQ£F²téRiÖ¬™ Ï:Ï×mçßÞž={dìØ±æöË/¿löñðOmlìq£G6bݘ˜©X±¢9–Tþ°7Ëìڵ˄É|ðAøÕŽÖº¿îBÂ;vì0õÒõ­^½ÚÔD;S;;ñññR¡Byæ™gó´³uýúõMXÙ/²/Ь¬%rd>/bpzN $ @€ûç?­²{Lä§ïðA¡m[‘3¨C Ð€ðí·‹8½M\èwóõÿ Ö@Y¤KÓI˜‰N ¸ ˆ®¥×ð*„§nÇŽ¥^½zrHÏÎåÑÐ¥§NÂùCÂׯ_7AÏ~ýú¹Ì×®Äv¸SÃè|ànjÿÊ:í  µnm]6yÕ*jà)’ï.𣼷é¦Wõ¡ðLC‹Sï•)€w!áE‹™À¥vaµip4'Z;$\X`ÕY§N¤FŽŽ°ò|üñÇ]:ÀöèÑC*W®,§OŸ.Öþ•S¦L1{þ|×BÂùŸƒQ£F™ùÚÕÙöî»ïšyÛ·o—%K–È/~ñ 3Μ9f¾ÂgÏžmºêzÚ^Q!áãÇ;æeffºGžBÂ…-sûí·Ë¸|Ÿ”:w¤¶åä䘎ý{÷–eË–9¦ÈÈH À0€xÖ©vý•óçÏ›¥N 4{ï½W’’’díÚµm‚™sçÎu,[XHX—Ñ­ÕªU“áǛζO?ý´¯X¥aUÝvLLŒ,_¾ÜD¿úê+Y±bE¡ûWÖ­\¹Òtº0aBû¼ kÈVçïÛ·Ï1Ïîüÿ÷òÇ?þQ~øa3ßîÞ«ìÊX§O&‹vÞüÑ«°§eΜ9c~Îß Ø]H8==ÝÌ«]»¶4oÞÜe6lX:ÆÇÇ›ñÚiX—õ;š±•,ä{q^gWÒ À.^ ùÿ9p€z ðéå¼5ؾ•· COÛT©"Ò·/µ€gM›ŠLŸN°ïBÂêùçŸ7]54¹ê§ëäj×Y ë¼V­Z™ui˜WëڅVVŸþ¹éÒªÁÓ×_ÝtÖñºœ-!!AZ´haæë¤ûñØc¹eÕ7ß|#aaaÒ§O·hoC“'O6ó5Xí¬I“&ò_ÿõ_Ò¾}{ÓAX]¿~Ý„¹ÿûß›mkXØÓö|Ö}ן|ðA—m¹ ë¼*UªÈ}ºÐ:Oš4IêÖ­k:?ñĦSµ†Õ}îìN‘%!„?á!a‚Æž=’÷÷µˆ~×Q; ,>Þ #pDEFÑôø?ž:`〟i§Ù+V˜ ¦†×¯_oº×6mÚÔtr…+ G÷ìÙÓ„wµSóÞ½{]& I+O!áîݻˮ]»äÒ¥K2oÞ<ÓñyÁ‚¶óüÌנ°>/¶çž{ÎÌoÛ¶­ËøüÛÓ±†jcccM§_»Ûqi…„íŽÈC† 1ÇдiÓäž{î1ó4ìëlûöífß4ð¼|ùrÉÌÌ”¯¾úʇ¶/¾øÂŒùä“OÌí«W¯Jtt´4lØP2|ÝJK»¯mÏÁ÷ T:v‰ŒÙ·Z °å½]”úõ©C iÕJ¤jU‘|oÇÇ‹<ü0uÀFHÀÏV­Z%ÕªU3aΰ°0óoëÖ­MiXkäi²;÷z ¿ñÆR³fMó³vž>}ºÛí=zÔŒéÛ·oçKçOœ8Ñe¾» ïóÏ?/5jÔ0óu9OãJ"$œ••%=ô =ëü:8CþNÂJ;·hÑÂQ7ÝÏÇ´¥[žsçÎIdd¤ŒÏ×zçàÁƒæ8pàMwÉ.¶k¬àgz<?ܳCÂWÒ þò«;ëk¯Q ¶¸8¨FCÂÚI¸iSjÏÆ£Û4Î  \¦¤¤Hbb¢¤¦¦ú.€YŽ8mµ3°vp¾víZ©oWCÍúÜæääøäqjW`íJí­3gΘ0r@sÙE>‰ÙD  g¥ è6êÕ¹çÉû;™z péw&  W¨@HEÿîvéB°@¹à®/ÜÎ'E–‡‹\J£ðLCÂD ˆüæ7V7áÏ?§\?lMmÚX¯„„QíÎ1ÀÏ  \ $dR‹, ±þ £!áÕM D©TÉ _¼H=˜úöµ:’"pôëg…„kÕ¢ðlÆ BÂ8#$ ‚SÎU‘÷3•ô”¹W$}ƒÈ…CVàN§+éeâ¹té’œ9sFrssùý tg­ÂÚI(Êþ„„BÝ»‹DDäýW¾ŸZ 0µm+2ku$X!áÛød …X¸P$<œ:`ãT NhÕ0“o§"¬0Þ†‘/‰ì/òí,‘ã+E2“Er³96qk4à©áC9žà½q„„Bû›ô{é%‘lþìC µÂ†„„á5k8FpÆÛdœè$ì»NÂþÕÐNÇ–Š™o…ò¾~Æ r~ÚÖ uj8OÿýW_ëþŒ­„õG!4P®Ý©—„ˆìy‰p9Š'HXÿAá™g¬ ×Ò¥Ô%%Å:6wî¤Ä9$œ–F=à^r²uŒ8@-P„„P:Îø9¼§Á½µí­Û'׉dî±:kçb:8—¿NÕg¿Îû7Þ:Öu²ŽÏ{Ñ7'é‘ϺX]Ï T23EjÔ>œŽ,[·Z!Ãþ´ (£Fýæ¹'vÈ_; ¸9+V¬þýûËùóçKdÿ"$ €Òw*Ad÷³V T»Åj©|OËíà¸vš>K{.Ü‚­ã¬¹¾Î èŒ+b…2@±n2¼r…Z’§Ÿ&$Œ¢¥§[Ljþ¸9¯¾újÞïÑmòÃ?”È8þEH¾wñ;: —çN—Žó;€’CH€ ¶k—H¥J"úLŽÅ‹EÂéC q óÅF‘… ©p³ eì}2%-B½>}DjÕ9xZ 0Ìš%Ò´)u4Î!á„êÏBCEæÍ£ÀÍ"$ ”-„„Á‹0AoÉ+ô÷׿ŠdgSøß /ˆÄÄP‡@£Ç Ãò‹£ð¿7J×®]¥FæßÍ›7K‡äÍ7ß4÷/Z´ÈÜNOO—ØØX©[·®luj•¾gϹï¾û¤N:Ò¨Q#9r¤œ8qÂÜ7vìX™0a‚Ëö^|ñE³¾Ó§O»¬£cÇŽ&È«?Oœ8Q:wî,µk×–‡z(ïõ´à ªþ=yò¤ÙFãÆ¥I“&y¿Wq’››[`œsHXc·nÝ$,,L¢££eÆ €Ÿ/ ''$ @kÓF¤K‘;©ü/6VÃWÔ!ÐÌœùsH8>žzÀ³V­Dž}–:À¿¶lÙ"•+W–ÈúõëeáÂ…r×]w™Pí úmù9d{ÿý÷KÏž=ó^çfJjjª¹o÷îÝRµjU³üÚµkeÕªU&t«A⌌Œ¼cüY©Y³¦dÿô + ïÖ«WϬoÙ²eŽýøßÿý_Vo½õ– kÇa[VV– ?÷Üs€¯ü!á\®Q@0ºrE¤~} —ÐMþ§]­5¸ŽÀ2w.!axçá‡Eúö¥🜜îÑ£‡Ëü7n¸í$œžžî2NC¸¡¡¡2nܸëîܹ³tìØ1ïo§+R­Zµ¼ÿ¯¬ÿ°ô_í:¬†µë¯úî»ïÌú÷ìÙã² ü¦¥¥ÉìÙ³ÍýÚõØYþð¯MÃÌ:ÿäÉ“ÆécÖ²†£µ“±=EFFšîÅü‡0 xå € ¥y ÿ}ôµ€i¶Š®ÖGƒÁ„„áØX‘˜êÿÑ­†gŸzê)—ùžBÂùøvî8ìL·uêÔ1?k(¸[·næçN:É[o½%ëׯ7˦¦¦Ê_ÿúWiÖ¬™cÙS§NÉ#\î¼óμ¿ož6¡Ú)S¦˜1……„?þøcs_\\œüøãròäI9r¤é|àÀǸÈÈH3N»üÚ¦M›fæÝ‘÷‚™““cæiã Ƚ÷Þ+IIIfÿ¢££Í¸¹sçºlÛÞ¯îݻˮ]»Lwâyóæ™nÅ ,(0ÎÞÿíÛ·›ÊÚíxùòå’™™iBÊ+V¬à€üˆ·È€àEH€2§wo‘úõE¤ð½;­páÅ‹Ô"ÐÄÇ[ÏMóæ"qqÔž­Yc+ÔþõùçŸËˆ#LWß×_ÝtÖP­†kUa!aõÞ{ïI:uÌ¢¢¢ä‹/¾póûßÿÞÜ·yófǼ-[¶˜y>ú¨ËØwß}×…õ¾V­ZɶmÛL WÿK–,qŒÓýªR¥Š_³fM3>44T¦OŸî²>wûŸ -Z´pì³vS~ì±Ç8?âT@ð²CÂÇW Œ°ƒ€/¿L7aøÞºut T ÖsIHÞ+))ÔEC·œýð˵ܱcÇäÌ™3%²7nÜÔÔTÇmí4œ’÷Ë’››ë˜—••åØžÞäȹvíZ±¶£Ëë~;¯€pª ¼>‰²BÂß-$$ @Ò¦H«V"ûöQ øÖâÅ"ááÔ!9‡„Ÿ|’zÀ³¬ceëVjÿÑ`íŠ+$==Ýsׯ_/íÛ·—¦M›Êõë×)ŸáT@ðZÝ”0eÐܹVÀkÚ4º ÷fÌiÚ”:"çð¸qÔžedXÇÊš5Ôþ³jÕ*©V­šéfþmݺµlß¾âð)>A/B”YÔÔŽÂIIÔ¾óì³"11Ô!%'†÷ôXY¸:À¿rss%%%E%55ÕÜŸ¿G¦€ EH€2ë/±B^³gS øŽ†O‡¥(%ÅzMhÙ’0Š!2ku€OPÁkY¨È¿ç ŒjØP¤‘ÄDjßèÛ—j ²C­Zñ¡hzœÄÅQø¼4¬a–‡SÊ xi(ð7¨|£W/‘'Ÿ¤È 7m*2`õ@Ñ¿ËãÇS ‚—sHxuSê@såŠHýú"C‡Š$%Q”>º.;$ܸ± 3hÈØ±Ô7ïøq‘ DöîÙ¿ŸÉßÓÕ«“ÀÍ"$ ^„„(óþô'+øöÛÔ¥/"Bdþ|ꈜCÂ11Ô…‹%LŽâ‹·¾˜T«–õzÃ8“…ÜB€àEH€2ïâE‘ðp‘Dvî¤(]DZ³†:";$%Ò”?ýQíÞ¥ u€w’“Eúö ±ºP/^,²};„é$ ” „„ÁKCÂÇ– Œ{ê)+8gµ@éIK³Ž³­[©E ÊȰžŸF £h3fˆDFRMÁ¡¡Va @YCH¼4$|*AäÐB”aW®ˆÔ­+2b„HRõ@éÐNÕB=|˜Z*}~6$$Œ¢iðó6>E4L®Ýƒ_z‰Z(»x{ N×2 ï#$ @÷Ç?Zþ–,¡(kÖX¡Âôtj¨ôùiÜX¤V-jÂ%$XÇ‹~É(ì5Ö,j l#$ ÀçrrräСC²eË9}útÀïkÿþýeÁ‚N£ð©ƒJûöíå¶Ûn“Š+škÕª°aá7n˜}|á…ó¦L™bæ=zÔí2¯¾úª¹ÿ‡~¸¥mÛÛÑ©R¥JÒ¨Q#ùío+ßÿ=€"$ @¹óÛßZ¡¯O>¡(yÓ§‹DFR‡@¦¿ÿFÑRR¬ãD; β³Eºt‰‰±~€²ŽÓ(Š-99ÙX3n¢eKÇŽ¥~ýúòå—_Jvv¶|ûí·2uêT9wîœß÷Í› ÇÇÇËO»“0åȤIVðë½÷¨J–^v¾W/êÈôw¿NëßÌLêÂ…‡[PÀ¦½Zô¸(Å©àÿ³w'`R”gÛ÷£ ޲HÙB\"AP0€|Šb@A|Å#æEŒOHx"&jŒÛìwÊÎvid©[n¹Å}×Öí¸ã޳ÓO?ÝõëøÓtûíoËN,ƒ766Œv(ËjÔðn ÿPkˆ«{w³.]hxFŽôBÂTm HY¬PááÇ-''ÇúôéSh~U V×pªè[·n]·œË.»Ì8x~wÛ¶mI·íûï¿wÕ;tè`&LÝ´nUÜ wòÉ'Zw:!Íè°»~åcUÒžáëÑòzõêe?þñ­mÛ¶öNØ™/M¯R¥J¨jìŸþô'«^½º}ýõ×åòØ3fŒÕ«Wϵ˙gži­Zµ²×^{-t¿ÚWÇS­Zµ\à»G¶eËwŸ‚ç5kÖ´6mÚD„У%Z†¿ Z¯Ž¿¼¼þüíÓIIÿ50lØ0kݺµ[Ó¦MCaódí @™GH€¬6~¼üŸÿñBÃ¥íóÏ?w} úž­Ÿ]êË/¿ ݯ ˜_zé%"Ö…ó({rrÌÆŽ¥ʲZµÌªTñ^ûsçÒHLU„[·¦àiÞÜlÐ Ú@ö!$ e±B­ LFWÜõ)Œ«Àe4…h;wîì§e]Ft7ѶùËT8´Q£F·nݺ…·cÇ7_tuáâ ˈ#\Õßã?ÞUDÞ¿Âö _ϦM›ÜߪÂܱcGôôCÁ ›jž±cǺµž×wÞYn=x{÷îížóСC]Û­ÿ¡dÈÊ•+] ¼K—.6cÆ ›2eŠ ä*Ä«“pr÷Ýw»Ç*tkÿY†¿úÖp¡:©§}oÛ–-[f•*U²o¼Ñ…ãU±Z•¬£÷÷Š+ܺ¯»î:·_Ÿyækذa‘?Ôq7räH›3gŽ=ñĶfÍš¤í ‹ùzLåu8üð7; ¥~ñ ¯*à‘¯¼¥îÖ[ouß [´háÃÈ,êúQð´,KˆO¯wí'BÂBЃü!‹èý¢bE³ h Ù‡0€”Å µª2k… ¬oß¾…æWõ[U)E:=NË ËH%$¬¯š×^{mÂç´gÏ÷84ÃWHX¶oßnwÝu—fòÞ{ïMØžáëñCÂ2sæL7íÅ_t«J¬ª"wêÔÉÞ|óMwßÛo¿uÇŸ¨ êÔ©Q%ø³Ï>³N8Á³EAë›o¾Ù=^¡m|µSY†¿o¸á†@Û¦eÖ¯_?ô·Þ GÒV•¡ðíQ09:8Ÿêñ§çÛ AOx¼ö,òóó]ûùïT$kw°õúöü%¹-€0Æz!a!$ @Vzã /ôÓ«—ò,-ºøW}>úîøê«¯é»ëóÏ?o¿ÿýïíÙgŸµåË—ÇWëyùå—Ý]¢ï¬ºèxÈ!nT£d>üðC7nœû~ªÑ©þõ¯¹ ¨£i¤#]tüðûˆÂû.âmæÑ6üÏÿü­]»¶X¶{ãÆöôÓO»~º?ÿùÏ®lë֭ŶW­ò‚§\?]¶F*{̬F ÚfÝ»›õìI;ÈN„„¤l̘1*¤†kÙ²¥«”¾²ªU«Z/©‰AC.*¬yÕUW^F¢p¬mk×® y&«àR»vm;ýôÓ#¦Í›7¯ØBÂ>UnÒ¤IÒöŒ~á…Ü´Ç<4íÁt•b/½ôRkÕªU¹?þb…ZUE9''ÇúôéSh~U >÷Üs#¦©¢¯ÂÕZÎe—]æNJ]†¿U¥:Ù¶)Ä­êÀ:t° &„nZ·ªc‡;ùä“ ­»8Bêþ1£ ¾*iÏl:v‚JÖîÇr[a>}4$¼$0Yêšk¼ ð+¯”Þ6üáUN‡.:½ãŽ;Ü2¢o×_½íÚµ«ÐcÔ_¦û·lÙbýû÷xŒËáýGÑëúÍo~ãú“¢×¥>ßÞ½{ݺ£çÑÑq·Gß/ºè¢Ðü¯Dí˜t¶[ߣտ½-£F*¶}8}º<ý!»Œ2ª^½£!aª>#™—_öŽ•ƒi‹l¦Y99fcÇÒe‰ÎŸh´Ñ ÿËu®Lýô*(¤Ï+:‡ÌÛ¥iÒ¤In[U8*Ößå!a)S…DÈËËs_œþÐÃ6mÚ4×9?xð`þÕ|=zôpUSU1äwÞqQõ‘ýû÷Û† ì¶Ûns?~| eH¢n¬m[ºt©›¦jÄ'Nt'1æÏŸï¾ü…SØVËUE×Y³f¹ê(çw^ÜJ®ª´2wî܈ێ; mßC=d£Gv!eUù­Y³fD@4^{úëQÛ¨ÂÊ_ÿúWûñìB§kÖ¬ =þƒ>1bD¹?þb…+ØÞO>µu­Zµ M×þÑ—=NË ºŒT*YûËÔ>oÔ¨QÄ­[·n¡Çé¸Ñ|ÑÕ…‹«’µŽ …ñuœ©"²^‰Ú³V5g½çèDe¸dí®åk™þIRuŒ 6ÌZ·nm•+W¶¦M›ÚâÅ‹“n Eá!áÅ} ¥6nÔÅ·¥§ôªÀöìÙÓ}ϻ馛Òz¼ÆÕÅî«V­²o¾ùÆÞÿ}7:–¦+tÍÛê±UªT±Ûo¿Ýõ­é§¦ëbèXáb]ú¾ª~¢´yóf÷ÝTý]>õ‘i>]Ô¼zõjW-ÙŸ¦q¼íQ‹F5RpZË ¿>íÖ(< «pÆŒ.ä¬~Œ)S¦¸ÊËÅeäH¯J-Ê6åðýðèÑ´[°€ á0Óé§#ÿn,Æõ-/YÑšÒZV±Î$¢s**æ¢ów:o~ž ¥'ÕýX–^/Çú˜(M„„¤eàÀV­Z5÷åIò>U-UÐέ6nÜØÞ|óMwŸ:ísssÝt¿RIõêÕ UI´Œ _Úbm›¼ªÞë/S÷+ N'trÂRÁ=ã…4cÝ<ŽÞ>àð·G?o¸áwâ%Ù6G¯GAÓK.¹ÄÞÐ8šQDT´ <örE‰jýî»ï¬B… Ö·oßBó+® f,ÚGzœªì]F*!auŽTªTÉÐKDáp=îºë®KÚ¹’n%ëíÛ·Û]wÝåŽï{ï½7a{–G ÷îÝÛ=סC‡ºç½~ýz7Œª‚÷]ºtq'õú;çœsì'?ù‰; ™n»«J’ÞçFŽisæÌqòú–ñ¶BÂàxA°?ÿ¹t*Fúš+›ª·ÞzË=V£\}ýõ×÷i䣟ÿüçîþ_|1â>?l«>¡JÂý@®*¬û¢«ìé;ªß×ôúë¯'Ý&º¥mïKQß‚FDÒþ±¶G#(颸xRÝnÍ£i\pA‰îÃÁƒÍ4àµTÖµlIHÁ©^ÇÊܹ´E6Óˆ1Ì8:Ǧ~êð~ký_W¿¿ÎoUq.+ˆTÂ¥ºxJ=úè£YsÜÆÚße!a€Ì@H@ÚtÒBÕ€ÕmãÆ®:j,ú²¥Î}U¯hšÊ2ÒÝ6-OË ?¹MA[U€-NZŸ¶çÛo¿M«=“Q¨±W¯^YqÜ© «¾´/[¶,bzË–- éùÕW_¹OñÚF'³tBꪫ® ¼ŒD±¶M€TíF•¤щ@x §bÅöuìØÑ擵gy+­!RëÔ©ãBâ>UPÒ>SÕåtÛýæ›ovU“RÙ@ž’ëýNH€¬¦`ðÏ~fV·®ÙìÙÇ~ýú¨ïy *UªÊ¯:¯èûXûaÛÿ÷ÿþ_¡Çè‚rݧ‹XÃÝsÏ=nºîO¤_¿~n¾ßþö·…îS߉î[²dIÌíY´hQÂe§ºÝê3ÓÅõ '«-F) Gž²µmËk©¬#$ŒTéX™<™vÈV{÷šU¬èUÎtå­O9•pé{ï½çæEoü™²¿ dÈwcš2›* ëKìÜ,)‡ J4ªÐš——ç*ðü¡<†¥T; <Ø…5_=ÜP”k×®u¡t=fáÂ….œ®@¶ªIë1ãè!L¶Œd±¶méÒ¥nšªOœ8Ñ…ÐçÏŸïªN‡{ðÁÝr5l§†Ëzøá‡CUˆxàÐ|~XUÃjŸ‡ß‚Þ¾‡zÈuœ)¤üöÛo»ŠÔW^yeÒö,¢;ÕÞצ}b”‘¸ð ÝÐeÑí4$¬Šèú[UªU98Ù¶Ò¤ðÔ.Ê $ @ÖSLa°;ï4+æë¿“êСC o"ÝF}ê©§bÞ¯0­îoÞ¼yÄt?l«‹]£µoß>fH¸sçÎnº*&âϧ‹šëׯqSaD­ ÛSÔíÖ÷nd2²ÿö·¿ÙŠuvíjÖ»7¯£²Î W«föì³´’ËÍ56ŒvÈVÓ§{!ácý¹À§¾áË.»ÌžyÚi§¹ó [¶l ݯ"ÕR}ûº§^½zî­ÎQ„»Ñ|ºOÿ5ê¡óÚk¯…ï2éÿ½k×.wΡaÆîóƒÿ?[#ßébà©ÑïÂE/K…Sôw¬[xQ]Ô¦M7€ ÚÌŽsµ–Š¢üò—¿tþh~« .ÕgTµÖ¯þõTÚW…tD#.^¼8áú‚<ŸtÛ¹(û[çôy3ºÐÎ'é\†F“Ltª(ŠÎ{è‘FU>§èoÛîÝ»mÈ!®ÍÏ>ûìBÁìt÷£hÛ‡yCÖEajߦM›F좿Až#!aÍ @†»üòËÝâDÕ‘Ë›º}yŸ2eJhº‚™ê ò‡ÍT»¼ùæ›î> Í”››ë¦û'•ªW¯î*ЄK´Œ ±¶MªÞë/S÷+ NCx©ÓBUq4:BHWI8ÖM%ÑÛwûí·‡¶G?o¸áÛ¬qö´gyÌUÇ`tÛ§ µŽƒèvO¥‚óˆ#\¥joêœ ¯œNHŠ !aECŠ+ ôðÃ^uácÅ¿Yý4©R°C}þùçcÞÿïÿÛݯ~pé„mÏ?ÿ|7]ßsñçÓEÏꯈuÓvÝž¢n·üç?ÿqA¿äŒ3Έyanº”ÁV5a”m~HXUæ=œ*„@;d«;îP•úÒY÷Ê•+íÄOt͘1Ãõ½+tª êÎ;Ý<~¿²Š‡\z饮è‡ÎIhÚ#<Z–þßõîÝÛM:t¨ë_^¿~}ÜÐã¯ýk7Ê¡.@RÐSÿ{U˜D¡ÌG}Ô}^‰îŸŽ^–.RÒzü›B™•*U²Ÿþô§nFÑ…švã7ÚÔ©SÝóPÑ•è~ï+V¸¶Ð¨ Ý>óÌ3.$\ºnÝ:¢Õ¼*ø¡mQA”TÚWÛ‹/¾Ø=÷M›6Å]WÐç“n;eë~ý=gΜˆmѹ =·Dt®Bó©ÝÕNguV¡Q5ýmÓs×ç-m›>êü†@.Ê~}¾ÓòöÕóÐ1µfÍš"·kªÏ‘0ÈF„„ é³C`³†šT5à諦eãÆîJìXôeÁ‚®²pxh3•e¤»mZž–›(Э«ô·sY­OÛóí·ß¦ÕžåEt0÷»ï¾³ *Xß¾} Í«Î/u„ùÒ ‹:ÏTIáï{ï½7î¶Òžw m@–;òµÛjÔ0ûÙÏ4úÒ±[ï_ÿúW÷=O‹†W° ¢{÷îî±þóŸcÞÿâ‹/ºûUµ-\:a[]<¬é7ÝtSÂmR@DóEWiK¤¤CÂ~ÇôéÓCHŠK•*f=Æk¨¬#$ŒT©Jø5|UÌZÍš•Þ{E§N¬N:®Ú§ÿ}'œp‚+*!~¿²>ö§ aTÍ?ü\B¬>åx¡Çž={†úú5*¡¦µ<òª*±òᇺiªÌoYÑÿ¯9òBR€V•cߣ*áúT E¡Úûï¿?âñ ŪÒï¡C‡BÓtn+^hï½÷^¡ ªRi_}þ ºÏ‚<ŸtÛ¹(û[çõ9óæ›oŽx¾:Ç¡â7©P6Þ±tÑE…FkP(XÓüÊÍEÝÚvOQŽßTž#!a €¬ ¡ªÔá£j>u,E_M®*:a©áÔ|醄};vtÕ¤m k†E†„uYoèP/Dxë­Çnxq]ô«p‡¾ëýŸÿóRzìþð÷8 ‘‹‚.ºÿ–[n‰˜žNØVAd¿*±‚/ñøßs5¬uPÇ"$ìS %''Ç]”›¨"`Pª:­cfòd^?eÝùç{ûªiSBÂ&/Ï«&Œì³v­÷~±xñ±_·Âžú?¥Ê·Ñ.¼ðB7Š@øÿÛè~eÿ¢ž­[·†¦¥/€¢‘5íÕW_ MSxtX5Q·ß?þì³Ï†¦)Ä©ª²ú¬0a„Эnݺ®¢k¸“O>¹P[(h´mtH8Õö R˜%•ç“n;uëœE•*UBŸáþô§?¹3U&Øçƒn¤É'Ÿ|Ò-[£4D?§O?ý4âómx•ã¢îG…™ýÊαFƒ(Êñ›Ês$$ ²!aÔÁ¦¡¬òòòÜU÷ê,š6mšëÒpe_~ù¥›G'eU`­z‘àw‚êªõ¹sçFÜÔaÝ™¤¡¸FmŸþ¹ú¬fÍš‰±¶†Õƒ €˜ºt±#ßíÌþ÷Ý:ýŠeºýæ7¿‰;¢ÏâÅ‹íå—_ý­°låÊ•]å»ðªÄ ¨JœFE —NØVßAÖ}Y'¼œøÛ¬ð…*Åi¾Q£Fzþ%Öwíð*¢°Ú,:P“.?H¶j¯²îò˽}uá…„„Ì!fµkÓÙhäHotÒèzU(5^uUõתUËý/¤¨P¦¦+ëK%$¾õŸk¾èj¼E µ}í³dϧ(í\Ôý={öl7mìØ±.(­m»óÎ;“>7x¨Q$¬>õÔS]á-gÑ¢E Ÿ“Ιø!áâØ2bÄWYçGt!\øˆŸE9~ÓyŽ„„@6!$ ²ÆÀ­Zµj®ãgÊ”)nš®^W§¡"·qãÆ®ã)œŽu›4iR¡Î¤Ûo¿=´ýT%]½žl[)RHxFKïwB Ì¨Ú™™FŒËã–(…$î¾ûn¤Ñw½Ÿýìgv×]w¹Çßÿþwëß¿¿µjÕÊÝ´ÑpÉ~0eÈ!.£@†è0`@¡õ¥[‘WßA5\¸î¿à‚ Ü…³¿ÿýï­mÛ¶V¯^½Ð|ªØ¦ …æ»îºëìé§ŸvÄ*Œ¢çñÒK/Þž¢l·¾·ÿô§?µ{ï½×ž{î9ÆV•@Í]Ù/]Ó§{ÁÓ‚^;e]÷îÞ¾jyäk@Œ—PÈ‘·-wÌp~v¾_tíZ:ëÖÅ-ºÀGäDÓÿÛ3Ï<Óý/¤øàƒºéº¸ÇW!a] ¤‹r.½ôÒB….ô¹GŸ'®½öÚ„m¡çà–ˆ~|º!ᢶo¼ÏqAžOQÚ¹¨û[ÕŽUÙ¸S§N¡õ©HI2ª¬|Ê)§ØºuëÜßS§NMZeWÂCÂű} ôê3²>3ëó]QÛ5ÝçHHdBÂ@¶úþ›#ßîÖpãvôV°ÚlÛì#ß®|Þ·áèí0½§(_4ôÖ† \‡Z¸7F cUTº’_ë‰W9*ѶRHøöÞï„„@”'žð‚aíÛ{¡ácEa†³Î:+¿©*ðm·Ýsˆe…r4h1¿ªùþë_ÿйžtC²lÙ2kÞ¼yĺH¾þúë#æ{ÿý÷]ØFA>……Ò ¯Ì–l{Š²Ý .´6mÚ¸áµýmÐ@jÇð0MQ<ù$•F3ExH¸ÿ€À¶m´E¶Ñûúð᥷þ–GÞ¨TÍ4œÂú?Ø«W/÷·RŒî—ÖÿæM›FL3fŒ›WÿÃ}%Ö6Õ¯_ß6l7DÙ®];7‚FÔK¼/jÛé§Ÿ1mÞ¼yi‡„Smß !Рϧ¨!át÷·(P¬*¼ n뢭d6mÚ úúü­>c%zNá!áâØÑ:vìhMš4)r»¦û €lBHÈV …¾ø#nÜR»½TÛÒ{æùfÿîèqVùâÿáH³ms¼P1À±²¼ßÑð¼k €B:uòÂa¿ùYÔ/%nß¾}¶|ùr?~¼Íœ9Ó\¾ù曤۹s§-Y²¤X/dg÷îݶtéR·ÎD8à*Õ©š.Š- ºÀöƒ>°•+WºpHqºã/tв0RþÚ¸Ü;fòói‹l²aƒ·ß×®-½m˜6mš ªb¿Â–[·nµ=z¸ ]Öþ°a~Hñ¢‹.²+VØþýûmäÈ‘îB£Q£FE,OW84//Ï]$£Ê¾%Öÿú‹/¾Ø]$4nÜ8[½zuÄMÅ/DŸ!´Mº hâĉVPP`óçÏw£ï…ó+å^}õÕ6kÖ,·ÞóÎ;ÏM{à’¶e¬p*í4ôù5$œîþ}ò/š1bDÒç¤ÇÕ©SDZjÕ*·}çœsŽ{¼F‰Hôœ¢CÂEÝ=ô•B!l}®Ôá£B¤Û®é>GB ›²•„¹­$¼cÙö¹ÞíÓÉf6{ÿ1/¬ ŽÂ¯46WÑ O¬b6»­ÙÛýÍ6Ž7Û¿™×(ú,⇄õ“0ˆ²}»™ ž)(4dˆÙÞ½´ Sµi…OQöÝ|³÷zþÅ/Ìz÷¦=\AwÌÌ™C[d“‘#ËF…ø^xÁjÕª u6nÜØ…}~Hñ©§žr£ è÷œœœ#ŸY†Ä\ÞÀ­Zµjn¾)S¦”XHX!àèÑÂoáÕmçÎëªÁú÷iûTí?œ.œÒhþ( ª€ûÉ'Ÿ©’p*í›J4Èó)jH8ÝýíkݺµtÒI.Ä„ÚM!Z-§Y³fîb4¡µ?÷œ¢CÂEÝ·ß~{èùèç 7Ü`›Ã®â+Êñ›Îs$$ ² !a@ñ8|ÐlÏZ³Í/›­à…‡VpX!â%yf=ëUV(Yd“ h—߀ùჼ.%‹0àõ×ÍN>Ù¬J³G%(ŒÂjÔðBä(û òŸ]ºh˜rÚÁää˜ N;d“~ýÊÖ{ÄÆcŽR×»}:Ù ¯æUš^ÔÛlv[³)¹GƒÄ +èõþcf»–ó:$§P° &$ ’èÑà ªjì3ÏPQž±c½ã¢ ¢ø!á®] #8U”-{¯ñ€IDATíÝ›vÈÞ…A ”ým%$œ]Šc_~ùåÖ¸qcªã %„„@é:¸× 8Ò w),¬Ð°Ä {zÓ·Î4+x—pyt0{ÿ§?²›þO)PõQ ºí6³õëi“lwÇf-[ҙ _}5!aׯŸYÛ¶´C¶X¼Ø{ŸØ¹³ìoëþýûmÇŽ>³DqìïGì={öИH !aPö¨±*«âð+ÍÆU×lj³)¹f»–Ó²ƒ‚Á«þ €?ÿÙ¬aãAanÙy;ùd^ ™Ä ßz+!a7gŽwÜäçÓÙ@U„  ÀGH ¼8¸×«*<¹AaÙ0(¢+Ìî¿ß¬m[³ã§’p¶UV5i‚¦™eȳãŽóB Ax!a……Qþ÷uÅŠfsçm9ª:ýñÇf³g›­^m¶f 7nܸ¾}ó ï» 3(O0ûwG/(|`í |#$ ŠÉªU^ ˆYvQ¥Éöíi‡Lòì³^°wo/ô •“cöØc´Cy·`÷Þ°sgj[¼Øìw¿óþ'Ô¨A•}nܸ»)( èB(o¾-0›ÞÌ Ì©º0”W3Ï7{ÿ‡³¼„„¢áéF›iFöB9×_OH©iÝÚ,/v(ïFŽ þ¾® ñàÁÞü ‘ëQPxìXïÂ!…ÿ¨$Ì7* €ò€.€òh×r³ 9fo÷§-”_S˜}<Úû0R4~¼4Õ°òÈ ~Hø¿þ‹0R£€pÇŽ´CyׯŸY—.‰çÑ{þ Afµk{aU(/( í”_t¡”Wk†™«höÕzÚ@ùžÑ’0R¢áå4ݰ¶ÈÑ!á½  „€† ¡rx6hÛÖlÀ€ø÷¯]kvþùfUªxU‡ Í”„„Ê«C¼Ý›]h åSxHX¿@ VÐ4?Ÿ¶ÈcÇF†„ x#¨™3©>]“&M²Î;Ûž={Še¾’¢ð¯ªÄÇ2w®W=XAâõÔTEø: Pžm~ÙìÅ#ùv-§-”?„„P;wz¡Á9sh‹L¡}EHéÐÅ%qÌ 4èÈrd7n,×í÷—¿üÅ=Ï/¾ø¢Xæ+ ›7Ç¿ðCï99fÝ»S=@ö!$ PÞÍ<ßìßiåÏäÞÅBHiP lôhÚ!S¨¨öÙwz?×®¥M\ñ«Ì¦+“BÂùùùöÇ?þÑvê ‰eBHxút/|ð`ätU Ö¾¿æšÂ÷@6 $ PÞùÕ„÷pæ @9£÷¶ís½ß  šþÙgi‡Lᇄ{õò~ÎK› ¸–-͆ )ÞefRHøÿø‡ÛÖ>ú(åÇfBHøÈ®°óÏœ¶w¯Y³ff­[SA@ö"$ PÞ>è…çVý޶P¾@58ò1r0#3†¾òJBÂHÝw˜uíZ¼ËŒ 3ÆZµje»ví²|Ð6lhÍ›7·I“&¹ûGŽi-Z´°ÆÛO<±¬¢ÛªV­j?ü°5mÚÔ}ôQ»üòË Uõ-ÊcûÛßZÅŠ#¶íƒ>pó=÷Üs. Ü»wo÷÷СC]Uáõë×Ûˆ#ìÊ+¯´gžyƦL™bgu– "Gó·íꫯ¶K/½Ôzè!VÖ´Gy¤Ð|~HxÙ²eV©R%»ñÆmêÔ©îñÚÎtª'S·®Ù€Gÿ~ùeï}bútŽ}Ù0@68¸×lb³O'ÓÊèðGŒ €Ô´ooÖ¯í)üðÕW{?R=~vî,¾eÆ ÷ìÙÓ¾ÿþ{7mܸqnZË–-m÷îÝnÚ‡~è¦ýío -«(Mƒ£ÃÅÑŽ5¿m +û·÷ß±î[íSíÛñãým³#mfÖ»7Ç=È‹û˜½Ù…vP>ìßì…„¿Zïý­ðÇ£i¤DCÓk8zd?äÙ½»÷s4_I•£]° ø–/$¼cÇŽÐñÄ­C‡6a„Эnݺ®zqqÊÏ÷ÞÖÿÐE0dˆYNŽÙ† ÷@H [¨Ú渊^°2ݾ ^HX?eB!a¤Lá.\O›1üð5×Fzš536¬ø–/$¦õƒ¾3fÌMKNç±é†„·oßn7Ýt“åä䨩§žj-Z´pó,Z´(bYñBÂ<òˆ›þÞ{ïšoÛ¶mî÷š5kZ£F"nݺu+Öýª÷‚5¼ Â{÷z¿ÀñBH ›¼TÛlí“´€ÌÖï„„"…„Û·§2ŪU^8øÂ ½ŸÏ>K› 5ªB­[q)Ë!áµk×& Ÿ{î¹vÊ)§ØºuëÜßS§NM©’ðƒ>è¦ïÙ³§Ð|‡²J•*Ùµ×^[âûµ_¿£|<ù¤WEX•£„„²Ëžf¯·¦d>BÂ(yyfmÛÒ™bÃ/|î¹f¹¹fC†Ð&HÍðáfuëßòÊJHø÷¿ÿ½›¶ó‡dì÷ßo×_½›6jÔ(7m̘1îïeË–¹¿7mÚäþV5`Ÿ^¸paÄóô·mÇŽÓÛ·ooM›6ûÚµkg'œp‚}þùç%º_Ï?ßìŽ;¼*µkóÞá d“Í/{Aº¯ÖÓ2›ÞÇ  ˆ 2kЀvÈ~H¸eKo¿ L› 5‹{ÇÐúbê++!a…z5mÀ€6kÖ,»æšk\•àððÖ­[íøã·¼¼l½zõ²O<ÑÝz÷îmï¾û®›ï¹çž Í7pà@«V­š›>eÊ{þùç]PX7kÖÌ–,Yâ½ ÿŽ7.bÛ*Uªäæ¯^½º›?''džD•ìõæÎkMš4qÓuÓúo»í¶bÛŸsæxï ùùÞû‚*Ä@¬÷£â êë¿úÕ¯JeÝEY—B¼š·fÍšnþ *„~žqÆöÉ'Ÿi;:ä–÷»ßýŽƒ€2ˆ0@¶y³‹Ù‚î´€Ì懄}„„†aà g?$Ü¢…Yûö„„‘ž.]̺—Ó®±]»vÙ¾}ûÎóõ×_y-mp1Q°kÓ¦M¡û5]÷+xìÓ2wìØº_Õ'¿ýöÛ”¶MW˜:|¹Åaøp³5Ì^zÉ{X»–c@ÉuUQý‰'ž(•ue]ªò«ùú÷ïo|ð{/ß¾}»½òÊ+vë­·fuH8??ßþøÇ?ÚÎcX†¾4Ö Èn„„²Íû™MÈ9Z}2Q¬ðÆñ´ R2z´.CfPŽB!Àzõ #}O>iV·®Y1°ŽRÖ»·ú¾æ³®]iž’êêB UÞUÈöX¯»(ëš0a‚›GÕïKJ&‡„ÿñ¸m×0åy€ìFH@™£+×­[gÿùÏìóÏ?/óÛª+/G•±Ï@ÚµÜ Óí\L[È\±BÂÛæÐ.H‰BÂ?âLIFÑþÊÍ5ëØÑ¬Ú©[¿Þ;Ž, -2‚Þµk› `V±¢Ùܹ´I"[·nµ… ºPÚÁ,HÉOš4ÉÃÛ³gÏ1}l6Z´h‘µiÓÆ*W®lçœsŽÍž=»Ð<óæÍ³_þò—V­Z57¯ÓªU+ûßÿý߈ùT¥÷‚ .ˆ˜¦êæšwÚ´iîïwß}×î»ï>»ð ­fÍšvýõ×yýG¾D‡guîvذaÖºuk·M›6µÅ‹S;G2~üxkÔ¨QÒùüu«Jì!Cìç?ÿ¹}öÙG>wŽÍä9Ùî ëjÙ²¥k÷/¿ü2ÐóÔ¶]vÙeV«V-;í´Ó¬G¶eË–„ûSï-ñBÂAŽXÞ{ï=ëÚµ«zê©VµjUkÑ¢…½õÖ[)mç˜1cܱ³{÷î˜í£ûëÕ«ç¶ýÌ3Ïtó¾öÚk¡ÇmÛ¶Íòòòì'?ùI¨Ýƒî»xÛoÅuœ³/…&P–èÊK}Qчâã?Þý¬Q£F™ ÚÆº*²$Ÿƒ†ÑòtÓ•ªúÂó_ÿõ_öÙgŸqðîðA³‰U¼ŠÂ©¶Î,VpHÁË/Î4~HXÕCûô¡=žÆÍvÈt~à»K³fÍÊÖ¶)«s9 M ?Ç£Û‰'žèk ‘Mž<¹Ð2üù¿ùæ›Ð´Ã‡Ûµ×^ëfA†©WàL!BÙüsKþÏ3Î8Ã>ùä“rs¼ùæ›­Aƒi?O½vj×®m3gÎL:¯¿n¿=ðÇL…C5MРÏ!Èv'[—‚­úý–[n ¼?ëÔ©cß}÷]hšŠUp ®znªû3Èñ‹BÍZžFíMw;ƒî ýŒwüÜpà IÛ,Ö¾K¶ý±ÖYÇ)qûRhÅ-Þ‡Údü/±†!)ím‹':$\œÏ!Ö¶úBþ•ŠZ“&MÜ…ß~û-_¾Ø¯[·Î}Q+«U«Ã·Uz£FÊèç2@U„'×ðª @&RHXïc>BÂHƒÞ°¶ÈÚ_µk{áž=i¤G¯yKÃFcGjÞܬ^=³Ö­Í–±nÎD!áè`îþýû]u`Ý7~üøBóû!áY³f¹óA±ÎÄ2aÂ÷øAƒ•»}ä|_Qªÿ&{lqŸoÌT:/¥Ðz‡ÜñæßêÖ­ë ùN>ùä#ÿ·#¯ì‰UˆIR «XÓæÍ›íÉ'Ÿ,Ȍއ/¼ðB¨2¬*¹¦jñâÅîype™¿îO?ý44­  ÀM{ä‘G?‡ Ûl]š4$ìWîã*¬ /¼ÐÊJe=>âWª ¬ßÓÝΠû"QHxÛ¶mq·3Þ¾K¶ý‰ÞCŠzœ·/…&PœÆŒã†8Ò‡W ÙѪU+7|†Of/»ì2«U«–»Â°G¶eËwŸ®ôÓpGmÚ´‰¸ê/Z¢eøÛ õêC{^^žû®/n‰¶mÑ¢En½•+WvC‘hh”XæÍ›g¿üå/­Zµjnþ… F|á ú’­/Þ¶F‡„E_tt¿è*f}ÑŠþ¡Ž#ÍçaƒÈŽ…–-[ºvUçš~Ö¨Q£Ì†lãušdÚó@°s±¨+ȧ-d&…„§†UU $ €4,X@H8Ó„‡„Û·§=>C«øm‘‰TÌSï*x|”5©„„Eç¹z;ûì³ Í¯°£óOwÜqGàmÐ9ÏúòË/ÍôüÛ®]»ìÁ´† ZóæÍmÒ¤Iîþ‘#GZ‹-޼®ÛO<±lÿ±;vì°{î¹ÇSuÑÁƒGTOö·C•@öÓs¾þúëìã¹ËŠuÍ_‡€â‡ü´/’­3Þcý€iøý±Ö¯@_6žŸÓ¹XµƒöS£F"nݺusóhŸkžèʱE «=oºé&÷š9õÔSÝq§ûuþÕ+è=bÄ;餓Üy4c èõ‡?üÁºv 6:c¬uëuL ò‚lw²u阬T©’]rÉ%÷gt5`Q¨Wï ©ìÏ ÇG¢íˆ7OíLe_$ ǺP Ù¾K¶ýñÖYÇ)qûRhÅI_Ü{÷îí>Ô:Ô}À]¿~½»oåʕ.]ºØŒ3lÊ”). «¯?ÏÝwßí«/þ±:I‚,ÃÿЮ/ä_|±=úè£.ToÛ–-[æ¾Ýxã6uêT7Dо|F(×Ð#Z÷u×]çB½:D Ñ_x’=‡ ë‹·­á!a…ÇŽëûüóÏ»ÇýóŸÿt÷kØ£è/Dj‹ò,Ý¡Ô9“››ko½õ–»âóý÷ß·‡zÈvïÞ]ªÛO¼N“âx •…&V1[7œv™  (¬Y>×Ðf BÂ(.*¨céò˽ÀéêÕfkÖp+ë·%KÌ”»Õ¾;þx³~ýÊæñ•jHXâ«P¡‚ëãŸ_ýü:¦"6AG•ô+mjÈû R9ÿöë_ÿÚÚµkgO=õ” 5W­ZÕ~øakÚ´©;'wù‘U¼ÀΉi›tþBaâX•UÓy-‡ÓvœuÖY.„ç‹w-:Ô—Ê:ã=6Öß±Ö¯åeãù9³Ò9OUÂŽgÏž=®mt~5ú±ACÂk×® ëœØ)§œâF×oMVIا€§Š.wÜqvï½÷~®Z§‚ðA ¦yA¶;ȺæWáªdau{Ö{Pß¾} Ý×¶m[ŠOe9>W 4H{;SiŸTCÂÉö]²í·Îâ8NˆÛ—B(nñ>ÔvêÔÉêÔ©Qa÷³Ï>³N8Á]'êܸùæ›Ýãu…œ:ôA:•eøÚo¸á†@Û¦eêÊaß¾}ûÜ—Ïè+ Õ‰ +§Ã·G#ÑW*yAÖk[ý!u©ÓEW€«Jrøm­Sëo}QÒð$ÙxÜ%âï¿èˆÒÞ®d_Œ£·¹¸žÃc£«®õÅ__ö3¾Ró¿;š-îÃN™Ö ;þf'!a¤Å —Å*”ˆMû«J³þýU%“ö@ѨšxÕªÞqÅ-ón§föÎ;eóØJ'$ܧOŸˆûýù»wïîÎý„WõMFÅfôØ[n¹%Ðü©œëÙ³g¨bî¸qãÜ4U-ö‹–|øá‡nÚßþö·Ð²üÇ*LìSúŒ3ΰڵkªìNaáèsAB}©¬3•p¬õgóù9Æuœ$:_¢ö>ýôÓ#¦iôÖXç¶~ÿûß»é~8]ÇšªIkÚ¨Q£BÇvxÐÛijØxû4ZÇŽ­I“&_Ï k~úé§æOL ú‚lw¬ŠMéï[o½5é¶ëµÊ—¯¾úÊ—îÕ«WÊû3Èñï¸ÒòVë ž4·3hû¨:¸þV¡¯dÇOÐ}—lûc­³¨Ç) ûRhÅ-ÖsÿŠeupDSÅ]]qN¦ëÖ­ë–£¡8xþ‡v å‘lÛôÅRWFk  &„nZ·®î wòÉ'Zw¼«\ã=‡TÖ—($¬ç¨/8?þñÝ‘ï„õ‚iz•*U\øXþô§?YõêÕí믿.·Ç\¼¡¥$ÑðXêìÒ7mÚ´‰èøŠ–lˆ-´^wyyyîêzí¯xÛ%vFëÖÕ»º"_ª£éKµBá „k^}ÁŒ>æ‚>DëKÔ†8JCZ©ãAí¤a~ô³F™^=ØlgÓd¨ð÷°}  -„„3|ä+A‚m@`Êÿ¨«”J™SIø0ËÍ5«\Ù,'Ç«]Ö¤Ö”º_¶ðùÿû¿ÿ;Tµ6(…ƒ†„S=ÿ¶cÇŽÐýo¾ù¦›öꫯ†¦)¨Î¸SÁMW{ES wóæÍöä“Oª°šJH8È:‹–l?Ì:mÚ47ßà#´4^':/ª‚Wªèœêþ r|Ä¢ã@Ál“ÓöªZ¸ö¿Î›ÝΠí£Çju~WíŸxïA÷]²íµÎ¢§$ìK¡ ·X_ŒœŒõÅ@ôÁVáËÂs_XçÎÝã´Ì ËHtehô¶ùËÔìFEܺuëzœ:<4_tµßD!áDÏ!Ùúâµ£ß!¤«EU‹u¡BŸ~§ƒ‚ŸšgìØ±®cG˾óÎ;Ëõ1oh© ÃcÝ}÷ÝîqêèŠÕ1dáÇÝW\ᆎRé×_=æv‰® ÕP3êôS \_¤õÅ5|¯X±Â­[Cöh¿êjù† Æ<æ’=dë‹×†åU~~¾{=…ïà Ô•››ko½õ–ûÂþþûï»/ì~…„’^±S˜N¡ºƒ{ùç ó($üÆc @šTg€pfñCÂC†²™Þ·õ^pÍ5e3(œNHXE>tî!z~¡Qõ^β B¡@¸ä’Kü/Lÿü›Öù_*!a…ô4ý½÷Þ MÛ¾}»ÝtÓM.¸|ê©§ºj¡šG…P|E ÇZgq„„³ñüÜÑ×ã\WíTÏ_7¾¹í¶ÛB÷릪ëÖý*T£×A¬ó]j;®u~L7»Ò9,Í«°®¨2®‚ššÖ¬Y3[²d‰ ¡jù ½ÆÚg·ß~»Û.ûW=§ -'´ºo²çd»ƒ¬KTdHï):§ìï'Ýô:S¸6ü|•ª_ëuïÏÓ¸qc÷ZOg9>âÑûŠÞüÇéü\x¸8Ùv¦Ò>Ú¿~;ë\p¢¼AÐ}—lû£×YÔ〄})4€â닱¾xhH¾}ûš_šU¹4}ðÖã¼ ºŒTB ùª“äÚk¯MøœtŸ§/á’…„£ŸCÐõÅkÇè°Ìœ9ÓM{ñÅC?ªL¬¡¡üÎ]i˜Ç]á±´ÖðOz¬†‚R¸Wû)•e„wú²–l»üåÖ¯_?â µB»áAtyU¹8|{ô%=Vg]ç‘l}ñ¶5[Ž—dü¶Oôz/Éõ—ˆovz¡º‹ùç ó@1QÈlüxÚ!“ö—nÏ>ëU½Ú·7ëÚÕ¬_?³*UÌŠG–ºTCÂ7nt}öW]uU¡ù¿ùæWV•+è[¼8XnóæÍ] P¡ÛDŠrþ­¨!a¿"©ÎÃùT¬ã”SN±uëÖ¹¿Uø¤8+ ÇZgq„„³õü\8]Ò±¬ o,ª"ë›ìë®]»B’bÑãÃÏ—ªý7lØwÝ¢û4Ω¥×‡Âš*SÜ‚>‡t¶;Qè=HǨ‚òû÷ï;¯öexåðDû³8ŽxT=QÑdÛ”ÞgÕÎÚŵï’m¬uçþ Ô—B(ncÆŒq_êT¹4œ†ÓÐÕ¾áÔQPµjUwEh,º’OG¿S$È2…„cm[»ví\àSÃv$R»vm;ýôÓ#¦iHd¡Áèçt}±¶5VHXWIjÚã?ÑÁ¡!J.½ôRwõf6ˆî :<–OLê¼Ñ2.»ì2we~*Ëð»è/Ãñ:Štõs‡l„ ¡›Ö>dÌÉ'Ÿ\hÝÉ:Mb= ëË–°^[õêÕsÏU›z¼öÚkî>]®vÓ•Ç hëêé-[¶„:‚T\ÕÂCãÑTÍ@ó¨óUU§U= èúKÅôffk†ñÏ @æQHøß½ß  8=švÈ5kÝg?â,ÕtGÅŠ^UøÖ­Íš5S±‡²±m©„„ëÞ½» ¯Y³¦Ðü ûËT¿õOúS KFÕ.õø[o½5é¼éžK5$äkß¾½5mÚ4ô·ÎEWøôC . M‹u-^°7Ù:=6ÞßñÎ…fãù¹t)ÄTè¯^½º] SÑ} D:>ô8//Ï]…ëiš6mšû²7xð`œÕ| à©ÓcíÚµöÎ;ï¸ÇèK¾®ZT‡†ÑcÆÿPÊ#Ù2âuR$Ú¶¥K—ºiºZÃ4éªÇùóçG ÷á±×rUÝuÖ¬Y®sã¼ó΋¨êä9]_¬mõ;„´¬W_}Õþú׿Úüc ï8úàƒBC—Œ1"+Ž»è€kÐá±Âé˜éܹ³{œ–—Ê2âw±‚·þr8ÕpSá·nݺ¹yÔi¥yÂ+ýí4‰÷<­/Þ¶–G kx*=סC‡ºç½~ýz[¹r¥{-uéÒÅuhjh…|5¼›…ïÝwßí§x¬jêTµðo¼Ñu\êýBïOámoý¥fQo³Ýùç ó,ÉóÞÄ0Š€pfQõ`í³áà ÙNá`¿¼~×ûC—.fe!˧âêþïÿþïÐ4ÿ†£Ÿ;w®MŸ>Ý[PAõM×[˜è°¬X±Â¦9묳"*áÆ¢":åŸÛZ°`;·¦þjmƒî[½zµ›7Ýóo©†„/ºè"÷tmäÈ‘vÜqÇÙ¨Q£Bóé\˜FwTÕäU«V¹åªŸ^}úé§CóÅ:‡/Ø›l±ž[²¿ã ÍÆóséÊ”°^/: Éè>P"te´†^Ñ—;í|ªz«`¥ÿ¹qãÆ®Aòóó-77×M×kýÔ•™ár“-#^'E²mSgL“&MBËÔý ÷†Ó6×_½ë<Ð<ºX!Áð/°AŸCõÅÚV¿CÈ¿)ôyÉ%—Øo¼Qè±­[·vE !gƒè€kÐá±¢é¸Ñ㮸⊔–‘JHX ’^{íµqŸ:•ô¸ë®».­N“ðçd}ñ¶5[ŽÑ`ê| ¯üÙgŸ¹Êß÷ÝwŸû[n¾ùf÷X½¾}ôQ×¾á˨_¿~Äû†:Q£ÃÞeª­UEø•Æüãy÷ñnî wƒÞ±€v@Ê4D=!áÌᇄ•ï"$  eK³¼ßgÎô* —…Ì¡®ê~æ™gBÓ¢Ïñh$CUðUQ‰ðB0Ñ󇇄EEgt®J£â%«nªþn-G#ßE¯[!àa¥—Ó9ÿ–jHø©§žrçÍüm2dH¡mVdõÕkžfÍšÙ’%KÜ9=g…›}ÑçÐb{unDËK¶ÎTC±Öï˶ósE¡‚9:€’E÷ €óõ×_»JººR9ÚÆ ïãÓl]ͬª¼ºª7žDËHwÛ´<-÷ðáÃq«/õªÌšHÐçd}‰Ú1]Yí• b ídx¬hºB^7W]uUJˈŽ7äT»ví\øôóÏ?ûœj×®m§Ÿ~zÄ´yóæ G? ë‹·­åQtHW¯Auöéӧмª¬JáT%¸nݺnêˆ=pà€{ªÚC‡l„ ¡›æSåéDë/U[gzÁºÛøÇ ³Ä µžv@Ê4ðªÒ"3ø!aU%$ `Ð ³æÍþ=l˜÷Þ ŸÇÚ¦M›\qÝÀUŸ|©Ž"F}àÚ.…zß{ï½;ÿOø9ÞP߸ŠrÄ£yÔž>õ¿ë\Yôù´DçÐ>õŸ‡îO¶ÎtÄZ¶Ÿ@ÙG÷ ”Cª,¬ÎU,α†vJ6<–BÜšáÂ…®CL9ªè¬ÇŒ×Y 6Ä–Ä ÇrjéÒ¥nº®~Ÿ8q¢ Ÿk¸"Uð=øàƒ¡aÀf͚宺?ï¼óÜ´x 4_çd}ñ¶µ<Šé*øÝ®>|U=!šöuçÎÝã´<ªðݨQ£ˆ[·nÝ®¿TÜk6®â‘F˜Ã›'€Ì+$¬Ÿ@Š<˜vÈÑ!árÜ… ÿ½ ¬ ®«$¬i*{,ß#þö·¿…ªðž|òÉU„³]²Q@Ë‹l餓쪫®r·k×Î !÷ù矧¼þRõVW³E½yóYÞhoöî ïwBÂ(‚¶m g’F"CÂød=U„ïß¿ðôÑ£ÍrrÌš77›9“v*M:g¡så=<›)ççtþê¶nÙìÙf«W›­Y÷òvûæþ €,´uëVWu9//ÏuØܬnÝÄóLžlvþùÞû†~>ù¤¬2ž|ùe³Aƒ¼Ï0Uª *ܱ£÷¹FaáaüŠÚúŸ©±SXžJÂܸQI= ˆíû#Ÿ¿\Ã-Ûo«Í¶Í6ûjºÑíÀ6^(7¾þúkWøû￘¾qãF7ôY,_|ñ…-X°ÀUVEáxôx-'ÑðiñÖÌíßì…ë ò9(dŽððö¹„„6B™¥M›È°ÂN²ÛôéÁ+‹/X`Ö½»YÞc76ëÙÓ SŽk6gŽ $8É­4o:îtüé8\¼Ø;6ûõ3kÞܬbE/¬‹fú÷÷þæç›•ö€…(» ˆMQ-¸qKt›\Ãlj³ÙmÍÞìb¶¸ÙšafÇ›í^EUR “L¬â½v SLof¶n¸÷;!aÂa„„3‡BÝ öù¡@úd7UVõ/JJ†Öÿ–-Írs–ž[Ù¼©Rv×®f=æUÐ?Àé7¤€0€Ø¨$Ì-^%aUUG7 ?íUñ{»¿Ùžf3Zš½TÛ êŒ«èý­û¶L7û¶€×PVÍ<ß,í sèB%}?$üÍNÚ)S@¸KÚ!Sø!aUÖÏÑ£i^ˆrÀ€âYÖæÍTæVv* S!EEHP2l3Û:Ó ÿ»£VxG¿ô,a ¬YÔÛlAwÚ@æˆÒ °‚§È ~HxæLBÂŽêÞ > ΢Žƒ{½Ðð’<³É5Ì&䘽ÑÞ«\ªéïzU‹U½˜*Îå§ò´n‡¹Ì=#¼ÿ˜¸cÈ„„PL gýppN!ažÇ3kÖŒv€hœE{‡˜}:Ùly?³×š­2Ì­üß^ªí…ºfžïU•^ÜÇlÕïÌ>i¶mŽ*FéØ2ÝÛGû7ËâvìØa;w¶™3gÚ+¯¼â~/(ˆ]A|ëÖ­¶páBûè£ì`c§Mš4É-Ïž=1ÿÎVÅÕ©ìKà˜š’k¶q|ä{†¼l999v饗&wåÊ•®‚m—.]lÆŒ6eÊ`ýÉO~b;wî Í—,$¼lÙ2«T©’Ýxã6uêT»úê«­bÅŠUýu) üÏþÓ…€‡ f+V¬pÁßÞ½{»e:ÔU^¿~}¡õ¤º½Ú…Žzè!kÛ¶­üñ¶}ûö¸í‘,$œ¬†îž÷¿ÿýïˆÇi ÌÑû™BÁ;x@Î,~HXû­kWïo™3½JãÐàã,*@yöÕz³ݽðܼkÌöoŽ?¯ÂvšïàÞÛœM›6¹àê-·Ü’tÞN:Y:uì»ï¾ Mûì³Ïì„N°ûî»/4-Y8VË©_¿~h~UÄUöþûïMShYùÏþs[ ÖýáÁÙXëIe{/ºè";ðà …‘5M뉧(!á×_Ý*T¨`ÿûßc¶s²öʽ—éýJïqBHE0r¤:Ef4èhHXaBÂ|›7›ýèGfË—Óàã,*@6Ø2Ýìåºf/Õ6Û6'ö<ßx•‡ýÊœ%àÓO? ö+÷‰q¦ï /´sÏ=7ôw¢pì÷ßïªûvèÐÁ&L˜ºÕ­[×®¼òJ7¿?*þê÷X’…„ÓÙ^µ…¯  ÀM{ä‘Gâ¶Iº!áùóç[õêÕíî»ï.ô˜ í”Iû6x¡`ýBÂ(‚Ñ£½P2ƒÂÁ„„Ä“›k6dí>º½²Å7;½j o{žW›½ÿX‰m‚B©•*U²K.¹$á|Û¶ms×x Ð} ¯ÖªU+ôw¢°¿œš5kZ£F"nݺu‹X—ÿw,ÉBÂEÙ^ùòË/K,$|Á¸*Âk×®ÛΉÚ(“  Î, Ÿx¢÷óŽ;̺v¥MÕ±#ï Žn/€lrø Ùò~^PX¡ºh {š-ê]¢›Ð¼ys«\¹²mß¾=î<ß}÷ ¶öíÛ·Ð}mÛ¶µ3Ï<3ôw¢ð¡C‡\(ùÚk¯».ž Ä'YH¸(Û+%^¾|¹åææºàïŽ;b>÷Dí”I±Bª”¤pf ¯$¬[ûö´ €£† 3«[—vÝ^Ùèíþ^PxûÜÈéª"<½Y‰®úùçŸwáÕ[o½5á|-[¶´-ZDLûꫯ¬jÕªÖ«W¯Ð´D!ai×®p öùçŸÇ]—æÑcV¯^óþ1cƸû—-[w½én¯”dHX¿ýöÛV¥JûÅ/~aû÷ï/ôÜ“µPæìXà…„ðþVHxjÚi!$œY¢CÂmÛÒ&ŽZ°À{Oß¹“¶¡Û [-îãUÞüjýÑiÛæxÁ»o Jlµßÿ½«®«ëÕW_m ,p!YUé7nœ»OaÝiÓ¦¹yìîߺu«õèÑÃ*V¬hk×® -/YHxéÒ¥vüñÇ»åNœ8Ñ lþüù6iÒ¤Ð2.\hÇwœ új{Ö¯_o£F²yóæ¹ûµn-#//ÏöìÙc,´žt·WR «æÎqS…àdí0kÖ,·-W^y¥« ì Ò>@™£ ^ û:KHE0y²(Û»—¶ÈC†x!á~ý¼p¾ £÷òŠÍæÌ¡-@ d«ÃÍf·õnú]V…ám%Û‹þÝwß¹ÐkåÊ•]Õ¿åää¸`íÎJ}¼ð V«V­Ðý7¶7ß|3bYɱ¢ m“&MBË©V­šÝvÛmË™1c†zê©¡yrss#‚²tÓ}S¦L‰¹žt¶WR Ǻi;ƒ´Ãèѣݴ¾}ûF,;HûeJtHXUÐ  MG¾¹ð† ´E&xöY/$ܧ!a±5nl6híBH ›íßìU^9àè´-ÍV>&«?|ø°}òÉ'.HûÞ{ïÙþýûcηqãFW-·¨´ -KëçÓO? …”£}ýõ×¶aÃW 9‘âÚÞc-HûeÂæ—#CÂzÏ"$ €4Î,£G FH@ayyfmÛÒ „„²Ý†±^ØnçbïïåýÌÞhO»(»>í]àà#$ €" $œYÂCÂþïnìX³*Ṳ-€0Ìt7›’kömÙ§“Í&ä˜:@»(›>z62LHEùJ¼€p&Q0ø¤“ކ„Ä™.QÖ¯7«XÑ»²F?ìܹ³5ªL¬ãXlŽI“&¹ý¹gÏžŒ=~ ÛÑu³}Ì&V1[9Àì›fã*šm™N»(›ò‡@±Q8˜pæP0ø¸ãÌzöôª…jßQ-@´ÆÍ~÷;Ú@æûË_þräóÎì‹/¾ˆ;Ï¡C‡Ü<¿+Á7¾TÖQ”íyä‘GìW¿ú;>ÃŽÁculÒCHžGzáà]ËÍf·5[’G›(›¢CÁ„„P„„3‹_=¸}{¯J(û@,ª6Þ¼9í óÍ™3Çîºë.Û·o_ÜyÊSHø¢‹.²'žx‚_Jòóóíü£íܹ340d>BÂ8êÍ.f/×5{ï³—jùf~€6Pö@1òC«VÑ™€0€ &OöÞ¶m+Û³uëV[¸p¡}ôÑGvòç))éaîi”å%$¼k×.«P¡‚}ðÁìÔRòüÃí;ý¿ò€ÌGHG}[`6%×lÎÅ^UáGÓ&ÊžåýÌf´<ú7!aVàeßôéGCÂË—{¿ççÓ."˜U¬h6rdémÃ÷ßï‚U5kÖtá'ßüŸgœq†}òÉ'쨂„Ó äæÙ¸qcV·C¼yK:à—ÉÆŒc­Zµ²Ý»wÛ!ÿ?{wEÿÿ_nSŽå%øC% HT@ ‚P Ê%rˆµq]YÖc=À¿~M!–~wq¾X¢F äܨ²ÖA‚‰¹åïÞŸ¶‡¹Ó“{2ÏGUW2}~úÓ=“LÏkÞ=Mn¹åùýï/ ú­$7»wï–~ýúIƒ äú믗Q£FÉ‘#G‚®{Ò¤I2räHŸñ‰‰‰rûí·»*ç·n»9úÂö›Í›7ËwÜ!uêÔ‘;ï¼Ó| ÁiÈR·÷ä“OJ·nÝÌëÓˆ#òþöýG8”m¦=î–,Y"­[·v|Ü233%..N5j$)))®é[·n5í¨Y³¦tìØQÖ¯_ïwy %?÷ÜsrÓM7É­·ÞjÂøj^Þ:HTT”ߪÆÁŽ™Óãž_óÛ÷‚¶=ØvuÝ-Z´0Ç®]»vf;kÖ¬q½†huá`ϧϧç‹þ9s¦ÄÄĘöÞ|óÍÇà!ax:‘j…—ÕYQ_ä?ÿŸÈñm"¿ìe`(سG$s½È.B£ˆ¤Lù¤×ÕÇ„„P„„Ë]=XCÂ;Átï.2thém_«¾jèé‰'ž0U15ìtìØ1ùðÃåüc‘‡„ýÝ"¾$÷vË[H¸ ýJÐwÆ 2qâDWÑûqi+e‘ݯ<ð€ EN:5ïµ£»T¬XÑ<_Õ®]»¤ZµjÒ¿Y»v­ {j¸Rƒ©ÁúpþüùfÝû÷ï÷ß»wo2dˆãu{û¯¾úÊ,3lØ0ð|óÍ7MPÔi(wΜ92xð`³œn¯}ûö&Tê.”m¶=îÆŽ+ýë_·JÏž=å•W^‘Ç›i;vìªU«šcºjÕ*Óו+Wö[Wü=zôþóŸ&ôZ»vmy饗LU×9`ÀŸªºù3'ÇÝIóÛ÷‚´=¿íjÀW.7}útSUøÀŽž'NÏçPÎý{©ÛÐà³¾ŽièyïÞ½üƒ@H¾~Ͷª ¿ CÑ ‹+‰lj_@aø ÿ;†~@è­è š†Bœš9S¤V-«ªpI[ºt© Ц÷ùÊ6Šª=úEІ JRR’ãã6zôhŸiÚ§-[¶t=Öp¼aŸyæŸåï¿ÿ~³]µxñb3.::ÚT–Vß}÷÷úë¯{¬?Ø1szÜókc~û^жç·]¯Nž'NÏçPΗñãÇK«V€¢@H¾²’E–TYZ]dçãTf(|%á“DÌYÙ\䣶"gÒyž¡àü…„Ý!Ò éŠôC8p ÛoYÈ~øè£’ß¶µô6ê¿üò‹£ùó»=»}{y ù»Õ{ [Ä»/›™×!qqq¦¢£Þ®]·©¡­nݺIýúõeĈy¯±›ü¶ï믿–AƒI³fÍLµJ­:úÙgŸÜ®V{ìÚµ«Ç:4$§ÓW¯^íÚg'Û/HHØÞçãÇËsÏ=gªTÞzë­²|ùr3]«Rê>DEE™¶º+è²Nö9P9é »Ž=j*­êz4ì/W®\ñ»9¿%äÝûkƒVcÕ*§vàжnÝ:éܹ³G¥ÐòÆî×C‡¹Æi?é¸3f˜¾­^½ºL˜0ÁgY=^Ú?ÁhµT=‡lz¼~÷»ßÉ¥K—¯Ûû9píµ×ú,£ËP+÷j222dÖ¬YfÙ/¾øÂ5-”mU{ôuI×e‡P7}]s§ç°tõ|Ö/kØCóæÍMõdïå³²²\ã6nÜhÆ}üñÇ®q§N2ã´B¯rzÌ‚w§mÌoßCm»Óí zž„Ò7¡œ/ .tUŒÖ×I@!®{Ñð|7~^dõM"K«‰ì›E h]ÈIê"òa”È¥Óô &y¸Ègƒ®>&$ €BÒÙo9+”qvHøŽ;8vò-â'¯T¬ì TŸ>}ÍïäöìùÝê=Ð-âÝ—ÕUÏž=Ímè>,sæÌ1Á0­"ªÛlß¾½ ¿jŸ„ß~ûmj9s¦©"h»ûÛßLuJwß~û­™ïÝwß5n¿ !a{™‘#GJ=äŸÿü§ UkÀYs7ß|³é‡ Ã…º¬“}Ô_NúÂn—VáÔsKÏ *»‡ôõ™ûcmÐåõñ† <Ö£mÒs¦<ów~i¸ßîW ¡ªˆ«ý£Áþ`V®\é àêkƒVE}ê©§Ì4§ëvo£Cõw¡„rõ5cܸqæuJŸ×z®é²[·n5ÓCÙFQ´Ç¦•wõË=nî}ªaûÖ­[{ ÷Ýw_Ðåí ­¾Û¼ƒ¶N™“ãž_CÙ÷PÚžßvƒ…„=OœöMAÎ}}¬Q£†ù{§_¦8{ö,ÿÜ@A®{Ñð a»%Õ­*Âç3é==¯4$¼ãÏô FÁ)nŸðm‹#$ €B!h>ì°}§dŽ€`âãEjÕÒŠ‡%·M àjØé¡‡r4¿“Û³;¹Õ»¿`—û²£GÚ ¨ú[^©ÞUFÝùÛ®“À¬Óí&$|ÿý÷»ªã.^¼ØŒÓ*ÏZ‘Y}÷ÝwfÜ믿P—uºÏŽS~}a·Ëü)­Jzã7JÆ =ª  ûkÃÉ“'Moüøñç`¥J•L%Ïò,¿ð£>/µyäŸe5¨¯¡ý`.\¸ ×]wLœ8Q>ýôS³^­Ì­œ®Û½z¬ôw­Të.”P®Vtmܸ±ìß¿ß<^µj•Çs<”mE{ÜÛ¥•º zÜìíV­ZUî½÷Þ—w´uzÌ‚w§m,ê¶;ÝnACÂNú¦ ç‹Ûµ/+T¨ ?þ8ÿÜ@A®{ÑŠš¾aÖ7úFâ§Ÿ~*óm½çž{äwÞáÀ€ú5[dY-‘oÙ<”þ@ñ9¶Iäý¼·#'Ré „Î;$¬¿@!4 vH¸ys뱆ÿ8vÑ;ÑW¯.2~ÉmSoÇî4$ìôöìNnõž_HX«<ú£AÓŒŒ ™5k–Oؾ=½V5¶³Þ ¶}÷ö$$¬U+mvˆîã?vóÑfÙ¢ ë‹@ý áoôèÑ€óæVcÆŒÉû›ZKΜ9c¿üòËR·n]9wî\¹~p~Ôp¸weg=þZ]Zû-?úÓŸLÕQ£FÉí·ßî1Íɺ½Û¨¡ðn¸Ác™Í›7; åÚ_bp¯>m‡„·lÙâÊ6 Ó›ž¿u õ¸Ù´¸~É"XN¡ AÛP·`ÇÝI‹£íN¶»`Á³ÜŽ;Bzž8í›Âœ/±±±Ò¦Mþ¹€‚\÷¢ %}³«ÿüé?qzËýY¯^½2ö÷­´_|ÑŒÓA¿ívýõ×˃>h¾1[Jz{ÔÞ™VHxy]‘ïæÑ(^Ÿ ù4–~@è  ˆÞ!áV­DfϦ_6|¸H¯¼l aZ­Öx÷Ýwç;¯Ó[×; håöÓieÆqãÆ™r³fÍL°KçÛºu«OûÜoEï­ !a'ÛÖ~wB ÑtÙ„„ôE ~Ðãï^¥Ôß¼NBÂëׯ7ã-ZdÂë­[·–G}´Ü¿>8yn­^½Ú<Ž7Ó4ЪÁO=ÞûöíËwŸþ¹ë³`ïJ¹NÖíÝÆçž{Î<2dˆ¬[·Îœƒ·Ýv[À×wD×Êå]»v•ÔÔTsNwìØÑ,;wî\×|¡l£0í±és¤}ûö…:n¶íÛ·›œ‚V¯]¶l™ùB…ƒåË—úyÊùì¸;ic(ûî´íN¶«û£óÄÅřʿzÎ8 ;é›PΗ©S§æ½GK0Y“;wJýúõÍßF@®{Ѽ¥¥¥™àjvvvÈËê7š›4i"Ÿ}ö™ù‡ñ›o¾1ÿ¼Ù·Þ)Ͷù,$¬·š={¶ùGÓ¾…Sq(éí@@W.‰¬j%òÅ«Âë™túÅK«ë¹vr}Ðü;FdÇŸ¯>&$ €BÒ*“MÃCJŠoH8>ž~Ø’%ÖëFj ÞÐêÖ[o•š5kšðg0No]_!aýL¯qãÆæî Ê®&ê^½Ö¾=}+}± ÀiHXbîY'ÛÖ~we5$ì½ÏúËI_ê;p§a¾@ó: k¸½yÞ×¾}ûºöWCyåÓðãÂ… Mhß}FEE™~rBC×-[¶”5j˜u{ËoÝÞmÔjÏ#FŒ0•wu|§Näûï¿w\¹÷½÷Þ3Aa¿mÛ¶²mÛ6óz£ëÓÏ«CÝFaÛ£† &Ï>ûl¡Ž›»M›6™Š³vŸÖ©SG~øáB?ÏC9ò;îùµ1”}¥íN¶«ÇBÇëôÄÄDÇÏ'}Êù¢Õ˜ívèO­œ®ÕÖ¡#$ ÀÑ›y'4¸Ê?û%Ù¶@‚…„õv+ö<ú²~cîÂ… E¾O%½½H¢4ô‚Š^D)«Õ¬ívÞsÏ=òÎ;ïpÐPºŽ|d6w¿`……’ÔÅ3ì 8ña”õZe#$ €B"h>ÒÓ­°ßoÅ5%&†c ¸K—¬×ù±cKn›ÂÓÏ~þøÇ?æ;¯“Û³; hù»E| eõ3)ïp—Lݲe‹Çòz{z¿gÏ¿í÷·ÝçŸÞŒ³‹þèç  ÓqúYH(Û—p~û¨¿œö…Ý®¬¬,}ïÕ«—Ü|óÍAûÌûq sEÇúùdŸ>}Lp¾ôó>¥µn­«Õ¾ B?¶?›¶Ï×ô¼²4ØZÐm´=úe €j²¢¦ý©ýê½_eé|(î6t»çÎ3焞ÅÑ7NÏmŸ¶ƒÜ!a>oä[´haÞê·“õ àš5k\ÓwïÞ-ýúõ3ßþºþúëÍí!Ž9âú^oñpçwšß ¶» º]ý§PocѨQ#III Ú6½ÝŽnW¿•­·DÑ[âø³yóf¹ãŽ;Ì _ß\çVú ^ï7úO>ù¤tëÖÍì·¾Ñ×oÞÛ¦þÔ¶êºÞxã ÇÛ›8q¢ôîÝÛçŸp½‡Î›ß7Ñ#‘ÞÂI/¬ißê ýY¯^½2öVw?7tÐJú|yðÁåÇä£xì|BdÍ­"[îÏ{aK d|7OdE=‘ 9ôœÓ/2쉿ú˜0 ‰pø°CÂ×üö W¯^;ùKHÑ"¯”Ìöôó­ÌißR=99Ù„zµŽVêÔivèÖÉíÙ„„ýÝ">в:M+‰víÚURSSMøU?_ÓùæÎë±/úYšV|ÔÏ\t?äu¢†^õó¯@Ûµ?{úé§ÍgYC‡5ŸgÙÙP¶.!áüöÙæÝ_çÏŸwÔv»ôN¤_}õ•œ={VæÍ›gŽwšüBÂÎýlÍþ\jΜ9¼p Dèó«nݺ®ó=BÂýÖ·;}s7B¡^š4ib¾uªo*¿ùæ™:uªœ8q¢ÔÛæ-¿°^0œ={¶9Þö  È]¹$ò¯†VeN­ÐùÍkô JÆ¥Ó"Ëj‰œO_À9BÂ(b„„Ç¿ð /Ð/ò×¥‹È„ %·=ýÌG¯ók;x©CõêÕMØýó…ünÏîôVïÞ·ˆ´¬ÒÏ¡4œªÓÚ¶m+Û¶m3áe êçîô3½fÍš¹Ú§Ÿ¿,_¾<àvµò£VAÖÏåtÐÏ÷ôs>þî»ï†´ýp ;Ùç@ýå¤/´]úy¨Î«Jû\š6mšOät®¨˜˜©Q£†©ò ”ýLÿóÏ?§#(F„„øÐð­¾!ôÙöíÛ×¼Au¯¬M5«u•Þæaüøñfy}©_ @†²ûêèÑ£µM×Ù²eK×ã3gΘí3Ï<㱬†‡µ«{{ôŒ®oòäÉ®qv0S«þê­œô ²V2Ά…½Û¦Õõ »ÞŽÃvüøqm:Ùž~‹WûSûֽߴº¬^8Š´s1?öqõÝ–…¶ù“_HØ®2­óµiÓÆ|»›[ª Èe¬y?ï_Ãã;EWÎ{"¥Ð'(9Z¹z}wúÎiH8ÍíBÂ($BÂáÃ;$AÉùa‰Rÿ5›¾€3Zùܽú4!a!áðáÖK¾„„85|¸HÛ¶úÙ}xûä“OÌçR>g@x"$ À‡¿°†$½+îÚ4Œ«!KozËš{î¹Ç,§ëtºŽ`· òn›½N G¶nÝÚc¸ï¾û\Ëé7ku>ïêÂÁBÂv0S¿…kBŸîßü=v옌7ΟõK:t0ËiðR=zÔ<~ì±Ç‚nÓéö4lªó-Z´È®u}ôÑr{jøUoŤû<}útsì8 »ví2Áðþýû›Û:é-4Œ«^÷o¯ÿå/1ËjxV¿¡ïÍÉzìsqàÀÒ³gOS[S ¶íرÃÃxà”×êÕZÕÚý¹ôÕW_™í6ÌS­@}ÓM7åÖ°³{]ŸÞJÊ6gÎóüÑõè>´oßÞœ‹Þ4¼®»u×­[' rË-·{Ååpf÷¿Zµ[ƒä>ø ©â]îœÍ°‚ÁG>ùæ5‘5·r d]ȱÎA÷Ð'Œ†Êÿ›põ±†„µ"5P@QQ„„ÃÅéÓWCÂú»„Çòv€CZŸ¦^=‘I“è ÀÛ€òþ'Š ëJÎðEH€!a (jHî‘Gñ™_«Þj5U4è«ËiÈÒé:B kàVC™÷Þ{oÐ}:yò¤YNƒ™îœ„„URR’÷þûï»ÆiEׯËþýûÍc …ºWÖý­X±¢ôíÛ×c›Zy8XH8Ðö´2±VHÖõé-©túÎ;#î\ÔýoÚ´©G…` mjV+êÚ4l=~üx³|5LÀWw(ë±ÏÅÑ£G;n[Ë–-]5ä­¡^÷pº‡5lêÞ %û ÐÛç†Vý­]»¶©¬•ŒƒÑ°°w»”VÛÖçŠ{åi½åU à~y‘––fú1ÐíÏ‚±ûñâÅ2{ölÆÖÇwÝuWùë¨=ñ"+êYÕƒ·ÜOÐ¥ã³AV5kÀ !áJ‡ àzõyúiú!\Ø!a­*¬—YccéÎ-Zd½†Ì›G_îô³ýLå !a>,X`‚pZÕ]tt´O…ÒS§N™ðâ˜1cü®ë—_~1Í?üáŽ×,$ì¯m=zô0ÁΟ~ú)è~5lØPn¸áq›7ov^¸p¡÷¿ÿû¿æ±NÓÇ3fÌpÍc‡„·lÙâ×¥KìÔªÃJƒ¡’Î/$ì½=ÛsÏ=g‚Ç}úô‘N:•ûsÑ;ˆ«ß\ÖÊÍüÜ?P+kpÛ› Wëzúõë'çÏŸw¼û\ÔŠÕùµMCÜZ!XøK—.u ºm —Ú®½öZŸíú «»ŸÚ}~\wÝu&PÿŸÿüǧ=>ÏÈÈY³fy„Õí¶i@XŸ+N¶[žÏ¡Px?7µ¿Ú´icžƒB/W›ˆ¤þvha­& ”4=ï–ÕÊ{±ç^p@CÂG“®>Ö/7@!hHxÿR† ÷°V€Öã¡xâ ‘Ê•E>úˆ¾ÂMF†õ?€ZËiýz‘={Döîe```>üú+¯¡"ô: ]ÀÛÑ£GM...Î|[TÇjõêÕ&0o¿:ߨQ£L¥Ô}ûö™à¢.£!Ù³gÏæ½1K—‡~Ø,³dÉGëPÁBÂþÚ¶}ûv3NÓ˖-“œœùüóÏeùòåËjÀV׫•\×­['/½ô’ÜvÛm>•Tí` ¶ùã?–üã&œ©нúŸ£XL­BÛµkWIMM•µk×JÇŽÍrsçÎu­KÇkõd J>\n¼ñFyüñÇÍ|º§Û³}ûí·f^æÌ™SîÏE†uU¾Õ nƒ ü®GÏ¥{î¹Ç,«ëtºžPªZÛë¬_¿¾´nÝÚc¸ï¾ûÌíuêt (»ÓP¥ø*T¨`æÑpÞ÷ß°’°=hðïî»ï–O>ùÄc}ï½÷ž ëé²t¼žPB¸Õj½÷Þ{oÀ6h°]—6l˜Çx§!a•””dƽÿþû汆V7n,ûõ«Òrµ¢µ{%aÝ_}NöíÛ×cýv/Ï!a ðŽ;ÖìãôéÓÍ1;pà€™¶k×.Äïß¿¿ óëk‰ý5jdn§åÝÿÚ‡‹-2_hÐç¾MÃú,óÍ7Í:Ú·oïS-]éñЊçº=ý’BBB‚ÜrË-e£ÿ?”÷Bõ[¹ kðî|&Q:VµÊû‡bý€àÎfX¯UÇ¿¼:N_Ç   ‡÷pB‚ €PiœI“¬× ëk €â¥7ï\¹Rä…¬ÿ¿jÕºúw]ÿžÇÆZÿ“éG'3gZ絕†ˆíA?ê¡’0•„ „ë(t€@Î;gªçææúLûá‡LUT4P™œœl* kEá@‚­£ mÓõéz¯\¹pY ×jÕ×¢ áN÷§¶GÛlû0Ô`à|P mjq̘1qj%Xí«;v¸ÆEGGû„0O:%µk×Ú/Z¹ZÃÕøÃ¯'XHØ_Ûzôèa‚ ?ýôSÀv4lØPn¸áqZaÖiHXCö:NÃ÷:^Ÿ1c†kºÖŠÞîºtébÂóR·Ï] I—ç°òsÛ40­! ÿÚ~üñGsü´2°{ÿkÕ_=/´ÿRRR‚nOÃÂþ¶×»wo"××.ÛñãÇV´.1§X•ƒ&YÓYÁ; ´l‹»Z9“n½VéO!a!áðBH@Qš?_$*J¤re‘¡CE-Ù¾à!CA}ÞèóG¼ú±Š>§4ë­ÖóLƒÁZ%ø‰'¬pZšÚ@1]G¡  øhPpùòå&”¬¡L­ ªáÔV­Zy„ÒêÂ*ÔÊÉ‘àèÑ£¦n\\œ©Â«•oW¯^mú >>ÞužQ£F™ ¯ûöí3Ëi@]—Ñ ¬Õ5¸­•¥u¹%zµ!“õ ûkÛöíÛÍ8­F¼lÙ2HÿüóÏÍ9`{î¹çÌ:‡ b·—^zIn»í6¿aQ;¤ªmþøãåÿø‡\wÝu¦îÞ½{Í65èÚµkWIMM5q5D®ËÌ;×c]:M«'kPzøðárã7Êã?næÕí”WþBÂâ¯^½ºLðóÉ_·nÝLuf÷þ×ó@ƒãÚ÷zlõüò¦Ç"##CfÍšåSÉY¿< a ‘» TAºD%ù0*¯S~»ú–š×–•ÍyñFéÙ?Û ®_>O_ 0BÂ(ƒ'î!a 5çr€BÒ€¢~é@CÂõêq;v†¢ôï´þ¯õÚk"_~)ržË¿%{….€â“˜˜hB™¬Y³¦ùÙ®];&-ˆHTTTÐJÅåͳÏ>k*¸jßi*­¦Û A3Ní“7º–IKK“&Mš˜iÚÕŸuëÖ5ÕwÝå·ž`!á@mÓw›6m\ëÔéP¶9sFFŒ!*T0Ó;uê$ßÿ}ÐJÂöP¿~}¹ûî»MXܦ•©5(¬ÓÛ¶m+Û¶m3AV]ÿâÅ‹=Ö§Ë9ÒœG¯¿þº©*l‡`Ë+!a íªà;xð`sN¸÷¿]ÉùÂ… kžËz•öá¸qãLè¸Y³f¦:µ.³uëV×:5P®ã{ì1m•zHXÃuÆüoÂÕq›‡Š|Ë‹7JV·Öðçñ/é äžœÍpû#GH…£aBÂáÃ=$¼aƒõ;¥C‡¨$ÌÀP•„© P®£ÐP¼4Ы•l“““Mذ0ßììlSµ6Òœ;wÎô¡Vdu÷Ã?HVVVÀå4Ü«ý®•_µ¢p ù­§ mÓõézo­2¬aÕ¢ aS;Ȫ´-Ú¦üÎ5 kHõƒ>(·çŽ¿°VñÖªÊ<òˆÏü°Ö ¿ò «¤¤$3îý÷ß7µêpãÆe¿^éʳjÕ*ŸJº= «÷íÛ×c[Z}¸TCÂ;Ÿð¬"¬ÖÜ*òå$^¸QºþÕPä»yôËJ¶BÂî¯_Þý}€#$^ªU³‚Áz{r½é!aÿ¸l@ÐìòåËM0YCÅëÖ­“èèhiÕª• ±–W ,0AÜ;vxŒ×}ת¿îN:%µk×–1cƘÇþBÂZ}ZÇiUj¯¿Ï˜1Ã5Ý oÙ²ÅcÝ]ºt1U¥µò°Òc !åR kÀλŠðåóÖ¸ý³y tmì/’<œ~@`Ç6Y!awÞOß À4 ¬·˜GxÐÛ–k0XÂ))ÖïܺÀ!a"@bb¢Ô¨QÄRkÖ¬i~jÅÜíÛ·—ëý>zô¨©âgªp_úí¾V«W¯6}/¿üò‹™oÔ¨QR¹reÙ·oŸ™Ç /Y²D>þøcùÇ?þ!×]wT«VMöîÝkÖÕ´iSéÚµ«¤¦¦ÊÚµk¥cÇŽf™¹sçz´C§iõb=Ç—o¼Qüq3¯n§Äý;F$©‹gΓû¬Ð†ï€Ò¤Au­r BHÅ@C½zÑáÂ=$œžný®?à‰0âÊ•+’žž.ÉÉɦ ®>ŽÏ>û¬©â«\ KÛ´*pƒ Ìx¢¢¢dãÆ®évHØêׯ/wß}·|òÉ'®yÞ{ï=ÖémÛ¶•mÛ¶I÷îÝ¥B… ²xñbvèr#GŽ”È믿nª ër¯¾újÉvȾYV¸N« »;´Â>“' JWæë\¼tš¾€é‹|CÂúåBÂ(„I“ ‡BÂÎÊ«Ü_E~ÙËÀàÈÙ#’¹^äÔ~‘3éW÷ª¢@9rîÜ9ÎÍÍõ™öÃ?HVVV×}ùòeºv½üæmC·•_[ÆþàƒJ®#rÒD–Õùr’ï´½3EVÔãdAéû5Û €ÿ’¾€ÿM°^ËÜiõiBÂ(„øxBÂá䆬`pR’ÈéÓÖï_ò6À!a ¼Ò ¨l :ü«¡ÈªVVe¾ýER&ˆì~Á æd§ˆ\Èáy8tðàAY¾|¹dffšPñºuë$::ZZµj%/^,™FèsVCtµõÿüÕçxRÊ=W¿y~€Z]ÿGq§   ‡—V­¬`pB‚õØ®* O„„òŠJ ©$œ•,rl“5Za‚µºè®§E¶ŽYß]$±ÉÕ ±r6µ‚\T|JLL”5j˜ÊÁ5kÖ4?Ûµk'Û·o/™\>/òi¬U)øä>ÿóèó[ƒÂ@Y s’‡ÓðOÃÀ„„PÄ ‡BÂ΄îÒi+üÝ<+T¨Á k€xËýÖø£I"9»­0²†’ g—ÿ ùùLžA\¹rEÒÓÓ%99Y>l—­¬ÕÀ—V·ª€¢ÕÃõ‹@Y _>Ys+ýÿ  hH¸{wú!\x‡„kÕY¹’~ðFHP44$ªC­þ¨·‰_\ùjÅa†È´b­¶´:­T5L®U©X"r"Õªl‹’y^jÐRŸG> <߯ÙÖq "J’ž¯zNòZôÞ!rBÂ($ ·mK?„‹èhϰ††íßp!a@ñ9ý_* GR%áœ4‘c›¬AÃÀ×ÀÖÎ'¬ Ók£­jµüÓЪ>ÖiÔj·(ZÚÿZÝ{es«òw0ÖãÂq@Yqê€uNêë àM¿xò‰×}   4$ܪý.zå½%¨ZUdölë±»ùóéo„„@É:Ÿ)r4É s}{µê´þ~p>AÕÂÊX)òï«O5H§U‚ó“¾È peÅ•K"K«‹ZA_À!aƒiÓ ‡ שc…»ULŒu à‰0(]—N[¡ámq"+êYÁ@ ¥M³Æçì¦"u°JÎYÉV¸zÇŸE>Œ²B×û[Úõ´,Ê’5·Z¯€7 ëKÜ@!Í›GH8œhH¸V­«!a}Ï[„„@Ùqù¼U9ôËIV@Ю2Ì|Hl"²y¨¨<“z¿k@XCÆ@Y’<\dËýôüŸ[ÇzŽ#$ €BJH $N¼CÂýû‹L™B¿x#$ ʶÓÿ¥’p°J¬.,­àœ¾ˆs eËîDÖFÓð¥Õ浚°»eµDöÍ¢oP`„„ˆ„ëÖ½ž0Áà‰0@$û5ÛªFœB_ lùo‚UMüÊ%úžü…„õuLÏ €4$ܼ9ý.4$ܤ !a€üˆdYÉV¸îB}²EƒëznžÜG_À“†„µÒ´;BÂ($ _Ã'&aÃ;$'2v,ýàK^‘lïL‘ÚÒ({ì*×G>¢/àim´ÈžxÏq„„PH„„ÃKl¬gHXjpž¸äÉR&ˆl¹Ÿ~@Ùô¯†"ûfÑð´ª!a9BÂáE«7Ì{Ë8eŠõ˜0 ,ÊÍÍ•{î¹GÞyç2×¶åË—›¶3ënÑ¢…iG»víÌvÖ¬Yã֪ƽ{÷–ÜÜ\u®[·N:wî,ÇŽ ºß»wï–~ýúIƒ äú믗Q£FÉ‘#G|ö÷ĉ2mÚ4¹å–[ä÷¿ÿ½$è·|Ѝ_µ O>ù¤tëÖMêׯ/#FŒÈûÿn“O¿ûë 'Ë¢}6sæL‰‰‰1Ççæ›ov»@Û v¼ÿþ÷¿K×®]=¶‘ž÷ªÎ¿zõêo§ë Ö6'ça°þ¥‡0@¤J™ ²y(ý€²++Ù žÜG_Àrù¼uNÛtuܯپã€/ññVHxøpÏã@iùꫯ¤Zµj2lØ0ž|óÍ7妛nòö®âk?8p ôìÙS^yå9|ø°™¶cÇ©Zµª<ðÀ²jÕ*2dˆT®\Ù£Jì®]»Ì¶50úöÛo›P¨5µM€;v¬YÿôéÓM•Ùx´A—Ñß7lØàÑÎÁƒ›öco»ÿþ²víZILL4R —fgg{ìŸîƒW§N*Ý»w—Š+æ@vÚ¯sæÌ1íÕéÚ†öíۛ଻@}ádÙ@>üðC³óæÍ3ý§aܽ{÷Ý^°ãý·¿ýÍ_wß~û­™ÿÝwß-ðñv²Þ`碓ó0¿þ¥‡K&‘êÃ(‘Ô)ôÊ®ó™Vøóh}ËÙ ß@ð™tBÂ(4BÂáÅ ÷êåyüΟ§o¥CC“ZE÷òåË®q’ÕÀåäÉ“=æ =z´Ïzûöí+-[¶t=>sæŒ g>óÌ3®q}úô1ËñÅ~Û¦AQîètoÃÉ“'¥F2~üx×ôüQ*Uª$ . ºßÚ¾¦M›ÊÅ‹=–­R¥Š©Îë¾­»îº+ïoµõÇZ­:NÛVTýêN¿Þû¨/œ.ëöY«V­NÖ÷þŽ·“0oAŽw¨!aï¶99ô(„„"‘VÞ\\™ð%ʾ¥ÕEöϦ`ñ&$ €"šJH8œx‡„ÓÒ8~€Òuíµ×Ê„ <Æi°5”J™™™óåææšŠ±½{÷–¥K—º†æÍ››Ê·îóhå^ýÝŸüBÂj̘1R«V-þT/¿ü²Ô­[WÎ;pŸ¯\¹"Õ«W÷ÙoÕ­[7éܹ³Ç¶:äšž““cÆÍ˜1£ÈúU]ºtI222dÖ¬Y~ƒ´ÁBÂù-놨íÊ»ZÅ7”¾÷>Þ*¿0oAw¨!a÷¶99ö(„„"‘†ƒ5Tw>“¾@Ù¶æV‘Ý/аœÜg½v:pu!a —2 Þ!aŽ 4eee™`¤wUÕPCÂöc›5u|ýúõ¥uëÖÃ}÷Ýç1ýØ'!áõëכNj-2á_ÝÆ£>t¿ímû«è«áÑ Ü¿_~ù%ßp(ýzìØ17nœ -7kÖL:tè`æÙºuk¾}átÙ@æÌ™c*1W¬XÑTO>{ölH}ï.¿0oAw¨!a÷¶99ö(„„"Qê‘£è”}Ÿ Ù:–~€%+Ù k0ØFHE€ixÑp£F"11Öc-v§Ç/%…¾”¼“'Ošå°aÃ<Æ6$¬ËW­ZUî½÷Þ€Û¶çiÕªUÀyœUµZ¬V†íÛ·¯lܸÑLÛ¹sgÐý¾xñ¢TªTIyäŸiÝ»w—víÚÜ?'!áPúU«7nÜXöïßo¯ZµÊq%a§Ë£Aã‰'J… äñÇ©ïÝù óîÛ·Ïæ-èñÎo½ÁÚæäì³.;è»eË– }ʲNÄÆÆJ›6mBî{ÛóÏ?o¦egg›ÇÞ1b„÷Î;ïøx;Yo°¶99ô(„„"Í•K"Ëj‰ìŸM_ ìÛ;SdU+ú–Ì V øòù«ã  Ø!aB¦á!!ÁH8)‰¾” Øj¸rÈ!²nÝ:y饗ä¶Ûn3ã&Ožì1o(!áíÛ·›à®Væ]¶l™äääÈçŸ.Ë—/wÍ£aV­ØªÝääd9pà€ ~j˜V=zÔ¬#..ÎTç½té’ßm~ûí·fœsæÌq´ß«W¯6óÇÇÇ›à¯nkÔ¨Q¦j­Vª ´NCÂNúU÷§iÓ¦ÒµkWIMM•µk×JÇŽÍž¾  >ùäSvÿ”+„„"ÉåóVáo^£/´âõâÊ"+é ˆì‰YÕÊs!aBÂáECÂz¼®qû”+:Zä…è jÀ€å¨z.Â!a€Hr4É ÓH¥/>V6Ù7‹~!a›œBÂáÄ_H¸W/‘ è *;;[Nžü…„ããEZµ¢oÁ]º$²aƒÈ /ˆ *Ò¶­HõêWÿ®000”­AƒÂ ×¼èPÖiwìØ±&Ø;}útSUøÀ²k×.©V­šôïß_Ö®]+‰‰‰Ò±cGàÍÎö¬–{úôi©U«–<ÿüóæqÏž=Ͳ'NœpÍóꫯšm 8ÐLå•WäðáÃùN›3gŽ ú"Òý;F$uŠç8BÂ("ZEpxp gdXã^{Í ~@$Ú±c‡T­ZUxàYµj• 2D*W®ìq==¿b¶/¾øÂ\c×âz7<½–~Ë-·˜kÞS¦Lq¼½`…7J’€»t±þfÄÆŠ,Yrõo  €°à¾råŠT¯^]&L˜à3¯VBèܹ³Ç¸îÝ»{Tí=s挩,ܵkW×8û¢¥V6ðlšíÒ¥K’‘‘!³fÍ2óêÅTÛ˜1cÌöt»êå—_–ºuëʹs犿ó®\ùWC‘mqœH_=šD?Dº£DöÄ{Ž#$ €"¢Uhµš Ê>÷púoo4à} ŸzˆPZP£eË–®ÇzZC»Ï<óLÀe¼‹]Øz÷îmÀî×®?næúhÉt^ÆJ+@w"• áKƒîÿM "ݪVy/ê³=ÇZa½ÆQ)…¤!áøxú!ø ¯Xa=¾t‰þYrss¥Zµj&Ü»téR×мyss­Ü[°bº. ÷èÑÃc™Ë—/»* ;Ýž“ÂÅ%9YòÚ#Ò°¡õ÷ˆd„„@Xð _¼xQ*Uª$<òˆÏ¼Z5¸]»v®ÇzáòÚk¯5·lÆÏ˜1Ã5Î oÙ²ÅcÞçž{N*V¬(}úô‘N:•LÇe%[á¹£IœDoû‹¤N¡"¾ž@1!$>4l‡„°ÆéOBÂ"‘^ÛÖê¿÷Þ{oÐùœ»Ðâz [‹]¸ÓêÃvHØéöJ#$¼d‰Ž‹£²<`ã“T´‚^œŒ‹‹““'Oš‹’«W¯6ãããå—_~1óŒ5J*W®,ûöí3Ë}üñÇ~»¶iÓ¦™é:_ABÂÚŽ¦M›J×®]%55UÖ®]+;v4óÎ;×cÞo¿ýÖŒ×aΜ9%ÓqŸÆŠ|ÔVä WDævüYdËýôC$Ó×1_z $ €"BH8|¸‡„7m²ÆiµH}œšJÿˆ<=zô*UªÈO?ýäwz(Å.ºté"uêÔ1•‡•†‚õŽ~vHØÉöTI‡„µ¢¼„'M" ¸ã“T6ž}öYsqR/,&&&šq .” ¸Â·QQQ²qãF×2Æ “ÿ÷ÿþ_ÀuêÅQ >¼@!aõÞ{ï™ °NoÛ¶­lÛ¶Mºwï.*TÅ‹{Ì#5jÔœœœâï°c›¬àÜK8yþöÄ‹|Ò‹~ˆdg3¬×4}msGHE$ï-=!á0á/$¬¼@¤Ø¾}»¹Î­×¥—-[f®?þùç²|ùr3=”b:­R¥Jæ:¶^7¿ñÆåñÇ7ó¾øâ‹Ž¶§J2$¬_iØPòÚK@ðÆ'© ¬œ;wNÒÓÓ%77×cü?ü YYY¥Ö.­¦ c›¶OÛyåÊùôÂë˜1cJ¦QI]¬*Â(ö϶ªb#rI'$ €bÕ«!áp,$¼bý 2mÊ{AlÓ¦« †Üxøá‡]ÓC)vñÉ'ŸÈÈ‘#eÀ€òú믛ªÂºœn¯$C±±Z CäôiÎÀŸ¤”½°ªE7•DI›´i"‹+û†é€p¥±›Ð‘ìä>+ œâ9ž0Š!áðáÞ°áêøzõDæÍ£D6-¦¡E5¼ X(§Å.¼iÀX¯mðÁ!m¯$L™"R«–õ·€/>I(!Zu!**ªø/–f%‹,­.²'žNGù¡ÁP ‚^>O_D*ýÒƒž§xŽ'$ €"BH8|¸‡„-º:¾U+Ž!ÖÁƒeùòå’™™iBÅëÖ­“èèè¼×ØVrñâÅ2ÕÖÔT‘Ê•EæÏç¸ðI*@ ÉÎΖ“'OïFÎfˆ|%òI/‘KÜ[ åÈ™t+ª?™ì°÷9@HEDCÂO|ØcÚÏ?ÿòúxàÌ:uªtïÞ]*V¬(ÇŽ3óhØxìØ±f¾éÓ§›j¿ð»ŸÁÚ·cÇ©ZµªÙÖªU«Ì~W®\ÙU58Øvþö·¿™yÝ}ûí·fÞwß}×qßÛÏ?üÐ<ž7ožlذÁ“÷R”".•é‹D–Õ¢"ÕÖ±"ÉÃ}ÇkH8© ý€B#$^´š¤w%á•+ ({´Z°f5ÜšžN–…£¢¬JÌZ¹¬èÓ§ ~ñÅ~§÷íÛWš6m*/^tûñÇ¥J•*¦J¯SZÝWÃÆÿó?ÿã§•p+T¨`³þh¸WÛf‡h•v=z´ÏüÞ!áPÖw×]wÉùóçÍ8 Hë8 éÚôwïeý Ö>íË–-[ºkõd þ>óÌ3ùn'”p°¾ ¶ŸãÇÏû…¢ ìàR €ðpl“Èûyoa®\¢/"ѧ±V5aoöWa‘„5p„ð`‡„Ÿ~úê8½ó¹†„C(ÈÅjæLëuiÊ”²h w©©VUæÙ³ËF{rssMpW«ëïÞ®\¹’×Þêyÿkø^ÛêÖ­›tîÜÙõxÅŠ¦±¿áܹsfžaÆÉM7ÝäZ&>>^~÷»ßåcž'™>ÎÈÈY³fù˜í°k¦Ÿ’ÌBÂNÖwèÐ!×8 4ë¸3f¸Æ…önŸÝ×Z9yéÒ¥®¡yóæ¦Úq~Û %$¬o‚íçÂ… ]•ˆµª1@i#$ ZA¾¬TkîÑ£‡ ŠîÙ³Çïôè¼?ZZ×Ý©S§¤víÚ2f̘·÷§?ýÉT 5j”Ü~ûí®ñ‡ö ¬Ú¡Þ-[¶¸Æ9 Âf}þ³ ,0ãvìØtÿ‚µOûºJ•*òÓO?\>Ðvžþy3>;;Û<ÎÍÍ•#F˜qï¼óNH}l?ÝÅÆÆJ›6mx€RCH@øX\Y$}ý‰›ˆôó‰OÊBÂ(Zí‘pøˆŠò + /âm#€R'Ò°¡õÅ”ÌßïZµD22J·˜ÕбNNN–˜ÐéæÍ›ÍôÕ«W› i||¼ •=zÔ|µª­V² ÕçŸn֧üyó\ã/]º$M›6•®]»Jjjª¬]»V:vìhæ›;w®k>§AØÂ¬Ï_xV÷»bÅŠyÏ“89yò¤Y¿?ÁÚ·}ûv³­Â¼lÙ2ÉÉÉ1ý±|ùò|·£ÇI×ûôÓO˺uëdèС¦RrQ†„§N* &ļsçN©_¿¾ <˜'+(5„„„­&»6ý‰´Šô|Ç@‰·B§Ý»û kP¬,T”™’“­Ê¶+WÒ%I¿äcUq.M mÖ¬™+¼Û¤IàêÂ… Mõ_{zTT”lܸ±@Ûºr労lÙRjÔ¨aBªîÞ{ï=ìÕm´mÛV¶mÛfµb^¼x±™'” lAרÂî³Ï>+uêÔ1Óýî_°ö©M›6™ê¼v_êú~øá|·£ý¦•›«U«f†±cÇÊîÝ»Í<ï¾ûnÈ}ão?µÊ³½]ý9zôhÉ(í;ˆh„„„õÝEöÄÓ‘HC™~îLHEDC­ZÑáBa:Ôs¼VŽçm#€R¢¯KƒÑ%Mó—Z½yøp­¤[úí9tèdggœþÃ?HVVV±¶áòåËrøða×ãÜÜ\IOO7!Ù²°¾sçΙåu=…¡ý¨ý¨¶süøq9sæL±õ¿¶G·{áž  Ô>6öIB?Dš_³­ð±M¾Ó  ˆ/¾í6ë§÷ø)¼mP ´zð5׈|ù%}Q´Š³V“Ÿ4©l…€²‚0€ð¡Ð” ôC¤9“n…„OîóN@ $^ìJÂÞ!áþýE&ð¶@)èÞ]dìXú¡4-Yb…ãâ 6BÂÂÇŽ?[Õ„Yì°þôFHEäµ× ‡“@!a ÷çm#€¶i“UEøÀú¢´­Xa… ÉÈ ?B¡ÜÜ\Ù¿¿|ñÅòÓO?•ù¶ÞsÏ=òÎ;ïpà„=ñ"ÿŽ¡"MV²>Ÿé;0ŠHB!ápk…„»tñ¯Õ#µš'”$ ¤ÆpɪÌHNiÞ\¤aC+4 D2B‘o¿ýV¢££åšk®‘Š+šŸõêÕ+³aáË—/›6N™2Å5îÅ_4ã6l(—üÜ‹KƒÅM›65ó|üñÇt%oïL‘Ä&ôC¤9¶É _ñsŸH o¹Ÿ>@¡/Z1XCÂÞÇì…D¢¢èW-_¾ÜÌ8yòd±¬?'G¤re‘%Kèë²$;[døp«Â³†¸©ò €HEH7iii&(›­WBÔ¹sgiÒ¤‰|öÙg&`ûÍ7ßÈÔ©Såĉ¥Þ6‚…„uHJJòYfÆ ®é„„”Šÿ&XaQD–ôE»†„u ‰pxÑðïï{̦Mã8åÕ«¯¾j®MÿüóÏ%²œSúº£kýÔÝ@ðÑGVÕy ÷ïo…¹32èD>]ÀÍ[o½e.²Â¢¿fÓ‘DÃáÿjè!aBÂáECÂz¼¼™ÇZµè <Ò"'N”3g΄´\q‡„›7™4‰ãSÖi]­(\¯žUù9&FäÏ™?ß §¦Šìß/²~½Èž="{÷20”á×_y€‚#$ Ào,X -Z´0 Ûµk':u’5kÖ¸¦ïÞ½[úõë' 40AÙQ£FÉ‘#GÌ´‹/JýúõåÎ;ï4¿lvt»™™™'5’””” mÛºu«Ù®{;vì(ëõ –›7o–;î¸CêÔ©cæß²e‹ßp³fÍL»êÖ­+¿º]u8þ¼Yö©§žò ë~=ùä“Ò­[7Ó#FŒM›6ùô¯¶;++Kþú׿šýiÙ²¥ÄÇÇË•+W8ƒ°+<7lØÐT©ö–››+M›6%¼È“f…„ϤÓ‘dÿl‘UÒ[Ç@‘ $^4$|ÓM¾ÇLC`Z-’ŠžlÅÖ`©¾æ¤¤ÐÏáBÿ>lØ ¢ *Ò¶­ÖãÈÀPV !a~£A×±cÇš‹…Ó§O7•{8`¦íÚµKªU«&ýû÷—µk×Jbb¢ äjˆW««¿üå/fY Ê~ÿý÷>ëw²ûbåÀ¥gÏžòÊ+¯ÈáǶmÇŽRµjUyàdÕªU2dÈ©\¹²Oµá¯¾úÊl{ذa&Düæ›oÊM7Ý0$¼råJ3MÚV¬X!×]w|úé§>aÔ9sæÈàÁƒÍzu¿Ú·o/:tðhƒ½oÚÆ>}úÈÔ©S%**ÊŒ›1cF¹?¿ÒÒÒLÿÚÇ:vHX‡$ý¤Ë‹Vа§F¹w6à ÿ’¾ˆ${âE’ºøŸöi,!a kuA„ k°«¡×MG’“­0 ·’Jž3˜9s¦ÄÄĘ¢7ß|³)‚áÎIÑ‹`Å4t|NNŽ™ÏIñ Uœ!á§ŸiÒ„/&”zZQI˜J <"$ € ßêÅBïmß¾}M¥V÷*Á?þø£T©RÅ\„T.\ñãÇ›åkÔ¨a¾—/_iöÅÊÑ£G;j›®S«ñÚô6k~æ™g<–Õ`®V.vo†Uu}“'Ov³CÂZAX«kEaÛСCÍY»q°0ª†…½ÛjïÛK/½ä§Uqo¼ñFS!·¼Wtn9¡Ç¥^½zæÂùƒ>è3ý¡‡2Ç—0"††„m¢"ÉÎ'D>é嚎'$ €" !ákøÔ$lØ!aïc¦ßù×q_òÝR Ä}øá‡R±bE™7ož)lð÷¿ÿ]öº•¿tZô"P1 ï°¯“âîë+ް„ãã9öÊ..wàÆ_SëիW— |HZ¡ sçÎãôâfóæÍÍzúõë'çÏŸw¼ûb¥VHȯmZ•A«÷îÝ[–.]êtÛzaÔݵ×^ë³m ª$¬4ŒªËiðX+3èÅ[­Â,$¬¡ßŒŒ ™5k–™ç‹/¾pM t!VÑ:þèÑ£åö¼Ò -Z´0ûÙ®];SíbÍš5fšV»Ðó¤Aƒ&è«Áì#GŽx,oV·n]â¶éù¥î§žzÊã¸8©¢aWÞÈÊÊ’¿þÿìÝ puÚïñ‚†—}QPs%x‘eX†%J` J ¨ "áÖŠ¼(òŠ 5h Q±FT b‰NX®€ ²  0,B€€È€Œìƒ‘]ˆð\žÛÇ““³t 9Ë÷Su*œÞN÷¿;N÷¯ŸÿSO™uÔÐyjjjć¶æfLj˜O;D kÅ`o4$¼im€«FH8¼ø çåYüPÆ´ˆF£F|ŽwZôÂW1@a_oÅ+œÌWZú0‚žorrØ÷B—»pã-$¬]ÏŠ»6 ãj¸Ó“^l¼÷Þ{Í|ºL§Ëðw±ÒsÝìej´qãÆE^>ø k> €êtžZ…„322ÌøÙ³gË´iÓLøXƒÉÞBÂGŽ‘Áƒ› ´Î¯Õtí:ÎækÛ^ýu3|çÎ{\i`799Ùl端¾jöåÞ½{eëÖ­&èÝ£GY¾|¹©v¡]ìi÷yZéÙs¿,\¸Ð,CÚæÏŸ/µk×–Ï?ÿ¼È~qREÃÞ'Z±£[·n2nÜ8‰7Ãt¿!kQ#‘}Óh‡h²¦¯Èúdïã4$¼},m€«FH8¼ø Ÿ?o ›5‹6®µ™3gº*ë5Qw%)z᫘†¯kÌþŠWø›ïj+¢™è+!‹Ë]¸ñ¾xñ¢TªTIžxâ‰bÓ'&&šÊ°ÞèGO/ˆ:]FIBÂòÕê¾<ð€ßm:yò¤™ï¡‡*2sæLÜÔáúŠ7!Z•››+ 40Ã5´«?kÖ¬)o½õV‘eû[† t±ÒÛºiY½Ðj/SÇk@ÙVíß¿¿ äê4mÚ´‘ï¿ÿ>`%a ŸfggËwß}çæ­bíôéÓMPX‡7mÚT6lØ`‚Ëúyfuß¶wÞyÇ´þ[¬ãÇŠãÊ3$|ñâE©T©’<ñÄŦնsf»ï eë1¤ªµ ósÏ=çu¿8©¢áëx³CåFB’„×ô¥¢É¸+l}ü½ÐÊÒ„„vH˜ÀWxðNJIN¦€kmܸq’žžnBÀ[¶l‘:uꘂ6§E/œ„„¯ð·¼«‘Ày@x $ €çÎ3Õ€5$ëiÿþýrìØ1¯óéEƵkךÊÂZ)×Ë(íºéòt¹—/_ö9¯^tÕ ¶eA»‹Óê 6]?]O{}Ü/Äê´–½páBÔS3fÌ0Û¿iÓ&×°Ö­[› ¿îN:%Õ«W—Aƒ¹†y†·üqÓ5Ÿ^P× àÊ=$ì´Š†½OnI­ó¹Wv ;­¢aï“N:É×_m‚íiiiæ"ú‡~ÈA‹Ð¥P †":žùèÊW×ýs¼_Ôˆ0‚‚pxÑΩââ¬}¦ûÎݰa"íÚÑF@yТZ<"P'E/œT¼¢,Ì™c{<òÏ’ €k"ÚCÂêùçŸwUÒX°`6sæL©[·®«rF||¼ »ó ë…îììlùî»ï\ÃÜCÂÊI {Ÿ¼óÎ;R³fMóïØØX¯wÙ€P¶k‚È'õh‡hq&Ï Éò>ž0‚„pxIOÿ½’°gHØ@YèÕ‹jåÂ!apMh•Z­Q–ÂÁ¹sçL% úºÓªÚ>Á¨Š†{p[§Ý·o_À @Hø.Ý ":À5BH8¼hHX÷—·ð´iÖp¶ãÇEbc­‡ p‰ JQÝakÿ+4Zxš¶ˆÇÖZûûÔ^ïã  H ‡!á9s¬á§ùÚ È&Oæo€ðBH JFØÒвþB£ˆÌý­…½!$ € !$^ÜCÂìK×FëÖ"½zÑÂ!a€(uöìY9vì˜\¾|™Æ@x9¹Û j…YD¾ü…Öþ¾\è}üüZ"ß¼I;àªåäXÁÒÝ»i‹pàÖ»Ë͵†ggÓN‚GÏ)Þª—¥¥×çï½÷^ÉÈÈ%K–˜°*B€Ès鑟wñŠ–WÁ‘Ã+ENí±ªLÚ/_a2áOÇ54z8“¶ˆߥ‹Ìõ=^¸JZu–ðWøX¸ÐwHøøqk¸NÁ’ Òµ+í€àõÒwâÄ ³œ9sæ\ù[–nþ}úôé ¬ãË/¿l–÷ý÷ß—k[•å6ÀB€ȣÁQ ñâe¿>©guGÿY‚Èê"ÙCE¶µBedzE.ðÔ:V~=oýnçÍ¢-¢Á® Ö9ÜBÂBÂáE÷“¯°ò5€ˆ¬\)²cÇ•¯ä»xmÝ*2}ºÈÀ"11"›7sŒ@$33S†.gΜ¹ªå\¼xÑ„f—.]*Ÿ|ò‰T¨P!h=ÿ…JH¸,·ÎD* SIX_ÇÖŠɲ^æ[2 šm-²>Yde¢È‚¿‰5€¶¦¯Õeý ®ô!O+Ëî™L;Dƒ©"Ë[ûOHABH8¼Ø!a íy ÇʼnŒO;ŠÌŸ/Ò·¯H­Z¿‡ïy}U¨ òâ‹/¾ë¯¿þÊß´,ùì³Ï¤zõêA[n¨„„Ërà !aÝ O[¡à§Y†5,¬3 ¯{Ä~(C¤`»FÖP2álgÁí‹?s|¡ìè惘Gù¶<#²ÊO_ž„„$„„ËÖ0pZZññ "cÇÒN€?™™"-ZˆÄÆZ!áY³D6n¤’°¿JÂ997‘nĈòðþ`ÁéСƒ©}úÊïÝÇË»té’L˜0áÊß»©ZµªÜqÇ’í($ìt d¶ÕÛëèÑ£¦¢ò=÷ÜcÖÇÝŠ+¤mÛ¶räȯۀk‡0€'­D¬3­8¼$^dvÌï‡y•ìµ´©ÈîIV&=¶´28"Ÿ>À¡møBHA’ŸOH8œØ!ᆠERS‹ïÑCdèPÚ ðeÂ+ôª¿'‡ÓNèÃ]»Ò‘nÚ´i&\»gÏž"Ã5Û§Oóï¿ÿýïfšÿüç?æý”)S¤wïÞòÞ{ï™0qóæÍ¥eË–¥^'Ë[²d‰T¬XQÒÒÒ$33S&Nœ(»4Ùþ›@!a§ëüé§ŸÊûï¿ïzéç\wÝurã7Ê©S§äƒ>0Ÿ£ëàN—Ý¥K(€@HÀ‰ÓßQI¸¤•„})’ó¢ÈÇÕD–µ9µ—ãÁ£•e³¹ÛV÷𿯠 H ‡÷JÂÞBÂ|ÔʨŠ6L¤V-‘9sh‹’Ð"­üˆ|Zøú믗—^zÉ5,//O*T¨ ‹-2ï=Cž4x«ã÷íÛ”uò¶¼!C†H£F|Î($\šu¾|ùò•¿­}MHxݺufØÉ“'¥J•*f}l”J•*ÉÌ™39 B!a”-­Ì¬Î D ri‡G×ö£¢ž?¶ûé#˜0‚ˆðWøX»Ö%ágžIL¤OãÇ‹T«&²y3mQ­[‹ôêE;Dº‡zHn¿ýv×ûÔ+h´rn¡>Q$¾CÂ:>??_&MšdÆõÕWWµþ–§\Ö³gOÙ¾}{±y†„K²Îö2µÚ²»Aƒ]9¯T“3gΘ÷¯½öšÔ¬YSÎ;ÇÁ  ì].ü=(|žþ ZYv%w{£ÂòÖ"ß¼é{ëï>räˆ ®fü€ÒÐʲ=“G[D²ck­ý|r·÷ñºÿ  ˆ ‡;$ܽ»ÈС¾÷ç´i´¢›þÄÆRõ6ØD’“iüî×_•~øÁõþÒ¥KWþVå™°qY-Oÿ­Ã.\¸ë¬Õˆ ÄÁb àÚÓjŸÔÙ>–¶@éØáQB‘íÇ¥Ö~>ØûxBÂ2BÂáà ÷èá;$\«–È„ ´¢—VnÔÈ{µm\I“¬sÌùó´ V­Zeª geeÑ!†0ÊÇŽT‘ D OÓ(9;zb3mɾK™ø8 $ € !$>´*j p|¼ÈèÑ´¢×¬YÖïÉîÝ´E°íÝkµmf&m¨ûï¿ÿÊßÝøRW!@Ù!$ €òq6ß ÿåÍ¢-Pr.'ùþ&²0Î÷xB²jÕ ‡Í×ÂB+ ×³§Hr²÷izõéÛ—¶BôJH°‚ô(-ZP¥°?~\Nž>#ÚæüyÚ ÑeéRëØß½›¶(k£G[Aáò®ØLHøw"{öˆ¬\)²c‡È®]¼"åõË/œsJuý„&@¹Ê_(2;Fä—ã´J&P€áoyk‘Í#|'$ € #$^4™œ,Ò´©÷ñ›7[ÓäæÒVˆ.Ɖ´ã™ük"'Ç:Ïdg—ïzDcHXƒÙ™™"ãÇ‹ôí+Ò¢…Hl¬µ?xEæKƒÂ(Åõšåªð´ÈÜX‘ói ”Œ„×=B;D²EDv¤úOHAFH8¼ÄĈüßÿkí7oNŸ¶BE"¢…VήWsÙµ'2bDù®ƒgHxûöí2jÔ(騱£Ô©SGú÷ï/YYYEæ4h´iÓÆëëèÑ£fšáÇË=÷Ü#—.]*2ïŠ+¤mÛ¶räÈ‘k¾­úà‡]ÁYÏñ­[‹<óŒHZšUE[ƒÛT¦’0~GHåoe¢È†Ú%³u´Èª®´C$Ó*ãÿNó=ž0‚ŒpxÑ`žVöVZU2=¶BôШ'óøª|Íh%[ fkeÛòâž2eŠôîÝ[Þ{ï=Y°`4oÞ\Z¶lYdžO?ýTÞÿ}×kâĉrÝu×É7Þ(§N2Ó|ðÁf¹™O[è²»térM·QÃÁ½zYˆ$$XçöÇ9þ€@  üi¥Ð%ñ´J~ÜdÐwfĺP`€eøž†0‚¬];BÂáDÃÁ}úø k…É7ߤ­=^|Q¤E ÚáZ*(°‚«sæ”ß:x†„=iXXÇïÛ·ÏëøË—/Kß¾}MHxݺu®á'Ož”*UªÈ!C\Ã<(•*U’™3g^“mÓ𵱫UéÑCdófŽ9 $  üôCi|ó¦ÈÂ8Ú!RØl~ÊáÜ€k¦kWBÂáDÃÁ<`UöEeÚ-=-4 üÌ3´Ãµ¦nµºmyñ.,,”üü|™4i’ÿÕW_yÿå—_6ã§M›VlÜ Aƒ¤ZµjræÌóþµ×^“š5kʹsçÊ|»ŽIJ©UKdþ|Ž3 4 @˜ËÍÍ5oŽë•Ö@¸º\(2¿–Èwé´œÓãå#¾ÒD¬Ã™À„„dÖ*œ4ȪàéKJŠHr2m…èŸoý>ddÐ×ZV–Èþ ²woù|¾gHøÈ‘#2xð`‰•›o¾YZ¶liƯ_¿¾Ø¼óçÏ— *ÈSO=åuÙ+W®4óΚ5ËTnܸ±<ùä“e¾M‡[Õà›6-¿v"wÔ „}ÿý÷òôÓOûæý÷ß÷ÛETy õõB¾è%’=”v€s?.µ¢¿ž§-"QÞ,kÿêC¾Ê< PÊWÓ°/ò׿ZÁ<_´‹úvíh+D‡9sDªUÓê±´EyÐJÂåõP‚gH¸mÛ¶R¿~}Ù³gy¿hÑ"¯•„·mÛ&U«V•nݺ™ªÃÞ\ºtIâââ¤{÷î²zõj³œ-[¶”éöhÝ k›jX@逶aé¥}(ù0cÆ ¹õÖ[Í™fÍšI›6mdÙ²efÜöíÛeÔ¨QÒ±cG©S§Žôïß_²ôQvùužÃ‡KJJŠÜpà ’í¿f͹뮻¤Fæ§>a®Ó¿ûî»®itØÝwßm."µjÕÊj.0õéÓGbbb\Uƒý­Bƒž={¶Lž<Ù3ú¾S§N4®½› |¢dNíµŽ™Süm‰H;RE2”ûú.0‚Špøí¯ÿó¬Pž¯Ê©™™ÖøÓ§i/D¾zõD&O¦ÊSëÖåÔv kEà›nºIÚ·o/999²|ùrSäEÇO:ÕLùòes_H‹‡èý;vy;w®Èò¿ýö[WÁ½ÿT–F¶Žen'ÁÁÝTaBÂJƒ·zQÆæú¢aaÏéì‹F,6ý=÷ÜcÀî‚Nœ8a¦á…Ì{íZJŸ2·9sÆ„„Ÿ{ʇ¶Ãá¿þú«4iÒÄT¸pá „kër¡U5TC€ç[Q­(ŒÈ³i˜Èêþ§!$ € #$~ûë¿ÿÛ ûêŽ~÷nk¼[j@D²õÜ\Ú¢<­]+cU¾–ÜCÂjúôé&(¬Ãš6mjî7%&&J… L(XïýØ¡_o/-ã)!!AªT©"eXÞWìÐöËÈàX‚…»©B<(|ðë¥Ý7é÷a~øa‘y…põ‰ñüü|™4i’™N+Ûì‹F‡=® _ºtÉ„;wî\d¸HíJÂ:Íõ×_oÂÄsçÎu½âââL5Z§ëiÖ¬Y#wÝu—Ô¨QÃü\¿~½ézëÝwß5ãg̘aÞk›§¤¤È 7Ü Ùnw(´úò}÷Ý'uëÖ•[n¹E  ?þø£küĉÍÓÿîòòòÌ2/^ìfŽvöÔSOÉ­·ÞjÝ©©©¦B€Í3$¬Ú¶m[¤»°áÇ›ý¬ûÜV˜Öi9Â//‚GRh8§Ñ—Ò‘hm?‘ìé B²= ‡ i#óò|O§ãçϧ½Ù´‚pƒ¾«jãÚII±*áúzxáZÑ{:î×þõ¿ÞOp¿GPZxРAe¶¾Zñ=.Nä‘G8†€`ân*„}’[/²Ø/­èª]=¹ûÓŸþTd_!\ nø`Àõ‹DÀ®\¹²ôèÑÃhÓÓÓåÎ;ïtµ™{›÷ìÙÓtåõÆo¸.ÒmݺÕ¯u~íþkÁ‚fŸkøøñãfšÿùŸÿ1ÕšÝÙÝ|ýóŸÿ,¶oûôé#ݺu“qãÆI||¼öú믻¦s _¼xQfÍše–¯UlN×i2õ~7×m‚J+‡.‰§àÕ§#ת®"9/úŸ†0‚L„„ÇӰ†ÎƧ½Ù’“Eúõ£B†]›6éÕ+rBÛ«V­2÷ ²²²Êì3FiÔH¤ Q‰»©Â44\«V-¿Óø áj…×úõëËž={ÌûE‹ù¬$ìÖ°hÅŠ¥{÷îE†kUb;ðªa­6üÀ”jý"‘VÛÕ6Ñnºl'Nœ0Ûÿ /ió›_Û[»ÿÒö·iui 5ʼ/iHø•W^)²ÿn»í6©W¯ž«R€ÖªÇÕ«W7³=ú^úÈ5L+%ÇÅÅ™í[½zµ¿eË~IQ6>KYÏY8´î‘µýh‡HóSŽ>±Ùÿt„„d8MJ¢Âi9 ÏšeMsþíß¿¿öᇺæ³?G÷‹»®]»ÊwÜázï-$}:âŽýhÙN€PEHàÕ‚ LØU¿¨W­ZÕülÖ¬™lܸ‘ÆñcÕªUòðÃËý÷ß/o¿ý¶©*¬m§ŒT  GZÅ·nݺ®0n||¼¬^½Ú5^+5kUa ñê+99Y¶oßn¦ýç?ÿéšÎþœwÞyGjÖ¬iþ+ãµD;$l¿êÔ©#þóŸÍvx“`Ž žðF™:žm…„OPÞh˜ôãj´C¤Ù>ÖYø—0‚Œpxî/ ÜÍ™ãZ†îì‰4`©!øü|Ú"\èƒ ”MN¶‚²ºÿ¢ñ¥zÔ* ™™™2|øp9sæÌU-G‹òè½™¥K—Ê'Ÿ|b ½8é 4÷Ê/¾Þß9&%©K»BŸô z^^ž¬]»V~øá¾°—ÂôéÓÍ…O?ý´Dóíß¿ßt¿ä‹>uíïâ“{Y+Akeè .\õö´jÕÊ„”2õëy«‚¨†?@~\JåéH´î‘U’ÿN#$ € JI!$N4ô«û«Ñ•¯ééþ§íÛWä‘Gh³káÒ¥K²gÏùꫯäèÑ£4HÓJ´ZáK+ _ù•‰ºJÂ-ZXÇîo)F--“••%Ÿ}ö™T¯^ÝÑ<ï¿ÿ¾¹¤÷~"y;„„½3oÞ<9|ø° æ®X±BZ·n-52OI_KÁêêÊVÖeêE Ìe´É¡¼°+OŸ¥\NDù,|­Û±$úõIJâ|€ð£¶kg……OŸõ1b„é1Ò“öÀÙ¡CSÀeƌҦMW¯‹Úãã¨Q£¤cÇŽ¦ÇÆþýû;¾—²mÛ6³ÌÓWa‡¦ÄÅzØb„ ¦wGííóŽ;îììl3N?ûÖ[ouõªë±lÙ2×:é=ª””¹á†\ó¨õë×ËÝwßm–§aVj*ÝÓm°?G‹ÙŒ3Fn¿ýö+û°…¹?¦ÒÒÒ¤eË–¦§Ì‰'úÝN\„„½@T¥JsaF/²Øh6nÜxÍ×¥,.Zßÿý梥qM¬í笊(p&Ï äÒ‘dY ‘-ÏžnG*!a•:Eøì¯„‘øx‘iÓüO;¾HµjÁ_Ïpyvïí³333eøðá~{% ¦¶mÛJƒ ä‹/¾ÂÂBùæ›odܸqòÓO?•iû”u»_ëv,‰¸8+„#­"kU†Ó®üAÑóºVDwwÏ=÷HŸ>}Ì¿=ïÁL™2Ez÷î-ï½÷ž¹WÔ¼ys”-­%K–˜-4p«ç ÛîÒRÌb…y“““Íç¿úꫦªðÞ½{]ëÔ³gOéÒ¥‹¼ñƦ—PµiÓ&¹îºëäÑG•E‹™íˆ‰‰)R‰Øé6ØŸ£AêÎ;Ë;ï¼#üãMuàW^yÅšõ³õžR¸U;ˆT„„ ˜.ý"òó.^Á~ì9¼RäÔ+ ¦¯ó‡CòÐm^^ž¬]»Ö\|)¯@íÙ³g娱cAý|½À~òäI~Ïqmìš ²0Žv@`…§­ðáLÚ"’èïÿžÉ§#$ € #$~ûK«kPxÂÿÓæäˆüáÊ×Çü wDã.Ï.àË»ûy½~¨Ÿÿ¢Ÿ´_Y­cyo{yÑL´×sæp>@øš4I$&Æ:O‡­|ýõ×ËK/½ä¦÷}*T¨`¶*P¡ Ú^Í9iÈ!¦—Ê’œóìu8p`±é»wï. 6t½×4$üÜsÏùü _Û`Î#ÓûýªQ(R«VðÔî!a_]ÀÛuõø@ÝÀê~^Co6]Ö}÷Ý'uëÖ•[n¹E  ?þø£×uÑ°×øñãåÎ;ï4•"ÓÓÓ}¶ÅÅ‹ͺé6ê¿=ùk_Ûh»-7P›«5kÖÈ]wÝ%5jÔ0?u]Æ»ï¾[¬=ÜÛ1в5<7aÂIHH0ÓhuM{KF†Þ»—󗞟õa¤¤ÐY§‡zHn¿ýv·¿7©rã7š éÊWHXÇçççˤI“Ìø¯¾úªTŸ?sæLWU`=zòÖó¨ç¹HCÏZ yîܹ®W\\œ©\|øßûs´PmõêÕfØ¿þõ/×°S§N™aZ]å‹0•„¯]%a ÿɲ^&Ü7Í i×äkúZÝ”\Í êÏÏ“¬ñdz áàänë÷÷ØZÚéƒ"»'Ñ‘BÿÎëïÿ‰Í§Õ¿í«Hp x4hš˜H;„ÓþrVíÚ9›®$ÜC¾º€WNºz÷×U| nàu?oÙ¶nÝjÂb=zôåË—›eiÀUC¹Z Øs]t}5x;nܸ+¿‰R±bE9räˆÏöøïÿþo3Ÿ†z¿ÿþû"ãüµ¯m´Ýþ–ë¤Í5üV¹reÓ+V¬0!h D{VDölG'Ë^²d‰i¯´´4ÉÌÌ”‰'Ê®]»‚züo…ß ¹ä0§U„µšðÒ¥¡±> .tdµÇF­êûì³Ïú<'èyqðàÁ+7ß|³9Oéx}˜ ´ôüW¥Jsч%´I›¿°gpYCÃ:\´hܸq‘׃>èšÎé6xû;$¬Wl„„B!a@d;µ× oH±Bd:Ò.Ì5L|Šò @HÓJ¢T‡…Kâ­°("ƒ> ¯µ¢p „„d §ÂiiHX«OŽxúgž ~¥h÷°òÜRNºz÷×U¼'oÝÀ; ézÜtÓME*ýWÐ8PHØ×¶ûÛnoËuÒæ:ç:wî\dY¨óWIØéþœ9s¦«:²V;. úPƒ+H áà+¿Fæœ üq©[·® 0@:tèàõœ¥ç­zîyn´¶ëÖ­ ʺ$%%I“&M\ïg̘a–¯Uͽ­“'=Ïéà Gõºü’l!a€ðCH½Žd‰l-’ÑΪXª¡a^×öõq5+¨­á>'ÝÊ#º¬{Ddm?Úéq²>™vˆúðŽþmp"{(!a!áð2y²µ¿4óê%÷ZÌîÝ"øƒõ3Xœ„„võî/à夸@!a{=Ü+äÚ4ܪa8ëòóÏ?; +÷Þ{ï-R}8PHØsÛl··å:ióC‡™iž~úé"Ë vº?Õ”)SLEåŠ+šJÍgÏž Ú±§¹ë+Í"óçs.@äÈ̉‰ÉÈ(ÿuùòË/ÍﺾÒÒÒ|ž³ô!­ÐÞ¾}{ÉÉÉ1AÙV­Z™ñS§N-Õg7NÒÓÓM¨wË–-æ|ãþ‚ž¿ô¼’’’"'Ož4ëàïoÈÆÍô‰‰‰òñÇ›‡>tûæÍ›gÆ—d „BÂØNG%ákYIøÄ–+?3ƒihøó$‘Ÿr8aÑÿg ´Ój²+i7¹¹¹òòË/ËñãÇÃoåõ§¡oBÂ2BÂá%=½d!a­ ¬•„µ¢p°8 ;íêÝ_ÀËI7ðBÂ/^”J•*ÉO‡e½  ÈìÊ´Ÿý¥•T5ô›ì°C ‚Çñ9Sϰ·.àU ®Þ•¯°Ónàt?¿xñbó>55Õxuý^#»wïö».BÂÛ¶m3Ÿ­Þ³gÏš`™V©ÔyæÌ™ã·}¼}žÓíöµ\'m®ËÔJÇdîׯŸÜvÛm¦Ú¯~†~¿öÕN–=nÜ8s-@ƒÄ[¶l‘:uêHïÞ½ƒvì]Y]yäΈLÚ9–†„¨– \-B ôɲkúRQ8šž¶BÂÇÖÒðïP†u¬è1s•¶nÝ*×_½ ðÁ&\«¡Ø¯¿þºÈø=z˜‰ìÕ”¤=~Ü ´Û7}ôQÒÕ›‚zÓPoje¢iÓ¦™ñvW©¶{î¹Gúôécþ­•´ëR]†VIÒázÃÖWw¬Úmk—.]ä7ÞÏ>ûL’““ÍðW_}ÕTÞû[ÿŒN–ëm™v‘%K–˜íHKK“ÌÌL™8q¢ìÚµ+xûòl¾µ/Olv6½†„õo$„„ÃoiHxìX­Òêlž+_eÌ<½¶—šgHXyvo ÔÕ»¿®âvï¤ûù™3gš_íõˆ7]Å{û¾Y’pnn®4hÐÀL£ßõgÍš5å­·Þ*2·öñµíN·Û×rµ¹Zµj•y˜÷þûï—·ß~Û|w×iuüµG e?þøã®õÑŸ¼rÜåíø¯WϪ& D* ·nm……»´  €Ð¤ÁP oA[D3­(š7‹v€?åXÁÒ“»¯zQݺu37ï¾úê+¯ã»wïnnN^¼xÑ5ìàÁƒ¦‹ÑQ£F™÷öÃN:ÉùóVEt ë0 ìju! ¿ôÒK®ehu%½Á©Á]ûs6lè¯Õ…5ÌûÜsÏYû³ôF£;ýî*v²\_ËTC† ‘Fe™˜Ðs¿îK§ˆhH8{(¿BÂá·¿4ð›š*ÒÕa'#Z¸66VdV_nð×¼¿®ÞýqÚ ¼Óîçut]‚Mƒ´k×®5•…µ¢pIÛ§´Ûío¹%is &ë÷âO?ýÔÙWY?ËÖaº>.\jçæZǾþ"™>“¯Ôª%2>í”!aº4:;†h4[™(²},íÿ~9nKg^Õbô¢†wµ*°·›”zc/66V†-JíØ±£´mÛÖüÛÙ8pÀ5^ƒÁîÕ–zè!¹ýöÛ]ãµ›×o¼Ñt‡j¯‡Vž;w®ëW¬[Rû³{ô»è-$ìt¹¾–©´Ú”]exûöíÁß—{&‹,*A"ƒ0‚LC§ Eøì¯’†„U¿~"½zÑ~ó½yÞ¼yæ;°†‘W¬X!­[·6Ⱥ? j&MiÐÀ ½‘NóñãEªUéÑC$'‡6J‚0mZIX+ ŸÍ§-¢Ñúd‘µýh67Vä»ô«Z„ÞÔìƒ>èwü /¼Plœ†lµ«Vå¤KÖ… º*køXo>>ûì³E>§N:Ò¸qã"/ÏuóÕ«·°ÓåúëÞVM™2EªT©bºŽÕêɾªB•ʺGJö;OHAf‡N–.µöט1"‰‰ÎçKK³Âf´a´[°`ùŽ«ßƒ«V­j~6kÖL6nÜÒë­AÉ¡|F”ÑÊÙú€‡ž÷õœ¯áµÒ0ÿ¸ÔB[ái‘%ñVp Ñ'w¼Èg ´[ÚÔªB{´bÐu×]g»Þh¡J•*ÉOºòߖÙ´E´ÑʰZIdµö5øâU/¦sçÎ& »Cï x¡]޶lٲȰS§NIõêÕeРA潓°züñÇMõáH‡Š­GåÊ•åèÑ£~××W wÆŒfø¦M›J¼\'!a[RR’4iÒ$8ûð×óVEèóϳª+!a!áðb‡„ß|SÄÇóž>õë§ßñhC„Ÿ9s¬0•°í E23EÆéÛW¤E ëwCÿ.ðŠì—…à—º@xXÓWdY ‘Ë…´E49”aÄ¡ß8°iXP*ޝ[·ÎTÇÕ0°VÚ»w¯|øá‡²fÍ3~ñâÅ&@›ššj‚¿‡2!ߘ˜Ù½{·™ÆiHøË/¿4Ãô•¦}ݺÑnM+V¬h*üñÇRPP`¦Ÿ7o^‘é|zu½tþ””9yò¤:^®¿ð¸qã$==Ý„Œ·lÙ"uêÔ‘Þ½{gɲ~ßOíu>!a™†ï ‡« ÛójÕI œ$%YHÞi€žJÂTÀï¸ÔÂCA®Èì‘ü…´E49¹Û [K[À¿]D–§ÔòåËåæ›ovx4hP$D;sæLSØ/«W¯vwÖîK6l(UªT1ã=eee™*½öçÔ¨QC{ì±"Óø ô>ÿüóf¿`ÁÇËõ·L­~l/S8Pòóóƒ³÷L™_«dƒhHxûXŽExí¯I“DââJ>×®V5áóçiK„‡Ü\‘˜‘Œ Úà —º@øÐj¤šptÑpøþ9´ü;0ß:V‚x~8pà€?õþýû娱ce¾iúúY*.©sçÎI^^ž\ºt)hËÕéu™.\þ9~m¿’Í£!á©ÿBÂáE“º¿¦Nµ‚“%µy³Hµj">h….©8É+T_[·ŠLŸ.rûí"‰‰"…\8Ä¥.>ì®è©*]ÆQ)ý”c´ú4ÂÓ'õDvO*Ù<„„d„„ÃK^Þï•„K»ßæÏù¯ÿ²æçÅ+Ô_×]'²g¿ûç¸ÔÂËg "ë“i‡hÛçRhø÷ëy«’°VFø)ȵBÞö. BÂ2BÂá%!auäˆÈÊ•TæÚ•„ÓÒDêÔ6Œß}€s\êáåßi"W¹P@[D‹µýDV÷ ØÒ¦"[ž¡ÂÑ® Öþ+)BÂ2;$|ü8m‚ÂÅäÉ"11"ùù´À.™€ð¢áàùµDöM£-¢ÅÖÑ¥ "ú¬{Dde"íŽ5²~×KjIøjˆEô˜_‹0‚Ê 6 î!áù\&B”˜5K¤Ö•¯Ä……´À?BÂàfÆ RK¯¬ù0cÆ ¹õÖ[M·Y³fÒ¦MY¶l™·}ûv5j”tìØQêÔ©#ýû÷—,» :¿ÎsøðaIII‘n¸A²³³]ã׬Y#wÝu—Ô¨QÃü\¿~½™þÝwßuM£Ãî¾ûn©Zµª´jÕJV®\éhý´Ê³î}UªTIn¹åùë_ÿ*,õrÜ_ÕªU êúþýï7ËýÏþš šÑNdó¬pÙ_Wcm?‘Õ=ØÉðî‹^V\ê ÑC+G@?î!át¾ JìÝkó¹¹´À?BÂà&PHXƒÀÉÉÉ&„÷ꫯšª½{õjÜS¦L‘Þ½{Ë{ï½' ,æÍ›KË–-‹Ìoøzöì)]ºt‘7ÞxC~øá3¾’Ê•+K=dÅŠ’žž.wÞy§™þÅ_4ÓlÚ´I®»î:yôÑGeÑ¢EÒ§O‰‰‰qU ö·~ v¸wöìÙ2yòdsÌèûN:•j9}ô‘¬^½ÚõÒ y0…|è4w¼È'õD.S2CeffÊðáÃåÌ™3‘·q[žYÖ‚Œâ~9nUÞ?Ǫ"¼u4mM  È ‡½œ;i’Hl,!aD—zõ¬ŠÂøCHÜ + ÞjhÒæú¢aaÏéìÀåÀ‹MÏ=÷˜ð¹sç\ÃNœ8a¦á…ÌûîÝ»KÆ ]ã5¨!áçž{®Äë‡òa‡{ípø¯¿þ*Mš4‘Š+Ê… J¼œï¿ÿ¾L×7äC¹V@ìÄf®H÷Í›"ókÑð~lèà ¬°pwÇ¢ !aY~>!ápÓ¨‘HjªõSÃÂ@´HJA'kPbóæÍ“{ï½WNžÒ­[77nœÄÇÇ›a¯¿þºk:÷ðÅ‹eÖ¬YfùÓ§OwM£át&33³Èçj\·Á}9þBÂS¦L1óhUkݶæÍ››ãÒÝzÌêç.[¶L&L˜ _ýu‘ízôÑG¥Y³ff»Måc=æCÂÚ~"_ôâøß¶í?'ÛZîìªÑú°ÚkÇÖŠÎ$HtŸç/¤T„„à !aD«Y³DêÕ£€h¡÷Œ´ÈŒö2ZÖrssÍ}(û^ÆÕÎ[Þëîùùž÷R<Ç_Íö„"BÂàFCõjùïÎÞWW+¼Ö¯__öìÙcÞ/Z´Èg%aϰ†E5´×½{÷"õ*±ÒÓÀ°V~àJµ~‘H«íj›œ;wÎ5ìĉfû_xá…"m>pàÀbók{ßtÓM¦ýmZ]ZÃ’ZW•4ÄùÊ+¯Ù·Ýv›Ô«WÏUíÕ÷j¥V­Ú«U[Ý+Ï*íÞH+Z2¤Èzi€}æÌ™E–£•¤õ3ì—}üy£aaÏcC§žÇ©;{»:uê$çÏŸ7Ã4@¬ÃôX {&‹Ì¿ò{{¹0ê/_!á@ûÏɶ–»ÂÓVP+ ¶Ý“DÆY¿ÿZMv~-Ú$ÚèyáH퀠"$^ #ZåæZç«ü|Ú@p]ͽÆò¾OéäóU޶^[@ä#$ nœ„„g̘a¾nÚ´É5L+‡zVô´CÂëÖ­sô¥³]»v&0jW÷ÔPðOéo/çûï¿÷ÙFzQbðàÁ&¬ªYô‹Î³~ýú"mðàƒú\†·íúùçŸC+$¬´’¨£üøòö·ÿœnkHXÞZ$çE¬ƒô¼ÈÜØßƒãRD>O¢]¢ !a” gБMØÐp°†„»vñò¼6Ñ4$ÿæ›´î¦M›f®Ç{ö©ÁÔ>}ú˜{^ïŸ2eйߠ½Hj˜¸yóææ>K–,1÷ÓÒÒ$33ÓpwíÚeÆi899Ù|Ö«¯¾jªêîÝ»×Ñçùš×sÝ·nÝjŠØè½+-€£A^ -kOˆ¾8¹Ÿâôóý½÷¶ û^Œ¶•;m.]ºp€GHÜ8 «çŸÞTýÕ/„úEXMŸ>Ý…uXÓ¦MͲ4Ì[¡B™={¶×/žV­Zež¾ÿþûåí·ß6!O»ê¬MŸÊmÒ¤‰®/]Ç{,àúEš‹/š Ý»w/2\CÑNBœ:¿†²µZ³'Ýoút°¯‹»wïvâ3fŒ®måVfØG}ä¦O#ÇÅÅ™í[½zµ¿eË×x'!a}z¹~ýú®‹Jvuk»’°†@µ‚l#½’ìCØ„„³‡5®ÇWiBÂN·5$hÕØuðÇ –¼Y"³¯üþœý­OÍÕ=DÖ'Ó.ÑäüaBÂ(NO§Â…†ƒ #Z%$ˆ¤¤Ð@¸Ó¢@š}饗\ôJ®ÞcÔ{;*Ð=F ïêø}ûöü¼!C†ø½7¤ÁØ@ËòõyÞæõ\÷nݺ¹_å„Ó¢+N>?Ð{Ïeè=-ò¤íf;xð ¹4sæL`ò @);wÎ|AwïZFC—îáO§Óh%ØÒÐà±~ ýôÓO‹;vì˜ìß¿ßç²½­_¤i×® CÛÝøhûk(ÓIˆSµnݺØSΧN2Ý 4ȼÿÛßþfæ?~ü¸kŸjJ:ìÃ?,vA÷‹»®]»šnšlÞBÂzA‡½õÖ[EæÕ¨†7õb‰vgä.PHX—ïäµCÂëÖ­s ëܹ³¶cÇ¯Ë ›ðþ9VEQ­,ÅÇWiBÂN·5$l!²2‘?@°h(xm¿ßßk¥éíci—hr&0Ê!áð¢áàgž±~&óì(¢Œ„Ûµ£Ú áÝwßmz>ÔÞ2µÇCwZauÔ¨QÒ±cG©S§Ž¹–­…m¼Y³fÜu×]溳þÔeë}Žwß}×ñç͘1ÃÌ£=÷iï™7ÜpƒdggGlû?ôÐCrûí·»Þ§¦¦Ê7Þèê1Ô×ýŸŸŸ/“&Mr¼µïKõìÙÓìWOþBÂ>/PHWïƒh Z÷gIîa–gHXé}jÕª¹z}íµ×¤fÍšæ~,@¨#$ !B¿hΛ7Ï\ìЀފ+LÈPŸäÕJŸ(nùòåæ)]}z·_¿~rÛm·ÉÈ‘#Íw Ñú»h¢/^lÆé… N:tH `.2h5W¥ZfôèÑfŸôíÛ×TèõâìÔ©“ééìÙ³¦›&}ÊÛ}:;Ü;gÎù׿þ%ÿøÇ?¤víÚæ‚ˆÝ•“çÅ }i7Nîìåh•j½çþ:qℹH£•­Û·o/999¦­ô"›Î3uêT×rtûtõX[»v­évI×W/àùj¿ ä=(ŽÇWiCÂN¶5$|ó¦ÈÂ8N~)Ͼ¾­AÖ.]ºÈo¼Q¤K¤Y¸p¡+t«‚ôþà³Ï>[¬=ìëýZôcðàÁ+7ß|³Ù:^Ã×NèþÔ{Z¬FÃßzßÁæ-$ëôó…tõ>¨þûÁ,Qû”wHXCì:lÖ¬Yfÿ4nÜXž|òIN ,€¡Tô˸~ÁÔ§¦õg³fÍdãÆ4Ž«V­’‡~Xî¿ÿ~yûí·ÍE m;ýBï틽'}Zºnݺ®0n||¼¬^½Ú5^¿èëÓÁâÕWrr²yªÚó¢ƒý9ï¼óŽyrXÿ­JÆ_äóìp¯ýÒ§íÿüç?›íð&!!ÁÚÕ”¿å¸¿4ð©´µ…uXÓ¦MeÆ ’˜˜h‚¥.¶éôzAÇž¿Aƒ&°î«ýB2$¬4 ˜;>ª¯Ò†„lkH80ß ^æ®GÔûq©u,œÍÿ}ØìëAô°C§öÒ*BÂá%)É ëKÃ@4ÉȰÎYùù´®N÷îÝ¥aÆ®÷Z-U™Ï=÷œÏy4,ì­Úì=÷ÜcÀîVµ¸‰Nû /8þ<ûúöÀ£b\¸pÁ•>|¸|þùçfÛwîÜY¬=ìëýZp¤~ýú²gÏóÞîMÒI%a›ÞÐÏÓûFZ8Äæ-$ëôó…tµP’‚. o!a-Èr­BÂZõ8..λzŸGÇoÙ²…“ „„ „h`0//ÏTtÕ§¡õ=JFƒ±úÅüÓO?-Ñ|û÷ï—cÇŽù¯°ì.„¼ñ¼À¡ô‚ÎÕÒê¿"--]÷'ëõ"†cÞŽ­ÈñãÇÃwço&òYÇW9ok™:±™@ ,ëÉpëKóüa*ÊF#;$¬?€ Òªœ„„Ç&$Œh”—g…„—.¥-Pzzß@‹Xh¸wîܹ®—"µr°'íÉ0??_&MšT,$ªËÒhç΋̣׵íJÂN?Ͼ.®•g£Åã?n h¯„:t(2Îý>Þ÷ñ,b‡vµÃ’JJJ’&Mš¸ÞϘ1Ã,K+>«’|žç¼žë®ôøÐ÷;vìp¼ŽûÛßÌ<ö},=Žú÷ï_¬gF'Ÿè½·e¨1cƘÊËݺu“6mÚpòaƒ0 lýöî8Š2Ýÿ¸@а Æ•¿ +r‘À‚ =ÀR ,(*(§N¼,ë¨x …(Z².*p°dÝ © 7Vä" B¸Š1‚ˆ B áÂóçy{{˜™L’NÈ„éô÷SÕE¦§»§çížæ}ó´%µâ­vi“^¶*>>ÞüúøôéÓUº/eU”­­ìªÛLMMå`;:!f¯,ÊùåºçZª“¹Ö1ÎYÁùîegNˆÌŽù~úùyyÛ{!a„‰¶#$ìv@81Q$!ö€÷Ô«'2i퀊Ó~aûʇ-Z´˜è[N«Î6Ì\åN¯Nضm[³^zzºo™}ûö™yO=õTÀcø‡„>^¸ûÅ#ÑêÕ«}W&œ>}zÀ}þí¡Am½’d§N$##Ã\1R‹ÎèýÓ¦M+óqÆîÿ:IràÀS W…@[£†aÏ}¸æççˉ'?^𺺯ÁÇRƒÅZ½XÇ!´pÒÎ;MÐwÕªU%î³®£Û5j”Ãèß¿¿©nvòøeݵ õÝwßùŽÏÔ©Syó®AHàZóçÏ—:uê˜/ãuëÖ5ÿ¶jÕJ6lØPåûŽÎª>}úHll,¥ÒJ¢)QÁAÎ/×=×2Í©W)ÇX+;÷êÕK–.]*ü±ù;//¯Z½$4ø­ÏK;1«U[í™WüZAXçð^è%„„&„„ÝÅ -K{À{âã­^ðº%Ù³gsJû«=ZærN¿¼ÛÐ ÊVpBÂÜM­aªÚéÑ…ÍE–'XÌ‹|;ɪ|?[ȹ‰‹Cƒ‚zŽžÌ¥-ª«UýEÖ ¹àÍhE í`^´h‘|øá‡¦ÚÝ‘i‡quÒê¹ÁV¬Xá»?’Bº_#FŒðuVV'zimUåôµ­Õ¤³’çïš!² )¯¯!$ €0Ñ é„ ´ƒ[Œ)Ò¿?!ax×ôé"11´.Œ^UN+keØ9sæ˜*©«W¯öUvÕb Z8¡S§N’‘‘aªÀjXRû §M›°-½¯V­Z¦Úê Aƒäú믗§Ÿ~Ú,«}œNOF¤Y¹r¥9'SSSi à*„„¸•„«®’°†õrî:iSY[ljli…ö·±‚[ÖÑ?ëaÝŸ»ŽÐ0ªŽžkb×Ð:ª§¯F‰,íX)›ÒK’igÞ§Ÿ~*—_~¹o¾vT7lØPêÖ­+?üp±õþó?ÿS®½öÚˆ «ÌNô’ÚªÊeN™×PäTÐ¥ÜôóæÓ.¼>¼æp!a„…M5p wÐcÕ½»È”s_›òûQxкu"—œûzœ—G[àÂhÿ_Ë–-}´ð#<â»æÌ™¾+¬ÅÅÅÉúõëMÈW‹ ¤¤¤lKÔ÷Þ{¯ôéÓGÞ|óMSUX×Ó>K§GH‘FÏçØØØÈ½#@  *בVˆx}¢UmXÃ;ZÝQÃÄznœßD¤°€¶¨Ž¾Ÿn…D+Á×_mªîÈÖ­[}ó5Œ{Í5×È}÷Ý' 4“'Oúî;qâ„é¬~öÙgBÂ[¶l‘gžyF:wî,5’Áƒ«&ðþûïKûöíåàÁƒòä“OÊu×]'Íš5“qãÆ9êT,+$lo?ïß#B¡:ÑŸþyùÿøß2¶ôôt¹í¶ÛL0Z+€,_¾ÜQ[U9ýAŠ~žÛô„ÈÊî¼>¼F¸¤ÿÏ8s‚¶@¥"$ì.vH8)É J^“›kû*ƒö_îÞ½;dŸå™3gdïÞ½¾ÛEEE’••Ufÿ¦Œµ¯ò£>*×ã‘õ~›+ùùù4pºKá•¿Ã mÚá%ñÖí}KEò¶X‹µr1œ½]©º2§üíV0}ùmVEáC›hó‹}Œ+³š¸¾wè{ÉÉܰ½mÙ!á ˜Žký×6oÞ<¹âŠ+ä³Ï>  O:Uúõë'ï¼óŽÌŸ?_Z·n-mÛ¶ خڽçž{äÎ;ï”ñãÇ›ª:oâĉŽö«´pp(8øö”)S$**Ê컿7Ê¥—^*<ð€,\¸ÐìŸ.·k×®Èú<Ñײ{­llÝp‘5CøÌõ;$ T2BÂîBH‰‰IN¦´_qîܹ’““cBÅË–-“øøøsŸ¯ÍåôéÓ4PÅè.T ó|5JdiG‘”(+ØÃÄÄäéÃëGiƒ¬ 䬨XõO­H®Û;˜¶·*;$¬„µj°V¶õïß_eÍš5!á`Öûýƒ¶vh÷¥—^òÍ+,,”믿^bbbʬ”q!!áO?ýTjÕª%ÿ÷ÿWl½ž={šŠÆ6­¬!áçž{.²>CÒ‡Š|Ö#ô}:_+ØÃ{ÿ¯ $ €0ˆ%$ì&vHxÑ"BÂ𮄑ѣiD-¢P§NÓ7©W.Ó[µj%6l q€‹€îÀÅSð•„©2žJÂÿjfUÞñW* GÂ1Ö ßîYVeg­øªaa öÍk(òE_‘Ÿ9¯6¬ËÍŽù!)loMvHX=üðÃò›ßüÆgóòòLÅÝÔÔÔCÂúÍÎΖɓ'›û×®]ë»/8Äk»ÿþûÍü}ûö•¹_ ¯^½Z4h þóŸ‹­£—¼ì²ËäŽ;îÙ³gû¦¦M›šÊÈC«ÒëK²„¾_|²e Ÿ«^CHa¢SBÂîqî+¸ÄÇ˹ïëVHøÄ ÚÞ“˜(Ò¥ í€È¡²²²$--MöîÝ[f7ËÍ•sÏÕš23E–/ÙºUdûv&¦Ò§“'y¯UƒUP½h•ÚùMD h‹Hv*O$+Ù køóãX+øë¤ºðâ6VUò0ñ /]ºÔmSRRdÆŒ&<«ÁÚàðþýûeذamÖmÛ¶­¹?==Ý·Ý’BÂ'N4ó¿ùæ›2÷«"!áN:™*Â;vì(¶Ž^òO—iÔ¨‘´hÑ"`8p`äœ/Z%XÃå%…É6·^ûðBÂBÂî’”$Ò¼ùù°†´¯INiØv*‹þà$#CdÖ,‘W_yüq‘Þ½­ªÝú™c}æ01]ȤAa€ªÀˆ*¨>4¬Õi3§Ðn¢a xê±Ó°§ÿJ“6HdUÿ°íŽHX+_yå•r÷ÝwK÷îÝå¹çž3óƒCÂ:tÆK¦–Š8gáÂ…Ž+ ¿øâ‹f~~~~™ûU‘ð¦M›¤I“&&ø{ðàÁ€uΜ9cª#0 rÏÃV|ϼ’—ÑìšÁkÉk  L »‹NK#$ ïÚ´É:ÿsrh  " ´`„ÈÈ‘";ŠDEY¯) kµú!C¬ûôÿÓ§[Á|ýqŠN&¦’0•„@$cDTZ‰VÄ:…ûÍY3Ä:†Z9¶¤jÐ[ÆX•‡ÃÄ?$¬}ôQ¤­Y³¦dh¯†„õryú·V¶Ù!a]Îf‡vƒƒº>¾ñÆíWEBÂz{óæÍR¯^=¹å–[䨱cëuëÖMj×®-ˆÌóâ³ÖT ŠîžÅkÈk  L »‹Ö è†WååY翆å8Ý̘!Ò¿¿Ht´ ÖÿŒ#²h‘Hv6m€êUP}|ÚÅ ™ÂÝ4ì©U…õxžÌ-~¿V”Õ`àÙ°<|pHøóÏ?7aÛV­Zùæù‡„µÚðÕW_-:u2!â%K–H»víÌýÓ¦Mó­c‡v»ví*_~ù¥ ëNŸ>]jÔ¨!ï½÷ž£ýÒõSRR$555`Òàqi!aµlÙ2‰ŠŠ’~ýú™ ¶ 6˜tBB‚Ì™3GòòòdõêÕ2wîÜ‹.|?Ý:Ö¹ëJ^F Ë”UÕý^T2 E;¸…Öp°†$·m£MàMmÚð¯*,¤‚mi“¶‰¶þ­•'M²>ë5\¯žÈСV(8Ú#¨¦QÕƒV¡Õ ´ZMî—·Mdas‘Eq"GvÞ—¿Ã æ…gÔ/8$\TT$ëÖ­“~øÁ7Ï?$¬fΜi‚Â:/..NÖ¯_oB·ÖP¯²C»o½õ–4hÐÀü-&Lp¼_ºN¨I½e…„URR’™÷Øcl[ƒÆ-[¶ôm¯~ýúòÈ#\ü×ôœz"éCË^NχC›xÝx¾ß@hphøpÚÁ-fÍiÒĪø¨!a €^¤ï[C¨Ÿà 'NXï}n·*àêû“³)6V$1Q$9Y¤ €ó Õ#ª zØ1Ù ‡ª< w:–m…„5,¬AP›Vž-’•Q»«Õy÷îÝë»­á⬬,9{ö¬¹íÚÕewíÚ%§NЍç ‰wïÞíÛç‹FñÊî"ó›”ýšÖp°EýÏx!a„ !awÑP°†¾44GH^öê«"qq´Cu¦ƒµ ®þ0BƒÁ=zˆLž,²t©U%—JÂ¥WÖjËúYx #ª zH$òYÚ¡ºÑàçDZ"KâE ýÊ:|ÚEdóHW=•P•}Q‚ŒÑVa­]–ý©VPTCåð k¨d„„ÝÅ +ýW/xѺuÖk '‡¶¨Ž4¬!ðèh‘qã8Μ#$ ÜO«Ž~#òí$Ú¢::²Ó Œ®bkõÕ(+(ì"„„Òc«¡ß=óœ-¿{–µ¼}nÀ;4$¬•Æ€JFHØ]‚CÂII´ ¼)/Ïz ¤¥ÑÕV ÖÊÁ}ûŠdeÑʇ0p?»’¨þ‹ê)g…Èìh‘-c¬Û ÕÛgÜs}¸cÇŽÉÁƒåìٳϒhuh}-ïšá|Ì)Ö¹ï!$ €04ˆ°›ø‡„5DGH^¦•f_}•v¨Nôxê{ÜèÑ"…üF@î·c²UiÖEQT€5@úýt‘“¹")Q"Ù h—ê@«E/O°Ž©Ó ¶­ãŠzù=c€0ЀðС´ƒ[Ø!áÜ\‘æç¾"L™B›ÀÛï_ýûÓÕÅôéÖfÌ -T!aà~_ôYEï·'h TƒÂÛ_Y3Äšà^Dz­êÐò_'r°×ÃÔêËÛЖ^ôí$B ÙuïN;¸…ÎʲBÂãÆÑ&ð.­¤C;T›6‰DG[„àBî¦Õƒç5ɤLŒghåèÙÑ"KnI©%òÕ(‘C›D~ÝΩSÞV‘œå"G2Eö§Z!ï´AÖq\ÐÔª}¶‚×K\7\d%£÷žDi„ !awÙ¶0`ËȰ^;wÒnVP 'Ò·¯Ha!íàÂî¦C­,{4‹¶ð’Ã"_Üe{&÷MZ5XCÂ{æYAÿ ¡UÄÓ¹°'iHxI<í€JGHØ]4l‡„Û´5Š6·Õ«'’œL;¸Yb¢U:'‡¶pá wÛ2FäãXÚÁ‹´úìÜ"[ÿB%a7U¾ÐPp0­"¬Õ„á=¦Š4€°»Ø!á;¬ã6œ¯ˆð¸Þ½y¸YZšHT”È‚´€ÊAH¸Ûò‘õ‰´ƒ-n#’1švð:­$«?€÷@˜<þ8!a7±C©©„„5nœUUî/Ò·/í òîUX 2;Z$‹ëçyNî:‘žû¯ìá ÚÂë6·Â¢ðB ØvBÂ@ }-èk"/¶p­¬ÇnÓ&Ú@å!$ Üë§EVPôX6má5ü8–v€Þ5ƒvð"­$NHa@HØ]üCÂýûS((‰ŠY´ˆ¶p›„‘¡Ci•‹0p¯Í#EsíBÂÂæÇ”§žzªÔeÞ}÷]¹ä’Kd×®]ù"}ÿOËÛf…m¢-¼æp†uìfÑ^w"Ç:ö§Ò^DHa¢!áøxÚÁM4$jÖ?~üx±ûî¼óN¹ûî»ËµOáî,,oÛœEBÛø‡„_yå¹ì²ËdÓ¦Mî?øZ54%J${//ú´‹HúPÚ"ûS­ð‰Ú‹  L »/ ëı,ÉÉV€>/Ï»mà†pF†U ýßÊ€JGH@¥Ñê­ÿûß}Ó‹/¾(uêÔ ˜÷Þ{ï¬SZ·°°P²³³eòäÉf­ìÏî”ÉÉ9 ***2ánݺ,{æÌ™€Jºœ†%5P<{ölßÔ´iS4u²¸øì ¬V¶sË–-¥fÍšrêÔ)GÛ¨ìp¤µÖªÚÚ.Á¯A×ÚþªÈ‚¦"g¹þš'Í©'òí$Ú"{æY!axÓg=  , »H8&†öTAž5«êóý÷ß—öíÛËÁƒåÉ'Ÿ4WµÓb-ãν±ê•îüéÕŸyæéܹ³4jÔH,©©©!·§ã@‰‰‰rÕUWɺ§i¬ï$$œžž.·Ýv›Ô­[WÚµk'Ë—//ö¼Â5J¤IãœEùék­W¯^²téRùøãÍßyÕð—sçÎ5Ï-???äíònÃ+í`cD@¥ÑÊÁÚbOÖ¬U«VÀ¼ßýîwë„ áîß¿_† &ÑÑÑrÍ5×HÛ¶mÍ2ÚQã/T§Ì¾}û̼§žz*`Ùà°v(émí8jÑ¢EÀ4pàÀR÷¯:[µj•Üzë­R¿~}󯶹vÀ½ýöÛæþÒ:ä”vÊýá+¯¼R®½öZ¹ï¾ûä§Ÿ~òÝÿÆoH§N3++Ëló_ÿúWÀc8éD  «:˜õ•VôÕ ¸†Âýi`V—Ós­,&L›nºIn¾ùfIÒч eü;üÛU;ƒÛµ<í£œtZú‡„üñGs®?þøã!{YÛsÒŽUnQœHÆhÞx½èÈN+𳂶€ÈI„„½lewB‹éÓ »^°ÀªÈ ÀÒ·¯HïÞU÷xö¸Í=÷Ücú×Ç/±±±fÞĉ–:uª)Ú¢W“œ?¾´nÝÚŒ…ÚÞ]wÝ%·ß~»¼öÚk¾ñ€ò¬_RHxãÆ¦ðÌ< .4û­Wœ,éÊ–á k@Xœo©¬sʾ’ê¬Y³ÌX•þ] ¿¨ö8“N5jÔ0c‚ ãU«½*Ò~þ넳Ý"]%ÂFCà 6,u™P!\ 6nÜX233Ímí˜)­’°ÿÀÓ§O›j©={ö XV«û‡„54¬? (÷þUWÚ¾µk×–Þ½{›ð§~)Ö¬»•Ö!÷ÕW_™ê̺þ’%KL§œNµÓ 77×,óßÿýߦƒÍßwß}g¶ùü#à1œt"ú‡„õØ'''›íÏœ9Óܯիõþ+ÄÚq¨û¯Ê¶÷M; [µjeöM;Dôœ³ƒ²Áçå—_~iÚåü£ ßj‡å 7ÜЮ6'íã´ÓÒn 4ëqÐr¨êÊN¶ç¤«Ô¾¥V(0o´^ôÓ"ëøŸÈ¡- ²c²UUÞDHa¢aSBÂîb‡„µˆ¨†„Oœ M¥U„µËùß]ôag÷¿ô,ÑE‰€IDATÒK¾y:>sýõ×KLLL±B þ´ït?yä‘R÷¯:Òà­>¿§žz*`~I!áà6·;Ó‚+ã* ›^yå•æï ‡êD î 8uê”ôèÑÃtØaVíÐe’““M˜Y;øþô§?ù¶ñøã›ûµ X÷îÝ¥ÿþ¥žs¿þúk‰!ლ¿ƒ«üV4$\žNK»m4x?dÈóúÑ0|¨ãæd{eµc•Ù<Òª"{†kFz–†7=A;À¢¡ñÏzÐ^~?Ø2†v@¥Óð%Œž¸ŠÞ¹Ó:v;vÐ&€Í®°‘þÇ*©ÿÅ_4óµ‹M‹‹4nÜX233Ímûª’¥UöW‘õýok?½O0`@…Ÿ×…°ß¯V¬à­nf̘aÎûÜ´iÁ½úd¨sjêÔ©f<íwÞ1c‘­[·6Á÷Šr²½?þØJš>}ú¹óp…¼ñƲ}ûvßý¡BÂ÷ÝwŸ™§¯·ò<–ý|ïºë.¹ýöÛåµ×^óm·<ë—Ö+Âêëù0û¦í¬ãm»ví ëëÀ-èæ´iVV–ùÕªÒÎÿ/:_ï×pbEhðX¿ø}ôÑG!ï×0çîÝ»KÜ~ðþU7§OŸ6={ö ˜¯•“„„u}­ÞüØcÛ¶¼[µjeþ‚ݱc‡£p¨NÄÒ~ÅüÏþÓwîhe\}nŸþ¹¹oóæÍ¾å'L˜`æýðÃÅöýæ›oxNå ë¾êßüã¶[ž°û”§ÓÒn›“'OšóW«skEÿ_—g{eµc•8–-2§žHæÞ4½ìØs/ŒÉ´,ZE6}(íàUÖjÒ@%#$ì>vHX+ë±sX|ðŒ¸¸ª©Xk÷ë˜Kàk´»©RjÓ>}ÿ~ue‡|׬YSl{Áã]?ø¶^]±víÚràÀGÏ«2Ã…“'‹hÔèv´:°^Åñ/ù‹ožŽ1j1;\[Ö9¥Y½ß?äz!Bm’æÍ›—¸Ž=ΤÁa-$óç?ÿÙ¼^´Z¯Ž/•ç±ìç«W ­È¾–õZÖ±«fÍšù–×BB:Þæ_ć0ð2º¹T;ú¥qîܹ¦Jª~I]¶l™ÄÇÇ›/ºfEh;v4“µê²Ò¶Ó€¬“°Ò6þeï‘#GäòË/—|ÐÜþßÿý_³~nn®¹­ÁS½lÎ{ï½÷£¬NDÿ ÿð|`æýõ¯õÍÓ€±† ï¼óNs9#³fÍòUÈõ§•…µ"±þš¹´„ÒBÂ*&&FþßÿûÛ^µjUȰ“öqÚiéVZ-úÚk¯•ßþö·¦3Êæt{eµc•Ð*Â=[È Ö«Nå‰üóÜ_÷-¥-`ù¢¯†7@˜vŸ=DÆŒ!$ ”dÆ ­O¡ÕkÃÉîïÚµ«|ùå—rìØ1S¥TÑv·Ò%zEI-n‘‘‘!K–,‘víÚ™u§M›Vl{Ác]?øö† LŸ·;Ñ+ñi¸sõêÕfŒ)ÔóªÌpa—."Cùí{µ¥Åcn¸áßíqãÆ™ñ=wË:·³³³eòäÉÅ*cWDiÛ³ÇÓ´ºï–-[Š­k3Ù“†n}ôÑbãwNË~¾:v[‘}-íµ¬ciÊÖJͳgÏöMZøF+‡óu àts¨vôR4uêÔ1_ô4ä©ÿj%[íìAÉ´M«kÛ 4H®¿þzyúé§MûiG@Y_ ÿõ¯™û´£Cƒ³JÕËi§ÁŽ_ßOÁ¯ËŒ5Ê„·û÷ïo. *$\V'¢…}?ùäùÛßþ&W\q…é ð¿$Òwß}çëÄÐËùÓ­†x¯»î:IKK3Ò>|¸ÙÎO?ýTjBY!a»²^ÚHŸóK/½$¿ûÝï̼^x!`_œ´ÓNËà°ÒöÔã«—j²+2;Ý^Yív‡3DfG‹|?«—Úd…„ì¤-`Ñè¦'h¯Z܆0‚°ûhÐ.1‘0PÍ%ÆÄ„?”j÷¿õÖ[Ò Aó·^áN¯èL¯©A_]&..NÖ¯_oú©u, %%%`{¡Æ$*²~¨í¥ž{ÃhÙ²¥¯ï[‹©<òÈ#!ŸWe… õ½JCÛÓéî®¶,Xà ºêULµÑ³Ï>[â9¥|† f^/×\s)Ê£÷§§§WèñnOÇztÜHljžyæ3&g³Ç™æÍ›gƇN:UáÇ*í5T‘õýokðXÿnÔ¨‘´hÑ"`8p`Ø^ÇnB7€jI¿pkµT }j•Y½²­\¹Rî½÷^éÓ§¼ùæ›æ‹¹~aÖ/ÎN¾@믎¯¼òJ_gZll¬|þùçÇE« køV§¡C‡š_'ë²ÿøÇ?ÃI'b𯘵à÷¿ÿ½yÁºtéb::4lÓ¦MÒ¦M³ Jë¿W]u•|øá‡ËU$$¬—4ÒjÀÚ1©óµï?þ²’°“öQN:-C…„•†u_þð‡?ø~±îd{NÚ1|/èsû¹$^diGª{ÝîY")Qœ8ïãXB¢^¶°9Ça1k!a·>Üš´ËJݼy´ lòdëõ±m[øÿ\¯V¨W~,)X¨tÿ+jEPÛq:¦s¡ëûÓ꨻wï®’ñ$ûs&;›ó²ºÒó^‹ÚŒ1B>ûì3óºøæ›oB¾V”Œiܸ±dffšÛ .¼ JÂåÙžŽê~êØ‘²…ºšgE«´ñÅŠ¬ü^s饗ʀ¿?x Ý\€é/ñõ óG}T®õ´#­¤Ë ©C‡™ðlY_Òt":¥—ÓnI´ãoÏž=òÅ_˜ÊÇ•ñ˜þ4Tk_FIŸW¨°“öñWÙ–N¶WV;†Å¶ VõØÜu¼(½NÏ­ Ø4$ºmíàåãOHa Uh »‹Vzì´4€@Z3"6V¤wïð=!VIï ]?øö† ¤fÍš’ sæÌ1…{´ýuÜ“÷'B€›?¾Ô©SÇ|A®[·®ù·U«Væ‹uU Ç—ô>}úHlll•\&Ì ·†„«¼gXÀ•ÝEÎò"…ȧ]D6¤pžVßÃ5d=KCÂ?$Ѩt„„ÝÇ?$ܤ‰È ~O ”häH‘zõD22*ÛÇŽ3W¬‹”¾øH4eŠõ“•E[Twú:hÖ¬™{ûõ×_î  Ó+{jXVçÅÅÅÉúõëMàµF’’’RîÇv²=­t\¿~}³Œþ{ÿý÷Kvv¶oNBÂN«´±¿Š¬j{ZàF+!ÛÁl}N<òH‰mà%ts8¯è¤È¯Û™*sÊÛ*’³\äH¦ÈѬóS„µÃ"++KÒÒÒÌ—þ‹Ñ‘ŽNÄÜÜ\ÉÏϨ¶ÖçxôèQW½ETi;îOù0Fdq‘“¹¼?âçDæÚ–Â+$¬ïð&BÂ;$œ—G[¸…†ûþûâCÍÏ}U7Ž6JRP /Ò¦UÕUKÛ¾/KCZ`Æ?[TTdÆì*:^æd{ö¸à©S§.ê¾Wæs×ñ·Ý»wóc?„„œ§¡V Û0Uí¤¡7 ¹,í(òY‘uÃE2F[—ÏÎYa…Š/ѨV^ž@@çʳÞ3÷-¥-`ÑÏG='¦Ñ^EHab‡„©òè îÞÝú»cGBÂ@Y´Xhl¬Xõ+Š0[·Îú|ÑϨ*„„œG%᪫$¬&­|¨“^&].ßN²ÂÁÖ°ðDZ")QVÊLn)²{–È1zíP 害Îs=çÓ‡Šœ9A›à¼ÃÖ¹‘¿ƒ¶€åÐ&ëœ8²“¶ð*BÂBÂîãÖG¦M€²è{\\œHÓ¦"ÉÉ´GUèÒåü{TBÂÉÎZ¸ì"_²ÂÃÖP”†ˆ×'ŠìšaUÖP²’5˜L@›É áùC›­swë8«’¶ž×ú/UAŠþ@BÏÂã°émôœ â¾wé©   »H¸G‘áÃiÀ‰‚‘ÄDë=¯M‘ DÒÓE–/ÙºUdûv¦ ¾úÊ a&%²i瀪EHÜ(o›Hæ‘´A‡™˜Ü6iè}I¼U%[ŒBÑ0ùü&´ÎÛ·Ôz¡º¾wéñ'$ €0 $ì>Ö jÈkàܶm"#GZAa}ÿcªü©F ‘ÁƒENP@#$ ÕEÁTfrW%ác{xݹ5CD–'Ð8OáåÇÞEHa¢a9BÂî¢!áæÍ­¿µŠ°]U@ùíÙC%ápTNI‰‰éÝ[¤0»³æÎ+½zõ’üü|^@5CH‘ïÓ."éCiœg‡„á]zü÷Ì£Pé4LHØ]^}•0w|¾4lh½gEš×_ýÜgß%òË/¿xþ8åå‰df–gr><ÉûˆlŒª òÍo"²e í€ó¶M°Î x—†„÷§Ò¨t„„Ý')é|Hø‰'D:v¤MD¦É“E¢£­ªõ‘Ä‹!a­è¼b…È„ "ýû‹´icý?Sy& D2Bˆl'r¨Šâ¶ŽYØœvð2BÂ;$¼s'mánÚÔú{ܸóaˆD "]ºDÖ>y)$¬íQ£Dš4±>ïããEFŽ™>]dÑ"‘Œ * 3QIT/„„Ùr×YaÀ¼m´ÎÛø`ØöwÔ(‘æÍ­¶p!aD®ô¡"k(ý€  Õ€¨EáM„„fZÍ‘°{Ø!á;¬Û„¼¸ÑÎV%ÜÞ½#'(\YV®\i* §†©Ì{F†HT”È‚œG@0Bˆ\K;ŠlG; СMV@4omáUvH¸°€¶@Xh%BB¦îa‡„íì!an¥a×&MDºw¯^qûôé#±±±®B\šÂB‘.]D¬¿"$ €È5;Z$›òBYØç&„„ÝåĉÀ°V‚ž4‰vàN֊±±ÖßÕAnn®äçç‡eÛ“'[U„«K[•QUD¦#;­`þÚ²’­sãÌ Ú«  Ì »†„W¬8üÆ£M¸—V4È ¿ŽY½ª W¦;D¢£EF¦-€’0ª €ÈôÓ"‘”(‘³\#A~H" êu„„f22…vp ÛÁn­¾9f mÀýfͲª ׫'’˜(’–F›Ø48ݱ£H›6Þ Qœ6P=Š$'[X}¯ÓϨ¡CE&OY´H$#C$3Sdùr‘­[E¶o¯¾ÓW_Ym1w®H|¼HLŒÈ¶mî;¦¯¿þºïùå—_.h;‡2Û™5kÖ¹ÏÀ$ówAAAÄ?ߊ<ÿàu¾ûî»sç@¼™W³fMóoÆ ]vËñ.ì3¡ ¨Û¶m3aßÜÜÜr¯k‡„SRRdÊ”)Ò¯_?s»k×®4,ª¯´A"k†Ð(në8‘…Íi/£š4ÂŒ°ûDE ÷èaè ºÙ¹Ó Éê!4$m‡½8Ýx£v£+VȈ#äèÑ£´Ó§O›±¢E‹ɇ~(5jÔ³gÏFÜó GH¸C‡Ò¤Iùâ‹/¤°°P¾ýö[?~¼>|ØÜ!cr‹[Ž'pFU¨"ï¾û®ùr¿k×®r¯k‡„÷îÝknŸ9sFZ¶li~}êÔ)ÕÓ‚¦V¦çÅâ6´ƒ—@˜vç1›>Ýú[ÃsZM¼ /Ï›•„Û´±* ïØáíãÙe—Ijjª|úé§rùå—Gä>VvHXƒ¿ú÷èÑ£K\þBÆä8ž ºaTP¥¶lÙ"Ï<óŒtîÜY5j$ƒ6_vCYµj•Üzë­R¿~}óozzº´oß^Þ~ûmÇ˼ÿþûævNNŽ$&&ÊUW]%ëÖ­ó­¯ËßvÛmR·n]i×®,×^´ ìGYÏK÷ãºë®3­Zµ2ë/^¼Øñ>‡„•þJZ·£ôçwÜq‡¬·lÙ2³Üþýû9ùà.…V0{mâÖ'Ьd´×Ó4$<;šv@Øv÷1#$ ÕŸ†£;v´Â‘³_O<ñ„Ü{ï½ÅæÏŸ?_n¹åS=Ø»ÊÓ'!å; öõ×_›mœk„­š—ócc”'Ÿ|ÒŒO5kÖìÜçä¸b•iø€ î“9Eäѳ…´ŠKd…á][lj,lN; lââ »HXÿmÎWð„É“E¢¢D22"c´:ðe—]&ùË_|ó²²²¤F&|ªBUÒõWÒØ™Söö5j+,,”믿^bbbŠU.ë±Kk+Ïú%…„Œ•¯sêÔ)3&¦ót|LC·gΜñ-jL®´çât¼®<ÏwÈ!¾+€¦¤¤˜yñññrøða3ïûï¿7óÞ|óM^È ¬ . íŒÈÎΖɓ'›/ÀZ±×¦_˜5˜«¿®õ§_îí ¾N–ñÿ"®— ò§ëk'†€gϞ훚6mj~ìt?Êó¼‚;$œìƒÍ ëóyðÁåŠ+®„„sÙ!›Î¯W¯žé¸P¯¼òŠ4hÐ à ¸FúP‘O»Ðmew‘õ‰´ƒ—@˜u?÷µãñÇi7ÑPð˜1Öß“&‰4lH›€Šté"Ò£GäìÓÿøG¹á†|·Ç'¿ýíoÍ’*)$\ÚSy”´} Æêü}ûö…hÇ’»¤±¶ò®*$ìt¬¬¤ç¤Ák]VïûÃþ 'Nœ0óË û?—òŒ×•çùùäß¼#GŽ s„!a@•Ú¿¿ 6L¢££åšk®1—àÑ/Àééé¾e´sBç=õÔSëú‡s,SZ§~ù×ù5’-ZLt¼åy^ÁNöÁf‡„íË7é/¤{ôè!uëÖõ…‚—/_n–INN6¿×íüéO⤃;-‰Ù<’v@ÉçÇ–1´ƒ—iHøãXÚa£!áá\ÀÄU4 –øïß“&%‰\Âx†VÖj‹EÆþ,X°ÀÕñšæÍ›Ë³Ï>ë»?xìÊÉSy”466qâD3ÿ›o¾ñÍsòØ¥U>®Èúþ·Ž••¶:¯W¯^æ~‹Se…„ý·SžñºŠ¶—^²d‰o!aPUè"T©:HãÆ%33ÓÜÖ_øÿÂöôéÓR³fMsiú«\;œëd™Ò: 4è«U‚ Pâ¾:} §Ï+¸CÂÉ>Ø‚CÂjéÒ¥fÞ?ÿùOs[鬿jÖýµ;6oÞÌI÷9•'’%òýtÚ¡iÙí¯Ò^¦!áå ´†°»Yr²þwÁF€ŒeU•/(¸øû¢…^ôŠ#FŒÏ>û¬X07xìÊÉSy”46öâ‹/šùùùù¾yN»´€nEÖ÷¿ít¬¬´}P:¿V­Zr×]w™Ûå —g¼®¢íEH\L„„UF®úeW©l³¿<¯Y³&`ÙŽ;JýúõÍ/rí/è=öX@8×É2¥utëÖMj×®-(qŸ<†Óçõþûï›y7n,×>¨P!á>øÀÌûë_ÿê›§<l¾óÎ;¥}ûöœtp§ƒi"ÿ<÷ßÔ¼m´BÓðI´ƒ—iHxewÚaCHØÝÇlÅ +$œM»€Wh8¸iS‘!C"c}ôQ¹òÊ+å¾ûî“[n¹%à>ÿ±«òŒ9eoÿàÁƒAŸ•ÝåÆoôÝvúØ%µUtýàÛNÆÊÊ ÿúë¯R§N¹ûî»ÍíPcr¥mÇÉ>\H{!a@•Ñ ¼W_}µtêÔI222ÌávíÚ™/ÀÓ¦M XVïÓ_üêúAƒÉõ×_/O?ý´YV³N—)­Ó`Æ &P› sæÌ‘¼¼Ô¨QCÞ{ï=ßrN»¤±¶Š®|ÛÉX™ÿ:_ýµkÓ`®>·¬sø<òˆoM…“+í¹8Ù‡ i/BÂàb"$ ¨R3gÎ4_ õKo\\œ¬_¿Þ|áÖŽ‰”””€eW®\)÷Þ{¯ôéÓGÞ|óMSÍW×Ó/×N—)ë—Å©©©Ò²eK_GV ÖŽ„òî‡ÓçõüóÏ›ÇÐåæÏŸïxì°=5jÔH~ÿûß›} Ö¥KjÖ À•¾èKø¥ÓJÓûSi/Û2†÷ „!a÷éßÿü1[·Î oã"Eà9£F‰ÄĈìÜyq÷ãìÙ³Ò¬Y33^£Uný]•gìÌ {ûo½õ–4hÐÀü-&L(¶¬“Ç.m¬­"ë‡Ú^Yceþël;÷ߤIs[ƒ½ú¯>Oÿ+oªPcr¥='ãum/BÂàb"$ ¨rgΜ1—ä±™_ùj‡Iiô‹·~Yþè£.h™Pô’K»wï.sJ{ §Ïëøñãf¾Þ_Ñ}(þjùÁäDƒ{Ío"²mí€ÐNå†ÈúDBÂ+BÂî£ÇË>fZAXC©|uÏÑ‚± "qq"nª¥Rѱ³PüCªºÝ]»vÉ©S§ÂöØ•¹ïå+Óç—––f* kEáPJ“»}¨Ìç P "’vXè%|rrrÌ—íeË–I||¼4oÞ\NŸ>íx™ªØH¢•…µã'•¸ÕÑ,+ºgmÒÏ‘#;i /[7œ0ÂjÈBÂn£Ç«o_ëïÜ\+$¼`í^¤ŸîÒE$'Ç{Ï¿¬«lÀ[ "’^öG/Á¤uëÖ5ÿ¶jÕJ6lØP®eªb?"IŸ>}$66–_+ývͰ 'si „vh“uŽhXÞEHaæ_•î9fÝý¾&hH8)‰v¯Òpp|¼Þé±z„„à0 biÐU/Ï£— ÒËö„ ¾:Y¦*ö#RäææJ~~>'ÜkóH‘%ñ´JöÓ"‚ä°BÂiƒh„N‡¥ÜäñÇCÂQQ"3fÐ.àeZQ¸G‘† EæyèâuÇŽ“ƒRP!aDŽÅmD2FÓ(ÙIVHÞ¦!áu”u@øW¥Eä7.ð˜5mjÍx[a¡È„ "õê‰ôî-’‘A›À[]@d8še…?÷-¥-P²“Eæ5¤¼.}(!a„!a÷  7oNHpÞ¶m"}ûŠ\r‰HB‚Hr²Ui¨î T¯¿þº\rÉ%òË/¿¸ó ìša…„es0Q²­ãDÅÑ^÷YBÂ+BÂî£àøøó·Û´9’vÒ°ð¨Q"MšXᎭÛ3fˆ,ZdUÎÌY¾\dëV‘íÛ™˜Ü7<ÉkœGHP~Eç¾Yþº©:Oy[Er–‹É9ÉOé#³#s›Œ;VrýJ¬X±BFŒ!Guç“ZÕ_diG.J§!ᕌÔ{žž„„F?NHØm4$¬Õƒmzü†óµP‚ÂBíS™0A¤ëÇ%ÑÑVp˜‰Éí“…l„„å§!R­öÉä­I+w~ÑWä«Q"Ù DΜàµp½ûjð®]»ªÇÒói^C+ ”f}¢õ^o#$ €0ÓÀ)!awyõÕÀp"C‡Ò.€òÉË£’0•„@õBHP~TöV%áÃ"û–Šü$²é +˜•%2§žu¹w½ï"Ù²e‹<óÌ3Ò¹sgiÔ¨‘ i˜xüøñ’ 5kÖ”ýû÷—{¿Âjãã" šVù9ZÕŸp(  ì4$ì_•‘OC—øz%&ŠtéB»o#$ .Ì‘"iƒ¬*°Þ;–}ÑvECµlõæª;î¸Ãx?î›wèÐ!³ì /¼àx;t{ÿý÷{ìž={J³fÍ|·=jBÂÏ=÷\¹öÃéóÒ`pð¼’BÂ]»v•'N˜y_~ù¥™§ë_è~U* oÇë eÓpè–1´ç!a„!a÷  s  €ÊòÓ"+èùaŒHΊ*}èÂÂBÉÎΖɓ'›`«VƵ™l·nÝÖ9s振R®“e”ºÍÉÉ XN׿ì²ËLØvöìÙ¾©iÓ¦¦"°Óý(Ïó*OHxÏž=¾eòòò̼‰'Vx¿*]î:+dž¿ƒ×ʦ•Ë ”ããXÂâ+¦îCH 8B òœÌµª §D‰ìžö‡Û¿¿ 6L¢££åšk®‘¶mÛš`kzzºo™}ûö™yO=õTÀºþ!X'˨à®MCÃ:¿Q£FÒ¢E‹€iàÀŽ÷£<Ï«T‡¤qãÆ’™™in/\¸°XÅÝÓ§OKÍš5¥gÏžëj•^;ëdURHXµZwÀ€%î«ÓÇpú¼*+$\žý ‹9"³£EvÍàµg´êt˜ß[à„„f„„Ý'550$\YÀ‹èá±y¤ÞŸ–ÍïÝ»7 ìªì0íš5k–íØ±£Ô¯_ßTèUê}ì±ÇB°N–))$¬ºuë&µk×–”¸ÏNÃéózÿý÷ͼ7úæU$$ìt¿ÂF+ÂjH¸°€× Êv*Ï ï™G[x!a„!a÷±CÂ99ÖíY³¬Ût9#$ ÂgÝp‘cDŽì¬ôMk¥Û«¯¾Z:uê$²dÉi×® ¶N›6-`Y½¯V­ZR§N4h\ýõòôÓO›eÇŽëx™ÒBÂ6l0ydΜ9’——'«W¯–¹sç–k?œ>¯}ûö™ÇKLL”üü|³^ECÂNö+,´ê´ýÖ'òZ3G³¬ðÁ4ÚÂë  Ì »ÎÊ }À‹ €ðÑèòkÒ¿+ÙÌ™3M Vìqqq²~ýzÒ­Q£†¤¤¤,»råJ¹÷Þ{¥OŸ>òæ›ošª¹ºži.SZHX¥¦¦JË–-Í2:iuÞGy¤Üûáôy=ÿüóæ1t¹ùóçW8$ìt¿*VƒÕÀçá ^+pæÐ&ëœ Ãà2Þ6v@ØLš$C;¸ÉŽ¡àŒ ëö¦M´ ð.B ¼Že[Õ„¿–ÍŸ9sFöîÝë»]TT$YYYröìÙR×Ó ®†`?úè£ Z&”ƒÊîÝ»Ë܇ÒÃéó:~ü¸™¯÷W¦Š>÷rYÜF$m¯8÷Ó"+$|"‡¶ð: ïšA; l’’¬€)ÜCÃÁþ!áÜ\ëöŠ´ ð.º¸@øe%[Á¾ÜuåáwíÚ%sçΕœœ¾]¶l™ÄÇÇKóæÍåôéÓŽ—©ŠýˆÔö©ü!’%’·×œû!Éz/fG[ç&„„ÝÇ gø]°Ho''Ó6À»èâUC+ÆÎo"r*¯ÊzþüùR§NS·nݺæßV­ZɆ ʵLUìÇÅPåû¥U`õ\SuiTc Sv€'$ €0"$ì>99Ö1KM=?/&Æ:–^E¨G³¬pßE †ž={V²²²$--MöîÝknWd™ªØHmŸJ³fˆÈ‚¦%0—Û6AdasÚ„„v„„Ý)8$ÜüÜWÈI“hà]tq€ªóýt‘”(‘C›h ¯Ò§ž¹ëh ”ßÖq"Kâi@Ø%'v#=f+Vœ¿Ý¦È˜1´ ð.º¸phîܹҫW/ÉÏϧ1.Ä罩"ëU™S¬`ߎɴ*F+‘ë{ ï%û–Ò­F«ÓÂBÚÂMô˜iÀÛÖ½»Hb"í@u§WH;v¬´jÕJ:wî,«V­ª´m™ñÁ÷Þ{¯ØüÌÌLY»v­8pÀí©c‘°_n<ž8EHP­Œ3F.¹äÙ½{w¹ÖÓŽ]O§5jÈUW]% ò¯ýË·Ì믿nîÿå—_ªüyùï_­ZµäÚk¯•‡~X~þùg÷$ Ïo"òY‚Â^q¶Ðª«„µ’0PQë†[ !áý©´ÂÆ geÑn%’”tþv"Ãù ÀEõ裚ñ­ãÇ»ïÎ;ᄏ\Û 5^7pà@éСƒ,[¶LfÍš%Ï>ûl¥é9sÆlkôèѾyß}÷ÄÇÇ›ù5kÖ4ÿ6lØð‚Ã¥-Z´Þ½ eÊo~óiݺu±åut¿œŽa:YΓüñÇ‹Ý÷Á˜û–/_^©çHeîE„ëx) "Ò¶mÛÌ—ÐÜÜÜr­w¡!áÙ³gËâÅ‹å7Þ0Aᨨ(ÉÈÈëÏòì_JJŠL™2EúõëgnwíÚÕøp†Ö){¾ÈÉçæ}%òëv¦ê0åmÉY.òË+üq¬Èœz"?$ñæ† óE_‘Í#i¯;s‚0ÂŽ°;5oÖ€pß¾´ Se‡„W¬X!#FŒ£GšÛ'Ož”zõêÉk¯½Vâ2"THXÉMš4‘/¾øÂ„x¿ýö[?~¼>|¸\Ûý¯ÿú/ó\ ý.g±iÓ&_xÕ¿Ò®XµðÑgŸ}Vìù–4ÎêöpeWeÏŠŽ[—÷ø.„„éÝwß5_wíÚU®õ.4$¬—#²½òÊ+fž~1-ÏÔpÞ?íhÙ²¥é8uê”;ò‘L‘ÅmDþYà {1UÏias«Šð±lÞØpá–v´Î'x›¾Ÿ@˜v' OštþöOˆtïN»@u§c':ŽÒªU+éܹ³¬ZµªR¶[TT$½zõ’÷Þ{/ä}™™™²víÚÿÏÞÝÀK9çÿws¢”JòséJEý…"û«´ÝŠ"d77k×ÝŠxl=r,v±!ä±-GÛC·’j•ÊII*I’äÐíæˆèæ¨Ï¿÷wöšfæÌÍ5§9sfμžÇõ8ç\sÍ5ßë{]3s®ëz_Ÿ‹j£ ¤:$é“O>qó/ ½R(…"C tF††Ë+ò|¨Â]°`Apš§žzÊÝe42œûòË/» à I'š¯'ÛCÂÁÏú,ïyëd×?…0d°¥K—Ú]wÝåhÔ«WÏúôéc³t†"‚vœ{î¹V»vm÷sþüùÖºuk{úé§“šnôèÑîï 6ØÀ]%Ý¢¢¢àó5ýyçg5kÖ´–-[FÝLô~–Iíhذ¡Û)Ò=_Õ}ý´!2$ì-“®ô,((°ÓN;ÍÎ<óÌ2 ¢…„§M›æÆéJÑh;¨~×NôèÑÃŽ?þx;òÈ#­E‹îJÔdú5ZûtU«–MtÕìE]äJ…Òm•4ÝÆ3kã­$üõ* WÕJ»¿çƒ©¥ÐùªôC®Û¾6ÞRD_ ÂÎN ºÿoýÞ¦ ý•)ÕÑhaÂË/¿Ü Ñ9‘qãÆÙÝwß’Àa´ ²òÙgŸY«V­‚Õ]õ³nݺ„…S° ø9¯çMSRRb¯¿þº›Fó?餓Üx/C§ñø9'¡ç:5ý¼yó¶ƒÝ»w»ó‚zL¿Ç’èõ¢}饗Üß¡U‘¯¼òJ7hüƒ>?`ÀëÚµk™>‰wžÕ{ÿ(«“ û9_ªó—<òˆµk×ÎõGÓ¦MÃÎAûiWärúÝ^"×iäùëDë3^Æ:·^ÑçÃ-“dݹc@…"$ ì™gž±ž={ÚóÏ?o“'O¶3Î8ÃLCé åjÕª¹@ýS¯og8ô …Ÿé¼°îÝ»Û\àv@½PêÂ… í°Ã³«¯¾Ú^{í5»ôÒK-///ìÊF?¯ág™´ãÔ¿÷¼‡zÈí̯^½ÚW"CÂÞ2é9ÚÁRà·}ûöî MèÎO´îUW]åÆéµ¢xò³,}ô‘~øá. üüÃíÜi'øÃ?ôݯ‘íÓê˜1cÜt:X š·×mvB©}Z—e×¾÷) ÌÞéøüšT×lÝ$ú!×y!aý*Èܹ„„³Q“&á!á‘#Áa@åIuHXçA~Û¾}»û[UTkÕªªŒœ¦¼b…„°ËÏÏwaJKKíÓO?uçŸTôkùòåîÜB‘lû·?çõBÏשšóÐ}_þú[¡YS\¼xq™sz~ÏÇéüÎë]qÅ.˜©s€'Ÿ|r™íà÷¿ÿ½§h´0­Ÿ×‹u>´qãÆÁð¯œp .ü®vtëÖ-lüOÚM£ó™¿lÙ²¨ËkûòÓ¿Þ9I‹T…ìÐáˆ#Ž(Ží|©úªQœ+·üžÏŽ÷‰5ßT“ϪsÇ€ GH²€v‹‹‹møðáaSÝD;:tˆ{ÐÂïtÞŽŒn‰JÏ×U³Úá?~|phР»Ú0™×H´L±vŠü´Ab…„×­[œF· Ñ¸‡~88ÎÛáõílé ÅæÍ›cîxúY?j³n-y+—d–)´}jƒuÔQîJØ?þ88ÆëjyïÊø?ÿùÏV§N¨]*Íç#ÍÆæíÛS]Ä@rta‚¡ß-¡/r!a¤!áìÔ±£YèaÈ)Sëq ת@¥ñ=z´µnÝÚUã-((pU1Ï<óÌ2á_o:ëQuR¯z¦Bu¯óK¡ÓxæÏŸï ÃÔ¬YÓZ¶l5ä8gÎW¬EáHM;oÞ¼2ç¸t·Çzõê¹Çõ{,ñ^Oíkذ¡›·ªŸª­ºe®oâç¼^²!ádÎÇ)«ŠÄ¡bëUzÕ|ôøÅ_삪ɼ^´¨–Cã>øà;v¬xâ‰nüˆ#ÜxUOÖ9IU³Ž¶¼±æë·½s’O?ýtXû5¨Bw¬p¼s¿^bUÜUÝH~ÏçÆ Çz^²ç¯£­O?ýynÝOŸD›oªÏÉgŹc@Z€ ¦Û \{íµV½zu;þøãÝmHôϽ,ÈúõëÝß·ß~{Ü¿ÓÅ ÁjÇFãuÐã”SN .¿üò¤^#Ñ2ÅÚ)òÓ‰]¦ï¿ÿ>fHxÒ¤IöÙgŸ¹+Fcí zóJ´,^›CÛ—l¿F¶OW ‹ÚשS'wpÉÛ±Ó¹¦3fŒíÝ»×Íçw¿û]ælÐ øMªköÑ ÞÜ’W²œ`(¶­d[@…#$œÍõÌXÿ½#4 ø ˆzç`®¾újœ6l˜+–rÈ!‡¸ó1žÐs5 K:Ôý­`§Î--^¼¸Ìùœ… ºPæ­ ªÅªXLhàOÕGλâŠ+ÜùUþ<ùä“£ u7J?çœsìË/¿,³\‰^O!Éþýû»y<ôÐC®Ý««ð—Õ-·Üâ–õÇŒòÝÝÑzõêuýz"Ïë%ö{>N…ƒ4]dµßx!aÑktéÒ%X½6™óѧ^õà¿üå/n[ëÛ·opÕx…Ì»uëæ¶¡Xý–(Ô¯½s’Ѷm/ìö{î÷™gžq•mõž¾ë®»ì§Ÿ~Jª]ѦKô<¿ç¯ã­Ïdû3™>)Ïùðd–)ãÏÒ†0d°³Î:ËŽ=öXwCt !ô*C]¡¬)Ýv$”®J Ý ð;]¬íTè`Æe—]³­~_#Ñ2ÅÚ)òÓ9аÂ&r^‰–Åks¬Ûçø]¦Xí›6mš÷òË/»¿u娮$Õ:x÷ÝwÝc:–1æ÷7›œo¶«„77€ämœ†–þH_°-@…#$œ"CÂÊ[i=ΚEß@eI6$|þùç«wz¡H/¨:߀¨è¼‰* {T|E¡ÝÐ0¨‚¼'œp‚;wãÙ²e‹›ÏàÁƒÃÚ­B.×]w{L¡ÇG}4ìy~^/Vè°*Reh-ëš5kÊ<¦jÑ7ß|sÌu'ö{>nÛ¶mî9 ЇJ½Î¡‡ê*å&sþ/Öv íç׿þµµjÕÊU‹Õöö›ßüÆRX8V¿¥3$ì÷ܯ(<«jÄ|°ÝqÇIµ+Út‰žç÷üu¼õ™l&Ó'å9žÌ2eü¹c@Ú€ ¥0h䎷¡ÛyÚ´iãn{ä]E­íLGîø™.ÖŽŒè–%ÕªU³M›6Åls¢×ð»L¢[×ÕÖÉ´!]!a¿Ë¢6kܲeË¢ÎÓÏ2ÅjŸ·#þøãÇÝÿýnÇPÖt{ªŒ±vL е¥ˆ77€ò)žb6¡ýBÂH /$¼r%}‘MTP/4$¬;?€Ê•lHxݺuÁÇKJJ†D’S…à‹.ºÈÆœëÙ³gð9Gq„«F*Q8Tç…4MsñÅ»p³ß×Ë¥ð¸qã‚ÕLC©²°Â® YÇZ¿r !añ{>®~ýúvâ‰'†›3gN°ڨ¯·=û}½hçCåú믷Zµj¹ êG}¯êÚªN«ç¨¢l¬å5ßT‡„“9÷JwK=õÔS“jW´éü<Ïï¹ôxë3™þLÇùðd–)cÏÒŠ0d(]íwÜqÇYÛ¶mmÉ’%öÖ[oYË–-Ý?÷Ï>ûlp:×¢vTz÷îm7vW^j:íÄ%3]¼ð|àv ´ó9aÂw`æ½÷Þ³‰'ú~ ¿Ë$Ú±Õë 8Ð]¹«çúiCºBÂ~—E;{ºVWúÎ;×Ý.ê…^püökhût å7Þ°¿ýíovÔQG¹M+V¬N÷ÙgŸ¹é4è¶=á§â@áñÆP~k Í^kD?€0Ò .Í.ÊvEä»Üz7޾€ÊrË-·¸s „FêØ±£õêÕËý^Þ`¢€è† ÜïõêÕ³SN9%l¸üòËÝô›7ovÓ„Vú¿d»té¬xìçõ$—BÂ;wîtÁÛ† ºse:Ǧ*Í eë<×7ß|sýFÛÊö{>NJ=O•¥§OŸn>ø }öÙa¥?þøcwþRçúé§}ÿ7®µo¼1x/™×‹v>T^|ñE7?…C«TkÕøæÍ›‡Í'rycÍ7Õ!a¿çK‡ f……….øªJ¶z„†æ+2$œèüµŸõ™L¦ã|¸ß|€dä¹c@Ú€ ¦YíDèŸöfÍšÙ‚ ÜB§cÇŽ N7sæL»òÊ+­[·nöä“Oº«õ현J4]¼°Ìš5Ë]ÕéíHè Eí$%ó~—Iî½÷^÷švòäɾڮp2Ë¢µã?>Øæüüü°9?ýêµÏ´ó|á…ºþŽÔ®];·S¨ÆJ·wßNòÛíÃ/;xS(¿˜MkC?`Hxo)}€ CH8;) Ü·oø¸úõÍ é¨,î¼Æš5kÊ}ܹ>M£Ê« ˆnË—/wçú4NaNý¬S§NØ?ý¾žD;꽦*î†Òã×]w%ì·hóMuHXüœ/UEq¯-úÙ¯_?+..Nj½G›Îïóâ¿ö»>ýö§ß>‰7ßTœ“•Q玕‚0d8L ®ê6Eº‚qïÞ½1Ÿ£í¼úê«qçíwºHº¢Z!Üxmˆ÷É,“n?¥Ç4MyÛ)ëG·ÈÒ•Ñ©è×xt5ê5×\“pѳWê›ý°š73€³øN³™éì ˆpvRH¸cÄ®c“&f=Fß@eQ%N'3fLØxU®Y³¦=úè£îïŠ K‡¬Zµj®Ši,õë×wÕnCé®~BÂj§x—\r‰ï×=z´›÷Â… sf[Ðù/+›={¶­\¹ÒvíÚU)íðs>NaJU…ŽGÛ—*#«­*ÐÈëÅ:z *j¾‘üœ/ÕïWYë=T´ó×~Ög2ý™îóáñÎûgÔ¹c@¥àÌ*d9]a¬ª´ÚQÕΆn}ÓªU+kÔ¨‘íÞ½;ééÒÑT]5ªÀY™pK¾±y0(]t0¯/ý³â)„„Pá g§ˆ„õw‚l íܹӅo6lèx¥¥¥® Ê€ìð÷o¾ùÆMW‘!á>øÀUU%Ï &¸è{ï½v×Çûï¿ß=çÒK/uç·|ðA;ûì³Ý¸Áƒ§S€pà¾/œyóæ¹ ¡‚}ªð©éˆöûzëׯwÓh^ªd¬~zUñüu2Ë”Q玕†3«åtÛ]¬îuŵ~ž~úéîDy¦KG[PqtK™&MšTn…eÝþ}Ñá5…¬©1»Gàâ@ß-„„PÁT8N!áiÓè‹l2dˆY«Váãt—î¾\s •jÑ¢EÖ¼yswÞèÐCu?9æ{å•W‚ÓTdHX;õÔSÝx µk×vá^ÏöíÛ­OŸ>vðÁ»Ç[·nm_~ùe™JÂË—/·üü|7^!_ý¬S§Ž=þøãaËœèõäÞ{ïuãõ¸Î±H½ªxþ:™eʈsÇ€JÇ™U¨¼Û³è lݶ$Ö?ù~§KG[P1tõ½®8¯4;·˜Íé5Ž uÞje¶l(ýBÂH…„ é‡l2tßnc£Fáã ([]~:_´nÝ:›={¶­\¹ÒvíÚU)íØ¼y³}õÕW1Ï_©ê¯ªs&¢²Î…©²°* —÷õ~þùgw^mÏž=l$@~þTµó×~—©ÒÏ2gV@j|3ÕlJ³Wê›m˜AH­×™}>’~!a¤ !áìóÈ#eCÂøCÙ깂3«àÀü°Úlnï@`KU„*¦O¤Þ„Zp( í@¤ŒpöÑúŠ ˜5h@߀ÜDH$oç³u“Ìf÷0_ÝìÍæ¿÷–Ò7R¯ôÇÀ…T)‡,/T–*!áì£õ5*°.r‡E "íÙiöý †ìJ–™mxÛì‡Ufß-1[?-P¹qñfït2›¨ê©ß¿™Ê{@ÅÚ¾6Þ¶’¾€Ù²¡„„„„³ÖWd xÒ¤À¸R®mÀ·âb³µkêUfo¿m¶l™ÙŠ ¹<ìÜÉç#då1.º*– 510T…áõ&ÊÁ T þeïqé±uQàsHaa€0Ò¤zuBÂÙfÚ´²!á¹sãÖ²K Èa%%fEEfcƘ˜ hÖ£‡Y»vf™åç¾/â ²!a¨HTf¨ •„wná½  rO „„÷Rö  ÿ»ý€ §À !áì2kVÙªÁ«WÆ-YBÿrÇÊ•f#F˜õïøŸÆ ø) ܾ}`ü AÀ°þß7.ð=ê úþ¤’0•„ j $ ³}>Òllý€…„gv¤Pá g/$Z5X•5NU†É[·Ž€h¦Z'Z7ú]ßú¿eÀ³ ß}ú_¦o_³áÃU„õ€ÜCH@f[:ÄlJúû·BÂHkªAöˆ–¼<ßà×¢EfC†˜µicV«Vfßöž!|P8¸wïÀw^äw!r!a™mÁ@³·ÛÓØ¿=@($¶jÕ*{ÿý÷mÓ¦Mt*Ï;Ìæ÷§°Ÿ*K@ÎN;F küþ@ÿÈMC†ªïØA_¹†0@Žúå—_ì ƒ²ûî»/lügŸ}f­ZµrrÈ!îgݺuËþë_ÿêæñŸÿü‡NGò¦µ1[rý€ýþbý€ GH8;) |çeÇ÷íkÖ«ý ÷üøc í U!a€+$|ÖYgY~~¾Íž=ÛJKKíÓO?µaÆÙwß}ç_¾|¹=ðÀ¶eË_¯3cÆ »õÖ[mûöít:’79ßFÇý`B!á5…ô*!áìÔ©Sôõ¦àp»vô€Ü3fŒYõêfÅÅô‹ ä¨h!a£‡CýýïwÓ|ñÅt"*ÞËQ5á  Mn¹Å¬kWú!Û¨bpÿþeÇiÖ ý ÷èâ‰Þ½é WH`éÒ¥v×]wÙ9çœcõêÕ³>}úجY³Â¦=z´µnÝÚ6oÞl·Ýv›5lØÐN:é$:t¨íÝ»·ÜÓΟ?ßÎ;ï<«Y³¦µlÙÒÞ~ûí2íóæ§J¿vÚi§Ù™gži………aÓÍ™3ÇÎ=÷\«]»¶›ç¼yóÊ‚wïÞí–Që÷h¯¥öêy§Ÿ~º{Ý7ß|3؆ 6ØÀí˜cޱ¢¢¢°ö•”””»½ú©¾Ðóž~úi6Ê\±sK $¼a}ýÆW'$ €´ÐmÙ;v¤²ª+iʳƒ8+ Ǭ]k–—§»½Ñ@®âp@Ï<óŒõìÙÓžþy›øàƒÁq¥¥¥Ö¸qc«_¿~X…`¿ÓvîÜÙUöl߾݅„ï¹çž°öxó;ÿüómÇŽnœBÁ§¯(`| 'Ø/¿ü|Þ–-[Ü4ƒ›ß®]»ìºë®sÕ¨QÃ~CŸ§yÆZþ~ýú•é¯X!áxí½è¢‹\@úçŸÎgëÖ­QÛ‹*¬xJ úËúûi›øjý€ GH8;Å oØ ÿ÷ÆGš41»óNú¥'<ð€+b¢b)º«a*ìٳǺtéb/¼ðBNõçĉÝroÛ¶¶ÅØ.V­ZåŠãlÚ´‰7  RðIAÞââb>|¸ «j‡Þ„õ(4«ñëׯOjZ4På_…eÇ4hઇòæ·nݺฒ’’°ÊÄGq„ ÐY² þƫ̫êÅz=MsñŽñBÂtÆ-B¬p¬öjÙîСCRíE´j„Ùä|úáÞ8‹~@…#$œ†kÕ*úcuëšMšDÈ K–.ŽP%u [ÜtÓMî<@hîÌxÉ%—$5¿hçc.¿ür;묳Ü] Çgwß}wÔs6ÉŠuCdW‘˜Ò(e½uNä¸ãŽsÓ¼ñÆ)ïÓSN9Åݵ1”Ú¡óFºsf¤Vûþ‘ò–!Öù¬D}ÉëƒÈ»WÊ?ÿùO÷˜î‚™j©jy}öÙg®?5ÝMS?ëîû‡”°0 Ý $°qãF»öÚk­zõêvüñÇ[‹-ÜŽüüùóDPèUã?ù䓤¦UØV¿×«WÏÀ t+T´ù}ÿý÷ÁÐíæÍ›Ýý„n5O]eZå7^H8ÚA”X!áXíUHZ¿ß~ûíI·UÌGƒÌ¦µ¡°_é„„6 ·a—$+×[£FÑkÞÜløpú@n4(ðy%“d¬T‡„g̘a·Þz«»S£ìܹÓjÕªåî kšòJÖ0mÚ´¨mô¯ˆðoû[·Ì¡åE‹ƒ«¡Uv^=øàƒíwÞ‰Ú7Ë—/wË£;Uz²=$œªõÂèùùù6{öl×ÿŸ~ú© 6̾ûýy *bž€ìGHÀÇNü±Çën$ª°ë·’ðý÷ßïÆ‡dñ3­&©šîe—]–°}‰B·šŸ~¿âŠ+žç7t«ùzè¡Ö½{w÷wE‡„wïÞíLuîÜ9l>:€BH8ÇÌëk6·7ý€ý¶¯%$ €´‰6Ev®·=ÌþðúH'n³^yš4 TWÏ_ýµ Å~úévÎ9çØœ9sR¶ýªˆÆ /¼À•&© GR‘Í¿°°0åmVõØš5kÚõ×__æy7Üpƒp öB¸ ,Ž{ê©§ÜyŸÈpîË/¿ì* +LM²ç‡Bû SCÂE!ÝDç´¢õ窈y²!a€8tpÑ ¯z¼ð¼yó‚ã¼ ªÚªcÇŽÖ´iÓ°q~§íСƒU«V-áÁóD¡[Ñm¬N<ñİçé@©ŸÐ­æU£FàÁ·Ñ£G»ç-\¸0nb=æ§½mÚ´±Úµk»*΢ƒk7ß|3!á\óïvf‹ï¤°!a¤!áìôÈ#±×›)têD¡j­L©áð÷ÓN;Ízôèa“&Mʈ6r›õʳ|¹íëoU ­ü¶¤:ôíø²î¾§bÓ§O·qãÆÙÝwß’``¢Ê°:î^¥T³ÂÅÇw\……>«2¿Û‹ÎS´nÝÚUd-((pŸgžyf™ð¯7]II‰½þúën:Íÿ¤“Nr㨠ƣ;IžwÞy.ØÛ²e˨Vc9÷Üsݹ M«sF±¶Ý¥òª«®²:uê„pwìØážïm³Þö²téR»ë®»\è]wœìÓ§Íš5«L¼¶ë|Óm·Ýf 6tË6tß?²{÷îuÓxç¹B«'_yå•nÐø|08~À€Öµkרý§ß5=G|óÍ7ƒïI…bc­‹dCÂ~—_ïµGöýó×®];·®tŽ­¨¨¨ÌçE¼¶E®¿ÛVèú×Om3zÞÓO?íWAµ]Û†~¶î¢õ§÷úºãèÀí˜cŽ .S¢~‰5O¿Ût¢åRÅå‹.ºÈõ{(}öê3Ø;§È<„„âÐ>ÌkÛ¶­-Y²ÄÞzë-·ó¬ìgŸ}¶Ì†óÏ?ß>üðCûé§ŸläÈ‘î¶L‘UüNûÁ¸ƒçíÛ·· &¸ï½÷žMœ81êüâ…n½*Å—^z©ÛY×AŸ³Ï>ÛBÕà®TõqæÌ™.ü¦Êÿû¿ÿëÆë‚{/ æWªoQ^·Y¯ŒåÌDǛխ«ãÛ•ß–T‡„g̘á‚jÛ·ow+pY«V­°dä4å•($¬aÚ´iQÛè=NH¸b¶ï<ÃÕW_íÂúlѹ» *†žPUs…gõ·Â° /^¼¸Ì9 HÑ5oÑy•¼¼¼°Ê¬:·£‹3tG…-Ÿþy;ùä“ㆄ§L™â×O.ê8ꨣìwÞ Û^žyæëÙ³§›ïäÉ“íŒ3ΰ-Z”é¯íj£úGýФI“2ÅotŽ%4ü«ÊÅ:ç£6wëÖ-lüO<µÿPíß¿¿ûû¡‡rý·zõj_ë"Ù°ßå×wŸ^GçØô¾SÛW¬XQ¦ýñÚëV¼ç¨:¾Šü¨OuÎMb/€ºþÿûß»q õF.{¢þÔÝ=/¸à÷Ù¦ ·Ÿ~‰5O?Û´ŸåúÇ?þá~W_‡R›ÔV@æ"$ ÀK/½¼ê¿Y³fî–L:  PïØ±cÃè@¼®×ïÕ«WwWÇ:hãgZ]|ê©§(êÊ]…v£Í/^èVCuE±Ú¬ñºêW$"Xè¹܇V÷Püñ°×¼÷Þ{][ô¸D¤:$,:¹¡+Ùu€êÉ'Ÿt_4ž°·4-žB_`?/$\²œ¾@…#$œ>(ÆÙ/帪W¯¸Ðœ™kÖ¬qA ]| T¤X+m{—]vYØEÿ~¥òå•u›õt/g¦ÒýûgF[RŽôÉ'Ÿ¸ùGVùL…x!aUÅVEÎ믿¾Ìón¸á¶$$\qÛKh1Uãw5NïqOäùo{ÑyŸXÓtîÜÙUãõèüŠ•÷ÜsOpœB–ZÇÚF"?÷B ³xÛ‹B ´ë¼Š* {zõê,Üo{Q(4Úç–×öÐjÀº(C¡`Uºö.Ñ6yä‘GºÇ¾úê+÷O¯¹æ;úè£Ý4 ×jü²eËböM´ÏO?ëÂûÎÒòë½:qÄeBÂ~—ÿºë®Û÷ÿzìØý´-Ö9¬xÏQ5]…nC·Ó­[·–Yÿ»vírmÔxÅQà7t›‰×ŸýúõKø~‰Ö/Ñæég›ö³\*¤åÐ2y¾ýö[WôGao@æ"$ àƒvÚ½+uE·ÒQ•]ïKèAM«oíüÇ;(ágZn¥7ÉVÿˆ¤jĺEQ"jÛܹs]eáX'µt@}y[¡Š¢ƒvê·W_}• 2|·$ݺˆ¾À~^HX?€ ¦ª³ªÂˆì2ujìðêÕÇô3•tlD{TëÂk ^xaÔŠy"Þ…Ú•9¯L|½ª.^UÆo¾ùÆ%ÐíÑ=r‹r¿·}UÞÛ¬{E»Õº*DêŽo¡t|RÓþë_ÿ ¯ `=\0OÁ8UZTEãX¯ëgÞñn/‰nå®ÏŠGyÄÚµkç¦iÚ´iØóS¥¤Ä,/OJ3c[õúôúW•¦õ™ªê•Ú†#ÿÞt:Ö­*¢^•Kà4^¹Ðiü®™3gŽ{î¹îó\ÓzÁÍX•aöT‘ …?= êùwß}wXèÓïûÈk»Î ÜvÛmn{Õ²©îžÈɆ„×­[²í—”)F’lHXïSUVXrüøñÁ¡Aƒ®ZªGÁVU#/T®íE*×sÒT{ÈÔv+$¬Poqq± >Ü=®J¯~¾[0ÕxÝR¼ó+ºƒ¥Šßœxâ‰nüˆ#ÜxUYÖk¨ˆL¼ùÇ µÆ[ÞwÖÓO?Ö¯Tõ;VH8Ñò{UˆUuWï±Xÿ{Äk[¬p¬çhÑzëСƒ¯õ/ªÞ«mH_|ñÅÁðq¼þŒw./^¿DÎÓï6íw¹,Wõv¯RûŸÿüg÷9í= È„„R ™“œIL/&Nœè‚è„nkÔªU+wEx´“ ¨‚ÖM „Awn¡/°ß¶•„„6ñ*Ò"s)o¥õ­Zð?‚ssç¦ö5DT(X! 6’PàG·ûVPL·2/ÝñI¡U&ôèöÎ ÓxÁŒ‘Êy¥»íˆ…ÔUÙ¯ô¿o†òÞ¢ÜÏsc)ÏmÖ%Ö­ÖÿøÇ?ºÊ‡¡>ûì37í‹/¾÷ÑG¹@”Byº5ºBÀ çªd¬×õ3ïx·€÷s+wZõY1räH÷~P0Y•;SÍ»XbK†VK6ô©>T€{ذaîŽ~ê3ÝeÎz|]ÁF…gõ·›ZŸúÌ<ïgýhûÐvsÅW¸°¢¶÷“O>9nèsÊ”)îqýôLš4ÉŽ:ê({çwÂBŸ~ßG^ÛÕFõúAß'‘áתê–[nqËú£¾´#tìØÑUÞÜ<ÑîX˜lHXç$ô»‚ܧœrJØpùå—»éàÖ4‘UXý„„§M›æ¦QPwÔ¨Q.¨©pfdHXÛüµ×^ë.øÐsµ­èq…Ý£m/‘ç›Ô¯å¯zð_þò÷ÙÜ·oßàv¯ñ §ë®Žý#J'Ž·.â}gyAßаßå÷Þ[ªn«Ï ñC ßøi[²wÃTðZ¿ß~ûí¾Ö¿GóëÒ¥KXEb¿ý™L¿DÎÓÏ6-~—KëI3Æ]¸ ùüîw¿ã3ÈpÞHB©¥ƒ¤:¨£~Re¯²‡®rGŽøô1³ µè„Û8‹0Ò†pvòBÂkcì64on6|xê^Ow<Òq ‘*«)LXÑ‚#Ù"›Ûž-…„˜Œ÷¸ß[”û}n4å¹ÍºÄºÕºß°‚•Ñ*NÆ{ÝdBÂÑnïçVîê A¨hƒ>ë2E²!áóÏ??XeÓ 0zºÐéü†>ý®…rO8á„°mT:h>ƒ.óþS@O„u1ˆ* {bU¥éX•a½¼¶?øàƒÁq û7nÜØêׯ_å« «Š´–Íš5eSeé›o¾9ê:–T„„µþ(¿ì²Ëb¶qÛ¶mnzÊCù k]}ôÑn»WèÙÛ#·—³Î:ËŽ=öX„…Û“©$|ÿý÷»ñj«Gï_ÿú×® ‹*‹Š²èóù7¿ù;£°p¼ù§+$ìwù= ÏêB¤ƒ>Øî¸ãŽ¤Ú–lHX}¦@²>WBiÝÆ ‹æ© xt±I2ý™L¿DÎÓÏ6ím ~–K¡v…Û5Ý»ï¾ë+ïq€ôáð@ èÊdøñs€.™is™úG·ô›;w®«ÈAå˜E0ûw;úá   géî䢸!áNÌâd7’Ö¦MW12Vu\Ëž˜ûßòÅ~o#¯éô˜wá´ž£j¨ÞóuÛëÐùmݺÕ‚Tõ²yóæîM¢Š¥ª2§*”ªZ*r^º}´þŽ6lÚ´ÉM£*¬ªÒ§Ê°ªH×§OW59r¾~ÚîÍO·ÝV`Já<í¾ùæ›2müî»ï\pì´ÓNs!±B½AC(°¢J±íÚµs!§¦M›ZQQQ•ÞÖ…„U1U+Ø*™[”GJtÛ÷X’¹ÍºÄºÕºŸ ¯w[õcŽ9Æý͆„#Ûå÷Vî^Ná0mûeßÇ’ gŠdCÂëÖ­ >®Ï‹ }ú]?Gq„ ׇòú¼þúëÝsõ= ö*Œ§ÏÅX!áDï£XA…Ó5^Õ>«²qãÆ«”†Rea}¾ëbƒXý”аtèÐÁªU«üî‹FíO<1lÜœ9sn/Þ{BÛ‰™K–,qãB·‰\/ ªé¢m/ú¿"”Èú. ¥mµV­Z.¤ªŠëUìVeÚhÛWdßè{Y«:w¼mö@BÂÉ,Ùÿó:Ù©§žšTÛ’ {ÿÿé¯Ê¹>+`OÖ|Êö>÷üög2ýmž~¶éd–KÿsjûÕg¸þOd>oÈ<³{˜ÍëK? œÞ±¾@…#$œÖzûoæ¦ çN…zªÑ­£cyë­·\°â¹çžsû½¼„ºå·Æ?ôÐC.Ô¸zõê˜A–+¯¼Ò@žzê)¢=òÈ#]J„¨Ò-ÄUªSUd½Ž7(T¬ÓÿüÏÿØ?üà¦Ñ-½ªSLÝ êŒ3Îp!äP~Û®€’‚{]»vuý¤ùµlÙÒ…;U½3´ ¼*p¬þR˜IÁ/À"¯¿þº§PôŒ3\ÛW¬XQ¥·õD!áóÎ;Ïõep—º·(O湉ø½Íz´mÓã'ÈëÝV=ôê‘4$Ù.¿·r÷ÞC ˆi{Uà^%RIo-ÆÔ©™³­ÞrË-®òŒ¤ £*ïÆêßT„>ý¬,5Mheañž6mš›fìØ±6jÔ(>V092$ì÷}k;Sh¼–·*Suf…ou±‰.°Q¨Zß pë;û¤"Cº£¡Þ£ú¾™0a‚ ¿÷Þ{Á pīԫïóéÓ§»ïܳÏ>;nåiW}UßkžÐíEË|ÜqÇYÛ¶m]ˆXß‘ú~ÔãÏ>ûlÔíE¸Uy[Ÿ)ú.TEÝ^x!lZ}–iZ…C+fk»×øæQJGöBÄêUËV•bµ5Õ!ád–_ÿèÂ!…_UÍVïóÐðE…„Õ&…­õyÞ»woWé[Œ5–U>þøã`Uq­ŹñÆÝ4 Ã'ÓŸÉôK´yúÙ¦ý.Wè÷£}¯2‡·dž©ÍÌ–ÜG? ܺI0„„³“Ž(n4j”Yƒ©y-¯¢ÛoûÛ˜Óxa$…%™ÛÈû¹µ÷wß¾}ƒUSTÓ8ÝN\xåóÏ?wãž|òɘó ¥v(¸§p¼ª} G yúi»nS­°‹noíùöÛo]¥»ÈþRøÉ«>«ThÐT®»î:kÔ¨QNmëñW_}õ• ¼z• ¥<·(Oæ¹~ø¹Íz¼m3ZwåÊ•aA^ï¶êñ¶¿!áÈyÇj—ß[¹{½õÖ[]ˆOá«Tš4ɬzu³ÿ¾]2‚ª€«ßÖ¬YSæ1]Ô *•±ú7¡O?ëGA:MÅW”Y·‰BÂú W5t½ßzö‚Æ‘!a¿ï£XÛ™JU[«ºE‹¹Àª–WŸú©‹^y啸ý”ª°¨´*ÒzAHUWUÀÓ£ÊѪ¦¯÷±W5U}û©$¬ïkU»}ODn/jŸ¾#5®Y³f¶`ÁðÔëé{>²íºH¨N:îwÑõ¾‹äµ¯SÄÕRºH'ô•DÛã½÷ÞëúCãõÜT‡„“Y~UeöÚ¢Ÿª¸­JÝÉl'å ËÌ™3ÝEZºKÿ_é³]Óèù²|ùrËÏÏwãÐÕO­£Ç™pèmƽ …¡·¸W%àÈpr¼ŠæQUÌhŠSgøðáQCn‰ÚîUaVeÈHçœsŽ Ó…>gݺuÁÇF‰ êx#…OUÉ8Ä \íÚµËUÿSàÕ«¦| ·(?Û¾Gòs›õxÛæŸþô'7Þ«4­ BzZ1SUµ5Nï¿h¢½®ŸyÇ{Ïø½•{(õØJ%½¥RU-=UT1Sý6f̘°ñª,\³fMWí“yEû\U>Wè{BŸý³gÏv}}¶U­]xzO(}'©ZuEPH]ÛŽGŸKªFÚ–È@¼¾wÓÑW?ÿü³k‹wRe-¿·­h|em#}i]èÎ ¡´nT[•…cUO¦?ýöK¬y&Ú¦ý.—ª_sÍ5ì|@–àð¨úU¨ŒÁÞln6·w p¸‹«œ3Îöµõ´a}p„„F^˜ÙE9­·iÓ¢?®»Ýëñ¹süµ¼ «*âÆòæ›oº`ÅsÏ=çþNæ6òÉ„„Cçç…„uËhO2!áI“&¹Št·Ýv[™åQ5¹k¯½Ö-·r-Z´pó˜?~Øt‰Ú®@U´[²‹n®ªœ±Ú-4(ºÝµ¨ é©b¬ NUá…„U9PÕ§NêúKëÃ?ÜFŒœö@nQžÌmßC•÷6ëñ¶M/t9hÐ ›>}º«v­å k:mꦭ`ÖêÕ«Ýã |Æz]?óŽös+÷aÆYaa¡ ª.^¼ØêÕ«ç¶÷TR¥ô(D+ÕÎ;]ø¶aÆn}¨¿ÆÖEÚV¿ù曤Þïå ûY?^¥ÞK/½Ômú¼<ûì³£~VE†„½ÏÝÓO?½Ìöªp2ï£Ð ꪜ®÷ÏÈ‘#Ý6º‰>—Pqôÿ>?ôÿŒB»úÌÐwŽªØ‡Þ!¡ª.—ª k»›ëª<@Æáð¨ú¨$ÌZIxã,³ÏGšÍée6¾ºÙ¤ºfË ¨0œI´Žýa5}p„„F„„³—Ö[aaìÇë×ÿx2Ú´icGu”»íx4 –)D1÷¿©ädn#_!a;UÙóW¿úU0°J¡Éc=ÖV­Zåþö*a&[IXAÝBþæ›o.ó ñyA»dBÂîÂÆvë­·º0ÝwÜQ¥·s/$ì n+ÈÓ¿ÿ`áPr‹r¿Ï UÞÛ¬Ç{Ÿ(˜¯ª… –jвªr´¦}ñÅæÕö¯§×?jKh 4òuýÌ;Q/Ñ­ÜUmÖ{MýTqUäN°Õçß¾®Ï8‹-²æÍ›»e×{_?9æ{å•Wâ~&¥*$ìgýès\Õ£µ]ëñÖ­[»JÝ~* «RgQQ‘­Y³&8.4$œÌûÈkûSO=åÞ3Þû» ÓÒßÈ„„+‡¾7ta’ú^ÿ7y è‚„\X®nݺY“&M|W#dÀqº9«ôG³O …'ç›O¡O2BÜcóÌö–Ò§ð”ôÒ WФQ…„{ô00 5¯¥[/+@ñØc•yL•2ëÖ­ënsïIæ6ò£GvÓ.\¸°Ìó+"$¬6tÒIvòÉ'G éÖÖ‘a=/$¬0\²mW U•ˆC©GydðöÕɆ„=:ura@„;[”û}n¤Tßf]¶nÝ3˜iݺuî½è÷u“™w,ñnå®qzÍ]»v¥|ýjÖ¤IænZv­Ù³gÛÊ•++¤týˆª o¨ /?ï£ÐÏ=M¯‹-*«¯ùô¹ªmš°få|¦éý«ï8½¯«Ê:ð³\ú^ ½° ÇIèä¼[Ì T(]6”þ¨lKî3{«ý€²~­ý€´ðBÂk×ÒÙ&//~HøÎ;Íš5KÝëuïÞÝUJ}ôÑGmýúõ.xèU¬TàU·‹÷$syÍKó8p  b¨²oE…„¹à‚ \…OU´\¶lYØ eÒë« fÛ¶mmÉ’%nþ-[¶tóxöÙg“nû¿þõ/÷÷СC]ðWϹꪫö­¿< Œµ|ÑBÂÆ Û·Î mÓ¦M¶xñb«W¯žõìÙ“7rJ«VÏ7d7*Ã Õ ¯‚íÂ[¨b[™æö @¤•à  m g¯ ÌFŽŒýøÔ©fÕ««Zdj^O• uëyï¶Ì ÇjPáÐ[ÏK²·‘¿÷Þ{­víÚn:ݺ¢B ë÷XƒWø¥—^rAakÖ¬™-X°ÀÚ·oïBÎ 'Óvùç?ÿiG}tðutëjµ?Z=ÑBÂ7ÝtSðµô³_¿~V\\Ì›9cùòÀwVQ}‘í  Õ ¡6Ì0›T×ì£AôEeQaU"©Ò7!a¤ !áìÕhßnÃС±WvTëVaáTRXøÓO?µ¢¢"Û¾}{ÔiÊsyxuÛgÍ?¨Ýºýtèr«}ÑnGí·í_}õ•»]úðn¨?ªH„õÙWJ݃¬§ óú<Œö™š©¶l ü¿¤aÕ*³·ß6[¶ÌlÅ †ÄÃÎ|ö@E#$ DRPX…×Òé¦ Îêûµcè ”EHi4wn Hºz5}‘mZµŠ…ébï­PTˆj;v˜Õ¯ŸøsHv»Z²ÄlÜ8³G1»å³®]ÍÚ·|‡j›ÓÿI :(( ¨X„„€hV„U·p¾´úaµÙËûvS¾[B_ ,…„UiH…ƒuÒZaad—Ž͆ ‰?ªn¶i“þ¶j#F˜å媤åõãfÓ¦íÿ~Ô6¥ÿƒÖÅ7}ûS}äH³1cw]Р01•„¨$ ™‹0Ë;Ì^obVú#}‘.ßL „„w•Ð(kÁ@³™é¤…‚. Ç(ü‚ì¢J‡ÆŸfêÔÀúÕ-ÒÓ)o# s©ÚkƒfÐH^I‰Ù¨Qf½z™U¯{Úè{’à9@Õ@Hˆå§b³Éùê¥HUpžÒ€~@tE  m g/…åæT1±V-³Ç£¿> ÜQm“!âEϯNÌj×T½÷¶­Tl«Ù?hÝiêwý_£mGa`ƒõ]Ø¿ \BÝ€*‰0Ϫfj™m_K_¤ƒB ³{Ј½}@šÎ^ ÷ð±kÙ»wàê@y)PWTd6fŒYAA ‚µ¶½víÌ52ËÏ|Ž0000dÒФIàóJŸ]?r=€*0È[­ÌÞB?¤Ã´6f‹ï¤BÂïv¥„„³—‚O}\_8cF`«'àÇÊ•f#Fªn*ìînß>0~Р@`¸°ÐlܸÀgˆ7¬^MuV†ÔU~üq* 3$WIXërÇ>Ër !a ‘µcÌ^Þ÷¯ówK苊´·ÔllžÙ£è D§pÑúi¡ ¡„„³Ó!þB¢€Ýg˜MžLŽ!,ŸBŸ¤6„„³“ªhRM@.êÚÕlÀúÀ~„„ÒÀ föíÛ×öìÙãÆ;ÖkÕª•«ê*Ÿþ¹÷ä“OÆœ—‘AâÐ è¿ÿýo;ôÐCí¹çž {^çÎí¤“N þ½}ûv¾çž{¦۵k—]wÝun~5jÔpÓ_~ù%ø¸‚©±^¿_¿~1—=2¤zþùçÛŽ;ܸ?üÐӼ墋.ræŸþ98UaÖ4ƒ®üºy®ÙËûþ•.YžòYçdÿo[èÏ­‹ø°@| ¯)¤6 E?dUVH8âFLPå=òH špi)} €0@xÁÌÍ›7ǽûî»nÜo¼÷Ã?¸qª.©´´ÔŠ‹‹møðánU{œÿ{ï½guêÔqÕhC)˜|øá‡»ðçøñãƒCƒ \•âhTmXk¾_|q0P/¤ºaƘËR]·n]pš’’7îá‡vmU@U—C)(›1•„å•úZù6§úÿ«qfã«›íåì˜T—0ÒJ!á‚ú!Û«- |þÑ ¤AdPS¼ð[o½-$¼qãF»öÚk­zõêvüñÇ[‹-Ü4óçÏ/3ÿ¶mÛº*Â+W® {}…Gõx½zõì”SN .¿üò˜íV{»téVe6^H5tùb=mÚï¿ÿ>R]¿~½ûýöÛo›OÆ…„Þb6µY…[s¦ÿçõ5›Ýƒ $¦ŠÓ„„F J?d›-[!¹©Sé ¹§Y3³;ï¤Hƒ ŸuÖYvì±ÇÚªU«Üߪ0«’ð¢E‹,??ß…C«+à©ê°—]vYÒmW›<îÞ½»û»¢Cª»wï¶C9Ä:wî6URΨðwKÅ-[–£Ê÷ÿ/;Ì&Ô2û‚û÷ÂBÂH³ví g+…„ Ù}ƒ 2kÞœ~@H Êþú믃áMž7o^Ôù/^¼ØjÕªeÿïÿý?ûé§Ÿ‚ÓtèÐÁªU«f›6mJªí Ö¨QÃ.¹ä÷÷èÑ£Ýk-\¸0îòÅz,QHUÚ´icµk×vU”E!ç›o¾9³BÂòz³Å[–£Ê÷ñ³±yf;6ðAÄþ†R`HŸŽ g«êÕÍFޤäUQ×…ªª„„Ò ¼!aUo=î¸ã¬mÛ¶¶dÉ7mË–-Ý4Ï>ûlÌùOŸ>Ýòòò¬gÏž.à)|ð«Û¾}{›0a‚•””Ø{ï½g'N Îçã?¶º²Æk×®µo¼ÑÍ{ܸqnšõë×»ùhºmÛ¶¹6¦:¤ªåTõ\…c{÷îm7¶;î¸ÃMóÀdΊýhÙ›©+Ë‘“ý¿ð–}o†®|H ±ŸŠ!á³è ¤BÂC†ÐÙ¨Q#ÞrSI‰Y^žÙ¤IôBÂiQÞ°¼ôÒK.(¬ñÍš5³ ¸ ïÁlcÇŽ9ÿÂÂB7N`=³fͲSO=Õ× j± ¡z–/_nùùùî1Qõ³N:öøã‡-Ͻ÷Þëž«Ç'OžœòªÌœ9Ó®¼òJëÖ­›=ùä“®ª­¦Ñó3†*š*´¨ðb ä\ÿÿ²ÃlR]³/Fñ!͝%$ €´SHxÀú!5iBÀ@îjÓÆ¬ú!a€¬ jÀ_ýuðï={ö¸*³{÷î-×ü6oÞl_}õUÌç+@:wî\WÙVm£ùùçŸ]Ô–tPXZ!ÕW_}5ƒV̳Wê›­x$¥³Í™þÿjœÙøêf»Jx“#1B¨„„³WûöfÒrÓðáfuëêNuôàÑù5kÖÀy=5€IDATØÂ… cw×»téâîâ‡Ô¡_¨\„„q¾øâ wÐhÆ . =}útkÕª•5jÔÈvïÞY]x‹Ù›ÍÍö–ÒÿÉšÙÑl^_6xøCH•€0ë²Ñòåfd¶h}¨ÐFAAAðî|º‹Ÿ† /¼Ð¾üò˰iãݵ/”îø¨é^yå•´,Ã!CÜë©øËzàܼ"—]þùϺÇÞ~ûí”¶ßo¿zm«_¿¾•F¹ÊAëÒ»óæo¼ÁÆ €O„„q&Ožl5jÔpzjÖ¬é~ž~úéöÁd^c·‚‹fÐÿÉØºˆÀ'’S²<°Íü°š¾@ÚtíJÐ4[uêdÖ¿?ý w5ibvçôУG þóŸÿlÅÅÅî.}³fÍÚ÷iâ‚Ë/Në7̪»üÝzë­öÑG¥¼½Ë—/waÙ-[¶Ç•7$m^ÙÖ0mÚ´2Ϙ1#ø8!aü#$ €Œ¤[é@Ûܹsí믿vg¬·Z™½Û•þOÆœ^fÓÚ°¡Ã?ÊVEa M&$œVPrÕ Af™•–æÞ²ë.i]ºt±mÛ¶±!ä¸W_}ÕJR´yóf«S§Ž]pÁÁq~ìéïÿ»kƒîøç)oH8Ú¼2=$\·n]W¼äúë¯/óø 7Ü`'œp!a’DH8Pë§™Í#¼è×7S«\õe¤!aT„ûö¥²uÝuìH?È]K–˜tÙ¢E•ÛŽL $†V,=ôÐC]ðP¡Äo¿ý–' O<ñ„µmÛ6lœŠO´nÝÚþõ¯¹¿÷ìÙc<òˆµk×Î…?›6mjEEEaÏ™?¾wÞyîñ–-[–Ù&üÌ#š6mÚØQGeÛ·oúøàÁƒÝ6 b¡ÛÎúõëí¶Ûn³† ÚI'dC‡ +¤±lÙ2·Œ3gÎ,3ÏDË"Ÿ|ò‰«p|üñÇÛ‘Gi-Z´°Ù³gÛèÑ£Ýkzw÷Ók¼ùæ›eBšN}÷ÝwVPP`§všyæ™VXX|XóJö=¹téR»ë®»ìœsαzõêYŸ>}\%ædÖׯªh«½ÞûR}rÕUW¹÷Î;ƒíرÃU~¾ûî»ÃBÂ~Úçõ—‚áñÖ+U!a fv TÇÝ[J_ijm¥Ù¤ºfó¹ç+’DH•€ iöRÍæÍé¹­I³;ï¬Ü6dzHxìØ±6bÄëÙ³§ûûüóÏgÃIÂÿøGËËË ÷ÙgŸ¹¾|ñÅÝ߯¿þºrÈ!6räH›1c† ¯X±"8ýÂ… í°Ã³«¯¾Ú^{í5»ôÒKÝœ¦tߨqãÆV¿~ý`ÕÙX!a?Ë¢ªžûþûïGm“¼z<4X+$¬P»*ìŠBƧçÇ›—·í«*oݺuÆ#Ž8"á{RaÜÈy&Z?~Ûë…„UAXíSEaO¯^½làÀ6oÞ¼°°Ÿöù]¯TU„„üPÐQá4†òc5ûha”ÏúiíH#U_$$œnЀ~ÛÖ®5S~sÆŒÊkC²!aU?U`óœsαzõêYŸ>}lÖ¬YaÏÛ³g«¼Ú®];«Y³¦5mÚÔŠŠŠ‚{À-[¶XAAvÚivæ™gZaaa™vy!a9묳¬uëÖa¯å§=2gÎ;÷Üs]°Q?çÏŸïæõôÓOWémÌOHØ[ÏÝ»wwý¹.UU÷¢‹.²ñãLJû¾ÄU6r[‰6Xü„„—-[æ¦Ñr„n;‘ó~ýú¹ñëׯwG ûYošcŽ9ÆýM2!áuëÖ§))))S7^HXÛfh;5Üzë­1C ÕÛðáÃË„œ­¿íõBÂrýõ׻в‚ÖšVšõÞ‹Ž×>¿ë€ªŠ3¬~PI˜J‰†ÍsÍ&Õ6›ÝÝlåãTŽÖÿ;6òY‚ò[SHHi§ )!áì4b„YõêôtêdÖ¿å½~²!ágžyÆ*U tòäÉvÆgX‹-ž÷úë¯»Š¿#GŽ´3fØOúj;ýôÓmذaÖ¾}{÷œ7†µKAÒÝ»wÛ˜1c\Øõ¥—^ {-?íQ±ZµjÖµkW›>}º #+˜¬ùßwß}Uzûòöú±Fn(týÓO?¹ñ6lpÓ*€}Ê)§„ —_~y™um±¨:lõ}ÿ ¨ºo,o¾ù¦{ýçž{.lÛ‰ “*Ȫñª<,ÑBÂ~–Å›&rÙB%mç÷ߟTHØï{Rï™k¯½Öõ¥¼Úþ5‚ð~×ßö††„§M›æ;v¬5Ê…­¬Ž ûiŸßõ @UÅV æö6{»½ÙÞRú¨„„P  g/‹<ˆ]°1cMlØP9¯ïUa·nݺaƒª„ƪZêQ872äxÝu×Y£Fb>Ç žþù¶cÇ7îÃ?tãš m—ªþyä‘®}¡Õˆ“i*ǪÊéÏ?ÿ·uëV7ÝàÁƒ«ôö-$¼råÊ2!aQ˜S•j>ø`»ãŽ;ܸ_~ùÅõÝe—]æëõ¢Í#ž6mÚØQGåªÑF£õ£¶Î;7lÛ‰ “Þÿýnü¶mÛÜßÑBÂ~–Å›&Þö›i!aUØ>öØcmÕªUîï×^{­L¥ÞDë§úè£í’K.Ù÷ÿxG»çž{ÜøÈ°Ÿöù]¯TU”ªÍ3Û¶’¾*ŠBÂjÑH+BÂÙkÊ”@HxËú@n+-5«_ßì±Ç*çõ½@âÓO?mãÇ&ŒV@°¸¸Ø†^&ðç»wïnK—.-ó\/¸nݺฒ’’°@¢×.M{Í5׸ ©ª üñÇ1ú1z{TÙT¡Ï:„M¯0h.TþÓŸþä–sË¿pÕ}úôqã^xá…¨ÏéÔ©“zê©Á¿ÕwªÄ¼iÓ&߯9X^}õU×–Ç¢¼Ôf…ÕC×·ílÞ¼9lZ…T›6mü;ZHØï²h=wÙ²eQ=z´{|áÂ…Áqå G›W2!aUÚŽœ§ÂUX×ïú)OHXnºé&÷þRuâ%K–¸q¡!a¿íó»^¨ª jfÇ@aG!á×ÑH+BÂÙkÖ¬@HxíZúô}Ö A 0œnÉV-U%Òk¯½ÖªW¯î‚-Z´pÓÌŸ??ì¹Ï<óŒÕ¨QÃ…ïºë.ûé§Ÿ‚ù $zíRÈPvíÚå‚5kÖ «:›¨=ëׯwß~ûíaíË•°Ø4hMŸ>Ýzõêå*»††„‡ f……….8»xñb«W¯žõìÙ38>øÀ­G…´'L˜àÝï½÷žMœ818M¢yÄ£0¹æÿ裺õ¥ŠÏ³öý£ «ªH«Êtä¶£*Ô¯íjäÈ‘®2nhè9VHØÏ²¨Ï4¿V­Z¹ Æ«W¯vóž3gNp›Ò<è*Ü* ^Þp´y%óžÔôÇwœµmÛÖ…tßzë-kÙ²¥›æÙgŸõ½~Ê~÷ÝwÝ4§Ÿ~z™mN!a¿íó»^¨ª ¢dy Špñú¨H+!$ €´9Ò¬Y3ú!€ý6l0«U+ð½–nɆ„0=öØcmÕªUîo¯*hh%a¼ªF¬ ßwÜ_ž°L›6Í{ùå—}·g÷îÝ.„Ù¹sç°¶)¼˜ !á½{÷ºJ̇~¸ú÷ïïª;kÙ_|ñE7ªÁÖ®]ÛÓÏ~ýú¹ªÌáßÛЮ¦ñ¦»ñƃû™G,ªn¬õ­¸ž¯õ¥A}׬Y6­¶U®}饗¬N:nzÄ Â¦‹ö³,¢0«Â°Þ4ùùùaAâ{ï½7¸¼“'O.wH8Ú¼’}Oª/ÄÕøfûþ1Ö²+­÷ÝØ±c}­Ÿò†„µîŠŠŠÂÖShHØoû¼×ê©§â®Wª*BÂÀX|g ¸¸·”¾*Ò²¡„„v……fø74+-_ Ñ C†˜åç§¿šp2Dv#Cƒ^(WÁÀXTX¡LOyCÂ^{üñ¤ÚÓ¦MŒThYTEøæ›oΉ°gëÖ­a˜#)L¼víZW±9žÍ›7» ¬¦/ïÈ%„„€òÚ<×ìå}ÿR·„¾*šBÂo·§V„„³—îp­pœs Aa}F¦K2!ay饗\0Wã›5kf ,°öíÛÛÁlcÇŽuÓÜtÓM®r¯¦ÑÏ~ýúí[¦ý •LHØ4¾ð mæÌ™amôÓÑó®¼òJëÖ­›=ùä“®ª°ž£¶ jXºt© ƒqÄnýè …¬@Hë ðÿÙ»è(ÊtÿãȆ€H@A ˆD„ÀÀdä°AM¢—¹ƒËÅEÿrÉÁ0Â7<:ˆÀd‘åİÈ.›A" B²<ž·í¾I§»SÝéô–ïçœ:ÐÕ]Uo=õVkš_ž_œFgS P¶?.òewꀀ"$¾rsm!áùó©Øåå‰4k&Ò½»íï¡J;µ¦§§;HZZš:ÖéßuÝ•+WBb<Î4\¬¡Ä¥K—2ñ"ȯ¿þ*[·n•“'ORŒ0rñâE9sæŒÇ{€HFHðÕÿvÙœ@€@Ø:†0îóÏEêÖ¥áJCÂôüŸ;D¢¢D¦M£þrôèQY´h‘dffš@ñÚµk%>>^bccåêÕ«AEHðÅÅ" ªŠœøœZ !á÷¤¨ lAS„§úõ Á€+o¾)RµªÈʕԖ,Y"5kÖ4ƒkÕªeþŒ‹‹“mÛ¶Qm¾ØŸ$²¸®HÞ¯Ô„ƒéÜ €€#$ÞbcE©¸2fŒ­[þ¡CÔ %--MRRR$==Ý<UYYrm¬¶%5UdÝ:‘}ûDdaañe¹|™÷@@hã£-À«ZŠìz–:òew[7a € ‡·fÍD&M¢àJn®È€" ŠìÙC="ázêu\¸ÐÖEÿñÇEúöéÒÅöK3Ú]_ÿŸ†……Åÿ‹…e|´xëâ ‘UE2ÖP P   ‡7 FáÇpKƒ¥< RµªÈ‡Rpòë¯"kÖˆ<û¬H»v¶k¨ÿÏ¢aàøx‘‘#mÏiGýY³DæÏ·ý.&¦“0 „mÞ:8Mä³h‘ü\jІ„÷¼HP„„Ã[Ïž„„ÀФ$[È´{w‘”ꪲ³maîÁƒE¢¢þïši×ü•+ENœ F(‰¶PBAA¤¦¦Ê–-[äôéÓÄÙÊæ";ž¤@ iHx_"u@@íßo geQ‹p”`ë¤(v—0Àöß½fÍlÁSíT»mf½h­µæúwý…¥3la` GGÛþû¦¡` ¥!$ €b>,ñññR©R%©\¹²ù³nݺ>‡…_{í5³Ÿþ92 táˆÈ'×þ7:3™ÉÒª–„„pú5Ü–Ò?~ÆŽµ…ªÖíØa ·kg ¤êY‚»hh[ÿ›6¾È¯¿2GàBÂhÿþý2yòdÉò¡ÕQÛ¶m¥aÆòÕW_I^^ž|÷Ýw2eÊ9wîœOûNNN–qãÆINNNdWCŠÿª/’ŸËDiY,!a!áðöâ‹„„ ¬Ž§“p°: §¦Šäò14ʈ0@úàƒL÷Þ£Gzµu»õ_Ñü¼ïˆ¡ÝLwO`’FHA@H8¼%%‰ÄÇSPqˆ0sçΕ[o½Õyãââ¤M›6²jÕ*óÜÞ½{¥OŸ>#·Ür‹Œ1BNž<éØöêÕ«R¯^=¹çž{Ìß­î[×ëß333eìØ±Ò AÙºu«c}.;;»ØcíLœ””$-Z´V­ZÉœ9sŠkãÆÒ©S'©S§ŽùsóæÍf»wÞy'xÅ=“"òɵÿ…>ˆ‰š†„N£({HøÈjŽf͉¥ â"$ a4œ`‚¼S§N59"»wï–5jHß¾}eõêÕ²dÉiݺµ ôja»'žxÂlÛ¡C9v옥}¿öÚkf]ÿþý¥[·n2}útIOO7ÛØŸûù矋=~ðÁMÐxÊ”)Ò¥K©\¹²œ:uʼfË–-R­Z53Öµkך±†‰Kër\î6ù’ï)‚âÓ(‘æP”=$¼aµGúûÈuëRPqˆ@ÞÕ@íÑ£Gëzõê%5*Ö!ø§Ÿ~2aÜñãÇ;Ö]¹rE~øa³}Íš5Mà7??ßã¾íÁßQ£F•‹»pçÎ%77׬۹s§Y§ûV÷Þ{¯T¯^].]ºäØÏÙ³gÍk&Nœœ¢^\úõë'o½õ–é*¬¯ÑíæÔ‘UEÒæ3¡€`"$ € "$Þ¢¢¸~ â"$ Á.]ºdº[ÿã?Ê™3gÜn§Þ””ÓYX; {³ïòòñÇ›ðÒ¥KS¼+Ù"+š‰¬ï+R˜Çd‚)k+!aMýú„LÃYl¬È‡RP1@È9zô¨,Z´H233%??_Ö®]+ñññ+W¯^ Ì 6ù,Zäâ .lÚÕ[CÂy¿R œ†L ‡¯–-E©¨˜  ä,Y²DjÖ¬i:תUËü'Û¶m ÌRßYPUääJ. ì!a 4$üæ›Ô!\uï.2iuÿÊ €TXX(iii’’’"éééæq@؇ø` d@iH˜N´á«gO‘„ê*&þ•°Ûó¢-ˆxpµBIÚ|BšfÍ ‡3 kP "â_Y€ËY"ÿîië ¬„„–æˆ,®K]ºgcÇÚ®!@EDHוl[×` ®h&r&…š¡HCÂËb©‚¢{wBÂáL¯],?N€ Š0@(*¸,òËA-ÙûD2׉\H9µAäûY")ˆ|%òyc[÷à¼_™w@¨Ò{”0‚„pxKJ"$ *.B¡Hƒ­ŸTb)¯ees[Høøb‘ü\æêö%@ÐosæˆÔ­K@ÅDH ÑI¸ü:  †„ÿ·#u@Pôí+òâ‹Ô!\-\(R‰ ‹BÛî "_v§Š1cl ÂÓ† ¶p^µ!a@hÛ:†0‚†pxÛ³ÇNK£ â!$ m„„D„„Û†ƒ5$¼?µ!a@hÓð¦‘ÔAAH8¼8a ¯YC-þ-Z$½{÷–óçÏ»| ÿÔ5¤§§ËäÉ“%..N:tè 7näB–£‚‚3GfÏžmùõ©©©²eË9}út…šãVÅû@à„¶õ}mAa ÆŽIH áLCÂsæP„‡W_}õÚœ­$'N,ñÜk¯½fžûùçŸ]>vGäú:ç%:::$ÎÙêyóø“&M2¯ùñÇC¢fC† ‘¶mÛÊÚµkeáÂ…rðàAnžr”ŸŸo®ÿ‹/¾Xêk>,ñññæõ•+W6Ö­[×oaa_î_ß;Ês|Á¾ï*B€ÐöewBšÄD‘îÝ©C8‹Šy÷]ê€ðpÇw˜àÜÍ7ßl‚‰E•5$üÉ'ŸÈúõëK »Ïî߿ߌ%++«Øúääd7nœää䥿åvw¾euùòeðž>}z…¼GÊ«®žxÖðvÆ 嫯¾’¼¼<ùî»ïdÊ”)rîÜ9¿ŒÅ—ûÅyŽ—ç=GH ô„6 oœ: ( ‡¿ØXÛuB]JJŠ ÍuêÔÉü¹fÍšbÏ—5$|ìØ± žß|`ÆqôèѪ{y…„Ëë|8`ö;§‚¶HÆ<²Öà²Õ0q¨Íñ@‹0@à„6 ïK¤ BÂá¯];‘Ëk.ýùÏ–ÆKjjª Ï >¼Øóå~ã7¤}ûöÅÖ¥¥¥I›6mdùòåæñܹsÍc톚””$-Z´V­Z•ªj€uÀ€¦ríÚµåî»ï6Uuû[o½ÕŒ#..ÎìkÕªUÅöíØÏÞ½{¥OŸ>#·Ür‹Œ1BNž<éxÞÊxtãÇ—:H½zõdذa²aÆçïKH¸´ã{:_µyóf¹çž{¤V­ZÒºukY·n]±ãÙ÷Ÿ™™)cÇŽ• ÈÖ­[eÅŠæXºßÛn»Í¼FC³VÏÕÝõ±:.UPP Ó¦M“Ž;š×Ýyçfl¥ñ´ïÜÜ\éׯŸÛ•+WŠ­ïÝ»·Ì˜1£ÔºZ­iisXi—m ëשSÇìsÓ¦M–¿W¯^5õ×môï¾ÔÂÓõwu¿X¹öÎsÜy£G6]-§OŸöé~ÊÈȧžzÊ\/«‰×þ‡ª°°Ðã}geþÀ{„„¡0‚ˆpøëÙSdÌê€Ðö믿Jtt´¼üòËæq·nݤF&ÐhW^!áçž{NªV­ZlÝáÇÍ6}ôQ±c=øàƒ&œ9eÊéÒ¥‹T®\YN:e^³{÷n3f  þóŸÿ4áM “îܹÓ Ì>¦Nj‚­GŽqyöýôíÛWV¯^-K–,1A Jj§V«ã™9s¦ 8PÞÿ}³»îºË„bù.íøžÎwûöíR½zu³í²eËdРA¦þE;ãÚ÷ß¿3¦OŸ.ééé&@®aK}n̵76Ýï®]»,«§ëcu\JƒÊzž³fÍ’ääd2?xð Ç9heߺ¯ë®»Nž}öYǺ‰'JÆ ÷»ºzSSOsFi=´NC‡5!U­iÓ¦M-w~â‰'Ìk5Lëêž+Ëõw5_­\ûÒÞ;–.]jji_ôšêo¼ñF¹pá‚O÷“žW=L›5kfÖ½úê«nÇduþÀ{„„¡mes‘ƒÓ¨‚‚pøKH°-@(›={¶ ÌÙƒ¤ÚÝTÿãÿp¼¦¬!a ìi§Vû¢Ý‚•7!áÎ;›î®JÔºNC…J÷¯·lÙârú:}Þ9ôç|½zõ’FëÄúÓO?IµjÕL'S«ãq¦áF+ÇwÅ]HØÓñݯžŸvVµËÉÉ1õþùçKŒiÔ¨Q%Ƣ݀õ¹?þØíx]ki×ÇʸÔÃ?,±±±^Ío«û~饗LPXÌ;vì*Uª˜kióÈ›š–6g4œªÝ«óóóë4œ®¯ÓÐri´²ÖH__³fMð-º¯²^ÿÒæ««kïÍ{‡vû|x©óÈÛš–6g~÷»ß•˜òµÚIØN»áêt»>}ú˜`²?®¿»ùêiž{óÞa¿øðÃ]ž—¯÷“žu½ý}§èë¼™#ð!a@h#$ € šsíE½l˜ˆ“”$Ò±#u@èJMM5a9 Á>ù䓎å÷¿ÿ½YðàA󺲆„;æòyoBÂEõË/¿8–fÔ¿2Äí8¬„„íûqÕ±UÂ111–Æ£N:%=ô ß|óÍr÷Ýw›ç7oÞìöøî¸ {:¾«óµŸ_½zõäöÛo/¶­§1¹ —v®¥]«ã²›9s¦é’[¹reÓÝùâÅ‹nkçí¾“““ÍëuNº É:×µ,5u¾fgΜ1»×úVz¬Þ½{;ºûãú;?gež[}ïX¼x±éäüÔSO•8nYï'­±®×ùëî¾·:GàB€Ðöi!a !áȸ† R„. j÷ÒAƒ[ìáB{`1!áC‡yÖeõêÕ¯½_ºô¾zõªT©RE{ì±Ûk·å¸¸8KãQÚuø¦›n2!l¥]ýÝIØÛ°½N÷ß¿ÇkæmH¸´s-íúXWQ7nœ •>óÌ3n_ç;õúë¹4oÞÜŒ?11±ÔyT–š:_³óçÏ›ÇC‡-q¾„„•Oç´v^öÇõw~ÎÊ<·òÞñí·ßJ­Zµ¤G¦[°³²ÞO/½ô’Y¯5v~/óÖ„¶O*@Ðóç‹Tâ_Ä¢4§]9ÿüç?—x®°°ÐtÒlذ¡y]y…„_~ùeó|VV–y\PP Æ 3ëfÏžíöXÎË®]»šÇûöísyœ¹sçšç·oß^l½ó¾ãããM—Ò¢.\¸ µk×–Ñ£G[Ozzz±±){¨qÓ¦MïŠ/!awç«uªV­šœ>}Úíñ¼ [=×Ò®•q¹Ò³gO¹ãŽ;<¾Æê¾µƒtƒ LgY k§â 6”:|­©ó5Sõë×7]¼‹Ú¸q£Ï!a=†v]¾ï¾ûürý‹>gõÚ—öÞ¡”o»í6iÚ´©Ëcúr?é>‹êÞ½»ÜyçnÇäëü@éøHºòsm!áR …†„7¦áLóeÎΦ=_|ñ…Ë ]RR’y^_W^!a=¶>?aÂY»v­ <Øt õ6$¬ûÑ®²òMII‘#GŽ˜í5`©222LèsìØ±¦›¨½[©ó¾—/_îè"«ÇÐíFŒaºk‡c+ãÑ}7jÔHÚ·o/{öì‘Õ«WKëÖ­Íóï½÷^±ó/¯°»óݶm›Y¯‘?ûì³kïMÙòõ×_Ë¢E‹,É9$lõ\K»>VÆ¥¦L™rí¿sL˜s×®]R¯^=8p Ç9heßëׯ7¯Y±b…y|ùòes¢·ØÝÕÕךº Û;Þj7o½^yåùãÿhÖiˆÙíÆ«ãÒZ_¼xQÒÒÒä‘G1Û.\¸Ð/׿èsV¯½§÷ýe„nݺ™nÇ ,0!ò¢Ë¥K—|ºŸ:wî,;wî4u˜5k–™{ö÷Wc²:ÿà=B€Е“f ŸÚ@-®Z•:„³”[HøÈjÐ3tèPùÃþàöyíà©Á¹x ÜBÂÔ½5jÔ0KBB‚ìÝ»×lóÑG¹=–«€¥†5Ô©ëuÑ.ÈEC~/¼ð‚Ô©SÇ<·dÉ·ûž7ožÄÄÄ8öÓ¬Y3"µ³2 Ñj°Q×5oÞ\¾ùæ@Ô°¢†!=íË™/!awç«´;®vßµŸŸ¾FäVÆäöæ\K»>¥K=ú裎sÒ?G%'Nœ(u®{Ú÷¹sç¤qãÆòøãÛæðáÃR«V-éׯŸ™§žêêKM]]³œœÓI[k§ÏµiÓÆÜ;V: ïß¿ßÔT_«÷­þyýõ×Ë믿n¹¥]çç¬\{Oï¶ÃÕbïØìÍýT½zuóz=w}}TT”ù…OçauþÀ{„„¡‹0‚LC•ø×”°¦á`½†ø±ðèìÙ³& éÇ/Öýµ( %j‡Õ‚‚‚R÷£¡Ü3gÎø<Žüü|´¶Óc걋NË›§óÕsÓsôÇx¼9WO×Çʸt½îûÊ•+^Ó_çì®®þÚ¿v²ÍÌÌôi[ ¾j·fí,¬tË»šçVŽ£ï!ö{VŸ?zô¨×óÄŸ÷ BYö~[H8k+µ@P¬YCH8ÜåæÚ®áÊ•ÔT,|¬]ÚAXCÂÚQí>KH8üEE‰¼û.u kB!a™=$¬Ýh¾bcE©¨X à£ôôt™wîœ$%%I‹-¤U«Vżúš[o½Õ„=5,¨¯_µj•åc®X±ÂìW·¿í¶ÛÌöâu Ý»w¯ôéÓGbbbä–[n‘#FÈÉ“'‹=?~üxX¬W¯ž 6L6h{§s,Ëx•/c³RK¥AËN:I:uÌŸ›7o6Û½óÎ;>]Ó¢û»çž{dÓ¦MnCÂ¥Ão¼!íÛ·/¶MZZšßòåËKÔ'##Cžzê)So½¶‰‰‰&€ê©Žz¾:ÎZµjIëÖ­eþk¢  ÀÌM+z]*W®l–?ýéOrìØ±¯2dˆ´mÛVÖ®]+ .”ƒúé €Ð§!áe±ÔA£á`BÂáoÖ,‘Æ©Ê.7WdáB‘„‘øx‘ªUmï,,,,,¡¹ðO ¢#$ kΡMûã|Ðj§L™"]ºt1ÁÁS§N™×h°4!!Á¼nêÔ©&à{äÈËÇLMM5áQÝ~̘1fû]»v•ËîÝ»¥FÒ·o_Y½zµ,Y²Ä„H4h YYYæ53gΔÊûï¿ož¿ë®»äî»ï.v¼²Ž×U¬ŒÍJ-·lÙ"ÕªU3ûÑैíj_:ÿîܹӌkèС&l«uiÚ´©ËýY9‡çž{Nªê§ôE>|Øìï£>*QŸAƒI=̹6kÖ̬{õÕWÝÖQ;×V¯^ÝÔhÙ²ef{=ž¯Ÿá˜ùø·¿ýMNœ8!—.]2!{½vÖûÒîòåË-Ó§O§p@¸ùn!a•=$¼u+µgkÖØÂœ€¯´cðŒk?¢6lh›K={мù¦mniNÂ,,,,tE„„aÍ]H¸sçÎ’«-Ä<Õu®µÓ¿ë:_Ü0ÛüñÇnÇÒ«W/iÔ¨‘\½zÕñšŸ~úÉ„jµ{°+Šu5®²Ž×—±Y©å½÷ÞkB²δ;{ö¬yÍĉ½§†lµ#p~~¾c~]íÏÊ9x~å•Wëòòò¤I“&R¿~}G7aWuÔŽÃv999æxÏ?ÿ<7g9[ºt©¹zMœ9sF®¿þzéÖ­[‰{Ö¹6€0°/‘0‚Êvúò'„™;l×ñ·/$¼òùç"Í›‹DE‰$%‰dfR@x $ kîBÂÇw¼&;;»DGØò k¨4**ÊtvÖ¡CiÛ¶m±uHÕN¨o¾ù¦Ù‡vè-ÊŸ!a«c+­–& ܵk×bûЀ¯¯„÷»ß•—«ýY=oCÂöyd7jÔ(³>##£Äëôüµ“±¥?ýôSÇÒ¸qcÓ:ÒéùO›6M:vì(µjÕ’;ï¼S¶i©ôÆoHûöí‹m“––&mÚ´‘åË—›ÇsçÎ55XþÒK/™®Ñ-[¶”E‹™çgÍše:kkg`Ý_QíÚµ“n¸Á³]ÑP¹^«””Y±b…£Ãµ†ºõ˜Ei@ˆÛ=Aä;R† ‡¿'l×ÑË/èdÚ4[çàÁƒ Â!a@Xs.öüå—_ÎÌÌtÛMW¤111æï§N’‡zÈ^o¾ùfˆÔí6oÞ\l†„­Ž­´ZjpVÿþôÓOÛ‡¯!aíþªÛ9wáuµ?«çPÖ°ž§®×ëí®ŽõêÕ“Ûo¿½Ø2dȈ¿÷4x[¹reäMNN6!Þƒú½]¿±R{{=‡nÂæo¿ý¶´jÕJj×®mº:kðxúôéÒ¯_¿bóßïÝ»·Ûñ­^½ÚlóüCRSS%11Ñ<Ö`¹ÞO»víâ [Lj|Ù: ¨ Gý¨bÍêëž}Övÿ¿û.µ„'B€°ª!á«W¯J•*Uä±Ç+±m—.]$..Îü];ÞÞtÓM&Ĩ–-[Vî„­Ž­´Zê~4$Ú«W¯bûЮȾ„„ÏŸ?o¶:th±õ®BÂVÏÁUPõСC–CÂÚÝV×ëØœ_§ãÒNÊ÷ß…¼÷~øa‰uû¼7!á‘#GšÎÄjÁ‚f]||¼œ;wάûþûïͺ·ÞzË·´°Ò£v.êÂ… ¦KêèÑ£AǢ㲇„7mÚTl»²Ž×Û±Y­e»ví¤N:¦#²Òà¬w} «úõëËïÿûbë6nÜèrVÎáå—_6Ûfee™ÇD6l˜Y7{öìõÑnÆEuïÞÝt³uWGí~[­Z59}út…»÷æÍ›gjѿٻwo‰ç½ ­ûúõëͺ/¾ø¢ØuÕuÚ]XY ï۷ϼFÇáîž&6Ùœ@T¦møëØQ$1‘: t Ú„ÊáŽ0 ¬ùÎÈÈ0]pÇŽkºÄj÷Û·ß~Û„§NZêq­„„—/_n'&&š1è1GŒaŽ¡Ýlõ˜5’öíÛËž={dõêÕÒºuk³Í{ï½Wìxe¯·c³ZK³vô­Y³¦<ðÀÒ¤Iyæ™gÌk&OžìØÎêXí{ $k×®5¡Ð?þñfÝĉ‹½ÖÊ9hØZ_3a³¿Áƒ›îÍîBÂ;w–;wÊÅ‹eÖ¬YrÝu×¹|½&Û¶m3×E»öÙg’-_ýµ,Z´¨BÜ3gÎ4×^k {µnvÞ„„‹Î1{HXç–sH¸°°P¢¢¢Jt±.jÕªUf›üãnïYaB»k7a ˆ4$LX0ü  2v,u€g{öˆDG‹<û,µ„?B€°ækHX½ð ¦ ®>·dÉyë­·ÌßýVÚm5&&ƬץY³f&i§ÛkPXŸkÞ¼¹|óÍ7&pªáÔ øm¼¾ŒÍj-¿üòK>|¸ôë×ÏŒI» ëkt{;«cÍÉÉ1~õüõõmÚ´‘cÇŽ¹íL\Ú9h˜T» רQÃ, ¦ëmÑ ªý\«W¯n®Çõ×_ož×jRRR©uܰaƒÜqÇŽ1è5zä‘G*Ì=¨×{ܸqæši@ÜÎUHXÃÛþ +íb}à 7˜9㊆Êu›””·÷,€0¡!áݨ‚ª~}B‘@CŸ={R¸—›+Ò²¥~‹™íï„;B€ íÒ¥K’––&æq=L‡ZûñÇåÌ™3.ŸËÏÏ—ôôtÇc‹ŽI®¯§±ùBC˜Æ\ºti±õÞŒU;òfffúíΞ=ë6Lªô9ûöZÛ£GÊ•+W¼:oÝ^ÇáêºU={ö4ai»—_~Ù̃¬¬,G]5^´‹sYBÂ:¿tÝŒ3JŒEY·n]éÚµ«c!a ŒiHx_"u@PÅÆŽÓ¦‰tìHàžö Ð.ÂGŽP @d $ Ào4àÙ´iS(e¼Öh˜vÑ¢E&Ыaçµk×J||¼ÄÆÆÊÕ«Wö¶(Ý”)SdΜ9rúôiÙµk—Ô«WOèx~Ó¦M&”;aÂ3/,mÛ¶õ[HXõïß_*W®,Ó§O—ŒŒ ¢·wv®]»¶ìܹÓñZBÂ@[Ùœ0‚NCÂ.~Oafþ|[WhÀ•'láD~DBÂüFC„ÚÁ–ñZ·dÉ©Y³¦ _ÖªUËü'Û¶m ëÚ¢t>ú¨Ô©SÇ\sýsÔ¨QrBÿ%å7ÚQyôèÑR£F ³$$$ÈÞ½{Íë?úè#󚲆„µ;ñäÉ“sOúhá~ø¡Ä$$ „©e±"ßÏ¢*  [·ŠTª¤ßbE-PÒ“OÚîõ_¥€ÈAH”‰†AÓÒÒ$%%EÒÓÓÍcT¬kåÊ·¯ÑîÑ999å: ÷Ýw²uëÖr?€ Ððs¨‚ŠpdÐßoÖð‘#ÔÅ:$RµªÈ~üDB€Ðõi!a]»v„„#…†„““©Š3F$>^$/Z" !a@èúäÚ­k¨‚ª{w‘ǧ‘ qc‘wߥø?™™"QQ"‹S @ä!$ ¾‚Ë"¿daaÑ%{ŸHæ:‘ ©"9i¶%7“÷ —†„Om * k§QDƵœ4É¿û,((ÔÔTÙ²e‹œ>}:$ÎsÑ¢EÒ»wo9þ<½:ê×ÉÍ­XçÍáz–÷±‚9ǘ߫µ}„„Á§ÁH ±°°”¾ü«¾È²X‘u]D¾ ²ýq‘ïfˆ_,’½_¤ïDA.ž $ €@H8r$$Ø9|ø°ÄÇÇK¥J•¤råÊæÏºuëú-,üÚk¯™}þüóÏeÚÎ×ýzܦÁàk—K^|1¸ã˜4i’©×?þ°c†Ë5*‹É“'›st^¢££#î\yÏ[Ýw0çXE˜ß¡2¨5@è#$ >: ³°xî$¬á_ ÈéòãB‘£ŠìKÙõ¬ÈÆÁ"«ZŠ|m ÒéŸÿîi{>k+¡aáMßõ½íL µ@PŽÚ5¶];ÿí¯mÛ¶Ò°aCùꫯ$//O¾ûî;™2eŠœ;wÎ/ûONN–qãÆINNŽWÛ9‡¶|ÝOiöïßo‚˜YYY~w ­\)%râD°ç%!aÌ;göð'Ÿ|"ëׯw,7n,·cK îyoæ!áðá<_ DB‘âÂ[ˆø›±¶nìû¼±-L¬Ï@¸Ñ_vÐ÷2 AÔ·¯ÈÈ‘Ô!ÌŸ/Ò¸±Ÿ~dÉÊ2Á¨ƒÝ†Ö…@…¶>øàsœ£G†í½­K°.Ÿyg ;v,âçz ¯'!áÈGH ²ˆTçÙ: Ûëãm3Öˆdïµu,ÖÎÅtp¶ÞáùâqæHÚA0B€vÖnÂ))"•®ý˜ñë¯eß×Õ«W¥^½zrÏ=÷˜¿»³yófóšZµjIëÖ­eݺu%^3wî\iÓ¦dffÊØ±c¥Aƒ²uëVÇúììlóº½{÷Êøñã¥C‡æØÃ† “ 6”ØŸshËy?£G6]-§OŸ¶t,Ýç­·ÞjŽg¶]µj•ËãÙ÷×§O‰‰‰‘[n¹EFŒ!'Ož,Q휔”$-Z´V­ZÉœ9sÊe.¤]ûQ³jU‘Å‹ƒ?/CÂöZœ={V^zé%iÚ´©´lÙR-ZdžŸ5k–Ü}÷ÝÒ¬Y3yã7JÔðÌ™3òÔSO™ësÛm·Ibb¢zœ#V檯ãòvÿžæ€§yçÌJH877Wúõë' +W®[ß»wo™1c†Çcúãþ.mÎ[¹ïqÏ;+##Ãã<óe޹’`ŽSÔÿûÿ¯ØØíã×îîz<û±õ—9<Õ¶,×Ï×óñö^µòþYPP Ó¦M“Ž;š±ÜyçŽ1ZyÞy¾X½Æþ¼Î(?„„* Úíž ²¦È‚ª¶Ð‹oËgѶÀµvh>»ƒ¹”§ÌdÛ}w%›Z ¨ Gެ,[Hx‡Ÿ~¤â‰'L8JCu®‚ˆÛ·o—êի˃>(Ë–-“AƒIÕªUKt#µ‡¬ú÷ï/ݺu“éÓ§Kzzz‰ðÕÌ™3eàÀòþûïË’%Kä®»î2¡LgÎÛ9?^ºt©éŒj_4Щã¼ñÆåÂ… –Ž¥¡5 ïé~§NjösäÈ—ÇÛ½{·Ô¨QCúöí+«W¯6ûÓà˜†í4ÄWt­•1§L™"]ºt‘Ê•+Ë©S§ü>f͉ŽÖ0hðç¥sHØ^‹áÇK×®]åí·ß6ÇÚµkË+¯¼b~:G4ÜZ´»­};g=zô05ÔÀ®®{õÕW=Î+sÕ×qy»OsÀÓ¼sfµ“prr²\wÝuòì³Ï:ÖMœ8Q6lh¼îŽé¯û»´9oå¾Ä=ï|¬Òæ™/sÌ• &Èõ×_/yyy汆Toºé&³ïO?ýÔñºÿùŸÿ1AW«s©¬×Ï×óñö^µòþ¹bÅ snÔ×ù¬×÷àÁƒŽ}”ö¼»ùS^ï%,BÂѯ?ÐIØ—NÂgwÙB‹Ú‘YƒÂ^üwO‘s{˜S@yøaŽí>‚ŒpdÑî±+Wúg_Úyôá‡6©š5kšðX~~¾ãù^½z™î‹v999&,õüóÏÛ=d5jÔ(—ëÝ}»†ùœÃ˜®¶ó´ Ü <Ø„º6mÚäö\]KÆVޝuhÔ¨Q±ŽË?ýô“T«VÍt.-ºMçÎMWµsçN³NãoíÚ‰ŒsÒ]HxäµjPµ`Á³.>>ÞWÕ÷ßoÖ½õÖ[ŶÓÀ®+›4i"õë×÷ØåÕÊ\õu\Þî¿´9ànÞ9³‡„7nlj`_RSSK¼V;#kPX;ïØ±CªT©b‚µžŽé¯ûÛÛ9ïê^ Ô=ïÍ<óe޹¢]hu?ÚViUC³øÃäÑGu¼NÍfµZÛ²^?_ÏÇÛ{ÕÊû§þw(66ÖíñJ{ÞÝü)¯÷ÿÚ øJ; 5ÀÖYƒÃ…yÔð' k÷n È G ‡&%ùwŸÚ-Qƒˆ”Ò¯„×Pš†(5Èvï½÷šn—öE_§Ý:‹²‡¬ôëì]­wúiXëĉòæ›ošç·lÙâq;OA{òÃ?tynžŽe%$¬a²¨¨¨k÷јûÖÌmÛ¶-¶ÍñãÇÏggg»ì\YVÚxV;J''‡Æœt>sæŒã5ëׯ7ë¾øâ Ç:í[4Èçî:k¸Q×gdd¸¼FV窯ãòvÿ¥ÍoCÂÓ¦M“þóŸŽÅfvžç:u2ÝY[´haº%å|LÞßVç¼§{1P÷¼7óÌ—9抾Ÿê/a$&&šÇú§vÕÕÃÚÝÖ|„ôÃæXÚõÙJmËzýÊr>ÞÔÐêûç¼yóÝŽí5(ª´ç­Î½— ° e•6ßdÔÀp~.õüECÂËb©‚îÅ G’„‘ü¿_ HõîÝÛÑ©Reú÷zõêÉí·ß^l2dH±mݲœ×Ÿ:uJzè!»ùæ›MçÌ¢6Ýmçnÿ‹/6ÝSŸzê©çcåXVBÂö:Lœ8±Ä144ãvŒ¿üòK¹„„g̉ŽÖ0dhÌIw!ᢵ°‡qW¯^íXg5$¬õÓõðxJ›«¾Ž«,ûw5¼ ;vÌÒuHNN6¯×®§Î^çc–Çýíî|­Ü‹ºç½™g¾Ì1w4|Ï=÷˜¿·k×NfΜ)k×®5ûLOO—¿ÿýïÒ´iS˵-ëõ+ëùX­¡Õ÷O¥5Ñ0uåÊ•M‡á‹/{½§ç­Î½— ° þ½_dIC‘÷$( øËÁi„„´ya—.Ô!Rhèû·æ“~§!©*Uª˜nùùùR½zu¹ÿþûKÝÎjˆP»FÞtÓM’ššjkc_; ûí·R«V-éÑ£‡éêÌʱ¬„„¯^½jjòØc•8F—k7V\\œÛ1–WHXïg ‹‡Šò ¿ôÒKfýùóç]^#«sÕ×q•eÿ ë<Õ9ß¼ys³½k­»c–Çýíî|­Ü‹ºç½™g¾Ì1w4¬áíÇ›³Þ+rÕ}~üñÇÒ­[7yî¹ç,×¶¬×¯¬çcµ†Vß?í4è=nÜ8S£gžy¦Ä6îž·ö×{ ‹0à/ç‰ü«¾È¦‘"…yÔ(«}‰"ÿÛ‘: è4+V^¡RÞÊ•"QQúöþß·†Ð´Sã}÷ÝgwíÚUªU«&§OŸö¸•¡vËtÚC|›6mò¸?çÇgΜ‘Ûn»ÍtÞt>¦²z¬¹sçšuÛ·o÷xüøøxÓ•´( ’Ö®][Fí¶åÞ¿_¤jU‘Ï?9éï°^ߢºwï.wÞy§Çkde®ú:®²ìßÕp7ïœyÖN­ 40P5D©ÝV7lØàñ˜þ¼¿Ý¯Õ{1P÷¼7óÌ—9æÎÁƒ;´{nÑ÷’?ýéOÒ¯_?¤ýú믽ªmY¯_YÎÇ›{ÕÊû§³ž={ÊwÜáöøÎÏ»›?åõ^€À"$ øÓ© "ŸE‹ìO¢@YiHøK¾ÓÁ§!áX¾ä"bœ8!R©’HJJÙö£]9ÇŽktÚÑ2--Myä–Z¸p¡yͶmÛLØP;>~öÙg’m‚l‹-*¶/+!BíüÙ¨Q#iß¾½ìٳDŽ2[·nmžï½÷<î¯èãÂÂBÓuSCu ,}ûö[.]ºdùXæü´ÚYÒÞÔùøË—/wtgÕ žn7bÄÓôСCnkP!aí$­÷s^ý~·¿CÂ;w–;wšy9kÖ,Ó5töìÙ爕¹Z–°¯ûw5ÜÍ;gö°Îs ü]Ξ=[ìt+V¬0/_¾læûÍ7ß,YYYnéÏûÛÝùZ½uÏ{3Ï|™cž4nÜØìO»ÙÚéÓu7Þx£xUÛ²^¿²œ7÷ª•÷Ï)S¦Èœ9sL0w×®]R¯^=¨¶+íywó§¼ÞKX„„ûn†È‚ª"Y[©P;ž$$ €0c††“¨C¤ÐþøãŶ=|ø°ÔªUËt©Õ­»cúóþvw¾VîÅ@ÞóºïêÕ«›×{šg¾Ì1Oþë¿þËl³yófǺ-[¶˜uùË_|ªmY®_YÎÇ›{ÕÊûç£>ꘛúç¨Q£ä„þFŒÅç]Í+׸<®3ü0P¾ ²LÛÒüJ-_m#’òu@ÐÍ™cë<‹È1àÚícÇúg_ŒJII1…µÛ¢;úµíµ}•ŸŸ/éééŽÇÚ=S»—u¿e9–†u}ÑNžîh œ¿Â>P´)lÕª"‹Gæ¼.ÖÓkwôèQ¹råŠ×ûñ×\-ïý{3ïüÅÝ1Ë»fºï­'''Çqëó¾Ì³ò®W ç¤·Ûûz¯zzÿÔcëµr·ŸÒž/Ê×8¯3@EÅGZ@yÈÍù,Zdï$jøjs‚-( !áÈ3mšHóæÔ¡¢Ñ®àÑÑ"ÙÙ‘y~ž:žà^@ÅÄGZ@y9ô¦È§Q"OP ÀÿîIH!päY¹ÒÖQV;Ë¢âˆÁ?f<¸Wg|¤”—¼_EþU_d׳ÔðÅšv";ž¤:B‘'7W$*JäéEE‘’b»7lˆÜs¼xñ¢œ9sF ¹à÷*`ð‘PžRߥ›0à«e±"û©‚náB[¸Pƒ¥ˆDvWY— Ò²¥H^µT„„€ò”Ÿ+²¸®Èî Ôð!a„í<ª!á´4jIÞ}W$:šÐhE ÷®^k üP‘ÊÛþ$[PøJ6µ¼± ªÈ÷³¨‚ŽpdʾöczÝk?®ÏŸO-"ÝàÁ"Ý»S@ÅCH(o¹™"ŸE‹ýZÞøäÚ¬ÇSÝÖ­„„#Õ“OŠÜt“-(¼oŸÈÁƒ,‘²ìØ!2c†È}÷‰T©"²b…í.%5UdÝ:æ Ky-—/óÿ,¾"$ Âæ‘u]¨`Õå,[HøÔj€ Ó !áȤ݄[·¶]_–Ð\4( ßáLŠ-ðxᵬÈI#$ €AH8ÂüÈ¡ l¤v~ýõÿë$¼j„YXXXè$ Pñå_õEöN¢€ö`ýùCÔAg á÷>°4x°H÷îÔPñÀGééé2yòd‰‹‹“:È”)S¤wïÞrþüùë¢E‹Bvl¥)((0cŸ={vÐëÎuDˆØõ¬È²X‘¸|ù²DGGËôéÓëÊ3@ZÖñöO} Ã/V4³uàYÚ|[H„„ð¦À¹ ÿâ ¨>øàö^dÌê¨8 ÂÚܹs¥M›6’]ìñ¹sç$))IZ´h!­Zµ*æÕ×Üzë­&ìg^¿jÕ*ËÇ\±b…Ù¯nÛm·™í5Äë*@ºwï^éÓ§ÄÄÄÈ-·Ü"#FŒ“'O{~üøñÒ¡C©W¯ž 6L68µ²(ëx•/c³RKµqãFéÔ©“Ô©SÇü¹yóf³Ý;ï¼ãÓ5-º¿{î¹G6mÚä6$\Ú9¼ñÆÒ¾}ûbÛ¤¥¥™ñ-_¾¼D}222ä©§ž2õÖk›˜˜(………ë¨ç«ã¬U«–´nÝZÖ­[ÇÚY[¯….UªT1×ÿ?ÿó?å§Ÿ~ ýÁŸÛcëŽzv²”÷)Tpþ¼1u@ÈаÓÇ"ÂÌŒ"ÑÑ"¿}œ @Ä#$ kΡ2ûã|Ðj§L™"]ºt‘Ê•+Ë©S§Ìk4Xš`^7uêTð=räˆåc¦¦¦šð¨n?f̳ý®]»JŒe÷îÝR£F éÛ·¯¬^½Z–,YbB¤ 4¬¬,óš™3gÊÀåý÷ß7Ïßu×]r÷Ýw;^YÇëªNVÆf¥–[¶l‘jÕª™ý¬]»Öˆíj_:ÿîܹӌkèС&l«uiÚ´©ËýY9‡çž{NªV­Zl»Ã‡›ý}ôÑG%ê3hÐ éÑ£‡9×fÍš™u¯¾úªÛ:nß¾]ªW¯nj´lÙ2³½Ï׎ϰÎ^°`¼ûî»æ>ÒÇ;wøW}‘ïfp!‹HNN–qãÆINNÅ€ÍÁi"kÚQ„Œúõ áN?6Ô /¦€Š0 ¬¹ kP077׬Óà©®Óp­þ]×ùæôÐC&ðzóÍ7›àœn§·¢ü¶:¶Òj©ÁYýûÓO?]l¾†„Ïœ9c¶sîÂëjVÏ¡¬!a=O]¯×Û]ëÕ«'·ß~{±eÈ!ï­X±ÂtíÕÀgrr² {Õ²E»åê5«Y³¦§ÝO?ýdæÍ¼yóB£ˆkÚÙ:¥Fصñu[wïç;w–ÜÜ\³nçÎf¾'ÚiÇh½/]ºäX§]ŒÝý"ÂÈ¿{@H!$ DŽ.]D¨ ò„5_CÂú5öºnûöí>·´°Ò0œv.êÂ… &Ð8zôhÓÕy\öð¦M›ŠmWÖñz;6«µl×® gÚ»zjpVƒ»¾vð¬_¿¾üþ÷¿/¶nãÆ.÷gå^~ùe³mVV–y¬ÅaÆ™u³gÏ.Qíf\T÷îÝM×SwuÔ.©ÚÁôôéÓîÞÓ ­Ö¢ÿþ²wïÞÏ{D-Z÷õë×›u_|ñE±ëªë´ ­=$¬ûÐë}à 7˜€ø·ß~ëx®ŽŽ–œœóøoû›\ýõŤAµw’Ȫ–wm|ÝÖÝûùñãÇÛdgg{Ò{ZÂz/åkGs„˜/»‹ìž@2Z^ûnÒ$êD‚3D¢£µáµD6B€°ækH8##ÃtÁ;v¬é8ªÝoß~ûmœ›:uj©Çµ^¾|¹yœ˜˜hÆ Ç1b„9†v³Õc6jÔHÚ·o/{öì‘Õ«WKëÖ­Í6ï½÷^±ã•u¼ÞŽÍj-uÌÚ™U;¶>ðÀÒ¤Iyæ™gÌk4Äigu¬öνƒ ’µkךðàÿøG—A­œƒ†­õ5&L0û¹ö¿ãODÔµñu[_ÞÏõ¾×ÇO?ýt±ó!$!V4Ù—H2ºw×]áÈ‘J•D’“© ²„5_CÂê…^0]põ¹%K–˜¯¼×¿û+$¬´£gLLŒY¯K³fÍLXÎN·× °>×¼ysùæ›oLàTé ,ðÛx}›ÕZ~ùå—2|øpéׯŸ“v¶wxµ³:V wj§_=}}›6m䨱cnÃ~¥ƒCµ›l5Ì’`:« CÚÏU»‘êõÐN³ú|TT”$%%•ZÇ 6ÈwÜáƒ^£Gy¤Â܃z½Çg®™Äí\Q5¼]^!aµfͳî“O>1µËlãÆ¥W¯^ŽýîÚµ+tŠ—Ÿ+òi”HÚüˆº6 _½zÕ¡õ¥¿HAH8,‹%$ €BHˆ,íÚ‰ŒYqÏ_ôîÝÛ4¥ˆdúajjªlÙ²%d¾®¢Ô>èçÏúYt\\œtèÐÁ|ó!Âs>‡û}jïe¬§7Çâý× *´K—.IZZšùáZõèÑÃt¨õ·üQΜ9ãò9íxY4è¨cÑ1iÀ5ãõ46_hÐVÃyK—.-¶Þ›±jGÞÌÌL¿ÃÙ³gÝe]ÑçìÛkm=j:ÓzC·×q¸ºnvñÕ°´ÝË/¿læAVV–£®/ÚÅÙß!a ëº×_ݱN»SkˆT矆ÎCÎWD¶Ž‰¨kȰj×® çk(ÚþžúØcŽ¢O}—: d"ˬY"ÑÑ"¹¹ÁˤI“Ìgúùb ¸úì%Òè·gÅÇÇ›óÔÏõϺuëú-`çk ­|)×^{Øl¸[œ„’!C†˜o'Ôo*\¸p¡LõwHX?˜ýâ‹/äïÿ»Üpà ¦ctÑjõÃ3û‡Í3gÎ ½BzSä_õE ó"æÚ:$¬û¬R¥ŠÔ¬YSxàiÒ¤‰éœ¬¯Óy‚0öɵW˜C2®ýÈQ¡»Ž‘&-MD³‰‹,„„½³ÿ~ó¹ý—àÝÑϼ6l(_}õ•ùæ©ï¾ûÎ|vvîÜ9¿Œ#99Ù|“—§Vjïë~|­SyÏ•­[·šÏíK«V­äÆo,¶N¿­/ó£4—/_–èèh™>}:o˜êjå½$sÎÝXýùžçÍóǹ‡â{Y ÞǼ½v„„p0¿9pà€é`Ëx­[²d‰ æéܵjÕ2ê×nmÛ¶-¬k‹Ò=ú裦{«^sýsÔ¨QrâÄ ÇóÚQyôèÑ&´«KBB‚ìÝ»×¼þ£>2¯ñGHؾhöOú“|ùå—%ÆÚ±cG3OCr^8b BžI‰˜kè°Òë>|øpéׯŸ¼õÖ[¦«°¾N÷0u9Ëvoœ\I-2´‹°v9úöµ-ÁFHØ;|ð»6±pGÃ{¡úMSª½•:Z·nÝäÖ[o ‹óÖ×ÐýhC¸¯k(¾—¸«?ÇÈ{+TßËyÝ Pv„„@™hà0--MRRR$==Ý¿y饗̷´µlÙÒ|«›š5k–Ü}÷ÝÒ¬Y3yã7û±owæÌyê©§Ló¶Ûn“ÄÄÄŸÛº RmÞ¼Yî¹çÓB?S[·n]±m|—·û×î˜IIIÒ¢E Óy¶hHS_£çeoX¡¯_µjU‰cé7Ýic=^Ño½óvLEǥߨ7vìXiРék_ooN ¿ˆ?~üxéСƒ9ö°aÃ\vÉu®½ó~ô³L}ìjÑo³r,Our>ž}}úô‘˜˜¹å–[dĈròäI¯®¥…„­\‚‚™6mši¡¯»óÎ;ÍõðtÞž¶qeÅŠæu?zé~4êm½œçŒ'žÎýÉ'Ÿ4Mœi#—ÿøÿp|Îëë|:t¨Ü{ヲNEé7ÑiÛwÞyÇí|²Ïg ³zºo‹Î9«óiãÆÒ©S'Ó CÿÔóÓít<VÆYÖ{ËÝxŠž»·sÑ_ïežæ¤/ïeþxóöXåòß6*BˆXÚaV?ò÷WÖùÕÞI"+šq±|¤Ýô¢ôÃÍüü|óÁu||¼ÄÆÆzüÐ!îÔ[HX»m!bÒ$BÂ@¤ÉÍ©[W$Ø CÂö“†»ví*o¿ý¶ ³Õ®]Û|+“†Ê¦OŸn¾U©h7Kûvƒ ’=z˜¯£×À®«ofrRmß¾]ªW¯.>ø ,[¶Ìì£jÕª.;qz;.o÷¯¯ÑðŽ¿K—.R¹reóÍQJeúÍXúº©S§šàæ‘#®??xâ‰'Ìë4|vìØ±Ï[SÑqõïßß„\õµa†s gΜ)”÷ßß„7ïºë.švVÚ7jé/¾ëyÙ \ë8o¼ñFóí\VŽå©NÎÇÛ½{·ùƱ¾}ûšoÓýiNC„¨´zm¬ð¶z=4À«ÇÕPzrr²©ÏÁƒ=ž·§m\IMM5DÝϘ1cÌ~víÚåu½œçŒ;¥û‡~hö§ã*Jƒ½úÚ²Îgû:­MQ:Çô5Væ“§¹ánÎ{ÚfË–-R­Z5SgýÌWüöà¶§®ºîÆju—åÞrÅùܽ‹þz/ó4'}y/óÇû˜·Ç*¯ÿ¶P@ÄÒЋBºÃõÙ¶0ä¹=\0è‡5kÖ4üi'{‡mÛ¶Qœp–±Æv_\''Gzè!"½îºë¤GæùmÛ¶U9Ÿ³å'%%™N±O=õT¥×ãʺ\ [ëà¨3«†èZµjåÖ¾©Ž³°;ûCÍ›7ÏtT 1Ý{ÏŸ?_íë®jG…„kS/g\}í«W¯¶…'5¬¬ÝhŸ}öY·ëçlÛ6mÚdÆ/Y²Ä,_çýóŸÿìÖñäìØpå˜/?†>õßýë_íÖå‰puÇpmÎ-G­×ÝcÑïeU“5y/óÄûXM×åéßmB€úG'a†ª; kø7'Å2[&rt¾ÈX‘=SE6Y×Ý0Õ±þü|ˆåù¼í„†ýÅÅ<‘åa–À7Ë{ØêêŸBH\‡[º '$ÔÏú½~ñÅÍøòwÜ*?­ï´kç=÷ÜSåvÖt»j³|O…„•.·Q£F¦ƒ§«ÛTU]+Ž×.²×^{­9rÄ<Ö®Ÿ5í$üõ×_KÓ¦MåÎ;ï46+re]®„:/_¾ljòøãWZGtt´tëÖÍ­}Sg!awö‡•† §L™bˆO?ý´KLJ³yq®M½œqõµ_ºtI®¹æ³ýŸþ¹]8Òdzv]Õ«C‡µ×{öìqëxrvl¸Ö:k€V·¥<=¼®Í¹åN½Ý9=ñ^æNHØ•xâ}¬¦ëòôï6‚!a€@q&Ý"Þ1ÙÒmXCòÓ0±>ß¶}’Ȫ¶"Eg© ïcŸö§ð)ññ„„@¦Ý„»t©Ÿnž çææÚ-РAróÍ7Û«¸ŽJãÆåçŸvº5Ý®Ú,ßQˆoÑ¢EfÜ®]»Üª³.K»wþñty›œmWÅñǯ´Ö°ÛÖ­[«\^ÅǺÿÚ·o/;vtèsu]ÎêTq}QQQ¦{gyº¯¾új™0a‚[û¦:ÎBÂî슆 ";wvëø¨8#ŽBµ©WU\}í=ö˜éVüÀÈïÿû-£ªmÓÐ¥†s5ÔÙ«W/»ç\=žUŸ>}¤Y³f&L«4ð©álWBÂŽ¶Õ•uÖöÜr·Þ®‹žx/s5$ìj jû>æN½½ý» €`@H P¶tã´†×GYŸØ ’¿ßÒ±X;ÓÁ¹fž==hçç¤kD>lé(|2º×ç¾>ŸÉ{H}ÒÐügƒ¨|Švà†@ÀÊÈ ™3§î×íéð€d÷îÝæöñññ¦Så‚ ìÖYq;wî4á@톺bÅ ÉÏÏ—-[¶ÈÊ•+ÎãêvÕfùŽ‚¨'Nœ0Ëšú¨YÖ²eË\Þ&gÛUq¼nC»ví¤oß¾²oß>Sž={šçß}÷Ý*—Wþqii© Òj—ÐÄÄD9pà€Ýpá—×å¬N×ÿÑG™Ç±±±¦Þ:Ÿ†PCCCå°¶Ù–º »º?fΜYö;9Á„þ´ÓmË–-eäÈ‘U¾îêæqÄYH¸¦õªŠ«¯]ÇéruÐs»&˨jÛ¾ýö[ÛòçÍ›g÷œ«Ç“£c£&!a=®õ<Ð0ìØ±c妛n2wuš3fTYOGÛêÊ:k{n9Rq½î‹žz/s5$ìj jû>æN½½ý» €`@H 䤈ì}NdC‘ÄPKh˜¡êaE¸%\¯Ý¸õBÝù|ˆÈ¶‰Ô>EC øThqq"-Zˆ¤×ñM¹<~çw¤yóææßaaae¯+®Ò:­#%%Åt´´†µ‹§†ÑªšÇÕpM—ï,ˆú /˜ùõ¹U«VUz}”¶mÛšç5 ¦?µ&o½õ–[Ûäl»×0©Þt\—.]dÇŽ&˜¦A6 Ê9›¯üc ÏY·ÅÑ`í\êêºÕÉÑëY¼x±éPk]Odd¤Ù·5Ù7U©*$ìêþÐnºÖפ?Ç/YYYU®ÌS‘³pMëUW^»†/µ;«gµþ5YFuÛÖ¿³| SVäêñ䉰úì³Ïäþûï—#FÈÛo¿mº ë4:u*n««ë¬Í¹åHÅõº{,zê½ÌÕ°«5ðÄû˜;ëºâŠ+Ì´ÞøÝ@0àr@0:û=„}¹“ðá·è$\ßûúäž²ŸÉ–îÛÖа†ìsSyÿ¨ ÚEX» >„0ø Eºw×[˜k‡CÿÛþòá¨ââb9zô¨\ºtÉíåè-Ý5°¬DoðÔò5ˆ¦]5KJJœN£µHMM5Ý8µû¤··Ië~üøqÛcÝ6ÝFoÔÒÕu¹R'+­Ö¢¾U·?t¼¾¦ªŽïŠ¯Û•yÜåzyâX¬Í2´“ë„ juÞy‹†Dõ=îÃ?ôØ{D][—ýº®sçÎÙÎ3}ÎW·à˸œø D®j+Rt–Zø" mc ë¾*.¤&Þ¤Áìý/Qø”?¶„„ ùshii"¡¡"¯¿îÛ^“î¥`¥{õ=D;¯Ö7 ‚®\¹R²³³MˆtãÆ%:tË—/³³Ü@H¨oÚI81TäÈ\jáë2–ˆ¬·t¾˜G=¼eM‘ïâ©|Šæe4$œ‘A-€@÷æ›–ó]¿àO ¨#FHdd¤OtZ]µj•4iÒļ§5mÚÔüìÖ­›ìܹ“à&BÂ@};+ò¯Ötöù-!Öµ‘"糨‡7hûûêŸBH.'Š„‡ûWPXoA¯·SçVêj"//O |f{ô½,£ì?^©©©rüøqÞÛjˆ0PßVGˆì›Nü‰v^ÕVd]wÂÝÞ°´ìOÕìd꟒šJH6Öó~.7ø)BÂ@}ÊMµ" S £…µôÖqÔ“ ³-焞€Ñp°†ÓÒ¨Lž{Îrîk`8;›zü !a >í™*²>Š:ø«Œ%–@ëwñÔÂS´K³ÖôL:µ€oý÷?ÃLI¡@°Y½Z¤uk‘°0‘¸8‘¼G;‡ aá%KD&N‰Š²¼/0000000Ï Aaü !a ¾zÝ.…ÿ;¶ÌøÎI¡µut¾¥Ã6àƒ4”Düª¨HäÈ: 300000ÐI½žE €z’:VäËêJ‹DÖugzÂÁ8‘õQÔ>IC Ôþ0P4TšÔBäðj(Nl°tÎM¥µ±g*akø¬°0BÂð„„€ú“b ”æ¤D;ànGjcû$Ëø DæÏ§ð„„€ú !ÈOûS‡@ó}‚%ü]p˜ZÔÔÃEöM§ðIŽ¥ð„„€ú°:Bä`u4¥E–}Kȵæ>EHþ„0P×Τ[ºÍæ¦R‹@¤W k`î[ÕÖÒ‘ðAýû‹¼ôu€ $ Ôµ£óEV„‹R‹@t>K$1TäÇ©EMh€>;™:À' $2y2u€ $ ðÇ—3fH·nݤ_¿~2sæL6l˜øÜ¶®\¹Òg·­:%%%fÛ,XPïõñç:Uú´¿HêXêèûxóhêà®ÂlKH8ÿ µ€OÒð¤IÔþ0À-o¼ñ†4hÐ@~ùå—:_÷½÷Þ+½{÷–7ʲeËäÙgŸ­·mñå:ÕVqq±ÙöéÓ§×{}ü¹Ž€S—ò-]f3“¨E ËXbÙÏó¨…;ò¶[BÂEg©|!aøB·$''Ë”)SäܹsnÍwðàAÓ8/¯fa©‹/Jxx¸Ìš5Ë6ΛÒÚn/!aÏÔ‡0áÑà` ƒO-Üql™Èò0êŸ5nœHL u€ $ ¨ï¿ÿ¾ {=z´FóóÍ7fþ„„Û8oHk»½„„=SBÂH›G‹|É'Êìk8tèu‘5¨|–vÖn€? $ pË¢E‹¤W¯^’ŸŸo÷øÔ©S']»v•[o½Õ.Ì«ÓÜxã&ìÙ­[73ýºuë\^çÚµkÍruþöíÛ›ù5Äë(@ºÿ~¹ë®»¤U«Vrýõ×Ë< ?þø£ÝóÏ<óŒôë×OZ¶l)÷ÝwŸ¤¤¤TzµÙ^U“ms¥–jóæÍrÛm·I³fÍÌÏmÛ¶™ùþñÔhŸ–_Þí·ß.[·nu®î5Ìž=[úöík7OFF†Ù¾>ú¨R}Nœ8!O=õ”©·îÛØØX)--­²Žúzu;›6m*={ö”M›6qbÂÐ]6¸P×è•+Wʰaä  À»+Ú3UäÓþ;ðY„„àO ÜR1´i}üàƒš@íÌ™3%::ZBBB$''ÇL£ÁÒ‰'šé^yåðMOOwyGŽ1áQÒ¤Ifþ={öTÚ–½{÷Ê•W^)Ç—õë×˪U«Lˆ´M›6’—g hÍ›7OFŽ)ï½÷žyþ–[n‘=zØ­¯¶Ûë¨N®l›+µüꫯ¤qãÆf97n4bk€º&wïÞm¶k̘1&l«u騱£Ãå¹òþßÿûj7ß·ß~k–÷Ïþ³R}F%wÞy§y­‘‘‘fÜk¯½æ´Ž»ví’+®¸ÂÔhÍš5f~]_M;>Ã?ßwüZ…Fák(<3É㋞1c†9/Z·n-EEE•ž/))‘víÚ™i>ùäÿ9µóò¶‰;ðYOÕñºm§ÓíÒNÊ÷ÜsOPž{k×®5û_øÉÉÉ&ˆ{èÐ!Ûó®´­õ¼ÿþûMGêwÞyÇ„ü®¾újyùå—MðxÖ¬Y2bħ]Dk2ï¼yóL˜ü½÷Þ“U«VÉ-·ÜbŎΙ»ï¾[î¸ã³¬ãÇ;<^>üðCsŽZ­…¿ùÍoäÌ™3fš]»v™q>ø 9ÏGeêSÓsºÖ4¬á}ÓùEŒÖt°„Ä=È^½zµ9?ô§URR’\sÍ5òùçŸW Ww>jˆxâĉf¾W^yÅœcééé¶óPÏ)}ÏŸ9s¦yÿ×÷%ýŽGä´„„õ'à£ô{rÔþ0À-5 kgB§Á½š¨.$¬¢¢¢*50¨!Fí<ªÃŠÛe oݺÕn¾Ún¯»Ûæj-ûôécºCZYœÕànMBªuëÖrà 7ØÛ¼y³Ãå¹òþö·¿Ù:M*í~«]*uÜ‚ *ÕG»—7hÐ 6uVG §6nÜØ®[l°xøá‡¥C­ŠÜ 7Î았˜hÆéþ=uê”÷Ýwß™qo¿ýv¥}Q“y+Òp¢³òøñã«=ŸÊ+--•Ñ£G›@pùóXÃôíÛ··=>wOÅÎÙuF;£.)ÌæI0Úõ„Ègƒ<ºHkHX;ëïí(l¥ç„väÖs¢bHØ•óÑÑe¬çá€L§bµ{÷n3N§÷ˆ,!áKù3ðY®ðç7à³ ÜRÓð‰'L·A -i—Xí~«H5´§ «ãJHø£>2cccÍ6è:54¥ëÐn¶ºÎvíÚIß¾}eß¾}²~ýzéÙ³§™çÝwßµ[_m·×Ýmsµ–ºÍÚÑ·I“&2vìX¹é¦›äé§Ÿ6Óh`ÌÊÕmµvîÕ.«7n4a÷»ß™qÓ¦M³›Ö•×` ¤=÷ÜsfyTÓîÍÎBÂ6ÓÙùóçM‡Ü† :œÎZ“;wšý¢Ý+W¬X!ùùù²eËY¹reÀŸ{‹/¶uÚÕNŸ¹.Îþâ‹/*…5ü­ãôx¨¸/j2¯•žGYYY2gΜJ¼­ËÏÎήö|*O{}nþüù¶qb¾òÊ+eðàÁ²|ùrÛa:¨Ö‹MÑ"Û'ñK$Xe&YBâ ¿ZCÂê‘G‘«®ºÊ„áõ}QCó)))U†„«:« gffÚÆéº*þ¾¯•£eçñª¶/ðinÀ'+ð\ʸ¥¦!aõ /˜n‡úœÞâ\;Zog^WBÂJƒ”­Zµ2ãuˆŒŒ4AF+_ƒÂú\—.]dÇŽ&pªáTíŠê©í­É¶¹ZËÏ>ûLî¿ÿ~1b„Ù&í*¬ÓèüV®n«Ê´Ó¯¾~¾W¯^òÃ?8íL\ÝkЮ®ÚUXš:è-ë5ÐZ>¨j}­bÓýѼysó|XX˜ÄÅÅU[G ¾uîÜÙ¶ º}ôÑ 8ÿæÍ›gâ”~æ™gL¸ÚÊpùzZƒ¾@·ª*$\“yõ}衇Ì>ÖP£v¤Öi¶mÛVåò«{.))É»O=õ”Ýx ëô-[¶”N:Ù ÷Þ{oÝ︜KwÔSûø%¬4œXv~þø±ÇY>$¼aÃsÌëï1 Ìk ^ÃòŽB®œU…„]ù}_c{¦Š|>„ã>-9Ù>{–ZÀ÷Ô© .HFF† /©;ï¼Ót¨õ´cÇŽÙu<-¯¸¸XŽ?n{¬Û¢Û¤׺ØÞª¶­&4h«!­?üÐn¼;ÛªÝ up­ék8yò¤ ;£ÏYç×ÚjíÒ¥Kn½n_·ÃÑ~ dð›2eŠ Çji+G!aíðì !aí&}íµ×Ê‘#GÌã5kÖ8í$ìjHøë¯¿–¦M›šã\;¢V<Ç5„~Ï=÷øÆNû´¿HêX~;í&ö¤ÇW>$¬ç€~ãü£ 4Hžþy3ÞQHØ•ó±ÞBÂ_Æx´F€7¤¤XBÂÔ¾0 ÞhÀ³cÇŽ&PÊöºF[+W®4^ BnܸQ¢¢¢¤C‡rùòe¿­-Ü7dÈÓQÙêoû› ëååå™Ç¾Ö.Ñ:nÁ‚f\}„„5_1Dh %j€±ªå;{NâíÛ·7Ǹ£éÕÀ¥qãÆòóÏ?×ïŽÒαt†:+²6Òc‹+V=ö˜ Çk§ñ}û,Ç[Ű«çã¢E‹Ì¸]»vUyŽz<$¬õ92—c>0oÑ¿õ­wOÓmÚ´1wÁóF“ TÕõC€s„„õæ›o¾1lÙ^×­ZµJš4ib.†jUýÙ­[7Ù¹s§_×Õ›9s¦$$$˜Ðëž={¤eË–2räHÛóÖ0àsÏ=gÂã£G6Cë;$¬NÛµk'}ûö5ÁE¶gÏžfšwß}·Êå;zN;GßqÇÒ¨Q#ILL”Ø Úý[é9¡aIý eÅŠæ|زe‹ Ù×™¢³–ÐãÖqÀ°Å=¯¶žú;¡âû‚5$ìêùxâÄ sþLžíÚ¬Y3óAþ?~¼deeÙ&L+¯¼Ò 'N”ýû÷›éÿùÏšiê#$¬.\h‚‰:¾K—.²cÇÞÕŽ(ôu¶|GëÖ°µ£Š£¡|çÓ””ÓmÙúœÖíÑG­»¶}’%ôx>‹«#DÆydQCÂÚ=|ûöíòý÷ßÛÆU »z>ª^xÁöž£_PñzH8ÿ %D}†¤|›†ƒ5$¬aað$kHX¯ùZ½úê«fœþ]îoÞÿ}³ízw¼ºœ`0€Ÿ°Ä/]ºätš“'Oúd7ââb»84Ш¯¥.Bî¹¹¹rìØ±º Ôg,±ÎçÀůöLYå7磆òu¼>ïußÅ‹ü«uÙ]Ç |ZÙ‘MH8%…Zð,G!á 6˜qz—1µhÑ"éÕ«—dgg›;i§aýÒ°Õ¶mÛäöÛo7w¡Ó»mÚ´ ú%)_†IDATÉnú7þ믿.ýû÷7ÓÜ|óÍv󻲌òÛqêÔ)‰‹‹“®]»Ê­·Þjî„f}þÆo´ÝõH§ÕîÈÚÔà™gž‘~ýú™;¥Ýwß}æ‹þ—íh^ë:ËßAO—w×]wI«V­äú믗x@~üñG—·Óº€¿"$ x’vDÕ°ãÖqÔörS-áñ‚ÃÔ¢¢]OøD€¨!aÞâ($¬¡W·fÍóØz§Ÿ»ï¾[î¸ã™5k–mz½ÃÖW\!>ø ™~Ô¨Qj×wíÚµ"ñññ’œœ,³gÏ–C‡ýúç¹ Ë(¿:y5Ĭw*Òeçää˜ð®ÞéL§yå•WLgàôôt™7ožŒ9RÞ{ï=sç¢[n¹Ezôèa·lgóV¼ËÑÞ½{ÍÕ†nît¦ËÓP³§óòò\ÚNWëþŒ0à)ç2DVµY×]¤è,õ@e«#DöM§mŠI{’:ÀçiKB¼ÁÖpªvïýË_þ"76]}õ®@Êz?~|¥ù‡*íÛ··=Ö»iÀ÷ù矷{øá‡¥C‡N·Á•e”ߎHaa¡·{÷n3NC½JêãŠãò4,ìhGóV ë¶¶k×N._¾l›æ§Ÿ~25ÓnÅ®n§+uFH‚QÉE‘Ó‡tÈ? ’½IäÌKÀÓ:pË{¸K;ÜEdm¤å9ké4MˆüWóDCE²VS ø '%Qže [ ç>öØc’››k›ÆzÍÎζ›·¤¤ÄtÕï+Á.c‰ÈŠp‘ },GÀ k öÈ\jaut¾å½ö|µ€_-û/}BuàYÖpRR’|ûí·réÒ¥JÓTì¦k¥¡aß²eKéÔ©“Ýpï½÷ÚM;oÞ}¨|!a¨ ‡E––ý vjµüØÜ¹":P¿**9rDdÓ&‘DböáâEÎ ¾0Ô…Œ%"I-DJ‹¨àÇD""¨Ì E–-™8Q$*J$4T¤A†_ €/ $ uaïs"Ÿ¡€ŸÓp>]‚’v ~óM‘¶m-Áà!eæÏ™#²aƒ%J'a: ð5\Æ€ºði‘ý/QÀÏ%%‚‘»t ‰ÉΦ&ßÇe,ð¶Ò"‘åa"™IÔðs))–°v´[°vމÉÈ ÿAH¼-ÿ ÈÒ²?¿ÎgQ ÀÏ¥¦ZBÂYü÷ ¯¿n9ç§OçËÿCH¼-c‰%$\ʧ‰€¿KO·é& ¾øxKáùó©À?oÛûœÈÚHê kHXÃÂWZšHX˜¥ƒ0þŠ0xÛ¦h‘Ô±ÔYY–ðöíÔTgÏŠté"#RÄM~Œ0xÛ¿Z‹Œ£@ÐÀ †„SR¨¨&Oi]ö§|v6µø7BÂàMç³D––ýé•™D-€¡!á?¦@ JM Y½šZü!a€zöÆoHƒ ä—_~qyž3f˜ythÔ¨‘\ýõòÈ#ÈO?ýDA_óãÇ–ð™tj &$P EE‰ÄÄP@` $ PÏ’““eÊ”)rîÜ9—籆„eîܹ2räHóxÀ€ð5ÿ~SdE¸HiµDÛ¶"óçS Ðh÷`íž–F-0€²†„?nKçÎ%$$D.]ºD_²m¢È†>Ô :ˆÄÆR ÐDG‹LœHƒ0€,Z´Hzõê%'Ož”_|Q:vì(Ý»w—•+Wšçããã¥G)³gÏv8o~~¾ÝãS§NI\\œtíÚUn½õVI(wÓŠ!aÕ»wo3ŸÒÎă–’’»umܸÑL—““ÃNꊄӞ¤@‰Š"$ š”Káôtj„„<à7Þ0¡Ýûï¿_(ï¼óŽ ö^}õÕòòË/ËÍ7ß,³fÍ’#F˜éŽ=ZiÞ_~ùÅîñƒ>(ݺu“™3gJtt´él ÷– _¾|Y–,Y"¡¡¡²páBóü|`žONN¶ÛΑ#GÊwÜÁ«bZ÷à¥E"ËÃD2“¨@ yé%ê’˜‘þý© °ðkÀtܸq¶î½‰‰‰f\TT”é ¬¾ûî;3îí·ß®4oÅð€¤°°ÐŒÛ½{·÷þûï›ÇÖðm·Ýf‚ÈÍš5“íÛ·Û–YPP Mš4‘‡~Ø6î§Ÿ~’FÉâÅ‹Ùah Z;0Ÿ;wŽbÀs ‹,-û³+ÿ µˆ†„'M¢@mé]¸† f®eÕ'½ÁWh¨È²eì_Ú/€Ú#$ àÖ`onn®mÜ_|aÆ}òÉ'¶qgΜ1ã´»pÅy+†„333mÓäçç›q¯½öšyl ë´&Lk®¹Ætþúë¯móèøððp[èõÕW_•æÍ›Ë… Øa@]ÑÂÚIX; £G‹LœH¼:uê$Ç·WTT$W]u•ÜrË-•¦×/ÑOŸ>Ýéu°êîìäí;@Åʼn´n­¯Á7ê«×õõN›6Í#Ës·~Üq !aptáÜ^¿~½mœ;!áòË:}ú´ÃðñãÇÍãK—.É!C¤iÓ¦¶Pð¦M›Ì4K–,‘ÒÒRóáÍŸÿüç€ß‹-’^½zÉÉ“'åÅ_”Ž;J÷îÝM/=zôÈÈH™={v¥ù4]þ±vŽ‹‹“®]»Ê­·Þ* ðpÝX‘uÝ©`´‹p…|$Tþû¿ÿÛ|9½¨\ª6--Í\‹ ±ë@ûóÏ?KÆ åóÏ?¯t''Wè޾TD„È“OúN};wîlêrÝu×Iqq±Ëóÿüs»uy³³­„õœögÏž•ððpùÛßþfßqÇæzŸõKïëq÷Ýw›i4¬ýé§ŸÊĉÍøW^yÅ|É===ÝaýöîÝk–«á>øÀ„‰5à«_w4ý®]»äŠ+®0wÜZ³fŒ5Êì§ò‹×®]kšÄÇÇKrr²Ùçå¯Sê!a¨¯°uhÙ²¥üáÏ>û¬Ò¶i÷Ž&Mšx¥ÓJ 틚ì J?~,’*Rt–ZæÍ7E:t nÚñV;ÐɱcÇlw½š0a‚´jÕÊL£!QàÀó¸ªë/rmÔ¨‘üïÿþo¥uy+$œ–&eËÙ·Ï7jº`Áó:­áÞ„„ó¸bM¬õ?~¼Ýx ëøòá]GõÓ»Žé㯾úÊávTœ~èСҾ}{ÛóçÎ3!áçŸÞ6îá‡.{_ä| !a€§·ÿÓg‚!aøŒ½Ï‰|6ˆ:(!A$"‚: ¸-\¸Ð\'Ù¹s§$&&Ê 7Ü`Æk7`äÈ™3gŽ´ÕV½ÿÇÙõ—-[¶HóæÍå/ù‹Ãuy+$üÒK–ÀQ‘oÔ4::Út¶Ò0®vîÛ·¯ÃzdggÛw%$\RRbº·iÓÆü»ºz[§‚0@ÓÎÂzq>%%%h^3!aøŒ/†‹¤=I€´l™Hh(u@p³vþŸÿùî7nœ¿{÷n3~Ñ¢E2bÄ™8q¢mg×_4«]„>ìp]Þ wï.òľQO UëkìׯŸ<ùä“¶AÃ×:^»2WWWBÂ,Öß{ï½N·ÅÑôz'³N:Ù —1oÞÞ7ê8fÌùíoëôùãÇ›îØ±c«­Ç /¼ Íš53Ïë~p6½ÞqK»ëx´S±5ôëhú””ÓØ:½®ãÑGµ=ÿØcÙÖ«?Ç/YYYœ$PÏ €§ý«µÈwñÔPš{Ó°và–-³œÃša½pá‚dddHIIIµÓfffJ^^žËËÎÍÍ•cÇŽIiii¥çtœ®÷Ò¥Kdà# ¨’‹"§18òˆdo9sDä\ƯCiÇPQþA‘¥ ,?, ¦¤PÀÅĈ D0€Ò ¬†új>hçÔ5D6ôù|ˆÈöI"û¦[º©f'[BÅ@082×r>hNN¦€¿Ñ¦¹aa"qqÔø (: ׬“pnªHNŠeÈLù>AäßoZÂÁÖ°ðÚH‘ÄPKxE¸È¦h‘=SEŽ-9ŸÅ±‡À“:Vdë8ê¸ð²?q¨àoæÎµ„ü32¨ ð€÷•‰ÉZ-²÷9KxXÃÖñŽÉ"Gç[:k(YÉLä°uq!ÇE ëzlk7a­C‘ùó©ào¢¢Dbb¨ 8@ýÉ?h SjçÕò‡ƒeHj!²¡¥ë¬†¤/æqLø»“i–}«Ç6€€¦!á¸8êø“íÛ-]„SR¨ 8€o9û}pt>µOäÄKHZCÂÖô—1"?~\ï»áøñã2cÆ éÖ­›ôë×O6oÞì±e—””ȰaÃdÁ‚wüî›.²¦ƒ¥£0€€¦ÝH§N¥€?éß_dÐ ê„„_¡]hÓž´„…µÃ°>®'÷Þ{¯ôîÝ[6nÜ(Ë–-“gŸ}V4h ¿üòK­—]\\l–5}útÛ¸7ÞxÃc˯Wºßtx4œ4‰:ÀefŠlÚ$rà€È¡C;¤¥‰¼ù¦Èÿ(Ò¨‘ÈÚµ"žŽ ŽzÖåpñ"ç)Ô!aÀל˰t^Zößõý/ÕyWÚ‹/Jxx¸Ìš5Ë6.99Y¦L™"çΫõò…„=¹üzs&ÝðÎZÍ1 ˜‘Ñ£©üËÁƒ–ØÝ»KÙßæ ¾=hPP;„„_ubƒÈ¿Z‹lй˜Wg«ýæ›oLˆ7!!Á+ËwG独¯óP7€ú1y²¥›0àΞµ³¡¡–€p\œÈ¶mÁÓIø­·~í$¼n„é$ Áƒ0àË´;íÚH‘uÝë$(¼víZéÚµ« ñ¶oß^zõê%ï¿ÿ¾,Z´Èü;??ßLg}|êÔ)‰‹‹3óÜz뭃ś7o–Ûn»Mš5k&·ß~»lݺµRHØSËן۶m3óþãÿ¨Û}õù²¡,bcE¢£©|ŸX»t ™?_¤(ˆ¿ÛÚ¿?á~@p!$ øºóY"w±t..ôꪎ9"±±±&Ä;iÒ$Þ³g¼ñÆfÜ/¿üb¦³>~ðÁ¥[·n2sæL‰ŽŽ–ÉÉɱ-o÷îÝrå•Wʘ1cdÓ¦MòÞ{ïIÇŽ+…„kºü¯¾úJ7n,Ç—7š±5ä\§ŠÏeˆ$†Šd&q¼AB;±FFRø¶ìlËqÚ¡ƒHz:õؾ]¤A‘”j„„PdU[‘퓼¾ªo¾ùÆ„l.\hç,Ä;`À),´—5¬ã4Xl5jÔ(¹þú른¸Ø6.//ÏL7mÚ´Z/ðàÁrÅWÈ… lãNžiذ¡y®W¯^òÃ?x¬“°úì³Ïäþûï—#FÈÛo¿mº ëtº Ý|_~¾%$œœL-à;´„_W¯¦ÕÑ õĉÔØ þ*u¬Èª¶^é&ìiùùù’]'ëÒp³†„?üðCï®ÈÚÍ™.Â@ÐÒpBu€ï˜:•.®š3G¤E ‘Bþ¬0B€¿²v²=<'hKpôèQY¹r¥ ËÆ%**J:tè —/_öÞŠ³V‹,-ûsêÄŽC ˆiÇÖùó©|ƒƒ[·&¸îªôtº!aÀŸi7áuÝEJƒ³EЪU«¤I“&¦spÓ¦MÍÏnݺÉÎ;½·ÒÂlKç­ã8þ€ סƒHl,u€oÐÀ:qÝÓ½»ÈOP@à"$ ø³3é–nÂßÅm JKK%##CRSSåøñãæ±÷VV$òù‘¤"ç28þ€ )òÒKÔ¾¡O‘I“¨ƒ;ôüÕ°Qµ&B€¿ÓnÂw)¦U×í˜l eçm§dÐ B™ð ‡‹4h ’’B-Ü‘–f©Û¾}Ô˜ þ®0[ä_­EÄR oÚ:Ndiƒ îÚ À^L !aø†×_§#nMµm+K¬JJJdذa²`ÁŠ€0€›1c†4hÐÀ 5’믿^yäùé§Ÿ(~•±„·Þr2MdS´¥¾GçS6>œ: þi`ýÉ'©CM<÷œ%(\ßëò×uèܹ³L:UvíÚU§ÛQ\\lÖ?}út„„|œõ‚ÄÄD™;w®Œ9Ò<0`Ž]Oˆ¬·Y3WˆœÚ+rúƒ;Cþ‘ìM"'÷”Õ0IäËK8XC§¸÷({S§ŠDGSÔ¯³gEÂÂD’’¨EMì+ûs¿A‘íõü½kë5ÀåË—›á/ù‹4mÚT®¾úê:m@H !agý€àøñãæ±^¨×N"!!!réÒ% „_•‰¤Ü%’ØPdi†Ú¸N+’µÚR[¨ 6V$2’: ~-Yb ççS‹šŠˆ¨ÿN̯ªgŸ}ÖÖ< ®€ÀBHÀ‰E‹I¯^½ääÉ“òâ‹/JÇŽ¥{÷î²råJó|||¼ôèÑC"##eöìÙvóîß¿_žyæéׯŸ´lÙRî»ï>III±=_XX(#FŒ˜˜» ¯Ž6l˜¼ùæ›¶qŽ> èÝ»·Ù65eÊ\Ö¯_o®?ê´mÚ´‘¼¼<3+×'wïÞm–3fÌÙ´i“™VÿŽBÂÞ¾Vj]þ¨Q£äÎ;ï”™3gšÀ±Ž{íµ×8H † 8a½0=nÜ8[—^½µŸŽ‹ŠŠ²y¿ûî;3îí·ßvº,½^ñâ¸Ò®^·n¤¥¥I£FäÃ?´›ÆúvôЋîÚÕcûöí¶ç ̇?ü°mÜO?ýd–µxñbvd08“n zZ@ÒïëjH8+‹Z ~è±§Ç`¹KE¨!íÆÜ¿ý­ßz P¯1j'Ýßþö·Ò¢E ùè£*M;tèPi×®i(`¥×7nl:ö:âèú¤rµ qqq±mœ†Œu:mfPž·¯•Z—¯c«¢¢"¹é¦›¤uëÖt€"$ à„õ´ÞâÎê‹/¾0ã>ùäÛ¸3gÎTº€m¥²³²²dΜ9fš¯¾úªÒóþÕ.]»v58*²~@ Û3a¹æšk$::Z¾þúkÛ4:><<\Î;g¿úê«Ò¼ys¹páBÀîoÞâP»³hד˜˜¹té’ÝøaÆɛ¾Öžç³A"úˆ”Òº ê’35 y˜›º žÌŸ/®×,¨Emé¥!=ŸÓÓëgýÖk€Ú  iÓ¦æß› ( ˆ……ɤI“*=§×ºz÷îm7®ªë“W]uU¥åh`¸ªNÂÞºVj]þ/¿üb7ÏøñãÍø'Np@ pÂÑ…ië…o½Ÿ•£ ß999òÐC™ ö×]w «ê4Û¶m«´žäädó\hh¨dggWz¾â­5´:dÈóa5¬·Ôi–,Yb>(èÔ©“üùÏŠýã­[ê~Ñ.ÏS§NµÓ*mÛ¶µuFñ ÙÉ"KX~êTF†%TXî{§@7NdÐ êà)ÚIxâÄúYwùk€ú¥øßüæ7æ ñ/^´›N¯:êô«ôzW«V­Ì¿«»>©a_}üüóÏÛ-£º°·®•: ¿öÚkfü7ß|à 5@HÀ‰Ú\øÖŽ×^{­9rÄ<^³fÃNÂzK@¶K—.æùØØØJÛQ1$¬6lØ`Æ-]ºÔ<Ö[üEDD˜[ Z·qÏž=A±¼u‹C¥Š5(¼nÝ:IKK“F9ìàRo´sðú¨²s8',Ôƒ¼êÚµ«éZìS¾O°tÎIá„€z¢Â%K¨êžÞJ¿ ¨…'EE‰ÄÄÔýz]=z´¹Þ·eË– ÛUé®Xz Lï°5a—¯O¶nÝZn¸á»ålÞ¼Ù£!aW·Åѵ>5hÐ sÇ0@Íp¢¦¾5XÚ®];éÛ·¯ìÛ·ÏLÛ³gO3Í»ï¾k·,½È¿víZóXo¨Óé-÷ò´Ñÿ±~@°lÙ2~ýûßÿ.×\s\yå•rèÐ!Ûtß~û­™N‡yóæ±œìåÊ-­’““Ís¡¡¡&Ìí3Š EVGˆ|>„“êQÛ¶" ÔuoÙ2KH8?ŸZxRjªHh¨¥«p]r>qâ„´hÑBnºé&sËê£>²Ý•ìôéÓfºxÀ\¿:|ø°Ë×'­]zG%7n4×Ï~÷»ß™qÚÜ  »Ë³Ëç3sÏîs?×uÝ÷ý{®§ûú[àK!MAM„"&LP‡ú²xqDëÖ¹ŽÍÔ¿êþYûOH ‰8ûì³³?+XŸŠ I}þ‰Ã>ø ºwïcÆTíÔûúë¯GÛ¶m³Z°:¿õhÄú?ãWÝgÓ€Q£rÝ„¡!-_QT±h‘ZÔ§I“"Š‹#îóaê0@ýh"RwÛ7*Džòýs‹eóÚˆÿÓ9âÙs#v–û @ê2:h:аz(.+S‹ú–º5§Z›þB•zÔ—?þ8Ö¯_Ð4@h(BÂÐlß1·$bVˆ-Ô @ŒÑ£‡:аR8½W/uh('æ‚ÂC‡F¬Y£4BÂPèR×à? x¬{ÄÆåêP@î¼3¢uku a•”DŒ¡ é©§rÿB@ú¾Ÿþª—šPø„„ •ñ¿ƒ#iñþbõ(0³gç:Œ®]«4œ.]"&LP‡†V^ž«{ªqqÄàÁ¹Q ˆ—-‹˜;7âÕWs¿; ëØ²ÅþNBÂ@Ó¶cKć˵9Ê^X;7â+"6•þóHÝliX,‰˜Ý+×AX@  -X /÷‡_h ee¹=—öÆæÍÓ¦EŒ1`@îópö‘‚Â#!a iK¡×ÿ.rÔõñ:GÌêñÔ ¹.·‹FE,¹6âo“"ÖÎË…ŠÙw[Ë"^¾*âáÖÏž±Å߯(T¥¥¹ÚüùjAÃX¼X÷êB“: ¯X¡“°NÂ…GHhÚt®»NÂëD¬›Ÿ;Þz4âÿM‰ø¿·åÂÁ)$œÂÂOôŒ˜^œ ?Ò.bnIÄ_¯ˆxó¡ˆ×Ø5IƒS½R;u.¦ƒ3@«èêúè£jAÃHl;tP fBÂÔ­jݸ!a€ý´ys.Ä9o^Ý­ùY!áäí·ßŽÖ­[Ç׿þõ*ç_yå•8묳¢S§Nqä‘GÆ…^˜ÝU c:4ºuë–u}íׯ_üéOÊÞ»ýöÛãÄO¬2>u0=î¸ãâñǯ<7uêÔìÜûï¿×]w]|ùË_޾}ûÆŒ3²÷'Mš”­Û³gÏlÍ]=÷ÜsqòÉ'g]gû÷ïsçÎÝãù*Öÿàƒbüøññµ¯}-{ÖŠizÿ¨£ŽÊêÓ»wïlì“O>™=ÿ•W^ŒŽ;Æ\óçÏßcíêæV\³¬¬,ïzÖtŸueÁ‚ÜþZº´pö|u!á»ï¾;;÷ôÓOï1~oŸ{ê–›j—æ}ôÑYMS»¶ûeíÚµ1zôè8ì°ÃbÑ¢Eu¶ßòùîä{­ê 0 Ú·o~øa^ãóùžV·ŸŸ}öÙ8餓²k¥û\¸pág†„÷õY(,BÂu ]»ˆ‰ën½½…„“oûÛÑ¢E‹(//Ï^¿üòËѪU«2dHÌ™3'fΜ™…ûR`rCjE»Ë˜r¼ÿþû³pì„ ⥗^ÊÞÿ÷ÿ÷(..®r×_=»ßÿþ÷•çn½õÖìÜ÷¿ÿý8õÔSãŽ;îÈB•)8ù›ßü&Ž=öØøíogŸ}v•޽/¾øbrÈ!ñƒü fÍšçœsNv½Ý;úV¬ŸÆ¥ ï7Þ%%%ѼyóX·n]Þ9rd6榛nÊ¥+W®Œ»îº+† ÷ÜsOöü}úôÉ‚œ»ú¬¹×|ï½÷ò®gM÷YW¦M‹HK £ŠêB©>mÚ´ùô>«ÞhMŸûŠ+bܸqÙz£FÊ>“¿þõ¯µÞ/ßýîwã[ßúV¶÷Ò}ÕÕ~Ë结ïµv·sçÎlÝ3Î8#ïÚçó=Ý}?§ûL×ùÞ÷¾—~Ów$…û« ïë³Px„„êÀ AcÇÖÝz5…„S˜r×÷Ï<óÌèÚµklÛ¶­rÌ;ï¼-[¶Ìºë&)ˆ˜æ<ÿüóÕ®YÛðˆ#bÇŽÙ¹éÓ§gçRWÔÔ‘5ùÛßþ–ûÝï~Wy©Sl…M›6e×ûÕ¯~UåšëŸrÊ)•ÓrLç*:̦Ÿ»«“‚Õ©nîî¡Ê|ê™Ï}Ö…Ûn‹èÛ·°ö{ÅþLŸíÏþóøêW¿:t¨ÒqºB>Ÿ{êÒ›Ö{àj5o×Ïᢋ.ªõuóýkúîä{­Ý¥0sZ÷G?úQ޵ߗp ú¦nØÛ·o¯œ“ÂîiÌ5×\S'Ï@ᨣFE ZwëÕN]>Óû~øaÖ´uëÖYpxwŒã?> ó¦N¢©nE°wwµ ¯_¿¾òÜ3Ï<“ûÃþPyîÿøGv.u®¸þé§Ÿ?üpåѽ{÷¬ûï®*Öë­·*Ï•••eçn¹å–ìõÞB©»òš5kbâĉÕ;k çSÏ|ï³.Œ1|xaí÷ŠýÙ¾}ûhÛ¶möûÿüÏÿì1.ßÏ}÷ð¾ì—µk×Öúºù|Ž5}wjs­Ý¥k¦ëüë¿þkµï§ý˜j³eË–Z}Ow îsŸÛc?§Àðî„÷çY(+$¼uëÖ>|x\¶lYåùdsw•Bº)|xñÅg¯O=õÔ=‡»úõ¯½¿aÆìuêrzÁdç&Ož\9n_BÂ×oÙ²eüýïßë³ç¾:ujöúÅ_Ì^§°êîáÜŠðÂ… «¬¿ûÜê®™O="$¼xqn_-ZTXû}÷prî¹çFóæÍãÏþs•±ù|„÷w¿Ôõ~«é»“ﵪ3eÊ”líË«i]]H8ŸïéîÏÔ¹sçøâ¿XeígŸ}vðþ> …EH |ôQ®ãë´iu³^Esúôé1þü˜={vüKÝr[µjwîÖZöñÇÏÆ7. 8¾ûî»qá…faâÔe4IaÙfÍšeØ ÄÊ•+³Pa V¼_Ñ öé§ŸÎBŸézuþË_þ’…HS7ÞGy$ÊÊʲ@iêB»«|B›éùÒZ£GÎ:¥nÞ¼9ºví'žxb,Y²$»þýûgsî¾ûî*ëï>·¼¼|kæSφ §ý”öUê(\Hª §uèÐ!¾ô¥/eŸ}…|>÷êBÂû³_êz¿ÕôÝÉ÷ZÕI!ßSN9%»ÞE]”íßô/¤ûùÅ/~±GH8ŸïéîÏtÝu×e¯Ï9çœlNúN~ãßÈÎ]sÍ5ûT7 Ÿ0@9ᄈqãêf­ŠfÅѺuë, 8räÈ*„wõàƒF§N*çôìÙ3 ïî*…g»uëV9¦K—.•á¿;wf]rS9éZ¯¼òJ6î÷¿ÿ}åûNRàù˜cŽ©¼~ûöíã'?ùI•{Ì7|{õÕWgóÓù™3gfÓN¯{õê/¼ðBtLáζÞÕîs«»fMõlˆpÚOŸ~짺prÿý÷gçS{W5}îÕ…„÷g¿ÔÇ~ÛÛw'ßk}–mÛ¶eôvíÚes[´h‘ýlÛ¶mæ---­›Ï÷t÷gÚ´iSÖm8}ÒùãŽ;.ëR^]'áý} ‡0@¹êªˆÓN;ð÷ñæ›oÆúõë÷:æ­·ÞŠ 6TûÞû￟… ëSº¿tŸ)ð¸?>ùä“,@™º±&Û·o¯\MçÓûÕ]g÷¹ûSÏú2xpĘ1Mç;²¯Ÿûþî—ºÚo5}wö÷ZiNšû§?ýé3÷íþ|OSWàµk׺Ðð„„êÈ´i;G”—«û/í£"&MR  ö„„êÈÊ•EEK–¨û¯´4·Ÿ,P  ö„„êP¯^·Ý¦쿇Šh×.bófµjOH 1dˆ:°ÿFŽŒäˆÛnS v„„ }ôQ.$|ì±#GªP;BÂP zôˆ8㌈¾}Õ¨!a(PC†D|ûÛ¹ŽÂeeêäOH ÔèÑýûçBÂO=¥@þ„„ @Ñ¥KDçÎãÆ©?!a(P=”ë"|æ™C‡ªÕ{÷ÝwcáÂ…±jÕª(//W2BÂP -Ê…„/½4¢o_õàŸvìØ·ÞzktìØñÓ=R-Z´¨üù¥/})Þxã EÚÅ 7ÜÕgË–-•çvîÜçw^uÔQ±aÃEš!a(Pk׿B·ÜQ\±y³šóï|' ½^qÅñúë¯g¡áuëÖÅO<?þñ…„wS]Høæ›oŽV­ZÅâÅ‹k½ÞÒ¥K³5…‹€B&$ ¬]»ˆ‰s!á Ôƒˆ‡~8 ¼Ž;V1ò´{Høé§ŸŽæÍ›ÇäÉ“÷i½{ï½7[oÕªUŠ ,!a(`}ûF¤,hÏž·Ý¦D 0 Ú·o~øa^ã_yå•8묳¢S§Nqä‘GÆ…^o¿ývåûS§NãŽ;.Þÿý¸îºëâË_þò§û®o̘1#{Ò¤Iѯ_¿O÷`ϸýöÛ«¬]1wýúõñóŸÿ<Ž:ê¨8úè£cܸq±sçÎ*÷på•WÆÀ£cÇŽqÁÄüùó÷¸×Šõ>øàƒ?~||ík_‹¯ýë1eÊ”ìýË.»,N?ýô¬sò®Rè÷øãϺ)Wg×p겜îa̘1ŸY¯½ÝkºÇôœi½Þ½{g÷ûä“OÖê9‚0°Áƒ#FŽŒ1"÷“ƒ[ Þ¶nÝ:Î8㌼ƿüòËѪU«2dHÌ™3'fΜýû÷Ã;,6lعõÖ[³Àë÷¿ÿý8õÔSãŽ;îÈ‚¹‡zhüæ7¿‰c=6~ûÛ߯ÙgŸ½G÷ÜŠ¹çœsNvO7Þxc&Nçn¹å–ÊqwÝuW 6,î¹çžìúôé“wW±Þ~ðƒ,€›Ö+))ɺþ¦ðý÷ߟ½?oÞ¼*óÒÚßúÖ·>³!á>NÏÒI'ÅÖ­[«[Ó½¦ ðÈO¿Œi½›nº)ë*¼råÊZ='@C€6jTÄi§åº÷ꥻիWgáÔýèGy?óÌ3£k×®±mÛ¶Êsï¼óN´lÙ2ëx›TsGŒQÙ¡wúôéÙ¹Ôµ8k“¿ýíoÙ¹ßýîw•kUÌMaâ åååñ¥/}):wî\¥›ð®Rˆv÷Àñ®ërÊ)±yóæìÜK/½”KaÜ7F›6mâ‡?üa•çiÑ¢E<øàƒŸY‡Šððáóù»vR®Iu÷šî¥ºûÏ÷9‚0°±c#N8!"5N-*Šøè#59˜½õÖ[y‡„+ºJIóÝ 80Ž?þøì÷Š`îúõë+ßæ™g²søÃ*ÏýãÿØ#\1÷½÷Þ«²þE]”÷Ýw«œOâ5kÖÄĉ³÷Ÿþù*ïW¬—ž³BYYY•ÎÄ_|q´k×.6mÚ”½¾ùæ›ãóŸÿ||òÉ'ŸY‹Šðõ×__Ù¸&{»×šBÂ5='@C€6aBDçÎ)(Q\1¾šÌR§ßC9$¾ýío×8víÚµY@õšk®Ùã½aÆE§N²ß« úV„„çÌ™Sy®6!áèMç_{íµìõºuëâ’K.ÉBËݺu‹~ýúeï?÷ÜsUæU·Þ‡~X%$ÿùÏWÞÃøñã«Üoê~œ´éý^½zÅ /¼…™S˜8›÷v/Õ…„“Aƒe!ß²²²ëU]H8™1cFvguVò­Í½^}õÕѾ}ûlÜÌ™3k5 ! @ëÞ=bâÄÜï;GL™¢&äìܹ3Þxã,ÔûÚk¯e|?Ë›o¾ëׯ¯Óëïêݾ}{ÖÍxëÖ­ÕŽMï¯^½ºòuêˆ\ZZš=þH]z/¾øâz©k¾÷úÉ'ŸdçÓûõõœûJH Ü AW]•û}èÐÜ… ºÎ¿ áücvÝùóçû>ƒ0¸Áƒ#FÊý>iR®³0‚>ûì³£gÏžºóì…0¸Ñ£ÿÙ=xñ∢¢ˆåËÕ…ïã?Žõë×7xXwÆ ±qãFÀ^ @;6bÀ€¾îÒ%â¶ÛÔølBÂPà&MŠèÜùŸ¯‡4H]€Ï&$ nö숢]þŸ½)Sr¯×®=0÷sà 7|zý¢Ø²eKå¹;wÆyçGuTlذÁ‡˜0¸Å‹s¡à²²Üëô³¸8×aø@¨.$|óÍ7G«V­>½×ŵ^oéÒ¥ÙšC¸8}v+VDÌñê«Ë–95»|Õò&$ .u N!á¥Kÿynðàˆ!CÌýì~úé§£yóæ1yòä}ZïÞ{ïÍÖ[µjU“ùÌÊË#æÍ‹?>âÜs#úöhÝ:÷9:µ=RP ¶„„ HƒSè´ÂwæB§¢ùî®!á7Þx#:vìcÆŒ©vì+¯¼W^ye 80wÁÄüùó+ߟ:ujuÔQÙz½{÷ŽãŽ;.ž|òÉçUرcGL˜0! mÛ¶c=6-ZtÀ>§ä¾êªˆ.]ráÎ"®¸"×õyöìˆ%Ktvè$ 4 !ahzôˆ¸ï¾¾.+ˇ§Liø{© ðÁÑ¿ÿ8餓bëÖ­ÕŽ½ë®»bذaqÏ=÷ÄÌ™3£OŸ>ѯ_¿Ê÷SxäÈ‘Ùz7ÝtSÖUxåÊ•5ΫðÄOd]Œ'MšóæÍ‹Ûo¿=–€¶«)ø`vþ»ßýnÖ•¸!mØ1xpD‡>jPX„„ HáÔ9xW›7GtîœëdÛ*B›?½#FD³fÍâ‘G©vìºuëâ’K.‰Ö­[G·nÝ¢_¿~ÙÜçž{®rLu!á|æU¸ë®»²ŽÆÍ›7+¯¼2>þøãz¯ÁÚµDôê±r¥ý @á€F {öÜóüر=z¤Ž» w/!á-[¶Ä'Ÿ|'žxbæ]´hÑc?þø8âˆ#bÅŠÙëY³fåÕI8Ÿy»J¡âË.», ,ÿ⿨×çO„S8xР\X ‘04Ó¦E´k·çùRMç§Li¸{Ù5$œ¼ûî»qä‘GÆá‡¥¥¥•ãV¯^»å–[*ÏU„}.\XynêÔ©Ù¹_|±Vóª3xðà8æ˜cêíÙS»¤$.+³/(\BÂÐÌ›QTñÑG{¾wÕU¹.à ÕMx÷pòÒK/E›6m¢OŸ>±qãÆì\ù§7Ôµk׬Óð’%KbΜ9Ñ¿ÿlîÝwß]97…Œ›7o£GÎænÞ¼9¯yÉ7ÞS¦L‰¿ÿýïñ׿þ5:vìÆ «·gOµîÜ9båJ{€Â&$ ÀÒ¥¹ðòå{¾×ÐÝ„« '3f̈fÍšÅYg•„“x ü¦ñ½zõŠ^x!JJJ²qÓ§O¯œ{õÕWGûöí³q3gÎÌ{ÞOúÓÊyéçE]kÖ¬©—çNAíâ∧ž²(|BÂÐlØ § juR‡Û=ªï4| mß¾=V¯^]ùzÇŽQZZ;wî¬2î“O>ÉΧ÷k3/½Nç·nÝZoÏêÚ½{Ĉö"ƒ04©‹ígu N!Ö¾üruª!ì²2µ q€F¢o߈ >ûýÙ³sAâô“º³dI®®=¦4BÂÐH 1jÔÞÇŒѹsÄÊ•êUÊË# Š()Éý…04)u¨oee'œ ôQaÝ[u!á /¼0;7kÖ¬ìõ‹/¾‡rHüà?ÈÎsÎ9Q\\\¥so äŽ92›wÓM7eÝ}W¦vÕ{¹æ|ŽO:館ºukµcïºë®6lXÜsÏ=1sæÌèÓ§Oôë×/¯ëÖ4€ü @#’‚«cǪCCH]„[·Ž¸öÚº¯ŠÀî²e˲îÀ?ûÙÏ¢eË–Y×àíÛ·gcÎ<óÌ8úè£+çlÚ´) ÿêW¿ª²V 覵v ïíšÃ‡6mÚÄÛo¿÷ý¦Àïî×È÷ºÕÍ ?BÂЈ 1r¤:4”‰#Š‹#–,)œ{ªìV)üûÓŸþ4Ö¯_Ÿ½¿cÇŽhÕªUœ~úéñðÃWÝ»wϺô!á믿¾²pMÊËËcÍš5ŸÖpb6çùçŸÏûº{› @~„„ I]mKJÔ¡¡”—G 1xpáÜSE`÷ÑG×_=¶nÝZåýµk×fïwìØ1¾ò•¯T9Î?ÿü*ckÞ¼ysŒ1"š5k<òHµc×­[—\rI´nÝ:ºuëýúõËæ>÷Üs5^7Ÿ¹äGH‘;ïŒèÞ]Rê"œº Ïž]÷SØ]½zuµïoß¾=9ä8ï¼ój\«¶!á-[¶Ä'Ÿ|'žxbä]´hÑc?þø8âˆ#bÅŠÙëY³fåÝI8Ÿ¹äGH‘yó"ŠŠ">úH-ÒUWEôèQu¯)$œœzê©Ñ²eËøûßÿ¾×µ¦Nš­õâ‹/æuÍNÞ}÷Ý8òÈ#ãðÃÒÒÒÊqéžÒ¸[n¹¥ò\EÐwáÂ…{½n¾sÈ04"Ë—çBÂ+WªECJáàÔÁyĈ/ù„„ÿò—¿DóæÍ£¤¤$yä‘(++‹?ÿùÏ1cÆŒ*ãRØ7=ztlܸ1ÊËË÷zÍŠpòÒK/E›6m¢OŸ>ÙÜ$ÍïÚµkÖixÉ’%1gΜèß¿6÷î»ïÞëuó @~„„ ‘I!áÔQ˜†•j^\ñÔSö>ò 'óçÏcŽ9&›ŽöíÛÇO~ò“=Æ]}õÕÙ{iÌÌ™3÷zÍ]CÂI 7kÖ,Î:ë¬Ê€ñ<…}Óø^½zÅ /¼…•Ó¸éÓ§ïõºùÎ ~ и¤Ž¶÷ݧÂUWEtîܸ:9¯_¿>Þ|óÍØ¹sçgŽùä“O¢´´4vìØQ'×ܾ}{•sZ7­¿û=TwÝ|ç°wBÂÐÈ qùåêp ¤f¹%%½zE”•©…KH™Ñ£#†W‡eÆ\HxРˆµkÕ€Â$$ ÌwFôè¡R  ¯\©!ahd}4¢¨(¢¼\-¤ÔQxðàˆrŸ !ahd–/Ï…„—.U‹-µÇh×.bȈ%KԀ $ LYYDqqÄC©E¡Hí¡Csáí’’ˆiÓr†à@€F¨gψÛnS‡B“ÂÂW]Ñ¥K.0| ¹×÷Ý1{v®ÓðŠsçF¼újIJeކ8¶l±7€ƒ04BƒGŒ¡…ª¼YÐvW÷Ýw_6oÅŠUΟ~úéqÎ9çä½ÎK/½­ZµŠï}ï{1wîÜlì—¿üåjCÂ/¿ür6vÈ!1gΜlÍþýûÇa‡R æ]Ƥ€ðý÷ßO>ùdL˜0!»4VBÂÐ,YQT”ûYߪ ï.wÓ˜U«VUž+++˸ÿñÿQy®´´4š5k³fÍÊ{(N·oß^y.~Ó¸k®¹¦Êü3Ï<3ºvíÛ¶m«<÷Î;ïDË–-³ŽÅÉgœ‘Í}þùçm$š !ah"zôÈu®o{ ———Çš5kbâĉÕoS÷ßÔõ·Â¸qãâðÃÏæå»Îç>÷¹5jT•ñ)0¼{'á;wFëÖ­÷› 80Ž?þøØ±cG\N…ÓïÐT @1fLD÷î)`[¿×©.$¼nݺ¸ä’K²Pn·nÝ¢_¿~Ù˜çž{®ÊÜÇ{¬2ô›B¼=zôˆ_þò—y¯³~ýúìõ¯~õ«*ëV^»vmµÝ…“aÆE§N*Çœþù6MŠ04‹GE,YR¿×©.$œºòqıbÅŠìõ¬Y³ªí$¼uëÖøÂ¾—]vYüïÿþo6æµ×^Ë{7f¯SGâ]UÞ¶m[´hÑ".½ôÒ=ž¡¤¤$z÷îÍ;äC²°24%BÂЄ¤N£G×ï5v ¯^½:{}Ë-·TŽ©÷.\¸pù?ýéO³.¾^xa|ó›ß¬<Ÿï:;wŽ/~ñ‹UÖ|öÙg÷ ' ȺïêÿøGzè¡qñÅg¯O=õÔl¾jÐd @2aBD»v›7×ß5Þ~ûí,T{ýõ×g¯ËËË£k×®qâ‰'Æ’%KbΜ9Ñ¿ÿlÌÝwß½Çü?ÿùÏÙ{é˜4iRåù|×¹îºë²sçœsN<ýôÓñ›ßü&¾ñod箹æš*×züñdzóãÆ‹?ü0 8§prqqq,_¾<“ÈÍš5ËÅ ,ˆ•+WÆäÉ“³à14VBÂЄ¬YѺuÄ.ÙÛ:—¼)x{Ï=÷Tž{ಀo:ß«W¯xá…¢¤¤$ ßNŸ>½Êü;wÆÑGmÚ´É‚»»ÊgM›6Å\KãŽ;î¸xã7ªí$œ<øàƒYçâŠ`rÏž=ã™gž©2&’»uëV9¦K—.1cÆ  €FKHš˜áÃ#zõJyënÍÕ«WgAÜt¤N¼-[¶Ì:îîjûöíÙ¸ ;vìˆÒÒÒ,\ù®SVVk×®Í{Ý7ß|3Ö¯_¿×1o½õVlذÁ& Ñ€&fùòˆââˆG­»5÷»ßUvÙýÜç>W¥‹0Px„„  1"¢gψ͛ëf½÷Þ{/žyæ™X¸paÖÁ(lBÂЭYÑ®]ÄØ±j#!ah¢î¼3¢¸8bÑ"µ€ƒ04a§Ñ¥KDi©ZÀÁDHš°²²ˆ^½"ºwX²D=à`!$ M\ §ŽÂÅÅW\ñÄO=ñê«Ë–9êãØ²Å¾àÀ€ƒÄĉ¹®ÂEEŽú>RP$!a8È|øaÄܹ: ë$ @S&$ MŒ041BÂÐÄ @#$ MŒ041BÂÐÄ @#$ MŒ041BÂÐÄü»/¬jÓüXIEND®B`‚eclipse-collections-11.0.0.M3/docs/containerCompare.png000066400000000000000000001511541407344533200227520ustar00rootroot00000000000000‰PNG  IHDRÃÔyÀ.HsRGB®Îé pHYs  šœtIMEà  q ŸtEXtCommentCreated with GIMPW IDATxÚìw|ÅûÇ?»Wr¹TIè½w $t^¤þ@AQ”¢"ÒDªˆ€"¢HGi©Azï=$”ôv}w~„Ýïmî’PŸ÷ëÅ Ø›™yæ3³ÏÌpŒ1‚ ‚ ‚xá©‚ ‚ ÃAAAb˜ ‚ ‚ H AA‰a‚ ‚ ‚ 1LAA$† ‚ ‚ ‚Ä0AAA&‚ ‚ ÃAAAb˜ ‚ ‚ ^nÔÎ.šL&0ƨt‚xiaŒA¯×?·ôDQ„ÉdÇqTøA¯X¡ÓéÀó|öÅð‰'`2™¨ô‚xi­Zµzné™L&8pjµš Ÿ âÂjµ",, :.ûbX­V“Á'â¥æyÏÐrG¶‘ âäiÞê§ÝœÕ´2AÄóÆ`0¼pWŽã2a ‚ ^²ëö›¥¶Ùl¨[·.4 •(A/»wï~á6I§Ó!00^AÄKLDDÌfóSÃe9åËql6•&A„´À˜ âõü‚ ‚ ÃAAAb˜ ‚ ‚ H AA‰a‚ ‚xíɸ0’J>½Œ¨ÜÑ Ãg>;÷’a%âyØŽãpújÚ|¼ço>Çq¯¬Ð˯|r‡G.£ÏøÕˆIH•¯]ºõ­?þ'.G¾°}ÀI”¹…ŽR"rep"""°nÝ:Lœ8 PüÆq """ðÏ?ÿ 99¢(¢téÒ C­Zµ Õje#Ž@‡t|||УG*t‚ œ²qï9ð<Qt°T(êë…úÕJ‚ç³/ÎSHH6Àfeuþæ úzÞªX‹Æu%Ê…ã8ÜyË·áìPñoU*ŠÚ•Š¡ —›l¯sJL’I©&ˆvb3)ÍŒ„d#¬61ßûû<ÛÿŸã8Lùm7Öî:‹¥{¢^ÕÔ@ÃDþqìØ1Ì›7£G–Űd”®_¿Ž#F`ÇŽ¨]»6ªU«ذa>ÿüsŒ93fÌ€F£AJJ >ÿüs\¼x 4P9I@“&Â÷&àËŸv L±‚¨\Ìáw‹M@ýê%s&"á(m66›ˆ^úWb²‚ã8lÜw3—ïCLB*ú´y <ÇÁb0é×ÝÐë4øí«(îï;¡Íkù%òÃ]ÆõÈ îw½‹â÷4£µ .Z’7‰a"¿+ŽZ-&{#•ššŠþýû#""?ýôúõë'Ï‹¢ˆ`É’%0 ðòòc ...à8ÿý74üi‹1F§‘…ðt.T.†‰CZ:Ìrr\Þˆ´ZŠbßÏC¡×i_ !|âò}Œÿy'BÊa쀦(RÐìÉïI©&ÌYµb“s-†_4Nßžc×ѽYM1¤*Z5¨¤Xì“„EŽ"*& I©&-ä:•‹£oÛ¨xΩ¸’ÒY¾í8Ü\µ©]Fžµ÷©•Âê´ùî‰ ÅÊí'pöÚÄ%¥A­VÁ¿€;ªGÏ–µŸIÔ]¼õ˶ǃ¸X¬Šûy¡UP%ù¹íû†k÷b°æïÓ¸ó VA„¯·z·ªƒºUKàvT¾]ù/î>HÇq˜±|tZ5D‘aÆð¶pÓ»àÈù;Ø{ì>ìÑ…¼Ýe³÷Ä ì8|ãSaDòvC‘BÙ» \´j9ÜÍûqøuÓø¢’ fü²1Q±ÉpÕjPÂßcú†*ÂÀ®£W±íà%Ä$¦A§Õ l1 é„Â=¨¾ÐnDžÍÌÜ»wÑÑÑ8p ´Z­Ó•¼4B&"¿lPfƒté·ßþúã~ÚGñ)Ô¾z4¯…«÷bÐüƒEYÆm0Ypèì<ŒO±‹¸pënDÆbâÏcÍî³èZƒÚ×ãøT|8s“bG A1êû­ˆMLÃðnÁÿ-кAEŒ[¸¢ø?Qz÷AÞŸº±‰©Ô±>f o‹µÊ`ÚÒ0íA§;\Ø?ãé«Ñày­T~jYÙÇõÍ’=˜µâ_T)ë‡!Ñ·mS˜òÛ¬Ýu&ÓtŸöNþ9vïOÛ½N‹Q}šàë÷[ÁÇSQs·bó¿BøêÝÇ=w+Öí9‡ž-kcp‡ú(â뉾ÿÀ¡3·Áóª—/'"¿\ñ‚¨RÆ•ËøA«MŸ=¾ÿ8 GÎßÙjSá5»Ï`äœ-°Øôm€ÿëPþ>øsÏ9|ôíf˜ÌV¹\RÒÌØê&þ»xïO["¾^èß¶.ŠûyaëÁKøtÎE9†º„É¿îFíÊÅ0ap |Ø="c?t™v´xE é9"ϸ}û6 L™2¹¾‰‰‰>Ãîîî²Ï1A„3bÓpäÜÅ5Ï#ÐnñÜ¥Û°jÇ)”,ìU_÷–¯· ªˆu»Ï=MÕÁ™9ÓiÕønõT+ë³úË׫•-Œ÷§­Ç€Ikqrå'éBïö#>{g@@å‪eýÑ&¸Šü91à»ÕûQ¤æî$»”/Qz5F~¿­+¢Z¹"N³i4Y`¶ÚÀÙž‘ä8K¶ÃúÎaá]д^ù·æõ+`Ò¯»0zÞ64«_…¼Ý³ýNcxŸŠÙ«ö£MƒJ÷Íåß¾ú¿æH5š1aÑß®Y ~>`ŒaþšCˆŽMÆéÕŸÊÏÞ$ ZV„›ÞeŠÄðî ý8·¢âÐÿíºðÏðœé{f(ײ=³–ïC‹ÀŠøvD;ù·fõ+ Z9Œ™· ÿ=^-ëÈý–ZÅcìÛ1eXkth\MòJî=L@ä£D”ð÷†M°ëè5L j__Ž»nÕä"ñ A3ÃDža6›nnn9¾—1†&Mš aÆhÔ¨5j„:uêàøñãT°Ad.æÜŠŠÃ’-ÇVl?«MíËÁÓ·pÿqæŒì _KxsèÑ¢V®fðl‚ˆ:•ŠaÍ´wå8 ˜Ÿ xºB§UãNt|º}´ØÀ<ŠKUØ=•Š—EÓ£ølÜw]›ÕtðÕ ®UKúââíG™æGD1=:—ìÍuY¬6Ìýã Bj—AH²ûÀ·ª„‚^z¿t?gï…ãpüR$.ßy„íë9üÞ³Em¸ºhpëIùÜœˆm‡.cdŸ&²µ”‡Š¢l±‚ò5iK7éý>­oYµã$8ŽÃçýÃï Ú7ªŠ"=pó~œâºÈ†u –…°ôÛWƒšáîÃܼ—NdOòÁÁh¶:”Í ¿ÐÌ0‘÷S.FÂÇaâĉP©þgm6J—.MJDæb@Ý*%0~p ‡Ù[ia›ÈÒŒ€Å|½œÚ©ÜØ-‘1T)íµÊq\×f51cé^Ä'Pº¨ª•+Œæ0áçˆ|”ˆ¾mß‚^§UÌÞ}W­iF .Ýz¨HËh¶B¯Ó`Áº#èѼvž•_\¢.Z5<Ý\8Çq(U¤ÊóÁŒå{Ñ&¸rŽâ~ŸZ…„’Ròužãœf¬Û}AÕK!6! ZµJžÑÎèçœÛwd¶Ø`DLö!¶÷V©x4­W¿ï<Ïû5…–—D4P­œ¿NºG£VÁl`0YZ]šÖÀ±‹‘è3þw|Þ75J9ÜG&Þ¼¼Ò;™7näêþž={f:²'ƒBDfð<*S;ÁD†˜ÄÔ|Ù —ejÒß½ôéÛ™=ù]«Qã‡Ñ1î§XÿÏ9¬Ú~½[×AïÖoÁË]' 0­F…EÊBÞ^ªT<:‡UÏ4/µJ¾/:&%²±uÚÃøäôbÉt' <ÇÁ`²æªpô:->ÿa»Ã )Ïq(áï&o¥/H¼û0<ŸžV^b4[‘j´8íO¤¿U*f‹ÍIßãL„3E=bŒ¡yýŠøy¬íÂÇßý…²Å|0¬k0Õ.M}‰aâM£råôYƒ£GæJÄZ­V§[«‘1!âYà8n:—¼`38ˆ7)4p€ì¶Àƒ›«sGuăØdDœ¿‹Ëöâè…{˜7ª#¼=\!>ÙNíë¡­X­d¦Ï’Yþ]´O¶‰õ»1ÙÃ^î®é¢]d™4DÆ2ÍOVˆŒ!Å`ƆYýà’ÉÖpÒsHÏŸ×æ^«QA§UCR°ÎÊM£R¡R)_ð\îêc u«–ÄÖïáÚÝlØ{ïO_IïµB÷æ5ó\àù0 ¦" rÛ¹dì<==ѯ_?ìܹ§N")‚ ^{åãé ŽãŸ”æpœ¯ýß9‹ˆIHUÜ/ŽãȨT<Šùz*D)ä‰.a5ðÍ­qåÎcÜŒJ÷?õõvƒ(2$¦åÝ%2þÉT—?‰ûƒî ! ›þ=«Mpx®Œÿ/àá }ÇŒtw%7"cqùöc´mT%Çåãíá 0†¸Ä´§>OÑBžbÒ2}¹yGµú‰R &§ñ­Ü~ÁµÊäèØng‚XÅó¨RÆã5C—°ˆ8G $†‰×Æ ƒÜð###ÓGÝOvz [·nÝ8uêá A@tt4æÌ™ƒû÷ïS¡‘G*ý“¶´(Nþ#ut<‡’E ÀÕEƒ?vQÜjDì>z5W3ŵ ;Ž\ÁŠðò¢. }A_Ôã$ôÖ£èå„#¬6¥ØôñtSÌòV(é‹FµK#üÐeÅ¡F³‚ :Í«t­n•â(ê뉎ßÀ‚?ÃhV~þ7[møçØuüµÿbºöÔÃßÇ7îÇáÚÝÇʰöüwz žøÁæ¤Ï¨_­$Jñq(s ƒÉ"‹ÅRE  €§+v»®pÉ`Œázd î?N”ŸÑE£NÞ>-+´Ê+Àæ'Ïl_f[ö_Çq¨S±h®ê€Í& 9ÍäàÛ\ÀÓ•Úå+¹IÙBE 2žžž°Ùlؼy3êׯ___ÅÆííÛ·Ç‚ ðá‡"00;w†¿¿?DQÄãÇqàÀÔ®]ƒ¦B%âíàÂ͇˜²xw_N bÉBèѼÔjÚWƹëðãÚÃx›oW0ÆpûA<Î\F‹ JOt5s¦ìœ]… ŠhP³4þ9~ÏÜF·¦5qöz4N^¾äTï!‡ýãïÓ8wýº6­Â=p÷a~Û| % @ùâåpïwi€á³6aÄì¿P5+M±ùß ¸~/sFv€_÷L(ÇqX=¥7>ž½sVÀÈ8.èW“w¢pín ¾û´½|ß²‰=Ñgüj|öC8Ö*«áÔ•(œ¸‰}'obΧPàIyqç´,˜q^²°7zµªoWíGtL2Ú‡TE!o7Ä%¥áŸc7ù8?í Vßêˆá³6a̼m¨P²D–>K~ôü]LÜÅýÒÝ>ÚWÆæý1kÅ¿¨\Ú“÷l7Ó¼}Ò+·¢â0{å~\¸ñÃjÀbµáX»û,þ¯S}´ ªô¿…u`Yˆ|åÿ㓘¶ôôÖ£cãjàxá‡.cÇá+x¯KP®g› ÃÄKÇqðññÁ?þ¨X±"6mÚ¤˜‘ å|€°°0̘1+V¬ã ÄÏ?ÿŒöíÛC¥J_µ¬R©`±XÀ££˜ ‚È… yÂ`²âæý8ܸëð{“·Ê¢[³šéÇ÷ò<¾Ø ¥ŠÀÄE» ×i â9tmZãgµïÑiÕ0š­Š™^µŠ‡Í&@ÈàF ˆ åŠÄçýÂ0ué?øì‡m`"P®DAüüe7T*å+‡íؤnEÅa̼mÐjT0š­èÞ¼&>èÞPqR\£Úe°bò;X³ë,¾ùmÜ\Ó¿¾*à†÷:Â×Û-K;̓»Þ?ŒéŒÓ×¢0tÚ… Ú%Ó>h_wÙnòvÃÊɽ°hãQü¾ó 6í»ƒÉŠÚe°vÚ»¨RÆ_1ƒíªUÃh¶)Ü\ž<“(ŠŠü é„ % ayøI|úýhÕ*X¬‚k•F¿6Ðiÿw¼qÚ¥±d| ˜´‡ÎÞ†Í& ¤NYL~¿•bf:¨F)Œí†ñ‹þFÄù»° "F÷ ý_Þ,VY´Jî ßÚþ9‡…ŽàŸã7 ˆ"Šùzaá]Ь~…/¶‹F S†g±NƒÉáÉŒ¶—Ý›×ÄðY›°õÀ%@ªÑ‚ù£;¢É[åÈ_øUÑ8̉ÎÑ£Ga2™`³ÙаaC¸ºÒt?ñÄø ,K–u"ãâƒÁWWWÑœ1\FŸ;‚pÆîÝ»¡Ñh š5köÜÒ58|ø0Ôj5t:‚‚‚èe¼@r³Îþ£Ù žãà¢Ug§3›$…± "FÏÛ O=& nñD‹°ÚDÙGÕ™­K#È"0cºÿm¶ØŽsˆ3'ec± °ÙDèuš§†D«µŠ—·ZË,Y•›³ðV›A¡U«ežYXƒÉ Ž\]4Y„c0˜¬Ðë´9ʇɒ~0‰‹“2ÍnNûº'îöåL»!½X"""`6›aµZNç4Í 9êHT*\]]³là ‡^¯WüßÙþ‘$‚ ‚ÈÑLN.÷3—ì3‘•›”éömOf UO6ªuofa2ÛK—ã8è2ä3;Ï1ŒV­‚V­ÊÔngÌŸ«Köò—ÙµÌÂkÔ*h zjÜŒ1áž1œÜ¿è´Ù·t.‹PvŸÅÙ ÉÙ`ƒúµWZ@GäªóÉA&£@ÄË&¢óÊ.åFHç$í¼ÈçÓâxž6;«¸sÓ¿ä6Íüzÿ‰a‚ ‚x½E5O=¼ÝuTñŠCnA‘CxžÃÈÞóåT;‚ H AÄK Çqp×§ŸjG‹¤âÜRAij c‚ H AA‰a‚ ‚ ‚x¥Å°(Šò‚ ˆ— ÆØ ±Oöé:9«ˆ ‚xÉÈ®Ívº€®\¹r¢(Ò¹A¼TT­Z<Ï?wAªÕjå´¥ãÄ ‚ ˆ——òåËgKÏ:ÇL«b ‚xYyÚq¨/2/AÄËÛ_d…Ã̰t£(ŠHMM%cO¼‘ ÈÃÃ#_ê¾ÍfƒÁ` vEo˜Mñôô|iòc0 ½âƒã8¸»»?] KX,9rj5mEL¼YX­V´nÝ:_âNIIÁ±cÇè3;A¼a6¥M›6/M~®^½Š¸¸8z1ć««+6l˜}1 *•ŠÄ0ñÆ‘Ÿ¾¨ÇA­V“&²)/ žç©o'ÞH2ë{³Õ2›V&ˆ×ŽãœœüÜ¥^¯§Â'ˆ×Ô¦$%%½Ô.QŒ1èõzÆÄkMvÜ~³Õ´Z-¨D‰×šÿý÷¹¦çááÚµkSÁÄkÊÞ½{_j1,Š"*UªooozYÄk‹ÅbÁþýû³ÜM‚Ý ˆíUKÄË ˆ âuF„§JI AAo,$† ‚ ‚ ÃAAAb˜ ‚È7ì}ÅÉoœ ‚Äð ë„‚ ^„ ’rØ/ê ÛDÔׯ©~Ù*$Çq˜;w.êÖ­‹„„zûd€ˆ×¤®½ uOÂÇG`` ÜÜÜPªT)DGGÓñܵ¿g$&&5kÖÄwß}Gíé µ±/­æ8¡¡¡à8÷îÝ{)866f³ùµ±yY‘³ºW”+W®®®d€ˆç:°}ï½÷ÀqV¯^ëº÷< >Çq¸ÿ>êׯ‡¢N:¨P¡ ̉W²ý9sÇ¡zõê/…í·Z­HNN†Õj}ã„j~Äko[»uëöÚ÷ïùî&¡Óéàáá——¦¿ 3˜ÇaêÔ©Àf³ÉGŠ¢ƒÁŽã V«å÷ÁsxÇöi¤¥¥Á`0@¥RA¯×C§Ó9¼³Ù Q¡ÓéÀqŒF#RRRàîî½^ŸiÜ)))0 Ðëõððð ù!ÕQ{!i³Ù`±Xàââ•J›Í†äädp‡ (êÍfƒZ­c Œ1F¹~»ºº*ê™T×ÒÒÒàîî.Ûû0íZRRA@ä06›M‘–J¥’m—Gjj*l6›Â†ee7’““áââOOO…pf_´Z-<==öÅ>œÙlFJJ xž‡§§§\>äEdÖþA€Z­Vô{<ÏË_ƒ“’’`2™P°`AE}‰‰‰rß™±n‹¢“É$÷y¢(ÊnÞÞÞÐh49ª›Œ1¹¿ðððpÚ';뇒““áåååÐo%&&Âf³ÁÛÛ[ñüÏ’®‹‹ xž‡ÉdBJJŠÓ>Ùb±È}¯ÕjU”·}>cHMM…Ñh„F£»»»â8bÉIÊl6Ãb±ÀjµÂÍÍM¶‹Ò;–¾Øç1†¤¤$˜Íf¸ººÂÝÝ<Ï;Ø+)Ò;“t]2µ1’íEQö.ÈO[”ï3ÃË—/Ç'Ÿ|¢˜uù÷ßѽ{w¤¥¥aÏž= Eƒ кuk,^¼X7cÆ £Q£FèÞ½;Ž9âÿŠ+0iÒ$ˆ¢ˆµk×"88hÑ¢¦N Q³5ëb³ÙðÝwß!,, uëÖEƒ ЦM;vLáZ‰îÝ»ãÆˆŒŒÄ;#àà`„††âË/¿”ãÛ¼y3BCCŒV­ZÉÏ•ñE ‚€yóæ¡iÓ¦¨W¯‚‚‚кukDDD(ÒŽŽFÏž=qõêUDEE¡wïÞhذ!7nŒV­ZááÇrÜÇŽC:upáÂØl6ôêÕ M›6E«V­da€¯¿þaaa DPPZ¶l‰E‹)ò¹xñbΟ?·ß~Íš5èQ£`µZÁÃÔ©S1{ölÅsI†däÈ‘hÖ¬‚‚‚Œ¶mÛbêÔ©"fÆ øøãa³ÙðÇ Q£Fr˜spSŠ‹‹CÿþýqöìY$%%áý÷ßGHH‚ƒƒÑ²eK=z4Ûn·oßF§N‚ºu§?¨ IDATë",, }ôÒÒÒinݺC† ÅbÁ† ä~¨]»vذaƒnìØ±FHHÞ}÷]\¾|Ùi>îÞ½‹®]»"$$ Å|àຎÂb±`Ó¦Mhܸ±Ü'5JÞyÆb±`ìØ±hذ¡¬3Z´hÐÐP,Z´Hž||©©©øè£‚† ¢U«V¸xñ¢Ã{<~ü8:tè ÛÂÐÐP¬]»6Ý\Y&F¶k×.¶oß>väÈ–[>ûì3V§N–˜˜(_[½z5ÓétlöìÙŒã8öý÷ß³µk×2OOOæêêÊ/^Ì*UªÄ\]]ÙöíÛÙ?þȰ–˜˜ÈDQ”ãúòË/Yhh(6lS«ÕlÅŠl÷îݬ[·n [°`cŒÉ÷|õÕW¬Zµj,..Nq}àÀÌÇLJ-X°€]»v=z”ùùù1vìØ19½Ë—/3¶|ùrV¾|y6xð`¶mÛ6Öºuk€õë×MŸ>`«W¯fk×®e¾¾¾ÌÕÕ•EDDÈñHé2„yyy±ùó糫W¯²cÇŽ±bÅŠ1½^¯íÚ5æííÍ–-[Æ*W®Ìú÷ïÏÂÃÃÙĉ™»»;óôôd‚ 0Æ;þ<›2e +Y²$ãyž3†}óÍ7lÚ´iÌjµ2ÆkÓ¦ óóócË–-cgΜa‡båË—gjµZQf;vì`³fÍbX©R¥Ø„ Ø”)SØï¿ÿÎA`‚ °Ž;²^½z9<[çÎ6uêT¶sçN¶uëVÖ¬Y3€}ûí·Š°³fÍbUªTacÆŒaØo¿ýÆ6lØÀZ´hÁ°+V(ÂwëÖ+VŒýõ×_ìÊ•+l÷îÝÌÏÏݹs'×uuß¾}lß¾}l×®]Š:–—$$$°={ö°}ûö±S§N1"÷üúë¯ÌÍÍ?^¾vôèQ¦R©ØÒ¥K™¿¿?3f gŸ~ú)S«Õ¬råÊr؈ˆ6}útæîîÎ<<<ØØ±cÙ7ß|Ã~øá¹-ÅÇdzʕ+³   ¶}ûvvëÖ-¶aÀµnÝš ¹®,[¶Œyyy±ï¿ÿž`ãÇg}úôa§NbçÏŸgÓ¦Mc^^^ÌÍÍ;–M™2…-]º”1ÆØ°aØJ¥bsæÌa§Nb‡f:ubØðáÃuŸ1Æ>þøc€µjÕŠmݺ•mܸ‘Õ¯_ŸI&] ûî»ï2___¶hÑ"výúuväÈæííÍ|||ØéÓ§åøÂÃÙZ­f“'Of/^d'Ožd“&Mbï¼óN¾µ…7þùG¶)/gΜaûöíc{öì‘ûœr÷î]V´hQÙ–KtëÖ1‚uëÖ/^œmܸ‘}óÍ7 {ë­·Ø©S§öÁ°mÛ¶±^½z1lîÜ¹Šº{ÿþ}V¼xq¶dÉÀ:wî̶nÝÊ–/_Ί)ÂxžgW¯^•Šb¥J•bÓ§OWôE·oßfÅ‹gM›6e{öìa·nÝb+W®dXïÞ½™ ršóæÍc%K–d_}õÀ~ùå¶|ùr€ùøø°mÛ¶1wwwVºti¶cÇ6sæL€õèуY­V9QYdd$+Uª e»víb·nÝb¿ÿþ;Àºw﮿`ÁV¤H6qâD€-\¸mÞ¼™µk׎`³fÍb¢(2“ÉÄV®\Éf̘Á°   öõ×_³É“'³ýû÷ËÏëååÅzôè!÷3[¶laXÅŠYZZcŒ±¸¸86sæL6|øp€õêÕ‹M›6}õÕW,**J¶‘*•Š­]»VñŽ<È<==™——ûý÷ßYxx8[´hóóócصk×ärHHH`5jÔ`?üðkÒ¤ kܸ1Û²e ›;w.+Z´(À ƒþáÇÌßߟ <˜>}š?ž-Y²„ùøøäÚ ¶{÷n¶oß>…®²ç…‰a ;qâ„B(H×ûô飈Gª¼;wîT\7nœ\Q¥—,! ¯””ùš½– ö×_eØÆ÷ ‚Àôz=kÞ¼93².R¤À¾üòKEøÊ•+3¬J•*rebŒ± .0¬cÇŽLE9Ý¥K—21Æ<==YHHˆ\I®]»ÆJ”(Á°Q£F)ÂvïÞ©T*¶{÷nÅõ¦ÑhØ£Gâß¿?3™LŠkV«•`7–ŸW®(kÒ¤‰,¦í˨cÇŽ¬wïÞïÛ¶m›CÚdXdd¤|MÜz½žÅÄÄÈ×M&S©T¬[·nòµØØX€½ýöÛNë\n ‰á×C »¹¹1ìÇT„ dÞÞÞå^¸paV¬X1…Þß¾}Yùòåu’1ÆŽ?ΰ?þøC¾¶lÙ2Ù~Ù í)Y²$ó÷÷gIIIŠëGŽQØH‰âÅ‹3oooÅoÿý7S©T,,,Ì!üÂ… åK“áááí\«Õ²:0“ÉÄl66lËbn„ 1œ©ž={¶âzŸ>}ÅÀSª›ÇqlõêÕ ­È0³Ù,_¿ÿ>«R¥ À  ˆk÷îÝŒçyV§NùZF1,µá·ß~›Õ­[WîK%¶mÛÆ(ÞÍüùó¦ÕjýÓ;wä¶ýñÇ+â‘&¿.]º¤H·S§N¬V­Z »Âc»vírh— ,`˜Z­f·oßV„wuue-[¶T”Ô'1Âá½$''³ .8\wª¡._¾Ì°-[¶8ÜãL ?|øU¬X‘ùûû;è+W®0½^Ïüýý}^ƒ Ö¶m[EøiÓ¦1ò¤cŒ­_¿žPh(ûrÍMßœ1üBÝøã? û¦x{{£V­Z¨V­æÎ«øäÝ´iSÀýû÷üq|}}qâÄ ÙV"44pèÐ!§éKŸ)¦M›///tîÜYéCÂó˜0a¢¢¢nf³C† qøÜß´iS¨T*|÷Ýw(Z´¨|½Zµjò§P“É$§;sæLèõzôèÑÃ!o&LÀÇ‘’’¢ð8p ì’ Å?iÒ$‚€­[·:økKùÍXf7vØáCò7bŒÁf³9õÿ–ü‹²Âh4bÖ¬Y E‹-NÜzçwdw{ÜÜÜpðàA*TH®...øì³Ï°~ýz…k‰äOžÑÍ™+ ñfaµZñÅ_àÃ?TÔï¿ÿ‰‰‰8zô¨C{`Œ)ê6ÇqHNNÆÊ•+ѹsg*THqO5„Ó§O;¤¿páBÔ«WÏéçCïÞ½åßt:üýýQQQЏL&zôè¥K—*êbóæÍ!Š"Ìf3?~œiÿþàÁ„‡‡£_¿~òî3 6D… pòäIÅu­V‹={ö xñârÞK•*…R¥J!44Ô¡ÿ ܹsGN7&&›7oFŸ>}Ö.¢jÕª8uê”C»üûï¿QºtiE›ž2e víÚå°x]²ûjYsØSºtipX(,éƒìnIwüøq\»v +V¬ý}%*Uª„zõêAEܾ}[‘FëÖ­®(»~ýúÁËË ¿ýö›¢þÀåË—ú(¿²>Ù¡ÑhP®\9¹òHغuk¨Õj…S5cLjÎVN.\ÞÞÞÕªU+èt:§ÞÞoFZvöìY:tHþsôèQ‚€Ë—/#22Rñ²|øÂÂÂÀ“reôo±¯à ²ϹsçÒµÙl¸~ý:nݺ¥¨øÎÒ•Ê&»û•fô)|ðàNŸ>sçÎ9¼ÜðàÁ€´Z­".ŽãP±bE”)Sÿ÷ÿ§¸¯@ðóó“ŸM*?{§ðóóÃèÑ£qðàA´iÓFöQ¢Ž›lD­ZµÚ‰´è$555[ñܸq@ú #GŽ(Úè‘#GàêêŠY³f)îÑét²}vÛ½E111¸páNŸ> £Ñ¨ˆK @‘"Eœ¶WŽã+ûÖg´kE§OŸÆ£G V«1`À¸¹¹¡ZµjX¹r¥bq" .‰œ¶¿J•*)|X‘îñãÇ¡×ë1~üxEºîîî(^¼¸Cºö سéú*ÿ;%%·o߯áÇqìØ±<™,ŠŽŽÔ®][Ÿ”nŸ>}äÁ€½v©S§ŽÃ{W©Tà8=’Ã6kÖ ÕªUCóæÍ1uêTÙ¯;¿m‘úekHzN;•Œ•KZ½ø4ÒÒÒЫW/yÖÑ~´Ö¶m[.\8ÛùÍ*O1›Íxçwœ¦Ûºuk¹qä4Þ¬ Çqˆ‹‹Ã·ß~‹_~ù®®®ày^±ZôY°8d–wžçŽt³ólŒ1|ûí·(^¼8æÏŸªU«Ê &¥9êÀ‰¼0ü°qãFìß¿ßÁŽh4|ðÁÏ·TWF#.\ˆ¹sçÂjµB­VC¥R!&&FÞC¼ÚwOë3µkíÚµCÁ‚ÁCpp0Ž9‚wß}C‡Åرc1~üxôïßßéî/‘›þüiýevâ’þö÷÷ª@”ÚÁ¢E‹¶€“vE’^?K^2KwéÒ¥Š…wöé~úé§y^ÞRº‡”)S°ÿ~øúúÊ‹ïòi<ã®6ξ.gG'*T{÷îEŸ>}0þ|̘1Ÿ~ú)>ùäøøøä[ÿ®~œTø‰‡ÙlvèœUOOO\ºtÉ©p΂—f‰õzýsM—ã8X­V´hÑÑÑÑØ°aÞzë-€——Wž¤)‚™¡R©T:tx&;bÄ 8gϞŗ_~‰àà`:tÔ y2Ã}ô&L˜i}ã,Ýß§OlÞ¼kÖ¬AË–-å­ÍJ—.-ÏKmÇÓÓÓALgf×|}}³e_c¨Y³&Î;‡ëׯcÕªU:t(®\¹‚™3g:ÝÖ’ ^Dÿ.Õùk׮ɂìimxÆŒèÛ·o–m0/û[)ÝÉ“'cÈ!Ï-]Žã!ï.síÚ5ù«ùùóçòÌiH.-ö.ŸöH[¡V©R%×ÚÈÏÏ»wïÆ½{÷°sçN¼ÿþû8pà6mÚ¤˜ 1ìDôJûwÚOÙÿûï¿°X,òt¾3<<<ä= í÷ïËo<<<äYk³Ùü\Oè»{÷.NŸ>wÞyaaay¿$†¥=!3º9œ(R¤ÜÝÝ1gθ¹¹aúôéò!>-Z´WÁÏž=—/_ƪU«äÁvnmC¡B…Š 6ÈßGGGcîÜ¹èØ±£ƒÏá‡~ˆÓ§Ocúôé8þ¼ÜQ\¹r7oÞ”wÑøôÓO±sçNôìÙíڵØ1cÀqV¯^óçÏ£qãÆ˜2e ŒF#† “É„Q£FA«ÕbõêÕX½z5†îp*(A݆ ¢iÓ¦hݺ5:wî Qåt·mۆʕ+çÚv 2K–,‘O—mÛ¶-úõë‡úõëƒçytíÚS¦LJ¥Â¬Y³`2™P¢D ‡´Š)‚jÕªaâĉ8pà1iÒ$¼õÖ[a9ŽCéÒ¥ñã?bøðá A÷îÝÑ AÌž=Û·oÇ[o½%O,:;%ôiÌœ9ÇŽÃèÑ£áç燃bΜ9 ’7]x%Ű»»»ƒÊ—®9+ éØ?g~BÎf3 `Á‚øóÏ?±nÝ:ù4µZ;v yóæŠ êîî‹Å¢xI[·nÅâÅ‹ñÅ_`Û¶mrÜ&L@ïÞ½åühµZˆ¢èÔYÚ"ã.öÏfÿ}Àó¼¼¢¾M›6ŠÁäÊ•+ѳgÏ,š%Þ\¤z‘±=ét:§;¶0Æ`±XäÝ–ì‘úŒmÇjµ"88ÇG£Fðî»ï:wîŒyóæ)vTQ«Õà8NÑöc ÂÙ³g1oÞ<Ìš5Knç~~~˜5kÊ”)“­6,‚SwFgÚ„1†ºuëâÌ™3˜?>æÌ™#÷U Ä·ß~+ p{[æ,ÝÌ\(§M›†S§NaݺuÒ·på8uêÔÁöíÛѶm[4kÖ @ú‰y£GFûöíl£–-[†àà`¬\¹@úv­Ò»AqÇqøðÃQ£F Œ9Ÿ}ö™ÜOOœ8#GŽTgÏó<ÔjµSͤÕj!‚Â&Ž1ƒ R¸ŒMš4 £FÊT[åËÄr›L&-~ûÁ²½pöµ*c²Ó¾Ìf3xžª_pfö%c{²`ç¤}ŽìÝ»<ÏË‹–_Ξ=‹„„yË+{ßÒܶ¿œ,ËNÛŒŠŠBƒ 0|øpYpY,…;\V H³ê‹œ‰Ì¼Ö&Ï+]‹ÅFã4\v´ý¿íÃg7_6›-ÓBNÊGE…O¸³xsk‹ŒF#> µZ­Øþò¹Í gg«±Ülµ’Õv&Çeú2³ãïš™°zÚ³dõ\OÂù•®ý¿íGjöFË~Ö'«Š&ý&"ga¥ñÙ2.‚Èí{Ú»&^o²ª{¹m'R}rVG3«Ç9ÉOF;àl{¦ìÚ/û6œYžrj_œ‰üœ´O‚Ú_nlyvÚŽT?í'a²²ù9é‹òK›äwºRà´ý œZC…N¼¦mÉM–à\\s&†€ Y‚xM•ÚÚkS&ô.‰<¬KÏíËÕYâunJY×or“ ‚ ‚ ÞXH AA$† ‚È;ì}Ñ0‚ Èž‰a‚x£ö1ܽ{7íá™$''ãÞ½{$ˆ7ÖžDEE!99ÇQ Ãñò"uRƒMš4AË–-©Pò€{÷î¡T©Rذaƒ<¸ A@¼I:t^^^8xð ° âUÃR‡¥R©äcð^¥NLÊ+ÏóP©øLóŸ~Ì T*ž:ê7T§¦¦bñâŨU«8ðœÚ‡¬úFÆ4..ªW¾œ»uë†.]ºàÈ‘#¯(–óÏÙýÉâ¹rþE`6ZpçÒ}ܹt‚íéÇýZLöá…\—!Çqàx.K;Íq¬f+¬À½zõ§qãÆ0`Ξ=ëX'ž'—^Þ™üy‘í‰ã8ð*>ÓYtÆc°˜Ì0MÔ_ù/†9ŽƒÉdƾÿÃÞ½GaµZ_©Q-Çq'O^DÄ‘3EÑiþ55<‰ví†bÏžˆLÏ¿&^OÌq6mÚ„FaÈ!¸qãÆs©›i ¼ƒûQÉ™t•ŠÇ‚…ÇðáGÛ`µ ¯|™oÚ´ mÛ¶EãÆñøñãWz–Œ1^ÅØjBr\júŸØ”L7Œ1p<&2$ǦÈ÷SMàùÜ}>Wˆë<VÏ!êÆClúáolœ¿‚Õ&ÇyøGéáçí„Í*d>S;mð(2÷®D#51Íi½P©xܾ‰¿~ÚÍ v!96<Ÿ‹nð‹èåË—£U«VhÛ¶-RSSŸ»ëc )±ñHxøØéŸøèGù–{›ë¬¾r‡˜»Q¸vô bîFA¥V9 sÿÒu¬3 ¿‰›'σWñy–âÕCý<:ìÝ{Ž oß/ Š"~ýåkôêõ6DQ|e )99½ûŒAll=<è\p¨]0jÔ,œ>sþþ…вeÃl?£4’ÍìÿÄË+d8ŽCLL Þÿ}lÚ´éù6^5 £S—?0ib>Z?Ópã¾Ú˜òu3h4ª?ãËFRR<ˆ²eËâ»ï¾ÃàÁƒ¡R©^¹¶Ãq ÉFü9'ÆT3@DT ®ˆ¦½Àj¶)ž‡ã8ØÌ6¬™µiÉFùºÞC‡~º"7. ø)&¨5jèÜ\ž©yžClt´.Ølô^zØ,¶l‡wótMÄ9à ’°~Îv0‘¡i¯`T *¯Ø:—1•€}ÿò IDAT‹á‹÷A¥æa1Y¡Ñjžì§Ÿ}dJ3AÜ<õ/´¾=zô;vì@™2e°hÑ"téÒå¹¶Ù½¿­Å¹=‡¡R;ÚcJ*¾>ðg¾µ›ÙŠ´¤dè½< qÑ*Ÿ™ã±~;ÎìüÇã‹mK Ö8Jä˜xÜ¿x j-"Ö…£J£zsöó`±"-1zOhtZê·_qò}fØb±bÓ¦P¼¸?\\´ØºmÌfË«*2ýÅj1aÍÚïЦMÆ}ùl9øÔ§suGÍZ s­‡cs7SAˆºþ—îwëâªUˆ¹´dþÛyfƒõZÖDĶSj6®áÉljºÏ¦d—”n]Ï{"d$á QJË®î:xò„`¶:ÞËqàUÀ¥»iˆ‚pÏq`HŸÑæx)‰iÐhÓ…¹—;À ûo ‚Müß{á€Ô„4hžyOw‡mÄìý?¥k¢(‚=©ƒ’]¿~ê8Žƒ—¯¼|=œ~qãy?j«Åµ†‡`ý‚C:OúŽOï3b’áêæAá_Ú7ýÞ—ää¶•+WbÍš5xï½÷0~üxøûû?·´ßùfLº;À ûm+ß¡ ÏËuSEˆJRX•Z­ðýmBz}åyp*ZW\ÜôpqÓ§ÇËq`¢˜©£3[^²ZE œ; Œ‰PkµuA¥Nϯ³<ð* tî¹Ïñ‰aµZ…ƒOÀÝ]zõªÃËËß~»œ@çÎÍBS¥âqçN4î܉B½z5ÀqÀÆM»‘””Šž=Ú@¯×!!!gÏ^AõêQ €þÙ{gÏ\Aûöa([¶8K—Åâܹ«¸rå6¼¼=P­jyÔ«WCÌ&“§N]„‹‹õë×TbI<ïÛ÷Ê”)Ž2e²7ÂåyÆàâŨV­|} („÷ñãpòôEh5jÔ ¨š5+@DÄÇ'âÒ¥“HNN ˆ8xð|}}Àqš6 $Aü2Mâq"##ñé§ŸbÆ ¯T¾Ï_xŒ´T jÕ*,û–¦·+¹‡«WãP¦Œ7‚”„——¢ÈpñÒc¤¦¦Ź•Œ÷ßT¬XE {¼”ϺråJ¬\¹?üð N÷R bQa6ZÀƒZ«FÅ€2xt7‚ Âl”Å0c *µ ç]EZ’•ë—EáR¾Ž¼ýO%™{Ïœ™wf¾ó÷}ÇÂS^‡Ãe'³M:‚ à­ñ™„YÓ‰O‰CÓ4¶¯ÞEÀD’E:÷m‡ÃíˆÙfƒÇ†Y¾‘[6ö[8a÷–=ø½¦[ˆÓí ¿sNLÕH(‚­krz"—£YŸ ¢€·ÖG]•é_ŸÕ:#FÂA ³kÓ‚QeÜévоWklv}†/»6” F…”Òí娪Ff~:v§­Eؘ¢(<ÿüó¼ð ¼óÎ;Lœ8›ÍvÈÇ@bFê~Ý%b}èR²e5Åeº¡ë¤æeÓiPß&T‚>?;Vo ¡ª‡ÛEû£{’“ImY;vöùìX³HÊL'%7ëω!€²m;0 ƒ´¼\3R¡Ñ¢ß[_Y«C»¾ÝIm•Emy5•;vòúˆ‚ìX³ƒ¤ÌtÒZe[>ÄþÉ—Ûl<ûïw6¬?II ôíÛ•.]ÚñöÛ³8óÌQèºÚD‰]¸h5—^z7+V|ÀÔ©°eËêë½äµÊdôèã(..cô˜Ë™7ïufÏ^È+¯|„Ýncýú­¼ôÒý¨ªÆ=÷þ›ÿþ÷Còó³q»]„Ba6m*äŠË'ò¯Ý‚ÓiG–%®»îa6nÚNñîïÈÌL‰][-I«Vmdì¸+™1ãIÚµËûEïj³É|?S¦ÜΜ9¯’•5]×ñxê¹ð¢;X¹jÚç£k:eåÏ1霱L›v+V¬ç¼É·+¨ªÊÔÿ‰(Š8vV,ÿ€ÔÔ$k`µ%¸¼¼œ·Þz‹Ûn»íˆ{IxòÉÅ”•{ùøÃI‚ˆÝ.±pñ..½ì\N™´t7~_„=¥^V.¿Šø8;Óž^Â’¥Å|÷}+W– j:—_ÖŸ›oŠ(¶ÜMÚu×]Ç /¼À´iÓ>|8‡£e’aÍ ä Ó(׿´ÏD¶É¨ŠJ]U)ÙIºI„+vU±ìóp'ºè7²•Å5¢€¦h$¥%`è6»ÌÜé‹)ÞZN‡^­iÛ=?æ¦à¯ó3ãÑYH²Ä)W@bZ<Ÿ¿<_}‡ÓŽ šþËïþóSdYâê'ÏÇæ°¡iK?[ÃòÙk‘m ©=‡…+ÎÉÒÏV3dB²Ûf H"» JE´œTjÊj™7c U{<È6A€mkvqÊ#‘í2’(±»`¢(`w؉OnꇻaQ«çnÀS^GrF"jD%ˆ Šc/Aûžù„ÔhÖ ‡ÛnÖó'cY¶ÉlZ¶eŸ¯A”%νõÒrS@€Šùßsß ˆÉé‰èšŽ§¢žcz3ìÌüøÝF–ù#Îx'’$"ï?ñ†g\7Š6ÝòZÜÜ5yòd^zé%~øa|X|êEQdãüåL¿ã1 „hd¤©¸äuíȤ‡n!9+Ã0¨..ã[ÁSZl·‘’IEÑn2Ú´âÊ—eûе¼ÿÀS$$'#É2E»¢n pÂe“8éÊÉhªú‹êV¶u/]y²ÝÎùÝNrV:º¦á)­à[ÿIuq)’M&57‹Š¢bRs³¸ú•ÇØ±z=Óïy%1ÑÁ·__„Ûm#VY¸hv›„Ã!ñχOBºöx– §uå–›E’ ‡›7o欳ÎbðàÁ<ðÀ 8°Eùã†A$awA)º¦Ó¹{.“”*•òU´ë‘K¶pæJ.;ízä“Ù:ÕsÖƒaЮGv§ Uш„ÊvTawÚhß+?6¿ ‚€§¢>¦ÈfµIG×tŒîEeq [WïŽ>±’M")-»Ó†aÀÜéKغº›]¦ë Žä´Ë ´¨’m«MUÍç$«uºa ÛVï03døC|÷þ2Ú÷̧÷ðnìÜPÌžíT쬢²ÄC«Y€Á¶Õ;Dœö™¸\1wŒ ‹·ñÝËHHcÄÙÇжG>!˜9o/Âß`Ãâò;ç`sÈTìªÆ_gª…6‡Œd“šø ‚€®éìÜX‚Ýe'·}& ©ñÔWy™ÿÑ âÝtÜ‘îC» k:»·”’’iŠ­:f3h\Ö-,@Ót:õiKJv"6‡ìv™-öôaÁ‚œzꩌ9’û￟îÝ»šù%!lrÔ‘X€H%A`Ù‡_ß½3½N:Ž´¼lDIdÏ–"–ÿï+ªv•2ïµ÷9ãÎkÁ0XûõjË*iÓë(Nºb2)¹™”lÜFmy%º¦‘Ó¹£¯œÂæË©¯¬!%;“Þ£‡a`ЦçQèÚ/ÕD‡Û…l·#6fÖÍYDMq­{tá¤+Î#5/›’MÛñ”•£kYÛ0æª)l^¸’ºò*’2Òè{Á™†A~ÎU 2,Ûl¼÷ÞlÜn'ãÆS]'L8W^ýˆ>øŠ[n½”p¨yôf¯^]xä᩸ÝÎfÁ’$²k×–,žAçÎm›E·ÛÅC^ߌ”Oz?ñ;v”˜ ‹¢rr´NË–¯Ãï`·ÛE‘ºÚ:¦=õ&gOCZZòoS}tÂBSYëÞ£áPY–ÈËË&/Ï`¬‰"m»š¤V”Dtu¯¿ê®M{Lw·ƒ>#ºaè:[ט$²u·<Ó¿7ê"!J"†n”±w3-ˆž²:3ÀLÓ‰Ov#"}GtgÉçk0tÓ=ì¸Ó˜ùw1}ÍkÊëØ³½I–èØ7Ÿçƒ$KtÜ Wœƒõ‹ 0Tóû0L…¶1‡k !ȱúsôI=Èn“ÎO}‰aÔUÖ“×1;VÀá²ÇŽÚkÊêXõÍzl™6][Ñg„IâÄlgœC ¶.†AƒÇ‡ªjØì2úµÝoÜT8‰m쮽êqYQ%þú6‡®Çt&93 HÍÞ;ÿ·ï•Áº[ÐUžÃºÝ&㈵µµ,_¾œšššC¶©»oø9{çLUå˜3ÇqÒ•ç®sö7Ÿ’Ôä3mzwc׺ÍoÜŠ·ºMQ% ]=†aÐþè^´?º'J8L×a{³ä¸“HÏÏaÏæmÔW֑ʱçã º¦Åü|Õ˜|ž: ÚõëA‡½Pº7 V&.%‰ô¼Ê¶í¤®¼ŠøÔ¤&uÐTÍrm<qÈV¶ºÚzž{î]ºví@·îb¿ïׯéé)ÜÿÀóx|Í+$ŠÜ~Ûe$&Æí× ÂáwÞy=zvm–º¬qRm VÓT ¿?ˆßhFR“SS¸åï—0þ ÊÊ«bk_|i^”pö9c±Ûí¿­qE‘®Ý:ð÷¿ÿ‹ª*OL=¶¢O[>ÌÍJ<Ï?ÿ<‹/fôèÑ’÷‚œ¬xÚ¶IfÛ¶>úx#¡Š#šiâϲKHHà¶Ûn£°°ÓO?½Åeio­ßô¯5 Óã÷ú] à÷Ñ5?̪9ë ²Û¦“Û>o­!šë69=!æëè)«3ãlR,£‚éo,²s£¹1ïÔ·-²Í¤ ×îÆ0 ŒîÕ$óƒa¬($à a³ËôÑÙ&GOÐdì.ž›BBŠ©²†‘Ø%ùsè}|W3ÐÎÙ¾ëBÔÄBÁ½åm’l=¬, Äë>¤3¾ú5eµüøÝ&|utÝ #/5êó AoȼDHJÛÿ‰Z8Ž¥l³Ùåh[›› I–Ð55s7à)«‹õÁ¾ùdwm܃ d·Ë$)-ሙ™™<üðÃlÞ¼™aƲ±­) jÄüÑ•@}C̆R“£~Ö‘`ˆ@½—@½7¶þ)áJ8ݤ8‘m6¼õ1óßú˜ª]{b÷—Ôý·®©àp»d™…ïüïßø˜ÊæE0¬ƒñûÖÁŸHU«6RW×Àßo¾%!1qRR9þø|òÉ·¬ùaC÷iH'Чã€YtÝ %%Œæeÿž9s?ñ*áP„P8‚ú"Aˆ„ÜsÎXâ5V®XO»¶y(ŠÊóÏOÇf“9ñ„cÐ~ãq‡ \0åTj=õÜsï¿™>ýsÎ:sSo¸€ö[ †¬Ó¢Ô½§C† áã?æÃ?äé§ŸnrûÓ‘Hòe›Èûïõ×}ÎͤG÷L.¿ìh&Ó«EûÿR\xá…\}õÕ 8°I€N˲/¨¯ñ" ‘BBJ‚(Ñ*_­ßÌ1,Š®ÝEÙŽJÒrR}á0tM§&ªòª•Ä´x d›Ä¦åÛ%‘Œ¼TÜ ®½Áaþ0%Û*%‘¼ÎÙ1!!ä QSZkúÊf&±ïZ¯kzìò É&‘™Ÿû>]7Øþãn“|f$`s˜äº´¨‚ 7ˆ(‰tìÛÙ&ÅNÎcÚ…aàJpP¾£’@CI–È?*Ð5ºÊÑÌüÕëß#ˆ"á@˜újy© 9¥=†vŽEðû½AÌ1ëNtî·½«Š=øëˆ’Hë®­¢~Úm»µÂïÄëñ±uu¥E¤å$3òÜ¡¸â`€ªhTíñàtÛ‘ír‹×\s W_}uÌ5âPA8åïW ŠRL©ÏéÔvï*¬ùbk¿^€ª¨„ýAÔH˜`4ͬ’Y¯~'dÓ‚å4Ty˜ûÊ VÍšCJnãn¸˜¬v­QåPOŽô7œó—QW^ż×ÞgÕgÑ:\1ÙÛXþÀ–2|»DMãÓOç¢i:çž÷wìŽÞ$$ !q²­'ï½÷%¡P„·ßútÿ9%f(üÌÍ?‘ˆÂùSnåìsnäÔSG2mÚí<ûÌ<öèÍû!Õ::µaĈ¼õö,l6™ââ2¶mÛÅõןORòï¸f·Û¸í¶ËØQ4‡+®<›7Þü„.]Ç1kÖ¼˜´…#ƒ»Ýn.ºè"/^ÌwÜqÄndÌK rsøèƒI|ùùù´k— 7ÎæŒ‰3ˆDÔ#¶¯:tèÀœ9sxã74hP‹Vk$›Ì™+A€cNé‹®›iÇÚ÷n®­ÛMÅÎJ¾{ϼÑrÀ˜^Ñ 4Ý›ö ˆ"­»ä—ä6ç¿`_T1NJG¶™éžDQ |gULuMJß›y¢Áã3OªtƒÄ”¸&s^8aËŠBÁ)lѼÆõÕ^óf9ÀçˆÝòÕPãCSud›D~çÜØT.•»«ÌÛó0/ Ù·¼(‰dæ™d[h¬.Â0 :öiCß‘Ýéy\FMÆÿ8óïš@ŸáÝb*ºª¨l\²5–À½ ã§Àú*3c(ŠdµN7‡ÛÁ¹·ŸÊ1§ôÃÐ ‚ÞÅe|ÿÁÒ˜j )±4`vgó½–„>}ú°bÅ ž{î¹&>‡r ô:ñ8z:Ž>£‡ÑwÌñdwh[°§ßñ_<ýÅ›¶GÉ 3Æ’”™Þ\Én›Ç5¯=Á¸ë/Â0À_×@ɦm̸ëq*w–ü!ã8=?—«_ùã§^jºûÔ{Ù³y;ÓïüåÛwY–¥ ÿrÕÉïòÕW‹8眱\|Ñé¨?QXÝ.'§Ÿq=ëÖoÅëõ“÷ÛIdáÂU|ôÑ7ÌúôyN9õD4ÕT£=ž†ý»Ýƨ“†rÇÓØµ»”ÅK~ ºº–Ë/›ˆ¢D~£7UÜÜLî»÷z®ºò>—;ïœÆ€þ=HMM²¬ð#Åqqq<òÈ#Lš4‰K.¹„uëÖ¡(Êù>’$p̠֌ў>ÜÈ}Ì+¯®fê CˆDŽœ@víÚ1dÈ^{í5ìv{“TM-³ñÁ_ï*›iÙÑTŒ@Br²]fÁÇ+‘d‰œö™tèÕÆTt5ƒ›JE¸$wŒ¼!“¼àp9bBD ߼½9š¿½³iðFš}¶ñò}¿£¥àâ‹/æ›o¾áwÞiB„[úF¤¡Æo*¥$¦Æ™ùW #va„(š lN½†SzCþè ž¸â± ÆP ›·tMÇî4/XüéjBþ0†a‘—sŸ%‘mkv"J" Éq¸œØÝŽ}úÖ ª“d‘-+Ší26§ÌæeÛØ¼¼Q‘d‰V²ÍÒºA Jn5U§´°›ËŽÍaã‡ï6ð†Ì€¿.¹f¦ Ý à B4ÓC\’+úT]ÕÍ÷/«ƒèü‰R4$Vb›úoŒì$¤Æ£)ªyA‚ªÅ+†AÈouUÕbná Ù–û6æv¶Ûm±FmE=† ‚ –›Šä¶·({ºé¦›˜;wnŒj%ø—"èõŒÆuÔMÕÔ{ñÖÔ5U5ˆ’Œ®éH²Äˆ‹'šý,бSQcÙ"Á†®cKˆGU”ý¾³¦ª¨ŠŠ¦š?jD9àü«ƒ,aè:¢,qüg"I‚ 6á9bt­VÂatMÖxà:Xø *Ãv»×^ŸI›6¹ôí×p¤¹ÂªiÇ›¢sç.cäÈA¿ 9IOO`Ù²µ±LO=S.8pnØ.Û’““Áã¿À[o>zÀë@u]gÇŽ=HÒ^GzÃ0HMM&==¥YùHDáɧÞà¬3GѺu޹S®m`ÆŒ/HOOÁáhœP5FÊÚu,X°ŠI“ÆRSSOrr¢e¡-\%¶ÙlŒ?žñãÇsß}÷qÿý÷–úÔÖÙµ».¦æ™_83#Ij:Ì%I䫯·áñ8õÔ®8£AH6UR°µš‹.Üëǯi:Ý»g²pÑ." Y6Ðtã ¯u>TX¹r%ýû÷ßoß´ä”(ˆÔ”ך'G†N\r\L5¯YÞ«j5¦Sk„·Ö»ÁÒï4‰\4¨MQ`ËÊB¶¬,Œ‘ÔÖ][±kÓ’Òâ‘írÌ—³‘ 6x|ü÷Ž÷0 ƒ¾#º3ø”~Ø6:õkGIAµ•õüûo¯ÅꙟFƒÇ‡¡¤d™¾Æ‘ÂæåÛq¸LþÅ+óš‹n;½‡w5IDDeÓ²íÈ6™£û¢kFL¥í2°=»6íaý¢$I"·c&†nP¼µŒuó·0ñæq¤·JEªKkEóÒ’Ïþóm“ç¹âœœ~Ý(œqN6.Ù†l“vÖ tUC’EÖ/ÚÂÖÕ;rJ?d»LMiõÕ^ÓâqºÍ¾ÐTóf1øöÝE|ûî"d›ÌÕÓ¦ DÛð°,à²Ì¦M›èÔ©S‹OÒSIÌH£jW ÞžIRf:º¦2ÿ­™TîÜ›Ò,ªòO¿ý1RZe3`‚™Ö±pÅÚØf&-/ÛŒì.s3Sµ³„GO½C7{ýE –‹.™IëvOšJìE}yô‘“[v†víÚqñÅsçw–‹~›‘d‘E3Wbè:z·Æ›Î8'ñÉn|u~.ã.»[*w×ô†°9ltèÝ:6?$¥%Ó6ƒ‚5;b~À™­Óé3¼{¶—£©ñÉq1÷ MÑ4®s§/&0Ol]´]ôÑ¡wkJ ÊÐT C7HÎJ"«u:iÙÉ,üd%™yi8ã̼Ӿ:?jD#1ÍÎñgäûWðcß›šÄ„kF™)0ðÕúÑS½Íj“»AN”DºÝž†Õ%–~±&F”n;©YIfþ_Ý@tØXõõ: ƒXJ¸&d,5gœ_-º¶4~V²É­+Æëñó¿çæÄ6i9Éä¶Ïbä¹Cb›’œö™dä¥R¹»PÂ*㯊v˜üë;uêÄM7ÝÄUW]› þè1`:‘`ˆ”œÌ>;!-….C&ä÷³gK!Ï]p#ÝŽ?†¯8¯_xUQ£ÁŒÐñ˜¾,yÿ3Ö}³ FN3ÚåÑýøc8jhÿØø9îüÓ©-«¢tkbc–‡}xƒ(IDBad­ùuÏ;×nÂ0LåÙìËð^ Á0è4¨‹ßû” óï­CÛ<Ž:v=N»nzè¤S¨).cÏ–í¦r­ë [kõ»–`ZšVGuÅ]$&Ÿ‡(ÆÿÂI¼Þ ®¦}û<ºti÷³ yAÁŠŠJ9rn·“Š ?®ÝÌÀ=IJjžº&²lÙ:ºtiK~~ö~3Nƒa,XÉžÒ $Qâ˜Á½9ªK{Ö¯ßJbR<­ósš”Ešê:rZϘ1Çñþ{Oî£ØîÅ’%?àûIжFå¬oŸ®´j•Ie¥‡5k6Ñ@R’Í •P(š6Q°¥HOOaè¾df¦ÅHsã…ÅÅe|?Š¢’Ÿ—͈ƒ¬#—?hR·ÙÛ#I¿ÿ¶¦i,[¶ŒI“&QRRò‹63•e7 Šîƒ~–¢h|÷ýŽfn `^´Ñ¯o.N§Ì¶mÕø ½zÙã ²ly 5ž‚;¦Ñ·_.v›ôßQX±²„;ëDAóÈÏO:ä¶iñ‰§áreݺuôîÝ››o¾™©S§’——wØHÀÏÖ9X²ø?òÿã]iašªáNt“š½O{ PWÙ@}µW¼“Ìü´&Ÿ«¯öR_íE’E²ÛfÄ‚×L¿Y•KÐ AÈï’K|²›â‚2tM'%;‰¸Ä¦vV¹»Oy=‚ ©ñätÈŒÝf%[ËLQ ³u:ɉ4Ôx©«j >9.–7ˆP¶³’¤´Rs’©*©ÁSZ‡Ä%ºÈn—KÍ&DUéòUäuÊnz¯† eE•¨0Ý~ÓHÎLÄuçE‘Ê₾Ð~Ý‚\ñNÒrSˆ„”ý>KU4*vUá« ˜n6‘ôV©fººŸd!i¨ñQVdú¿Ú]vZ•»ß+ˆW{Òä~“Sò™>}:“'OæŸÿü'—^z)¿Û0 eÙ'²ý—¯Þ]J}E5 é)dµoý³›¿êâRöl)ÄÐ n'mûvG@`Ï–í8Ü.rº´GE e;h¨ö`` É2ÙÛ’]·÷}WoM-;~؈¡Ø]N:ôïSŒkË*©))kžs؈^™œŸƒŽPVP„ª(ävi+!>jÇ!Ê¶í ¡²Ó5'»CÒ[ç6«ƒÏSGÑš fœ: 諃…¶Î« ¶~£®CO†[±ùåƒaØl2ó¾[ΨQ—ñòK÷sñÅgüæ”j¿¥N¿å3Zn„®ë<óÌ3Üx㇌ ÿvúÓßÿQ¶¹/®¬¬dÓ¦M >¼Eƒ!ÃDl[ý^}½¿ÏýÖº Û;˜gõu2¼qãFºwï~HÚá`Èð¡²Ëƒ]¿żÔê`á'ÃòŸí…ÆÍhz‰Ë/¿§ÓÁ¨ÑCè¢ñGÕé·|ÆBËÚ”‰¢È7ÞxÄLªãòyÿ‘ÈÌÌ$33ÓÙ‡ÛV¿W_ïïs¿µ.‡¢ïæ‡Óî Ã8äù‚[‚]ìú}(ú§%ÔÁÂñ¯ÞË–¯¥¸¸ŒÑ£¥M›V–®…ß}Bµ&H ,Xó‰ -ò_½rs2ùò‹—èÒ¥‘pIJ ,X°`Á‚‹ ÿ5`ÙÙé´j•…¦iͲHX°`Á‚ ,X°ÈðŸÑòªªÆþmÁ‚ ,X°`á¯Ñj ,X°`Á‚ ¶`Á‚ ,X°`Á"Ã,X°`Á‚ ,ü5ð³> ²÷žB þ¬h 6.Z{Óf0ŽÌùGÁŠ?°p¤Ù’ Xë½…?ñX~Ö¼x 9êu˜’Ù[·YícÁ‚ #W¶È° ,X°`Á‚…¿*¬sY ¢8\ûBk?jµ ,X8|¼E‡Öc³µA¶ZÊŸ™n!Šq‚ý°<]BÁ5Ö8kÖ/²Ü IN?rj¬E0ª A´t ¿ËN!¥5‚Ý}È7œFÍÓGÙ‚…?åXÒRr$éàȰ®¨÷¼Dbò1ÞjH bèØì$ûa«A}í+ˆ¢ÛêŠ& ´NBâé¸ä㎜JG¨ëf‚ì°:ÐÂo‡¦ ÷ŸŒ`o}È¥,Ùnµ¹…?'T[ÿq ¹Ž  Ø@£Y%,Xø³’.8ÜQÔ‚`ClVg4eG R%€(#ˆ–Êoá÷˜›þÀŒ*¢„ JV£[øsŽ%Qÿyó·šÈ‚ ,X°`ÁÂ_¶`Á‚ ,X°`‘a ,üþÐ4Íj„߆a ëzìÿ-Xø«A×õ˜í[cÀ‚‹ [°Ð¢I[#æÎËYge5Êï€Ý»wsýõ×SYY»€Ã"þJX´h÷Üs^¯×º„Æ‚‹ 1±ÙdÎD$I²O ‡‚ àóù¸å–[;v,Ÿ|ò‰Õ(¿xþùç2d~øa¬­­1Ý2ç]A°¹íØÜöÿwãr°åÿª(--塇âØceΜ9ûÝ€ÿ©ÉŠ$"FÓbíûΦýˆØœ4UÖ‡]ïÑüŒ ‡ÌÖm.'¶Äx$›lÙ­E†›ˆ®ëhšv@ã0 MÓbGŸ‡v»O?‡ ´gñâ5H’ø‹êÄê¯jZ´žÖñ”…Û @8fæÌ™$$$ðÄO (Êö|]7Ð4=öóg;NmT 9ûì³9á„ضmÛ¯íÛO?ýù5åMÿô3¿ÕfDQ ´°‚Ç/ú_ôBþðÏ’Q(+ªÜ[ÞúUäeß6ÐuMÕÐT]7~·ñp8ÇS£­¯[·ŽQ£F1yòdJJJËI‰aºŽ®i?³†›eôX™_[Ç?Àö•ëØºl !_ É¸%‰Ýë7óüE7óИ)ücÐ6/\ÍagÏ–í,]EEQñ!iQ’xíº{¹µûI¬þl.²Í¶.¤j¨%Ú^Æm‡V’ü?º®ó曟òÕ׋xíÕ‡HHˆkÖy>_€«®¾‘#áÊËÏF=¾•‚ à‘$ñM®†aàpØY»®€·ßžÅæÍ…¨ª†Ãa§G÷ŽL™r*:µýÕÞát£©aEµŽ¹þ, X´—,YÂ}÷Ý×D±ù#žo·I,_QÂG37RTT‹®ÄÅÙèÕ3›Içô$77_3oŠ¢€Ëe#TÐ4½ÅÙë¼yóèܹ3<ð—\r ­ZµjÖ'G É×5u ¶ô‡¢ }¯|rÛg5kûÆÿ/XYDme}ì÷®8'}GvÿÕuDCÓ£ó¤ð›ÚQE<åõÈv5¢âpÛÁøÿÊ×!ÛdTEÅîvülùÙ&Q]ZËÖÕ;ðÕX·` ©ÙI´îÚŠÌV©tÜñ /CiT­ÌŒ¢(¢ë-céÓ§óôÓO3yòdÒÓÓÿÐ1ðõ‹ïà­ö˜™Îø©— „#Íʬùò;v¬Ù@BF£ÿ6åW'‰Ûºt ïÝý6‡¡çƸk/BUQd÷ú-¼zí½H²Œ;!ÙagáôOè1rÿ½ê.4U#13ß{Iþ}Slj¢ÈæËqĹðyêb<£‘ï,YÍŽ5ØSPĶ?pô¸HËÏ¡ûðÁdµÏÿUýd¢hrÃØ»1±8E %à ­fÖ¬yhšºß2>€?žCVVºi@‡(Îè—Ú‡aȲÌ?ná¤Q—"J"¿ù²³RÙ³§Š;ïšÆ;ï~NqñbÂ!ïA×#ѳ×i<úÏ›?~¸µ³û“áÊÊJn¼ñF>ûì3¼^ïú|»]bÑ¢]L8s;¥qá}ILr°{W<º€ÅKwóågS^¡.(¨æ‚‹?æÅçO¡_ßÜØÉHKÃ=÷Üà /¼Àã?ÎùçŸs8’†5ó6 D;—â‚2νýÔæï!@yQ‹>YI(A”DÀá²3`L/”°z𶤬[°…mkvàpÛ9qòPœqÎ_m—’Mbå×k.Ú#Éšªí·Oö–_‡ tîßÙvàò?G„‹·–ñí;‹iðøÐT I©«j ¡Æ‡Ãe§m<â’îbAð”Õñí»‹‘ç&#/ £‡©S§òä“Oòâ‹/ròÉ'ÿa¶¿à홸“0 ƒñ·^û!ÃÅ·²qþrDQäÄË&!Ù~å0»ÓÝ-ºÎªYßbw9‰KNdüM—‘œ•AÈ@(ÑuÖÀæ°s¨šE’e0hBN%YfÉŸ3ïÕ÷QBaTEÅát²îÛE‚YïÌvçüª¾%Ïžr>zàߺÎÄû¦’’›§hydØÇ%aÿ-D/þD±=ÐBv0 ܯ)+’$pî¹7„X¼è]zö섦鈢ÀS§ðÙóѵà/®ï¾JަilÛ¶‹;÷˜ƒÁ²Û#–7þ÷wÞaÊ”)‡MQ gΠUnïÏ8›œœ„¨z%píµÇ°tÉnÂ?!G¿Ô^}þÛ·{(+ó!-´X2 P^^Δ)S˜:u*K—.¥C‡MŽŽ[21mkvFÌ,A@×u¡JXi¦d©µ 6*tì݆¢ ÅèºÁÀq½Íã蟼ïϽÿ¾ö\SVKeI îN·ãWµ]cù°?Œ¯.@^Ç ½ù÷ì;ï†a|µþhùì&åIýA ®ÊËÜéKxƒ$¥'0òœÁ¤d%¡k:ÛÜÉšy›p'¸~q»4ö(4Ôx©ØUƒaÄ%º[¤Q\\ÌøñãéÙ³'_ý5YYY­‚4)“å˜ï¤|A÷úú üj»ê1r7L]×ÈlÓMQc ƒfߤ$‘×­·+ú7Û?Ê»IÍÍFøI{üÛúUí"‰Ô””óÅÓ¯bw:é:l Ã/šH\r"!ŸŸU³¾ESÕƒzæ¾½—’ÍÛ0t%1O.¬%ºe’á_­*H"¢(RWçÅã©Ç0 ’“ÉÌJ%Š4#$‡ŠÊ<5uÄÅ»ÉÊLCÅýNX6»ZOUUââ\de¥¡ëFìØ«¢ÂC8¢`³É1"lYA9ëŒQ„#‘&Ï·Ùd"…ÊJ^ŸŸ¬Ì4RR£ipÌwòù44ø†ÂÔ×ûÐ4¤¤„&ÄBËFc?}÷Ýw<øàƒ|ÿý÷‡±.°kW¢(’â"771FX5MÇn“8á„(Šö{•…T**}„ÃYYq$&8hôR2 ¯7‚ßoª<Á B}CEÑIIv¢ë-—\ÖÔÔЫW/®¼òJnºé&Z·nÝâ•b]׉„"€€;ÁE×AXýítM'è ŸëQ)-,gÓ²m¤d%qÔÀlÿq'鹩±¾Q"jÌOs_…×0 ”°‚a˜¶ìpÙMÒR¨­lˆ ˆ&Au¸1TETEÅ_DSUnq‰nTEEULãq¸ì‚€·Ö €®$¦Å!J" /jDCSã÷YØ“ †®“˜×Ä¿·ÑEÁW@hQ%N">Ù( ±w.Z·‹†²]¢ÇÎä•kÎë@ÿQ½è5¬kT¹3Ë‹’ˆ¦jøëƒèÑyÞæ‰KtÅ]ÓÑTƒ’mfyEÅî´„±;ì ´¼¹{ýúõtëÖë®»Žk¯½–ÌÌÌ·)ϸâEŸ§ž°?‚@|Jv—3¶.7Žá”Ü,ÀÀ@$”pMQbýgè:aÀ<5s:% I–ÈîØnÿ\C–P•úŠj0L­Ùç&.% ô¦ËF×_m=‘€éÓŸ–Œl·í‡ K”lÜŠd³¡D" =÷4r:µES5âS“wýżÍ6­¢$¡«*uûÔÇávŸš«„#A”`ØlÁ  ò››O»Ëiñ‰?Eâârî¹÷9æÏ_‰×kNª©©É\vÙ™ÜzËe¨Ñ• ˆ¢Èu×=ÄGƒßÀétУGgÞyç1RS’šèв$ñÕì…\qå½ø|âh×6O>ù7n·çÓ ìÛ½»Œüüœ&þaEi2‰K’ÈÒ¥?réeÿÀã©' ‘ž–̈ƒø÷³wa³Éx½~Κ8•;JxòÉ×ùïË …xò‰Û8ûì1–ËÄ¢rî¹çRPP@CCÃa¯W\œEÑðù"ÔÕ‡HLp4!íªª7µWYä›9۹嶯ih£(©©nÎ:£÷ücªªS]àÔÓßÅÛà®»¿å¡GæãóEx÷­34(¿E«Ä¡Pˆgžy†?þ˜ /¼{ï½›ÍÖb ±®éf€æÍÓy]rX·°]7šaAP#*ßN_‚(‰3®Ï^=N7HJKˆæ5ß®§pínRs’9ù²hª¹†>zz6’$ÒL/:õiË7o.ÀWÀëñƒá`„Ÿü‚ ?̤[ÆcwÚ%‘ò•̾]3¢QdèiGcwÚ™;c1]udà˜Þ@ƒÇ Ä'»ˆOŽcáÌìØPLãÍÂû¶¥ÿèÞˆ¢€ @}AUÓqGÝÉG8fÉgk(-¬@ ›±²Ý$­£.8W‚C7P“hcDÅ Átÿ º9%±‰â[SZËâOWÓàñÅxÙ&‘×9‡!§( l^¾õ‹ 4„dQ²ññ3_¡„†9ü.¹-r ÔÕÕñàƒòæ›orË-·píµ×¶¸MáËWÝ… \òïؼp9Ëg~®i‚©|^8í$¤&ÇÖßÒ‚"f=þ’,3æÚ éptOJ¶l瓾HÐk MžÒ ¦ßõ8ç>ôwÒÛ·áÕkïA ‡it/Nºâ\sÓÕ¸±Üºƒy¯¾gO9J8‚$ËØœŽ9c }ÆoB„%›Ì³ç³àÝÿAÔ®DIä§þ±__ÌFåW”DJ·Ò¶_w4E5E2]©×ûኢ]Ì}å}jŠK÷ÖÇagà„QôBô%ÈìçÞdÏ–íÈ3óʬÇ_B²É$¦§rÖ=7`‹þÞÂAòÏ?‚H4þ÷ÿ‹–¶;\L¹àv~øa/<ÿV®ø€¹ß¾†ÁÝw?Ë+¯~;úq8\{݃üç¥÷yöٻذ~³¿ü/n—“Õ«669"Òu—^þ€SO»†»ïºŠ>zš1cŽcþ‚•\yÕ}±èûä”DÎ>{ ~ó§ÜJeUÍÏËÍŸ¿Š“F]Fÿþ=øú«—Ù¾u6÷Ýw o¾ù ×\û ’$!I\p×\sÇ䯛.äï¿„þý»[Dø ªªòüóÏsôÑG³råÊA„uÝ 7'3ÏèÎöB·Ýþ5Á r@¢*Iï½·ŽsÎý€1£:ñõì Yµâj.œÒ‡iÏ,åþ¾Ãá°Ù$®¼|ÏêÀ¸q¹îšAL½~0:¦µh"¼/JJJxøá‡>|8K—.m‘iØ Ã@Su¼uþ˜â™’‘„(™ÊìŽ {3H²Äêo×ò…h}T.úµ£lGeŒP&¦'€’MbùìµÔV6”±7xRꫨ­¨£¦¬–”ÌDÂÁ 5>jLÛF¢è©¨')-W‚ A¨ØUÅûA}µCP BÀä«7æ3ëÅ94ÔøˆOrÇž¿øÓÕH²Hbj<Ÿ¾8Ç$”Þ† ¾Z?›—âk|g›ÄÒY«%‘ÖGå’˜F¼/Ý:ƒ-+ i¨ñÑ¥;²Û¦ÓPã¥lG%ó?Zަšó³l“£An…?ÄÓìD§Q@)ÙVÆÛþÒ¢ Âþ0½Ž; I–¨¯ö²öûMl[]˜¾ÜõUÞ¨rO¬Œ®$F7-»wïæºë®cìØ±lذ¡Em+w–PWQŬ'^âËg^Ç[ãÁ_WO}e õ•Õ<5ño¢«³ Q¹³„êÝ{PÂatUYMQ©+¯¢¶´]Ó@©Úµ‡ª]¥øjj1ö!žÕ»Ëxî‚›Øùã&|žzŸu2΄8êÊ*™õäË,ûxv¬%Y¦på:>zðê+ªñÕÖᯫ§¡ª†§Îþ®„¸fÜÜ.íÀ0°;Ì~î –LŸE8lâËÐȃ}€Ÿ<•k6à­©cðY'ãNN¤®¼Š/žyEÓ?–×ñV{ðV{bªyC•‡ÚÒ ê+k,ÿË–¬ ¿øŸ÷q»Í&¯×߬¬ª„yê©ÛèÝ« ‡UÕ$‘ fáŽëÇìÙ 8ïÜ“±ÛmÔT×òùçóINNdâÄ3P"uäæf1kÖóhšsqh4º>ú†¥KfptÿèšÆÈ‘Ç²pÁ*Ö­ÛJMM©„Ca¸ÿ:V¯Úȼï–Ó½û)\uå9Lž| Ý»wDQÔØ{D" W]}ãÆ ã×A4Mç & ª:W\q—\|ÆõçÒKÎÀç rûíO1|ø@®¿þÀ@‰(hšfk´`ø|>®¸â Þ{ï½U/Aðù#<õÄŠŠ<|ôñ&/ÙÍå—ögÂi]éØ1•pxojÃ]»¸ýÎ9\yyÿ×hÔhÊ©[þ~,µu!ž~v)ÏêN·n™\yEÖüPÆs/,gÜØÎœvÊQ¨šN8¬¶h7‰ýaÉ’% 2„·ß~›óÎ;¯EÕ]Þ ;7”`³Ë ÐÉfúX‚©7*cÕ{<¬_X€l“騧 v—ÂwaèÆôŽœA]E½é&¦ëdîè% žò:ADÓ4Sã‘m2§_;ŠÍ«ŠXúéjTEã’'"ˆ¦úª)‘Âÿý›CÆçàÄÉÇ’Ý6òÕ,µššò: E'!Åtoˆ„”˜ÏoùÎ*ÒrS8æä¾´ê”MÁÊBÌ\IƒÇGùÎ*Ó≄ô¨ºâœÈÑ+%¬²àãÈv™¬Ö錽d8ñ)q€ÁŒGgQSVG8AST$§Ž}Û²ýÇT쮡¦¬ŽÏ^šK×Aèu\Wœq޽ÇÜõ~¾ÿ`9¢$Òû¸£8f|?l™þ£zòïëßBEê«}¢@ßÝÉíÉ—¯|ªjŒ¾`¹2%gœãˆ_}õsçÎåóÏ?gÔ¨Q-¦^’,S°xGŸr"CÏ Š|pïSTí*E’eölÙNn—ûMݦëmó¹aƳ|þäÙ¹v3éù¹œq÷µØÜɉ¦‚»Ÿ1_>û:v—ƒzqö}7bw:8îü |ûòt¾{ã#Ö|1þãO0s+*oßúŽ87î¤&Üv5­ºvdÏæm|ûò{Tíþ ÖÈéÜž§æ‡/¿C’e>Ÿö ‹ß›EŸ1ÇÓ{Ô0R[eCì½¾ü÷Ø]NÚõíÎ9Ü„Ãíâ¸ó'0ïÕ÷™÷êû¬ýf!'ŒÆîvqæ?®£dÓv¦ßñ†npÑÓ÷’Þ:!¦[hÊðý÷?Ïm·?ÅíwLkòóð#/7'êF¿¾]HDÌ|‘.÷Þ”1J­$™)nE¥ººI’PUEÙÿ‚ýæ›Ð«WBÁ‘ˆ‚®E¸ë®«Ø²¥ˆª*Ï>GsŸ~ú<³¿|‰>}ºòØ¿^eøˆ ¹ô²Ä&TIÙ´©íÛwsÁ§!Gƒ\ƒO9ˆ´´$Ö®+@”DÂa…P(%ü*J$L8n1)z,n·›Gy„©S§"IR‹ª›a¸\6>™yo¼~éq<ðÐ÷Œ÷·ß9YbêÁªU{hhsñÅýb>£ö:ñ¬nˆ¢@ÁÖjÂaHÔ?3¢h„Â*¡ûÜ‘„Î;óúë¯3~üø–Ww|µ~$Ù¼ )JPÁô“ Âј† K¶¢*²M¢ÇÐ.½Aj+ÍŠäŒÄ­­¨GMÝø”½Á^‚(ÄÔÒŒ¼4\ñNDI$1-Ê]Õ†A‡Þ­®»ý IDATIÉJ">9.DW°ª(Ü7hlò;ç ÛdÚtÍ¥ûÐÎèšN\¢;¦è†‘X _rf"£/F»žù8œ6ZuÌ2ë) (ap Swí.;’lÚäÖv°» ›]â˜ñýˆOqƒa௠DÌ#hY–b†qI.N8o(­:d¢**AoˆÕs60ûõ﩯öFÇ,øh /Ùm3è;²’MjJë¢~ÎzÔoâ’ÝÔV4€`¶qN» â“ãp'¸ypÚ}û2cÆ Ü¢ê¥* ýNÉ)7]FZ~©¹YŒ¼ô4Eüu Îa¸âãHÊHC¶›P”%ÒSIÌLæûÝ?®Þ]Fñ†@ Çˆ!Øö؉WïQÇ£«eÛvâ«­G”D*wcw:ÑU¾cGЮ_wìNôaâ½S‰CÍž¡)*'\v.']9%F’eüu ,|çÞ¼ù!~üz~ca<%å¯/@ºõ—n¬Ï04M£¢p^O¢$ŸšL\JbL)ŽOM"1#„´d‹O´de¸Ö³Œä”¤f»»òòjr[¿ŸŸyy@mm=UUÊËköÉ8±×‡'99‘¼Ë/ÿýûOdÚ´;uÒ`$Ijf’$’™™4uˆo$±*²y”jN²#F bÌØaÌþr>·Þö$o¼ñ?jkxçíÇp»—P¸}7Ÿ|2wŸ`æP¶ÙlÜ}÷3ÜpÃå@IJ´#’$Ѷm[¦M›Æ¤I“9r$¡Pè^s0Ê"€Ó)sòØÎœ~ZW>üh÷=ð/¼¸‚HDã¡O@–DÊËM¿ºM›ª(,lz„ìñ$gÿ½ŒIçôBQŽ|{E‘‰'òâ‹/’’’Ò"}†Aˆ©†nÍe¼p ‚®xÊjY3w²M攫ND¶ËÔ”ÖÆ>—˜onÔe‰²æuÕ©ÙI$¤Äï “%~ü~3’,Ñ®G^ì4U‰(l[³QÈëœÓäDM×tªK=躎Ýå¤}¯Ö1r-J"ëlA”DRr’qDɳ¿ao [^ç’3c¾»û6ö…ßD’[‡ÛŽ$‰¨ŠFÅÎêèb»6—P¶³Oi-›—bwÚ¢©äz#Û$3PY7HÎHä´¿bÓÒ­¬øj¡@˜ÒÂJÖÌÛÀÈICðÕ›AP•u‹¶ ˆ»7í¡lG6»DNûL:ök‹¡›Y…?îBRãÍ|ÉGnºé&zè!\.×!wëØïø M'³]>²Ý†QbjñÊè™Fßýç]oA4}~ –®¦¶¬2f“á@ÈLÿ¦(D‚¦;FȈ¹4¤ççÄ8¶ª(¤ågG¹Ms¡ÄávrÌ™cé1r‹ßûŒŸ|(Kø=u,z÷:ôëIBF*^O­Œ) l_±_m½™ªMˆD‰´f¨D‚!³Eš¸™FÝ¿¢ÁuZ0ŽD"áH³‰(ÍŒZ–%¶nÛÅÝw?ÃâÅkÈÏω)?]DB¡0—]v6­ó³yä‘—9ÿü[ÈÊJãÎ;®dòäߦ5~6 1zô±w\N›p-Ÿ~:—é3¾àŠ+&ÆÊ¾ÿÁlâ㚌[èׯcÆFȲ²#ö0hÐ ¼^/ÿùÏxòÉ')**jQõ ‡UΞؓáÇ·ãäSßáÍ·~àÔñG1thë˜}¾þÆssÙh¯Ñü˜'žØ³ÎèN$¢Ñ}%IC‡å_ÿúƒ :ð"ÝT}Y’(\o’­”œ$n;ºªÑåèv,Ÿý#žŠz”°ÂÒ/@ºÓ‘6]sÑ5ƒ=…ˆ¢€Ým'1=Jzÿcï¼Ã¬¨Î?þ™zÛöÆVzYÊÒ»Š`AD±`‰5‰±%?51±DшšØˆFƒF,‰Qc‹Š°‚¥ƒtØ¥,,°½ïÝÛfæüþ˜»—]P”²šù>Ï>ìÎ{æÌ{Îùž÷|ß÷ݼl»MP3Ñ\ZÌ>ª÷ÖÚAd–Ez^jÌ“ÜXëeYHLk«ƒ5"¥Û+í¾‚¸$o,q )‹âKô¢êöR²sÓ^ü ͸<:ù#zÄ2>ÈŠD )ˆ$iXvÀ‚’Í{ñ×Û×÷ÕKØ•ãön+ÀãsQ¼a7Âx|nºÌ#«kù£zŸì³碧-(8)Ÿô¼TÞœ>USøjîFÆž=”Úò:ÛéaÙÚbOœ›îytíŸK¯¡]Ñt! ŒÄ6.“ptt¸Ýn&L˜À#ýäòò2’’â‘•þí q ™ F1vìÊË«yêo¯p͵À´L®úÙG„d„ü^7wÝu-sç.aÙÒµ\{íbÇþóo3zðAžÉ&íÎÑÅ-2™_þò—\tÑEüíoãüc‡"íÁ`„Œ wÜ>ŽŸ^õ6Û‹k9á„Î1íèߟ9‡´T;B ‡¿¿vUU™5kãÇÇëõvX"ÜÒ×FĤx] ²ª0ð¤ü±KÏKEA]E=Ë?\CÉæR’3vÚ"!E“)\±Y–Éêžî¶Sšù1âKð¢¨r4˜Ä‚·–¢j á@„ø$o,p§ª´Ön‹aÚR‡VfaDL*KªÑ\*}GõŒ•‘•$‰­«‹íÀ?ºKEQd„%±ÔeI ­¤5«>[¬È¤¦ÅÛÄÛ„¢×K’dK3DÔ#½§UW(8)Ÿ¾£z`DL4]EVdT]Ý—Ab¿|Ä-A‰Ù½³ö@i –iÑPÓD(FsiŒ=w™]Ò£;TM¶å*–ˆÉìMA"!›¼iº†ª)>€4++‹7Þxƒ#Fàr¹Úm˜$º éÏÚO¡È2Íu m²´d`Ø0 ²¢ †=.ŒhjÒã<‘ÛD5b0îŠóé=zèÈxÚûK†ÚØš¬©ífÒXš´–x !0#)9ÿ“ xá¦{Q]cl# `&'üèlúÝ~z–À—˜`{¡e¥ÍnC’$Ç)|$8hG"Ã;v졺ºŽ“Ç §_¿¸Ý.¼^7’ìngl-ܲ,TU!''ƒûþx#ãÇ`Õª­Š~Ùiíi½6Ôû£“¢ ¢K;­ÎÞ=1ýXë¨ei¿cA?1@ZZ÷Þ{/6l`øðáÇECxH{m°O$TÅžl³³íœÖ{v7 (Òíõà>”Žx€šš&OžŒÇã9ª$àHÙRcMSÔ[+HL‹ú=¶\KSÙ¸d+ª¦Ðµn4€ ¡@(æÕl™ëZôº@Œ”–RQR `Ë'Zd²Ä®{‘e‰Ì.i±¢­mJŠæÒõ× ¥HF ̦¥[¦@Qe²{t²çb!hn ÄŒFVöõ}õÞZ[ dtNÓàAX‚æ†@ìˆØçÚguÑ*ª®à‰óà÷ ¹4UiS\$ ÓÜÐÜî}û«›h9B–e[æÐÆKéÖñĹñĹÑ\ª]fy¿¢% UMý!dE¶¥%ûõMGÃ3Ï<ÃöíÛ9ñÄÛᣅ„Œ´X¬ùda›¢Šª°~îbÂÍ"ÁSﺫ9Ø!ˆ°/)!jcú&¼‰ñø’Úüxâcò_RBlެ.Ùs,(ªÊêÙóÚ(ŠBɆÂöó³%0‘‘NꔆeZx“âí~‘ ÐàǛо=Þh{bsv+orC¥-%=X–.ß3Ï0tÍ>Ö …Â1í¯,ËÌ›·°ÍÂ,IUUµøýz÷î D‹D B¡ºþíòŠ.^¼†E_¬äg?›JNv’l‹ðËJËyvæ\ý%„à èÅÈ<6ýœrÊh²²³°ÌpŒØï*)%1!·[o3I—–U¢é>ÀÀˆ„1 '›Ä÷• !èׯË—/çÙgŸåÑG¥¨¨è˜|¿¢H¼ùÖF*«ü\zÉ@2Ò}(Š}$½sg3Ÿ_Izº“Oî†0ftÙÙñüé¡…üëŸSILtÇò›¦ÅÞ½¤¤xÐ4Ûë iö¶·´‘„þæ‘°ÍáÚqìõüóÏçÎ;ïdøðáÚ| Ï“_W²“ñ'ûìͳˆæ ¶ö¾iºÊ°Ó b®æÆ ;Ë£G³Oز[Ÿ %5l^¶`sˆ5ó7EƒôÂQùD4HO‘Ùµy²"ãoR´ªÍ­’GN¯LdE&.ÙG8aûº]¬_´!›—o£joª® Ë2i9)vp³aR¾³Ê>¡h1ïµ%tÎÏFÁú/ ñ74#I'öAU¡eÅ• %+ Ý£ÛžeY">ÙG¨9Ì–å;Èí•Ëá¯kf×–½ôÔ…äN‰l[º‹O^^Ƴ‡—ä#£s*¥;*Ùºª8Œ7ùêS0 Ó&¾ºjW¥[µƒÄÔ8;k†aÒXëgÏÖ2úî ¬¯i"ØBÕTŠ7îÁ4,þ COKE×på•Wòûßÿž^½zÓ1Ð}h–þg¦a0ï…7hªª%9»B*ª™ûÂ먺Ž71ŽnCúcšÇ¿Ï„¤wÍ%½K{·lcÍ' ÉêÝNÝ;#« !€²­Å„šœ2!©yYÄ%'RWQź¹_âMJ !-…º²J>}öUT]Dzö=›çå¹ÿ»›®ƒúÒgìp< >²{wgÇê ¶']SñÄÇÑeP_Là -/›ô.¹ìÞXÄúy_’Û¯'™=»"« áæeÛvhðSpêX$Å>½ˆOKÆŒ¸¼Ö|¼æúFU%ÿÄáH,ÐÛ!Âv^†yw[þlšù}»3bD3fü›.]rèÚ5›>þ‚Õ«7ñË_^ʶ­û´=%»Ë¸üòÛÈÌLçW7]NÄ0¹ï¾”””2í¾£e”åCzg÷o›øÃ“üýï¯Ó©Sš=@Ê+ªÙµ«”gž¾‡þýzbš&ªª0íþ›8ãŒk9êb&OÇĉ'„¸ÚÓìÜUJá–Ùx½iX–ÀåÒ™2eù ¬ ¹9È]w^ÇÔ©§;»¹ï9!–$‰k¯½–³Î:‹—^z‰;ï¼óè76‰ýýÝŸñì̤¦x‘d{<íÙÝ@E¥Ÿ—_º€ì¬x,KЩS¿¿s<¿¼á}Æœ0“K/H¿ütÊ+šxvæ Ê+šX¿öFtÝHÊÍI _¿tüÓ|Þzkõ AžøËdFŽÈíGÅ àÞ{ïeÊ”)èºÞá=ÁûÏ;Ц±âãµÈªLV^*¾DoÌ–Üq.Œˆ‰îÖˆ„"Œ:s0qɾ˜×·¶¼#l é*9½2c^Ô–Ü·’$QYRͼ•DÂ=v¦Sç4–}´Ï ЦE—¾9¬]¸!‹Þ]Ž¢*œöãÝ­Ñ}`g6.Þ ˜Ì}íKLÃDÕUÜ—u‹¶ É6aF²IzEI5²,“?¢;›–nµ+äEÙÐäüÿ;ƒ¬n!4¨ØUÍaFeš®ÒgxwV~ºžŠ’*fÍøÝ£€ ?DÕžòGôˆ¦œ«E’`Ù‡kˆOöÒXÛëçqSGе_Èë…'ÞM}U›—o£¤° E“cê`sˆÁã÷ÉñSãÐÝ:–iQ¸b;Ñl/»¸GÀ„ ¸í¶Û˜8qb¬êê¡NyŽôÜ×e`_&^ÿcÞ}øLÃ`á«ï¶:µ•‘dwœ—‹î½™øÔdD«ìI–iÚ%ûÖö§^±Å\´v±_îÞ¶³¤i´–ö¶HÎûÝ/xùÖ)ÛZÌ[÷=A\j2’,a†#Ô•WÑmèLB êSn¹–§¯¾ „`îó¯Û•àš 9sñiÉ,zõÝ}ß1è?a k>œÏ®u[l/zz* •vIo—×Íy¿û‰©˲ÛsûõüëÖ)ß¶‹ÿÜÿ$q)IÈŠŒŽP_YM^ÿ>v{ûÒSé5zÅ_mdãü%¬›û)Yè5jp«ÙŽ;–$‰¸h"j·Û}Àkââ¼ Ô‡”äÄ}šËbÖ»OqÝõ÷rç]à„†òÁûO³pá Š‹÷ÄÓ€þ½xâ/wrîù7°l™=&''0ÿóQPÐ+ZYœ”€×ëA9@]òøh[&’“OÁ¦ðâ?ÞáÑG_ÀÕ@QÀìÙÏлW7 ȵáÔSF³æ«wxêo¯2s曼øâ;€<÷È#·’™™Ë#¬i*O<~'“μ–u늂¸ÝºC„„¸999ÜqÇ\qÅÜpà ̚5ë¨}oÄ0¹ìÒ Á³3WòÚëëÐTÜ{N>÷üa9YñQO®e ~|Ù@zöLáo3–òÈ£‹Pdûh{Ò½xìÑI$Ä»bå›SR¼<3ãÎ9ïÖ¯/'4HHpw{•e™‡zˆ_ýêW±ÊrßG›1 “ ?„¦kdtNEÕÕVDA0êÌA¬]¸™®ýó4>?F„% ªKkBàö¹IÏIhÙwÍ¥2åºÓøÏsP]vžàÓ¯<‰~£zòʃ³ð%xÈë“ó0“±ç§±ÆÏî­e¨ºŠÇç¢ë€<„°ûz씡”WÒT׌i˜ ›XÀàqýؼ|+½†tEwÙËHÐBUŽËgÜ…£Ð\E«‹‘d‰¤ôxN¾h4¹©X–…,Kü!›ä"‘Ù5=–qH’%Æœ=”´œdügáP„pT»›”žÀ„KFã÷`„ NÉOúÓØÚu<6‚B†Ÿ{:]õeÑ«ï±iÑ2›ˆ ;ÓÂ)W]Ì3ÇãKJh—F´×¨ÁìÙ¼-vüß‚„´Ró²4úq{½1‚Ÿ–Bj^6†F\>O«”2ºÇ…îv£{\±ž=IF(8e,ëç-Æﳫñ<õeUX–ɨ ÎäŒ_^ΪÙóPt oB<A¸9À%ü ùc‡±ð•wiª©' ¢¹t†œ5çžNzçœhnp»=)9™üòÅGùòµ÷YþÞ'4ÖÔÅÚ“š›Å™7ü¹õ³ Á9·^ÇÓgRZ¸aYô1Ð΄áàÛÍËâ «‰iÖQU~ I—!Ëq‡}c—Û ¸ëzlãrÇ‚à>Aº,£»t‚ GÕë! £ª*²¢ 6Çî§i*²âÁßT €/.#âÇ!Ðu YñbDümˆì¾¿ÅaDbUèEA‹zššý~dYÂíIÀˆ4·“4´dÀP5#&Õy¼‰Xf öÿ˜7HQÐtf3;Zg<ìÈ$Ž»§ÎBÓ»£(‰GdhyŸ>ú(/½ôk×®ýÚÏU”þ Yööw©ªŒÛ­Ûù€5UÁëÕhnŽ´“4!ÐTMW#¦­·ój‚FŒ·±mUÂïà"4Ž©LB“¸„sñxO ¨¨ˆË.»Œ—_~™>}ú´ëëcKz"_<ƒ¤º¾öDJ÷èvÊ1ÓŠ¥‹½']EÒ0-"!£MÐŽª©Èš"­Š\´ÅIaY‘QT;UYËw™aÓˆ–+ŽÞSÕUÂ[âåŠs „Ûä'V™HȈÞOÁ4LUAÖ„aÅ‚ÌdEFukÃ~ž–ïn©L'„ˆÍ–¶ªn[ „Û/²¢Òöóîó‚¢`ƒ1mìÝyݶ­6b„ñ`¿B {= FÇJs ÍXÑ=nÐTˆD¢¹þ[Cs»ÚT†“UÍçÁh¶I+„@QU„ea¦}K·sk*²Ç¶Ñ«zÔ¶Ca;kbs#bì ®ûí‘ÛûÞòª®·ÏÖá`_Ÿ´¡g ¹<Ç–  2q¨ß}Óω6î}výw½¯ƒŽO†÷Gee%éééG… ÿÐíµ5¶ êDbùR;ê¸ù&døXΟßÕ¾m_—yüpïq$ìᛎcþ>[‘á@ €¦i¨ªzÄÛõmÉðÑ~/‰oîØø6Ïÿ]ÚãpŠïF†;œOý@/ò›¾Ü#eûßçpï{ÐÈüïx_ß?|"ìØë×CUUÔhB~gÜ;[ø¶}ý]æñýǑ°‡o:Ž':r–”£õ^:R»wl|›çÿ.íqæÆïÙé8pàÀvàÀ8pàÀ!Ã8pàÀ8dØ8pàÀ‡ ;pàÀ8pàa8pàÀ~@8Dj5A„0ÂtzÊÁp|+™ IJœ2šmñ}œ{aNŠ#GbDŽÝÜdÉñ9ø¡Ž%ãcé E7„00Œ½(J ŽÙÁ’äB’ŽDJœqÖ²’xL‹þ|g*l™ˆ¦J$‡T88"›däMþÖÅ0ç{„¿ÞÉSëà>–dùðȰ8pàÀ?t8î 8pàÀvààÇëÄ9œqúÇ?4€Î4k©*»ø¤+¿Wš=šÞEI:.ß.Iå{,{Wц›Ä%\€×wÒ÷§Í:" žÕå¼@ßfuÄåÈÉú†3òÅà(k“88žcI>Éå9<2 H:’$;Á ~à¤+jïÇ’¤#IÎB´ßìõ=œ{$P4$Es^Ÿƒï>7q ç&EARœŒ6~¨ë¼uÈ¿;,×8pàÀÁÿ,2ìÀ8pàÀ!Ã88rhôå€9pàÀ™O8pȰÿShI^ÿæ›o:‰ìjkkÙ¼y³CüÏÎ';vì ¢¢I’œ1àÀC†7ÝBFœ ÄÁ±€eY”••1dÈ.¾øb§CŽvïÞMß¾}yî¹ç0M³ÝwÐñæÝ¯ûÝ·½þK–,¡S§N¼÷Þ{ÿóžâƒ=ÿ±î—ý¿Ã±[‡ ·ƒ¢ÈhšzHÑ4EQŽš)ŠÌ®]¥Ì˜ñoÊÊ«¾‘‡N¢((Š‚,Ë߸mŠ"£(гkÿ'UUUÜsÏ= >œ¯¾úê˜|¯¢H(Š„,K‡a¯ög$éû1·ŒÝk®¹†ÓN;wÞy'öûïûxB Iö³H’„$zóÛäËÒ¾Ït ÷(IÍÖÌßÄšù›0"æ!ç^I’4[]o|«Ó»¥6?_ÛRÛ~¤9ZFöÜsÏeÊ”)|öÙgÇu H²Œ¢ª]'…H²Œ¬*ÈŠü­Û(„@AÐßL ±)öž[þ&+ á@ó—°ð•wY>ëc«k‘…H(LsC#F8|TúH’%¶.[Ã’·fS]R{G¶mIH²ûù&d¹õõΉⱅz4njY‚  Ù±c§Ÿ>—«}Ê(Ã0™;o)‰ qŒ1Ë:ò†ªª*Ë—¯ãæßü™!Cû’•~ÈïBàré¬^½ I‚´Ôd2³Ò1̓OæBTUeãÆ­˜¦IFF*éé)!þ"Á- é /¼ÀwÞIyyù1ûnMSX»® I’ÈìGjªÓ´i¯B@aQ–Y™q$&¹[r8}/0þ|–-[FFFóçϧK—.ßkû‘™Æ?á`Ø&c– 5+é€ïÐ&fĤ¾ªÑκ%@wiħÄaYÖa/¢1r½Wk²ñm Bé¶ >s ÂôÕ4å×ïÝÞúú ~?*ªBmy=¦aÚ$W’HÄûQ–eÂÁ0 µMöÀÙgŸÌûïÏ$lv¬ë€qýõ×3wîÜc;xU…å+ö0qÒ?÷ÙëößçÓ±,q@{UU™Û~÷Ï=¿ €k¯ÆcžI0h|¯ú?°sçNºuëÆ<À7ÞˆÏç‹yɾ/ ˆ$Iøëšyã±4…¢Î‹~£zrÆOÇa„ÍvׇšÃ¼ú§Y47hÉAëwsÕýëçB4Õ6£ê ©ñßi\(²BYIªª€$áMð Eàqk IDATJîY¡|geôzðÆ{ˆ„4ÉŠLåîj^ypŠªÄHöIç gàÉ}–hG„ªyñž·b׃ ×nL¼òûQ䥡¡ 6——ÇO<ÁW\Ëuìˆüôý¾Ä„L[:‹HcS»k¾|㿬ùx’,sׇ/¡jߎr474QWZêÒY={§ŒÅ2MdYaõìyÔî-GAσHHO¦¹¾ 3bP»·Ë4YùÁgLùíÕ ÙÃp ‰H „ªkm6’,óÙó¯±|Ö'¨šŠeZtÔËúÚ~ÎÁ{\ôÚ{|øÔ?Qu!™=»rõS÷¡êNÎòc£"“${¡n1—ƒ-`Ë :B¡0YYéhšÊÝxM×81K’D8á®;§  7qq^>ýt ‡íÖpð½ƒ$IìÙ³‡n¸!C†s"Ü2ÎÂQ²Ô³g O=µMSh¯²,ÑØâ¹çW1dH²,±xéî7—|ÝyçLž<™¿þõ¯1Ïè÷ædF‚ÒâJLÃBQe$YBwiì.*#2è=Ú´d+á`„„ÔxUFV$2»¦£jßNr&„àË÷Vñòïòú#ÿ%§q!I°|Î$FŸ5Ó8øÉZìúׂ$1jòCžl¬ý²"S¸ªÍ¥!ËŠ"#ËeÅ•Xf{¥‚/f­ÄåÑñ%zPTUSIÏMF–¿_ž¸ææf®¹æÎ?ÿ|^zé¥vörÔ6㺎¢©Q²&²IQb×|—ýizçlúMþ Ã8éòó1"öØ0 ƒk7!„ ­s6þá&¦Þu#—>x+–i2èŒqô9ˆI7\“0+(Šýܪ®#+ ÛV¬a÷Æ¢˜d¢µ=FÂa¿ù_T]'³gWTM£dÝfLÃÀÁ÷˜ ×ÅÍ6$]×Ðu U=ô$¯ª .—ަ©‡\…°É·®k½¶ež0aÙÙ¼õÖÇ”—U¶È-’Šýë=TUáw¿»šÄĸ¨NZ`ç'¡ij¬Ów¶Lâ-:–Ï(Ne c›Ï>û,£GfÆŒøýþãÞ¶Ë/Àûl¦¾>xÀ¶{<Ï=¿’N|\íEFUåCØ«ŒË¥ ªòA5©­uǶ½Ê躂rŒ ÅÂ… ùõ¯ÍgœÁúõë¿?A³*Kª1"nŸ‹c^ÌÐ~¤T’$k›X:ç+B0ƒÆõÅŒ˜X†EßÑ=1 kÁ”íŸvó[ô÷1º,€€?„Ë£ãö¹ˆK‹?ðg% E•Q¢Ð6÷l™K%h¬õ£é*Â$¤ÄA”¬ÚÄ}?í¤Mu~TÝžã’} ‚jùüî!I²(Ù¼I‚ÜÞYÄ%ۥ͈ë—Ö(Zµƒâ{è^Ð9F¨óòs°¢÷=Ðw·ØUK?¶ÖK’­Û·Çƒ}MìsòÑß Í™3‡Ÿýìg\pÁwØÓ‘¯ÜjMk!ÍŠ¦¶#‹B²zwç»obê7ׯ–i‚$ÙŸSmo³¢iÈŠŒ‰`&²8û×WqÑ~Å —L9à}%IŠ}¯¢©±6ì]µmç7ë_Ë4yþ(ªÊšæ£ºõ6÷—…ÒÂÔWTÓuP_M< Óˆ «JûõGYUÚ´YÚO³Ýò\²"ïû[ëçTUpb›ÚóÈŽÖ Ë²(+¯bõªMlظ !,úôîÆ¤I'âñ¸Û]_SSÏܹKÙ°±ˆœœNœxÂPz÷îvÀªiš|ôÑV­Þ@vvcÇ ¡gÏÎ%ØÏÍœÆé·.â²ËÎnSÎO’$šxðO'55‰‘#bšÖ~8aýúBÖ®-¤xç^rr:1rDön3aY–żyKÉÌL'?¿»v•1wÞRvì(aĈNt@,èN’$šëعv3 ÈêÕ”ì ªw—³·pMµõöæ±ÉÏæE+PunCàKJ pÉJB ¾¤D:èÓ¦„eQº}'…_®²c),ArN'úŒŠ;Þ×nþonh¢ðË•ÔWTÛ§þ½é6´ÿׯ– çÈA,ýÏÖ|²ˆS¯¾”„ô”Ø)–âvñòíFw»é>¼M×ÛLÍ­Û[µ«ŒÝ›Šh¨¬aíìüîô>UÓ¢5™Ò¢Ô–Uàöyé>¬€òí%.^…£»Ýô5˜Œ®¹Îâ~,ɰ½[–cUkoB»]ט6í9þúäËôêÕ…ÌÌ4¡÷Þû7ú÷ïÉkÿ~ŒÞ½»bYº®ñé§‹ùÉOï ;;ƒîÝsY½j3÷Üóï¾ó$#F´õídÚ´§Ù³§œ¬¬tÖ­+¢²²†W^y˜ /˜Èþ›$Ã08ñÄ¡$%ÅóÊ+pþù§¡ï'—øâ‹Ulß¾›Ù³ÿŽa˜|þmÛJ¸úš»Ù¾}7ÆõCÓ4>ÿ|7Ýôüãüþ®ë‡m=išL»ÿΜt«Vmä?ý¬Ìt\ºÆŸÿüú÷â£g’ž–|ØG‰¾= –$‰mÛ¶1cÆ ¦OŸÞ!Û‰˜LßÓ¼ÿÁF ˉµá·ÞÞ€i ¼ÿ4üÍ‘ö^YbéÒÝüú·sðûà è„$IÌžSÄÍ¿ùǧŸÉU?J0hë9ýþ0¿½åCþxï)Ìž]Èó/¬$'7Ó°xä±EŒ;© /ÿë"¼õ€棉»ï¾›™3g2mÚ4.¼ðB¼^o‡|o–eð‡bs¢r‡H8Bui-©YIX–¶»°”ÕŸm >ÙÇ ýØ]T†$KaƒÄ4{“¬¹4>{å ÊwUÑkh7zíŽiÙ2…¦Z?o?ùŠ*sîÿNRF¿´}—W·ßiC€·þ2·ÏE÷‚ΨšŠ1˜ûï/Ù°¸Y–°,e Š×ïÆåu±æóœ8u9½2Q™­kv"Ë©YÉìÚ¼—þ¹€š²:T]EVdŠ×•pÎ/NCsi¨ŠÂÖ5ÅH²„/ÑC\Ô3,I–e±ô¿_±iÙVj+Èì’F(Æ_ߌ$ËœzéXòGö°uÔ0fÄŒ®åöÎdå§ë¨«j ÔÆå±ušª¦²yù6¶}µ“Ô¬$ŽëËâV!Eß…/Ñó$ïÙZÆìçæ „1  ‰¯cÐÉ})Z]L¨9ÄE¿™Œ”‡i æþûKÊwVqÑoÎbÙì¯(\µÓ°P5#b2|â@&\<šðAôÓG7Þx#Ï=÷øÃ˜2e š¦uBüÒm H*?ºï7,Ÿõ1ÛW®CÑT4—‹Ps€ñ?½3oø fTQZ¸ƒÝòšKçò‡î ­s6uå¼pëý$&&¢j5{+xíîǰ “[Þy†øÜL^ùÝCDB NK^ÿÞ±ùÜGxïÑgÙ8 Í Mt)ȧ¢¸„p H·!˜tÃOÈêÕ5F.ƒM~^¿û1v¬^ˆ’PÃsÚÏ/Esëm4éZG²ûô .%‰@“ŸÕsæ1ágÇÞEyádEÆåu“ׯ75{ÊÚs(EæÃÿbÞ?Þ@QöÑ6Eµ=Ô½F fê7àKJ@VdV¼ÿ)Ëg}BRf#Ï›ÈG3^²5ÖŠ‚¬ª|þÏ·øÑ}¿¥Çðg¡?VdØï ëj»,ÍþÀA<\ÿyë êƒKב$˜;w)gOùyü%žüë(ŠB(á·¿}˜@ ÈüÏÿ‰ªª†Éöí%dd¤î綸úê»ùã½7ðË_^Š®kTUÕÒ£çÌœùgL<‘¸8o;v¹t~ÿûë¹å–Gذa+C‡ökãe~wÖ\ êÃ)FQXX|Àç ƒüä'ç1åìñ$&ÆÛi„Anºéî¹çI.»ô,ºtÉŽn$’’â™þ—P_ßÈ—_ü›ü|Û;óég‹¹âŠÛ9ùä+)*ú+r¬÷läš››™>}:Ó§O§¶¶¶C÷øx¿¼~$3žYÆonKr’§Õ8ŒðöÛ9eB7†ÍæóÏwð>Mþ0¿ùÕXN;­>ŸM jjüôª·¹ù·s8û¬>$%¹£ž4HKóñû»?C’%f½s9Ù Hüë•5Üqç'üä§ÿáÝw.#2yŸìÚµ‹k¯½–G}”¿üå/L˜0á˜ë¿î…šÃìX_‚°OÎGwk6Á˜Tí®¥×nÑ ¹ ß^ŽîÖèÚ?—Ôìd¾|oAþˆî(šŠi˜„üAªKkÑ\ÝäÆœ’$QSV‡Ëk{2rS–àä GQZ\ɺ…[ÁISG¢é qI^T]!øïsóØST†¢* žÐ¼>Y”lÞËÆÅEX\^ô\;›e J6ïEVdjý,ó}Gõ`Ü…£(\¹ëwSQRMù®jòzgE¯/E’$2òÒðø\1¹ÁWó6³jîzRâ8çºSÉíE8惙si¬õS´º˜žƒ» ¹4öl+§±Ö¢*tØo¼mûMµÍ4Ö6‘˜4Ô4²èåÈŠÌÈIƒÐt•Š]ÕX¦ÅÀqùÑ£t‹¦Z?Ìœk{Û™ÉWŽCXë²váfTMAwk$¦' € ?HõÞ:|‰^>s ‘`„“/7ÎÍ’Ù«iªkfãâ"Æž3ô˜Úàš5k¸âŠ+2dO<ñÆ ë'YºO¼Ožy$™so»EUx÷¡gˆKNdéæ0梳HHMŽ˜é^¿£ÈË"!=•Kïþ5«gÏ£¢x7I™iŒºà TMÅ›–…îñ ÉJÌk*„@÷¸ùâõXóÑ|Ró²ùñCwÕ³ Uµ|4ã%¶­XÇÒÿÌá¼Û¯G’eTMãÅ_ý‘ª]{‘$‰1ŸE÷a(Z²š/_ÿÍí"ò5ëqbz 9}{²mÅZ6/ZÁØK¦Øm’$–Ïú3bš›Eç‚>TïG†[ù²·?dè™›îÿµgñ GÎ ú0h`~›l qŒ?’¿6›={ÊèÖ-‡ǹ$IÔÖ6°}Û'äåebDSÑœ1ñDzöèBaÑŠwì&;;ÃÑü#ÂÒØØHccc‡o«iZLœØ“Ï,cáÂ\0µá°mw;wÖ±xI o¼ö#,K0ÜÅ4-N=¥Gìß-öš›“@ßüt–/ßCy…Ÿ”¦Ù¢“„ʪfvÝL|‚+ö¹+~<ˆûøœ;j©¬ô“˜à>N}bRWWG0ì›-}3FØ@’e²»uBwÛºG Ó0cÞ£ëwÓPÓ„ÛçbÈ©ý1 ÓöÀ*2Ù=3í#WY¢º¼.z'HHo““¸º¬>–B-.É HôÕ“ªÒZZv7Ã'`„ ö±qEI5Õ¥uH²Dÿ±½8ñ¼áH²D÷y¨ºÊWó6‚$Ù÷jc™–- F8å’± ßË$¦Æ±mÍ.„4T5"õÉ&ǻ۫Ç2;”—T³úó (ªJ·‚ÎôÞa ¼ 4÷¾e£þúf,K Ê)™‰è=&}ˆD3¥È²ÌêÏ6 ›äö΢kAÍÍ”n¯@Qer{ga™v ãº/¶`„ $.¹ýlÒsRBÐ¥_³žþ”š²zdEÁçÂ2ÕMÈŠ=^̈ÉÅ¿=›Äôx,Ó¢¢¤š¯æoBQÀ_ >ÅwLSF"êêê‡Ãr~ýù“÷’Ñ-Ë´U…¦?ªk”oÝIbz Â<ÀÚjY¤æd’–›Å¶åk©(Þ'!ŽÁgŒÃåõØžÚ¬’,S_QÅçÿxU×yþtl;¹|I‰Œ»b*[—­aÅûŸrúu?&>-‰ÚÒrê+ª2ù&ßøS0àÔéÔ£+³þëÔë!9+ÝvLÔ7PY¼‡¬^] 6ú)ßa‰¸”$\)Iì#Ó0¹õg‰OMÂŒ1ðÉWNeÍÇ 0"þº†vve™&£/œÌ¤ÿ»I–vÖil[±ŽÆêZ6±‚ÚÒJһ䰯þ×pÔ·¨×]w17Ýt7Ýxy›ŸŸÿü‚.†a¢ªvИeY444áoª‰Ô¤¥&3lXª«ëxðÁ¿Q[Û€Ûã9`Pœª*\wÝÅÈÑDÖ-GpÙÙé„CšÚþôô.»ìl¦ÿå%‚’$¡ë³Þ›GC}'4¬¤õóX–½0¸=nTU! S]]Kc£¿Ý3µl®½öbºvÍŽa!qñqŒ=ðØQ¼ÇÙÉ£‰ÚçóñÐC±jÕ*®¼òÊßæÁƒ264›G[„iFD‰Yïo&>ÞÅðaÙÆÁíµE÷îñØQùÁ Auus,õÚþfDøý'“–¾/¿±‚ôtÇåÐØ¢²òøfddððó~ýzÎ:ë¬ånéÏRãìÔSÑ@™æÆ ­n ²ü£µ„aºôË%#/•ÆZ¬ØAbê¾8‚šÒ:$t·FB+ý­¢*l]]ŒôÚ5t$„ he1BÀðÓ 0ÃÑ…Vز¢U;4Ñ\ƒNîk÷ZYUb²„´œdâ“ãìù+ŠÙPç>YôÝ“H؈zXÛÏY¡æPuEU–`ë*[c¬ê Ý ò¨)«cÏÖ2½³œÆê&LÃ"§g';PO@ 1ˆíSo¼·Gn ®ªI’(ÙRÊæÛ‘$»¼qnkš‘[ú‘”žBÄú[’%ïKFn*¦ab™º[LjX†IßQ=${M©«jŒÉ5N½l,Éb›™¶Ï}lIG=˜1c+W®d̘1Çײ¿1æ¤ËÏ'³WWŒpË4IÉÎÜG̾ÁgYÖ>G”°Iò¡$ ’µ{Ê‘=f*wî¡rçnÊ·ïŠoEU46!É2ue• BXtÐÛ^ï… Ò`ôÔIáÈ7Ù•sâeç#+ Uµ-]‚ʻٻi‘P˜³oþ9ÀÃÜ¢ö&Æ#DÂavª¹úŠjˆ/ýmâšâR’yÞ1b,,‹³nþ9‘`EQhª®u¸Ä±ò ?øÀ¯INNlGËʪxþùÿ´#ªªòɧ‹¹å–‡©¨¨ÆˆN(û_'$‰¼ø'nÿÝcÜu×ã<öè‹\sÍ…ÜrËU$&Ƶ‘e!¢)ÓÄ~©m¹ævªpΔ ¼úêÌ_°‚É“Çaš7Ü0IgžD÷îy‡$SªªRW×ÈãOÌà™g^~ƒðA$I„B¡6žd;¸Ä`âı<ÿü[vª"Çv YiyÌœ9“+¯¼’{/¾ø¢C¶9!ÁŤ3zòÀŸ°zõ^† Ë¡Éæ‘Gñ«GãõꇴW]W(-mâ‘Ç1ë½M À0@ä «K0i£ ¶mØ`ÊÙ}Xµj/Ù+UÜrË-\ýõtïÞ½Ãæ–d‰úª$Y"Œ—ìC²ºgP¸ªØÖ–Ê2…«¶S]ZKF^*§\2Ó°¨ÜSkß›$¦ÅESXÿE!Š"“ž›‚;ν/ø§±™ÊÝ5H²DNÔ“ŒÍMAê«‘HJOhã 2M‹ÆZ›¬«ªBZN "úžÍˆIIa)’,‘˜æ²—’’-¥øë›Q™Þú¡¨²}O ¬Ÿø퓸ÝEe4Õ5Çä -§¶¢I–‰#Ìyáó¨ÎÓ Ð$#/•“¦Ž ç®1‡ƒ¿¡$ Ë0qù\ »[¥;*øC›—o%Ô¢Kߎë @ÅîêØ÷$e$P¹§MW1 ‹¼>Y˜Æ¾S’¦z?U{jíª>YX†‰âÒøòýUȪBV÷ :ççĪî Kì{nIÂã;vnî»ï>®ºê*rrrbãûHŽ3i3ðþ­þ»vûÏ¢ÕZ'Žúd! GÕÎ.xùVg»j^8ÄŒ¶–Ü´l {Üß.S$vJ¥ËÀ|¶.[îõ[(þj&? úš—uÈJ~‘P˜Ïfþ›Â%«mÍrÈ>…‰„±Sv©l% Ë2÷‘jaá‰÷Å2S„švög¹?údØ0L"-nýý~ßžxªÜ7mÓ¦=ÍÍ7ÿ„K~t&¦iç£`ÐymwJBàvëÌøÛÝÜüë+yæï¯óØôðÚësøô“ÈËË& sݵãvëÌ"ÑÒÎ-…;7î ,Kð÷¿ßKç¨Á¿ÿþ<þôç™ßØC¹¯Ï|¼H±¦iœzꩌ?žéÓ§sÿý÷ÓÐÐСÚjY‚sÎÉçáGqã¯g³rÙõüëåx=çŸßï9TeYbÉÒ&MþÝ»%óôßÎ!9Ù>ÑxäÑEÌžSxÐæÀöjE«š»©vذa̘1ƒ‘#G¶iKGô~(ªÌ·—£¹TN<x,n×þ¹lY±ƒíkw±{Ë^¼¹US9iPLO»sÃn$Y¢sßl¼ ¶>6äŒãÙ^f%|#±»° Y‘±L‹„´øè¢og~%Û3ŸÒ6­Y8fó²m¸}.4—ŠêR 7‡m)Wy=‘M†Ü>Š¢Ää Â(n…ì™­œ|{¶•ÙxÈxâÝXÖ¾ëeE&¹S"BŒ°AáÊènü‘=È镉i˜$g$â‰s“Ü)ÑŽ¤'#d°á‹"T—Ê)—ŽÁŠ®-ÝæQV\Éò9kèÚ7‡õ‹ Ñ\*cÎKïµcm rJ¿˜GpÉ«í¾²nŸ»MªªíëKPTË´ìÍò 6Ù•Ïz ìÒÎsY¹» ÐtO’—°?tTíq„ ̘1ƒüüüÎcG c/>›¯>š¢ª„ëÛÜ?¶ «k %לžßîºãIÃ,Ó¢àÔÉîÓý€sa§Û9ñÚ‘Uép¾Ïdôg²åË•lùb{·ìàÿýEÓ=õÌhv ù žá‡Ï½Ë4Q4¾' Ç𘃞þWìtåëçg):ÏØÙ^¯ð1$ÃßxaPd¶o/aÚ´§¹æš‹˜þØívYB@QJR ägÏÎ<þø¸âŠs7î ž|êe¦?vûk[^^&cÇáí·?á«Õë¹ý¶GQ…‰O8(nñ¬<û÷7¨©©§¢|驱r”ë7ôs@UÓ0Œ`LÖ!Ë2ï¼ý)Š"ŸàsvrÇ‘+ŠÂ­·ÞÊÔ©S¹õÖ[™3gN‡Ñ¤ ýúf0tH6»JêÙ¹³Ž›~=›^½Ré×7ýŸ …Lþôç…,ùòZÜnÓ´K>§§{:Í6"hªË2aK3d^{}^¯†Çsô‹Ð <˜I“&qÿý÷LjYK[:¦1AS­E³eIé‰öñ®qI6)Õ] ßYŽæÒÈí•I—~96Y4Lv–"˾DoLgh Ú™¸<º­=– èñùKìôbšB|²/¶àïÝVŽ$Kx}.Rãö[ômâmù#{ ¢RI’øêó 4ÕP™„”8dÅ–Øšl2.ÉÞV:ñH(šù›‘d‰ÜžH锈¦`‹ wìÔÂÎákY‚œ^™ 8¡O4o¬]J¼EÆÑÒu~dUFX‚”ŒDû”ˆOòa Ë£óùK™!ú‘Ñ9Ó°ÔÙý˜œ‘Ô*ǽ-?IÉLÄÝhÈŠL}Uóß\ŠîÖP½ºíÝ௳½ÒÂÄ%{‘${Sªj eÅ•ìX¿Y‘™8ufÈ8j69f̦NÊ-·ÜrT<Áí£ªÆÞCùö]äôé+¡¨* •5¬›û%žø8ºé£CŒG» žM0óú÷fð¤qíýÕ²„-À¥h*R43OcM]¬oM¥¡¢ú›ç6LrûõÆ—˜@8ä݇fàŽóáòyé:¸¿}Ê € Ë2E‹WÆrŸ}óÏ|ÆÉïENΑIDAT±´ŠŸÎü7:Èw„ÁØ Š¢©”¬Û‚¢Ú¥ÈãÓ’)+ù_‚Ü‘V‡Æ¨v7!Þ‡iZD"F”lúÛíÎZŠg´xLƒ&úæwçôÓO ¹9xÄÓ4ùý]×G˜tæµíä±ÇnÃãõ|ÍQ‰ M “ž‘A0Œ>“I ùÀÆ«ëo¼ñ! ,ÇíÙ—  ²²†5k·`&[tKŽ#éôèу7ß|“ 0zôèÓ.ð˜öÇS)-mä”Ó^àÎß„®ºx­ùµÿžî#4ˆDL ÃŒUºÛ.—Êsϯ`ͺR\Ñ£rY–ر£–-…U¸]*¹y Gõ™o»í6>úè#þô§?µ!Â}cÕ’_WABÔ++„ˆÊlÏmc­Ý£1ø”þ1Òò‡bN5·×ÓB›C1ï²6Ð\¡@„Ïß\Jв«tå¦à‰Ê'dE¡h¥ÖÉíuáöºÐ\Z,ÿ)LS ¨2›–mCR4]aõÜõlZ¶Ý®ô¦)dõȰÙ,¿±0Â&;Ö•ØéÓt•¥sÖÐÜ@–eºõÏEsköõ èQ®À•NìœÈ²,Q±«¢^Zõ¦‡BpŒ˜7Dõº-ºë–~LÎHÜç¯i"-7…'ô‰ÉšêüQâ ñÉÑüÂÑ\Ë-ÞïúªFt¯N}Uþcª¦`™‚nòìâÔ×4!EIô–åÛ1Â&z¼›ÚŠ>|q>.NJfÝ òÚUÃ;"äNUyøá‡™3gNŒ‹ÓÌž]bäwÎ_ÿAÍÞr4ŸÍë¡¡²†~u/¾Äx‚M~N¾r*f(ÜæG‹´Î9˜‘²"³uÙW­ä,¶!¨Ý[µ#HÎÊÀ2-$EfË¢åšüè‰ñ4VÕòâÍ÷áòz¾ñÜìòyræx,Ó²µÈ@þ Ãñ$ø:7K4TÖ „…îq“Þ%7ZO°{ãÖCV© 4úùäï¯ÐT×€žOCe KßýYUÉîÓÔœ,'¿£y†…°HϰäoÚ´ŠŠj<~nÿÝt\.=vÜ*I‹—¬aá•\táÄX*µ¯¾ÚÂÂE+¸õ–«ì]Ð×Vm_û·ïsÿ(ŠByy5—^2™p(ÜnÂimX’$‘–žlO³çqâ‰C±,ÁÊ•ëyò©WúÍš¦rÚé?çÙgÿÈ™“ƹÿþg(,,æ…îÇãu †œ#Žà%–e™#F°xñbüqî¸ãŽãê%–$‰HÄdÌ[Ë^ZÖ„$Á¤I½1Œä¦­íN!)Ñöæ}6w}ó30M‹ÿÎ)dþ‚âƒNÔ²,qö”Wxêɳ92‡úú7Üø€Áî)±¬G š¦¡ë:+W®¤OŸ>|7y#¥È2å%•È’„e|‰ÑüºHè­´Ä—à%¯wVìÿõ5M$ð%zbÅ \=VmóòílXlŸ>i.îÙ¶v' )ûä­ç«Æ:?ÏÜú*BFœ11S†¢»uòGv§xÃkš˜~íL[›¬Êäöʤ¦¬+J: DؼԖUH²Ä‡ÿ˜Ïì>·‰¢ª€$‘˜æ£àÄ|EØ´d+šKeôäáXÑÀNMWé7¦Û×ìb×…¶þ·G–%Ø]TÆúE[øñçâö¹bEFdYYÆ—è%¶³@è^½M?fwK'>%.êm³‰vK9è–ÌfÄdÔYCxÿ™OQT…wžúØÞ.¯‹~£{±váf2:Û©éT]e鿊yáK¶”òô-¯ È’½Y8á¼aG<€Óår‘””ĪU«ÈÎÎ>¦¤F’$ŒÿÿöÎ<8ŽòÌÃÏtzîÑŒnÉš1’…1rbrá*g1±9ŒÁ`pª—w] ¡  ¡Ø­ åÔ»YªBvã…­ ÙJR)ÊIÈ I(²›Ã±ÅF’mE±îÑÜÓÝÓù£gFÛò-$¡÷ùOÒ´æë¯ß¯û÷~ýì{å5ÿ¹‹¾÷òÔÆ{ËÂ’œ.»¢Ç'7ÝLó²%ey0gaõÉ7Ê[ø«C¬Þ¶™_>ýo¿ô*ãC#¬ø‡«Ñ¼.ÆúÙóâ+T5Õsûã_ ÔXÇG>}»ò2}ï½Ï“ë¶bçÁ[@óz qȧÖV>O¤ý"^ûÑ‹vÙÖŠCQ¦¼7[y‹hûE(ŠJbdŒß>û#®¸m cƒüî¹S y˜Šþ®n¶ß²µäV´T[ÇJ*Ü.y˜O¯v+Ä“©SÜœ…]Žbriæ‰Fxæ™Ç¹ï¾¦cÕÔÕU12ãž»×ñßz”ïî˜H¸kn®çµ?¼É#<Åå—·c&{öìçsŸ[Ïg7ߌiÚbØáP0Í|)äâØq¿»´U^¯ž3Ê‚ =ÎOv>Íšÿ‰{ïÝDMM¸Ô,£èÇãIššêJ†©( ·²oß_Xsã?rÙeíd Ù¢O~ãKlþìÃ…qM,‚\Nçž{nbÃm«¹kÓƒ|ùËÛ²ëÛ~å+[¹}à dO Â…™Å–eqÿý÷³aÃ{ì1vîÜÉààà´qyM~ض?¹šú_ìZü>tzÂ^5ME×óÔÖzKÇjšÊƒ^ÉÐpŠëW?ÇÇV6‘Jë„Cnžú׸}ã&’Š;ƒû¥KkÙx׈D‚>¸¥=Šk–±oW†n¬ö—Ú›ºÁªuã—ÏýžÄX ‡bW¡¸¸ãB;îשÐvi+½ûûÐsy3OcK‘¶F4Wß>ĂŠ¶øu@b4žÕ©Yæš;:øÍ÷_cl0†…§¦YÒÄêÍŸDQXØm›ívÉ&uÑšÒÛ.EUXvÅ…dz÷ÿ•Ý/ïåÿeg0yün.m"T_è¸çt°ë…Ý85•+o¹´´ëkY^¿oÐC2–¦.RÍÇo\1±nT…®Ý=è9ƒÆ–ZU¾Â«d‹æ ¸`Y3]»»Q ŽCk{„«n½Œgú>n¯Ë®[ è½´]©¡¦1Ä›¿{ÇNn4Ljš«h¿²ÖK¢“vÜÏŽŽxàÖ¯__ºÿ|kÀ²,Ü7?¼Wþû‡ô¾õŽ]‡·2`èÍ_ÈâË?Ê•w®+T<˜ŸÛçµ;Ç3f§f7É&SeŸwj¶ƒh'|9ÊÖ’‘ÕɦÒèÙlùÿ+”+ëïê¶Û7—>ŸãÒµ×aä²ì}yþï-ÞÛõ§Â*xCV¬¹¦ôæAOgX½íâÃctïÙ‹žÉbå-j["Üx'ÃGúùß'ž:nŽòù<éñ .ZD1‹Ø²,.o£~Q”¾wn¬gIÇÊãÎ)“Há úK¶\¿(ÊŠ5×ðΫä­—^埿‚æñpÕæ[ñ|ìüæ3˜æñ;Äž Ÿ«î¾…7~ñ[zßz…L<ɪ;>ê;Ö–µUŸ÷Ïrk wÒ4Ç:úÁÐ](ŠÿŒÊÀÀ0##ã´µµœ0i'ŸÏsèP?~¿—ššpɲò‡ý•îî#X–E4ÚÄ¢E‰±Xœ¦¦z»¼e‘Ngéé飯ï(8 µ%B$Ò€¦MtÚI&Óôõ%iÄã)÷‚’É4½½},Zµwž]78xð0áp€úúš²Ïçr:ôÒÜÜ@0X>'†aÐ{¨Ÿ×Ccc­}ƒ,ÈÜT*þ}a,Çëu³¼½ ¿ßËûÝGhj¬-µ™Öuƒ[מ¦¦Zv|÷_èÿÛ ïì?ˆiš,XPOKK§S•vÌÓðV¢BkEU+ÏËÿËçó8p€µk×ÒÕÕuZ;6ý_@QμKZ6kÐÓ3FCƒŸ`ÐUfÉdŽÃ‡c\pA·»â[69t8FUØMuµ·”-ññ,ûß$•Ôñ4.¹¸MSéî% ¡i¶#;2’â37}›×-åk^MÏ¡1ºº†P †XÐ,­Õ³±WË2ñoÂãý{÷îeùòålß¾­[· gDœrÌéú®oãpžzÇe|8NÞ´ÐÜxî²óH'2d’Y*\ÎRëâ"™B¢œCqûÊÚÖæM;aKÏ(…ªšGclpÜ®Óð c ñÑ$±ñRâ] Ê_æäümŒL"ƒCU×Uâö¹È¦s¤\­ÔàÂÐ ÆG’¸½Þ ‡Äh’ØP,ðÜTÖKñ¸öƒA|Ä«¬ ·sšËêv¢^F/íàªvBŸ6±3:`·ãõ<¥Nsű'ÇÓèY—[+%÷AŠ%ÚœšŠ¯Ò[æX9ƒÁ#ØF—×sP*£1EÁ²cµ³©,/<ý£1Z—G¹~Ó':2B.c¿†7TÚ$ÎÖžLçÊ(áÏ?ÿ<›6mâÙgŸeÆ ¥®Šçc X–…þú 8œÚãPò†A*g´À~}oYx‚~*ëªqû}'tXÇŽadsø«B¸'Õø7tÝ (4Õ¨(<—§ú=ÀøÐzÆÎ³ ÖVOÄð:ćGÉ&S¸}^|áãÛR§ÇvIµ‚xvjjªT‡ »ýŸ7uƒžÃd’iT§JM¤ o(H&ž >|U•;½–E|xÔ.oætRY_S67ÙTšøÐ(N­‚Ê‚)Žc|p˜Ñþ¬¼…/\IM¤=›#>4Š'èÇ[@u:yñßv°ûg¿Á_âî'Æ[` û¦a¨ SÕÔPÊW˜/ZÂ2t*V~‡ËóÁ‰ás]”“_Š^÷É.XñoçÓóž®s:ÙùLÃÿõŸO`fÁ‘pœÖ<³C OfÇŽtvvN›ž^{¥”°t"»›ÃñÕG¯&“1JŽïÉŽ;1<<éDçtºã´ÅsqÏÂsJ`Û7©ÎÎÎ9ù¿(hÏÎ^9ïöZ]]Muuµ¬ƒÓ¼vg{ Îõø“w®c™Ék?Õ÷ö¿?@|$æ®`Ùª%ÇÕÉ=Ÿ‰ÜK–,™Q‡à´æÇšùkuÆã¶NïZ{Ž3v~ç2Ç’,7%N™‚Y%¡Èd²d³ºLŇH”|XÅ›eÙèt]*›óÓáMÅRvƒ EÁôL›Ö˜÷á|‹V’KgìøfÀ"†çªªò­UUOZ¿Xf€‹ïýÏmø|¹œØ«0ÿ¸¸c1 —5£¹ì¸ï¼™±*Ì(yÃäº-¹tÝõ8•PC­LŠˆá¹…¢(,[¶°k'ËMU˜ÍhšJ{{=–U¬Q,ö*̾Øn‡-BX˜ X–…'À²Û«[ù¼ä‰ž{w„Åp…¹a¯Ï.Ìgå1ûsV„ùç¤aYee0Å6O™AAD ‚ ‚ ‚ˆaAAA˜'8O¦“Uµ‡CCB‹…3‡…ƒ™©R”JÅ#cfáþ3§Œ ‡Ëª&P8wsÊ ¨ÌwinP+dÒ…çZRÔãÚ—ýÝ’"t‚`‹¯YÖÝJùA>±,bXAA˜¯H̰ ‚ ‚ bXAAD ‚ ‚ ‚ˆaAAA1,‚ ‚ "†AAAİ ‚ ‚ ˆAA ‚ ‚0çø;~Þ‘º~œOIEND®B`‚eclipse-collections-11.0.0.M3/docs/guide.md000066400000000000000000004604051407344533200203740ustar00rootroot00000000000000 # Reference Guide - [About Eclipse Collections](#-about-eclipse-collections) - [About this guide](#-about-this-guide) - [Getting Started With Eclipse Collections](#-getting-started-with-eclipse-collections) - [Iteration patterns](#-iteration-patterns) - [Common iteration patterns](#-common-iteration-patterns) - [Select/Reject pattern](#-selectreject-pattern) - [Collect pattern](#-collect-pattern) - [Short-circuit patterns](#-short-circuit-patterns) - [ForEach pattern](#-foreach-pattern) - [InjectInto pattern](#-injectinto-pattern) - [RichIterable](#-richiterable) - [Lazy iteration](#-lazy-iteration) - [Parallel-lazy iteration](#-parallel-lazy-iteration) - [RichIterable methods](#-richiterable-methods) - [Map iteration methods](#-map-iteration-methods) - [Creating iterable views of maps](#-creating-iterable-views-of-maps) - [Collecting entries](#-collecting-entries) - [Finding, testing and putting values](#-finding-testing-and-putting-values) - [Flipping maps](#-flipping-maps) - [Basic collection types](#-basic-collection-types) - [ListIterable](#-listiterable) - [SetIterable](#-setiterable) - [MapIterable](#-mapiterable) - [BiMap](#-bimap) - [Bag](#-bag) - [StackIterable](#-stackiterable) - [Multimap](#-multimap) - [Primitive collections](#-primitive-collections) - [Primitive Lists](#primitive-lists) - [IntInterval](#intinterval) - [Primitive Sets](#primitive-sets) - [Primitive Stacks](#primitive-stacks) - [Primitive Bags](#primitive-bags) - [Primitive Maps](#primitive-maps) - [Immutable collections](#-immutable-collections) - [Immutable Collection Factory Classes](#-immutable-collection-factory-classes) - [Creating collections containers](#-creating-collections-containers) - [Creating mutable collections](#-creating-mutable-collections) - [Creating immutable collections](#-creating-immutable-collections) - [Creating primitive collections](#-creating-primitive-collections) - [Converting collections](#converting-collections) - [Protective wrappers](#-protective-wrappers) - [Unmodifiable Collections](#-unmodifiable-collections) - [Synchronized Collections](#-synchronized-collections) - [Code blocks](#-code-blocks) - [Predicate](#-predicate) - [Predicate Factories](#predicate-factories) - [Function](#-function) - [Function Factories](#function-factories) - [Procedure](#-procedure) - [Count and calculate](#-count-and-calculate) - [Control execution](#-control-execution) - [Modify collections and maps](#-modify-collections-and-maps) - [Procedure Factories](#procedure-factories) - [Verify](#-verify) - [Eclipse Collections Cheat Sheet](#-eclipse-collections-cheat-sheet) - [Eclipse Collections Mind Map](#-eclipse-collections-mind-map) []() About Eclipse Collections ----------------------------- > A collections framework for Java based on Smalltalk patterns. Eclipse Collections is a library of collection-management utilities that work with the Java Collections Framework (JCF). Eclipse Collections offers JCF-compatible implementation alternatives for List, Set and Map. It also introduces a host of new features including Multimaps, BiMaps and Bags, lazy evaluation, immutable containers, parallel processing and a full complement of primitive containers. Eclipse Collections implements the idea of *internal iteration* - putting collection-handling methods on the collection classes, a concept derived from the Smalltalk language. Internal iteration affords a more consistent and intuitive approach to using collections by encapsulating the details of how various iteration patterns are implemented. Hiding this complexity lets you write more readable code with less duplication. ![Eclipse Collections diagram](EclipseCollectionDiagram.png) []() About this guide -------------------- This Guide is an introduction to basic Eclipse Collections concepts and its commonly-used features. It provides a high-level survey of the Eclipse Collections library and its capabilities. The topics covered are: - **Iteration patterns**: the logic underlying Eclipse Collections methods. - **Collections & containers**: the JCF compatible collection types and new containers introduced in Eclipse Collections. - **Code blocks**: a function that can be passed around as data. - **Utilities**: factory classes, static methods, and other features of the library. []() Getting Started With Eclipse Collections --------------------------------------------- It is recommended that first time users go through the [Eclipse Collections Kata](https://github.com/eclipse/eclipse-collections-kata). The Kata is a fun way to help you learn idiomatic Eclipse Collections usage through coding exercises. []() Iteration patterns ---------------------- Eclipse Collections extends the Java Collections Framework with new interfaces and classes and provides additional methods. These new methods implement *iteration patterns* derived from the collection protocol of the Smalltalk language (e.g., *select*, *reject*, *collect*, *detect*, *injectInto*). In idiomatic (imperative) Java code, iteration is performed by external **for** and **while** loops that enclose a block of business logic to be performed on each element of a collection. This is an approach that often leads to a lot duplication of code. In Eclipse Collections, business logic is reified as a *code block*: a class that is passed as a parameter to an iteration method. Each implementation of an iteration method iterates over the collection, passing each element to the code block for processing. In Java 8, these code blocks can be specified using the lambda and method reference syntax. The most important advantage of internal iteration patterns is that they increase readability by giving names to the structural iteration patterns and by reducing code duplication. Moreover, by encapsulating implementation within specialized collection types (e.g., list, sets, maps), iteration can be optimized for the particular type. []() Common iteration patterns ----------------------------- The most commonly-used iteration patterns in Eclipse Collections are: ##### Filtering patterns: - Select - Reject - Partition ##### Transforming patterns: - Collect - FlatCollect - GroupBy ##### Fused patterns: - CollectIf ##### "Short-circuit" patterns: - Detect - AnySatisfy - AllSatisfy - NoneSatisfy ##### Generic action patterns: - ForEach - InjectInto ### []() Select/Reject pattern > Filter a collection to create a new collection: includes **select**, **reject**, and **partition**. Methods using the *Select* pattern return a new collection comprising those elements from the source collection that satisfy some logical condition. *Reject* is the inverse pattern, returning a new collection of elements that do *not* satisfy the condition. The condition is a boolean expression in the form of single-argument code block that implements the [**Predicate**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/block/predicate/Predicate.html) interface. #### Select pattern examples: ###### Pseudocode ```java create for each of if condition() add to ``` ###### EC (w/lambda) ```java MutableList greaterThanFifty = list.select(each -> each > 50); ``` Select, using an anonymous inner class as a code block: ###### EC (w/anonymous inner class) ```java MutableList greaterThanFifty = list.select(new Predicate() { public boolean accept(Integer each) { return each > 50; } }); ``` Here, a [**Predicate**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/block/predicate/Predicate.html) is created using the [**Predicates**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/block/factory/Predicates.html) factory: ```java MutableList greaterThanFifty = list.select(Predicates.greaterThan(50)); ``` ###### Java 8 Streams w/[Collectors2](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/collector/Collectors2.html) ```java MutableList greaterThanFifty = list.stream() .filter(each -> each.intValue() > 50) .collect(Collectors2.toList()); ``` ###### Imperative Java ```java List greaterThanFifty = Lists.mutable.empty(); for (Integer each : list) { if (each.intValue() > 50) { greaterThanFifty.add(each); } } ``` #### Reject pattern examples: ###### Pseudocode ```java create for each of if not condition() add to ``` ###### EC (w/lambda) ```java List notGreaterThanFifty = list.reject(each -> each > 50); ``` ###### EC (w/[Predicates](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/block/factory/Predicates.html) Factory) ```java list.reject(Predicates.greaterThan(50)); ``` ###### Java 8 Streams ```java MutableList notGreaterThanFifty = list.stream() .filter(each -> each.intValue() <= 50) .collect(Collectors2.toList()); ``` ###### Imperative Java ```java List notGreaterThanFifty = Lists.mutable.empty(); for (Integer each : list) { if (each <= 50) { notGreaterThanFifty.add(each); } } ``` #### []() Select and Reject methods These Eclipse Collections methods implement the Select and Reject pattern: ##### select(Predicate): RichIterable ##### reject(Predicate): RichIterable The [**Predicate**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/block/predicate/Predicate.html) is evaluated for each element of the collection. The selected elements are those where the Predicate returned true (false for rejected). The selected (or rejected) elements are returned in a new collection of the same type. ##### select(Predicate, *targetCollection*): *targetCollection* ##### reject(Predicate, *targetCollection*): *targetCollection* Same as the **select**/**reject** methods with one argument, but results are added to the specified *targetCollection*. ##### selectWith(Predicate2, *argument*): RichIterable ##### rejectWith(Predicate2, *argument*): RichIterable For each element of the collection, [**Predicate2**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/block/predicate/Predicate2.html) is evaluated with the element as one argument, plus one additional argument; selected or rejected elements are returned in a new collection of the same type. See [Reusing a code block](#performance-optimized-methods-reusing-two-argument-code-blocks "Using selectWith, rejectWith, and collectWith inside other iteration patterns (or loops) where code blocks can be created outside of the outer iteration patterns or made static.") for more information. ##### selectWith(Predicate2, *argument*, *targetCollection*): *targetCollection* ##### rejectWith(Predicate2, *argument*, *targetCollection*): *targetCollection* Same as the **selectWith**/**rejectWith** methods, but results are added to the specified *targetCollection*. #### []() Partition pattern > Create two collections using **Select** and **Reject**. The *Partition* pattern allocates each element of a collection into one of two new collections depending on whether the element satisfies the condition expressed by the **Predicate**. In effect, it combines the [*Select* and *Reject* patterns](#selectreject-pattern "Filter a collection to create a new collection: includes select, reject, and partition."). The collections are returned in a [**PartitionIterable**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/partition/PartitionIterable.html) specialized for the type of the source collection. You can retrieve the selected and rejected elements from the **PartitionIterable**. In this example, the list of people is partitioned into lists of adults and children. ###### EC (w/lambda) ```java PartitionMutableList partitionedFolks = people.partition(person -> person.getAge() >= 18); MutableList adults = partitionedFolks.getSelected(); MutableList children = partitionedFolks.getRejected(); ``` ###### EC (w/anonymous inner class) ```java MutableList people =... PartitionMutableList partitionedFolks = people.partition( new Predicate() { public boolean accept(Person each) { return each.getAge() >= 18; } }); MutableList adults = partitionedFolks.getSelected(); MutableList children = partitionedFolks.getRejected(); ``` ###### Java 8 Streams ```java List people =... Map> partitionedFolks = people.stream() .collect(Collectors.partitioningBy(person -> person.getAge() >= 18) List adults = partitionedFolks.get(Boolean.TRUE); List children = partitionedFolks.get(Boolean.FALSE); ``` #### []() Partitioning methods These Eclipse Collections methods implement the partition pattern: ##### partition(Predicate): PartitionIterable Returns a **PartitionIterable**, a logical pair of containers. The first container consists of all elements that satisfy the **Predicate**. The second container consists of all elements that do not satisfy the **Predicate**. The subtypes of **PartitionIterable** correspond with the subtypes of [**RichIterable**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/RichIterable.html). ##### partitionWith(Predicate2, *argument*): PartitionIterable For each element of the collection, **Predicate2** is evaluated with the element as one argument, plus one additional argument; partitioned elements are returned in a new collection of type **PartitionIterable**. ### []() Collect pattern > Transform a collection's elements, creating a new collection: includes **collect**, **flatCollect**, and **groupBy**. The *Collect* pattern methods return a new collection whose data elements are the results of an evaluation performed by the code block; that is, each element of the original collection is mapped to a new object, which is usually a different type. The code block used as the **collect** method's parameter implements the [**Function**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/block/function/Function.html) interface. ###### Pseudocode ```java create for each of = transform() add to ``` ###### EC (w/lambda and method reference) ```java MutableList

addresses = people.collect(person -> person.getAddress()); //or MutableList
addresses = people.collect(Person::getAddress); ``` ###### EC (w/anonymous inner class) ```java MutableList people =...; Function addressFunction = new Function() { public Address valueOf(Person person) { return person.getAddress(); } }; MutableList
addresses = people.collect(addressFunction); ``` Notice that this assumes each person in the **people** collection has just one address. If, instead, a person has multiple addresses, the [**Function**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/block/function/Function.html) returns a list of addresses for each person (a list that has only one element if the person has just one address); the result is a List of Lists: ###### EC (w/lambda and method reference) ```java MutableList> addresses = people.collect(person -> person.getAddresses()); //or MutableList> addresses = people.collect(Person::getAddresses); ``` ###### EC (w/anonymous inner class) ```java MutableList people =...; Function> addressFunction = new Function>() { public MutableList
valueOf(Person person) { return person.getAddresses(); } }; MutableList> addresses = people.collect(addressFunction); ``` ###### Java 8 Streams ```java MutableList> addresses = people.stream() .map(person -> person.getAddresses()) .collect(Collectors2.toList()); //or MutableList> addresses = people.stream() .map(Person::getAdddresses) .collect(Collectors2.toList()); ``` ###### Imperative Java ```java List
addresses = Lists.mutable.empty(); for (Person person : people) { addresses.add(person.getAddress()); } //or List> addresses = Lists.mutable.empty(); for (Person person : people) { addresses.add(person.getAddresses()); } ``` #### []() Other Collect-style patterns Eclipse Collections provides two specialized variations on the *Collect* pattern: [Flatten](#flatten-pattern "Create a single, linear collection from selected values of a collection's elements.") and [GroupBy](#groupby-pattern "Create a Multimap from a collection by grouping on a selected or generated key value."). Like *Collect*, both methods take a single **Function** as a parameter. #### []() Collect methods These Eclipse Collections methods implement the Collect pattern: ##### collect(Function): RichIterable For each element of the collection, the [**Function**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/block/function/Function.html) is evaluated with the current element as the argument; returns a new collection with the transformed type. ##### collectInt(IntFunction): IntIterable Similar to **collect**, but it takes an [**IntFunction**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/block/function/primitive/IntFunction.html) and returns a primitive collection which extends from [**IntIterable**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/IntIterable.html). There are variants for all eight primitives: **collectBoolean**, **collectFloat** etc. ##### collect(Function, *targetCollection*): *targetCollection* Same as **collect**, except that the results are added to the specified *targetCollection*, which extends java.util.Collection. ##### collectInt(IntFunction, *targetCollection*): *targetCollection* Same as **collectInt**, except that the results are added to the specified *targetCollection*, which extends [**MutableIntCollection**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/collection/primitive/MutableIntCollection.html). There are variants for all eight primitives. ##### collectIf(Predicate, Function): RichIterable Same as **collect**, except that the **Predicate** is first evaluated with the element as the argument to filter the collection. ##### collectIf(Predicate, Function, *targetCollection*): *targetCollection* Same as **collectIf**, except that the results are added to the specified *targetCollection*. ##### collectWith(Function2, *argument2*): RichIterable Same as **collect**, but the [**Function2**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/block/function/Function2.html) is evaluated with the element as one argument, plus one additional argument; returns a new collection of the same size and the transformed type. ##### collectWith(Function2, *argument2*, *targetCollection*): *targetCollection* Same as **collectWith**, except that the results are added to a specified *targetCollection*. (On all **RichIterable**s since version 1.0) #### []() FlatCollect pattern Create a single, linear collection from selected values of a collection's elements. The *FlatCollect* pattern is a specialized form of the the *Collect* pattern. It returns a single-level, or "flattened," collection of attribute values from a source collection's elements. ##### flatCollect(Function): RichIterable Applies the **Function** to each element. The **Function** must return an Iterable type. Returns the intermediate Iterables in a single, flattened collection. Given a list of **people** (as in the [collect method example](#collect-pattern "Transform a collection's elements, creating a new collection: includes collect, flatCollect, and groupBy.")), here is how **flatCollect** could be used to create a flat list from the address fields of the **person** objects in that list, using the same **Function** (**addressFunction**): ###### Pseudocode ```java create for each of = transform() Add all to ``` ###### EC (w/lambda and method reference) ```java MutableList
flatAddress = people.flatCollect(person -> person.getAddresses()); // or MutableList
flatAddress = people.flatCollect(Person::getAddresses); ``` Note the **flatCollect** method's similarity to a **collect** method having the same signature: each method's **Function** parameter maps to an Iterable type. This is optional for **collect**, but required of **flatCollect.** Both methods return a new collection. The difference is that **collect** in this form creates a *collection of collections* from a simple List, Set or Bag, while **flatCollect** performs a different (and in this instance, somewhat more useful) action, returning a flat list of addresses. ###### EC (w/anonymous inner class) ```java MutableList
addresses = people.flatCollect( new Function>() { public MutableList
valueOf(Person person) { return person.getAddresses(); } }); ``` ###### Java 8 Streams w/[Collectors2](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/collector/Collectors2.html) ```java MutableList
flatAddress = people.stream() .flatMap(person -> person.getAddresses().stream()) .collect(Collectors2.toList()); // or MutableList
flatAddresses = people.stream() .map(Person::getAddresses) .flatMap(List::stream) .collect(Collectors2.toList()); ``` ###### Imperative Java ```java List
addresses = Lists.mutable.empty(); for (Person person : people) { addresses.addAll(person.getAddresses()); } ``` #### []() GroupBy pattern Create a Multimap from a collection by grouping on a selected or generated key value. The *GroupBy* pattern gathers the elements on the collection into a map-like container called a [**Multimap**](#multimap "A map-like container that can have multiple values for each key"), which associates multiple values for each key. The **Function** is applied to each element and the result is used as the key into the [**Multimap**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/multimap/Multimap.html) where the element should appear as the value. ##### groupBy(Function): Multimap Group the elements into a new [**Multimap**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/multimap/Multimap.html); uses the **Function** to get the key for each element. ##### groupBy(Function, *targetMultimap*) : targetMultimap Same as **groupBy** except that results are added to the specified *targetMultimap*. ##### groupByEach(Function): Multimap Same as **groupBy** except that the **Function** transforms each value into multiple keys, returning a new **Multimap** containing all the key/value pairs. **Related links** [Multimap](#multimap "A map-like container that can have multiple values for each key") [ForEach pattern](#forEach-pattern "Perform a calculation on each element of the current collection.") ### []() Short-circuit patterns Methods that control processing by testing a collection for a logical condition: includes **detect**, **anySatisfy**, and **allSatisfy**. The "short-circuit" patterns - [*Detect*](#detect-pattern "Finds and returns the first element that satisfies a given logical expression."), [*AnySatisfy*](#anysatisfy-pattern "Determine if any collection element satisfies a given logical expression.") and [*AllSatisfy*](#allsatisfy-pattern "Determine if all collection elements satisfy a given logical expression.") - are so called because they describe methods that cease execution when a specific condition is met. With each iteration, the **Predicate** is evaluated. If the evaluation resolves as a specified boolean (*true*/*false*) value, then iteration halts and returns the appropriate value. #### []() Detect pattern Finds and returns the *first* element that satisfies a given logical expression. *Detect* returns the first element that satisfies a **Predicate**. If every element in the collection is tested and the **Predicate** never returns *true*, then the method returns *null*. ###### Pseudocode ```java for each of if condition() return ``` ###### EC (w/lambda) ```java Integer result = list.detect(each -> each > 50); ``` ###### EC (w/Predicates factory) ```java Integer result = list.detect(Predicates.greaterThan(50)); ``` ###### Java 8 Streams ```java Integer result = list.stream().findAny(each -> each > 50).get(); ``` ###### Imperative Java ```java for (int i = 0; i < list.size(); i++) { Integer v = list.get(i); if (v.intValue() > 50) { return v; } } return null; ``` #### []() Detect methods ##### detect(Predicate): element Return the first element which satisfies the **Predicate** or null if no element satisfies the **Predicate**. ##### detectIfNone(Predicate, Function0): element (or Function0 result) Same as **detect**, but if no element causes **Predicate** to evaluate as *true*, return the result of evaluating **Function0**. ##### detectWith(Predicate2, *parameter*): element Returns the first element that evaluates as *true* for the specified **Predicate2** and *parameter*, or null if none evaluate as *true*. See [Reusing a code block](#performance-optimized-methods-reusing-two-argument-code-blocks "Using selectWith, rejectWith, and collectWith inside other iteration patterns (or loops) where code blocks can be created outside of the outer iteration patterns or made static.") for more information. ##### detectWithIfNone(Predicate2, *parameter*, Function0): element (or Function0 result) Same as **detectWith**, but if no element causes [**Predicate2**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/block/predicate/Predicate2.html) to evaluate as *true*, return the result of evaluating [**Function0**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/block/function/Function0.html). #### []() AnySatisfy pattern Determine if *any* collection element satisfies a given logical expression. The *AnySatisfy* method determines whether *any* element satisfies the **Predicate**. It applies the **Predicate** to each element. If the **Predicate** ever returns true, execution halts and the method returns *true* immediately. Otherwise, every element is checked and the method returns *false*. ###### Pseudocode ```java for each of if condition() return true otherwise return false ``` ###### EC (w/lambda) ```java boolean result = list.anySatisfy(num -> num > 50); ``` ###### EC (w/Predicates factory) ```java boolean result = list.anySatisfy(Predicates.greaterThan(50)); ``` ###### Java 8 Streams ```java boolean result = list.stream().anyMatch(num -> num > 50); ``` ###### Imperative Java ```java for (int i = 0; i < list.size(); i++) { Integer v = list.get(i); if (v.intValue() > 50) { return true; } } return false; ``` ##### []() AnySatisfy methods ##### anySatisfy(Predicate): boolean Return true if the **Predicate** returns *true* for any element of the collection. Otherwise (or if the collection is empty), return false. ##### anySatisfyWith(Predicate2, *parameter*): boolean Return true if the **Predicate2** returns *true* for any element of the collection. Otherwise (or if the collection is empty), return false. ##### []() AllSatisfy pattern Determine if *all* collection elements satisfy a given logical expression. The *AllSatisfy* method determines whether *all* elements satisfy the **Predicate**. It applies the **Predicate** to each element. If the **Predicate** ever returns false, execution halts and the method returns *false* immediately. Otherwise, every element is checked and the method returns *true*. ###### Pseudocode ```java for each of if not condition() return false otherwise return true ``` ###### EC (w/lambda) ```java boolean result = list.allSatisfy(each -> each > 50); ``` ###### EC (w/Predicates factory) ```java boolean result = list.allSatisfy(Predicates.greaterThan(50)); ``` ###### Java 8 Streams ```java boolean result = list.stream().allMatch(each -> each > 50); ``` ###### Imperative Java ```java for (int i = 0; i < list.size(); i++) { Integer v = list.get(i); if (v.intValue() <= 50) { return false; } } return true; ``` *NoneSatisfy* is similar to *AllSatisfy*, but negates the **Predicate**. It returns *true* only if *no* element satisfies the **Predicate**. If the container is empty it also returns true. ##### []() AllSatisfy methods ##### allSatisfy(Predicate): boolean Return true if the **Predicate** returns *true* for all elements of the collection. Otherwise (or if the collection is empty), return *false*. ##### allSatisfyWith(Predicate2, *parameter*): boolean Return true if the **Predicate2** returns *true* for all elements of the collection. Otherwise (or if the collection is empty), return *false*. ##### noneSatisfy(Predicate):\*\* boolean Return true if the **Predicate** returns *false* for all elements of the collection or if the collection is empty. Otherwise, return *false*. ##### noneSatisfyWith(Predicate2, *parameter*): boolean Return true if the **Predicate2** returns *false* for all elements of the collection or if the collection is empty. Otherwise, return *false*. ### []() ForEach pattern Perform a calculation on each element of the current collection. The *ForEach* pattern defines the most basic iteration operation that can be used with all collection types. Unlike the other patterns discussed in this topic, the ForEach pattern prescribes methods that operate on each element of the calling collection object, with no value returned by the method itself. In Eclipse Collections, the **each** and **forEach** methods offer the most straightforward replacement for the Java **for** loop. It executes the code in a Procedure on each element. You can use these methods to perform some action using the values of the source collection - for example, to print a value or to call another method on each element. ###### Pseudocode ```java for each of evaluate() ``` ###### EC (w/lambda) ```java list.each(each -> doSomething(each)); // or list.forEach(each -> doSomething(each)); ``` ###### EC (w/anonymous inner class) ```java list.each(new Procedure() { public void value(Object each) { doSomething(each); } }); ``` ###### Imperative Java ```java for (int i = 0; i < list.size(); i++) { this.doSomething(list.get(i)); } ``` #### []() Each / ForEach methods ##### each(Procedure): void For each element, the [**Procedure**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/block/procedure/Procedure.html) is evaluated with the element as the argument. ##### forEach(Procedure): void For each element, the [**Procedure**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/block/procedure/Procedure.html) is evaluated with the element as the argument. ##### forEachIf(Predicate, Procedure): void For each element that satisfies the **Predicate**, executes the **Procedure** on that element. ##### forEach(*fromIndex*, *toindex*, Procedure): void Iterates over the section of a [**ListIterable**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/list/ListIterable.html) covered by the specified indexes (inclusive). ##### forEachWith(Procedure2, *parameter*): void For each element of the collection, the [**Procedure2**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/block/procedure/Procedure2.html) is evaluated with the element as the first argument, and the specified *parameter* as the second argument. ##### forEachWithIndex(ObjectIntProcedure): void Iterates over a collection passing each element and the current relative int index to the specified instance of [**ObjectIntProcedure**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/block/procedure/primitive/ObjectIntProcedure.html). ##### forEachWithIndex(*fromIndex*, *toIndex*, ObjectIntProcedure): void Iterates over the section of the list covered by the specified indexes (inclusive). ### []() InjectInto pattern Calculate and maintain a *running value* during iteration; use each evaluated result as an argument in the next iteration. The *InjectInto* pattern is used to carry a computed result from one iteration as input to the next. In this pattern, the **injectInto** method takes an initial *injected* *value* as a parameter. This value is used as the first argument to a two-argument code block; the current element (for each iteration of the collection) is taken as the second argument. For each iteration, the code block's evaluation result is passed to the next iteration as the first argument (the injected value) of the code block, with the (new) current element as the second argument. The injectInto() method returns the code block's cumulative result upon the final iteration. ###### Pseudocode ```java set to for each of = apply(, ) return ``` ###### EC (w/lambda and method reference) ```java Integer result = Lists.mutable.of(1, 2).injectInto(3, (result, each) -> result + each); // or Integer result = Lists.mutable.of(1, 2).injectInto(3, Integer::sum); ``` ###### EC (w/static class) ```java Integer result = Lists.mutable.of(1, 2).injectInto(3, AddFunction.INTEGER); ``` ###### Java 8 Streams (w/lambda and method reference) ```java Integer result = Lists.mutable.of(1, 2).stream().reduce(3, (result, each) -> result + each); // or Integer result = Lists.mutable.of(1, 2).stream().reduce(3, Integer::sum); ``` ###### Imperative Java ```java List list = Lists.mutable.of(1, 2); int result = 3; for (int i = 0; i < list.size(); i++) { Integer v = list.get(i); result = result + v.intValue(); } ``` #### []() InjectInto methods ##### injectInto(*injectedValue*, Function2): *(final result)* Return the final result of all evaluations using as the arguments each element of the collection, and the result of the previous iteration's evaluation. ##### injectInto(*floatValue*, FloatObjectToFloatFunction): float Return the final result of all evaluations using as the arguments each element of the collection, and the result of the previous iteration's evaluation. The injected value and result are both primitive floats. ##### injectInto(*intValue*, IntObjectToIntFunction): int Return the final result of all evaluations using as the arguments each element of the collection, and the result of the previous iteration's evaluation. The injected value and final result are both primitive ints. ##### injectInto(*longValue*, LongObjectToLongFunction): long Return the final result of all evaluations using as the arguments each element of the collection, and the result of the previous iteration's evaluation. The injected value and result are both primitive longs. ##### injectInto(*doubleValue*, DoubleObjectToDoubleFunction): double Return the final result of all evaluations using as the arguments each element of the collection, and the result of the previous iteration's evaluation. The injected value and result are both primitive doubles. []() RichIterable ---------------- [**RichIterable**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/RichIterable.html) is the most important interface in Eclipse Collections. It provides the blueprint for all non-mutating iteration patterns. It represents an object made up of elements that can be individually and consecutively viewed or evaluated (an *iterable*), and it prescribes the actions that can be performed with each evaluation (the patterns). The most commonly used implementations include [**FastList**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/list/mutable/FastList.html) and [**UnifiedSet**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/set/mutable/UnifiedSet.html). [**RichIterable**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/RichIterable.html) is extended by [**ListIterable**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/list/ListIterable.html), [**SetIterable**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/set/SetIterable.html), [**Bag**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/bag/Bag.html), [**StackIterable**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/stack/StackIterable.html), and [**MapIterable**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/map/MapIterable.html). A **MapIterable** of keys and values is also a **RichIterable** of values. **RichIterable** is also extended by [**MutableCollection**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/collection/MutableCollection.html), and indirectly by [**MutableList**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/list/MutableList.html) and [**MutableSet**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/set/MutableSet.html) (which also extend the mutable Java Collection types **List** and **Set**). Another subinterface defines a non-JDK container, [**MutableBag**](#mutablebag "A mutable unordered collection allowing duplicates; the most common implementation is HashBag.") (or multiset); yet another, [**ImmutableCollection**](#immutable-collections "A read-only snapshot of a collection; once created, it can never be modified."), delineates the immutable forms of these Eclipse Collections containers. These latter two interfaces are detailed in the [Collections and containers](#collections-and-containers) topic. The subinterface [**LazyIterable**](#lazy-iteration "Deferring evaluation until necessary.") for the most part replicates **RichIterable**, but overrides some specific collection-returning methods - **collect**, **collectIf**, **select**, **reject**, and **flatCollect** - so that they delay their actual execution until the returned collection is needed, a technique called "lazy iteration." ### []() Lazy iteration > Deferring evaluation until necessary. *Lazy iteration* is an optimization pattern in which an iteration method is invoked, but its actual execution is deferred until its action or return values are required by another, subsequent method. In practical terms, the objective is typically to forestall unnecessary processing, memory use, and temporary-object creation unless and until they are needed. Lazy iteration is implemented as an adapter on the current **RichIterable** collection by this method: ##### *richIterable*.asLazy() Returns a deferred-evaluation iterable of type [**LazyIterable**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/LazyIterable.html). (Note the list below of other Eclipse Collections methods that return lazy Iterables.) In a way, lazy iteration is a companion to the [short-circuit iteration pattern](#concept648 "Methods that control processing by testing a collection for a logical condition: includes detect, anySatisfy, and allSatisfy."), in which iteration ceases as soon the method's purpose is achieved. In the last line of the example below, the **anySatisfy** method quits execution when it detects the "address2" element in the **addresses** list created by **collect**. The third element ("address 3") is never examined by **anySatisfy** - although it was present in **addresses**. ###### EC (w/anonymous inner class) ```java Person person1 = new Person(address1); Person person2 = new Person(address2); Person person3 = new Person(address3); MutableList people = Lists.mutable.with(person1, person2, person3); MutableList> addresses = people.collect(addressFunction); Assert.assertTrue(addresses.anySatisfy(Predicates.equal(address2))); ``` One excess element out of three may be trivial, but if **people** were to be a very long list (or a stream), **anySatisfy** will still have to wait for the **collect** method to finish aggregating an equally-large temporary collection - one that will have only its first two elements inspected. By applying a lazy-iteration adapter to **people**, the **collect** iteration defers to that of **anySatisfy**: only the elements **anySatisfy** requires are "collected." ###### EC (w/Predicates factory) ```java MutableList people = Lists.mutable.with(person1, person2, person3); LazyIterable lazyPeople = people.asLazy(); LazyIterable
addresses = lazyPeople.collect(addressFunction); Assert.assertTrue(addresses.anySatisfy(Predicates.equal(address2))); ``` This example demonstrates lazy iteration using both Java 8 lambdas and method references: ###### EC (w/lambda and method reference) ```java LazyIterable lazyPeople = people.asLazy(); LazyIterable
addresses = lazyPeople.flatCollect(person -> person.getAddresses()); //or LazyIterable
addresses = lazyPeople.flatCollect(Person::getAddresses); ``` Finally, note these Eclipse Collections methods that implicitly return a lazy-iterable type. [**MutableMap**](#mutablemap "A mutable MapIterable that implements java.util.Map; the most common implementation is UnifiedMap.") interface and its implementations ------------------------------------------------------------------------ ##### valuesView() : RichIterable An unmodifiable view of the map's values. ##### keysView() : RichIterable An unmodifiable view of the map's keyset. ##### keyValuesView() : RichIterable An unmodifiable view of the map's entryset. ------------------------------------------------------------------------ [**Multimap**](#multimap "A map-like container that can have multiple values for each key") interface and its implementations ------------------------------------------------------------------------ ##### keyMultiValuePairsView() : RichIterable An unmodifiable view of key and multi-value pairs. ##### keysView() : RichIterable An unmodifiable view of unique keys. ##### keyValuePairsView() : RichIterable An unmodifiable view of key/value pairs. ##### multiValuesView() : RichIterable An unmodifiable view of each key's values, without the key. ------------------------------------------------------------------------ ### []() Parallel-lazy iteration An API that combines parallel iteration with lazy evaluation. Parallel-eager utility is available through the [**ParallelIterate**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/parallel/ParallelIterate.html) utility class. Serial-lazy evaluation is available through **LazyIterable**, the view returned by **RichIterable**.**asLazy()**. The [**ParallelIterable**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/ParallelIterable.html) interface defines a view where iteration is both parallel and lazy. Sub-interfaces of **ParallelIterable** are returned from the various implementations of **asParallel(** **ExecutorService** **executorService**, **int** **batchSize** **)**. The **ParallelIterable** API is new in 5.0 and considered experimental, as indicated by the **@Beta** annotation. API tagged as **@Beta** may be altered in ways that are not backward-compatible, even in minor versions of Eclipse Collections. The method **asParallel** is not on interfaces like **RichIterable** in version 5.0, but rather on a few supported collections, including **FastList** and **UnifiedSet**. ```java FastList integers = Lists.mutable.with(1, 2, 3, 4, 5, 6, 7, 8, 9); ExecutorService threadPool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); int batchSize = 2; ParallelListIterable parallelListIterable = integers.asParallel(threadPool, batchSize); // deferred evaluation ParallelListIterable evenNumbers = parallelListIterable.select(each -> each % 2 == 0); // deferred evaluation ParallelListIterable evenStrings = evenNumbers.collect(Object::toString); // forced evaluation MutableList strings = evenStrings.toList(); threadPool.shutdown(); Assert.assertEquals(Lists.mutable.with("2", "4", "6", "8"), strings); ``` In this code example, the calls to **select** and **collect** are lazy, as indicated by the fact that they return subclasses of [**ParallelIterable**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/ParallelIterable.html). The call to **toList()** forces evaluation. The two parameters to **asParallel(ExecutorService** *executorService*, **int** *batchSize***)** are used to configure parallelism. | | | |-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | *executorService* | This code example set up a thread pool with one thread per core, which is appropriate for CPU bound tasks. A thread pool used for IO bound tasks should be infinite or should have one thread per IO-bound resource, for example, one thread per database connection. It often makes sense to share thread pools between multiple calls to **asParallel**. | | *batchSize* | The batch size determines the number of elements from the backing collection (**FastList** or **UnifiedSet**) that get processed by each task submitted to the thread pool. Appropriate batch sizes for CPU-bound tasks are usually larger, in the 10,000 to 100,000 range. | #### []() Performance As with lazy evaluation, there is no guarantee that using parallel-lazy evaluation will yield better performance than simple serial-eager evaluation. Performance testing is required, using an appropriate thread pool and trying various batch sizes. #### []() Cancelability It's possible to cancel a parallel-lazy computation in progress. It requires a thread pool that can be shut down, which means it usually won't be a thread pool shared between multiple computations. Cancelling also requires a runnable thread with access to the thread pool. Building on the previous example, we just need to change **evenStrings**.**toList()** to execute in a background thread. Then the main thread could call **threadPool.shutdownNow()** which would cause **toList()** to terminate relatively quickly by throwing an exception. Shutting down the thread pool won't stop any batches in progress. However, no new batches will be started. ### []() RichIterable methods These methods are available on all implementations of [**RichIterable**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/RichIterable.html). #### []() Building strings Methods that convert collection elements to a string that can be appended to a stream or buffer. The **makeString** method returns a representation of the calling **RichIterable** collection as a **String** object. Elements are converted to strings as they would be by **String.valueOf(Object)**. You can specify start and end strings as delimiters (the default is an empty string for both) and the separator string for the between-values delimiter (defaults to comma and space). ##### makeString(*startString*, *separatorString*, *endString*): String Returns a string representation of the calling collection that is a list of elements in the order they are returned by the iterator, enclosed in the *startString* and *endString*. Elements are delimited by the *separatorString*. ##### makeString(*separatorString*): String Same result with no starting and ending strings. ##### makeString(): String Same result with the default delimiter ", " (comma space) and no starting and ending strings. ###### EC ```java MutableList list = Lists.mutable.with(1, 2, 3); String myDelim = list.makeString("[", "/", "]"); // "[1/2/3]" String mySeper = list.makeString("/"); // "1/2/3" String defaultString = list.makeString(); //"1, 2, 3" ``` ###### Java 8 Streams ```java MutableList list = Lists.mutable.with(1, 2, 3); String myDelim = list.stream().map(Object::toString).collect(Collectors.joining("/", "[", "]")); // "[1/2/3]" String mySeper = list.stream().map(Object::toString).collect(Collectors.joining("/")); // "1/2/3" String defaultString = list.stream().map(Object::toString).collect(Collectors.joining()); // "1/2/3" ``` ###### Java 8 Streams w/[Collectors2](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/collector/Collectors2.html) ```java MutableList list = Lists.mutable.with(1, 2, 3); String myDelim = list.stream().collect(Collectors2.makeString("[", "/", "]")); // "[1/2/3]" String mySeper = list.stream().collect(Collectors2.makeString("/")); // "1/2/3" String defaultString = list.stream().collect(Collectors2.makeString()); // "1/2/3" ``` The **appendString** method uses forms similar to **makeString**, but the string representation of the collection is written to a Java **Appendable** object, such as a **PrintStream**, **StringBuilder** or **StringBuffer**; the method itself is void. ##### appendString(Appendable, *startString*, *separatorString*, *endString*): void Appends a string representation of this collection onto the given **Appendable** using the specified start, end, and separator strings ##### appendString(Appendable, *separatorString*): void Appends with specified separator, but no starting or ending strings. ##### appendString(Appendable): void Appends with the default delimiter ", " (comma space) and no starting and ending strings. ###### EC ```java MutableList list = Lists.mutable.with(1, 2, 3); Appendable myStringBuilder = new StringBuilder(); list.appendString(myStringBuilder, "[", "/", "]"); //"[1/2/3]"); ``` #### []() Counting elements Get the total number of elements that satisfy a condition. The **count** and **countWith** methods calculate the number of collection elements that satisfy a given predicate. The **countWith** method takes a second parameter that is used as an additional argument in evaluating the current element. ##### count(Predicate): int Returns the number of elements that satisfy the **Predicate**. For example: Here is a Java 8 lambda example: ###### EC (w/lambda) ```java int count = people.count(person -> person.getAddress().getState().getName().equals("New York")); ``` ###### EC (w/anonymous inner class) ```java int count = people.count(new Predicate() { public boolean value(Person person) { return person.getAddress().getState().getName().equals("New York"); } }); ``` ##### countWith(Predicate2, *parameter*): int Returns the number of elements that satisfy the **Predicate2**. The second parameter to **countWith** is passed as the second parameter to the **Predicate2**. ###### EC (w/[Predicates2](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/block/factory/Predicates2.html) factory) ```java int count = lastNames.countWith(Predicates2.equal(), "Smith"); ``` Use these methods to get the total number of collection items or to determine whether the collection is empty. ##### size() : int Returns the number of items in the collection. ##### isEmpty() : boolean Returns *true* if this iterable has zero items. ##### notEmpty() : boolean Returns *true* if this iterable has greater than zero items. #### []() Finding elements Locate elements by iteration position or highest/lowest value. The **getFirst** and **getLast** methods return the first and last elements, respectively of a **RichIterable** collection. In the case of a List, these are the elements at the first and last index. For all any other collections, **getFirst** and **getLast** return the first and last elements that would be returned by an iterator. Note that the first or last element of a hash-based Set could be any element, because element order in a hashed structure is not defined. Both methods return *null* if the collection is empty. If null is a valid element, use the **isEmpty** method to determine if the container is in fact empty. ##### getFirst(): element Returns the first element of an iterable collection. ##### getLast(): element Returns the last element of an iterable collection. The **min** and **max** methods, without parameters, return an element from an iterable based on its natural order, that is, by calling the compareTo() method on each element. ##### max(): element Returns the maximum value based on the natural ordering. ##### min(): element Returns the minimum value based on the natural ordering. ###### EC ```java RichIterable iterable = Lists.mutable.with(5, 4, 8, 9, 1); Assert.assertEquals(Integer.valueOf(9), iterable.max()); Assert.assertEquals(Integer.valueOf(1), iterable.min()); ``` If any element in the iterable is not Comparable, then a ClassCastException is thrown. ###### EC ```java RichIterable iterable = Lists.mutable.with(5, 4, 8, 9, 1, new Foo()); iterable.max(); // throws ClassCastException ``` The **min** and **max** methods each have an overload that takes a Comparator that determines the natural order. ##### max(*Comparator*): element Returns the maximum element out of this collection based on the comparator. ##### min(*Comparator*): element Returns the minimum element out of this collection based on the comparator. ###### EC (Java 5+) ```java public class SillyWalk { public final int wiggles; public SillyWalk(int wiggles) { this.wiggles = wiggles; } } ``` ```java private static final Comparator SILLY_WALK_COMPARATOR = new Comparator() { public int compare(SillyWalk o1, SillyWalk o2) { return o1.wiggles - o2.wiggles; } }; SillyWalk sillyWalk2 = new SillyWalk(2); SillyWalk sillyWalk3 = new SillyWalk(3); RichIterable walks = Lists.mutable.with(sillyWalk2, sillyWalk3); Assert.assertEquals(sillyWalk3,walks.max(SILLY_WALK_COMPARATOR)); Assert.assertEquals(sillyWalk2,walks.min(SILLY_WALK_COMPARATOR)); ``` The related methods **minBy** and **maxBy** take a **Function** and return the minimum or maximum element in the **RichIterable** based on the natural order of the attribute returned by the **Function**. ##### maxBy(Function): element Returns the maximum element out of this collection based on the result of applying the **Function** to each element. ##### minBy(Function): element Returns the minimum element out of this collection based on the result of applying the **Function** to each element. Here, we find the youngest person (the minimum person by age). ###### EC (w/method reference) ```java Person alice = new Person("Alice", 40); Person bob = new Person("Bob", 30); Person charlie = new Person("Charlie", 50); MutableList people = Lists.mutable.with(alice, bob, charlie); Assert.assertEquals(bob, people.minBy(Person::getAge)); ``` In the code example we already had a **Function**, so calling **minBy** was more concise than calling **min()**. These two forms are equivalent though. ###### EC (w/method reference) ```java people.minBy(Person::getAge); people.min(Comparators.byFunction(Person::getAge)); ``` #### []() Aggregating elements Methods that create maps of aggregated values by grouping them on a calculated key. **aggregateBy** groups the elements in the **RichIterable** by the [**Function**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/block/function/Function.html). Then all the elements that map to the same key are aggregated together using the [**Function2**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/block/function/Function2.html). The third parameter, a [**Function0**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/block/function/Function0.html), creates the initial value in each aggregation. Aggregate results are allowed to be immutable as they will be replaced in the map. **aggregateBy** is conceptually analogous to calling a **groupBy** method on a **RichIterable** to create a **Multimap**,and then calling **injectInto** on each collection of the **Multimap** values to create a [**MapIterable**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/map/MapIterable.html). **aggregateInPlaceBy** is similar to **aggregateBy**, but it mutates values in the output map instead of replacing them. Thus in this case, the aggregate results must be mutable. ##### aggregateBy(Function, Function0, Function2): MapIterable Returns a [**MapIterable**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/map/MapIterable.html) by grouping results by keys supplied by evaluating a **Function**. ###### EC (w/lambda and method reference) ```java FastList integers = FastList.newListWith(1, 1, 1, 2, 2, 3); MutableMap aggregation = integers.aggregateBy( integer -> integer % 2, () -> 0, Integer::sum); Assert.assertEquals(4, aggregation.get(0).intValue()); Assert.assertEquals(6, aggregation.get(1).intValue()); ``` ###### EC (w/anonymous inner classes) ```java Function0 factory = new Function0() { public Integer value() { return Integer.valueOf(0); } }; Function2 sumAggregator = new Function2() { public Integer value(Integer aggregate, Integer value) { return aggregate + value; } }; Function groupBy = new Function() { public Integer valueOf(Integer integer) { return integer % 2; } }; FastList integers = FastList.newListWith(1, 1, 1, 2, 2, 3); MutableMap aggregation = integers.aggregateBy(groupBy, factory, sumAggregator); Assert.assertEquals(4, aggregation.get(0).intValue()); Assert.assertEquals(6, aggregation.get(1).intValue()); ``` ##### aggregateInPlaceBy(Function, Function0, Function2): MapIterable Same result with no starting and ending strings. ###### EC (w/lambda and method reference) ```java FastList integers = FastList.newListWith(1, 1, 1, 2, 2, 3); MutableMap aggregation = integers.aggregateInPlaceBy( integer -> integer % 2, () -> new AtomicInteger(0), AtomicInteger::addAndGet) Assert.assertEquals(4, aggregation.get(0).intValue()); Assert.assertEquals(6, aggregation.get(1).intValue()); ``` ##### EC (w/anonymous inner classes) ```java Function0 factory = new Function0() { public AtomicInteger value() { return new AtomicInteger(0); } }; Procedure2 sumAggregator = new Procedure2() { public void value(AtomicInteger aggregate, Integer value) { aggregate.addAndGet(value); } }; Function groupBy = new Function() { public Integer valueOf(Integer integer) { return integer % 2; } }; FastList integers = FastList.newListWith(1, 1, 1, 2, 2, 3); MutableMap aggregation = integers.aggregateInPlaceBy(groupBy, factory, sumAggregator); Assert.assertEquals(4, aggregation.get(0).intValue()); Assert.assertEquals(6, aggregation.get(1).intValue()); ``` #### []() Using chunk and zip to create collections Grouping and pairing elements of one or more collections. The **chunk** method can be used to gather the elements of a collection into *chunks*; that is, it creates a collection made up of collections of a specified fixed *size* (an integer). If the *size* doesn't divide evenly into the total of collection elements, then the final chunk is smaller. ##### chunk(*size*): RichIterable Returns a new collection with the source collection's elements grouped in "chunks," with *size* elements in each chunk, and the last chunk containing the remaining elements, if any. ###### EC ```java MutableList list = Lists.mutable.with(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); RichIterable> chunks = list.chunk(4); System.out.println(chunks); ``` This example prints out: ```java [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10]] ``` The **zip** method pairs up the elements of one **RichIterable** with those of second. If one of the two collections has more elements than the other, those remaining elements are dropped. The **zipWithIndex** method is a special case of **zip** that pairs the elements in a collection with their index positions. ##### zip(RichIterable): RichIterable Returns a new **RichIterable** by combining, into pairs, corresponding elements from the calling RichIterable collection and the RichIterable collection named in the parameter. If one of the two collections is longer, its remaining elements are ignored.. ###### EC ```java MutableList list1 = Lists.mutable.with("One", "Two", "Three", "Truncated"); MutableList list2 = Lists.mutable.with("Four", "Five", "Six"); MutableList> pairs = list1.zip(list2); System.out.println(pairs); ``` This example prints out: ```java [One:Four, Two:Five, Three:Six] ``` ##### zipWithIndex(): RichIterable Returns a new **RichIterable** consisting of the calling collection's elements, each paired with its index (beginning with index 0). ###### EC ```java MutableList list = Lists.mutable.with("One", "Two", "Three"); MutableList> pairs = list.zipWithIndex(); System.out.println(pairs); ``` This example prints out: ```java [One:0, Two:1, Three:2] ``` #### []()Performance optimized methods: reusing two-argument code blocks Using **selectWith**, **rejectWith**, and **collectWith** inside other iteration patterns (or loops) where code blocks can be created outside of the outer iteration patterns or made static. The collection-returning iteration methods - **collect**, **select**, and **reject** - each take a single parameter: a code block that itself takes a single argument. These patterns have alternate forms, methods named **collectWith**, **selectWith**, and**rejectWith** respectively. The same is true of the boolean-returning ["short-circuit"](#short-circuit-patterns "Methods that control processing by testing a collection for a logical condition: includes detect, anySatisfy, and allSatisfy.") methods, **detect**, **anySatisfy**, **allSatisfy**, and **noneSatisfy**; each has a counterpart having the suffix "With." All of these are available on **RichIterable** and its subinterfaces. In each case, the "...With" form of the method takes two parameters: - The first method parameter is a code block that itself takes *two* arguments; the first argument of the code block is the current element with each iteration. - The second method parameter is an object that is then passed to the code block as its second argument. ##### selectWith(Predicate2, *argument*): RichIterable ##### rejectWith(Predicate2, *argument*): RichIterable For each element of the collection, **Predicate2** is evaluated with the element as one argument, plus one additional argument; selected or rejected elements are returned in a new collection of the same type. ##### collectWith(Predicate2, *argument*): RichIterable Same as the **collect** method, but two arguments are passed to the code block; returns a new collection of the same type and size. These " **...With**" forms accomplish exactly the same actions as their basic counterparts. Although slightly more verbose, they allow for a specific performance optimization, that is re-use of the code block with different arguments. Here is an example of **select** that finds the adults in a list of people. First, the JDK version, and then rewritten in Eclipse Collections form: ###### EC (w/lambda) ```java MutableList people =...; MutableList adults = people.select(each -> each.getAge() >= 18); ``` ###### EC (w/anonymous inner class) ```java MutableList people =...; MutableList adults = people.select( new Predicate() { public boolean accept(Person each) { return each.getAge() >= 18; } }); ``` ###### Imperative Java ```java List people =...; List adults = Lists.mutable.empty(); for (Person person : people) { if (person.getAge() >= 18) { adults.add(person); } } ``` Here's the same algorithm, again in Eclipse Collections, this time using **selectWith()**: ###### EC (w/lambda and method reference) ```java MutableList people =...; MutableList adults = people.selectWith((eachPerson, age) -> eachPerson.getAge() > age, 18); // or MutableList adults = people.selectWith(Person::isOlderThan, 18); ``` ###### EC (w/anonymous inner class) ```java MutableList people =...; MutableList adults = people.selectWith( new Predicate2() { @Override public boolean accept(Person eachPerson, Integer age) { return eachPerson.getAge() > age; } }, 18); ``` In this single instance, there is no reason to write it out this longer way; the extra generality - making *age* the second argument to the **Predicate2** - is unnecessary. It does make sense, however, if you wanted to filter on multiple ages: you could hold onto and re-use the **Predicate2**, thereby creating less garbage. ###### EC (w/anonymous inner class) ```java MutableList people =...; Predicate2 agePredicate = new Predicate2() { @Override public boolean accept(Person eachPerson, Integer age) { return eachPerson.getAge() > age; } }; MutableList drivers = people.selectWith(agePredicate, 17); MutableList voters = people.selectWith(agePredicate, 18); MutableList drinkers = people.selectWith(agePredicate, 21); ``` **collectWith**, **selectWith**, and **rejectWith** work well with method references. ###### EC (w/method reference) ```java MutableList drivers = people.selectWith(Person::isOlderThan, 17); MutableList voters = people.selectWith(Person::isOlderThan, 18); MutableList drinkers = people.selectWith(Person::isOlderThan, 21); ``` This style encourages adding more behavior to the classes held in the containers. This style works with any "**...With**" method in Java 8 or higher. []() Map iteration methods ------------------------- Methods for iterating over Maps and Multimaps. The [**MapIterable**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/map/MapIterable.html) and [**Multimap**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/multimap/Multimap.html) interfaces are *associative arrays*, meaning they contain key-value pairs. All of the keys in a Map are unique; a **Multimap** can have multiple values associated with each key. The **Multimap** interface does not extend MapIterable. **Multimap** has a number of subinterfaces, such as [**ListMultimap**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/multimap/list/ListMultimap.html), [**SetMultimap**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/multimap/set/SetMultimap.html), and [**BagMultimap**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/multimap/bag/BagMultimap.html), each with custom behavior for how to handle the collection of values associated with each key. ### []() Creating iterable views of maps Wrapper classes that return an iterable view of a map; ForEach patterns for Map containers. These three methods each return an unmodifiable RichIterable view of a Map. They are essentially wrappers over the modifiable, non-lazy objects returned by the corresponding Java Collections Framework methods. ##### valuesView(): RichIterable *(Maps and Multimaps)* Returns an unmodifiable **RichIterable** wrapper over the values of the Map. ##### keysView(): RichIterable *(Maps and Multimaps)* Returns an unmodifiable **RichIterable** wrapper over the keySet of the Map. ##### keyValuesView(): RichIterable *(Maps only)* Returns an unmodifiable lazy iterable of key/value pairs. #### []() ForEach Iteration These three methods call a code block for each element on a Map (all return void). ##### forEachKey(Procedure): void Calls the **Procedure** on each key of the Map. ##### forEachValue(Procedure): void Calls the **Procedure** on each value of the Map. ##### forEachKeyValue(Procedure2): void Calls the **Procedure** on each key-value pair of the Map. ### []() Collecting entries Gather entries from another collection into a Map Use the **collectKeysAndValues** method to add all the entries derived from another collection into the current Map. ##### collectKeysAndValues(*collection*, *keyFunction*, *valueFunction*): MutableMap *(Mutable maps only)* The key and value for each entry is determined by applying the *keyFunction* and *valueFunction* (in each case, a **Function**) to each item in *collection*. Each is converted into a key-value entry and inserted into the Map. If a new entry has the same key as an existing entry in the calling map, the new entry's value replaces that of the existing entry. ### []() Finding, testing and putting values Detect a value by its key and, optionally, insert or return other values. The **updateValue**, **getIfAbsent** and **ifPresentApply** methods locate a specified key and return a map value that corresponds to that key. Depending on whether a value is found at the given key, each method performs a specific action. ##### add(Pair<K, V>): value Adds the given key-value pair to the map. It's a convenience method for working with [**Pair**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/tuple/Pair.html)s, similar to **put(**K, V**)**. ##### updateValue(*key*, Function0, Function): value If there is a value in the Map that corresponds to the specified *key*, applies the specified **Function** to the value and replaces the value, otherwise applies the **Function** to the value supplied by the **Function0** and puts the result as a value in the map at the specified key. ##### updateValueWith(*key*, Function0, Function2, *parameter*): value If there is a value in the Map that corresponds to the specified *key*, applies the specified **Function2** to the value and the specified *parameter* and replaces the value with the result, otherwise applies the **Function2** to the value supplied by the **Function0** and the *parameter* and puts the result as a value in the map at the specified key. ##### getIfAbsent(*key*, Function0): element (or Function0 result) Returns the value in the Map that corresponds to the specified *key*; if there is no value at the key, returns the result of evaluating the specified **Function0** (here, specifically, a code block without parameters that returns some object). ##### getIfAbsentPut(*key*, *value*): element Returns the value in the Map that corresponds to the specified *key*; if there is no value at the key, returns specified *value*, and puts that value in the map at the specified key. ##### getIfAbsentPut(*key*, Function0): element (or Function0 result) Returns the value in the Map that corresponds to the specified *key*; if there is no value at the key, returns the result of evaluating the specified **Function0**, and puts that value in the map at the specified key ##### getIfAbsentPutWith(*key*, Function,*parameter*): element (or Function result) Returns the value in the Map that corresponds to the specified *key*; if there is no value at the key, returns the result of evaluating the specified one-argument Function using the specified *parameter*, and put that value in the map at the specified key. ##### **getIfAbsentWith**(*key*, **Function**, *parameter*) **:** **element** (or **Function** result) Returns the value in the Map that corresponds to the specified *key*; if there is no value at the key, returns the result of evaluating the specified **Function** and parameter. ##### **ifPresentApply**(*key*, **Function**) **:** (**Function** result) If there is a value in the Map that corresponds to the specified *key*, returns the result of evaluating the specified **Function** with the value, otherwise returns null. ### []() Flipping maps Return a new associative array where the position of the keys and values have been flipped ##### flip(): Multimap Since the values in the **MapIterable** are not necessarily unique, **flip()** returns a **Multimap** instead of a **MapIterable**. ##### flipUniqueValues(): MapIterable Similar to **MapIterable**.**flip()** but asserts that the values in the **MapIterable** are unique and thus returns **MapIterable** instead of **Multimap**. Throws **IllegalArgumentException** if the **MapIterable** contains duplicate values. []() Collections and containers ============================== What is perhaps most distinctive about the Eclipse Collections collection classes is what (quite properly) is hidden: their implementation of iteration patterns. Through this encapsulation, Eclipse Collections is able to provide optimized versions of each method on each container. For example, the first of the classes we'll discuss here, **FastList**, is array-based; it iterates using indexed access directly against its internal array. We'll begin with the Eclipse Collections implementations of types having analogs in the Java Collections Framework (JCF). We'll then discuss the new types **Bag** and **Multimap**, the Immutable collections, and protective wrappers. []() Basic collection types -------------------------- The most commonly-used Eclipse Collections classes are [**FastList**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/list/mutable/FastList.html), [**UnifiedSet**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/set/mutable/UnifiedSet.html), and [**UnifiedMap**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/map/mutable/UnifiedMap.html). These collections serve as drop-in replacements for their corresponding types in the Java Collections Framework (JCF). Note that these Eclipse Collections classes do not extend the JCF implementations; they are instead new implementations of both JCF and Eclipse Collections interfaces, as this (highly-simplified) diagram summarizes: ![Container comparision](containerCompare.png) The methods of the JCF types are primarily focused on adding or removing elements and similar, non-iterative operations. Eclipse Collections interfaces provide methods for iteration patterns that for the most part, do not modify (mutate) the source collection, but rather return a new collection or information about the source collection. ### []() ListIterable > An ordered collection that allows duplicate elements. A **ListIterable** is a **RichIterable** which maintains its elements in insertion order and allows duplicate elements. **ListIterable** has two mutable subinterfaces **MutableList** and [**FixedSizeList**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/list/FixedSizeList.html) and one [immutable](#immutable-collections "A read-only snapshot of a collection; once created, it can never be modified.") subinterface [**ImmutableList**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/list/ImmutableList.html). The **ListIterable** interface includes the **binarySearch** method, which is similar to the static method **binarySearch** on **java.util.Collections**, but available from the object-oriented API. #### []() MutableList > A mutable **ListIterable** that implements java.util.List; the most common implementation is **FastList**. **MutableList** extends the JCF **List** interface and has the same contract. It also extends **[RichIterable](#richiterable "The interface that defines all non-mutating iteration patterns")**, which provides the iteration methods common to all collections. The most common implementation of **MutableList** is **FastList**, which can be used to replace the familiar **java.util.ArrayList**. Here is a comparison of how the two types can be created. ###### **ArrayList** (JCF) ```java List comparison = new ArrayList(); comparison.add("Comcast"); comparison.add("IBM"); comparison.add("Microsoft"); comparison.add("Microsoft"); ``` ###### **FastList** (EC) ```java MutableList comparison = FastList.newListWith("Comcast", "IBM", "Microsoft", "Microsoft"); ``` The **MutableList** interface includes the **sortThis** and **reverse** methods, which are similar to the static methods **sort** and **reverse** on **java.util.Collections**. Both are mutating methods. Here is an example of **sort** using the JDK API and then Eclipse Collections. ###### **ArrayList** (w/anonymous inner class for Comparator) ```java Collections.sort(people, new Comparator() { public int compare(Person o1, Person o2) { int lastName = o1.getLastName().compareTo(o2.getLastName()); if (lastName != 0) { return lastName; } return o1.getFirstName().compareTo(o2.getFirstName()); } }); ``` ###### **FastList** (w/anonymous inner class for Comparator) ```java people.sortThis(new Comparator() { public int compare(Person o1, Person o2) { int lastName = o1.getLastName().compareTo(o2.getLastName()); if (lastName != 0) { return lastName; } return o1.getFirstName().compareTo(o2.getFirstName()); } }); ``` ###### **FastList** (w/lambda) ```java people.sortThis((o1, o2) -> { int lastName = o1.getLastName().compareTo(o2.getLastName()); if (lastName != 0) { return lastName; } return o1.getFirstName().compareTo(o2.getFirstName()); }); ``` **MutableList** adds a new method called **sortThisBy**, which takes an attribute from each element using a **Function** and then sorts the list by the natural order of that attribute. ###### **ArrayList** (JCF w/static function) ```java Collections.sort(people, Functions.toComparator(Person.TO_AGE)); ``` ###### **FastList** (w/static function) ```java people.sortThisBy(Person.TO_AGE); ``` ###### **FastList** (w/method reference and lambda) ```java // Using a method reference people.sortThisBy(Person::getAge); // Using a lambda expression people.sortThisBy(person -> person.getAge()); ``` Here is an example comparing **reverse** using the JCF and using Eclipse Collections; both are mutating methods. ###### **ArrayList** (JCF) ```java Collections.reverse(people); ``` ###### **FastList** (EC) ```java people.reverseThis(); ``` The **toReversed** method on **MutableList** lets you reverse a list *without* mutating it; that is, it returns a new **MutableList**. Here is an example of how to accomplish that in the JCF and in Eclipse Collections. ###### **ArrayList** (JCF) ```java List reversed = new ArrayList(people) Collections.reverse(reversed); ``` ###### **FastList** (EC) ```java MutableList reversed = people.toReversed(); ``` The **asReversed** method returns a reverse-order *view* of the **MutableList** - a [lazy iterable](#lazy-iteration "Deferring evaluation until necessary."), like that returned by **asLazy** - that defers each element's evaluation until it is called for by a subsequent method. ###### **FastList** (EC) ```java ListIterable integers = FastList.newListWith(1, 2, 3); // deferred evaluation LazyIterable reversed = integers.asReversed(); // deferred evaluation LazyIterable strings = reversed.collect(String::valueOf); // forces evaluation MutableList stringsList = strings.toList(); Assert.assertEquals(FastList.newListWith("3", "2", "1"), stringsList); ``` #### []() Migrating ArrayList to FastList Here are some additional JCF to Eclipse Collections refactoring examples. Here is a Java Collections' **ArrayList**: ###### JCF ```java List integers = new ArrayList(); integers.add(1); integers.add(2); integers.add(3); ``` And, here is the identical construction in Eclipse Collections: ###### EC ```java List integers = new FastList(); integers.add(1); integers.add(2); integers.add(3); ``` In Eclipse Collections, the static factory method **newList** can infer generic types ###### EC ```java List integers = FastList.newList(); integers.add(1); integers.add(2); integers.add(3); ``` The Eclipse Collections **newListWith()** method also provides varargs support, allowing any number of arguments ###### EC ```java List integers = FastList.newListWith(1, 2, 3); ``` There are also factory classes in Eclipse Collections named for each type (e.g. [Lists](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/factory/Lists.html), [Sets](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/factory/Sets.html), [Maps](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/factory/Sets.html), [Bags](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/factory/Bags.html), [Stacks](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/factory/Stacks.html), [BiMaps](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/factory/BiMaps.html), [Multimaps](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/factory/Multimaps.html), etc.) ###### EC ```java List integers = Lists.mutable.with(1, 2, 3); ``` You can also use the richer interface: ###### EC (Java 5+) ```java MutableList integers = FastList.newListWith(1, 2, 3); // or MutableList integers = Lists.mutable.with(1, 2, 3); ``` The list is never mutated; it can be made unmodifiable: ```java MutableList integers = FastList.newListWith(1, 2, 3).asUnmodifiable(); ``` There is also a form of **newList** that takes another iterable ###### EC ```java MutableList integers = FastList.newList(listOfIntegers); ``` These refactorings are analogous for **UnifiedSet** and **UnifiedMap**. ### []() SetIterable > A collection that allows no duplicate elements. A **SetIterable** is a **RichIterable** that allows no duplicate elements. It can be sorted or unsorted. - A [**SortedSetIterable**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/set/sorted/SortedSetIterable.html) is a **SetIterable** that maintains its elements in sorted order. - An [**UnsortedSetIterable**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/set/UnsortedSetIterable.html) is a **SetIterable** that maintains its elements in a hash table in an unpredictable order. **UnsortedSetIterable** has two mutable subinterfaces (**MutableSet** and **FixedSizeSet**) and one [immutable](#immutable-collections "A read-only snapshot of a collection; once created, it can never be modified.") subinterface (**ImmutableSet**). #### []() MutableSet > A mutable **SetIterable** that implements **java.util.Set**; the most common implementation is **UnifiedSet**. **MutableSet** extends the JCF **Set** interface and has the same contract. It also extends [**RichIterable**](#richiterable "The interface that defines all non-mutating iteration patterns"), which provides the iteration methods common to all collections. An attempt to add duplicate elements to a **MutableSet** container is ignored without throwing an exception. The order in which the elements are processed during iteration is not specified. The most common implementation is **UnifiedSet**, which can be used to replace the familiar **java.util.HashSet**. ###### **HashSet** (JDK) ```java Set comparison = new HashSet(); comparison.add("IBM"); comparison.add("Microsoft"); comparison.add("Oracle"); comparison.add("Comcast"); ``` ###### **UnifiedSet** (EC) ```java Set comparison = UnifiedSet.newSetWith("IBM", "Microsoft", "Verizon", "Comcast"); ``` #### []() MutableSortedSet > Contains unique items that are sorted by some comparator or their natural ordering. A [**MutableSortedSet**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/set/sorted/MutableSortedSet.html) follows the same contract as a **MutableSet**, but sorts its elements by their natural order, or through a comparator parameter set by the user. The implementation for **MutableSortedSet** is **TreeSortedSet**. Here is an example of a MutableSortedSet containing numbers in reverse order: ###### EC (Java 5+) ```java MutableSortedSet sortedSetA = TreeSortedSet.newSet(Collections.reverseOrder()); MutableSortedSet sortedSetB = TreeSortedSet.newSet(sortedSetA.with(1).with(2, 3).with(4, 5, 6)); ``` ### []() MapIterable > A collection of key/value pairs. The **MapIterable** interface (extending **RichIterable**) is the top-level interface for collections of key/value pairs. **MapIterable** has two mutable subinterfaces (**MutableMap** and **FixedSizeMap**), one [immutable](#immutable-collections "A read-only snapshot of a collection; once created, it can never be modified.") subinterface (**ImmutableMap**). It is also is extended in mutable and immutable versions of maps with sorted elements (**SortedMapIterable**) and maps that allow lookup keys by (unique) values as well as the reverse (**BiMap**). #### []() MutableMap > A mutable **MapIterable** that implements java.util.Map; the most common implementation is **UnifiedMap**. The [**MutableMap**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/map/MutableMap.html) interface defines an association of key/value pairs. It extends the **MapIterable** interface, which furnishes a set of iteration methods especially for the key/value structure of a Map collection. These include unmodifiable views of keys, values or pair-entries using the **keysView**, **valuesView** and **entriesView** methods, respectively. The mutable subinterfaces of **MapIterable** also extend the JCF Map interface. ###### **HashMap** (JDK) ```java Map map = new HashMap(); map.put(1, "1"); map.put(2, "2"); map.put(3, "3"); ``` ###### **UnifiedMap** (EC) ```java MutableMap map = UnifiedMap.newWithKeysValues(1, "1", 2, "2", 3, "3"); ``` #### []() MutableSortedMap > A sorted Map. A [**MutableSortedMap**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/map/sorted/MutableSortedMap.html) follows the same contract as a **MutableMap**, but sorts its elements by their natural order, or through a comparator parameter set by the user. The implementation for **MutableSortedMap** is [**TreeSortedMap**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/map/sorted/mutable/TreeSortedMap.html). This code block creates a TreeSortedMap which sorts in reverse order: ###### EC ```java MutableSortedMap sortedMap = TreeSortedMap.newMapWith(Comparators.reverseNaturalOrder(), "1", 1, "2", 3, "3", 2, "4", 1); ``` ### []() BiMap > A map that allows users to add key-value pairs and look up from either direction [**BiMap**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/bimap/BiMap.html) is an interface that defines a bi-directional map, i.e, a map that allows users to look up from both directions. Both the keys and the values in a **BiMap** are unique. **BiMap** extends **MapIterable** and [**MutableBiMap**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/bimap/MutableBiMap.html) extends **MutableMap**. The standard implementation is [**HashBiMap**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/bimap/mutable/HashBiMap.html). ###### EC ```java MutableBiMap biMap = HashBiMap.newWithKeysValues(1, "1", 2, "2", 3, "3"); ``` The distinctive methods on **MutableBiMap** are **put**, **forcePut** and **inverse**. #### **put()** **MutableBiMap.put** behaves like **put** on a regular map, except that it throws an exception when you try to add a duplicate value. ```java MutableBiMap biMap = HashBiMap.newMap(); biMap.put(1, "1"); // behaves like a regular put() biMap.put(1, "1"); // no effect biMap.put(2, "1"); // throws IllegalArgumentException since value "1" is already present ``` #### **forcePut()** **MutableBiMap.forcePut** behaves like **MutableBiMap.put**, except that it silently removes the map entry with the same value before putting the key-value pair in the map. ```java MutableBiMap biMap = HashBiMap.newMap(); biMap.forcePut(1, "1"); // behaves like a regular put() biMap.forcePut(1, "1"); // no effect biMap.put(1, "2"); // replaces the [1, "1"] pair with [1, "2"] biMap.forcePut(2, "2"); // removes the [1, "2"] pair before putting Assert.assertFalse(biMap.containsKey(1)); Assert.assertEquals(HashBiMap.newWithKeysValues(2, "2"), biMap); ``` #### **inverse()** **MutableBiMap.inverse** returns a reversed view of the **BiMap**. ```java MutableBiMap biMap = HashBiMap.newWithKeysValues(1, "1", 2, "2", 3, "3"); MutableBiMap inverse = biMap.inverse(); Assert.assertEquals("1", biMap.get(1)); Assert.assertEquals(Integer.valueOf(1), inverse.get("1")); Assert.assertTrue(inverse.containsKey("3")); Assert.assertEquals(Integer.valueOf(2), inverse.put("2", 4)); ``` ### []() Bag > An unordered collection that allows duplicates. A [**Bag**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/bag/Bag.html) is a **RichIterable** that allows duplicate elements and efficient querying of the number of occurrences of each element. It can be sorted or unsorted. - A [**SortedBag**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/bag/sorted/SortedBag.html) is a **Bag** that maintains its elements in sorted order. - An [**UnsortedBag**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/bag/UnsortedBag.html) is a **Bag** that maintains its elements in a hash table in an unpredictable order. **UnsortedBag** has two subinterfaces, [**MutableBag**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/bag/MutableBag.html) and [**ImmutableBag**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/bag/ImmutableBag.html). **SortedBag** has two subinterfaces, [**MutableSortedBag**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/bag/sorted/MutableSortedBag.html) and [**ImmutableSortedBag**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/bag/sorted/ImmutableSortedBag.html). A **Bag** is conceptually like a **Map** from elements to the number of occurrences of that element. For example, this list: `Apple` `Pear` `Orange` `Orange` `Apple` `Orange` | | | | |------------------------|----------|-----| | could create this bag: | `Pear` | `1` | | | `Orange` | `3` | | | `Apple` | `2` | ###### EC ```java MutableBag bag = HashBag.newBagWith("Apple", "Pear", "Orange", "Apple", "Apple", "Orange"); // or MutableBag bag = Bags.mutable.with("Apple", "Pear", "Orange", "Apple", "Apple", "Orange"); ``` The distinctive methods on **Bag** are: | | | |----------------------------|-------------------------------------------------------------------------------------------| | **occurrencesOf** | Returns the occurrences of a distinct item in the bag. | | **forEachWithOccurrences** | For each distinct item, with the number of occurrences, executes the specified procedure. | | **toMapOfItemToCount** | Returns a map with the item type to its count as an Integer. | #### []() MutableBag > A mutable unordered collection allowing duplicates; the most common implementation is [**HashBag**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/bag/mutable/HashBag.html). The [**MutableBag**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/bag/MutableBag.html) interface includes methods for manipulating the number of occurrences of an item. For example, to determine the number of unique elements in a MutableBag, use the **sizeDistinct** method. The most common implementation of **MutableBag** is [**HashBag**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/bag/mutable/HashBag.html). ###### EC ```java MutableBag bag = HashBag.newBagWith("Apple", "Pear", "Orange", "Apple", "Apple", "Orange"); // or MutableBag bag = Bags.mutable.with("Apple", "Pear", "Orange", "Apple", "Apple", "Orange"); ``` The distinctive methods on **MutableBag** are: | | | |---------------------------------------------------------|----------------------------------------------------------------------------------| | **addOccurrences(**T item, int occurrences**)** | Increments the count of the item in the bag by a count specified by occurrences. | | **removeOccurrences(**Object item, int occurrences**)** | Decrements the count of the item in the bag by a count specified by occurrences. | | **setOccurrences(**T item, int occurrences**)** | Mutates the bag to contain the specified number of occurrences of the item. | #### []() MutableSortedBag > A sorted collection that allows duplicates. A [**MutableSortedBag**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/bag/sorted/MutableSortedBag.html) is a **Bag**that maintains order. It defaults to natural order, but can take a comparator to sort. The most common implementation of **MutableSortedBag** is [**TreeBag**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/bag/sorted/mutable/TreeBag.html) which uses a **SortedMap** as its underlying data store. For example, this **MutableSortedBag** would contain integers sorted in reverse order: ###### EC ```java MutableSortedBag revIntegers = TreeBag.newBagWith(Collections.reverseOrder(), 4, 3, 3, 2, 2, 2, 1, 1); // or MutableSortedBag revIntegers = SortedBags.mutable.with(Collections.reverseOrder(), 4, 3, 3, 2, 2, 2, 1, 1); ``` ### []() StackIterable > A collection that maintains "last-in, first-out" order, iterating over elements in reverse insertion order. A [**StackIterable**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/stack/StackIterable.html) is a **RichIterable** enforcing a "last-in, first-out" order; its methods always iterate over elements in reverse insertion order, (beginning with the most-recently added element). For example the **getFirst** method returns the the last element to have been added - the "top" of the stack. **StackIterable** has a mutable and an [immutable](#immutable-collections "A read-only snapshot of a collection; once created, it can never be modified.") subinterface [**MutableStack**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/stack/MutableStack.html) and [**ImmutableStack**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/stack/ImmutableStack.html), respectively. #### []() MutableStack > A mutable collection that maintains "last-in, first-out" order, iterating over elements in reverse insertion order. The most common implementation of **MutableStack** is [**ArrayStack**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/stack/mutable/ArrayStack.html). The closest JCF equivalent to **ArrayStack** is **java.util.Stack**, which extends **Vector** but does not enforce strict LIFO iteration. The distinctive methods on **MutableStack** are **push**, **pop**, and **peek**. | | | |---------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------| | **push** | Adds a new element to the top of the stack | | **pop** | Returns the top (most recently-added) element and removes it from the collection. | | **pop(**int count**)** | Returns a **ListIterable** of the number of elements specified by the count, beginning with the top of the stack. | | **peek** | Returns but does not remove the top element. Note that, on a stack, **getFirst** likewise returns the top element, and that **getLast** throws an exception. | | **peek(**int count**)** | Returns a **ListIterable** of the number of elements specified by the count, beginning with the top of the stack; does not remove the elements from the stack. | | **peekAt(**int index**)** | Returns the element at index. | **ArrayStack** can replace **java.util.Stack**. ###### **Stack** (JCF) ```java Stack stack = new Stack(); stack.push(1); stack.push(2); stack.push(3); ``` ###### **ArrayStack** (EC) ```java MutableStack mutableStack = ArrayStack.newStackWith(1, 2, 3); // or MutableStack mutableStack = Stacks.mutable.with(1, 2, 3); ``` ### []() Multimap > A map-like container that can have multiple values for each key In a [**Multimap**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/multimap/Multimap.html) container, each key can be associated with multiple values. It is, in this sense, similar to a Map, but one whose values consist of individual collections of a specified type, called the *backing collection*. A **Multimap** is useful in situations where you would otherwise use **Map**<K, Collection<V>>. Unlike the other basic Eclipse Collections containers, **Multimap** does not extend **RichIterable**, but resides along with its subinterfaces in a separate API. The **RichIterable** methods are extended by the backing collection types. Depending on the implementation, the "values" in a Multimap can be stored in Lists, Sets or Bags. For example, the [**FastListMultimap**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/multimap/list/FastListMultimap.html) class is backed by a **UnifiedMap** that associates each key with a **FastList** that preserves the order in which the values are added and allows duplicate to be added. A **Multimap** is the type returned by the [**groupBy**](#groupby-pattern "Create a Multimap from a collection by grouping on a selected or generated key value.") method. Here is an example in which we group a list of words by their length, obtaining a **Multimap** with integer (word=length) keys and lists of words having that length for values. | | | | | | |-------------------|---------|--------------------------------------|-------|-------------------------------| | This simple list: | `here` | produces a List-backed **Multimap**: | *key* | *value<list>* | | | `are` | | `1` | `a` | | | `a` | | `3` | `are`,`few`,`are`,`not`,`too` | | | `few` | | `4` | `here`,`that`,`long` | | | `words` | | `5` | `words` | | | `that` | | | | | | `are` | | | | | | `not` | | | | | | `too` | | | | | | `long` | | | | The code that performs this action uses the [**groupBy**](#groupby-pattern "Create a Multimap from a collection by grouping on a selected or generated key value.") method. ###### EC (w/[StringFunctions](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/block/factory/StringFunctions.html)) ```java MutableList words = Lists.mutable.with("here", "are", "a", "few", "words", "that", "are", "not", "too", "long"); MutableListMultimap multimap = words.groupBy(StringFunctions.length()); ``` ###### EC (w/method reference) ```java MutableList words = Lists.mutable.with("here", "are", "a", "few", "words", "that", "are", "not", "too", "long"); MutableListMultimap multimap = words.groupBy(String::length); ``` The interface [**MutableListMultimap**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/multimap/list/MutableListMultimap.html) extends the **Multimap** interface and tells us the type of its backing collections. Since **words** is a **MutableList**, the output is a **MutableListMultimap**. The word "are" is allowed to occur twice in the list at key 3. If we change **words** to a **MutableSet**, the result will be a [**MutableSetMultimap**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/multimap/set/MutableSetMultimap.html), which will eliminate duplicate entries. ###### EC (w/StringFunctions) ```java MutableSet words = Sets.mutable.with("here", "are", "a", "few", "words", "that", "are", "not", "too", "long"); MutableSetMultimap multimap = words.groupBy(StringFunctions.length()); ``` ###### EC (w/method reference) ```java MutableSet words = Sets.mutable.with("here", "are", "a", "few", "words", "that", "are", "not", "too", "long"); MutableSetMultimap multimap = words.groupBy(String::length); ``` | | | | |-----------------------------------------------------------|-------|--------------------------| | With duplicates removed, only four 3-letter words remain. | *key* | *value <list>* | | | `1` | `a` | | | `3` | `too`,`are`,`few`,`not`, | | | `4` | `long`,`here`,`that` | | | `5` | `words` | **Related links** [groupBy()](#groupby-pattern "Create a Multimap from a collection by grouping on a selected or generated key value.") []() Primitive collections ------------------------- > Containers for iterating over collections of Java primitives. Eclipse Collections has memory-optimized lists, sets, stacks, maps, and bags for all the primitive types: **int**, **long**, **float**, **char**, **byte**, **boolean**, **short**, and **double**. The interface hierarchies for primitive types correspond closely with the interface hierarchy for regular **Object** collections. For example, the collection interfaces for **int** include the following: | | | |--------------------------|-----------------------| | **interface** | **analogous to** | | **IntIterable** | **RichIterable** | | **MutableIntCollection** | **MutableCollection** | | **IntList** | **ListIterable** | | **MutableIntList** | **MutableList** | ### Primitive Lists The primitive list implementations are backed by an array like **FastList**, but with a primitive array instead of an **Object\[\]**. They are named [**IntArrayList**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/list/mutable/primitive/IntArrayList.html), [**FloatArrayList**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/list/mutable/primitive/FloatArrayList.html) etc. [**BooleanArrayList**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/list/mutable/primitive/BooleanArrayList.html) is a special case. Current JVMs use one byte per boolean in a **boolean\[\]** (instead of one bit per boolean). Thus the **BooleanArrayList** is backed by a **java.util.BitSet** as an optimization. To create an **IntArrayList**, use one of the following: ```java IntArrayList emptyList = new IntArrayList(); IntArrayList intList = IntArrayList.newListWith(1, 2, 3); IntArrayList alternate = IntLists.mutable.with(1, 2, 3); IntArrayList listFromIntIterable = IntArrayList.newListWith(IntHashSet.newSetWith(1, 2, 3)); ``` ### IntInterval An **IntInterval** is a range of **int**s that may be iterated over using a step value. (Similar to **Interval**, but uses primitive ints instead of the wrapper **Integers**.) ```java Assert.assertEquals(IntLists.mutable.with(1, 2, 3), IntInterval.oneTo(3)); Assert.assertEquals(IntLists.mutable.with(1, 3, 5), IntInterval.oneToBy(5, 2)); ``` ### Primitive Sets The primitive set implementations are hash-table backed. They are named [**IntHashSet**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/set/mutable/primitive/IntHashSet.html), [**FloatHashSet**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/set/mutable/primitive/FloatHashSet.html) etc. [**BooleanHashSet**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/set/mutable/primitive/BooleanHashSet.html) is implemented using a single integer to hold one of four possible states: (\[\], \[F\], \[T\], or \[T, F\]). All other sets use open addressing and quadratic probing. ### Primitive Stacks Similar to **ArrayStack** but optimized for primitives. ### Primitive Bags Similar to **HashBag**, but both item and count are primitives. ### Primitive Maps There are three types of primitive maps: - Object To Primitive ([**ObjectIntHashMap**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/map/mutable/primitive/ObjectIntHashMap.html), ObjectFloatHashMap etc.) - Primitive To Object ([**IntObjectHashMap**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/map/mutable/primitive/IntObjectHashMap.html), FloatObjectHashMap etc.) - Primitive To Primitive ([**IntIntHashMap**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/map/mutable/primitive/IntIntHashMap.html), IntLongHashMap etc.) All the maps use open addressing and quadratic probing. There are some common arithmetic operations that can be performed on all primitive collections (except boolean collections). ```java MutableIntList intList = IntLists.mutable.with(1, 2, 3); Assert.assertEquals(6, intList.sum()); Assert.assertEquals(1, intList.min()); Assert.assertEquals(3, intList.max()); Assert.assertEquals(2.0d, intList.average(), 0.0); Assert.assertEquals(2, intList.median()); // IntList.summaryStatistics() returns IntSummaryStatistics Assert.assertEquals(6, intList.summaryStatistics().getSum()); Assert.assertEquals(1, intList.summaryStatistics().getMin()); Assert.assertEquals(3, intList.summaryStatistics().getMax()); Assert.assertEquals(2.0d, intList.summaryStatistics().getAverage(), 0.0); ``` Primitive maps with numeric value types (not boolean or Object) have a method **addToValue** that adds the given amount to the value at the given key and returns the updated value. ```java MutableByteIntMap map = new ByteIntHashMap(); Assert.assertEquals(1, map.addToValue((byte) 0, 1)); Assert.assertEquals(ByteIntHashMap.newWithKeysValues((byte) 0, 1), map); Assert.assertEquals(11, map.addToValue(( byte) 0, 10)); Assert.assertEquals(ByteIntHashMap.newWithKeysValues((byte) 0, 11), map); ``` All primitive collections have immutable counterparts, and unmodifiable and synchronized wrappers. See the [Protecting collections](#protective-wrappers) topic for more information. []() Immutable collections ------------------------- > A read-only snapshot of a collection; once created, it can never be modified. All of the basic containers in Eclipse Collections have interfaces for both *mutable* and *immutable* (unchangeable) forms. This departs somewhat from the JCF model, in which most containers are mutable. An *immutable collection* is just that - once created, it can never be modified, retaining the same internal references and data throughout its lifespan. An immutable collection is equal to a corresponding mutable collection with the same contents; a **MutableList** and an ImmutableList can be equal. Because its state does not change over time, an immutable collection is *always* thread-safe. Using immutable collections where feasible can serve to make your code easier to read and understand. All of the interfaces and implementations discussed so far in this topic have been *mutable* versions of their respective types. Each of these containers has an immutable counterpart. These are the corresponding interfaces: | | | |---------------------|-----------------------| | **Mutable types** | **Immutable types** | | **MutableList** | **ImmutableList** | | **MutableSet** | **ImmutableSet** | | **MutableBag** | **ImmutableBag** | | **MutableMap** | **ImmutableMap** | | **MutableMultimap** | **ImmutableMultimap** | | **MutableStack** | **ImmutableStack** | The method that returns an immutable collection for all container types is **toImmutable()**: ##### **MutableCollection**. **toImmutable():** **ImmutableCollection** Returns an immutable copy of a type corresponding to the source **MutableCollection**. ##### **StackIterable**. **toImmutable():** **ImmutableStack** Returns an immutable copy of a **MutableStack**, returns the same iterable for an **ImmutableStack**. ##### **ListIterable**. **toImmutable():** **ImmutableList** Returns an immutable copy of a **MutableList**, returns the same iterable for an **ImmutableList**. ##### **SortedMapIterable**. **toImmutable():** **ImmutableSortedMap** Returns an immutable copy of a **MutableSortedMap**, returns the same iterable for an **ImmutableSortedMap**. ##### **UnsortedMapIterable**. **toImmutable():** **ImmutableMap** Returns an immutable copy of a **MutableMap**, returns the same iterable for an **ImmutableMap**. An immutable-collection interface lacks mutating methods, such as **add** and **remove**. Instead, immutable collections have methods that return new, immutable copies with or without specified elements: ##### **ImmutableCollection**. **newWith(***element***):** **ImmutableCollection** Returns a new immutable copy of **ImmutableCollection** with *element* added. ##### **ImmutableCollection**. **newWithAll(Iterable):** **ImmutableCollection** Returns a new immutable copy of **ImmutableCollection** with the elements of **Iterable** added. ##### **ImmutableCollection**. **newWithout(***element***):** **ImmutableCollection** Returns a new immutable copy of **ImmutableCollection** with *element* removed. ##### **ImmutableCollection**. **newWithoutAll(Iterable):** **ImmutableCollection** Returns a new immutable copy of **ImmutableCollection** with the elements of **Iterable** removed. Note that the iteration methods of an immutable container - such as **select**, **reject**, and **collect** - also produce new immutable collections. ### []() Immutable Collection Factory Classes The factory classes **Lists**, **Sets**, **Bags**, and **Maps** create immutable collections. These factories also provide methods for creating fixed-size collections, which have been superseded by immutable collections. ###### EC (Java 5+) ```java ImmutableList immutableList = Lists.immutable.of(1, 2, 3); ImmutableSet immutableSet = Sets.immutable.of(1, 2, 3); Bag immutableBag = Bags.immutable.of(1, 2, 2, 3); ImmutableMap immutableMap = Maps.immutable.of(1, "one", 2, "two", 3, "three"); ``` These factories highlight yet another benefit of immutable collections: they let you create efficient containers that are sized according to their contents. In cases where there are many, even millions of collections, each with a size less than 10, this is an important advantage. ### []() Growing and Shrinking Immutable Collections There are no mutating methods like `add(), addAll(), remove()` or `removeAll()` on immutable collection interfaces in Eclipse Collections. However, we may want to add or remove elements. Methods like `newWith(), newWithout(), newWithAll()` and `newWithoutAll()` allow for safe copying of immutable collections. For ImmutableMap implementations, the methods are named `newWithKeyValue(), newWithAllKeyValues(), newWithoutKey()` and `newWithoutAllKeys()`. ```java // persons is an mutable list: MutableList persons // Person is a class with attributes name, age and address PartitionMutableList partitionedFolks = persons.partition(person -> person.getAge() >= 18); // defines a partition pattern ImmutableList list0 = Lists.immutable.empty(); ImmutableList list1 = list0.newWith(new Person(...)); // add a single element to the new immutable list ImmutableList adults = list1.newWithAll(partitionedFolks.getSelected()); // add none, one or more objects to the new immutable list ImmutableSet set0 = Sets.immutable.empty(); ImmutableSet set1 = set0.newWith("1"); // add a single element to the new immutable set ImmutableSet set2 = set1.newWithAll(Sets.mutable.with("2")); // add none, one or more objects to the new immutable set ``` For ImmutableMap implementations, the methods are named `newWithKeyValue(), newWithAllKeyValues(), newWithoutKey()` and `newWithoutAllKeys()`. ```java ImmutableMap map0 = Maps.immutable.empty(); ImmutableMap map1 = map0.newWithKeyValue("1", "1"); ImmutableMap map2 = map1.newWithAllKeyValues(Lists.mutable.with(Tuples.pair("2", "2"))) ``` These methods are available on the primitive containers too though we are missing some symmetry in our immutable primitive map containers. We **do not** currently have `newWithAllKeyValues()` on immutable primitive maps. The corresponding feature request is [here](https://github.com/eclipse/eclipse-collections/issues/344). ```java ImmutableIntList list0 = IntLists.immutable.empty(); ImmutableIntList list1 = list0.newWith(1); ImmutableIntList list2 = list1.newWithAll(IntLists.mutable.with(2)); ImmutableIntSet set0 = IntSets.immutable.empty(); ImmutableIntSet set1 = set0.newWith(1); ImmutableIntSet set2 = set1.newWithAll(IntSets.mutable.with(2)); ImmutableIntIntMap map0 = IntIntMaps.immutable.empty(); ImmutableIntIntMap map1 = map0.newWithKeyValue(1, 1); ``` []() Creating collections containers ----------------------------------- Eclipse Collections has many **iteration methods** that return new collection containers from existing ones. These include the **select** and **collect** methods, along with their specialized variants, such as **partition** and **groupBy**. There are also multiple ways to instantiate new containers, from scratch or **by conversion** from other container types. ### []() Creating mutable collections If you know the implementation class of the container (for example, **FastList** or **UnifiedSet**), you can use either of these two techniques: - Call the class constructor; for example, **FastList**<String> names = new **FastList**; - Call a factory method on the collection class, such as **newList** or **newListWith**; for example, **MutableList**<V> result = **FastList.newList**(this.size); If, however, the specific collection class to implement is unknown, you can call a factory class to create the container. Eclipse Collections container-factory classes are named for the plural of the respective container name. For example, for a **List**, the factory class is [**Lists**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/factory/Lists.html); a **Set** is created by the class [**Sets**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/factory/Sets.html). You can specify the content and mutable state of the container in parameters. This approach to container creation, when used consistently, has the added benefit of being more readable. ```java MutableList emptyList = Lists.mutable.empty(); // creates an empty list MutableList list = Lists.mutable.with("a", "b", "c"); // creates a list of elements a,b,c MutableList list_a = Lists.mutable.of("a", "b", "c"); // creates a list of elements a,b,c MutableSet emptySet = Sets.mutable.empty(); // creates an empty set MutableSet set = Sets.mutable.with("a", "b", "c"); // creates a set of elements a,b,c MutableSet set_a = Sets.mutable.of("a", "b", "c"); // creates a set of elements a,b,c MutableBag emptyBag= Bags.mutable.empty(); // creates an empty bag MutableBag bag = Bags.mutable.with("a", "b", "c"); // creates a bag of elements a,b,c MutableBag bag_a = Bags.mutable.of("a", "b", "c"); // creates a bag of elements a,b,c ``` | Container | Factory | |-----------|---------------------------| | List | Lists | | Set | Sets, HashingStrategySets | | Bag | Bags | | Stack | Stacks | | SortedBag | SortedBags | | SortedSet | SortedSets | | Map | Maps, HashingStrategyMaps | | SortedMap | SortedMaps | | BiMap | BiMaps | | Multimap | Multimaps | You can also create a mutable container from a instance of the same type: ##### **newEmpty() :** **MutableCollection** Creates a new, empty, and mutable container of the same collection type. For example, if this instance is a **FastList**, this method will return a new empty **FastList**. If the class of this instance is **immutable** or fixed size (for example, a singleton **List**) then a mutable alternative to the class is returned. ### []() Creating immutable collections There are two ways to create an immutable **List**, **Set**, **Bag**, **Stack** or **Map**. - Create a mutable version of a container type (as described in the previous section), and then call **toImmutable()** on the result to create an immutable copy. - Use factory classes to create *immutable* versions of classes. ```java // 1. Calling toImmutable() ImmutableList list = Lists.mutable.with("a", "b", "c").toImmutable(); // creates a list of elements a,b,c ImmutableSet set0 = Lists.mutable.with("a", "b", "a", "c").toSet().toImmutable(); // creates a set of elements a,b,c ImmutableSet set1 = Sets.mutable.with("a", "b", "a", "c").toImmutable(); // creates a set of elements a,b,c ImmutableMap map = Maps.mutable.with(1, "a", 2, "b", 3, "c").toImmutable(); // creates a map with keys 1,2,3 //2. Using factory classes ImmutableList emptyList_i = Lists.immutable.empty(); // creates an empty list ImmutableList list_b = Lists.immutable.with("a", "b", "c"); // creates a list of elements a,b,c ImmutableList list_c = Lists.immutable.of("a", "b", "c"); // creates a list of elements a,b,c ImmutableSet emptySet_i = Sets.immutable.empty(); // creates an empty Set ImmutableSet set_b = Sets.immutable.with("a", "b", "c"); // creates a Set of elements a,b,c ImmutableSet set_c = Sets.immutable.of("a", "b", "c"); // creates a Set of elements a,b,c ImmutableMap emptyMap_i = Maps.immutable.empty(); // creates an empty map ImmutableMap map_b = Maps.immutable.with(1, "a", 2, "b", 3, "c"); // creates a map with keys 1,2,3 ImmutableMap map_c = Maps.immutable.of(1, "a", 2, "b", 3, "c"); // creates a map with keys 1,2,3 ``` ### []() Creating primitive collections The techniques for creating mutable or immutable primitive containers are the same as those for object collections. - If you know the implementation class, you can call its constructor or its factory method. - Otherwise use the applicable factory class named for the plural of the type, that is, with the pattern: <PrimitiveType><ContainerType>s. For example to create an **IntList**, you would use the [**IntLists**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/factory/primitive/IntLists.html) factory for the appropriate methods; for a **DoubleSet**, you would call in methods in [**DoubleSets**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/impl/factory/primitive/DoubleSets.html). ```java MutableIntList emptyList_pm = IntLists.mutable.empty(); // creates an empty list MutableIntList list_d = IntLists.mutable.with(1, 2, 3); // creates a list of elements a,b,c MutableIntList list_e = IntLists.mutable.of(1, 2, 3); // creates a list of elements a,b,c ImmutableIntList emptyList_pi = IntLists.immutable.empty(); // creates an empty list ImmutableIntList list_f = IntLists.immutable.with(1, 2, 3); // creates a list of elements a,b,c ImmutableIntList list_g = IntLists.immutable.of(1, 2, 3); // creates a list of elements a,b,c ``` | Container | boolean |byte | char | short | int | float | long | double | |-----------|--------------|----------|-----------|------------|----------|------------|-----------|-------------| | List | BooleanLists |ByteLists | CharLists | ShortLists | IntLists | FloatLists | LongLists | DoubleLists | | Set | BooleanSets |ByteSets | CharSets | ShortSets | IntSets | FloatSets | LongSets | DoubleSets | | Bag | BooleanBags |ByteBags | CharBags | ShortBags | IntBags | FloatBags | LongBags | DoubleBags | | Stack | BooleanStacks|ByteStacks| CharStacks| ShortStacks| IntStacks| FloatStacks| LongStacks| DoubleStacks| []()Converting collections -------------------------- The following methods can be used to convert one container type to another. All of these methods are on **RichIterable**. To create immutable and fixed-size collections, refer to Immutable collections. ##### **toList()** **:** **MutableList** Converts the collection to the default **MutableList** implementation (**FastList**). ##### **toSet()** **:** **MutableSet** Converts the collection to the default **MutableSet** implementation (**UnifiedSet**). ##### **toBag()** **:** **MutableBag** Converts the collection to the default **MutableBag** implementation (**HashBag**). ##### **toMap(***keyFunction*, *valueFunction***):** **MutableMap** Converts the collection to the default **MutableMap** implementation (**UnifiedMap**) using the specified keyFunctions and *valueFunctions*. ##### **toSortedList()** **:** **MutableList** Converts the collection to the default **MutableList** implementation (**FastList**) and sorts it using the natural order of the elements. ##### **toSortedList(**Comparator**)** **:** **MutableList** Converts the collection to the default **MutableList** implementation (**FastList**) and sorts it using the specified **Comparator**. These methods always return new *mutable* copies: for example, calling **toList** on a **FastList**, returns a new **FastList**. []() Protective wrappers ----------------------- > Wrapper classes providing read-only or thread-safe views of a collection. ### []() Unmodifiable Collections In both the JCF and Eclipse Collections, a collection may be rendered *unmodifiable*. In Eclipse Collections, this is done by means of the **asUnmodifiable** method, which returns a read-only view of the calling collection. This means that the mutating methods of the collection (e.g., **add**, **remove**) are still present, but throw exceptions if called. ##### **MutableCollection**. **asUnmodifiable():** **MutableCollection** *(read-only)* Returns a read-only view of the source collection. ##### **MutableIntCollection.asUnmodifiable():** **MutableIntCollection.***(read-only)* Returns a read-only view of the source primitive collection. There are similar methods for each primitive type (**MutableFloatCollection**.**asUnmodifiable()** etc.) ### []() Synchronized Collections Eclipse Collections provides a wrapper for rendering a modifiable but thread-safe view that holds a lock when a method is called and releases the lock upon completion. ##### **MutableCollection**. **asSynchronized():** **MutableCollection** Returns a synchronized copy of the source collection. ##### **MutableIntCollection**. **asSynchronized():** **MutableIntCollection.** Returns a synchronized copy of the source primitive collection. There are similar methods for each primitive type (**MutableFloatCollection**.**asSynchronized()** etc.) []() Code blocks ---------------- A *code block*, in Eclipse Collections terms, is a single-abstract-method object that is passed as a parameter to an iteration method. It is an abstraction that represents the evaluation of each element in the course of iteration. It helps us to further separate *what* is being done from *how* it is done. This topic enumerates the basic code block types - the Eclipse Collections interfaces and classes - and the relevant methods to which they apply. What we call a "code block" in Eclipse Collections is roughly analogous to a *lambda expression*. The closest analog to a lambda in Java in versions prior to Java 8 is the *anonymous inner class*. Here are two examples, one implementing **Predicate** using an anonymous inner class, and the other using a Java 8 lambda expression. ###### EC (w/lambda) ```java MutableList texans = this.people.select( each -> each.getAddress().getState().equals("TX")); Verify.assertSize(1, texans); ``` ###### EC (w/anonymous inner class) ```java MutableList texans = this.people.select( new Predicate() { public boolean accept(Person each) { return each.getAddress().getState().equals("TX"); } }); Verify.assertSize(1, texans); ``` In each case, if the value of *state* field for any element in **people** equals "TX" then the **select** method includes that element in the result list, **texans**. This chapter introduces the most commonly-used code blocks and the Eclipse Collections methods that use them. Along with the code block types described here, the current version of Eclipse Collections offers a full suite of primitive code blocks (and corresponding code block factories like [**IntFunction**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/block/function/primitive/IntFunction.html), [**IntPredicate**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/block/predicate/primitive/IntPredicate.html), [**IntProcedure**](http://www.eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/api/block/procedure/primitive/IntProcedure.html) etc.) These code blocks are used by methods on primitive collections. ##### []() About *parameter* and *argument*: These terms are often (if inaccurately) used interchangeably to refer to method or function inputs. (The usual distinction holds that *parameter* refers to a formal definition of the input, while argument denotes the actual values.) For the limited purposes of this guide - and in particular the scope of this topic - we use *parameter* to specify the input to an iteration method - in this example, **select**. These parameters can take the form of the code block (as described in this topic), which itself is an object with methods. The input for a code block we refer to here as the *argument* - in this example, the argument is **each** (the "current element" upon each iteration). []() Predicate -------------- A **Predicate** is a single-argument code block that evaluates an element and returns a boolean value. Also known as a *discriminator* or *filter,* it is used with the filtering methods **select**, **reject**, **detect**, **anySatisfy**, **allSatisfy**, and **count**. | | Description | Arguments | Returns | Used By | |----------------|---------------------------------------------------------------------------------------------------------------------------------------------------------|-----------|---------|------------------------------------------------------------------------------------------------------| | **Predicate** | Evaluates each element of a collection (the argument), and returns a boolean value. | One (T) | boolean | **select**, **reject**, **detect**, **anySatisfy**, **allSatisfy**, **count** | | **Predicate2** | Evaluates each element of a collection (the first argument); the second argument is a parameter passed into the **Predicate2** from the calling method. | Two (T,P) | boolean | **selectWith**,**rejectWith**, **detectWith**, **anySatisfyWith**, **allSatisfyWith**, **countWith** | The **accept** method is implemented to indicate the object passed to the method meets the criteria of this **Predicate**. Here is a **Predicate** implemented in a **select** method as an anonymous inner class: ###### EC (w/anonymous inner class) ```java MutableList greaterThanFifty = list.select(new Predicate() { public boolean accept(Integer each) { return each > 50; } }); ``` The **Predicates** class can be used to build common filters. **Predicates** supports equals, not equals, less than, greater than, less than or equal to, greater than or equal to, in, not in, and, or, and numerous other predicate-type operations. Examples with **select**: ###### EC (w/Predicates factory) ```java MutableList myList =... MutableList selected1 = myList.select(Predicates.greaterThan(50)); ``` ### Predicate Factories #### **Predicates** Supports equal, greaterThan, lessThan, in, notIn, and, or, instanceOf, null, notNull, anySatisfy, allSatisfy, etc. #### **Predicates2** For **Predicate2**s that work with methods suffixed with "With," such as **selectWith**. #### **StringPredicates** Supports empty, notEmpty, contains, isAlpha, isNumeric, isBlank, startsWith, endsWith, matches, etc. #### **IntegerPredicates** Supports isEven, isOdd, isPositive, isNegative, isZero. #### **LongPredicates** Supports isEven, isOdd, isPositive, isNegative, isZero. []() Function ------------- The **Function** code block in its most common usage takes each element of a collection as the argument to the code-block logic. It selects an attribute from the element via a "getter" €“ its **valueOf** method. It then returns a computed value or, if no evaluation logic is performed, the attribute itself. **Function** code blocks are used as a parameter in a variety of common Eclipse Collections methods: - With the **collect** method to calculate a new value for each element of a given collection, and then return a transformed collection of the same type. - With the **groupBy** method to generate keys for each nested collection (values) of a new Multimap. - With the **flatCollect** method, where it must return an **Iterable** that gets "flattened" with other iterables, into a single collection. - With the **Predicates** factory's **attributeOperator** methods - such as **attributeLessThanOrEqualTo** - to build **Predicate** (boolean) objects. | | Description | Arguments | Returns | Used By | |------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|------------|---------------------------------------------------------| | **Function** *(transformer)* | Evaluates each element of a collection as the argument to the code block logic and returns a computed value | One (T) | Object (V) | **collect**,**flatCollect**, **groupBy** | | **Function0** | Executes and returns a value (like Callable); represents deferred evaluation. | Zero | Object (V) | **getIfAbsent**, **getIfAbsentPut**, **ifPresentApply** | | **Function2** | Used by **injectInto** methods; takes the accumulator argument as the first argument, and the current item of the collection as the second argument. | Two (T,P) | Object (V) | **forEachEntry** **injectInto** **collectWith** | | **Function3** | Used by **injectIntoWith**; takes the injected argument as the first argument, the current item of the collection as the second argument, and the specified parameter for the third argument. The result of each subsequent iteration is passed in as the first argument. | Three (T,P,?) | Object (V) | **injectIntoWith** | ### Function Factories #### **Functions** | | | |-----------------|-----------------| | **getToClass** | **getToString** | | **getPassThru** | | #### **Functions0** | | | |-------------------|-------------------| | **newFastList** | **newHashBag** | | **newUnifiedMap** | **newUnifiedSet** | | **nullValue** | **value** | #### **Functions2** **fromFunction** #### **StringFunctions** | | | |----------------------------|-----------------| | **firstLetter** | **length** | | **subString** | **toFirstChar** | | **toInteger** | **toLowerCase** | | **toPrimitive** *\[type\]* | **toUpperCase** | | **trim** | **firstLetter** | #### Other Functions ##### **IfFunction** Supports if and else using a discriminator with Function. ##### **CaseFunction** This allows for multi-conditional or rule based selector using **Predicate**s (use this with guidance). []() Procedure ------------- A **Procedure** is a code block that performs an evaluation on its single argument and returns nothing. A **Procedure** is most commonly used with *ForEach* -pattern methods. ### []() Count and calculate | | | |----------------------|-------------------------------------------------------------------------------| | **CountProcedure** | Apply a **Predicate** to an object and increment a count if it returns true. | | **CounterProcedure** | Wrap a specified block and keeps track of the number of times it is executed. | ### []() Control execution | | | |------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | **ChainedProcedure** | Chain together blocks of code to be executed in sequence; **ChainedProcedure** can chain **Procedure**s, **Function**s or **Function2s**. | | **CaseProcedure** | Create an object form of a case statement, which instead of being based on a single switch value is based on a list of discriminator or block combinations. For the first discriminator that returns true for a given value in the case statement, the corresponding block will be executed. | | **IfProcedure** | Evaluate the specified block only when a **Predicate** returns true. If the result of evaluating the **Predicate** is false, and the developer has specified that there is an **elseProcedure**, then the elseProcedure is evaluated. | | **IfProcedureWith** | Same as **IfProcedure**, but with a second argument passed from the calling iteration method. | | **ObjectIntProcedure** | Takes an int as a second argument; this is usually the index of the current element of a collection. | ### []() Modify collections and maps | | | |-------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------| | **CollectionAddProcedure** | Add elements to the specified collection when block methods are called. | | **CollectionRemoveProcedure** | Remove element from the specified collection when block methods are called. | | **MapPutProcedure** | Use a specified **Function** to calculate the key for an object and puts the object into the specified Map at the position of the calculated key. | | **MultimapPutProcedure** | Use a specified **Function** to calculate the key for an object and puts the object with the key into the specified **MutableMultimap**. | ### Procedure Factories #### **Procedures** | | | |-----------------|----------------------------| | **append** | **bind** | | **caseDefault** | **fromObjectIntProcedure** | | **ifElse** | **ifTrue** | | **println** | **synchronizedEach** | #### **Procedures2** | | | |---------------------|-------------------| | **addToCollection** | **fromProcedure** | []() Help ======== Additional reference pages. []() Verify ---------- A testing utility. Eclipse Collections includes a jar file called **eclipse-collections-testutils**. This utility helps with writing unit tests. There are many collection-specific assertions, such as ```java MutableList list = Lists.mutable.with(1, 2, 3); Verify.assertListsEqual(Lists.mutable.with(1, 2, 3), list); ``` to test that two lists are equal. It is implemented as an extension of JUnit. The most important class is **Verify**. Here are some examples: ```java Verify.assertSize(2, customersFromLondon); //instead of Assert.assertEquals(2, customersFromLondon.size()); Verify.assertEmpty(Lists.mutable.empty()); Verify.assertNotEmpty(Lists.mutable.with(1)); Verify.assertContains(1, Lists.mutable.with(1)); ``` []() Eclipse Collections Cheat Sheet ------------------------------------ | RichIterable API | Description | |--------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------| | **allSatisfy** | Returns true if all elements satisfy a **Predicate**; short-circuits execution. | | **anySatisfy** | Returns true if any element satisfies a **Predicate**; short circuits execution. | | **appendString** | Prints a string representation of this collection onto the given Appendable; prints the string returned by **makeString**. | | **asSynchronized** | Returns a synchronized collection. | | **asUnmodifiable** | Returns an unmodifiable collection. | | **chunk** | Splits a collection into fixed-size chunks; the final chunk will be smaller if the collection doesn't divide evenly. | | **collect** | Transforms elements using a **Function** into a new collection; n. | | **count** | Returns the number of elements that satisfy a **Predicate**. | | **detect** | Finds the first element that satisfies a **Predicate**; short circuits execution | | **flatCollect** | Transforms and flattens elements using a **Function**. | | **forEach** | Executes a **Procedure** on each element, doesn't return anything | | **groupBy** | Gets a key for each element using a **Function** and puts the key and element into a **Multimap**. | | **groupByEach** | Special case of **groupBy** used were the **Function** returns a collection; analogous to the difference between collect and **flatCollect**. | | **injectInto** | Returns the final result of all evaluations using as the arguments each element of the collection, and the result of the previous iteration's evaluation. | | **makeString** | Converts the collection to a string using optional start, end, and separator strings. | | **max** | Returns the maximum element using either the natural order or a Comparator. | | **maxBy** | Gets some attribute from each element and returns the element whose attribute is maximal. | | **min** | Returns the minimum element using either the natural order or a Comparator. | | **minBy** | Gets some attribute from each element and returns the element whose attribute is minimal. | | **reject** | Returns the elements of a collection that do not satisfy a **Predicate**. | | **select** | Returns the elements of a collection that satisfy a **Predicate**. | | **sortThis** | Sorts the internal data structure of a **MutableList** using the natural order of the elements or a Comparator. | | **sortThisBy** | Gets some attribute from each element using a **Function** and sorts the list by the natural order of that attribute. | | **toBag** | Converts the collection to the default **MutableBag** implementation. | | **toImmutable** | Returns an immutable collection. | | **toList** | Converts the collection to a **MutableList** implementation. | | **toMap** | Converts collection to a **MutableMap** implementation using specified key and value functions. | | **toSet** | Converts the collection to a **MutableSet** implementation. | | **toSortedList** | Converts the collection to a **MutableList** implementation and sorts it using the natural order of the elements. | | **toSortedListBy** | Gets some attribute from each element using a **Function** and returns a new list sorted by the natural order of that attribute. | | **toSortedSet** | Converts the collection to a **MutableSortedSet** implementation and sorts it using the natural order of the elements. | | **toSortedSetBy** | Converts the collection to a **MutableSortedSet** implementation and sorts it based on the natural order of the attributes returned by the **Function**. | | **zip** | Takes a second **RichIterable** and pairs up all the elements; if one of the two **RichIterable**s is longer, its remaining elements are ignored. | | **zipWithIndex** | Zips the collection with the Integer indexes 0 to n-1. | | **Interfaces** | **Description** | |-----------------|------------------------------------------------------| | **Bag** | Analogous to JCF *Map* <K, Integer>. | | **Multimap** | Analogous to JCF *Map* <K, Iterable<V>>. | | **MutableList** | Analogous to JCF *List* . | | **MutableMap** | Analogous to JCF *Map* . | | **MutableSet** | Analogous to JCF *Set* . | | **Pair** | Container that holds two related objects. | | **Blocks** | **Description** | |------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | **Function** | Transforms one type (T) to another (V). | | **Function0** | A zero-argument lambda (Java 8) that returns some type; a factory. | | **Function2** | Used by **injectInto** methods; takes the accumulator argument as the first argument, and the current item of the collection as the second argument. | | **ObjectIntProcedure** | Takes an int as a second argument; this is usually the index of the current element of a collection; doesn't return anything. | | **Predicate** | Takes an object of some type (T) and returns a boolean. | | **Predicate2** | Primarily used in methods like **selectWith**, **detectWith**, **rejectWith**. The first argument is the element of the collection being iterated over, and the second argument is a parameter passed into the **Predicate2** from the calling method. | | **Procedure** | Takes an object of some type (T) and doesn't return anything. | | **Procedure2** | Takes two objects of types (T1, T2) and doesn't return anything. | | **Static utility Classes** | **To interoperate with** | |----------------------------|-----------------------------------| | **ArrayIterate** | Arrays | | **Iterate** | All iterables | | **LazyIterate** | All iterables for lazy evaluation | | **ListIterate** | Lists | | **MapIterate** | Maps | | **ParallelArrayIterate** | Arrays for parallel iteration | | **ParallelIterate** | Iterables for parallel iteration | | **ParallelMapIterate** | Maps for parallel iteration | | **StringIterate** | strings | []() Eclipse Collections Mind Map ------------------------------------ ![Eclipse Collections Mind Map](https://github.com/eclipse/eclipse-collections/blob/master/docs/EclipseCollectionsMindMap.png) eclipse-collections-11.0.0.M3/docs/jackson.md000066400000000000000000000205671407344533200207300ustar00rootroot00000000000000 # Serializing Eclipse Collections with Jackson Unfortunately, with new collection types comes incompatibility with normal serialization frameworks. [Jackson](https://github.com/FasterXML/jackson), arguably the most popular JSON serialization framework for Java, is unable to deserialize Eclipse Collections types out-of-the-box. For this purpose, there is now a [Jackson module](https://github.com/FasterXML/jackson-datatypes-collections/) supporting most Eclipse Collections types directly (including primitive collections). In this article we will cover the basics of Eclipse Collections, Jackson and that module. ## Eclipse Collections Eclipse Collections replaces many of the familiar container types from the standard library with new and improved versions. For this article, we will look at three variants of the `List` type: ```java import org.eclipse.collections.api.list.ImmutableList; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.list.primitive.IntList; import org.eclipse.collections.impl.factory.Lists; import org.eclipse.collections.impl.factory.primitive.IntLists; MutableList mutable = Lists.mutable.of("foo", "bar"); ImmutableList immutable = Lists.immutable.of("foo", "bar"); IntList intList = IntLists.immutable.of(1, 2, 3); ``` `MutableList` behaves a lot like `java.util.List`, but offers additional stream-like API we will not go into detail about here. Every `MutableList` also implements `java.util.List`, so you can pass any `MutableList` to APIs that still use the standard Java collections. `ImmutableList` does not extend `java.util.List` and - as its name suggests - does not offer any methods for mutation such as `add` or `remove`. Instead you can create copies of these collections with elements added or removed. If you wish to use these collections with traditional `java.util.List` APIs you can use the `castToList()` method on `ImmutableList`, which will return an instance of `java.util.List` that will throw exceptions on mutation operations like `remove`. `IntList` is a special type of list that offers lightweight APIs for working with primitives. Similar collection types exist for all other primitives. The problem with "normal" collections and primitives is that using a `List` or similar type will always carry additional overhead both in terms of more memory use and more CPU time due to indirection and additional garbage collection load. Because of this, for performance-critical operations, a dedicated `IntList` type is superior. Eclipse Collections is hardly the first library to provide primitive collections but combined with its handy API it makes for arguably the best library of its kind. Using Eclipse primitive collections you can have the performance of primitive arrays with the ease-of-use of the Eclipse Collections API. For all the primitive collection types there also exist mutable and immutable versions (`MutableIntList`, `ImmutableIntList`). They behave much the same as their object-based counterparts so we will not cover them here. Eclipse Collections is split into two parts: The API and the implementation of that API. Since the implementation depends on the API, we will only have to add that as a dependency to our Maven project. See the [latest release](https://github.com/eclipse/eclipse-collections/releases) for the details on the Maven or Gradle coordinates. ## Jackson Jackson is a library for transforming your data structures from and to JSON and other serialized forms. According to [mvnrepository.com](https://mvnrepository.com/popular) it is the most popular framework for this purpose. Jackson's architecture consists of three parts: A *core* that is responsible for writing streams of data (typically JSON), *databind* which is responsible for the basic object serialization API, and various Jackson modules that each handle serialization of some special types. Adding Jackson to our project is simple by using the Maven or Gradle coordinates for the latest release of [jackson-databind](https://search.maven.org/search?q=a:jackson-databind) and [jackson-datatype-eclipse-collections](https://search.maven.org/search?q=a:jackson-datatype-eclipse-collections). To start out with Jackson we create an `ObjectMapper`: ```java import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.eclipsecollections.EclipseCollectionsModule; ObjectMapper mapper = new ObjectMapper().registerModule(new EclipseCollectionsModule()); ``` We are now ready to serialize data: ```java public class MyClass { // The fields of this class must be public, or must have getters and // setters. For simplicity we will stick with public fields here. public String text; public int value; } MyClass object = new MyClass(); object.text = "foo"; object.value = 42; String json = mapper.writeValueAsString(object); // json = {"text":"foo","value":42} MyClass deserialized = mapper.readValue(json, MyClass.class); ``` ## Combining the two Now we are ready to serialize our Eclipse Collections! Lets start with a simple example: ```java public class EclipseClass { public ImmutableList strings; } EclipseClass object = new EclipseClass(); object.strings = Lists.immutable.of("foo", "bar"); String json = mapper.writeValueAsString(object); // json = {"strings":["foo","bar"]} EclipseClass deserialized = mapper.readValue(json, EclipseClass.class); ``` As you can see, the list was serialized to a JSON array, as expected. Lets try with a primitive collection: ```java public class EclipseClassInt { public IntList ints; } EclipseClassInt object = new EclipseClassInt(); object.ints = IntLists.immutable.of(1, 2, 3); String json = mapper.writeValueAsString(object); // json = {"ints":[1,2,3]} EclipseClassInt deserialized = mapper.readValue(json, EclipseClassInt.class); ``` Using the `jackson-datatype-eclipse-collections` module primitive collections are treated just like normal collections. ### Serializing directly Sometimes you do not want to write your own type wrapper but want to serialize collections directly. Because of generics, this takes some extra work to deserialize in Jackson: ```java MutableList mutable = Lists.mutable.of("foo", "bar"); String json = mapper.writeValueAsString(mutable); // json = ["foo","bar"] MutableList deserialized = mapper.readValue(json, new TypeReference>() {}); ``` Because Java does not have a syntax like `MutableList.class`, we have to stick with the more convoluted Jackson type references. **Do not attempt to use `MutableList.class` instead - you will get an error that does not immediately make clear what the issue is.** For primitive collections, because they do not use generics, using `.class` is possible: ```java IntList intList = IntLists.immutable.of(1, 2, 3); String json = mapper.writeValueAsString(intList); // json = [1,2,3] IntList deserialized = mapper.readValue(json, IntList.class); ``` ### Compact serialization The Eclipse Collections module for Jackson attempts to be consistent in the serialization of primitive collections with their array counterparts. `IntList` will serialize like an `int[]` would, `CharList` like a `char[]` would and so on. For `char` and `byte` this can make for a more compact representation. `ByteList` is serialized as base64 strings (or a binary type for non-JSON formats): ```java ByteList byteList = ByteLists.immutable.of(new byte[]{ 73, 20, 32, 23 }); String json = mapper.writeValueAsString(byteList); // json = "SRQgFw==" ``` Similarly, `CharList` will just be serialized to a JSON string: ```java CharList charList = CharLists.immutable.of('f', 'o', 'o'); String json = mapper.writeValueAsString(charList); // json = "foo" ``` For `CharList`, this feature can be turned off in Jackson: ```java CharList charList = CharLists.immutable.of('f', 'o', 'o'); String json = mapper.writer(SerializationFeature.WRITE_CHAR_ARRAYS_AS_JSON_ARRAYS) .writeValueAsString(charList); // json = ["f","o","o"] ``` eclipse-collections-11.0.0.M3/eclipse-collections-api/000077500000000000000000000000001407344533200225235ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/bnd.bnd000066400000000000000000000003111407344533200237460ustar00rootroot00000000000000package-version=${version;===;${Bundle-Version}} Automatic-Module-Name: org.eclipse.collections.api Bundle-SymbolicName: org.eclipse.collections.api Export-Package: \ *;version="${package-version}" eclipse-collections-11.0.0.M3/eclipse-collections-api/eclipse-collections-api.iml000066400000000000000000000015401407344533200277350ustar00rootroot00000000000000 eclipse-collections-11.0.0.M3/eclipse-collections-api/pom.xml000066400000000000000000000111301407344533200240340ustar00rootroot00000000000000 4.0.0 eclipse-collections-parent org.eclipse.collections 11.0.0.M3 eclipse-collections-api jar Eclipse Collections API ../unit-tests/target/jacoco.exec,../unit-tests-java8/target/jacoco.exec,../eclipse-collections-testutils/target/jacoco.exec,../serialization-tests/target/jacoco.exec org.eclipse.collections eclipse-collections-code-generator-maven-plugin ${project.version} generate-sources generate api maven-surefire-plugin maven-source-plugin biz.aQute.bnd bnd-maven-plugin maven-jar-plugin ${project.build.outputDirectory}/META-INF/MANIFEST.MF org.codehaus.mojo sonar-maven-plugin maven-checkstyle-plugin org.codehaus.mojo findbugs-maven-plugin maven-javadoc-plugin Eclipse Collections API - ${project.version} Eclipse Collections API - ${project.version} public https://docs.oracle.com/javase/8/docs/api/ ${project.version} none maven-enforcer-plugin org.codehaus.mojo clirr-maven-plugin org.eclipse.collections eclipse-collections-api ${project.previous.version} ${project.build.directory}/clirr.txt eclipse-collections-11.0.0.M3/eclipse-collections-api/src/000077500000000000000000000000001407344533200233125ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/000077500000000000000000000000001407344533200242365ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/000077500000000000000000000000001407344533200251575ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/000077500000000000000000000000001407344533200257465ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/000077500000000000000000000000001407344533200273725ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/000077500000000000000000000000001407344533200317105ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/000077500000000000000000000000001407344533200324615ustar00rootroot00000000000000InternalIterable.java000066400000000000000000000077341407344533200365040ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api; import java.util.function.Consumer; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.block.procedure.primitive.ObjectIntProcedure; import org.eclipse.collections.api.ordered.OrderedIterable; /** * The base interface for all Eclipse Collections. All Eclipse Collections are internally iterable, and this interface provides * the base set of internal iterators that every Eclipse collection should implement. */ public interface InternalIterable extends Iterable { /** * The procedure is executed for each element in the iterable. *

* Example using a Java 8 lambda: *

     * people.forEach(Procedures.cast(person -> LOGGER.info(person.getName())));
     * 
*

* Example using an anonymous inner class: *

     * people.forEach(new Procedure<Person>()
     * {
     *     public void value(Person person)
     *     {
     *         LOGGER.info(person.getName());
     *     }
     * });
     * 
* NOTE: This method started to conflict with {@link Iterable#forEach(java.util.function.Consumer)} * since Java 1.8. It is recommended to use {@link RichIterable#each(Procedure)} instead to avoid casting to Procedure. * * @see RichIterable#each(Procedure) * @see Iterable#forEach(java.util.function.Consumer) */ @SuppressWarnings("UnnecessaryFullyQualifiedName") void forEach(Procedure procedure); @Override default void forEach(Consumer consumer) { Procedure procedure = consumer::accept; this.forEach(procedure); } /** * Iterates over the iterable passing each element and the current relative int index to the specified instance of * ObjectIntProcedure. *

* Example using a Java 8 lambda: *

     * people.forEachWithIndex((Person person, int index) -> LOGGER.info("Index: " + index + " person: " + person.getName()));
     * 
*

* Example using an anonymous inner class: *

     * people.forEachWithIndex(new ObjectIntProcedure<Person>()
     * {
     *     public void value(Person person, int index)
     *     {
     *         LOGGER.info("Index: " + index + " person: " + person.getName());
     *     }
     * });
     * 
* * @deprecated in 6.0. Use {@link OrderedIterable#forEachWithIndex(ObjectIntProcedure)} instead. */ @Deprecated void forEachWithIndex(ObjectIntProcedure objectIntProcedure); /** * The procedure2 is evaluated for each element in the iterable with the specified parameter provided * as the second argument. *

* Example using a Java 8 lambda: *

     * people.forEachWith((Person person, Person other) ->
     *     {
     *         if (person.isRelatedTo(other))
     *         {
     *              LOGGER.info(person.getName());
     *         }
     *     }, fred);
     * 
*

* Example using an anonymous inner class: *

     * people.forEachWith(new Procedure2<Person, Person>()
     * {
     *     public void value(Person person, Person other)
     *     {
     *         if (person.isRelatedTo(other))
     *         {
     *              LOGGER.info(person.getName());
     *         }
     *     }
     * }, fred);
     * 
*/

void forEachWith(Procedure2 procedure, P parameter); } LazyIterable.java000066400000000000000000000156131407344533200356420ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api; import java.util.Collection; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.ordered.OrderedIterable; import org.eclipse.collections.api.tuple.Pair; /** * A LazyIterable is RichIterable which will defer evaluation for certain methods like select, reject, collect, etc. * Any methods that do not return a LazyIterable when called will cause evaluation to be forced. * * @since 1.0 */ public interface LazyIterable extends RichIterable { @Override T getFirst(); /** * Creates a deferred iterable for selecting elements from the current iterable. */ @Override LazyIterable select(Predicate predicate); @Override

LazyIterable selectWith(Predicate2 predicate, P parameter); @Override LazyIterable selectInstancesOf(Class clazz); /** * Creates a deferred iterable for rejecting elements from the current iterable. */ @Override LazyIterable reject(Predicate predicate); @Override

LazyIterable rejectWith(Predicate2 predicate, P parameter); /** * Creates a deferred iterable for collecting elements from the current iterable. */ @Override LazyIterable collect(Function function); @Override LazyIterable collectWith(Function2 function, P parameter); /** * Creates a deferred iterable for selecting and collecting elements from the current iterable. */ @Override LazyIterable collectIf(Predicate predicate, Function function); /** * Creates a deferred take iterable for the current iterable using the specified count as the limit. */ LazyIterable take(int count); /** * Creates a deferred drop iterable for the current iterable using the specified count as the limit. */ LazyIterable drop(int count); /** * @see OrderedIterable#takeWhile(Predicate) * @since 8.0 */ LazyIterable takeWhile(Predicate predicate); /** * @see OrderedIterable#dropWhile(Predicate) * @since 8.0 */ LazyIterable dropWhile(Predicate predicate); /** * Creates a deferred distinct iterable to get distinct elements from the current iterable. * * @since 5.0 */ LazyIterable distinct(); /** * Creates a deferred flattening iterable for the current iterable. */ @Override LazyIterable flatCollect(Function> function); /** * @since 9.2 */ @Override default LazyIterable flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } /** * Creates a deferred iterable that will join this iterable with the specified iterable. */ LazyIterable concatenate(Iterable iterable); /** * Creates a deferred zip iterable. */ @Override LazyIterable> zip(Iterable that); /** * Creates a deferred zipWithIndex iterable. */ @Override LazyIterable> zipWithIndex(); /** * Creates a deferred chunk iterable. */ @Override LazyIterable> chunk(int size); /** * Creates a deferred tap iterable. */ @Override LazyIterable tap(Procedure procedure); /** * Iterates over this iterable adding all elements into the target collection. */ @Override > R into(R target); /** * Returns a lazy BooleanIterable which will transform the underlying iterable data to boolean values based on the booleanFunction. */ @Override LazyBooleanIterable collectBoolean(BooleanFunction booleanFunction); /** * Returns a lazy ByteIterable which will transform the underlying iterable data to byte values based on the byteFunction. */ @Override LazyByteIterable collectByte(ByteFunction byteFunction); /** * Returns a lazy CharIterable which will transform the underlying iterable data to char values based on the charFunction. */ @Override LazyCharIterable collectChar(CharFunction charFunction); /** * Returns a lazy DoubleIterable which will transform the underlying iterable data to double values based on the doubleFunction. */ @Override LazyDoubleIterable collectDouble(DoubleFunction doubleFunction); /** * Returns a lazy FloatIterable which will transform the underlying iterable data to float values based on the floatFunction. */ @Override LazyFloatIterable collectFloat(FloatFunction floatFunction); /** * Returns a lazy IntIterable which will transform the underlying iterable data to int values based on the intFunction. */ @Override LazyIntIterable collectInt(IntFunction intFunction); /** * Returns a lazy LongIterable which will transform the underlying iterable data to long values based on the longFunction. */ @Override LazyLongIterable collectLong(LongFunction longFunction); /** * Returns a lazy ShortIterable which will transform the underlying iterable data to short values based on the shortFunction. */ @Override LazyShortIterable collectShort(ShortFunction shortFunction); } ParallelIterable.java000066400000000000000000000253211407344533200364540ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api; import java.util.Comparator; import org.eclipse.collections.api.annotation.Beta; import org.eclipse.collections.api.bag.MutableBag; import org.eclipse.collections.api.bag.sorted.MutableSortedBag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.map.MapIterable; import org.eclipse.collections.api.map.MutableMap; import org.eclipse.collections.api.map.sorted.MutableSortedMap; import org.eclipse.collections.api.multimap.Multimap; import org.eclipse.collections.api.set.MutableSet; import org.eclipse.collections.api.set.sorted.MutableSortedSet; /** * A ParallelIterable is RichIterable which will defer evaluation for certain methods like select, reject, collect, etc. * Any methods that do not return a ParallelIterable when called will cause evaluation to be forced. Evaluation occurs * in parallel. All code blocks passed in must be stateless or thread-safe. * * @since 5.0 */ @Beta public interface ParallelIterable { ParallelIterable asUnique(); /** * Creates a parallel iterable for selecting elements from the current iterable. */ ParallelIterable select(Predicate predicate);

ParallelIterable selectWith(Predicate2 predicate, P parameter); ParallelIterable selectInstancesOf(Class clazz); /** * Creates a parallel iterable for rejecting elements from the current iterable. */ ParallelIterable reject(Predicate predicate);

ParallelIterable rejectWith(Predicate2 predicate, P parameter); /** * Creates a parallel iterable for collecting elements from the current iterable. */ ParallelIterable collect(Function function); ParallelIterable collectWith(Function2 function, P parameter); /** * Creates a parallel iterable for selecting and collecting elements from the current iterable. */ ParallelIterable collectIf(Predicate predicate, Function function); /** * Creates a parallel flattening iterable for the current iterable. */ ParallelIterable flatCollect(Function> function); // /** // * Returns a parallel BooleanIterable which will transform the underlying iterable data to boolean values based on the booleanFunction. // */ // ParallelBooleanIterable collectBoolean(BooleanFunction booleanFunction); // // /** // * Returns a parallel ByteIterable which will transform the underlying iterable data to byte values based on the byteFunction. // */ // ParallelByteIterable collectByte(ByteFunction byteFunction); // // /** // * Returns a parallel CharIterable which will transform the underlying iterable data to char values based on the charFunction. // */ // ParallelCharIterable collectChar(CharFunction charFunction); // // /** // * Returns a parallel DoubleIterable which will transform the underlying iterable data to double values based on the doubleFunction. // */ // ParallelDoubleIterable collectDouble(DoubleFunction doubleFunction); // // /** // * Returns a parallel FloatIterable which will transform the underlying iterable data to float values based on the floatFunction. // */ // ParallelFloatIterable collectFloat(FloatFunction floatFunction); // // /** // * Returns a parallel IntIterable which will transform the underlying iterable data to int values based on the intFunction. // */ // ParallelIntIterable collectInt(IntFunction intFunction); // // /** // * Returns a parallel LongIterable which will transform the underlying iterable data to long values based on the longFunction. // */ // ParallelLongIterable collectLong(LongFunction longFunction); // // /** // * Returns a parallel ShortIterable which will transform the underlying iterable data to short values based on the shortFunction. // */ // ParallelShortIterable collectShort(ShortFunction shortFunction); void forEach(Procedure procedure);

void forEachWith(Procedure2 procedure, P parameter); T detect(Predicate predicate);

T detectWith(Predicate2 predicate, P parameter); T detectIfNone(Predicate predicate, Function0 function);

T detectWithIfNone(Predicate2 predicate, P parameter, Function0 function); int count(Predicate predicate);

int countWith(Predicate2 predicate, P parameter); boolean anySatisfy(Predicate predicate);

boolean anySatisfyWith(Predicate2 predicate, P parameter); boolean allSatisfy(Predicate predicate);

boolean allSatisfyWith(Predicate2 predicate, P parameter); boolean noneSatisfy(Predicate predicate);

boolean noneSatisfyWith(Predicate2 predicate, P parameter); MutableList toList(); default MutableList toSortedList() { return this.toList().toSortedList(); } MutableList toSortedList(Comparator comparator); > MutableList toSortedListBy(Function function); MutableSet toSet(); MutableSortedSet toSortedSet(); MutableSortedSet toSortedSet(Comparator comparator); > MutableSortedSet toSortedSetBy(Function function); MutableBag toBag(); MutableSortedBag toSortedBag(); MutableSortedBag toSortedBag(Comparator comparator); > MutableSortedBag toSortedBagBy(Function function); MutableMap toMap(Function keyFunction, Function valueFunction); MutableSortedMap toSortedMap(Function keyFunction, Function valueFunction); MutableSortedMap toSortedMap(Comparator comparator, Function keyFunction, Function valueFunction); default Object[] toArray() { throw new UnsupportedOperationException(this.getClass().getSimpleName() + ".toArray() not implemented yet"); } T1[] toArray(T1[] target); T min(Comparator comparator); T max(Comparator comparator); T min(); T max(); > T minBy(Function function); > T maxBy(Function function); /** * Returns the final long result of evaluating function for each element of the iterable in parallel * and adding the results together. * * @since 6.0 */ long sumOfInt(IntFunction function); /** * Returns the final double result of evaluating function for each element of the iterable in parallel * and adding the results together. It uses Kahan summation algorithm to reduce numerical error. * * @since 6.0 */ double sumOfFloat(FloatFunction function); /** * Returns the final long result of evaluating function for each element of the iterable in parallel * and adding the results together. * * @since 6.0 */ long sumOfLong(LongFunction function); /** * Returns the final double result of evaluating function for each element of the iterable in parallel * and adding the results together. It uses Kahan summation algorithm to reduce numerical error. * * @since 6.0 */ double sumOfDouble(DoubleFunction function); default String makeString() { return this.makeString(", "); } default String makeString(String separator) { return this.makeString("", separator, ""); } default String makeString(String start, String separator, String end) { Appendable stringBuilder = new StringBuilder(); this.appendString(stringBuilder, start, separator, end); return stringBuilder.toString(); } default void appendString(Appendable appendable) { this.appendString(appendable, ", "); } default void appendString(Appendable appendable, String separator) { this.appendString(appendable, "", separator, ""); } void appendString(Appendable appendable, String start, String separator, String end); Multimap groupBy(Function function); Multimap groupByEach(Function> function); MapIterable groupByUniqueKey(Function function); MapIterable aggregateInPlaceBy(Function groupBy, Function0 zeroValueFactory, Procedure2 mutatingAggregator); MapIterable aggregateBy(Function groupBy, Function0 zeroValueFactory, Function2 nonMutatingAggregator); } PrimitiveIterable.java000066400000000000000000000075251407344533200366760ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api; /** * PrimitiveIterable includes API that is common to all primitive collections. * * @since 3.0 */ public interface PrimitiveIterable { /** * Returns the number of items in this iterable. * * @since 3.0 */ int size(); /** * Returns true if this iterable has zero items. * * @since 3.0 */ default boolean isEmpty() { return this.size() == 0; } /** * The English equivalent of !this.isEmpty() * * @since 3.0 */ default boolean notEmpty() { return this.size() != 0; } /** * Returns a string with the elements of this iterable separated by commas with spaces and * enclosed in square brackets. * *

     * Assert.assertEquals("[]", IntLists.mutable.empty().toString());
     * Assert.assertEquals("[1]", IntLists.mutable.with(1).toString());
     * Assert.assertEquals("[1, 2, 3]", IntLists.mutable.with(1, 2, 3).toString());
     * 
* * @return a string representation of this PrimitiveIterable * @see java.util.AbstractCollection#toString() */ @Override String toString(); /** * Returns a string representation of this collection by delegating to {@link #makeString(String)} and defaulting * the separator parameter to the characters {@code ", "} (comma and space). * * @return a string representation of this collection. * @since 3.0 */ default String makeString() { return this.makeString(", "); } /** * Returns a string representation of this collection by delegating to {@link #makeString(String, String, String)} * and defaulting the start and end parameters to {@code ""} (the empty String). * * @return a string representation of this collection. * @since 3.0 */ default String makeString(String separator) { return this.makeString("", separator, ""); } /** * Returns a string representation of this collection with the elements separated by the specified * separator and enclosed between the start and end strings. * * @return a string representation of this collection. * @since 3.0 */ default String makeString(String start, String separator, String end) { Appendable stringBuilder = new StringBuilder(); this.appendString(stringBuilder, start, separator, end); return stringBuilder.toString(); } /** * Prints a string representation of this collection onto the given {@code Appendable}. Prints the string returned * by {@link #makeString()}. * * @since 3.0 */ default void appendString(Appendable appendable) { this.appendString(appendable, ", "); } /** * Prints a string representation of this collection onto the given {@code Appendable}. Prints the string returned * by {@link #makeString(String)}. * * @since 3.0 */ default void appendString(Appendable appendable, String separator) { this.appendString(appendable, "", separator, ""); } /** * Prints a string representation of this collection onto the given {@code Appendable}. Prints the string returned * by {@link #makeString(String, String, String)}. * * @since 3.0 */ void appendString(Appendable appendable, String start, String separator, String end); } RichIterable.java000066400000000000000000003022031407344533200356020ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api; import java.util.Collection; import java.util.Comparator; import java.util.DoubleSummaryStatistics; import java.util.IntSummaryStatistics; import java.util.LongSummaryStatistics; import java.util.Map; import java.util.NoSuchElementException; import java.util.Objects; import java.util.Optional; import java.util.function.BiConsumer; import java.util.function.BinaryOperator; import java.util.function.Supplier; import java.util.stream.Collector; import java.util.stream.Stream; import org.eclipse.collections.api.bag.Bag; import org.eclipse.collections.api.bag.ImmutableBag; import org.eclipse.collections.api.bag.MutableBag; import org.eclipse.collections.api.bag.MutableBagIterable; import org.eclipse.collections.api.bag.sorted.ImmutableSortedBag; import org.eclipse.collections.api.bag.sorted.MutableSortedBag; import org.eclipse.collections.api.bimap.ImmutableBiMap; import org.eclipse.collections.api.bimap.MutableBiMap; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.DoubleObjectToDoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.FloatObjectToFloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.IntObjectToIntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.LongObjectToLongFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.collection.primitive.MutableBooleanCollection; import org.eclipse.collections.api.collection.primitive.MutableByteCollection; import org.eclipse.collections.api.collection.primitive.MutableCharCollection; import org.eclipse.collections.api.collection.primitive.MutableDoubleCollection; import org.eclipse.collections.api.collection.primitive.MutableFloatCollection; import org.eclipse.collections.api.collection.primitive.MutableIntCollection; import org.eclipse.collections.api.collection.primitive.MutableLongCollection; import org.eclipse.collections.api.collection.primitive.MutableShortCollection; import org.eclipse.collections.api.factory.Bags; import org.eclipse.collections.api.factory.Lists; import org.eclipse.collections.api.factory.Maps; import org.eclipse.collections.api.factory.Sets; import org.eclipse.collections.api.factory.SortedBags; import org.eclipse.collections.api.factory.SortedSets; import org.eclipse.collections.api.list.ImmutableList; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.map.ImmutableMap; import org.eclipse.collections.api.map.MapIterable; import org.eclipse.collections.api.map.MutableMap; import org.eclipse.collections.api.map.MutableMapIterable; import org.eclipse.collections.api.map.primitive.ObjectDoubleMap; import org.eclipse.collections.api.map.primitive.ObjectLongMap; import org.eclipse.collections.api.map.sorted.MutableSortedMap; import org.eclipse.collections.api.multimap.Multimap; import org.eclipse.collections.api.multimap.MutableMultimap; import org.eclipse.collections.api.ordered.OrderedIterable; import org.eclipse.collections.api.partition.PartitionIterable; import org.eclipse.collections.api.set.ImmutableSet; import org.eclipse.collections.api.set.MutableSet; import org.eclipse.collections.api.set.sorted.ImmutableSortedSet; import org.eclipse.collections.api.set.sorted.MutableSortedSet; import org.eclipse.collections.api.tuple.Pair; /** * RichIterable is an interface which extends the InternalIterable interface with several internal iterator methods, from * the Smalltalk Collection protocol. These include select, reject, detect, collect, injectInto, anySatisfy, * allSatisfy. The API also includes converter methods to convert a RichIterable to a List (toList), to a sorted * List (toSortedList), to a Set (toSet), and to a Map (toMap). * * @since 1.0 */ public interface RichIterable extends InternalIterable { @Override default void forEach(Procedure procedure) { this.each(procedure); } /** * Returns the number of items in this iterable. * * @since 1.0 */ int size(); /** * Returns true if this iterable has zero items. * * @since 1.0 */ boolean isEmpty(); /** * The English equivalent of !this.isEmpty() * * @since 1.0 */ default boolean notEmpty() { return !this.isEmpty(); } /** * Returns any element of an iterable. * * @return an element of an iterable. * @since 10.0 */ default T getAny() { return this.getFirst(); } /** * Returns the first element of an iterable. In the case of a List it is the element at the first index. In the * case of any other Collection, it is the first element that would be returned during an iteration. If the * iterable is empty, null is returned. If null is a valid element of the container, then a developer would need to * check to see if the iterable is empty to validate that a null result was not due to the container being empty. *

* The order of Sets are not guaranteed (except for TreeSets and other Ordered Set implementations), so if you use * this method, the first element could be any element from the Set. * * @since 1.0 * @deprecated in 6.0. Use {@link OrderedIterable#getFirst()} instead. */ @Deprecated T getFirst(); /** * Returns the last element of an iterable. In the case of a List it is the element at the last index. In the case * of any other Collection, it is the last element that would be returned during an iteration. If the iterable is * empty, null is returned. If null is a valid element of the container, then a developer would need to check to * see if the iterable is empty to validate that a null result was not due to the container being empty. *

* The order of Sets are not guaranteed (except for TreeSets and other Ordered Set implementations), so if you use * this method, the last element could be any element from the Set. * * @since 1.0 * @deprecated in 6.0. Use {@link OrderedIterable#getLast()} instead. */ @Deprecated T getLast(); /** * Returns the element if the iterable has exactly one element. Otherwise, throw {@link IllegalStateException}. * * @return an element of an iterable. * @throws IllegalStateException if iterable is empty or has multiple elements. * @since 8.0 */ default T getOnly() { if (this.size() == 1) { return this.getFirst(); } throw new IllegalStateException("Size must be 1 but was " + this.size()); } /** * Returns true if the iterable has an element which responds true to element.equals(object). * * @since 1.0 */ boolean contains(Object object); /** * Returns true if the iterable has an element which responds true to element.equals(value) * after applying the specified function to the element. * * @since 10.3 */ default boolean containsBy( Function function, V value) { Objects.requireNonNull(function); return this.anySatisfy(each -> Objects.equals(value, function.valueOf(each))); } /** * Returns true if all elements in source are contained in this collection. * * @since 1.0 */ boolean containsAllIterable(Iterable source); /** * Returns true if all elements in source are contained in this collection. * * @see Collection#containsAll(Collection) * @since 1.0 */ boolean containsAll(Collection source); /** * Returns true if all elements in the specified var arg array are contained in this collection. * * @since 1.0 */ boolean containsAllArguments(Object... elements); /** * Executes the Procedure for each element in the iterable and returns {@code this}. *

* Example using a Java 8 lambda expression: *

     * RichIterable<Person> tapped =
     *     people.tap(person -> LOGGER.info(person.getName()));
     * 
*

* Example using an anonymous inner class: *

     * RichIterable<Person> tapped =
     *     people.tap(new Procedure<Person>()
     *     {
     *         public void value(Person person)
     *         {
     *             LOGGER.info(person.getName());
     *         }
     *     });
     * 
* * @see #each(Procedure) * @see #forEach(Procedure) * @since 6.0 */ RichIterable tap(Procedure procedure); /** * The procedure is executed for each element in the iterable. *

* Example using a Java 8 lambda expression: *

     * people.each(person -> LOGGER.info(person.getName()));
     * 
*

* Example using an anonymous inner class: *

     * people.each(new Procedure<Person>()
     * {
     *     public void value(Person person)
     *     {
     *         LOGGER.info(person.getName());
     *     }
     * });
     * 
* This method is a variant of {@link InternalIterable#forEach(Procedure)} * that has a signature conflict with {@link Iterable#forEach(java.util.function.Consumer)}. * * @see InternalIterable#forEach(Procedure) * @see Iterable#forEach(java.util.function.Consumer) * @since 6.0 */ @SuppressWarnings("UnnecessaryFullyQualifiedName") void each(Procedure procedure); /** * Returns all elements of the source collection that return true when evaluating the predicate. This method is also * commonly called filter. *

* Example using a Java 8 lambda expression: *

     * RichIterable<Person> selected =
     *     people.select(person -> person.getAddress().getCity().equals("London"));
     * 
*

* Example using an anonymous inner class: *

     * RichIterable<Person> selected =
     *     people.select(new Predicate<Person>()
     *     {
     *         public boolean accept(Person person)
     *         {
     *             return person.getAddress().getCity().equals("London");
     *         }
     *     });
     * 
* * @since 1.0 */ RichIterable select(Predicate predicate); /** * Same as the select method with one parameter but uses the specified target collection for the results. *

* Example using a Java 8 lambda expression: *

     * MutableList<Person> selected =
     *     people.select(person -> person.person.getLastName().equals("Smith"), Lists.mutable.empty());
     * 
*

* Example using an anonymous inner class: *

     * MutableList<Person> selected =
     *     people.select(new Predicate<Person>()
     *     {
     *         public boolean accept(Person person)
     *         {
     *             return person.person.getLastName().equals("Smith");
     *         }
     *     }, Lists.mutable.empty());
     * 
*

* * @param predicate a {@link Predicate} to use as the select criteria * @param target the Collection to append to for all elements in this {@code RichIterable} that meet select criteria {@code predicate} * @return {@code target}, which contains appended elements as a result of the select criteria * @see #select(Predicate) * @since 1.0 */ > R select(Predicate predicate, R target); /** * Similar to {@link #select(Predicate)}, except with an evaluation parameter for the second generic argument in {@link Predicate2}. *

* E.g. return a {@link Collection} of Person elements where the person has an age greater than or equal to 18 years *

* Example using a Java 8 lambda expression: *

     * RichIterable<Person> selected =
     *     people.selectWith((Person person, Integer age) -> person.getAge()>= age, Integer.valueOf(18));
     * 
*

* Example using an anonymous inner class: *

     * RichIterable<Person> selected =
     *     people.selectWith(new Predicate2<Person, Integer>()
     *     {
     *         public boolean accept(Person person, Integer age)
     *         {
     *             return person.getAge()>= age;
     *         }
     *     }, Integer.valueOf(18));
     * 
* * @param predicate a {@link Predicate2} to use as the select criteria * @param parameter a parameter to pass in for evaluation of the second argument {@code P} in {@code predicate} * @see #select(Predicate) * @since 5.0 */

RichIterable selectWith(Predicate2 predicate, P parameter); /** * Similar to {@link #select(Predicate, Collection)}, except with an evaluation parameter for the second generic argument in {@link Predicate2}. *

* E.g. return a {@link Collection} of Person elements where the person has an age greater than or equal to 18 years *

* Example using a Java 8 lambda expression: *

     * MutableList<Person> selected =
     *     people.selectWith((Person person, Integer age) -> person.getAge()>= age, Integer.valueOf(18), Lists.mutable.empty());
     * 
*

* Example using an anonymous inner class: *

     * MutableList<Person> selected =
     *     people.selectWith(new Predicate2<Person, Integer>()
     *     {
     *         public boolean accept(Person person, Integer age)
     *         {
     *             return person.getAge()>= age;
     *         }
     *     }, Integer.valueOf(18), Lists.mutable.empty());
     * 
* * @param predicate a {@link Predicate2} to use as the select criteria * @param parameter a parameter to pass in for evaluation of the second argument {@code P} in {@code predicate} * @param targetCollection the Collection to append to for all elements in this {@code RichIterable} that meet select criteria {@code predicate} * @return {@code targetCollection}, which contains appended elements as a result of the select criteria * @see #select(Predicate) * @see #select(Predicate, Collection) * @since 1.0 */ > R selectWith( Predicate2 predicate, P parameter, R targetCollection); /** * Returns all elements of the source collection that return false when evaluating of the predicate. This method is also * sometimes called filterNot and is the equivalent of calling iterable.select(Predicates.not(predicate)). *

* Example using a Java 8 lambda expression: *

     * RichIterable<Person> rejected =
     *     people.reject(person -> person.person.getLastName().equals("Smith"));
     * 
*

* Example using an anonymous inner class: *

     * RichIterable<Person> rejected =
     *     people.reject(new Predicate<Person>()
     *     {
     *         public boolean accept(Person person)
     *         {
     *             return person.person.getLastName().equals("Smith");
     *         }
     *     });
     * 
* * @param predicate a {@link Predicate} to use as the reject criteria * @return a RichIterable that contains elements that cause {@link Predicate#accept(Object)} method to evaluate to false * @since 1.0 */ RichIterable reject(Predicate predicate); /** * Similar to {@link #reject(Predicate)}, except with an evaluation parameter for the second generic argument in {@link Predicate2}. *

* E.g. return a {@link Collection} of Person elements where the person has an age greater than or equal to 18 years *

* Example using a Java 8 lambda expression: *

     * RichIterable<Person> rejected =
     *     people.rejectWith((Person person, Integer age) -> person.getAge() < age, Integer.valueOf(18));
     * 
*

* Example using an anonymous inner class: *

     * MutableList<Person> rejected =
     *     people.rejectWith(new Predicate2<Person, Integer>()
     *     {
     *         public boolean accept(Person person, Integer age)
     *         {
     *             return person.getAge() < age;
     *         }
     *     }, Integer.valueOf(18));
     * 
* * @param predicate a {@link Predicate2} to use as the select criteria * @param parameter a parameter to pass in for evaluation of the second argument {@code P} in {@code predicate} * @see #select(Predicate) * @since 5.0 */

RichIterable rejectWith(Predicate2 predicate, P parameter); /** * Same as the reject method with one parameter but uses the specified target collection for the results. *

* Example using a Java 8 lambda expression: *

     * MutableList<Person> rejected =
     *     people.reject(person -> person.person.getLastName().equals("Smith"), Lists.mutable.empty());
     * 
*

* Example using an anonymous inner class: *

     * MutableList<Person> rejected =
     *     people.reject(new Predicate<Person>()
     *     {
     *         public boolean accept(Person person)
     *         {
     *             return person.person.getLastName().equals("Smith");
     *         }
     *     }, Lists.mutable.empty());
     * 
* * @param predicate a {@link Predicate} to use as the reject criteria * @param target the Collection to append to for all elements in this {@code RichIterable} that cause {@code Predicate#accept(Object)} method to evaluate to false * @return {@code target}, which contains appended elements as a result of the reject criteria * @since 1.0 */ > R reject(Predicate predicate, R target); /** * Similar to {@link #reject(Predicate, Collection)}, except with an evaluation parameter for the second generic argument in {@link Predicate2}. *

* E.g. return a {@link Collection} of Person elements where the person has an age greater than or equal to 18 years *

* Example using a Java 8 lambda expression: *

     * MutableList<Person> rejected =
     *     people.rejectWith((Person person, Integer age) -> person.getAge() < age, Integer.valueOf(18), Lists.mutable.empty());
     * 
*

* Example using an anonymous inner class: *

     * MutableList<Person> rejected =
     *     people.rejectWith(new Predicate2<Person, Integer>()
     *     {
     *         public boolean accept(Person person, Integer age)
     *         {
     *             return person.getAge() < age;
     *         }
     *     }, Integer.valueOf(18), Lists.mutable.empty());
     * 
* * @param predicate a {@link Predicate2} to use as the reject criteria * @param parameter a parameter to pass in for evaluation of the second argument {@code P} in {@code predicate} * @param targetCollection the Collection to append to for all elements in this {@code RichIterable} that cause {@code Predicate#accept(Object)} method to evaluate to false * @return {@code targetCollection}, which contains appended elements as a result of the reject criteria * @see #reject(Predicate) * @see #reject(Predicate, Collection) * @since 1.0 */ > R rejectWith( Predicate2 predicate, P parameter, R targetCollection); /** * Filters a collection into a PartitionedIterable based on the evaluation of the predicate. *

* Example using a Java 8 lambda expression: *

     * PartitionIterable<Person> newYorkersAndNonNewYorkers =
     *     people.partition(person -> person.getAddress().getState().getName().equals("New York"));
     * 
*

* Example using an anonymous inner class: *

     * PartitionIterable<Person> newYorkersAndNonNewYorkers =
     *     people.partition(new Predicate<Person>()
     *     {
     *         public boolean accept(Person person)
     *         {
     *             return person.getAddress().getState().getName().equals("New York");
     *         }
     *     });
     * 
* * @since 1.0. */ PartitionIterable partition(Predicate predicate); /** * Filters a collection into a PartitionIterable based on the evaluation of the predicate. *

* Example using a Java 8 lambda expression: *

     * PartitionIterable<Person> newYorkersAndNonNewYorkers =
     *     people.partitionWith((Person person, String state) -> person.getAddress().getState().getName().equals(state), "New York");
     * 
*

* Example using an anonymous inner class: *

     * PartitionIterable<Person> newYorkersAndNonNewYorkers =
     *     people.partitionWith(new Predicate2<Person, String>()
     *     {
     *         public boolean accept(Person person, String state)
     *         {
     *             return person.getAddress().getState().getName().equals(state);
     *         }
     *     }, "New York");
     * 
* * @since 5.0. */

PartitionIterable partitionWith(Predicate2 predicate, P parameter); /** * Returns all elements of the source collection that are instances of the Class {@code clazz}. * *

     * RichIterable<Integer> integers =
     *     List.mutable.with(new Integer(0), new Long(0L), new Double(0.0)).selectInstancesOf(Integer.class);
     * 
* * @since 2.0 */ RichIterable selectInstancesOf(Class clazz); /** * Returns a new collection with the results of applying the specified function on each element of the source * collection. This method is also commonly called transform or map. *

* Example using a Java 8 lambda expression: *

     * RichIterable<String> names =
     *     people.collect(person -> person.getFirstName() + " " + person.getLastName());
     * 
*

* Example using an anonymous inner class: *

     * RichIterable<String> names =
     *     people.collect(new Function<Person, String>()
     *     {
     *         public String valueOf(Person person)
     *         {
     *             return person.getFirstName() + " " + person.getLastName();
     *         }
     *     });
     * 
* * @since 1.0 */ RichIterable collect(Function function); /** * Same as {@link #collect(Function)}, except that the results are gathered into the specified {@code target} * collection. *

* Example using a Java 8 lambda expression: *

     * MutableList<String> names =
     *     people.collect(person -> person.getFirstName() + " " + person.getLastName(), Lists.mutable.empty());
     * 
*

* Example using an anonymous inner class: *

     * MutableList<String> names =
     *     people.collect(new Function<Person, String>()
     *     {
     *         public String valueOf(Person person)
     *         {
     *             return person.getFirstName() + " " + person.getLastName();
     *         }
     *     }, Lists.mutable.empty());
     * 
* * @param function a {@link Function} to use as the collect transformation function * @param target the Collection to append to for all elements in this {@code RichIterable} that meet select criteria {@code function} * @return {@code target}, which contains appended elements as a result of the collect transformation * @see #collect(Function) * @since 1.0 */ > R collect(Function function, R target); /** * Returns a new primitive {@code boolean} iterable with the results of applying the specified function on each element * of the source collection. This method is also commonly called transform or map. *

* Example using a Java 8 lambda expression: *

     * BooleanIterable licenses =
     *     people.collectBoolean(person -> person.hasDrivingLicense());
     * 
*

* Example using an anonymous inner class: *

     * BooleanIterable licenses =
     *     people.collectBoolean(new BooleanFunction<Person>()
     *     {
     *         public boolean booleanValueOf(Person person)
     *         {
     *             return person.hasDrivingLicense();
     *         }
     *     });
     * 
* * @since 4.0 */ BooleanIterable collectBoolean(BooleanFunction booleanFunction); /** * Same as {@link #collectBoolean(BooleanFunction)}, except that the results are gathered into the specified {@code target} * collection. *

* Example using a Java 8 lambda expression: *

     * BooleanArrayList licenses =
     *     people.collectBoolean(person -> person.hasDrivingLicense(), new BooleanArrayList());
     * 
*

* Example using an anonymous inner class: *

     * BooleanArrayList licenses =
     *     people.collectBoolean(new BooleanFunction<Person>()
     *     {
     *         public boolean booleanValueOf(Person person)
     *         {
     *             return person.hasDrivingLicense();
     *         }
     *     }, new BooleanArrayList());
     * 
* * @param booleanFunction a {@link BooleanFunction} to use as the collect transformation function * @param target the MutableBooleanCollection to append to for all elements in this {@code RichIterable} * @return {@code target}, which contains appended elements as a result of the collect transformation * @since 5.0 */ R collectBoolean(BooleanFunction booleanFunction, R target); /** * Returns a new primitive {@code byte} iterable with the results of applying the specified function on each element * of the source collection. This method is also commonly called transform or map. *

* Example using a Java 8 lambda expression: *

     * ByteIterable bytes =
     *     people.collectByte(person -> person.getCode());
     * 
*

* Example using an anonymous inner class: *

     * ByteIterable bytes =
     *     people.collectByte(new ByteFunction<Person>()
     *     {
     *         public byte byteValueOf(Person person)
     *         {
     *             return person.getCode();
     *         }
     *     });
     * 
* * @since 4.0 */ ByteIterable collectByte(ByteFunction byteFunction); /** * Same as {@link #collectByte(ByteFunction)}, except that the results are gathered into the specified {@code target} * collection. *

* Example using a Java 8 lambda expression: *

     * ByteArrayList bytes =
     *     people.collectByte(person -> person.getCode(), new ByteArrayList());
     * 
*

* Example using an anonymous inner class: *

     * ByteArrayList bytes =
     *     people.collectByte(new ByteFunction<Person>()
     *     {
     *         public byte byteValueOf(Person person)
     *         {
     *             return person.getCode();
     *         }
     *     }, new ByteArrayList());
     * 
* * @param byteFunction a {@link ByteFunction} to use as the collect transformation function * @param target the MutableByteCollection to append to for all elements in this {@code RichIterable} * @return {@code target}, which contains appended elements as a result of the collect transformation * @since 5.0 */ R collectByte(ByteFunction byteFunction, R target); /** * Returns a new primitive {@code char} iterable with the results of applying the specified function on each element * of the source collection. This method is also commonly called transform or map. *

* Example using a Java 8 lambda expression: *

     * CharIterable chars =
     *     people.collectChar(person -> person.getMiddleInitial());
     * 
*

* Example using an anonymous inner class: *

     * CharIterable chars =
     *     people.collectChar(new CharFunction<Person>()
     *     {
     *         public char charValueOf(Person person)
     *         {
     *             return person.getMiddleInitial();
     *         }
     *     });
     * 
* * @since 4.0 */ CharIterable collectChar(CharFunction charFunction); /** * Same as {@link #collectChar(CharFunction)}, except that the results are gathered into the specified {@code target} * collection. *

* Example using a Java 8 lambda expression: *

     * CharArrayList chars =
     *     people.collectChar(person -> person.getMiddleInitial(), new CharArrayList());
     * 
*

* Example using an anonymous inner class: *

     * CharArrayList chars =
     *     people.collectChar(new CharFunction<Person>()
     *     {
     *         public char charValueOf(Person person)
     *         {
     *             return person.getMiddleInitial();
     *         }
     *     }, new CharArrayList());
     * 
* * @param charFunction a {@link CharFunction} to use as the collect transformation function * @param target the MutableCharCollection to append to for all elements in this {@code RichIterable} * @return {@code target}, which contains appended elements as a result of the collect transformation * @since 5.0 */ R collectChar(CharFunction charFunction, R target); /** * Returns a new primitive {@code double} iterable with the results of applying the specified function on each element * of the source collection. This method is also commonly called transform or map. *

* Example using a Java 8 lambda expression: *

     * DoubleIterable doubles =
     *     people.collectDouble(person -> person.getMilesFromNorthPole());
     * 
*

* Example using an anonymous inner class: *

     * DoubleIterable doubles =
     *     people.collectDouble(new DoubleFunction<Person>()
     *     {
     *         public double doubleValueOf(Person person)
     *         {
     *             return person.getMilesFromNorthPole();
     *         }
     *     });
     * 
* * @since 4.0 */ DoubleIterable collectDouble(DoubleFunction doubleFunction); /** * Same as {@link #collectDouble(DoubleFunction)}, except that the results are gathered into the specified {@code target} * collection. *

* Example using a Java 8 lambda expression: *

     * DoubleArrayList doubles =
     *     people.collectDouble(person -> person.getMilesFromNorthPole(), new DoubleArrayList());
     * 
*

* Example using an anonymous inner class: *

     * DoubleArrayList doubles =
     *     people.collectDouble(new DoubleFunction<Person>()
     *     {
     *         public double doubleValueOf(Person person)
     *         {
     *             return person.getMilesFromNorthPole();
     *         }
     *     }, new DoubleArrayList());
     * 
* * @param doubleFunction a {@link DoubleFunction} to use as the collect transformation function * @param target the MutableDoubleCollection to append to for all elements in this {@code RichIterable} * @return {@code target}, which contains appended elements as a result of the collect transformation * @since 5.0 */ R collectDouble(DoubleFunction doubleFunction, R target); /** * Returns a new primitive {@code float} iterable with the results of applying the specified function on each element * of the source collection. This method is also commonly called transform or map. *

* Example using a Java 8 lambda expression: *

     * FloatIterable floats =
     *     people.collectFloat(person -> person.getHeightInInches());
     * 
*

* Example using an anonymous inner class: *

     * FloatIterable floats =
     *     people.collectFloat(new FloatFunction<Person>()
     *     {
     *         public float floatValueOf(Person person)
     *         {
     *             return person.getHeightInInches();
     *         }
     *     });
     * 
* * @since 4.0 */ FloatIterable collectFloat(FloatFunction floatFunction); /** * Same as {@link #collectFloat(FloatFunction)}, except that the results are gathered into the specified {@code target} * collection. *

* Example using a Java 8 lambda expression: *

     * FloatArrayList floats =
     *     people.collectFloat(person -> person.getHeightInInches(), new FloatArrayList());
     * 
*

* Example using an anonymous inner class: *

     * FloatArrayList floats =
     *     people.collectFloat(new FloatFunction<Person>()
     *     {
     *         public float floatValueOf(Person person)
     *         {
     *             return person.getHeightInInches();
     *         }
     *     }, new FloatArrayList());
     * 
* * @param floatFunction a {@link FloatFunction} to use as the collect transformation function * @param target the MutableFloatCollection to append to for all elements in this {@code RichIterable} * @return {@code target}, which contains appended elements as a result of the collect transformation * @since 5.0 */ R collectFloat(FloatFunction floatFunction, R target); /** * Returns a new primitive {@code int} iterable with the results of applying the specified function on each element * of the source collection. This method is also commonly called transform or map. *

* Example using a Java 8 lambda expression: *

     * IntIterable ints =
     *     people.collectInt(person -> person.getAge());
     * 
*

* Example using an anonymous inner class: *

     * IntIterable ints =
     *     people.collectInt(new IntFunction<Person>()
     *     {
     *         public int intValueOf(Person person)
     *         {
     *             return person.getAge();
     *         }
     *     });
     * 
* * @since 4.0 */ IntIterable collectInt(IntFunction intFunction); /** * Same as {@link #collectInt(IntFunction)}, except that the results are gathered into the specified {@code target} * collection. *

* Example using a Java 8 lambda expression: *

     * IntArrayList ints =
     *     people.collectInt(person -> person.getAge(), new IntArrayList());
     * 
*

* Example using an anonymous inner class: *

     * IntArrayList ints =
     *     people.collectInt(new IntFunction<Person>()
     *     {
     *         public int intValueOf(Person person)
     *         {
     *             return person.getAge();
     *         }
     *     }, new IntArrayList());
     * 
* * @param intFunction a {@link IntFunction} to use as the collect transformation function * @param target the MutableIntCollection to append to for all elements in this {@code RichIterable} * @return {@code target}, which contains appended elements as a result of the collect transformation * @since 5.0 */ R collectInt(IntFunction intFunction, R target); /** * Returns a new primitive {@code long} iterable with the results of applying the specified function on each element * of the source collection. This method is also commonly called transform or map. *

* Example using a Java 8 lambda expression: *

     * LongIterable longs =
     *     people.collectLong(person -> person.getGuid());
     * 
*

* Example using an anonymous inner class: *

     * LongIterable longs =
     *     people.collectLong(new LongFunction<Person>()
     *     {
     *         public long longValueOf(Person person)
     *         {
     *             return person.getGuid();
     *         }
     *     });
     * 
* * @since 4.0 */ LongIterable collectLong(LongFunction longFunction); /** * Same as {@link #collectLong(LongFunction)}, except that the results are gathered into the specified {@code target} * collection. *

* Example using a Java 8 lambda expression: *

     * LongArrayList longs =
     *     people.collectLong(person -> person.getGuid(), new LongArrayList());
     * 
*

* Example using an anonymous inner class: *

     * LongArrayList longs =
     *     people.collectLong(new LongFunction<Person>()
     *     {
     *         public long longValueOf(Person person)
     *         {
     *             return person.getGuid();
     *         }
     *     }, new LongArrayList());
     * 
* * @param longFunction a {@link LongFunction} to use as the collect transformation function * @param target the MutableLongCollection to append to for all elements in this {@code RichIterable} * @return {@code target}, which contains appended elements as a result of the collect transformation * @since 5.0 */ R collectLong(LongFunction longFunction, R target); /** * Returns a new primitive {@code short} iterable with the results of applying the specified function on each element * of the source collection. This method is also commonly called transform or map. *

* Example using a Java 8 lambda expression: *

     * ShortIterable shorts =
     *     people.collectShort(person -> person.getNumberOfJunkMailItemsReceivedPerMonth());
     * 
*

* Example using an anonymous inner class: *

     * ShortIterable shorts =
     *     people.collectShort(new ShortFunction<Person>()
     *     {
     *         public short shortValueOf(Person person)
     *         {
     *             return person.getNumberOfJunkMailItemsReceivedPerMonth();
     *         }
     *     });
     * 
* * @since 4.0 */ ShortIterable collectShort(ShortFunction shortFunction); /** * Same as {@link #collectShort(ShortFunction)}, except that the results are gathered into the specified {@code target} * collection. *

* Example using a Java 8 lambda expression: *

     * ShortArrayList shorts =
     *     people.collectShort(person -> person.getNumberOfJunkMailItemsReceivedPerMonth, new ShortArrayList());
     * 
*

* Example using an anonymous inner class: *

     * ShortArrayList shorts =
     *     people.collectShort(new ShortFunction<Person>()
     *     {
     *         public short shortValueOf(Person person)
     *         {
     *             return person.getNumberOfJunkMailItemsReceivedPerMonth;
     *         }
     *     }, new ShortArrayList());
     * 
* * @param shortFunction a {@link ShortFunction} to use as the collect transformation function * @param target the MutableShortCollection to append to for all elements in this {@code RichIterable} * @return {@code target}, which contains appended elements as a result of the collect transformation * @since 5.0 */ R collectShort(ShortFunction shortFunction, R target); /** * Same as {@link #collect(Function)} with a {@code Function2} and specified parameter which is passed to the block. *

* Example using a Java 8 lambda expression: *

     * RichIterable<Integer> integers =
     *     Lists.mutable.with(1, 2, 3).collectWith((each, parameter) -> each + parameter, Integer.valueOf(1));
     * 
*

* Example using an anonymous inner class: *

     * Function2<Integer, Integer, Integer> addParameterFunction =
     *     new Function2<Integer, Integer, Integer>()
     *     {
     *         public Integer value(Integer each, Integer parameter)
     *         {
     *             return each + parameter;
     *         }
     *     };
     * RichIterable<Integer> integers =
     *     Lists.mutable.with(1, 2, 3).collectWith(addParameterFunction, Integer.valueOf(1));
     * 
* * @param function A {@link Function2} to use as the collect transformation function * @param parameter A parameter to pass in for evaluation of the second argument {@code P} in {@code function} * @return A new {@code RichIterable} that contains the transformed elements returned by {@link Function2#value(Object, Object)} * @see #collect(Function) * @since 5.0 */ RichIterable collectWith(Function2 function, P parameter); /** * Same as collectWith but with a targetCollection parameter to gather the results. *

* Example using a Java 8 lambda expression: *

     * MutableSet<Integer> integers =
     *     Lists.mutable.with(1, 2, 3).collectWith((each, parameter) -> each + parameter, Integer.valueOf(1), Sets.mutable.empty());
     * 
*

* Example using an anonymous inner class: *

     * Function2<Integer, Integer, Integer> addParameterFunction =
     *     new Function2<Integer, Integer, Integer>()
     *     {
     *         public Integer value(final Integer each, final Integer parameter)
     *         {
     *             return each + parameter;
     *         }
     *     };
     * MutableSet<Integer> integers =
     *     Lists.mutable.with(1, 2, 3).collectWith(addParameterFunction, Integer.valueOf(1), Sets.mutable.empty());
     * 
* * @param function a {@link Function2} to use as the collect transformation function * @param parameter a parameter to pass in for evaluation of the second argument {@code P} in {@code function} * @param targetCollection the Collection to append to for all elements in this {@code RichIterable} that meet select criteria {@code function} * @return {@code targetCollection}, which contains appended elements as a result of the collect transformation * @since 1.0 */ > R collectWith( Function2 function, P parameter, R targetCollection); /** * Returns a new collection with the results of applying the specified function on each element of the source * collection, but only for those elements which return true upon evaluation of the predicate. This is the * the optimized equivalent of calling iterable.select(predicate).collect(function). *

* Example using a Java 8 lambda and method reference: *

     * RichIterable<String> strings = Lists.mutable.with(1, 2, 3).collectIf(e -> e != null, Object::toString);
     * 
*

* Example using Predicates factory: *

     * RichIterable<String> strings = Lists.mutable.with(1, 2, 3).collectIf(Predicates.notNull(), Functions.getToString());
     * 
* * @since 1.0 */ RichIterable collectIf(Predicate predicate, Function function); /** * Same as the collectIf method with two parameters but uses the specified target collection for the results. * * @param predicate a {@link Predicate} to use as the select criteria * @param function a {@link Function} to use as the collect transformation function * @param target the Collection to append to for all elements in this {@code RichIterable} that meet the collect criteria {@code predicate} * @return {@code targetCollection}, which contains appended elements as a result of the collect criteria and transformation * @see #collectIf(Predicate, Function) * @since 1.0 */ > R collectIf( Predicate predicate, Function function, R target); /** * {@code flatCollect} is a special case of {@link #collect(Function)}. With {@code collect}, when the {@link Function} returns * a collection, the result is a collection of collections. {@code flatCollect} outputs a single "flattened" collection * instead. This method is commonly called flatMap. *

* Consider the following example where we have a {@code Person} class, and each {@code Person} has a list of {@code Address} objects. Take the following {@link Function}: *

     * Function<Person, List<Address>> addressFunction = Person::getAddresses;
     * RichIterable<Person> people = ...;
     * 
* Using {@code collect} returns a collection of collections of addresses. *
     * RichIterable<List<Address>> addresses = people.collect(addressFunction);
     * 
* Using {@code flatCollect} returns a single flattened list of addresses. *
     * RichIterable<Address> addresses = people.flatCollect(addressFunction);
     * 
* * @param function The {@link Function} to apply * @return a new flattened collection produced by applying the given {@code function} * @since 1.0 */ RichIterable flatCollect(Function> function); /** * Same as flatCollect, only the results are collected into the target collection. * * @param function The {@link Function} to apply * @param target The collection into which results should be added. * @return {@code target}, which will contain a flattened collection of results produced by applying the given {@code function} * @see #flatCollect(Function) */ default R flatCollectByte(Function function, R target) { this.forEach(each -> target.addAll(function.valueOf(each))); return target; } /** * Same as flatCollect, only the results are collected into the target collection. * * @param function The {@link Function} to apply * @param target The collection into which results should be added. * @return {@code target}, which will contain a flattened collection of results produced by applying the given {@code function} * @see #flatCollect(Function) */ default R flatCollectChar(Function function, R target) { this.forEach(each -> target.addAll(function.valueOf(each))); return target; } /** * Same as flatCollect, only the results are collected into the target collection. * * @param function The {@link Function} to apply * @param target The collection into which results should be added. * @return {@code target}, which will contain a flattened collection of results produced by applying the given {@code function} * @see #flatCollect(Function) */ default R flatCollectInt(Function function, R target) { this.forEach(each -> target.addAll(function.valueOf(each))); return target; } /** * Same as flatCollect, only the results are collected into the target collection. * * @param function The {@link Function} to apply * @param target The collection into which results should be added. * @return {@code target}, which will contain a flattened collection of results produced by applying the given {@code function} * @see #flatCollect(Function) */ default R flatCollectShort(Function function, R target) { this.forEach(each -> target.addAll(function.valueOf(each))); return target; } /** * Same as flatCollect, only the results are collected into the target collection. * * @param function The {@link Function} to apply * @param target The collection into which results should be added. * @return {@code target}, which will contain a flattened collection of results produced by applying the given {@code function} * @see #flatCollect(Function) */ default R flatCollectDouble(Function function, R target) { this.forEach(each -> target.addAll(function.valueOf(each))); return target; } /** * Same as flatCollect, only the results are collected into the target collection. * * @param function The {@link Function} to apply * @param target The collection into which results should be added. * @return {@code target}, which will contain a flattened collection of results produced by applying the given {@code function} * @see #flatCollect(Function) */ default R flatCollectFloat(Function function, R target) { this.forEach(each -> target.addAll(function.valueOf(each))); return target; } /** * Same as flatCollect, only the results are collected into the target collection. * * @param function The {@link Function} to apply * @param target The collection into which results should be added. * @return {@code target}, which will contain a flattened collection of results produced by applying the given {@code function} * @see #flatCollect(Function) */ default R flatCollectLong(Function function, R target) { this.forEach(each -> target.addAll(function.valueOf(each))); return target; } /** * Same as flatCollect, only the results are collected into the target collection. * * @param function The {@link Function} to apply * @param target The collection into which results should be added. * @return {@code target}, which will contain a flattened collection of results produced by applying the given {@code function} * @see #flatCollect(Function) */ default R flatCollectBoolean(Function function, R target) { this.forEach(each -> target.addAll(function.valueOf(each))); return target; } /** * @since 9.2 */ default RichIterable flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } /** * Same as flatCollect, only the results are collected into the target collection. * * @param function The {@link Function} to apply * @param target The collection into which results should be added. * @return {@code target}, which will contain a flattened collection of results produced by applying the given {@code function} * @see #flatCollect(Function) */ > R flatCollect(Function> function, R target); /** * @since 9.2 */ default > R flatCollectWith(Function2> function, P parameter, R target) { return this.flatCollect(each -> function.apply(each, parameter), target); } /** * Returns the first element of the iterable for which the predicate evaluates to true or null in the case where no * element returns true. This method is commonly called find. *

* Example using a Java 8 lambda expression: *

     * Person person =
     *     people.detect(person -> person.getFirstName().equals("John") && person.getLastName().equals("Smith"));
     * 
*

* Example using an anonymous inner class: *

     * Person person =
     *     people.detect(new Predicate<Person>()
     *     {
     *         public boolean accept(Person person)
     *         {
     *             return person.getFirstName().equals("John") && person.getLastName().equals("Smith");
     *         }
     *     });
     * 
* * @since 1.0 */ T detect(Predicate predicate); /** * Returns the first element that evaluates to true for the specified predicate2 and parameter, or null if none * evaluate to true. *

* Example using a Java 8 lambda expression: *

     * Person person =
     *     people.detectWith((person, fullName) -> person.getFullName().equals(fullName), "John Smith");
     * 
*

* Example using an anonymous inner class: *

     * Person person =
     *     people.detectWith(new Predicate2<Person, String>()
     *     {
     *         public boolean accept(Person person, String fullName)
     *         {
     *             return person.getFullName().equals(fullName);
     *         }
     *     }, "John Smith");
     * 
* * @since 5.0 */

T detectWith(Predicate2 predicate, P parameter); /** * Returns the first element of the iterable for which the predicate evaluates to true as an Optional. This method is commonly called find. *

* Example using a Java 8 lambda expression: *

     * Person person =
     *     people.detectOptional(person -> person.getFirstName().equals("John") && person.getLastName().equals("Smith"));
     * 
*

* * @throws NullPointerException if the element selected is null * @since 8.0 */ Optional detectOptional(Predicate predicate); /** * Returns the first element that evaluates to true for the specified predicate2 and parameter as an Optional. *

* Example using a Java 8 lambda expression: *

     * Optional<Person> person =
     *     people.detectWithOptional((person, fullName) -> person.getFullName().equals(fullName), "John Smith");
     * 
*

* * @throws NullPointerException if the element selected is null * @since 8.0 */

Optional detectWithOptional(Predicate2 predicate, P parameter); /** * Returns the first element of the iterable for which the predicate evaluates to true. If no element matches * the predicate, then returns the value of applying the specified function. * * @since 1.0 */ default T detectIfNone(Predicate predicate, Function0 function) { T result = this.detect(predicate); return result == null ? function.value() : result; } /** * Returns the first element of the iterable that evaluates to true for the specified predicate2 and parameter, or * returns the value of evaluating the specified function. * * @since 5.0 */

T detectWithIfNone( Predicate2 predicate, P parameter, Function0 function); /** * Return the total number of elements that answer true to the specified predicate. *

* Example using a Java 8 lambda expression: *

     * int count =
     *     people.count(person -> person.getAddress().getState().getName().equals("New York"));
     * 
*

* Example using an anonymous inner class: *

     * int count =
     *     people.count(new Predicate<Person>()
     *     {
     *         public boolean accept(Person person)
     *         {
     *             return person.getAddress().getState().getName().equals("New York");
     *         }
     *     });
     * 
* * @since 1.0 */ int count(Predicate predicate); /** * Returns the total number of elements that evaluate to true for the specified predicate. * *
e.g.
     * return lastNames.countWith(Predicates2.equal(), "Smith");
     * 
*/

int countWith(Predicate2 predicate, P parameter); /** * Returns true if the predicate evaluates to true for any element of the iterable. * Returns false if the iterable is empty, or if no element returned true when evaluating the predicate. * * @since 1.0 */ boolean anySatisfy(Predicate predicate); /** * Returns true if the predicate evaluates to true for any element of the collection, or return false. * Returns false if the collection is empty. * * @since 5.0 */

boolean anySatisfyWith(Predicate2 predicate, P parameter); /** * Returns true if the predicate evaluates to true for every element of the iterable or if the iterable is empty. * Otherwise, returns false. * * @since 1.0 */ boolean allSatisfy(Predicate predicate); /** * Returns true if the predicate evaluates to true for every element of the collection, or returns false. * * @since 5.0 */

boolean allSatisfyWith(Predicate2 predicate, P parameter); /** * Returns true if the predicate evaluates to false for every element of the iterable or if the iterable is empty. * Otherwise, returns false. * * @since 3.0 */ boolean noneSatisfy(Predicate predicate); /** * Returns true if the predicate evaluates to false for every element of the collection, or return false. * Returns true if the collection is empty. * * @since 5.0 */

boolean noneSatisfyWith(Predicate2 predicate, P parameter); /** * Returns the final result of evaluating function using each element of the iterable and the previous evaluation * result as the parameters. The injected value is used for the first parameter of the first evaluation, and the current * item in the iterable is used as the second parameter. This method is commonly called fold or sometimes reduce. * * @since 1.0 */ IV injectInto(IV injectedValue, Function2 function); /** * Returns the final int result of evaluating function using each element of the iterable and the previous evaluation * result as the parameters. The injected value is used for the first parameter of the first evaluation, and the current * item in the iterable is used as the second parameter. * * @since 1.0 */ int injectInto(int injectedValue, IntObjectToIntFunction function); /** * Returns the final long result of evaluating function using each element of the iterable and the previous evaluation * result as the parameters. The injected value is used for the first parameter of the first evaluation, and the current * item in the iterable is used as the second parameter. * * @since 1.0 */ long injectInto(long injectedValue, LongObjectToLongFunction function); /** * Returns the final float result of evaluating function using each element of the iterable and the previous evaluation * result as the parameters. The injected value is used for the first parameter of the first evaluation, and the current * item in the iterable is used as the second parameter. * * @since 2.0 */ float injectInto(float injectedValue, FloatObjectToFloatFunction function); /** * Returns the final double result of evaluating function using each element of the iterable and the previous evaluation * result as the parameters. The injected value is used for the first parameter of the first evaluation, and the current * item in the iterable is used as the second parameter. * * @since 1.0 */ double injectInto(double injectedValue, DoubleObjectToDoubleFunction function); /** * Adds all the elements in this iterable to the specific target Collection. * * @since 8.0 */ > R into(R target); /** * Converts the collection to a MutableList implementation. * * @since 1.0 */ MutableList toList(); /** * Converts the collection to a MutableList implementation and sorts it using the natural order of the elements. * * @since 1.0 */ default MutableList toSortedList() { return this.toList().sortThis(); } /** * Converts the collection to a MutableList implementation and sorts it using the specified comparator. * * @since 1.0 */ default MutableList toSortedList(Comparator comparator) { return this.toList().sortThis(comparator); } /** * Converts the collection to a MutableList implementation and sorts it based on the natural order of the * attribute returned by {@code function}. * * @since 1.0 */ default > MutableList toSortedListBy(Function function) { return this.toSortedList(Comparator.comparing(function)); } /** * Converts the collection to a MutableSet implementation. * * @since 1.0 */ MutableSet toSet(); /** * Converts the collection to a MutableSortedSet implementation and sorts it using the natural order of the * elements. * * @since 1.0 */ MutableSortedSet toSortedSet(); /** * Converts the collection to a MutableSortedSet implementation and sorts it using the specified comparator. * * @since 1.0 */ MutableSortedSet toSortedSet(Comparator comparator); /** * Converts the collection to a MutableSortedSet implementation and sorts it based on the natural order of the * attribute returned by {@code function}. * * @since 1.0 */ default > MutableSortedSet toSortedSetBy(Function function) { return this.toSortedSet(Comparator.comparing(function)); } /** * Converts the collection to the default MutableBag implementation. * * @since 1.0 */ MutableBag toBag(); /** * Converts the collection to a MutableSortedBag implementation and sorts it using the natural order of the * elements. * * @since 6.0 */ MutableSortedBag toSortedBag(); /** * Converts the collection to the MutableSortedBag implementation and sorts it using the specified comparator. * * @since 6.0 */ MutableSortedBag toSortedBag(Comparator comparator); /** * Converts the collection to a MutableSortedBag implementation and sorts it based on the natural order of the * attribute returned by {@code function}. * * @since 6.0 */ default > MutableSortedBag toSortedBagBy(Function function) { return this.toSortedBag(Comparator.comparing(function)); } /** * Converts the collection to a MutableMap implementation using the specified key and value functions. * * @since 1.0 */ MutableMap toMap( Function keyFunction, Function valueFunction); /** * Same as {@link #toMap(Function, Function)}, except that the results are gathered into the specified {@code target} * map. * * @since 10.0 */ default > R toMap( Function keyFunction, Function valueFunction, R target) { this.forEach(each -> target.put(keyFunction.apply(each), valueFunction.apply(each))); return target; } /** * Converts the collection to a MutableSortedMap implementation using the specified key and value functions * sorted by the key elements' natural ordering. * * @since 1.0 */ MutableSortedMap toSortedMap( Function keyFunction, Function valueFunction); /** * Converts the collection to a MutableSortedMap implementation using the specified key and value functions * sorted by the given comparator. * * @since 1.0 */ MutableSortedMap toSortedMap( Comparator comparator, Function keyFunction, Function valueFunction); /** * Converts the collection to a MutableSortedMap implementation using the specified key and value functions * and sorts it based on the natural order of the attribute returned by {@code sortBy} function. */ default , NK, NV> MutableSortedMap toSortedMapBy( Function sortBy, Function keyFunction, Function valueFunction) { return this.toSortedMap(Comparator.comparing(sortBy), keyFunction, valueFunction); } /** * Converts the collection to a BiMap implementation using the specified key and value functions. * * @since 10.0 */ MutableBiMap toBiMap( Function keyFunction, Function valueFunction); /** * Converts the RichIterable to the default ImmutableList implementation. * * @since 11.0 */ default ImmutableList toImmutableList() { return Lists.immutable.withAll(this); } /** * Converts the RichIterable to the default ImmutableSet implementation. * * @since 11.0 */ default ImmutableSet toImmutableSet() { return Sets.immutable.withAll(this); } /** * Converts the RichIterable to the default ImmutableBag implementation. * * @since 11.0 */ default ImmutableBag toImmutableBag() { return Bags.immutable.withAll(this); } /** * Converts the RichIterable to the default sorted ImmutableList implementation. * * @since 11.0 */ default ImmutableList toImmutableSortedList() { return Lists.immutable.withAllSorted(this); } /** * Converts the collection to an ImmutableList implementation and sorts it using the specified comparator. * * @since 11.0 */ default ImmutableList toImmutableSortedList(Comparator comparator) { return Lists.immutable.withAllSorted(comparator, this); } /** * Converts the collection to an ImmutableList implementation and sorts it based on the natural order of the * attribute returned by {@code function}. * * @since 11.0 */ default > ImmutableList toImmutableSortedListBy(Function function) { return this.toImmutableSortedList(Comparator.comparing(function)); } /** * Converts the RichIterable to the default ImmutableSortedSet implementation. * * @since 11.0 */ default ImmutableSortedSet toImmutableSortedSet() { return SortedSets.immutable.withAll(this); } /** * Converts the collection to an ImmutableSortedSet implementation and sorts it using the specified comparator. * * @since 11.0 */ default ImmutableSortedSet toImmutableSortedSet(Comparator comparator) { return SortedSets.immutable.withAll(comparator, this); } /** * Converts the collection to an ImmutableSortedSet implementation and sorts it based on the natural order of the * attribute returned by {@code function}. * * @since 11.0 */ default > ImmutableSortedSet toImmutableSortedSetBy(Function function) { return this.toImmutableSortedSet(Comparator.comparing(function)); } /** * Converts the RichIterable to the default ImmutableSortedBag implementation. * * @since 11.0 */ default ImmutableSortedBag toImmutableSortedBag() { return SortedBags.immutable.withAll(this); } /** * Converts the collection to an ImmutableSortedBag implementation and sorts it using the specified comparator. * * @since 11.0 */ default ImmutableSortedBag toImmutableSortedBag(Comparator comparator) { return SortedBags.immutable.withAll(comparator, this); } /** * Converts the collection to an ImmutableSortedBag implementation and sorts it based on the natural order of the * attribute returned by {@code function}. * * @since 11.0 */ default > ImmutableSortedBag toImmutableSortedBagBy(Function function) { return this.toImmutableSortedBag(Comparator.comparing(function)); } /** * Converts the collection to an ImmutableMap implementation using the specified key and value functions. * * @since 11.0 */ default ImmutableMap toImmutableMap( Function keyFunction, Function valueFunction) { return this.toMap(keyFunction, valueFunction).toImmutable(); } /** * Converts the collection to an immutable BiMap implementation using the specified key and value functions. * * @since 11.0 */ default ImmutableBiMap toImmutableBiMap( Function keyFunction, Function valueFunction) { return this.toBiMap(keyFunction, valueFunction).toImmutable(); } /** * Returns a lazy (deferred) iterable, most likely implemented by calling LazyIterate.adapt(this). * * @since 1.0. */ LazyIterable asLazy(); /** * Converts this iterable to an array. * * @see Collection#toArray() * @since 1.0 */ Object[] toArray(); /** * Converts this iterable to an array using the specified target array, assuming the target array is as long * or longer than the iterable. * * @see Collection#toArray(Object[]) * @since 1.0 */ E[] toArray(E[] array); /** * Returns the minimum element out of this container based on the comparator. * * @throws NoSuchElementException if the RichIterable is empty * @since 1.0 */ T min(Comparator comparator); /** * Returns the maximum element out of this container based on the comparator. * * @throws NoSuchElementException if the RichIterable is empty * @since 1.0 */ T max(Comparator comparator); /** * Returns the minimum element out of this container based on the comparator as an Optional. * If the container is empty {@link Optional#empty()} is returned. * * @throws NullPointerException if the minimum element is null * @since 8.2 */ default Optional minOptional(Comparator comparator) { if (this.isEmpty()) { return Optional.empty(); } return Optional.of(this.min(comparator)); } /** * Returns the maximum element out of this container based on the comparator as an Optional. * If the container is empty {@link Optional#empty()} is returned. * * @throws NullPointerException if the maximum element is null * @since 8.2 */ default Optional maxOptional(Comparator comparator) { if (this.isEmpty()) { return Optional.empty(); } return Optional.of(this.max(comparator)); } /** * Returns the minimum element out of this container based on the natural order. * * @throws ClassCastException if the elements are not {@link Comparable} * @throws NoSuchElementException if the RichIterable is empty * @since 1.0 */ T min(); /** * Returns the maximum element out of this container based on the natural order. * * @throws ClassCastException if the elements are not {@link Comparable} * @throws NoSuchElementException if the RichIterable is empty * @since 1.0 */ T max(); /** * Returns the minimum element out of this container based on the natural order as an Optional. * If the container is empty {@link Optional#empty()} is returned. * * @throws ClassCastException if the elements are not {@link Comparable} * @throws NullPointerException if the minimum element is null * @since 8.2 */ default Optional minOptional() { if (this.isEmpty()) { return Optional.empty(); } return Optional.of(this.min()); } /** * Returns the maximum element out of this container based on the natural order as an Optional. * If the container is empty {@link Optional#empty()} is returned. * * @throws ClassCastException if the elements are not {@link Comparable} * @throws NullPointerException if the maximum element is null * @since 8.2 */ default Optional maxOptional() { if (this.isEmpty()) { return Optional.empty(); } return Optional.of(this.max()); } /** * Returns the minimum elements out of this container based on the natural order of the attribute returned by Function. * * @throws NoSuchElementException if the RichIterable is empty * @since 1.0 */ > T minBy(Function function); /** * Returns the maximum elements out of this container based on the natural order of the attribute returned by Function. * * @throws NoSuchElementException if the RichIterable is empty * @since 1.0 */ > T maxBy(Function function); /** * Returns the minimum elements out of this container based on the natural order of the attribute returned by Function as an Optional. * If the container is empty {@link Optional#empty()} is returned. * * @throws NullPointerException if the minimum element is null * @since 8.2 */ default > Optional minByOptional(Function function) { if (this.isEmpty()) { return Optional.empty(); } return Optional.of(this.minBy(function)); } /** * Returns the maximum elements out of this container based on the natural order of the attribute returned by Function as an Optional. * If the container is empty {@link Optional#empty()} is returned. * * @throws NullPointerException if the maximum element is null * @since 8.2 */ default > Optional maxByOptional(Function function) { if (this.isEmpty()) { return Optional.empty(); } return Optional.of(this.maxBy(function)); } /** * Returns the final long result of evaluating function for each element of the iterable and adding the results * together. * * @since 2.0 */ long sumOfInt(IntFunction function); /** * Returns the final double result of evaluating function for each element of the iterable and adding the results * together. It uses Kahan summation algorithm to reduce numerical error. * * @since 2.0 */ double sumOfFloat(FloatFunction function); /** * Returns the final long result of evaluating function for each element of the iterable and adding the results * together. * * @since 2.0 */ long sumOfLong(LongFunction function); /** * Returns the final double result of evaluating function for each element of the iterable and adding the results * together. It uses Kahan summation algorithm to reduce numerical error. * * @since 2.0 */ double sumOfDouble(DoubleFunction function); /** * Returns the result of summarizing the value returned from applying the IntFunction to * each element of the iterable. * *

     * IntSummaryStatistics stats =
     *     Lists.mutable.with(1, 2, 3).summarizeInt(Integer::intValue);
     * 
* * @since 8.0 */ default IntSummaryStatistics summarizeInt(IntFunction function) { IntSummaryStatistics stats = new IntSummaryStatistics(); this.each(each -> stats.accept(function.intValueOf(each))); return stats; } /** * Returns the result of summarizing the value returned from applying the FloatFunction to * each element of the iterable. * *
     * DoubleSummaryStatistics stats =
     *     Lists.mutable.with(1, 2, 3).summarizeFloat(Integer::floatValue);
     * 
* * @since 8.0 */ default DoubleSummaryStatistics summarizeFloat(FloatFunction function) { DoubleSummaryStatistics stats = new DoubleSummaryStatistics(); this.each(each -> stats.accept(function.floatValueOf(each))); return stats; } /** * Returns the result of summarizing the value returned from applying the LongFunction to * each element of the iterable. * *
     * LongSummaryStatistics stats =
     *     Lists.mutable.with(1, 2, 3).summarizeLong(Integer::longValue);
     * 
* * @since 8.0 */ default LongSummaryStatistics summarizeLong(LongFunction function) { LongSummaryStatistics stats = new LongSummaryStatistics(); this.each(each -> stats.accept(function.longValueOf(each))); return stats; } /** * Returns the result of summarizing the value returned from applying the DoubleFunction to * each element of the iterable. * *
     * DoubleSummaryStatistics stats =
     *     Lists.mutable.with(1, 2, 3).summarizeDouble(Integer::doubleValue);
     * 
* * @since 8.0 */ default DoubleSummaryStatistics summarizeDouble(DoubleFunction function) { DoubleSummaryStatistics stats = new DoubleSummaryStatistics(); this.each(each -> stats.accept(function.doubleValueOf(each))); return stats; } /** * This method produces the equivalent result as {@link Stream#collect(Collector)}. * *
     * MutableObjectLongMap<Integer> map2 =
     *     Lists.mutable.with(1, 2, 3, 4, 5).reduceInPlace(Collectors2.sumByInt(i -> Integer.valueOf(i % 2), Integer::intValue));
     * 
* * @since 8.0 */ default R reduceInPlace(Collector collector) { A mutableResult = collector.supplier().get(); BiConsumer accumulator = collector.accumulator(); this.each(each -> accumulator.accept(mutableResult, each)); return collector.finisher().apply(mutableResult); } /** * This method produces the equivalent result as {@link Stream#collect(Supplier, BiConsumer, BiConsumer)}. * The combiner used in collect is unnecessary in the serial case, so is not included in the API. * * @since 8.0 */ default R reduceInPlace(Supplier supplier, BiConsumer accumulator) { R result = supplier.get(); this.each(each -> accumulator.accept(result, each)); return result; } /** * This method produces the equivalent result as {@link Stream#reduce(BinaryOperator)}. * * @since 8.0 */ default Optional reduce(BinaryOperator accumulator) { boolean[] seenOne = new boolean[1]; T[] result = (T[]) new Object[1]; this.each(each -> { if (seenOne[0]) { result[0] = accumulator.apply(result[0], each); } else { seenOne[0] = true; result[0] = each; } }); return seenOne[0] ? Optional.of(result[0]) : Optional.empty(); } /** * Groups and sums the values using the two specified functions. * * @since 6.0 */ ObjectLongMap sumByInt(Function groupBy, IntFunction function); /** * Groups and sums the values using the two specified functions. * * @since 6.0 */ ObjectDoubleMap sumByFloat(Function groupBy, FloatFunction function); /** * Groups and sums the values using the two specified functions. * * @since 6.0 */ ObjectLongMap sumByLong(Function groupBy, LongFunction function); /** * Groups and sums the values using the two specified functions. * * @since 6.0 */ ObjectDoubleMap sumByDouble(Function groupBy, DoubleFunction function); /** * Returns a string representation of this collection by delegating to {@link #makeString(String)} and defaulting * the separator parameter to the characters {@code ", "} (comma and space). * * @return a string representation of this collection. * @since 1.0 */ default String makeString() { return this.makeString(", "); } /** * Returns a string representation of this collection by delegating to {@link #makeString(String, String, String)} * and defaulting the start and end parameters to {@code ""} (the empty String). * * @return a string representation of this collection. * @since 1.0 */ default String makeString(String separator) { return this.makeString("", separator, ""); } /** * Returns a string representation of this collection with the elements separated by the specified * separator and enclosed between the start and end strings. * * @return a string representation of this collection. * @since 1.0 */ default String makeString(String start, String separator, String end) { Appendable stringBuilder = new StringBuilder(); this.appendString(stringBuilder, start, separator, end); return stringBuilder.toString(); } /** * Prints a string representation of this collection onto the given {@code Appendable}. Prints the string returned * by {@link #makeString()}. * * @since 1.0 */ default void appendString(Appendable appendable) { this.appendString(appendable, ", "); } /** * Prints a string representation of this collection onto the given {@code Appendable}. Prints the string returned * by {@link #makeString(String)}. * * @since 1.0 */ default void appendString(Appendable appendable, String separator) { this.appendString(appendable, "", separator, ""); } /** * Prints a string representation of this collection onto the given {@code Appendable}. Prints the string returned * by {@link #makeString(String, String, String)}. * * @since 1.0 */ void appendString(Appendable appendable, String start, String separator, String end); /** * For each element of the iterable, the function is evaluated and the results of these evaluations are collected * into a new multimap, where the transformed value is the key and the original values are added to the same (or similar) * species of collection as the source iterable. *

* Example using a Java 8 method reference: *

     * Multimap<String, Person> peopleByLastName =
     *     people.groupBy(Person::getLastName);
     * 
*

* Example using an anonymous inner class: *

     * Multimap<String, Person> peopleByLastName =
     *     people.groupBy(new Function<Person, String>()
     *     {
     *         public String valueOf(Person person)
     *         {
     *             return person.getLastName();
     *         }
     *     });
     * 
* * @since 1.0 */ Multimap groupBy(Function function); /** * This method will count the number of occurrences of each value calculated by applying the * function to each element of the collection. * * @since 9.0 */ default Bag countBy(Function function) { return this.countBy(function, Bags.mutable.empty()); } /** * This method will count the number of occurrences of each value calculated by applying the * function to each element of the collection. * * @since 9.0 */ default > R countBy(Function function, R target) { return this.collect(function, target); } /** * This method will count the number of occurrences of each value calculated by applying the * function to each element of the collection with the specified parameter as the second argument. * * @since 9.0 */ default Bag countByWith(Function2 function, P parameter) { return this.countByWith(function, parameter, Bags.mutable.empty()); } /** * This method will count the number of occurrences of each value calculated by applying the * function to each element of the collection with the specified parameter as the second argument. * * @since 9.0 */ default > R countByWith(Function2 function, P parameter, R target) { return this.collectWith(function, parameter, target); } /** * This method will count the number of occurrences of each value calculated by applying the * function to each element of the collection. * * @since 10.0.0 */ default Bag countByEach(Function> function) { return this.asLazy().flatCollect(function).toBag(); } /** * This method will count the number of occurrences of each value calculated by applying the * function to each element of the collection. * * @since 10.0.0 */ default > R countByEach(Function> function, R target) { return this.flatCollect(function, target); } /** * Same as {@link #groupBy(Function)}, except that the results are gathered into the specified {@code target} * multimap. *

* Example using a Java 8 method reference: *

     * FastListMultimap<String, Person> peopleByLastName =
     *     people.groupBy(Person::getLastName, new FastListMultimap<String, Person>());
     * 
*

* Example using an anonymous inner class: *

     * FastListMultimap<String, Person> peopleByLastName =
     *     people.groupBy(new Function<Person, String>()
     *     {
     *         public String valueOf(Person person)
     *         {
     *             return person.getLastName();
     *         }
     *     }, new FastListMultimap<String, Person>());
     * 
* * @since 1.0 */ > R groupBy(Function function, R target); /** * Similar to {@link #groupBy(Function)}, except the result of evaluating function will return a collection of keys * for each value. * * @since 1.0 */ Multimap groupByEach(Function> function); /** * Same as {@link #groupByEach(Function)}, except that the results are gathered into the specified {@code target} * multimap. * * @since 1.0 */ > R groupByEach( Function> function, R target); /** * For each element of the iterable, the function is evaluated and he results of these evaluations are collected * into a new map, where the transformed value is the key. The generated keys must each be unique, or else an * exception is thrown. * * @throws IllegalStateException if the keys returned by the function are not unique * @see #groupBy(Function) * @since 5.0 */ MapIterable groupByUniqueKey(Function function); /** * Same as {@link #groupByUniqueKey(Function)}, except that the results are gathered into the specified {@code target} * map. * * @throws IllegalStateException if the keys returned by the function are not unique * @see #groupByUniqueKey(Function) * @since 6.0 */ > R groupByUniqueKey( Function function, R target); /** * Returns a string with the elements of this iterable separated by commas with spaces and * enclosed in square brackets. * *
     * Assert.assertEquals("[]", Lists.mutable.empty().toString());
     * Assert.assertEquals("[1]", Lists.mutable.with(1).toString());
     * Assert.assertEquals("[1, 2, 3]", Lists.mutable.with(1, 2, 3).toString());
     * 
* * @return a string representation of this RichIterable * @see java.util.AbstractCollection#toString() * @since 1.0 */ @Override String toString(); /** * Returns a {@code RichIterable} formed from this {@code RichIterable} and another {@code RichIterable} by * combining corresponding elements in pairs. If one of the two {@code RichIterable}s is longer than the other, its * remaining elements are ignored. * * @param that The {@code RichIterable} providing the second half of each result pair * @param the type of the second half of the returned pairs * @return A new {@code RichIterable} containing pairs consisting of corresponding elements of this {@code * RichIterable} and that. The length of the returned {@code RichIterable} is the minimum of the lengths of * this {@code RichIterable} and that. * @since 1.0 * @deprecated in 6.0. Use {@link OrderedIterable#zip(Iterable)} instead. */ @Deprecated RichIterable> zip(Iterable that); /** * Same as {@link #zip(Iterable)} but uses {@code target} for output. * * @since 1.0 * @deprecated in 6.0. Use {@link OrderedIterable#zip(Iterable, Collection)} instead; */ @Deprecated >> R zip(Iterable that, R target); /** * Zips this {@code RichIterable} with its indices. * * @return A new {@code RichIterable} containing pairs consisting of all elements of this {@code RichIterable} * paired with their index. Indices start at 0. * @see #zip(Iterable) * @since 1.0 * @deprecated in 6.0. Use {@link OrderedIterable#zipWithIndex()} instead. */ @Deprecated RichIterable> zipWithIndex(); /** * Same as {@link #zipWithIndex()} but uses {@code target} for output. * * @since 1.0 * @deprecated in 6.0. Use {@link OrderedIterable#zipWithIndex(Collection)} instead. */ @Deprecated >> R zipWithIndex(R target); /** * Partitions elements in fixed size chunks. * * @param size the number of elements per chunk * @return A {@code RichIterable} containing {@code RichIterable}s of size {@code size}, except the last will be * truncated if the elements don't divide evenly. * @since 1.0 */ RichIterable> chunk(int size); /** * Applies an aggregate procedure over the iterable grouping results into a Map based on the specific groupBy function. * Aggregate results are required to be mutable as they will be changed in place by the procedure. A second function * specifies the initial "zero" aggregate value to work with (i.e. new AtomicInteger(0)). * * @since 3.0 */ default MapIterable aggregateInPlaceBy( Function groupBy, Function0 zeroValueFactory, Procedure2 mutatingAggregator) { MutableMap map = Maps.mutable.empty(); this.forEach(each -> { K key = groupBy.valueOf(each); V value = map.getIfAbsentPut(key, zeroValueFactory); mutatingAggregator.value(value, each); }); return map; } /** * Applies an aggregate function over the iterable grouping results into a map based on the specific groupBy function. * Aggregate results are allowed to be immutable as they will be replaced in place in the map. A second function * specifies the initial "zero" aggregate value to work with (i.e. Integer.valueOf(0)). * * @since 3.0 */ default MapIterable aggregateBy( Function groupBy, Function0 zeroValueFactory, Function2 nonMutatingAggregator) { return this.aggregateBy( groupBy, zeroValueFactory, nonMutatingAggregator, Maps.mutable.empty()); } /** * Applies an aggregate function over the iterable grouping results into the target map based on the specific * groupBy function. Aggregate results are allowed to be immutable as they will be replaced in place in the map. A * second function specifies the initial "zero" aggregate value to work with (i.e. Integer.valueOf(0)). * * @since 10.3 */ default > R aggregateBy( Function groupBy, Function0 zeroValueFactory, Function2 nonMutatingAggregator, R target) { this.forEach(each -> { K key = groupBy.valueOf(each); target.updateValueWith(key, zeroValueFactory, nonMutatingAggregator, each); }); return target; } /** * Applies a groupBy function over the iterable, followed by a collect function. * * @param groupByFunction a {@link Function} to use as the groupBy transformation function * @param collectFunction a {@link Function} to use as the collect transformation function * * @return The {@code target} collection where the key is the transformed result from applying the groupBy function * and the value is the transformed result from applying the collect function. * * @see #groupBy(Function) * @see Multimap#collectValues(Function) * * @since 10.1.0 */ default > R groupByAndCollect( Function groupByFunction, Function collectFunction, R target) { this.forEach(each -> target.put(groupByFunction.apply(each), collectFunction.apply(each))); return target; } } annotation/000077500000000000000000000000001407344533200345545ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/apiBeta.java000066400000000000000000000014531407344533200362750ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/annotation/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.annotation; /** * API tagged Beta is new API that has not stabilized. The library generally follows * semantic versioning and preserves backwards compatibility in minor and fix releases. * The exception is Beta API, which may change at any time. */ public @interface Beta { } eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/bag/000077500000000000000000000000001407344533200332125ustar00rootroot00000000000000Bag.java000066400000000000000000000305321407344533200344720ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/bag/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.bag; import java.util.Collection; import java.util.DoubleSummaryStatistics; import java.util.IntSummaryStatistics; import java.util.LongSummaryStatistics; import java.util.Map; import java.util.function.BiConsumer; import java.util.function.Supplier; import java.util.stream.Collector; import java.util.stream.Stream; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.predicate.primitive.IntPredicate; import org.eclipse.collections.api.block.predicate.primitive.ObjectIntPredicate; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.primitive.ObjectIntProcedure; import org.eclipse.collections.api.list.ListIterable; import org.eclipse.collections.api.map.MapIterable; import org.eclipse.collections.api.map.MutableMapIterable; import org.eclipse.collections.api.multimap.bag.BagMultimap; import org.eclipse.collections.api.partition.bag.PartitionBag; import org.eclipse.collections.api.set.SetIterable; import org.eclipse.collections.api.tuple.Pair; import org.eclipse.collections.api.tuple.primitive.ObjectIntPair; /** * A Bag is a Collection whose elements are unordered and may contain duplicate entries. It varies from * MutableCollection in that it adds a protocol for determining, adding, and removing the number of occurrences for an * item. * * @since 1.0 */ public interface Bag extends RichIterable { /** * Two bags {@code b1} and {@code b2} are equal if {@code m1.toMapOfItemToCount().equals(m2.toMapOfItemToCount())}. * * @see Map#equals(Object) */ @Override boolean equals(Object object); /** * Returns the hash code for this Bag, defined as this.{@link #toMapOfItemToCount()}.hashCode(). * * @see Map#hashCode() */ @Override int hashCode(); @Override Bag tap(Procedure procedure); @Override Bag select(Predicate predicate); @Override

Bag selectWith(Predicate2 predicate, P parameter); @Override Bag reject(Predicate predicate); @Override

Bag rejectWith(Predicate2 predicate, P parameter); @Override PartitionBag partition(Predicate predicate); @Override

PartitionBag partitionWith(Predicate2 predicate, P parameter); @Override Bag selectInstancesOf(Class clazz); @Override BagMultimap groupBy(Function function); @Override BagMultimap groupByEach(Function> function); @Override SetIterable> zipWithIndex(); /** * For each distinct item, with the number of occurrences, execute the specified procedure. */ void forEachWithOccurrences(ObjectIntProcedure procedure); /** * Returns true if the predicate evaluates to true for any element of the Bag. * Returns false if the Bag is empty or if no element returns true for the predicate. * * @since 11.0 */ boolean anySatisfyWithOccurrences(ObjectIntPredicate predicate); /** * Returns true if the predicate evaluates to true for all elements of the Bag. * Returns false if the Bag is empty or if not all elements return true for the predicate. * * @since 11.0 */ boolean allSatisfyWithOccurrences(ObjectIntPredicate predicate); /** * Returns true if the Bag is empty or if the predicate evaluates to false for all elements of the Bag. * Returns false if the predicate evaluates to true for at least one element of the Bag. * * @since 11.0 */ boolean noneSatisfyWithOccurrences(ObjectIntPredicate predicate); /** * Returns an element of the Bag that satisfies the predicate or null if such an element does not exist * * @since 11.0 */ T detectWithOccurrences(ObjectIntPredicate predicate); /** * The occurrences of a distinct item in the bag. */ int occurrencesOf(Object item); /** * Returns all elements of the bag that have a number of occurrences that satisfy the predicate. * * @since 3.0 */ Bag selectByOccurrences(IntPredicate predicate); /** * Returns all elements of the bag that have more than one occurrence. * * @since 9.2 */ default Bag selectDuplicates() { return this.selectByOccurrences(occurrences -> occurrences > 1); } /** * Returns a set containing all elements of the bag that have exactly one occurrence. * * @since 9.2 */ SetIterable selectUnique(); /** * Returns the {@code count} most frequently occurring items. * * In the event of a tie, all of the items with the number of occurrences that match the occurrences of the last * item will be returned. * * @since 6.0 */ ListIterable> topOccurrences(int count); /** * Returns the {@code count} least frequently occurring items. * * In the event of a tie, all of the items with the number of occurrences that match the occurrences of the last * item will be returned. * * @since 6.0 */ ListIterable> bottomOccurrences(int count); /** * The size of the Bag when counting only distinct elements. */ int sizeDistinct(); /** * Converts the Bag to a Map of the Item type to its count as an Integer. */ MapIterable toMapOfItemToCount(); /** * Returns a string representation of this bag. The string representation consists of a list of element-count mappings. * *

     * Assert.assertEquals("{1=1, 2=2, 3=3}", Bags.mutable.with(1, 2, 2, 3, 3, 3).toStringOfItemToCount());
     * 
* This string representation is similar to {@link java.util.AbstractMap#toString()}, not {@link RichIterable#toString()}, * whereas the {@code toString()} implementation for a Bag is consistent with {@link RichIterable#toString()}. * * @return a string representation of this bag * @since 3.0 */ String toStringOfItemToCount(); ImmutableBagIterable toImmutable(); /** * @since 8.0 */ @Override default IntSummaryStatistics summarizeInt(IntFunction function) { IntSummaryStatistics stats = new IntSummaryStatistics(); this.forEachWithOccurrences((each, occurrences) -> { int result = function.intValueOf(each); for (int i = 0; i < occurrences; i++) { stats.accept(result); } }); return stats; } /** * @since 8.0 */ @Override default DoubleSummaryStatistics summarizeFloat(FloatFunction function) { DoubleSummaryStatistics stats = new DoubleSummaryStatistics(); this.forEachWithOccurrences((each, occurrences) -> { float result = function.floatValueOf(each); for (int i = 0; i < occurrences; i++) { stats.accept(result); } }); return stats; } /** * @since 8.0 */ @Override default LongSummaryStatistics summarizeLong(LongFunction function) { LongSummaryStatistics stats = new LongSummaryStatistics(); this.forEachWithOccurrences((each, occurrences) -> { long result = function.longValueOf(each); for (int i = 0; i < occurrences; i++) { stats.accept(result); } }); return stats; } /** * @since 8.0 */ @Override default DoubleSummaryStatistics summarizeDouble(DoubleFunction function) { DoubleSummaryStatistics stats = new DoubleSummaryStatistics(); this.forEachWithOccurrences((each, occurrences) -> { double result = function.doubleValueOf(each); for (int i = 0; i < occurrences; i++) { stats.accept(result); } }); return stats; } /** * This method produces the equivalent result as {@link Stream#collect(Collector)}. * * @since 8.0 */ @Override default R reduceInPlace(Collector collector) { A mutableResult = collector.supplier().get(); BiConsumer accumulator = collector.accumulator(); this.forEachWithOccurrences((each, occurrences) -> { for (int i = 0; i < occurrences; i++) { accumulator.accept(mutableResult, each); } }); return collector.finisher().apply(mutableResult); } /** * This method produces the equivalent result as {@link Stream#collect(Supplier, BiConsumer, BiConsumer)}. * * @since 8.0 */ @Override default R reduceInPlace(Supplier supplier, BiConsumer accumulator) { R mutableResult = supplier.get(); this.forEachWithOccurrences((each, occurrences) -> { for (int i = 0; i < occurrences; i++) { accumulator.accept(mutableResult, each); } }); return mutableResult; } /** * Iterates over the unique elements and their occurrences and collects the results of applying the specified function. * * @since 10.0 */ RichIterable collectWithOccurrences(ObjectIntToObjectFunction function); /** * Iterates over the unique elements and their occurrences and collects the results of applying the * specified function into the target collection. * * @since 9.1. */ default > R collectWithOccurrences( ObjectIntToObjectFunction function, R target) { this.forEachWithOccurrences((each, occurrences) -> target.add(function.valueOf(each, occurrences))); return target; } /** * Applies an aggregate function over the iterable grouping results into the target map based on the specific * groupBy function. Aggregate results are allowed to be immutable as they will be replaced in place in the map. A * second function specifies the initial "zero" aggregate value to work with (i.e. Integer.valueOf(0)). * * This method is overridden and optimized for Bag to use forEachWithOccurrences instead of forEach. * * @since 10.3 */ @Override default > R aggregateBy( Function groupBy, Function0 zeroValueFactory, Function2 nonMutatingAggregator, R target) { this.forEachWithOccurrences((each, occurrences) -> { K key = groupBy.valueOf(each); for (int i = 0; i < occurrences; i++) { target.updateValueWith(key, zeroValueFactory, nonMutatingAggregator, each); } }); return target; } } ImmutableBag.java000066400000000000000000000165751407344533200363450ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/bag/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.bag; import org.eclipse.collections.api.bag.primitive.ImmutableBooleanBag; import org.eclipse.collections.api.bag.primitive.ImmutableByteBag; import org.eclipse.collections.api.bag.primitive.ImmutableCharBag; import org.eclipse.collections.api.bag.primitive.ImmutableDoubleBag; import org.eclipse.collections.api.bag.primitive.ImmutableFloatBag; import org.eclipse.collections.api.bag.primitive.ImmutableIntBag; import org.eclipse.collections.api.bag.primitive.ImmutableLongBag; import org.eclipse.collections.api.bag.primitive.ImmutableShortBag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.predicate.primitive.IntPredicate; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.factory.Sets; import org.eclipse.collections.api.list.ImmutableList; import org.eclipse.collections.api.multimap.bag.ImmutableBagMultimap; import org.eclipse.collections.api.ordered.OrderedIterable; import org.eclipse.collections.api.partition.bag.PartitionImmutableBag; import org.eclipse.collections.api.set.ImmutableSet; import org.eclipse.collections.api.set.MutableSet; import org.eclipse.collections.api.tuple.Pair; import org.eclipse.collections.api.tuple.primitive.ObjectIntPair; /** * @since 1.0 */ public interface ImmutableBag extends UnsortedBag, ImmutableBagIterable { @Override ImmutableBag newWith(T element); @Override ImmutableBag newWithout(T element); @Override ImmutableBag newWithAll(Iterable elements); @Override ImmutableBag newWithoutAll(Iterable elements); @Override ImmutableBag selectByOccurrences(IntPredicate predicate); /** * @since 9.2 */ @Override default ImmutableBag selectDuplicates() { return this.selectByOccurrences(occurrences -> occurrences > 1); } /** * @since 9.2 */ @Override default ImmutableSet selectUnique() { MutableSet result = Sets.mutable.empty(); this.forEachWithOccurrences((each, occurrences) -> { if (occurrences == 1) { result.add(each); } }); return result.toImmutable(); } @Override ImmutableBag tap(Procedure procedure); @Override ImmutableBag select(Predicate predicate); @Override

ImmutableBag selectWith(Predicate2 predicate, P parameter); @Override ImmutableBag reject(Predicate predicate); @Override

ImmutableBag rejectWith(Predicate2 predicate, P parameter); @Override PartitionImmutableBag partition(Predicate predicate); @Override

PartitionImmutableBag partitionWith(Predicate2 predicate, P parameter); @Override ImmutableBag selectInstancesOf(Class clazz); @Override ImmutableBag collect(Function function); @Override ImmutableBooleanBag collectBoolean(BooleanFunction booleanFunction); @Override ImmutableByteBag collectByte(ByteFunction byteFunction); @Override ImmutableCharBag collectChar(CharFunction charFunction); @Override ImmutableDoubleBag collectDouble(DoubleFunction doubleFunction); @Override ImmutableFloatBag collectFloat(FloatFunction floatFunction); @Override ImmutableIntBag collectInt(IntFunction intFunction); @Override ImmutableLongBag collectLong(LongFunction longFunction); @Override ImmutableShortBag collectShort(ShortFunction shortFunction); @Override ImmutableBag collectWith(Function2 function, P parameter); @Override ImmutableBag collectIf(Predicate predicate, Function function); @Override ImmutableBag collectWithOccurrences(ObjectIntToObjectFunction function); @Override ImmutableBag flatCollect(Function> function); /** * @since 9.2 */ @Override default ImmutableBag flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } /** * @since 9.0 */ @Override default ImmutableBag countBy(Function function) { return this.collect(function); } /** * @since 9.0 */ @Override default ImmutableBag countByWith(Function2 function, P parameter) { return this.collectWith(function, parameter); } /** * @since 10.0.0 */ @Override default ImmutableBag countByEach(Function> function) { return this.flatCollect(function); } @Override ImmutableBagMultimap groupBy(Function function); @Override ImmutableBagMultimap groupByEach(Function> function); /** * @deprecated in 6.0. Use {@link OrderedIterable#zip(Iterable)} instead. */ @Override @Deprecated ImmutableBag> zip(Iterable that); /** * @deprecated in 6.0. Use {@link OrderedIterable#zipWithIndex()} instead. */ @Override @Deprecated ImmutableSet> zipWithIndex(); /** * @since 6.0 */ @Override ImmutableList> topOccurrences(int count); /** * @since 6.0 */ @Override ImmutableList> bottomOccurrences(int count); /** * Overrides toImmutableBag in RichIterable to return this. * * @since 11.0 */ @Override default ImmutableBag toImmutableBag() { return this; } } ImmutableBagIterable.java000066400000000000000000000057661407344533200400150ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/bag/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.bag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.predicate.primitive.IntPredicate; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.collection.ImmutableCollection; import org.eclipse.collections.api.map.MutableMapIterable; import org.eclipse.collections.api.multimap.bag.ImmutableBagIterableMultimap; import org.eclipse.collections.api.partition.bag.PartitionImmutableBagIterable; import org.eclipse.collections.api.set.ImmutableSetIterable; import org.eclipse.collections.api.tuple.Pair; public interface ImmutableBagIterable extends Bag, ImmutableCollection { @Override ImmutableBagIterable tap(Procedure procedure); @Override ImmutableBagIterable select(Predicate predicate); @Override

ImmutableBagIterable selectWith(Predicate2 predicate, P parameter); @Override ImmutableBagIterable reject(Predicate predicate); @Override

ImmutableBagIterable rejectWith(Predicate2 predicate, P parameter); @Override PartitionImmutableBagIterable partition(Predicate predicate); @Override

PartitionImmutableBagIterable partitionWith(Predicate2 predicate, P parameter); @Override ImmutableBagIterable selectInstancesOf(Class clazz); @Override ImmutableBagIterableMultimap groupBy(Function function); @Override ImmutableBagIterableMultimap groupByEach(Function> function); @Override ImmutableSetIterable> zipWithIndex(); @Override ImmutableBagIterable selectByOccurrences(IntPredicate predicate); /** * @since 9.2 */ @Override default ImmutableBagIterable selectDuplicates() { return this.selectByOccurrences(occurrences -> occurrences > 1); } /** * @since 9.2 */ @Override ImmutableSetIterable selectUnique(); @Override MutableMapIterable toMapOfItemToCount(); @Override ImmutableCollection collectWithOccurrences(ObjectIntToObjectFunction function); } MultiReaderBag.java000066400000000000000000000017261407344533200366330ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/bag/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.bag; import org.eclipse.collections.api.block.procedure.Procedure; /** * A MultiReaderBag provides thread-safe iteration for a bag through methods {@code withReadLockAndDelegate()} and {@code withWriteLockAndDelegate()}. * * @since 10.0. */ public interface MultiReaderBag extends MutableBag { void withReadLockAndDelegate(Procedure> procedure); void withWriteLockAndDelegate(Procedure> procedure); } MutableBag.java000066400000000000000000000174111407344533200360050ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/bag/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.bag; import org.eclipse.collections.api.bag.primitive.MutableBooleanBag; import org.eclipse.collections.api.bag.primitive.MutableByteBag; import org.eclipse.collections.api.bag.primitive.MutableCharBag; import org.eclipse.collections.api.bag.primitive.MutableDoubleBag; import org.eclipse.collections.api.bag.primitive.MutableFloatBag; import org.eclipse.collections.api.bag.primitive.MutableIntBag; import org.eclipse.collections.api.bag.primitive.MutableLongBag; import org.eclipse.collections.api.bag.primitive.MutableShortBag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.predicate.primitive.IntPredicate; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.factory.Sets; import org.eclipse.collections.api.map.MutableMap; import org.eclipse.collections.api.multimap.bag.MutableBagMultimap; import org.eclipse.collections.api.ordered.OrderedIterable; import org.eclipse.collections.api.partition.bag.PartitionMutableBag; import org.eclipse.collections.api.set.MutableSet; import org.eclipse.collections.api.tuple.Pair; /** * A MutableBag is a Collection whose elements are unordered and may contain duplicate entries. It varies from * MutableCollection in that it adds a protocol for determining, adding, and removing the number of occurrences for an * item. * * @since 1.0 */ public interface MutableBag extends UnsortedBag, MutableBagIterable { @Override MutableMap toMapOfItemToCount(); @Override MutableBag selectByOccurrences(IntPredicate predicate); /** * @since 9.2 */ @Override default MutableBag selectDuplicates() { return this.selectByOccurrences(occurrences -> occurrences > 1); } /** * @since 9.2 */ @Override default MutableSet selectUnique() { MutableSet result = Sets.mutable.empty(); this.forEachWithOccurrences((each, occurrences) -> { if (occurrences == 1) { result.add(each); } }); return result; } @Override default MutableBag with(T element) { this.add(element); return this; } @Override default MutableBag without(T element) { this.remove(element); return this; } @Override default MutableBag withAll(Iterable elements) { this.addAllIterable(elements); return this; } @Override default MutableBag withoutAll(Iterable elements) { this.removeAllIterable(elements); return this; } @Override MutableBag newEmpty(); @Override MutableBag asUnmodifiable(); @Override MutableBag asSynchronized(); @Override PartitionMutableBag partition(Predicate predicate); @Override

PartitionMutableBag partitionWith(Predicate2 predicate, P parameter); @Override MutableBagMultimap groupBy(Function function); @Override MutableBagMultimap groupByEach(Function> function); /** * @since 9.0 */ @Override default MutableBag countBy(Function function) { return this.collect(function); } /** * @since 9.0 */ @Override default MutableBag countByWith(Function2 function, P parameter) { return this.collectWith(function, parameter); } /** * @since 10.0.0 */ @Override default MutableBag countByEach(Function> function) { return this.flatCollect(function); } /** * @deprecated in 6.0. Use {@link OrderedIterable#zip(Iterable)} instead. */ @Override @Deprecated MutableBag> zip(Iterable that); /** * @deprecated in 6.0. Use {@link OrderedIterable#zipWithIndex()} instead. */ @Override @Deprecated MutableSet> zipWithIndex(); @Override MutableBag tap(Procedure procedure); @Override MutableBag select(Predicate predicate); @Override

MutableBag selectWith(Predicate2 predicate, P parameter); @Override MutableBag reject(Predicate predicate); @Override

MutableBag rejectWith(Predicate2 predicate, P parameter); @Override MutableBag selectInstancesOf(Class clazz); @Override MutableBag collect(Function function); @Override MutableByteBag collectByte(ByteFunction byteFunction); @Override MutableCharBag collectChar(CharFunction charFunction); @Override MutableIntBag collectInt(IntFunction intFunction); @Override MutableBooleanBag collectBoolean(BooleanFunction booleanFunction); @Override MutableDoubleBag collectDouble(DoubleFunction doubleFunction); @Override MutableFloatBag collectFloat(FloatFunction floatFunction); @Override MutableLongBag collectLong(LongFunction longFunction); @Override MutableShortBag collectShort(ShortFunction shortFunction); @Override MutableBag collectWith(Function2 function, P parameter); @Override MutableBag collectIf(Predicate predicate, Function function); @Override MutableBag collectWithOccurrences(ObjectIntToObjectFunction function); @Override MutableBag flatCollect(Function> function); /** * @since 9.2 */ @Override default MutableBag flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } /** * @since 8.0 */ @Override ImmutableBag toImmutable(); /** * Converts the MutableBag to the default ImmutableBag implementation. * * @since 11.0 */ @Override default ImmutableBag toImmutableBag() { return this.toImmutable(); } } MutableBagIterable.java000066400000000000000000000110631407344533200374520ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/bag/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.bag; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.predicate.primitive.IntPredicate; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.collection.MutableCollection; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.map.MutableMapIterable; import org.eclipse.collections.api.multimap.bag.MutableBagIterableMultimap; import org.eclipse.collections.api.partition.bag.PartitionMutableBagIterable; import org.eclipse.collections.api.set.MutableSetIterable; import org.eclipse.collections.api.tuple.Pair; import org.eclipse.collections.api.tuple.primitive.ObjectIntPair; public interface MutableBagIterable extends Bag, MutableCollection { /** * Add number of {@code occurrences} for an {@code item}. If the {@code item} does not exist, then the {@code item} is added to the bag. * *

* For Example: *

     * MutableBagIterable<String> names = Bags.mutable.of("A", "B", "B");
     * Assert.assertEquals(4, names.addOccurrences("A", 3));
     * 
* * @return updated number of occurrences. * @throws IllegalArgumentException if {@code occurrences} are less than 0. */ int addOccurrences(T item, int occurrences); boolean removeOccurrences(Object item, int occurrences); boolean setOccurrences(T item, int occurrences); @Override MutableBagIterable tap(Procedure procedure); @Override MutableBagIterable select(Predicate predicate); @Override

MutableBagIterable selectWith(Predicate2 predicate, P parameter); @Override MutableBagIterable reject(Predicate predicate); @Override

MutableBagIterable rejectWith(Predicate2 predicate, P parameter); @Override PartitionMutableBagIterable partition(Predicate predicate); @Override

PartitionMutableBagIterable partitionWith(Predicate2 predicate, P parameter); @Override MutableBagIterable selectInstancesOf(Class clazz); @Override MutableBagIterableMultimap groupBy(Function function); @Override MutableBagIterableMultimap groupByEach(Function> function); @Override MutableSetIterable> zipWithIndex(); @Override MutableBagIterable selectByOccurrences(IntPredicate predicate); /** * @since 9.2 */ @Override default MutableBagIterable selectDuplicates() { return this.selectByOccurrences(occurrences -> occurrences > 1); } /** * @since 9.2 */ @Override MutableSetIterable selectUnique(); @Override MutableMapIterable toMapOfItemToCount(); /** * @since 6.0 */ @Override MutableList> topOccurrences(int count); /** * @since 6.0 */ @Override MutableList> bottomOccurrences(int count); @Override default MutableBagIterable with(T element) { this.add(element); return this; } @Override default MutableBagIterable without(T element) { this.remove(element); return this; } @Override default MutableBagIterable withAll(Iterable elements) { this.addAllIterable(elements); return this; } @Override default MutableBagIterable withoutAll(Iterable elements) { this.removeAllIterable(elements); return this; } @Override RichIterable collectWithOccurrences(ObjectIntToObjectFunction function); } ParallelBag.java000066400000000000000000000036231407344533200361500ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/bag/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.bag; import org.eclipse.collections.api.ParallelIterable; import org.eclipse.collections.api.annotation.Beta; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.primitive.ObjectIntProcedure; import org.eclipse.collections.api.multimap.bag.BagMultimap; /** * @since 5.0 */ @Beta public interface ParallelBag extends ParallelIterable { void forEachWithOccurrences(ObjectIntProcedure procedure); /** * Creates a parallel iterable for selecting elements from the current iterable. */ @Override ParallelBag select(Predicate predicate); @Override

ParallelBag selectWith(Predicate2 predicate, P parameter); /** * Creates a parallel iterable for rejecting elements from the current iterable. */ @Override ParallelBag reject(Predicate predicate); @Override

ParallelBag rejectWith(Predicate2 predicate, P parameter); @Override ParallelBag selectInstancesOf(Class clazz); @Override BagMultimap groupBy(Function function); @Override BagMultimap groupByEach(Function> function); } ParallelUnsortedBag.java000066400000000000000000000113421407344533200376710ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/bag/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.bag; import org.eclipse.collections.api.annotation.Beta; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.multimap.bag.UnsortedBagMultimap; import org.eclipse.collections.api.set.ParallelUnsortedSetIterable; /** * @since 5.0 */ @Beta public interface ParallelUnsortedBag extends ParallelBag { @Override ParallelUnsortedSetIterable asUnique(); /** * Creates a parallel iterable for selecting elements from the current iterable. */ @Override ParallelUnsortedBag select(Predicate predicate); @Override

ParallelUnsortedBag selectWith(Predicate2 predicate, P parameter); /** * Creates a parallel iterable for rejecting elements from the current iterable. */ @Override ParallelUnsortedBag reject(Predicate predicate); @Override

ParallelUnsortedBag rejectWith(Predicate2 predicate, P parameter); @Override ParallelUnsortedBag selectInstancesOf(Class clazz); /** * Creates a parallel iterable for collecting elements from the current iterable. */ @Override ParallelUnsortedBag collect(Function function); @Override ParallelUnsortedBag collectWith(Function2 function, P parameter); /** * Creates a parallel iterable for selecting and collecting elements from the current iterable. */ @Override ParallelUnsortedBag collectIf(Predicate predicate, Function function); /** * Creates a parallel flattening iterable for the current iterable. */ @Override ParallelUnsortedBag flatCollect(Function> function); @Override UnsortedBagMultimap groupBy(Function function); @Override UnsortedBagMultimap groupByEach(Function> function); // /** // * Returns a parallel BooleanIterable which will transform the underlying iterable data to boolean values based on the booleanFunction. // */ // ParallelBooleanIterable collectBoolean(BooleanFunction booleanFunction); // // /** // * Returns a parallel ByteIterable which will transform the underlying iterable data to byte values based on the byteFunction. // */ // ParallelByteIterable collectByte(ByteFunction byteFunction); // // /** // * Returns a parallel CharIterable which will transform the underlying iterable data to char values based on the charFunction. // */ // ParallelCharIterable collectChar(CharFunction charFunction); // // /** // * Returns a parallel DoubleIterable which will transform the underlying iterable data to double values based on the doubleFunction. // */ // ParallelDoubleIterable collectDouble(DoubleFunction doubleFunction); // // /** // * Returns a parallel FloatIterable which will transform the underlying iterable data to float values based on the floatFunction. // */ // ParallelFloatIterable collectFloat(FloatFunction floatFunction); // // /** // * Returns a parallel IntIterable which will transform the underlying iterable data to int values based on the intFunction. // */ // ParallelIntIterable collectInt(IntFunction intFunction); // // /** // * Returns a parallel LongIterable which will transform the underlying iterable data to long values based on the longFunction. // */ // ParallelLongIterable collectLong(LongFunction longFunction); // // /** // * Returns a parallel ShortIterable which will transform the underlying iterable data to short values based on the shortFunction. // */ // ParallelShortIterable collectShort(ShortFunction shortFunction); } UnsortedBag.java000066400000000000000000000124361407344533200362210ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/bag/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.bag; import org.eclipse.collections.api.bag.primitive.BooleanBag; import org.eclipse.collections.api.bag.primitive.ByteBag; import org.eclipse.collections.api.bag.primitive.CharBag; import org.eclipse.collections.api.bag.primitive.DoubleBag; import org.eclipse.collections.api.bag.primitive.FloatBag; import org.eclipse.collections.api.bag.primitive.IntBag; import org.eclipse.collections.api.bag.primitive.LongBag; import org.eclipse.collections.api.bag.primitive.ShortBag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.predicate.primitive.IntPredicate; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.multimap.bag.UnsortedBagMultimap; import org.eclipse.collections.api.ordered.OrderedIterable; import org.eclipse.collections.api.partition.bag.PartitionUnsortedBag; import org.eclipse.collections.api.set.UnsortedSetIterable; import org.eclipse.collections.api.tuple.Pair; public interface UnsortedBag extends Bag { @Override UnsortedBag tap(Procedure procedure); @Override UnsortedBag selectByOccurrences(IntPredicate predicate); /** * @since 9.2 */ @Override default UnsortedBag selectDuplicates() { return this.selectByOccurrences(occurrences -> occurrences > 1); } /** * @since 9.2 */ @Override UnsortedSetIterable selectUnique(); @Override UnsortedBag select(Predicate predicate); @Override

UnsortedBag selectWith(Predicate2 predicate, P parameter); @Override UnsortedBag reject(Predicate predicate); @Override

UnsortedBag rejectWith(Predicate2 predicate, P parameter); @Override UnsortedBag selectInstancesOf(Class clazz); @Override PartitionUnsortedBag partition(Predicate predicate); @Override UnsortedBag collect(Function function); @Override BooleanBag collectBoolean(BooleanFunction booleanFunction); @Override ByteBag collectByte(ByteFunction byteFunction); @Override CharBag collectChar(CharFunction charFunction); @Override DoubleBag collectDouble(DoubleFunction doubleFunction); @Override FloatBag collectFloat(FloatFunction floatFunction); @Override IntBag collectInt(IntFunction intFunction); @Override LongBag collectLong(LongFunction longFunction); @Override ShortBag collectShort(ShortFunction shortFunction); @Override UnsortedBag collectWith(Function2 function, P parameter); @Override UnsortedBag collectIf(Predicate predicate, Function function); @Override UnsortedBag collectWithOccurrences(ObjectIntToObjectFunction function); @Override UnsortedBag flatCollect(Function> function); /** * @since 9.2 */ @Override default UnsortedBag flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } /** * @deprecated in 6.0. Use {@link OrderedIterable#zip(Iterable)} instead. */ @Override @Deprecated UnsortedBag> zip(Iterable that); /** * @deprecated in 6.0. Use {@link OrderedIterable#zipWithIndex()} instead. */ @Override @Deprecated UnsortedSetIterable> zipWithIndex(); @Override UnsortedBagMultimap groupBy(Function function); @Override UnsortedBagMultimap groupByEach(Function> function); } package-info.java000066400000000000000000000024211407344533200363210ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/bag/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for Bag API. *

* A Bag is a {@link java.util.Collection} which contains elements that are unordered, and may contain duplicate entries. It adds a protocol for * adding, removing, and determining the number of occurrences for an item. *

* This package contains 3 interfaces: *

    *
  • * {@link org.eclipse.collections.api.bag.Bag} - contains the common API for Mutable and Immutable Bag. *
  • *
  • * {@link org.eclipse.collections.api.bag.MutableBag} - a Bag whose contents can be altered after initialization. *
  • *
  • * {@link org.eclipse.collections.api.bag.ImmutableBag} - a Bag whose contents cannot be altered after initialization. *
  • *
*/ package org.eclipse.collections.api.bag; primitive/000077500000000000000000000000001407344533200351435ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/bagpackage-info.java000066400000000000000000000014311407344533200403310ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/bag/primitive/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains API for Primitive Bags with Mutable and Immutable variants. *

* A primitive bag is similar to a {@link org.eclipse.collections.api.bag.Bag}, but is memory-optimized for primitive types. * These bags are backed by primitive int maps. */ package org.eclipse.collections.api.bag.primitive; sorted/000077500000000000000000000000001407344533200344335ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/bagImmutableSortedBag.java000066400000000000000000000201471407344533200410140ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/bag/sorted/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.bag.sorted; import org.eclipse.collections.api.bag.ImmutableBag; import org.eclipse.collections.api.bag.ImmutableBagIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.predicate.primitive.IntPredicate; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.factory.SortedSets; import org.eclipse.collections.api.list.ImmutableList; import org.eclipse.collections.api.list.primitive.ImmutableBooleanList; import org.eclipse.collections.api.list.primitive.ImmutableByteList; import org.eclipse.collections.api.list.primitive.ImmutableCharList; import org.eclipse.collections.api.list.primitive.ImmutableDoubleList; import org.eclipse.collections.api.list.primitive.ImmutableFloatList; import org.eclipse.collections.api.list.primitive.ImmutableIntList; import org.eclipse.collections.api.list.primitive.ImmutableLongList; import org.eclipse.collections.api.list.primitive.ImmutableShortList; import org.eclipse.collections.api.map.sorted.MutableSortedMap; import org.eclipse.collections.api.multimap.sortedbag.ImmutableSortedBagMultimap; import org.eclipse.collections.api.partition.bag.sorted.PartitionImmutableSortedBag; import org.eclipse.collections.api.set.sorted.ImmutableSortedSet; import org.eclipse.collections.api.set.sorted.MutableSortedSet; import org.eclipse.collections.api.tuple.Pair; /** * ImmutableSortedBag is the non-modifiable equivalent interface to {@link MutableSortedBag}. * * @since 4.2 */ public interface ImmutableSortedBag extends ImmutableBagIterable, SortedBag { @Override ImmutableSortedBag newWith(T element); @Override ImmutableSortedBag newWithout(T element); @Override ImmutableSortedBag newWithAll(Iterable elements); @Override ImmutableSortedBag newWithoutAll(Iterable elements); @Override ImmutableSortedBag selectByOccurrences(IntPredicate predicate); /** * @since 9.2 */ @Override default ImmutableSortedBag selectDuplicates() { return this.selectByOccurrences(occurrences -> occurrences > 1); } /** * @since 9.2 */ @Override default ImmutableSortedSet selectUnique() { MutableSortedSet result = SortedSets.mutable.with(this.comparator()); this.forEachWithOccurrences((each, occurrences) -> { if (occurrences == 1) { result.add(each); } }); return result.toImmutable(); } @Override ImmutableSortedBag tap(Procedure procedure); @Override ImmutableSortedBag select(Predicate predicate); @Override

ImmutableSortedBag selectWith(Predicate2 predicate, P parameter); @Override ImmutableSortedBag reject(Predicate predicate); @Override

ImmutableSortedBag rejectWith(Predicate2 predicate, P parameter); @Override PartitionImmutableSortedBag partition(Predicate predicate); @Override

PartitionImmutableSortedBag partitionWith(Predicate2 predicate, P parameter); @Override ImmutableSortedBag selectInstancesOf(Class clazz); @Override ImmutableList collect(Function function); /** * @since 9.1. */ @Override default ImmutableList collectWithIndex(ObjectIntToObjectFunction function) { int[] index = {0}; return this.collect(each -> function.valueOf(each, index[0]++)); } @Override ImmutableBooleanList collectBoolean(BooleanFunction booleanFunction); @Override ImmutableByteList collectByte(ByteFunction byteFunction); @Override ImmutableCharList collectChar(CharFunction charFunction); @Override ImmutableDoubleList collectDouble(DoubleFunction doubleFunction); @Override ImmutableFloatList collectFloat(FloatFunction floatFunction); @Override ImmutableIntList collectInt(IntFunction intFunction); @Override ImmutableLongList collectLong(LongFunction longFunction); @Override ImmutableShortList collectShort(ShortFunction shortFunction); @Override ImmutableList collectWith(Function2 function, P parameter); @Override ImmutableList collectIf(Predicate predicate, Function function); @Override ImmutableList collectWithOccurrences(ObjectIntToObjectFunction function); @Override ImmutableList flatCollect(Function> function); /** * @since 9.2 */ @Override default ImmutableList flatCollectWith( Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override ImmutableSortedSet distinct(); @Override ImmutableSortedBag takeWhile(Predicate predicate); @Override ImmutableSortedBag dropWhile(Predicate predicate); /** * @since 9.0 */ @Override default ImmutableBag countBy(Function function) { return this.asLazy().collect(function).toBag().toImmutable(); } /** * @since 9.0 */ @Override default ImmutableBag countByWith(Function2 function, P parameter) { return this.asLazy().collectWith(function, parameter).toBag().toImmutable(); } /** * @since 10.0.0 */ @Override default ImmutableBag countByEach(Function> function) { return this.asLazy().flatCollect(function).toBag().toImmutable(); } @Override ImmutableSortedBagMultimap groupBy(Function function); @Override ImmutableSortedBagMultimap groupByEach(Function> function); @Override ImmutableList> zip(Iterable that); @Override ImmutableSortedSet> zipWithIndex(); @Override MutableSortedMap toMapOfItemToCount(); @Override ImmutableSortedBag toReversed(); @Override ImmutableSortedBag take(int count); @Override ImmutableSortedBag drop(int count); /** * @since 11.0 */ @Override default ImmutableSortedBag toImmutableSortedBag() { return this; } } MutableSortedBag.java000066400000000000000000000207241407344533200404670ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/bag/sorted/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.bag.sorted; import org.eclipse.collections.api.bag.MutableBag; import org.eclipse.collections.api.bag.MutableBagIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.predicate.primitive.IntPredicate; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.factory.SortedSets; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.list.primitive.MutableBooleanList; import org.eclipse.collections.api.list.primitive.MutableByteList; import org.eclipse.collections.api.list.primitive.MutableCharList; import org.eclipse.collections.api.list.primitive.MutableDoubleList; import org.eclipse.collections.api.list.primitive.MutableFloatList; import org.eclipse.collections.api.list.primitive.MutableIntList; import org.eclipse.collections.api.list.primitive.MutableLongList; import org.eclipse.collections.api.list.primitive.MutableShortList; import org.eclipse.collections.api.map.sorted.MutableSortedMap; import org.eclipse.collections.api.multimap.sortedbag.MutableSortedBagMultimap; import org.eclipse.collections.api.partition.bag.sorted.PartitionMutableSortedBag; import org.eclipse.collections.api.set.sorted.MutableSortedSet; import org.eclipse.collections.api.tuple.Pair; /** * @since 4.2 */ public interface MutableSortedBag extends SortedBag, MutableBagIterable, Cloneable { @Override MutableSortedBag selectByOccurrences(IntPredicate predicate); /** * @since 9.2 */ @Override default MutableSortedBag selectDuplicates() { return this.selectByOccurrences(occurrences -> occurrences > 1); } /** * @since 9.2 */ @Override default MutableSortedSet selectUnique() { MutableSortedSet result = SortedSets.mutable.with(this.comparator()); this.forEachWithOccurrences((each, occurrences) -> { if (occurrences == 1) { result.add(each); } }); return result; } @Override MutableSortedMap toMapOfItemToCount(); @Override default MutableSortedBag with(T element) { this.add(element); return this; } @Override default MutableSortedBag without(T element) { this.remove(element); return this; } @Override default MutableSortedBag withAll(Iterable elements) { this.addAllIterable(elements); return this; } @Override default MutableSortedBag withoutAll(Iterable elements) { this.removeAllIterable(elements); return this; } @Override MutableSortedBag newEmpty(); MutableSortedBag clone(); /** * Returns an unmodifiable view of the set. * * @return an unmodifiable view of this set */ @Override MutableSortedBag asUnmodifiable(); @Override MutableSortedBag asSynchronized(); @Override MutableSortedBag tap(Procedure procedure); @Override MutableSortedBag select(Predicate predicate); @Override

MutableSortedBag selectWith(Predicate2 predicate, P parameter); @Override MutableSortedBag reject(Predicate predicate); @Override

MutableSortedBag rejectWith(Predicate2 predicate, P parameter); @Override PartitionMutableSortedBag partition(Predicate predicate); @Override

PartitionMutableSortedBag partitionWith(Predicate2 predicate, P parameter); @Override PartitionMutableSortedBag partitionWhile(Predicate predicate); @Override MutableSortedBag selectInstancesOf(Class clazz); @Override MutableList collect(Function function); @Override MutableList collectWithOccurrences(ObjectIntToObjectFunction function); /** * @since 9.1. */ @Override default MutableList collectWithIndex(ObjectIntToObjectFunction function) { int[] index = {0}; return this.collect(each -> function.valueOf(each, index[0]++)); } @Override MutableBooleanList collectBoolean(BooleanFunction booleanFunction); @Override MutableByteList collectByte(ByteFunction byteFunction); @Override MutableCharList collectChar(CharFunction charFunction); @Override MutableDoubleList collectDouble(DoubleFunction doubleFunction); @Override MutableFloatList collectFloat(FloatFunction floatFunction); @Override MutableIntList collectInt(IntFunction intFunction); @Override MutableLongList collectLong(LongFunction longFunction); @Override MutableShortList collectShort(ShortFunction shortFunction); @Override MutableList collectWith(Function2 function, P parameter); @Override MutableList collectIf(Predicate predicate, Function function); @Override MutableList flatCollect(Function> function); /** * @since 9.2 */ @Override default MutableList flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override MutableSortedSet distinct(); @Override MutableSortedBag takeWhile(Predicate predicate); @Override MutableSortedBag dropWhile(Predicate predicate); @Override MutableSortedBagMultimap groupBy(Function function); @Override MutableSortedBagMultimap groupByEach(Function> function); /** * @since 9.0 */ @Override default MutableBag countBy(Function function) { return this.asLazy().collect(function).toBag(); } /** * @since 9.0 */ @Override default MutableBag countByWith(Function2 function, P parameter) { return this.asLazy().collectWith(function, parameter).toBag(); } /** * @since 10.0.0 */ @Override default MutableBag countByEach(Function> function) { return this.asLazy().flatCollect(function).toBag(); } @Override MutableList> zip(Iterable that); @Override MutableSortedSet> zipWithIndex(); @Override MutableSortedBag toReversed(); @Override MutableSortedBag take(int count); @Override MutableSortedBag drop(int count); /** * @since 11.0 */ @Override default ImmutableSortedBag toImmutableSortedBag() { return this.toImmutable(); } } ParallelSortedBag.java000066400000000000000000000113211407344533200406230ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/bag/sorted/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.bag.sorted; import org.eclipse.collections.api.annotation.Beta; import org.eclipse.collections.api.bag.ParallelBag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.list.ParallelListIterable; import org.eclipse.collections.api.multimap.sortedbag.SortedBagMultimap; /** * @since 5.0 */ @Beta public interface ParallelSortedBag extends ParallelBag { /** * Creates a parallel iterable for selecting elements from the current iterable. */ @Override ParallelSortedBag select(Predicate predicate); @Override

ParallelSortedBag selectWith(Predicate2 predicate, P parameter); /** * Creates a parallel iterable for rejecting elements from the current iterable. */ @Override ParallelSortedBag reject(Predicate predicate); @Override

ParallelSortedBag rejectWith(Predicate2 predicate, P parameter); @Override ParallelSortedBag selectInstancesOf(Class clazz); /** * Creates a parallel iterable for collecting elements from the current iterable. */ @Override ParallelListIterable collect(Function function); @Override ParallelListIterable collectWith(Function2 function, P parameter); /** * Creates a parallel iterable for selecting and collecting elements from the current iterable. */ @Override ParallelListIterable collectIf(Predicate predicate, Function function); /** * Creates a parallel flattening iterable for the current iterable. */ @Override ParallelListIterable flatCollect(Function> function); @Override SortedBagMultimap groupBy(Function function); @Override SortedBagMultimap groupByEach(Function> function); // /** // * Returns a parallel BooleanIterable which will transform the underlying iterable data to boolean values based on the booleanFunction. // */ // ParallelBooleanIterable collectBoolean(BooleanFunction booleanFunction); // // /** // * Returns a parallel ByteIterable which will transform the underlying iterable data to byte values based on the byteFunction. // */ // ParallelByteIterable collectByte(ByteFunction byteFunction); // // /** // * Returns a parallel CharIterable which will transform the underlying iterable data to char values based on the charFunction. // */ // ParallelCharIterable collectChar(CharFunction charFunction); // // /** // * Returns a parallel DoubleIterable which will transform the underlying iterable data to double values based on the doubleFunction. // */ // ParallelDoubleIterable collectDouble(DoubleFunction doubleFunction); // // /** // * Returns a parallel FloatIterable which will transform the underlying iterable data to float values based on the floatFunction. // */ // ParallelFloatIterable collectFloat(FloatFunction floatFunction); // // /** // * Returns a parallel IntIterable which will transform the underlying iterable data to int values based on the intFunction. // */ // ParallelIntIterable collectInt(IntFunction intFunction); // // /** // * Returns a parallel LongIterable which will transform the underlying iterable data to long values based on the longFunction. // */ // ParallelLongIterable collectLong(LongFunction longFunction); // // /** // * Returns a parallel ShortIterable which will transform the underlying iterable data to short values based on the shortFunction. // */ // ParallelShortIterable collectShort(ShortFunction shortFunction); } SortedBag.java000066400000000000000000000171711407344533200371570ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/bag/sorted/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.bag.sorted; import java.util.Comparator; import java.util.NoSuchElementException; import org.eclipse.collections.api.bag.Bag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.predicate.primitive.IntPredicate; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.list.ListIterable; import org.eclipse.collections.api.list.primitive.BooleanList; import org.eclipse.collections.api.list.primitive.ByteList; import org.eclipse.collections.api.list.primitive.CharList; import org.eclipse.collections.api.list.primitive.DoubleList; import org.eclipse.collections.api.list.primitive.FloatList; import org.eclipse.collections.api.list.primitive.IntList; import org.eclipse.collections.api.list.primitive.LongList; import org.eclipse.collections.api.list.primitive.ShortList; import org.eclipse.collections.api.map.sorted.SortedMapIterable; import org.eclipse.collections.api.multimap.sortedbag.SortedBagMultimap; import org.eclipse.collections.api.ordered.ReversibleIterable; import org.eclipse.collections.api.ordered.SortedIterable; import org.eclipse.collections.api.partition.bag.sorted.PartitionSortedBag; import org.eclipse.collections.api.set.sorted.SortedSetIterable; import org.eclipse.collections.api.tuple.Pair; /** * An Iterable whose elements are sorted by some comparator or their natural ordering and may contain duplicate entries. * * @since 4.2 */ public interface SortedBag extends Bag, Comparable>, SortedIterable, ReversibleIterable { @Override SortedBag selectByOccurrences(IntPredicate predicate); /** * @since 9.2 */ @Override default SortedBag selectDuplicates() { return this.selectByOccurrences(occurrences -> occurrences > 1); } /** * @since 9.2 */ @Override SortedSetIterable selectUnique(); @Override SortedMapIterable toMapOfItemToCount(); /** * Convert the SortedBag to an ImmutableSortedBag. If the bag is immutable, it returns itself. * Not yet supported. */ @Override ImmutableSortedBag toImmutable(); /** * Returns the minimum element out of this container based on the natural order, not the order of this bag. * If you want the minimum element based on the order of this bag, use {@link #getFirst()}. * * @throws ClassCastException if the elements are not {@link Comparable} * @throws NoSuchElementException if the SortedBag is empty * @since 1.0 */ @Override T min(); /** * Returns the maximum element out of this container based on the natural order, not the order of this bag. * If you want the maximum element based on the order of this bag, use {@link #getLast()}. * * @throws ClassCastException if the elements are not {@link Comparable} * @throws NoSuchElementException if the SortedBag is empty * @since 1.0 */ @Override T max(); @Override SortedBag tap(Procedure procedure); @Override SortedBag select(Predicate predicate); @Override

SortedBag selectWith(Predicate2 predicate, P parameter); @Override SortedBag reject(Predicate predicate); @Override

SortedBag rejectWith(Predicate2 predicate, P parameter); @Override PartitionSortedBag partition(Predicate predicate); @Override

PartitionSortedBag partitionWith(Predicate2 predicate, P parameter); @Override PartitionSortedBag partitionWhile(Predicate predicate); @Override SortedBag selectInstancesOf(Class clazz); @Override ListIterable collect(Function function); /** * @since 9.1. */ @Override default ListIterable collectWithIndex(ObjectIntToObjectFunction function) { int[] index = {0}; return this.collect(each -> function.valueOf(each, index[0]++)); } @Override BooleanList collectBoolean(BooleanFunction booleanFunction); @Override ByteList collectByte(ByteFunction byteFunction); @Override CharList collectChar(CharFunction charFunction); @Override DoubleList collectDouble(DoubleFunction doubleFunction); @Override FloatList collectFloat(FloatFunction floatFunction); @Override IntList collectInt(IntFunction intFunction); @Override LongList collectLong(LongFunction longFunction); @Override ShortList collectShort(ShortFunction shortFunction); @Override ListIterable collectWith(Function2 function, P parameter); @Override ListIterable collectIf(Predicate predicate, Function function); @Override ListIterable collectWithOccurrences(ObjectIntToObjectFunction function); @Override ListIterable flatCollect(Function> function); /** * @since 9.2 */ @Override default ListIterable flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override SortedSetIterable distinct(); @Override SortedBag takeWhile(Predicate predicate); @Override SortedBag dropWhile(Predicate predicate); @Override SortedBagMultimap groupBy(Function function); @Override SortedBagMultimap groupByEach(Function> function); /** * Returns the comparator used to order the elements in this bag, or null if this bag uses the natural ordering of * its elements. */ @Override Comparator comparator(); @Override SortedSetIterable> zipWithIndex(); @Override SortedBag toReversed(); @Override SortedBag take(int count); @Override SortedBag drop(int count); } package-info.java000066400000000000000000000025331407344533200376250ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/bag/sorted/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for SortedBag API. *

* A sorted bag is a {@link java.util.Collection} which contains elements that are sorted, and may contain duplicate entries. It adds a protocol for * adding, removing, and determining the number of occurrences for an item. *

* This package contains 3 interfaces: *

    *
  • * {@link org.eclipse.collections.api.bag.sorted.SortedBag} - contains the common API for Mutable and Immutable SortedBag. *
  • *
  • * {@link org.eclipse.collections.api.bag.sorted.MutableSortedBag} - a SortedBag whose contents can be altered after initialization. *
  • *
  • * {@link org.eclipse.collections.api.bag.sorted.ImmutableSortedBag} - a SortedBag whose contents cannot be altered after initialization. *
  • *
*/ package org.eclipse.collections.api.bag.sorted; bimap/000077500000000000000000000000001407344533200334725ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/apiBiMap.java000066400000000000000000000102421407344533200353240ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/bimap/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.bimap; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.map.MapIterable; import org.eclipse.collections.api.multimap.set.SetMultimap; import org.eclipse.collections.api.ordered.OrderedIterable; import org.eclipse.collections.api.partition.set.PartitionUnsortedSet; import org.eclipse.collections.api.set.SetIterable; import org.eclipse.collections.api.tuple.Pair; /** * A map that allows users to look up key-value pairs from either direction. Uniqueness is enforced on both the keys and values. * * @since 4.2 */ public interface BiMap extends MapIterable { /** * Returns an inversed view of this BiMap, where the associations are in the direction of this bimap's values to keys. */ BiMap inverse(); @Override SetMultimap flip(); @Override BiMap flipUniqueValues(); /** * Converts the BiMap to an ImmutableBiMap. If the bimap is immutable, it returns itself. */ @Override ImmutableBiMap toImmutable(); @Override BiMap tap(Procedure procedure); @Override BiMap select(Predicate2 predicate); @Override BiMap reject(Predicate2 predicate); /** * {@inheritDoc} * * Implementations are expected to delegate to {@link MutableBiMap#put(Object, Object)}, * {@link ImmutableBiMap#newWithKeyValue(Object, Object)}, or equivalent, not {@link MutableBiMap#forcePut(Object, Object)}. * * @throws RuntimeException when {@code function} returns colliding keys or values. */ @Override BiMap collect(Function2> function); /** * {@inheritDoc} * * Implementations are expected to delegate to {@link MutableBiMap#put(Object, Object)}, * {@link ImmutableBiMap#newWithKeyValue(Object, Object)}, or equivalent, not {@link MutableBiMap#forcePut(Object, Object)}. * * @throws RuntimeException when {@code function} returns colliding values. */ @Override BiMap collectValues(Function2 function); @Override SetIterable select(Predicate predicate); @Override

SetIterable selectWith(Predicate2 predicate, P parameter); @Override SetIterable reject(Predicate predicate); @Override

SetIterable rejectWith(Predicate2 predicate, P parameter); @Override PartitionUnsortedSet partition(Predicate predicate); @Override

PartitionUnsortedSet partitionWith(Predicate2 predicate, P parameter); @Override SetIterable selectInstancesOf(Class clazz); /** * @deprecated in 8.0. Use {@link OrderedIterable#zip(Iterable)} instead. */ @Override @Deprecated SetIterable> zip(Iterable that); /** * @deprecated in 8.0. Use {@link OrderedIterable#zipWithIndex()} instead. */ @Override @Deprecated SetIterable> zipWithIndex(); @Override SetMultimap groupBy(Function function); @Override SetMultimap groupByEach(Function> function); @Override BiMap groupByUniqueKey(Function function); } ImmutableBiMap.java000066400000000000000000000161011407344533200371640ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/bimap/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.bimap; import java.util.Map; import org.eclipse.collections.api.bag.ImmutableBagIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.factory.BiMaps; import org.eclipse.collections.api.factory.Maps; import org.eclipse.collections.api.map.ImmutableMap; import org.eclipse.collections.api.map.ImmutableMapIterable; import org.eclipse.collections.api.map.MapIterable; import org.eclipse.collections.api.map.MutableMap; import org.eclipse.collections.api.multimap.set.ImmutableSetMultimap; import org.eclipse.collections.api.ordered.OrderedIterable; import org.eclipse.collections.api.partition.set.PartitionImmutableSet; import org.eclipse.collections.api.set.ImmutableSet; import org.eclipse.collections.api.tuple.Pair; /** * A {@link BiMap} whose contents cannot be altered after initialization. * * @since 4.2 */ public interface ImmutableBiMap extends BiMap, ImmutableMapIterable { @Override ImmutableBiMap newWithKeyValue(K key, V value); @Override ImmutableBiMap newWithAllKeyValues(Iterable> keyValues); @Override ImmutableBiMap newWithMap(Map map); @Override ImmutableBiMap newWithMapIterable(MapIterable mapIterable); @Override ImmutableBiMap newWithAllKeyValueArguments(Pair... keyValuePairs); @Override ImmutableBiMap newWithoutKey(K key); @Override ImmutableBiMap newWithoutAllKeys(Iterable keys); @Override ImmutableBiMap inverse(); @Override ImmutableSetMultimap flip(); @Override ImmutableBiMap flipUniqueValues(); @Override ImmutableBiMap tap(Procedure procedure); @Override ImmutableBiMap select(Predicate2 predicate); @Override ImmutableBiMap reject(Predicate2 predicate); @Override ImmutableBiMap collect(Function2> function); @Override ImmutableBiMap collectValues(Function2 function); @Override ImmutableSet select(Predicate predicate); @Override

ImmutableSet selectWith(Predicate2 predicate, P parameter); @Override ImmutableSet reject(Predicate predicate); @Override

ImmutableSet rejectWith(Predicate2 predicate, P parameter); @Override PartitionImmutableSet partition(Predicate predicate); @Override

PartitionImmutableSet partitionWith(Predicate2 predicate, P parameter); @Override ImmutableSet selectInstancesOf(Class clazz); @Override ImmutableBagIterable collect(Function function); @Override ImmutableBagIterable collectWith(Function2 function, P parameter); @Override ImmutableBagIterable collectIf(Predicate predicate, Function function); @Override ImmutableBagIterable flatCollect(Function> function); /** * @since 9.2 */ @Override default ImmutableBagIterable flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override ImmutableSetMultimap groupBy(Function function); @Override ImmutableSetMultimap groupByEach(Function> function); @Override default ImmutableBiMap groupByUniqueKey(Function function) { MutableBiMap target = BiMaps.mutable.empty(); return this.groupByUniqueKey(function, target).toImmutable(); } /** * @since 11.0 */ @Override default ImmutableMap aggregateInPlaceBy( Function groupBy, Function0 zeroValueFactory, Procedure2 mutatingAggregator) { MutableMap map = Maps.mutable.empty(); this.forEach(each -> { KK key = groupBy.valueOf(each); VV value = map.getIfAbsentPut(key, zeroValueFactory); mutatingAggregator.value(value, each); }); return map.toImmutable(); } /** * @since 11.0 */ @Override default ImmutableMap aggregateBy( Function groupBy, Function0 zeroValueFactory, Function2 nonMutatingAggregator) { MutableMap map = this.aggregateBy( groupBy, zeroValueFactory, nonMutatingAggregator, Maps.mutable.empty()); return map.toImmutable(); } /** * @since 11.0 */ @Override default ImmutableMap aggregateBy( Function keyFunction, Function valueFunction, Function0 zeroValueFactory, Function2 nonMutatingAggregator) { MutableMap map = Maps.mutable.empty(); this.forEachKeyValue((key, value) -> map.updateValueWith( keyFunction.valueOf(key), zeroValueFactory, nonMutatingAggregator, valueFunction.valueOf(value))); return map.toImmutable(); } /** * @deprecated in 8.0. Use {@link OrderedIterable#zip(Iterable)} instead. */ @Override @Deprecated ImmutableSet> zip(Iterable that); /** * @deprecated in 8.0. Use {@link OrderedIterable#zipWithIndex()} instead. */ @Override @Deprecated ImmutableSet> zipWithIndex(); } MutableBiMap.java000066400000000000000000000142171407344533200366440ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/bimap/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.bimap; import java.util.Map; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.factory.BiMaps; import org.eclipse.collections.api.factory.Maps; import org.eclipse.collections.api.map.MapIterable; import org.eclipse.collections.api.map.MutableMap; import org.eclipse.collections.api.map.MutableMapIterable; import org.eclipse.collections.api.multimap.set.MutableSetMultimap; import org.eclipse.collections.api.ordered.OrderedIterable; import org.eclipse.collections.api.partition.set.PartitionMutableSet; import org.eclipse.collections.api.set.MutableSet; import org.eclipse.collections.api.tuple.Pair; /** * A {@link BiMap} whose contents can be altered after initialization. * * @since 4.2 */ public interface MutableBiMap extends BiMap, MutableMapIterable, Cloneable { @Override MutableBiMap newEmpty(); @Override MutableBiMap inverse(); @Override MutableBiMap flipUniqueValues(); @Override MutableSetMultimap flip(); /** * Similar to {@link Map#put(Object, Object)}, except that it throws on the addition of a duplicate value. * * @throws IllegalArgumentException if the value already exists in the bimap. */ @Override V put(K key, V value); /** * Similar to {@link #put(Object, Object)}, except that it quietly removes any existing entry with the same * value before putting the key-value pair. */ V forcePut(K key, V value); @Override MutableBiMap asSynchronized(); @Override MutableBiMap asUnmodifiable(); MutableBiMap clone(); @Override MutableBiMap tap(Procedure procedure); @Override MutableBiMap select(Predicate2 predicate); @Override MutableBiMap reject(Predicate2 predicate); @Override MutableBiMap collect(Function2> function); @Override MutableBiMap collectValues(Function2 function); @Override MutableSet select(Predicate predicate); @Override

MutableSet selectWith(Predicate2 predicate, P parameter); @Override MutableSet reject(Predicate predicate); @Override

MutableSet rejectWith(Predicate2 predicate, P parameter); @Override PartitionMutableSet partition(Predicate predicate); @Override

PartitionMutableSet partitionWith(Predicate2 predicate, P parameter); @Override MutableSet selectInstancesOf(Class clazz); /** * @deprecated in 8.0. Use {@link OrderedIterable#zip(Iterable)} instead. */ @Override @Deprecated MutableSet> zip(Iterable that); /** * @deprecated in 8.0. Use {@link OrderedIterable#zipWithIndex()} instead. */ @Override @Deprecated MutableSet> zipWithIndex(); @Override MutableSetMultimap groupBy(Function function); @Override MutableSetMultimap groupByEach(Function> function); @Override default MutableBiMap groupByUniqueKey(Function function) { return this.groupByUniqueKey(function, BiMaps.mutable.empty()); } /** * @since 11.0 */ @Override default MutableMap aggregateBy( Function groupBy, Function0 zeroValueFactory, Function2 nonMutatingAggregator) { return this.aggregateBy( groupBy, zeroValueFactory, nonMutatingAggregator, Maps.mutable.empty()); } /** * @since 11.0 */ @Override default MutableMap aggregateBy( Function keyFunction, Function valueFunction, Function0 zeroValueFactory, Function2 nonMutatingAggregator) { MutableMap map = Maps.mutable.empty(); this.forEachKeyValue((key, value) -> map.updateValueWith( keyFunction.valueOf(key), zeroValueFactory, nonMutatingAggregator, valueFunction.valueOf(value))); return map; } @Override MutableBiMap withKeyValue(K key, V value); @Override default MutableBiMap withMap(Map map) { this.putAll(map); return this; } @Override default MutableBiMap withMapIterable(MapIterable mapIterable) { this.putAllMapIterable(mapIterable); return this; } @Override MutableBiMap withAllKeyValues(Iterable> keyValues); @Override MutableBiMap withAllKeyValueArguments(Pair... keyValuePairs); @Override MutableBiMap withoutKey(K key); @Override MutableBiMap withoutAllKeys(Iterable keys); } package-info.java000066400000000000000000000023271407344533200366650ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/bimap/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for BiMap API. *

* A BiMap is a map that allows users to look up key-value pairs from either direction. Uniqueness is enforced on both the keys and values. *

* This package contains 3 interfaces: *

    *
  • * {@link org.eclipse.collections.api.bimap.BiMap} - contains the common API for Mutable and Immutable BiMap. *
  • *
  • * {@link org.eclipse.collections.api.bimap.MutableBiMap} - a BiMap whose contents can be altered after initialization. *
  • *
  • * {@link org.eclipse.collections.api.bimap.ImmutableBiMap} - a BiMap whose contents cannot be altered after initialization. *
  • *
*/ package org.eclipse.collections.api.bimap; block/000077500000000000000000000000001407344533200334745ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/apiHashingStrategy.java000066400000000000000000000020571407344533200374470ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/block/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.block; import java.io.Serializable; /** * Interface for supporting user defined hashing strategies in Sets and Maps */ public interface HashingStrategy extends Serializable { /** * Computes the hashCode of the object as defined by the user. */ int computeHashCode(E object); /** * Checks two objects for equality. The equality check can use the objects own equals() method or * a custom method defined by the user. It should be consistent with the computeHashCode() method. */ boolean equals(E object1, E object2); } SerializableComparator.java000066400000000000000000000012441407344533200407760ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/block/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.block; import java.io.Serializable; import java.util.Comparator; @FunctionalInterface public interface SerializableComparator extends Comparator, Serializable { } function/000077500000000000000000000000001407344533200353215ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/blockFunction.java000066400000000000000000000020511407344533200377470ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/block/function/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.block.function; import java.io.Serializable; /** * Function is a one-argument lambda which performs a transformation on the object of type {@code T} * passed to the valueOf() method. This transformation can return the value of calling a getter, or perform * some more elaborate logic to calculate a value, of type {@code V}. */ @FunctionalInterface public interface Function extends java.util.function.Function, Serializable { V valueOf(T each); @Override default V apply(T each) { return this.valueOf(each); } } Function0.java000066400000000000000000000016251407344533200400350ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/block/function/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.block.function; import java.io.Serializable; import java.util.function.Supplier; /** * Function0 is a zero argument lambda. It can be stored in a variable or passed as a parameter and executed * by calling the value method. */ @FunctionalInterface public interface Function0 extends Supplier, Serializable { R value(); @Override default R get() { return this.value(); } } Function2.java000066400000000000000000000023611407344533200400350ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/block/function/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.block.function; import java.io.Serializable; import java.util.function.BiFunction; /** * Function2 is a two argument lambda which takes two arguments and returns a result of a transformation. * * A Function2 is used by RichIterable.injectInto() and RichIterable.collectWith() methods. See documentation of these * methods for more details. * * @since 1.0 * @see org.eclipse.collections.api.RichIterable#injectInto * @see org.eclipse.collections.api.RichIterable#collectWith */ @FunctionalInterface public interface Function2 extends BiFunction, Serializable { R value(T1 argument1, T2 argument2); @Override default R apply(T1 argument1, T2 argument2) { return this.value(argument1, argument2); } } Function3.java000066400000000000000000000017531407344533200400420ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/block/function/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.block.function; import java.io.Serializable; /** * Function3 is a three argument Lambda which takes three arguments and returns a result of a transformation. * * A Function3 is used by injectIntoWith() methods. See documentation of such methods for more details. * * @see org.eclipse.collections.api.collection.MutableCollection#injectIntoWith */ @FunctionalInterface public interface Function3 extends Serializable { R value(T1 argument1, T2 argument2, T3 argument3); } package-info.java000066400000000000000000000012501407344533200405060ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/block/function/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for Function API. *

* A Function is a lambda which performs a transformation on the object that is passed to it. */ package org.eclipse.collections.api.block.function; primitive/000077500000000000000000000000001407344533200373315ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/block/functionpackage-info.java000066400000000000000000000013111407344533200425140ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/block/function/primitive/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains API for primitive functions. *

* These primitive function blocks exist to avoid the overhead of autoboxing in places where primitives can be used. */ package org.eclipse.collections.api.block.function.primitive; package-info.java000066400000000000000000000016761407344533200366750ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/block/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for Block API. *

* This package contains 2 interfaces: *

    *
  • * {@link org.eclipse.collections.api.block.HashingStrategy} - an interface for supporting user defined hashing strategies in Sets and Maps. *
  • *
  • * {@link org.eclipse.collections.api.block.SerializableComparator} - a marker interface for serializable Comparators. *
  • *
*/ package org.eclipse.collections.api.block; predicate/000077500000000000000000000000001407344533200354345ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/blockPredicate.java000066400000000000000000000020121407344533200401720ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/block/predicate/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.block.predicate; import java.io.Serializable; /** * A Predicate is a lambda or closure with a boolean result. The method accept should be implemented to indicate the object * passed to the method meets the criteria of this Predicate. A Predicate is also known as a Discriminator or Filter. */ @FunctionalInterface public interface Predicate extends java.util.function.Predicate, Serializable { boolean accept(T each); @Override default boolean test(T each) { return this.accept(each); } } Predicate2.java000066400000000000000000000021241407344533200402600ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/block/predicate/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.block.predicate; import java.io.Serializable; import java.util.function.BiPredicate; /** * A Predicate2 is primarily used in methods like selectWith, detectWith, rejectWith. The first argument * is the element of the collection being iterated over, and the second argument is a parameter passed into * the predicate from the calling method. */ @FunctionalInterface public interface Predicate2 extends BiPredicate, Serializable { boolean accept(T1 argument1, T2 argument2); @Override default boolean test(T1 t1, T2 t2) { return this.accept(t1, t2); } } package-info.java000066400000000000000000000020511407344533200406210ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/block/predicate/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for Predicate API. *

* A Predicate is a lambda with a boolean result. *

* This package contains 2 interfaces. *

    *
  • * {@link org.eclipse.collections.api.block.predicate.Predicate} - a lambda with a boolean result. *
  • *
  • * {@link org.eclipse.collections.api.block.predicate.Predicate2} - a two argument Predicate. Primarily used in methods like selectWith, detectWith, rejectWith. *
  • *
*/ package org.eclipse.collections.api.block.predicate; primitive/000077500000000000000000000000001407344533200374445ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/block/predicatepackage-info.java000066400000000000000000000013411407344533200426320ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/block/predicate/primitive/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains API for primitive predicates. *

* A primitive predicate is a lambda which returns a boolean. It reduces the overhead of autoboxing where primitives can be directly used. */ package org.eclipse.collections.api.block.predicate.primitive; procedure/000077500000000000000000000000001407344533200354645ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/blockObjectIntProcedure.java000066400000000000000000000017431407344533200420660ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/block/procedure/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.block.procedure; /** * A ObjectIntProcedure is a single argument Closure which has no return argument and takes an int as a second argument * which is usually the index of the current element of a collection. * * @deprecated since 3.0 use {@link org.eclipse.collections.api.block.procedure.primitive.ObjectIntProcedure} instead. */ @FunctionalInterface @Deprecated public interface ObjectIntProcedure extends org.eclipse.collections.api.block.procedure.primitive.ObjectIntProcedure { } Procedure.java000066400000000000000000000015441407344533200402630ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/block/procedure/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.block.procedure; import java.io.Serializable; import java.util.function.Consumer; /** * A Procedure is a single argument lambda which has no return argument. */ @FunctionalInterface public interface Procedure extends Consumer, Serializable { void value(T each); @Override default void accept(T each) { this.value(each); } } Procedure2.java000066400000000000000000000023141407344533200403410ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/block/procedure/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.block.procedure; import java.io.Serializable; import java.util.function.BiConsumer; /** * A Procedure2 is used by forEachWith() methods and for MapIterate.forEachKeyValue(). In the forEachKeyValue() * case the procedure takes the key as the first argument, and the value as the second. In the forEachWith() case * the procedure takes the the element of the collection as the first argument, and the specified parameter as the * second argument. */ @FunctionalInterface public interface Procedure2 extends BiConsumer, Serializable { void value(T1 argument1, T2 argument2); @Override default void accept(T1 argument1, T2 argument2) { this.value(argument1, argument2); } } package-info.java000066400000000000000000000021441407344533200406540ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/block/procedure/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for Procedure API. *

* A Procedure is a single argument lambda which has no return argument. *

* This package contains the following interfaces: *

    *
  • * {@link org.eclipse.collections.api.block.procedure.Procedure} - a single argument lambda which has no return argument. *
  • *
  • * {@link org.eclipse.collections.api.block.procedure.Procedure2} - a two argument Procedure. Used by forEachWith() methods and for MapIterate.forEachKeyValue(). *
  • *
*/ package org.eclipse.collections.api.block.procedure; primitive/000077500000000000000000000000001407344533200374745ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/block/procedurepackage-info.java000066400000000000000000000014151407344533200426640ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/block/procedure/primitive/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains API for PrimitivePrimitiveProcedure, PrimitiveObjectProcedure, ObjectPrimitiveProcedure. *

* These primitive procedures are lambdas or closures with no return argument and and accept primitive or object arguments. */ package org.eclipse.collections.api.block.procedure.primitive; collection/000077500000000000000000000000001407344533200345355ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/apiFixedSizeCollection.java000066400000000000000000000142051407344533200413100ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/collection/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.collection; import java.util.Collection; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; /** * A FixedSizeCollection is a collection that may be mutated, but cannot grow or shrink in size. It is up to * the underlying implementation to decide which mutations are allowable. */ public interface FixedSizeCollection extends MutableCollection { /** * This method allows fixed size collections the ability to add elements to their existing elements. A new instance * of {@link MutableCollection} is returned containing the elements of the original collection with the new element * {@link #add(Object) added}. Implementations will return a new FixedSizeCollection where possible. In order to * use this method properly with mutable and fixed size collections the following approach must be taken: * *

     * MutableCollection<String> list;
     * list = list.with("1");
     * list = list.with("2");
     * return list;
     * 
* * @see #add(Object) */ @Override MutableCollection with(T element); /** * This method allows fixed size collections the ability to remove elements from their existing elements. A new * instance of {@link MutableCollection} is returned containing the elements of the original collection with the * element {@link #remove(Object) removed}. Implementations will return a new FixedSizeCollection where possible. * In order to use this method properly with mutable and fixed size collections the following approach must be * taken: * *
     * MutableCollection<String> list;
     * list = list.without("1");
     * list = list.without("2");
     * return list;
     * 
* * @see #remove(Object) */ @Override MutableCollection without(T element); /** * This method allows fixed size collections the ability to add multiple elements to their existing elements. A new * instance of {@link MutableCollection} is returned containing the elements of the original collection with all of * the new elements {@link #addAll(Collection) added}. Implementations will return a new FixedSizeCollection where * possible. In order to use this method properly with mutable and fixed size collections the following approach * must be taken: * *
     * MutableCollection<String> list;
     * list = list.withAll(FastList.newListWith("1", "2"));
     * return list;
     * 
* * @see #addAll(Collection) */ @Override MutableCollection withAll(Iterable elements); /** * This method allows fixed size collections the ability to remove multiple elements from their existing elements. * A new instance of {@link MutableCollection} is returned containing the elements of the original collection with * the given elements {@link #removeAll(Collection) removed}. Implementations will return a new FixedSizeCollection * where possible. In order to use this method properly with mutable and fixed size collections the following * approach must be taken: * *
     * MutableCollection<String> list;
     * list = list.withoutAll(FastList.newListWith("1", "2"));
     * return list;
     * 
* * @see #removeAll(Collection) */ @Override MutableCollection withoutAll(Iterable elements); /** * @throws UnsupportedOperationException the {@code add} operation is not supported by this collection. */ @Override boolean add(T t); /** * @throws UnsupportedOperationException the {@code addAllIterable} operation is not supported by this collection. */ @Override boolean addAllIterable(Iterable iterable); /** * @throws UnsupportedOperationException the {@code addAll} operation is not supported by this collection. */ @Override boolean addAll(Collection collection); /** * @throws UnsupportedOperationException the {@code remove} operation is not supported by this collection. */ @Override boolean remove(Object o); /** * @throws UnsupportedOperationException the {@code removeAll} method is not supported by this collection. */ @Override boolean removeAll(Collection collection); /** * @throws UnsupportedOperationException the {@code removeAllIterable} method is not supported by this collection. */ @Override boolean removeAllIterable(Iterable iterable); /** * @throws UnsupportedOperationException the {@code removeIf} method is not supported by this collection. */ @Override boolean removeIf(Predicate predicate); /** * @throws UnsupportedOperationException the {@code removeIfWith} method is not supported by this collection. */ @Override

boolean removeIfWith(Predicate2 predicate, P parameter); /** * @throws UnsupportedOperationException the {@code retainAll} method is not supported by this collection. */ @Override boolean retainAll(Collection collection); /** * @throws UnsupportedOperationException the {@code retainAllIterable} method is not supported by this collection. */ @Override boolean retainAllIterable(Iterable iterable); /** * @throws UnsupportedOperationException the {@code clear} method is not supported by this collection. */ @Override void clear(); @Override FixedSizeCollection tap(Procedure procedure); } ImmutableCollection.java000066400000000000000000000240111407344533200413310ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/collection/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.collection; import java.util.Collection; import java.util.Spliterator; import java.util.Spliterators; import java.util.stream.Stream; import java.util.stream.StreamSupport; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.bag.ImmutableBag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.collection.primitive.ImmutableBooleanCollection; import org.eclipse.collections.api.collection.primitive.ImmutableByteCollection; import org.eclipse.collections.api.collection.primitive.ImmutableCharCollection; import org.eclipse.collections.api.collection.primitive.ImmutableDoubleCollection; import org.eclipse.collections.api.collection.primitive.ImmutableFloatCollection; import org.eclipse.collections.api.collection.primitive.ImmutableIntCollection; import org.eclipse.collections.api.collection.primitive.ImmutableLongCollection; import org.eclipse.collections.api.collection.primitive.ImmutableShortCollection; import org.eclipse.collections.api.factory.Maps; import org.eclipse.collections.api.map.ImmutableMap; import org.eclipse.collections.api.map.MutableMap; import org.eclipse.collections.api.map.primitive.ImmutableObjectDoubleMap; import org.eclipse.collections.api.map.primitive.ImmutableObjectLongMap; import org.eclipse.collections.api.multimap.ImmutableMultimap; import org.eclipse.collections.api.partition.PartitionImmutableCollection; import org.eclipse.collections.api.tuple.Pair; /** * ImmutableCollection is the common interface between ImmutableList, ImmutableSet and ImmutableBag. * The ImmutableCollection interface is "contractually immutable" in that it does not have any mutating * methods available on the public interface. */ public interface ImmutableCollection extends RichIterable { /** * This method is similar to the {@code with} method in {@code MutableCollection} * with the difference that a new copy of this collection with the element appended will be returned. */ ImmutableCollection newWith(T element); /** * This method is similar to the {@code without} method in {@code MutableCollection} * with the difference that a new copy of this collection with the element removed will be returned. */ ImmutableCollection newWithout(T element); /** * This method is similar to the {@code withAll} method in {@code MutableCollection} * with the difference that a new copy of this collection with the elements appended will be returned. */ ImmutableCollection newWithAll(Iterable elements); /** * This method is similar to the {@code withoutAll} method in {@code MutableCollection} * with the difference that a new copy of this collection with the elements removed will be returned. */ ImmutableCollection newWithoutAll(Iterable elements); @Override ImmutableCollection tap(Procedure procedure); @Override ImmutableCollection select(Predicate predicate); @Override

ImmutableCollection selectWith(Predicate2 predicate, P parameter); @Override ImmutableCollection reject(Predicate predicate); @Override

ImmutableCollection rejectWith(Predicate2 predicate, P parameter); @Override PartitionImmutableCollection partition(Predicate predicate); @Override

PartitionImmutableCollection partitionWith(Predicate2 predicate, P parameter); @Override ImmutableCollection selectInstancesOf(Class clazz); @Override ImmutableCollection collect(Function function); @Override ImmutableBooleanCollection collectBoolean(BooleanFunction booleanFunction); @Override ImmutableByteCollection collectByte(ByteFunction byteFunction); @Override ImmutableCharCollection collectChar(CharFunction charFunction); @Override ImmutableDoubleCollection collectDouble(DoubleFunction doubleFunction); @Override ImmutableFloatCollection collectFloat(FloatFunction floatFunction); @Override ImmutableIntCollection collectInt(IntFunction intFunction); @Override ImmutableLongCollection collectLong(LongFunction longFunction); @Override ImmutableShortCollection collectShort(ShortFunction shortFunction); @Override ImmutableCollection collectWith(Function2 function, P parameter); @Override ImmutableCollection collectIf(Predicate predicate, Function function); @Override ImmutableCollection flatCollect(Function> function); /** * @since 9.2 */ @Override default ImmutableCollection flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override ImmutableObjectLongMap sumByInt(Function groupBy, IntFunction function); @Override ImmutableObjectDoubleMap sumByFloat(Function groupBy, FloatFunction function); @Override ImmutableObjectLongMap sumByLong(Function groupBy, LongFunction function); @Override ImmutableObjectDoubleMap sumByDouble(Function groupBy, DoubleFunction function); /** * @since 9.0 */ @Override default ImmutableBag countBy(Function function) { return this.asLazy().collect(function).toBag().toImmutable(); } /** * @since 9.0 */ @Override default ImmutableBag countByWith(Function2 function, P parameter) { return this.asLazy().collectWith(function, parameter).toBag().toImmutable(); } /** * @since 10.0.0 */ @Override default ImmutableBag countByEach(Function> function) { return this.asLazy().flatCollect(function).toBag().toImmutable(); } @Override ImmutableMultimap groupBy(Function function); @Override ImmutableMultimap groupByEach(Function> function); @Override default ImmutableMap groupByUniqueKey(Function function) { MutableMap target = Maps.mutable.withInitialCapacity(this.size()); return this.groupByUniqueKey(function, target).toImmutable(); } @Override ImmutableCollection> zip(Iterable that); @Override ImmutableCollection> zipWithIndex(); @Override default ImmutableMap aggregateInPlaceBy( Function groupBy, Function0 zeroValueFactory, Procedure2 mutatingAggregator) { MutableMap map = Maps.mutable.empty(); this.forEach(each -> { K key = groupBy.valueOf(each); V value = map.getIfAbsentPut(key, zeroValueFactory); mutatingAggregator.value(value, each); }); return map.toImmutable(); } @Override default ImmutableMap aggregateBy( Function groupBy, Function0 zeroValueFactory, Function2 nonMutatingAggregator) { MutableMap map = this.aggregateBy( groupBy, zeroValueFactory, nonMutatingAggregator, Maps.mutable.empty()); return map.toImmutable(); } /** * @since 9.0 */ default Stream stream() { return StreamSupport.stream(this.spliterator(), false); } /** * @since 9.0 */ default Stream parallelStream() { return StreamSupport.stream(this.spliterator(), true); } /** * @since 9.0 */ @Override default Spliterator spliterator() { return Spliterators.spliterator(this.iterator(), (long) this.size(), 0); } /** * This can be overridden in most implementations to just return this. * * @since 9.0 */ Collection castToCollection(); } MutableCollection.java000066400000000000000000000567721407344533200410260ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/collection/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.collection; import java.util.Collection; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.bag.MutableBag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.Function3; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.collection.primitive.MutableBooleanCollection; import org.eclipse.collections.api.collection.primitive.MutableByteCollection; import org.eclipse.collections.api.collection.primitive.MutableCharCollection; import org.eclipse.collections.api.collection.primitive.MutableDoubleCollection; import org.eclipse.collections.api.collection.primitive.MutableFloatCollection; import org.eclipse.collections.api.collection.primitive.MutableIntCollection; import org.eclipse.collections.api.collection.primitive.MutableLongCollection; import org.eclipse.collections.api.collection.primitive.MutableShortCollection; import org.eclipse.collections.api.factory.Maps; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.map.MutableMap; import org.eclipse.collections.api.map.primitive.MutableObjectDoubleMap; import org.eclipse.collections.api.map.primitive.MutableObjectLongMap; import org.eclipse.collections.api.multimap.MutableMultimap; import org.eclipse.collections.api.ordered.OrderedIterable; import org.eclipse.collections.api.partition.PartitionMutableCollection; import org.eclipse.collections.api.tuple.Pair; import org.eclipse.collections.api.tuple.Twin; /** * MutableCollection is an interface which extends the base java.util.Collection interface and adds several internal * iterator methods, from the Smalltalk Collection protocol. These include variations of forEach, select, reject, * detect, collect, injectInto, anySatisfy, allSatisfy. These include count, remove, partition, collectIf. The API also * includes converter methods to convert a MutableCollection to a List (toList), to a sorted List (toSortedList), to a * Set (toSet), and to a Map (toMap). *

* There are several extensions to MutableCollection, including MutableList, MutableSet, and MutableBag. */ public interface MutableCollection extends Collection, RichIterable { /** * This method allows mutable and fixed size collections the ability to add elements to their existing elements. * In order to support fixed size a new instance of a collection would have to be returned taking the elements of * the original collection and appending the new element to form the new collection. In the case of mutable * collections, the original collection is modified, and is returned. In order to use this method properly with * mutable and fixed size collections the following approach must be taken: * *

     * MutableCollection<String> list = list.with("1");
     * list = list.with("2");
     * return list;
     * 
* In the case of {@link FixedSizeCollection} a new instance of MutableCollection will be returned by with, and any * variables that previously referenced the original collection will need to be redirected to reference the * new instance. For other MutableCollection types you will replace the reference to collection with the same * collection, since the instance will return "this" after calling add on itself. * * @see #add(Object) */ MutableCollection with(T element); /** * This method allows mutable and fixed size collections the ability to remove elements from their existing elements. * In order to support fixed size a new instance of a collection would have to be returned containing the elements * that would be left from the original collection after calling remove. In the case of mutable collections, the * original collection is modified, and is returned. In order to use this method properly with mutable and fixed * size collections the following approach must be taken: * *
     * MutableCollection<String> list = list.without("1");
     * list = list.without("2");
     * return list;
     * 
* In the case of {@link FixedSizeCollection} a new instance of MutableCollection will be returned by without, and * any variables that previously referenced the original collection will need to be redirected to reference the * new instance. For other MutableCollection types you will replace the reference to collection with the same * collection, since the instance will return "this" after calling remove on itself. * * @see #remove(Object) */ MutableCollection without(T element); /** * This method allows mutable and fixed size collections the ability to add multiple elements to their existing * elements. In order to support fixed size a new instance of a collection would have to be returned taking the * elements of the original collection and appending the new elements to form the new collection. In the case of * mutable collections, the original collection is modified, and is returned. In order to use this method properly * with mutable and fixed size collections the following approach must be taken: * *
     * MutableCollection<String> list = list.withAll(FastList.newListWith("1", "2"));
     * 
* In the case of {@link FixedSizeCollection} a new instance of MutableCollection will be returned by withAll, and * any variables that previously referenced the original collection will need to be redirected to reference the * new instance. For other MutableCollection types you will replace the reference to collection with the same * collection, since the instance will return "this" after calling addAll on itself. * * @see #addAll(Collection) */ MutableCollection withAll(Iterable elements); /** * This method allows mutable and fixed size collections the ability to remove multiple elements from their existing * elements. In order to support fixed size a new instance of a collection would have to be returned containing the * elements that would be left from the original collection after calling removeAll. In the case of mutable * collections, the original collection is modified, and is returned. In order to use this method properly with * mutable and fixed size collections the following approach must be taken: * *
     * MutableCollection<String> list = list.withoutAll(FastList.newListWith("1", "2"));
     * 
* In the case of {@link FixedSizeCollection} a new instance of MutableCollection will be returned by withoutAll, * and any variables that previously referenced the original collection will need to be redirected to reference the * new instance. For other MutableCollection types you will replace the reference to collection with the same * collection, since the instance will return "this" after calling removeAll on itself. * * @see #removeAll(Collection) */ MutableCollection withoutAll(Iterable elements); /** * Creates a new empty mutable version of the same collection type. For example, if this instance is a FastList, * this method will return a new empty FastList. If the class of this instance is immutable or fixed size (i.e. * SingletonList) then a mutable alternative to the class will be provided. */ MutableCollection newEmpty(); @Override MutableCollection tap(Procedure procedure); /** * Returns a MutableCollection with all elements that evaluate to true for the specified predicate. * *
     * MutableCollection<Integer> livesInLondon =
     *     people.select(person -> person.getAddress().getCity().equals("London"));
     * 
*/ @Override MutableCollection select(Predicate predicate); /** * Returns a MutableCollection with all elements that evaluate to true for the specified predicate2 and parameter. * *
     * MutableCollection<Integer> fives =
     *     integers.selectWith(Predicates2.equal(), Integer.valueOf(5));
     * 
*/ @Override

MutableCollection selectWith(Predicate2 predicate, P parameter); /** * Returns a MutableCollection with all elements that evaluate to false for the specified predicate. * *

     * MutableCollection<Person> notSmiths =
     *     people.reject(person -> person.person.getLastName().equals("Smith"));
     * 
* Using the {@code Predicates} factory: * *
     * MutableCollection<Person> notSmiths = people.reject(Predicates.attributeEqual("lastName", "Smith"));
     * 
*/ @Override MutableCollection reject(Predicate predicate); /** * Returns a MutableCollection with all elements that evaluate to false for the specified predicate2 and parameter. * *
e.g.
     * MutableCollection<Integer> selected =
     *     integers.rejectWith(Predicates2.equal(), Integer.valueOf(5));
     * 
*/ @Override

MutableCollection rejectWith(Predicate2 predicate, P parameter); /** * Filters a collection into two separate collections based on a predicate returned via a Pair. * *

e.g.
     * return lastNames.selectAndRejectWith(Predicates2.lessThan(), "Mason");
     * 
* * @deprecated since 6.0 use {@link RichIterable#partitionWith(Predicate2, Object)} instead. */ @Deprecated

Twin> selectAndRejectWith(Predicate2 predicate, P parameter); /** * {@inheritDoc} * Co-variant example for MutableCollection: *

     * PartitionMutableCollection<Person> newYorkersAndNonNewYorkers =
     *     people.partition(person -> person.getAddress().getState().getName().equals("New York"));
     * 
*/ @Override PartitionMutableCollection partition(Predicate predicate); /** * {@inheritDoc} * Co-variant example for MutableCollection: *
     * PartitionMutableCollection<Person> newYorkersAndNonNewYorkers =
     *     people.partitionWith((Person person, String state) -> person.getAddress().getState().getName().equals(state), "New York");
     * 
*/ @Override

PartitionMutableCollection partitionWith(Predicate2 predicate, P parameter); /** * {@inheritDoc} * Co-variant example for MutableCollection: *

     * MutableCollection<Integer> integers =
     *     List.mutable.with(new Integer(0), new Long(0L), new Double(0.0)).selectInstancesOf(Integer.class);
     * 
* * @since 2.0 */ @Override MutableCollection selectInstancesOf(Class clazz); /** * Removes all elements in the collection that evaluate to true for the specified predicate. * *
e.g.
     * return lastNames.removeIf(Predicates.isNull());
     * 
*/ boolean removeIf(Predicate predicate); /** * Removes all elements in the collection that evaluate to true for the specified predicate2 and parameter. * *
     * return lastNames.removeIfWith(Predicates2.isNull(), null);
     * 
*/

boolean removeIfWith(Predicate2 predicate, P parameter); /** * Returns a new MutableCollection with the results of applying the specified function to each element of the source * collection. * *

     * MutableCollection<String> names =
     *     people.collect(person -> person.getFirstName() + " " + person.getLastName());
     * 
*/ @Override MutableCollection collect(Function function); /** * {@inheritDoc} * Co-variant example for MutableCollection: *
     * MutableBooleanCollection licenses =
     *     people.collectBoolean(person -> person.hasDrivingLicense());
     * 
*/ @Override MutableBooleanCollection collectBoolean(BooleanFunction booleanFunction); /** * {@inheritDoc} * Co-variant example for MutableCollection: *
     * MutableByteCollection bytes =
     *     people.collectByte(person -> person.getCode());
     * 
*/ @Override MutableByteCollection collectByte(ByteFunction byteFunction); /** * {@inheritDoc} * Co-variant example for MutableCollection: *
     * MutableCharCollection chars =
     *     people.collectChar(person -> person.getMiddleInitial());
     * 
*/ @Override MutableCharCollection collectChar(CharFunction charFunction); /** * {@inheritDoc} * Co-variant example for MutableCollection: *
     * MutableDoubleCollection doubles =
     *     people.collectDouble(person -> person.getMilesFromNorthPole());
     * 
*/ @Override MutableDoubleCollection collectDouble(DoubleFunction doubleFunction); /** * {@inheritDoc} * Co-variant example for MutableCollection: *
     * MutableFloatCollection floats =
     *     people.collectFloat(person -> person.getHeightInInches());
     * 
*/ @Override MutableFloatCollection collectFloat(FloatFunction floatFunction); /** * {@inheritDoc} * Co-variant example for MutableCollection: *
     * MutableIntCollection ints =
     *     people.collectInt(person -> person.getAge());
     * 
*/ @Override MutableIntCollection collectInt(IntFunction intFunction); /** * {@inheritDoc} * Co-variant example for MutableCollection: *
     * MutableLongCollection longs =
     *     people.collectLong(person -> person.getGuid());
     * 
*/ @Override MutableLongCollection collectLong(LongFunction longFunction); /** * {@inheritDoc} * Co-variant example for MutableCollection: *
     * MutableShortCollection shorts =
     *     people.collectShort(person -> person.getNumberOfJunkMailItemsReceivedPerMonth());
     * 
*/ @Override MutableShortCollection collectShort(ShortFunction shortFunction); /** * {@inheritDoc} * Co-variant example for MutableCollection: *
     * MutableCollection<Integer> integers =
     *     Lists.mutable.with(1, 2, 3).collectWith((each, parameter) -> each + parameter, Integer.valueOf(1));
     * 
*/ @Override MutableCollection collectWith(Function2 function, P parameter); /** * Returns a new MutableCollection with the results of applying the specified function to each element of the source * collection, but only for elements that evaluate to true for the specified predicate. * *
     * MutableCollection<String> collected =
     *     Lists.mutable.of().with(1, 2, 3).collectIf(Predicates.notNull(), Functions.getToString())
     * 
*/ @Override MutableCollection collectIf(Predicate predicate, Function function); /** * {@inheritDoc} * Co-variant example for MutableCollection: *
     * Function<Person, List<Address>> addressFunction = Person::getAddresses;
     * MutableCollection<Person> people = ...;
     * MutableCollection<List<Address>> addresses = people.collect(addressFunction);
     * MutableCollection<Address> addresses = people.flatCollect(addressFunction);
     * 
* * @param function The {@link Function} to apply * @return a new flattened collection produced by applying the given {@code function} * @since 1.0 */ @Override MutableCollection flatCollect(Function> function); /** * @since 9.2 */ @Override default MutableCollection flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } /** * Returns the final result of evaluating function using each element of the iterable, the previous evaluation * result and the parameters. The injected value is used for the first parameter of the first evaluation, and the current * item in the iterable is used as the second parameter. The parameter value is always used as the third parameter * to the function call. * * @see #injectInto(Object, Function2) */ IV injectIntoWith( IV injectValue, Function3 function, P parameter); /** * Returns an unmodifiable view of this collection. This is the equivalent of using * {@code Collections.unmodifiableCollection(this)} with a return type that supports the full * iteration protocols available on {@code MutableCollection}. Methods which would * mutate the underlying collection will throw UnsupportedOperationExceptions. * * @return an unmodifiable view of this collection. * @see java.util.Collections#unmodifiableCollection(Collection) * @since 1.0 */ MutableCollection asUnmodifiable(); /** * Returns a synchronized wrapper backed by this collection. This is the equivalent of using * {@code Collections.synchronizedCollection(this)} only with a return type that supports the full * iteration protocols available on {@code MutableCollection}. * * The preferred way of iterating over a synchronized collection is to use the internal iteration * methods which are properly synchronized internally. * *
     *  MutableCollection synchedCollection = collection.asSynchronized();
     *     ...
     *  synchedCollection.forEach(each -> ... );
     *  synchedCollection.select(each -> ... );
     *  synchedCollection.collect(each -> ... );
     * 
* * If you want to iterate using an imperative style, you must protect external iterators using * a synchronized block. This includes explicit iterators as well as JDK 5 style for loops. *

* * @return a synchronized view of this collection. * @see java.util.Collections#synchronizedCollection(Collection) * @since 1.0 */ MutableCollection asSynchronized(); /** * Converts this {@code MutableCollection} to an {@code ImmutableCollection}. * * @since 1.0 */ ImmutableCollection toImmutable(); @Override MutableObjectLongMap sumByInt(Function groupBy, IntFunction function); @Override MutableObjectDoubleMap sumByFloat(Function groupBy, FloatFunction function); @Override MutableObjectLongMap sumByLong(Function groupBy, LongFunction function); @Override MutableObjectDoubleMap sumByDouble(Function groupBy, DoubleFunction function); /** * @since 9.0 */ @Override default MutableBag countBy(Function function) { return this.asLazy().collect(function).toBag(); } /** * @since 9.0 */ @Override default MutableBag countByWith(Function2 function, P parameter) { return this.asLazy().collectWith(function, parameter).toBag(); } /** * @since 10.0.0 */ @Override default MutableBag countByEach(Function> function) { return this.asLazy().flatCollect(function).toBag(); } /** * {@inheritDoc} * Co-variant example for MutableCollection: *

     * MutableMultimap<String, Person> peopleByLastName =
     *     people.groupBy(Person::getLastName);
     * 
*/ @Override MutableMultimap groupBy(Function function); @Override MutableMultimap groupByEach(Function> function); @Override default MutableMap groupByUniqueKey(Function function) { return this.groupByUniqueKey(function, Maps.mutable.withInitialCapacity(this.size())); } /** * @deprecated in 6.0. Use {@link OrderedIterable#zip(Iterable)} instead. */ @Override @Deprecated MutableCollection> zip(Iterable that); /** * @deprecated in 6.0. Use {@link OrderedIterable#zipWithIndex()} instead. */ @Override @Deprecated MutableCollection> zipWithIndex(); /** * @see #addAll(Collection) * @since 1.0 */ boolean addAllIterable(Iterable iterable); /** * @see #removeAll(Collection) * @since 1.0 */ boolean removeAllIterable(Iterable iterable); /** * @see #retainAll(Collection) * @since 1.0 */ boolean retainAllIterable(Iterable iterable); @Override default MutableMap aggregateInPlaceBy( Function groupBy, Function0 zeroValueFactory, Procedure2 mutatingAggregator) { MutableMap map = Maps.mutable.empty(); this.forEach(each -> { K key = groupBy.valueOf(each); V value = map.getIfAbsentPut(key, zeroValueFactory); mutatingAggregator.value(value, each); }); return map; } @Override default MutableMap aggregateBy( Function groupBy, Function0 zeroValueFactory, Function2 nonMutatingAggregator) { return this.aggregateBy( groupBy, zeroValueFactory, nonMutatingAggregator, Maps.mutable.empty()); } } package-info.java000066400000000000000000000013571407344533200377320ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/collection/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains {@link org.eclipse.collections.api.collection.FixedSizeCollection}, {@link org.eclipse.collections.api.collection.ImmutableCollection} and {@link org.eclipse.collections.api.collection.MutableCollection} API. */ package org.eclipse.collections.api.collection; primitive/000077500000000000000000000000001407344533200365455ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/collectionpackage-info.java000066400000000000000000000011301407344533200417270ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/collection/primitive/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains mutable and immutable primitive collection API. */ package org.eclipse.collections.api.collection.primitive; factory/000077500000000000000000000000001407344533200340515ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/apiBags.java000066400000000000000000000032221407344533200355670ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory; import org.eclipse.collections.api.factory.bag.ImmutableBagFactory; import org.eclipse.collections.api.factory.bag.MutableBagFactory; /** * This class should be used to create instances of MutableBag and ImmutableBag *

* Mutable Examples: * *

 * MutableBag<String> emptyBag = Bags.mutable.empty();
 * MutableBag<String> bagWith = Bags.mutable.with("a", "b", "c");
 * MutableBag<String> bagOf = Bags.mutable.of("a", "b", "c");
 * 
* * Immutable Examples: * *
 * ImmutableBag<String> emptyBag = Bags.immutable.empty();
 * ImmutableBag<String> bagWith = Bags.immutable.with("a", "b", "c");
 * ImmutableBag<String> bagOf = Bags.immutable.of("a", "b", "c");
 * 
*/ @SuppressWarnings("ConstantNamingConvention") public final class Bags { public static final ImmutableBagFactory immutable = ServiceLoaderUtils.loadServiceClass(ImmutableBagFactory.class); public static final MutableBagFactory mutable = ServiceLoaderUtils.loadServiceClass(MutableBagFactory.class); private Bags() { throw new AssertionError("Suppress default constructor for noninstantiability"); } } BiMaps.java000066400000000000000000000021161407344533200360670ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory; import org.eclipse.collections.api.factory.bimap.ImmutableBiMapFactory; import org.eclipse.collections.api.factory.bimap.MutableBiMapFactory; @SuppressWarnings("ConstantNamingConvention") public final class BiMaps { public static final ImmutableBiMapFactory immutable = ServiceLoaderUtils.loadServiceClass(ImmutableBiMapFactory.class); public static final MutableBiMapFactory mutable = ServiceLoaderUtils.loadServiceClass(MutableBiMapFactory.class); private BiMaps() { throw new AssertionError("Suppress default constructor for noninstantiability"); } } Lists.java000066400000000000000000000042611407344533200360150ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory; import org.eclipse.collections.api.factory.list.FixedSizeListFactory; import org.eclipse.collections.api.factory.list.ImmutableListFactory; import org.eclipse.collections.api.factory.list.MutableListFactory; /** * This class should be used to create instances of MutableList, ImmutableList and FixedSizeList *

* Mutable Examples: * *

 * MutableList<String> emptyList = Lists.mutable.empty();
 * MutableList<String> listWith = Lists.mutable.with("a", "b", "c");
 * MutableList<String> listOf = Lists.mutable.of("a", "b", "c");
 * 
* * Immutable Examples: * *
 * ImmutableList<String> emptyList = Lists.immutable.empty();
 * ImmutableList<String> listWith = Lists.immutable.with("a", "b", "c");
 * ImmutableList<String> listOf = Lists.immutable.of("a", "b", "c");
 * 
* * FixedSize Examples: * *
 * FixedSizeList<String> emptyList = Lists.fixedSize.empty();
 * FixedSizeList<String> listWith = Lists.fixedSize.with("a", "b", "c");
 * FixedSizeList<String> listOf = Lists.fixedSize.of("a", "b", "c");
 * 
*/ @SuppressWarnings("ConstantNamingConvention") public final class Lists { public static final ImmutableListFactory immutable = ServiceLoaderUtils.loadServiceClass(ImmutableListFactory.class); public static final MutableListFactory mutable = ServiceLoaderUtils.loadServiceClass(MutableListFactory.class); public static final FixedSizeListFactory fixedSize = ServiceLoaderUtils.loadServiceClass(FixedSizeListFactory.class); private Lists() { throw new AssertionError("Suppress default constructor for noninstantiability"); } } Maps.java000066400000000000000000000044031407344533200356150ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory; import org.eclipse.collections.api.factory.map.FixedSizeMapFactory; import org.eclipse.collections.api.factory.map.ImmutableMapFactory; import org.eclipse.collections.api.factory.map.MutableMapFactory; /** * This class should be used to create instances of MutableMap, ImmutableMap and FixedSizeMap *

* Mutable Examples: * *

 * MutableMap<String, String> emptyMap = Maps.mutable.empty();
 * MutableMap<String, String> mapWith = Maps.mutable.with("a", "A", "b", "B", "c", "C");
 * MutableMap<String, String> mapOf = Maps.mutable.of("a", "A", "b", "B", "c", "C");
 * 
* * Immutable Examples: * *
 * ImmutableMap<String, String> emptyMap = Maps.immutable.empty();
 * ImmutableMap<String, String> mapWith = Maps.immutable.with("a", "A", "b", "B", "c", "C");
 * ImmutableMap<String, String> mapOf = Maps.immutable.of("a", "A", "b", "B", "c", "C");
 * 
* * FixedSize Examples: * *
 * FixedSizeMap<String, String> emptyMap = Maps.fixedSize.empty();
 * FixedSizeMap<String, String> mapWith = Maps.fixedSize.with("a", "A", "b", "B", "c", "C");
 * FixedSizeMap<String, String> mapOf = Maps.fixedSize.of("a", "A", "b", "B", "c", "C");
 * 
*/ @SuppressWarnings("ConstantNamingConvention") public final class Maps { public static final ImmutableMapFactory immutable = ServiceLoaderUtils.loadServiceClass(ImmutableMapFactory.class); public static final FixedSizeMapFactory fixedSize = ServiceLoaderUtils.loadServiceClass(FixedSizeMapFactory.class); public static final MutableMapFactory mutable = ServiceLoaderUtils.loadServiceClass(MutableMapFactory.class); private Maps() { throw new AssertionError("Suppress default constructor for noninstantiability"); } } ServiceLoaderUtils.java000066400000000000000000000047161407344533200404740ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; import java.util.ArrayList; import java.util.List; import java.util.ServiceLoader; import java.util.stream.Collectors; final class ServiceLoaderUtils { private ServiceLoaderUtils() { throw new AssertionError("Suppress default constructor for noninstantiability"); } static T loadServiceClass(Class serviceClass) { List factories = new ArrayList<>(); for (T factory : ServiceLoader.load(serviceClass)) { factories.add(factory); } if (factories.isEmpty()) { String message = "Could not find any implementations of " + serviceClass.getSimpleName() + ". Check that eclipse-collections.jar is on the classpath and that its META-INF/services directory is intact."; return ServiceLoaderUtils.createProxyInstance(serviceClass, message); } if (factories.size() > 1) { String message = String.format( "Found multiple implementations of %s on the classpath. Check that there is only one copy of eclipse-collections.jar on the classpath. Found implementations: %s.", serviceClass.getSimpleName(), factories.stream() .map(T::getClass) .map(Class::getSimpleName) .collect(Collectors.joining(", "))); return ServiceLoaderUtils.createProxyInstance(serviceClass, message); } return factories.get(0); } private static T createProxyInstance(Class serviceClass, String message) { InvocationHandler handler = new ThrowingInvocationHandler(message); Object proxyInstance = Proxy.newProxyInstance( serviceClass.getClassLoader(), new Class[]{serviceClass}, handler); return serviceClass.cast(proxyInstance); } } Sets.java000066400000000000000000000042051407344533200356330ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory; import org.eclipse.collections.api.factory.set.FixedSizeSetFactory; import org.eclipse.collections.api.factory.set.ImmutableSetFactory; import org.eclipse.collections.api.factory.set.MutableSetFactory; /** * This class should be used to create instances of MutableSet, ImmutableSet and FixedSizeSet *

* Mutable Examples: * *

 * MutableSet<String> emptySet = Sets.mutable.empty();
 * MutableSet<String> setWith = Sets.mutable.with("a", "b", "c");
 * MutableSet<String> setOf = Sets.mutable.of("a", "b", "c");
 * 
* * Immutable Examples: * *
 * ImmutableSet<String> emptySet = Sets.immutable.empty();
 * ImmutableSet<String> setWith = Sets.immutable.with("a", "b", "c");
 * ImmutableSet<String> setOf = Sets.immutable.of("a", "b", "c");
 * 
* * FixedSize Examples: * *
 * FixedSizeSet<String> emptySet = Sets.fixedSize.empty();
 * FixedSizeSet<String> setWith = Sets.fixedSize.with("a", "b", "c");
 * FixedSizeSet<String> setOf = Sets.fixedSize.of("a", "b", "c");
 * 
*/ @SuppressWarnings("ConstantNamingConvention") public final class Sets { public static final ImmutableSetFactory immutable = ServiceLoaderUtils.loadServiceClass(ImmutableSetFactory.class); public static final MutableSetFactory mutable = ServiceLoaderUtils.loadServiceClass(MutableSetFactory.class); public static final FixedSizeSetFactory fixedSize = ServiceLoaderUtils.loadServiceClass(FixedSizeSetFactory.class); private Sets() { throw new AssertionError("Suppress default constructor for noninstantiability"); } } SortedBags.java000066400000000000000000000021701407344533200367510ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory; import org.eclipse.collections.api.factory.bag.sorted.ImmutableSortedBagFactory; import org.eclipse.collections.api.factory.bag.sorted.MutableSortedBagFactory; @SuppressWarnings("ConstantNamingConvention") public final class SortedBags { public static final MutableSortedBagFactory mutable = ServiceLoaderUtils.loadServiceClass(MutableSortedBagFactory.class); public static final ImmutableSortedBagFactory immutable = ServiceLoaderUtils.loadServiceClass(ImmutableSortedBagFactory.class); private SortedBags() { throw new AssertionError("Suppress default constructor for noninstantiability"); } } SortedMaps.java000066400000000000000000000021701407344533200367750ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory; import org.eclipse.collections.api.factory.map.sorted.ImmutableSortedMapFactory; import org.eclipse.collections.api.factory.map.sorted.MutableSortedMapFactory; @SuppressWarnings("ConstantNamingConvention") public final class SortedMaps { public static final ImmutableSortedMapFactory immutable = ServiceLoaderUtils.loadServiceClass(ImmutableSortedMapFactory.class); public static final MutableSortedMapFactory mutable = ServiceLoaderUtils.loadServiceClass(MutableSortedMapFactory.class); private SortedMaps() { throw new AssertionError("Suppress default constructor for noninstantiability"); } } SortedSets.java000066400000000000000000000021701407344533200370130ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory; import org.eclipse.collections.api.factory.set.sorted.ImmutableSortedSetFactory; import org.eclipse.collections.api.factory.set.sorted.MutableSortedSetFactory; @SuppressWarnings("ConstantNamingConvention") public final class SortedSets { public static final ImmutableSortedSetFactory immutable = ServiceLoaderUtils.loadServiceClass(ImmutableSortedSetFactory.class); public static final MutableSortedSetFactory mutable = ServiceLoaderUtils.loadServiceClass(MutableSortedSetFactory.class); private SortedSets() { throw new AssertionError("Suppress default constructor for noninstantiability"); } } Stacks.java000066400000000000000000000021161407344533200361440ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory; import org.eclipse.collections.api.factory.stack.ImmutableStackFactory; import org.eclipse.collections.api.factory.stack.MutableStackFactory; @SuppressWarnings("ConstantNamingConvention") public final class Stacks { public static final ImmutableStackFactory immutable = ServiceLoaderUtils.loadServiceClass(ImmutableStackFactory.class); public static final MutableStackFactory mutable = ServiceLoaderUtils.loadServiceClass(MutableStackFactory.class); private Stacks() { throw new AssertionError("Suppress default constructor for noninstantiability"); } } ThrowingInvocationHandler.java000066400000000000000000000016551407344533200420540ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class ThrowingInvocationHandler implements InvocationHandler { private final String error; public ThrowingInvocationHandler(String error) { this.error = error; } @Override public Object invoke(Object proxy, Method method, Object[] args) { throw new IllegalStateException(this.error); } } bag/000077500000000000000000000000001407344533200346025ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factoryImmutableBagFactory.java000066400000000000000000000117451407344533200413360ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/bag/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.bag; import java.util.stream.Stream; import org.eclipse.collections.api.bag.ImmutableBag; import org.eclipse.collections.api.bag.MutableBag; import org.eclipse.collections.api.factory.Bags; import org.eclipse.collections.api.tuple.primitive.ObjectIntPair; /** * A factory which creates instances of type {@link ImmutableBag}. */ public interface ImmutableBagFactory { /** * @since 6.0 */ ImmutableBag empty(); /** * Same as {@link #empty()}. */ ImmutableBag of(); /** * Same as {@link #empty()}. */ ImmutableBag with(); /** * Same as {@link #with(Object)}. */ ImmutableBag of(T element); ImmutableBag with(T element); /** * Same as {@link #with(Object[])}. */ ImmutableBag of(T... elements); /** * Same as {@link #withOccurrences(Object, int)}. * * @since 10.3 */ default ImmutableBag ofOccurrences(T element, int occurrence) { return this.withOccurrences(element, occurrence); } /** * Same as {@link #withOccurrences(Object, int, Object, int)}. * * @since 10.3 */ default ImmutableBag ofOccurrences(T element1, int occurrence1, T element2, int occurrence2) { return this.withOccurrences(element1, occurrence1, element2, occurrence2); } /** * Same as {@link #withOccurrences(Object, int, Object, int, Object, int)}. * * @since 10.3 */ default ImmutableBag ofOccurrences(T element1, int occurrence1, T element2, int occurrence2, T element3, int occurrence3) { return this.withOccurrences(element1, occurrence1, element2, occurrence2, element3, occurrence3); } /** * Same as {@link #withOccurrences(Object, int, Object, int, Object, int, Object, int)}. * * @since 10.3 */ default ImmutableBag ofOccurrences(T element1, int occurrence1, T element2, int occurrence2, T element3, int occurrence3, T element4, int occurrence4) { return this.withOccurrences(element1, occurrence1, element2, occurrence2, element3, occurrence3, element4, occurrence4); } /** * Same as {@link #withOccurrences(ObjectIntPair[])} * * @since 10.3 */ default ImmutableBag ofOccurrences(ObjectIntPair... elementsWithOccurrences) { return this.withOccurrences(elementsWithOccurrences); } ImmutableBag with(T... elements); /** * @since 10.3 */ default ImmutableBag withOccurrences(T element, int occurrence) { MutableBag mutableBag = Bags.mutable.withOccurrences(element, occurrence); return mutableBag.toImmutable(); } /** * @since 10.3 */ default ImmutableBag withOccurrences(T element1, int occurrence1, T element2, int occurrence2) { MutableBag mutableBag = Bags.mutable.withOccurrences( element1, occurrence1, element2, occurrence2); return mutableBag.toImmutable(); } /** * @since 10.3 */ default ImmutableBag withOccurrences(T element1, int occurrence1, T element2, int occurrence2, T element3, int occurrence3) { MutableBag mutableBag = Bags.mutable.withOccurrences( element1, occurrence1, element2, occurrence2, element3, occurrence3); return mutableBag.toImmutable(); } /** * @since 10.3 */ default ImmutableBag withOccurrences(T element1, int occurrence1, T element2, int occurrence2, T element3, int occurrence3, T element4, int occurrence4) { MutableBag mutableBag = Bags.mutable.withOccurrences( element1, occurrence1, element2, occurrence2, element3, occurrence3, element4, occurrence4); return mutableBag.toImmutable(); } /** * @since 10.3 */ default ImmutableBag withOccurrences(ObjectIntPair... elementsWithOccurrences) { return Bags.mutable.withOccurrences(elementsWithOccurrences).toImmutable(); } /** * Same as {@link #withAll(Iterable)}. */ ImmutableBag ofAll(Iterable items); ImmutableBag withAll(Iterable items); /** * @since 10.0. */ default ImmutableBag fromStream(Stream stream) { return Bags.mutable.fromStream(stream).toImmutable(); } } MultiReaderBagFactory.java000066400000000000000000000030311407344533200416210ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/bag/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.bag; import java.util.stream.Stream; import org.eclipse.collections.api.bag.MultiReaderBag; /** * A factory which creates instances of type {@link MultiReaderBag}. * * @since 10.0. */ public interface MultiReaderBagFactory { MultiReaderBag empty(); /** * Same as {@link #empty()}. */ default MultiReaderBag of() { return this.empty(); } /** * Same as {@link #empty()}. */ default MultiReaderBag with() { return this.empty(); } /** * Same as {@link #with(Object[])}. */ default MultiReaderBag of(T... elements) { return this.with(elements); } MultiReaderBag with(T... elements); /** * Same as {@link #withAll(Iterable)}. */ default MultiReaderBag ofAll(Iterable items) { return this.withAll(items); } MultiReaderBag withAll(Iterable items); MultiReaderBag fromStream(Stream stream); } MutableBagFactory.java000066400000000000000000000116521407344533200410050ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/bag/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.bag; import java.util.stream.Stream; import org.eclipse.collections.api.bag.MutableBag; import org.eclipse.collections.api.tuple.primitive.ObjectIntPair; /** * A factory which creates instances of type {@link MutableBag}. */ public interface MutableBagFactory { /** * @since 6.0 */ MutableBag empty(); /** * Same as {@link #empty()}. */ default MutableBag of() { return this.empty(); } /** * Same as {@link #empty()}. */ default MutableBag with() { return this.empty(); } /** * Same as {@link #with(Object[])}. */ default MutableBag of(T... elements) { return this.with(elements); } /** * Same as {@link #withOccurrences(Object, int)}. * * @since 10.3 */ default MutableBag ofOccurrences(T element, int occurrence) { return this.withOccurrences(element, occurrence); } /** * Same as {@link #withOccurrences(Object, int, Object, int)}. * * @since 10.3 */ default MutableBag ofOccurrences(T element1, int occurrence1, T element2, int occurrence2) { return this.withOccurrences(element1, occurrence1, element2, occurrence2); } /** * Same as {@link #withOccurrences(Object, int, Object, int, Object, int)}. * * @since 10.3 */ default MutableBag ofOccurrences(T element1, int occurrence1, T element2, int occurrence2, T element3, int occurrence3) { return this.withOccurrences(element1, occurrence1, element2, occurrence2, element3, occurrence3); } /** * Same as {@link #withOccurrences(Object, int, Object, int, Object, int, Object, int)}. * * @since 10.3 */ default MutableBag ofOccurrences(T element1, int occurrence1, T element2, int occurrence2, T element3, int occurrence3, T element4, int occurrence4) { return this.withOccurrences(element1, occurrence1, element2, occurrence2, element3, occurrence3, element4, occurrence4); } /** * Same as {@link #withOccurrences(ObjectIntPair[])}. * * @since 10.3 */ default MutableBag ofOccurrences(ObjectIntPair... elementsWithOccurrences) { return this.withOccurrences(elementsWithOccurrences); } MutableBag with(T... elements); /** * @since 10.3 */ default MutableBag withOccurrences(T element, int occurrence) { MutableBag bag = this.empty(); bag.addOccurrences(element, occurrence); return bag; } /** * @since 10.3 */ default MutableBag withOccurrences(T element1, int occurrence1, T element2, int occurrence2) { MutableBag bag = this.empty(); bag.addOccurrences(element1, occurrence1); bag.addOccurrences(element2, occurrence2); return bag; } /** * @since 10.3 */ default MutableBag withOccurrences(T element1, int occurrence1, T element2, int occurrence2, T element3, int occurrence3) { MutableBag bag = this.empty(); bag.addOccurrences(element1, occurrence1); bag.addOccurrences(element2, occurrence2); bag.addOccurrences(element3, occurrence3); return bag; } /** * @since 10.3 */ default MutableBag withOccurrences(T element1, int occurrence1, T element2, int occurrence2, T element3, int occurrence3, T element4, int occurrence4) { MutableBag bag = this.empty(); bag.addOccurrences(element1, occurrence1); bag.addOccurrences(element2, occurrence2); bag.addOccurrences(element3, occurrence3); bag.addOccurrences(element4, occurrence4); return bag; } /** * @since 10.3 */ default MutableBag withOccurrences(ObjectIntPair... elementsWithOccurrences) { MutableBag bag = this.empty(); for (ObjectIntPair itemToAdd : elementsWithOccurrences) { bag.addOccurrences(itemToAdd.getOne(), itemToAdd.getTwo()); } return bag; } /** * Same as {@link #withAll(Iterable)}. */ default MutableBag ofAll(Iterable items) { return this.withAll(items); } MutableBag withAll(Iterable items); /** * @since 10.0. */ MutableBag fromStream(Stream stream); } package-info.java000066400000000000000000000011661407344533200377750ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/bag/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains factory API for creating instance of type {@link org.eclipse.collections.api.bag.Bag}. */ package org.eclipse.collections.api.factory.bag; sorted/000077500000000000000000000000001407344533200361025ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/bagImmutableSortedBagFactory.java000066400000000000000000000044311407344533200440110ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/bag/sorted/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.bag.sorted; import java.util.Comparator; import org.eclipse.collections.api.bag.sorted.ImmutableSortedBag; import org.eclipse.collections.api.bag.sorted.SortedBag; /** * A factory which creates instances of type {@link ImmutableSortedBag}. */ public interface ImmutableSortedBagFactory { ImmutableSortedBag empty(); ImmutableSortedBag empty(Comparator comparator); /** * Same as {@link #empty()}. */ ImmutableSortedBag of(); /** * Same as {@link #empty()}. */ ImmutableSortedBag with(); /** * Same as {@link #with(Object[])}. */ ImmutableSortedBag of(T... items); ImmutableSortedBag with(T... items); /** * Same as {@link #withAll(Iterable)}. */ ImmutableSortedBag ofAll(Iterable items); ImmutableSortedBag withAll(Iterable items); /** * Same as {@link #with(Comparator, Object[])}. */ ImmutableSortedBag of(Comparator comparator, T... items); ImmutableSortedBag with(Comparator comparator, T... items); /** * Same as {@link #with(Comparator)}. */ ImmutableSortedBag of(Comparator comparator); ImmutableSortedBag with(Comparator comparator); /** * Same as {@link #withAll(Comparator, Iterable)}. */ ImmutableSortedBag ofAll(Comparator comparator, Iterable items); ImmutableSortedBag withAll(Comparator comparator, Iterable items); /** * Same as {@link #withSortedBag(SortedBag)}. */ ImmutableSortedBag ofSortedBag(SortedBag bag); ImmutableSortedBag withSortedBag(SortedBag bag); } MutableSortedBagFactory.java000066400000000000000000000037641407344533200434730ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/bag/sorted/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.bag.sorted; import java.util.Comparator; import org.eclipse.collections.api.bag.sorted.MutableSortedBag; /** * A factory which creates instances of type {@link MutableSortedBag}. * * @since 6.0 */ public interface MutableSortedBagFactory { MutableSortedBag empty(); MutableSortedBag empty(Comparator comparator); /** * Same as {@link #with()}. */ MutableSortedBag of(); MutableSortedBag with(); /** * Same as {@link #with(Comparator)}. */ MutableSortedBag of(Comparator comparator); MutableSortedBag with(Comparator comparator); /** * Same as {@link #with(Object[])}. */ MutableSortedBag of(T... elements); MutableSortedBag with(T... elements); /** * Same as {@link #with(Comparator, Object[])}. */ MutableSortedBag of(Comparator comparator, T... elements); MutableSortedBag with(Comparator comparator, T... elements); /** * Same as {@link #withAll(Comparator, Iterable)}. */ MutableSortedBag ofAll(Iterable items); MutableSortedBag withAll(Iterable items); /** * Same as {@link #withAll(Comparator, Iterable)} */ MutableSortedBag ofAll(Comparator comparator, Iterable items); MutableSortedBag withAll(Comparator comparator, Iterable items); } strategy/000077500000000000000000000000001407344533200364445ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/bagMutableHashingStrategyBagFactory.java000066400000000000000000000027241407344533200456740ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/bag/strategy/* * Copyright (c) 2021 Bhavana Hindupur. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.bag.strategy; import org.eclipse.collections.api.bag.MutableBag; import org.eclipse.collections.api.block.HashingStrategy; public interface MutableHashingStrategyBagFactory { /** * Same as {@link #with(HashingStrategy)}. */ MutableBag of(HashingStrategy hashingStrategy); MutableBag empty(HashingStrategy hashingStrategy); MutableBag with(HashingStrategy hashingStrategy); /** * Same as {@link #with(HashingStrategy, Object[])}. */ MutableBag of(HashingStrategy hashingStrategy, T... items); MutableBag with(HashingStrategy hashingStrategy, T... items); /** * Same as {@link #withAll(HashingStrategy, Iterable)}. */ MutableBag ofAll(HashingStrategy hashingStrategy, Iterable items); MutableBag withAll(HashingStrategy hashingStrategy, Iterable items); } bimap/000077500000000000000000000000001407344533200351415ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factoryImmutableBiMapFactory.java000066400000000000000000000046221407344533200421700ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/bimap/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.bimap; import java.util.Map; import org.eclipse.collections.api.bimap.ImmutableBiMap; import org.eclipse.collections.api.bimap.MutableBiMap; import org.eclipse.collections.api.map.ImmutableMap; public interface ImmutableBiMapFactory { /** * @since 6.0 */ ImmutableBiMap empty(); /** * Same as {@link #empty()}. */ ImmutableBiMap of(); /** * Same as {@link #empty()}. */ ImmutableBiMap with(); /** * Same as {@link #with(Object, Object)}. */ ImmutableBiMap of(K key, V value); ImmutableBiMap with(K key, V value); /** * Same as {@link #with(Object, Object, Object, Object)}. */ ImmutableBiMap of(K key1, V value1, K key2, V value2); ImmutableBiMap with(K key1, V value1, K key2, V value2); /** * Same as {@link #with(Object, Object, Object, Object, Object, Object)}. */ ImmutableBiMap of(K key1, V value1, K key2, V value2, K key3, V value3); ImmutableBiMap with(K key1, V value1, K key2, V value2, K key3, V value3); /** * Same as {@link #with(Object, Object, Object, Object, Object, Object, Object, Object)}. */ ImmutableBiMap of(K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4); ImmutableBiMap with(K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4); /** * Same as {@link #withAll(Map)}. */ ImmutableBiMap ofAll(Map map); ImmutableBiMap withAll(Map map); ImmutableBiMap ofAll(MutableBiMap biMap); ImmutableBiMap withAll(MutableBiMap biMap); ImmutableBiMap ofAll(ImmutableMap immutableMap); ImmutableBiMap withAll(ImmutableMap immutableMap); } MutableBiMapFactory.java000066400000000000000000000034651407344533200416460ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/bimap/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.bimap; import org.eclipse.collections.api.bimap.MutableBiMap; public interface MutableBiMapFactory { /** * @since 6.0 */ MutableBiMap empty(); /** * Same as {@link #empty()}. */ MutableBiMap of(); /** * Same as {@link #empty()}. */ MutableBiMap with(); /** * Same as {@link #with(Object, Object)}. */ MutableBiMap of(K key, V value); MutableBiMap with(K key, V value); /** * Same as {@link #with(Object, Object, Object, Object)}. */ MutableBiMap of(K key1, V value1, K key2, V value2); MutableBiMap with(K key1, V value1, K key2, V value2); /** * Same as {@link #with(Object, Object, Object, Object, Object, Object)}. */ MutableBiMap of(K key1, V value1, K key2, V value2, K key3, V value3); MutableBiMap with(K key1, V value1, K key2, V value2, K key3, V value3); /** * Same as {@link #with(Object, Object, Object, Object, Object, Object, Object, Object)}. */ MutableBiMap of(K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4); MutableBiMap with(K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4); } list/000077500000000000000000000000001407344533200350245ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factoryFixedSizeListFactory.java000066400000000000000000000046221407344533200417510ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/list/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.list; import java.util.stream.Stream; import org.eclipse.collections.api.list.FixedSizeList; public interface FixedSizeListFactory { /** * @since 6.0 */ FixedSizeList empty(); /** * Same as {@link #empty()}. */ FixedSizeList of(); /** * Same as {@link #empty()}. */ FixedSizeList with(); /** * Same as {@link #with(Object)}. */ FixedSizeList of(T one); FixedSizeList with(T one); /** * Same as {@link #with(Object, Object)}. */ FixedSizeList of(T one, T two); FixedSizeList with(T one, T two); /** * Same as {@link #with(Object, Object, Object)}. */ FixedSizeList of(T one, T two, T three); FixedSizeList with(T one, T two, T three); /** * Same as {@link #with(Object, Object, Object, Object)}. */ FixedSizeList of(T one, T two, T three, T four); FixedSizeList with(T one, T two, T three, T four); /** * Same as {@link #with(Object, Object, Object, Object, Object)}. */ FixedSizeList of(T one, T two, T three, T four, T five); FixedSizeList with(T one, T two, T three, T four, T five); /** * Same as {@link #with(Object, Object, Object, Object, Object, Object)}. */ FixedSizeList of(T one, T two, T three, T four, T five, T six); FixedSizeList with(T one, T two, T three, T four, T five, T six); /** * Same as {@link #with(Object[])} */ FixedSizeList of(T... items); FixedSizeList with(T... items); /** * Same as {@link #withAll(Iterable)}. */ FixedSizeList ofAll(Iterable items); FixedSizeList withAll(Iterable items); /** * @since 10.0. */ FixedSizeList fromStream(Stream stream); } ImmutableListFactory.java000066400000000000000000000105671407344533200420030ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/list/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.list; import java.util.Comparator; import java.util.stream.Stream; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.factory.Lists; import org.eclipse.collections.api.list.ImmutableList; import org.eclipse.collections.api.list.MutableList; public interface ImmutableListFactory { /** * @since 6.0 */ ImmutableList empty(); /** * Same as {@link #empty()}. */ ImmutableList of(); /** * Same as {@link #empty()}. */ ImmutableList with(); /** * Same as {@link #with(Object)}. */ ImmutableList of(T one); ImmutableList with(T one); /** * Same as {@link #with(Object, Object)}. */ ImmutableList of(T one, T two); ImmutableList with(T one, T two); /** * Same as {@link #with(Object, Object, Object)}. */ ImmutableList of(T one, T two, T three); ImmutableList with(T one, T two, T three); /** * Same as {@link #with(Object, Object, Object, Object)}. */ ImmutableList of(T one, T two, T three, T four); ImmutableList with(T one, T two, T three, T four); /** * Same as {@link #with(Object, Object, Object, Object, Object)}. */ ImmutableList of(T one, T two, T three, T four, T five); ImmutableList with(T one, T two, T three, T four, T five); /** * Same as {@link #with(Object, Object, Object, Object, Object, Object)}. */ ImmutableList of(T one, T two, T three, T four, T five, T six); ImmutableList with(T one, T two, T three, T four, T five, T six); /** * Same as {@link #with(Object, Object, Object, Object, Object, Object, Object)}. */ ImmutableList of(T one, T two, T three, T four, T five, T six, T seven); ImmutableList with(T one, T two, T three, T four, T five, T six, T seven); /** * Same as {@link #with(Object, Object, Object, Object, Object, Object, Object, Object)}. */ ImmutableList of(T one, T two, T three, T four, T five, T six, T seven, T eight); ImmutableList with(T one, T two, T three, T four, T five, T six, T seven, T eight); /** * Same as {@link #with(Object, Object, Object, Object, Object, Object, Object, Object, Object)}. */ ImmutableList of(T one, T two, T three, T four, T five, T six, T seven, T eight, T nine); ImmutableList with(T one, T two, T three, T four, T five, T six, T seven, T eight, T nine); /** * Same as {@link #with(Object, Object, Object, Object, Object, Object, Object, Object, Object, Object)}. */ ImmutableList of(T one, T two, T three, T four, T five, T six, T seven, T eight, T nine, T ten); ImmutableList with(T one, T two, T three, T four, T five, T six, T seven, T eight, T nine, T ten); /** * Same as {@link #with(Object[])}. */ ImmutableList of(T... items); ImmutableList with(T... items); /** * Same as {@link #withAll(Iterable)}. */ ImmutableList ofAll(Iterable items); ImmutableList withAll(Iterable items); /** * @since 10.0. */ default ImmutableList fromStream(Stream stream) { return Lists.mutable.fromStream(stream).toImmutable(); } /** * @since 11.0. */ default ImmutableList withAllSorted(RichIterable items) { MutableList list = (MutableList) items.toSortedList(); return list.toImmutable(); } /** * @since 11.0. */ default ImmutableList withAllSorted(Comparator comparator, RichIterable items) { MutableList list = (MutableList) items.toSortedList(comparator); return list.toImmutable(); } } MultiReaderListFactory.java000066400000000000000000000040301407344533200422650ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/list/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.list; import java.util.stream.Stream; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.list.MultiReaderList; /** * A factory which creates instances of type {@link MultiReaderList}. * * @since 10.0. */ public interface MultiReaderListFactory { MultiReaderList empty(); /** * Same as {@link #empty()}. */ default MultiReaderList of() { return this.empty(); } /** * Same as {@link #empty()}. */ default MultiReaderList with() { return this.empty(); } /** * Same as {@link #with(Object[])}. */ default MultiReaderList of(T... items) { return this.with(items); } MultiReaderList with(T... items); /** * Same as {@link #empty()}. but takes in initial capacity. */ default MultiReaderList ofInitialCapacity(int capacity) { return this.withInitialCapacity(capacity); } /** * Same as {@link #empty()}. but takes in initial capacity. */ MultiReaderList withInitialCapacity(int capacity); /** * Same as {@link #withAll(Iterable)}. */ default MultiReaderList ofAll(Iterable iterable) { return this.withAll(iterable); } MultiReaderList withAll(Iterable iterable); MultiReaderList fromStream(Stream stream); MultiReaderList withNValues(int size, Function0 factory); } MutableListFactory.java000066400000000000000000000047641407344533200414570ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/list/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.list; import java.util.stream.Stream; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.list.MutableList; public interface MutableListFactory { /** * @since 6.0 */ MutableList empty(); /** * Same as {@link #empty()}. */ default MutableList of() { return this.empty(); } /** * Same as {@link #empty()}. */ default MutableList with() { return this.empty(); } /** * Same as {@link #with(Object[])}. */ default MutableList of(T... items) { return this.with(items); } /** * Creates a new list using the passed {@code items} argument as the backing store. *

* !!! WARNING: This method uses the passed in array, so can be very unsafe if the original * array is held onto anywhere else. !!! */ MutableList with(T... items); /** * Creates a new list by first copying the array passed in. */ default MutableList wrapCopy(T... array) { T[] newArray = (T[]) new Object[array.length]; System.arraycopy(array, 0, newArray, 0, array.length); return this.with(newArray); } /** * Same as {@link #empty()}. but takes in initial capacity. */ default MutableList ofInitialCapacity(int capacity) { return this.withInitialCapacity(capacity); } /** * Same as {@link #empty()}. but takes in initial capacity. */ MutableList withInitialCapacity(int capacity); /** * Same as {@link #withAll(Iterable)}. */ default MutableList ofAll(Iterable iterable) { return this.withAll(iterable); } MutableList withAll(Iterable iterable); /** * @since 10.0. */ MutableList fromStream(Stream stream); MutableList withNValues(int size, Function0 factory); } package-info.java000066400000000000000000000024731407344533200402210ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/list/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains factory API for creating instances of type {@link org.eclipse.collections.api.list.ListIterable}. *

* This package contains the following interfaces: *

    *
  • * {@link org.eclipse.collections.api.factory.list.FixedSizeListFactory} - a factory which creates instances of type {@link org.eclipse.collections.api.list.FixedSizeList}. *
  • *
  • * {@link org.eclipse.collections.api.factory.list.ImmutableListFactory} - a factory which creates instances of type {@link org.eclipse.collections.api.list.ImmutableList}. *
  • *
  • * {@link org.eclipse.collections.api.factory.list.MutableListFactory} - a factory which creates instances of type {@link org.eclipse.collections.api.list.MutableList}. *
  • *
*/ package org.eclipse.collections.api.factory.list; primitive/000077500000000000000000000000001407344533200370345ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/listpackage-info.java000066400000000000000000000011471407344533200422260ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/list/primitive/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains factory API for creating immutable primitive list instances. */ package org.eclipse.collections.api.factory.list.primitive; map/000077500000000000000000000000001407344533200346265ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factoryFixedSizeMapFactory.java000066400000000000000000000027531407344533200413600ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/map/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.map; import org.eclipse.collections.api.map.FixedSizeMap; public interface FixedSizeMapFactory { /** * @since 6.0 */ FixedSizeMap empty(); /** * Same as {@link #empty()}. */ FixedSizeMap of(); /** * Same as {@link #empty()}. */ FixedSizeMap with(); /** * Same as {@link #with(Object, Object)}. */ FixedSizeMap of(K key, V value); FixedSizeMap with(K key, V value); /** * Same as {@link #with(Object, Object, Object, Object)}. */ FixedSizeMap of(K key1, V value1, K key2, V value2); FixedSizeMap with(K key1, V value1, K key2, V value2); /** * Same as {@link #with(Object, Object, Object, Object, Object, Object)}. */ FixedSizeMap of(K key1, V value1, K key2, V value2, K key3, V value3); FixedSizeMap with(K key1, V value1, K key2, V value2, K key3, V value3); } ImmutableMapFactory.java000066400000000000000000000040371407344533200414020ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/map/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.map; import java.util.Map; import org.eclipse.collections.api.map.ImmutableMap; public interface ImmutableMapFactory { /** * @since 6.0 */ ImmutableMap empty(); /** * Same as {@link #empty()}. */ ImmutableMap of(); /** * Same as {@link #empty()}. */ ImmutableMap with(); /** * Same as {@link #with(Object, Object)}. */ ImmutableMap of(K key, V value); ImmutableMap with(K key, V value); /** * Same as {@link #with(Object, Object, Object, Object)}. */ ImmutableMap of(K key1, V value1, K key2, V value2); ImmutableMap with(K key1, V value1, K key2, V value2); /** * Same as {@link #with(Object, Object, Object, Object, Object, Object)}. */ ImmutableMap of(K key1, V value1, K key2, V value2, K key3, V value3); ImmutableMap with(K key1, V value1, K key2, V value2, K key3, V value3); /** * Same as {@link #with(Object, Object, Object, Object, Object, Object, Object, Object)}. */ ImmutableMap of(K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4); ImmutableMap with(K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4); ImmutableMap ofMap(Map map); /** * Same as {@link #withAll(Map)}. */ ImmutableMap ofAll(Map map); ImmutableMap withAll(Map map); } MutableMapFactory.java000066400000000000000000000047241407344533200410570ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/map/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.map; import java.util.Map; import org.eclipse.collections.api.map.MapIterable; import org.eclipse.collections.api.map.MutableMap; public interface MutableMapFactory { /** * @since 6.0 */ MutableMap empty(); /** * Same as {@link #empty()}. */ MutableMap of(); /** * Same as {@link #empty()}. */ MutableMap with(); /** * Same as {@link #empty()}. but takes in an initial capacity */ MutableMap ofInitialCapacity(int capacity); /** * Same as {@link #empty()}. but takes in an initial capacity */ MutableMap withInitialCapacity(int capacity); /** * Same as {@link #with(Object, Object)}. */ MutableMap of(K key, V value); MutableMap with(K key, V value); /** * Same as {@link #with(Object, Object, Object, Object)}. */ MutableMap of(K key1, V value1, K key2, V value2); MutableMap with(K key1, V value1, K key2, V value2); /** * Same as {@link #with(Object, Object, Object, Object, Object, Object)}. */ MutableMap of(K key1, V value1, K key2, V value2, K key3, V value3); MutableMap with(K key1, V value1, K key2, V value2, K key3, V value3); /** * Same as {@link #with(Object, Object, Object, Object, Object, Object, Object, Object)}. */ MutableMap of(K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4); MutableMap with(K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4); MutableMap ofMap(Map map); MutableMap withMap(Map map); MutableMap ofMapIterable(MapIterable mapIterable); MutableMap withMapIterable(MapIterable mapIterable); } package-info.java000066400000000000000000000024371407344533200400230ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/map/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains factory API for creating instances of type {@link org.eclipse.collections.api.map.MapIterable}. *

* This package contains 3 interfaces: *

    *
  • * {@link org.eclipse.collections.api.factory.map.FixedSizeMapFactory} - a factory which creates instances of type {@link org.eclipse.collections.api.map.FixedSizeMap}. *
  • *
  • * {@link org.eclipse.collections.api.factory.map.ImmutableMapFactory} - a factory which creates instances of type {@link org.eclipse.collections.api.map.ImmutableMap}. *
  • *
  • * {@link org.eclipse.collections.api.factory.map.MutableMapFactory} - a factory which creates instances of type {@link org.eclipse.collections.api.map.MutableMap}. *
  • *
*/ package org.eclipse.collections.api.factory.map; sorted/000077500000000000000000000000001407344533200361265ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/mapImmutableSortedMapFactory.java000066400000000000000000000072671407344533200440730ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/map/sorted/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.map.sorted; import java.util.Comparator; import java.util.SortedMap; import org.eclipse.collections.api.map.sorted.ImmutableSortedMap; public interface ImmutableSortedMapFactory { /** * @since 6.0 */ ImmutableSortedMap empty(); /** * Same as {@link #empty()}. */ ImmutableSortedMap of(); /** * Same as {@link #empty()}. */ ImmutableSortedMap with(); /** * Same as {@link #with(Object, Object)}. */ ImmutableSortedMap of(K key, V value); ImmutableSortedMap with(K key, V value); /** * Same as {@link #with(Object, Object, Object, Object)}. */ ImmutableSortedMap of(K key1, V value1, K key2, V value2); ImmutableSortedMap with(K key1, V value1, K key2, V value2); /** * Same as {@link #with(Object, Object, Object, Object, Object, Object)}. */ ImmutableSortedMap of(K key1, V value1, K key2, V value2, K key3, V value3); ImmutableSortedMap with(K key1, V value1, K key2, V value2, K key3, V value3); /** * Same as {@link #with(Object, Object, Object, Object, Object, Object, Object, Object)}. */ ImmutableSortedMap of(K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4); ImmutableSortedMap with(K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4); /** * Same as {@link #with(Comparator)}. */ ImmutableSortedMap of(Comparator comparator); ImmutableSortedMap with(Comparator comparator); /** * Same as {@link #with(Comparator, Object, Object)}. */ ImmutableSortedMap of(Comparator comparator, K key, V value); ImmutableSortedMap with(Comparator comparator, K key, V value); /** * Same as {@link #with(Comparator, Object, Object, Object, Object)}. */ ImmutableSortedMap of(Comparator comparator, K key1, V value1, K key2, V value2); ImmutableSortedMap with(Comparator comparator, K key1, V value1, K key2, V value2); /** * Same as {@link #with(Comparator, Object, Object, Object, Object, Object, Object)}. */ ImmutableSortedMap of(Comparator comparator, K key1, V value1, K key2, V value2, K key3, V value3); ImmutableSortedMap with(Comparator comparator, K key1, V value1, K key2, V value2, K key3, V value3); /** * Same as {@link #with(Comparator, Object, Object, Object, Object, Object, Object, Object, Object)}. */ ImmutableSortedMap of(Comparator comparator, K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4); ImmutableSortedMap with(Comparator comparator, K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4); /** * Same as {@link #withSortedMap(SortedMap)}. */ ImmutableSortedMap ofSortedMap(SortedMap map); ImmutableSortedMap withSortedMap(SortedMap map); } MutableSortedMapFactory.java000066400000000000000000000072251407344533200435370ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/map/sorted/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.map.sorted; import java.util.Comparator; import java.util.Map; import org.eclipse.collections.api.map.sorted.MutableSortedMap; public interface MutableSortedMapFactory { /** * @since 6.0 */ MutableSortedMap empty(); /** * Same as {@link #empty()}. */ MutableSortedMap of(); /** * Same as {@link #empty()}. */ MutableSortedMap with(); /** * Same as {@link #with(Object, Object)}. */ MutableSortedMap of(K key, V value); MutableSortedMap with(K key, V value); /** * Same as {@link #with(Object, Object, Object, Object)}. */ MutableSortedMap of(K key1, V value1, K key2, V value2); MutableSortedMap with(K key1, V value1, K key2, V value2); /** * Same as {@link #with(Object, Object, Object, Object, Object, Object)}. */ MutableSortedMap of(K key1, V value1, K key2, V value2, K key3, V value3); MutableSortedMap with(K key1, V value1, K key2, V value2, K key3, V value3); /** * Same as {@link #with(Object, Object, Object, Object, Object, Object, Object, Object)}. */ MutableSortedMap of(K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4); MutableSortedMap with(K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4); /** * Same as {@link #with(Comparator)}. */ MutableSortedMap of(Comparator comparator); MutableSortedMap with(Comparator comparator); /** * Same as {@link #with(Comparator, Object, Object)}. */ MutableSortedMap of(Comparator comparator, K key, V value); MutableSortedMap with(Comparator comparator, K key, V value); /** * Same as {@link #with(Comparator, Object, Object, Object, Object)}. */ MutableSortedMap of(Comparator comparator, K key1, V value1, K key2, V value2); MutableSortedMap with(Comparator comparator, K key1, V value1, K key2, V value2); /** * Same as {@link #with(Comparator, Object, Object, Object, Object, Object, Object)}. */ MutableSortedMap of(Comparator comparator, K key1, V value1, K key2, V value2, K key3, V value3); MutableSortedMap with(Comparator comparator, K key1, V value1, K key2, V value2, K key3, V value3); /** * Same as {@link #with(Comparator, Object, Object, Object, Object, Object, Object, Object, Object)}. */ MutableSortedMap of(Comparator comparator, K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4); MutableSortedMap with(Comparator comparator, K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4); /** * Same as {@link #withSortedMap(Map)}. */ MutableSortedMap ofSortedMap(Map map); MutableSortedMap withSortedMap(Map map); } package-info.java000066400000000000000000000022341407344533200413160ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/map/sorted/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains factory API for creating instances of type {@link org.eclipse.collections.api.map.sorted.SortedMapIterable}. *

* This package contains 2 interfaces: *

    *
  • * {@link org.eclipse.collections.api.factory.map.sorted.ImmutableSortedMapFactory} - a factory which creates instances of type {@link org.eclipse.collections.api.map.sorted.ImmutableSortedMap}. *
  • *
  • * {@link org.eclipse.collections.api.factory.map.sorted.MutableSortedMapFactory} - a factory which creates instances of type {@link org.eclipse.collections.api.map.sorted.MutableSortedMap}. *
  • *
*/ package org.eclipse.collections.api.factory.map.sorted; strategy/000077500000000000000000000000001407344533200364705ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/mapImmutableHashingStrategyMapFactory.java000066400000000000000000000053301407344533200462660ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/map/strategy/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.map.strategy; import java.util.Map; import org.eclipse.collections.api.block.HashingStrategy; import org.eclipse.collections.api.map.ImmutableMap; public interface ImmutableHashingStrategyMapFactory { /** * Same as {@link #with(HashingStrategy)}. */ ImmutableMap of(HashingStrategy hashingStrategy); ImmutableMap with(HashingStrategy hashingStrategy); /** * Same as {@link #with(HashingStrategy, Object, Object)}. */ ImmutableMap of(HashingStrategy hashingStrategy, K key, V value); ImmutableMap with(HashingStrategy hashingStrategy, K key, V value); /** * Same as {@link #with(HashingStrategy, Object, Object, Object, Object)}. */ ImmutableMap of(HashingStrategy hashingStrategy, K key1, V value1, K key2, V value2); ImmutableMap with(HashingStrategy hashingStrategy, K key1, V value1, K key2, V value2); /** * Same as {@link #with(HashingStrategy, Object, Object, Object, Object, Object, Object)}. */ ImmutableMap of( HashingStrategy hashingStrategy, K key1, V value1, K key2, V value2, K key3, V value3); ImmutableMap with( HashingStrategy hashingStrategy, K key1, V value1, K key2, V value2, K key3, V value3); /** * Same as {@link #with(HashingStrategy, Object, Object, Object, Object, Object, Object, Object, Object)}. */ ImmutableMap of( HashingStrategy hashingStrategy, K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4); ImmutableMap with( HashingStrategy hashingStrategy, K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4); ImmutableMap ofMap(Map map); /** * Same as {@link #withAll(Map)}. */ ImmutableMap ofAll(Map map); ImmutableMap withAll(Map map); } MutableHashingStrategyMapFactory.java000066400000000000000000000047221407344533200457440ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/map/strategy/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.map.strategy; import org.eclipse.collections.api.block.HashingStrategy; import org.eclipse.collections.api.map.MutableMap; public interface MutableHashingStrategyMapFactory { /** * Same as {@link #with(HashingStrategy)}. */ MutableMap of(HashingStrategy hashingStrategy); MutableMap with(HashingStrategy hashingStrategy); /** * Same as {@link #with(HashingStrategy, Object, Object)}. */ MutableMap of(HashingStrategy hashingStrategy, K key, V value); MutableMap with(HashingStrategy hashingStrategy, K key, V value); /** * Same as {@link #with(HashingStrategy, Object, Object, Object, Object)}. */ MutableMap of(HashingStrategy hashingStrategy, K key1, V value1, K key2, V value2); MutableMap with(HashingStrategy hashingStrategy, K key1, V value1, K key2, V value2); /** * Same as {@link #with(HashingStrategy, Object, Object, Object, Object, Object, Object)}. */ MutableMap of( HashingStrategy hashingStrategy, K key1, V value1, K key2, V value2, K key3, V value3); MutableMap with( HashingStrategy hashingStrategy, K key1, V value1, K key2, V value2, K key3, V value3); /** * Same as {@link #with(HashingStrategy, Object, Object, Object, Object, Object, Object, Object, Object)}. */ MutableMap of( HashingStrategy hashingStrategy, K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4); MutableMap with( HashingStrategy hashingStrategy, K key1, V value1, K key2, V value2, K key3, V value3, K key4, V value4); } package-info.java000066400000000000000000000022741407344533200416640ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/map/strategy/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains factory API for creating instances of maps with user defined {@link org.eclipse.collections.api.block.HashingStrategy}s. *

* This package contains 2 interfaces: *

    *
  • * {@link org.eclipse.collections.api.factory.map.ImmutableMapFactory} - a factory which creates instances of type {@link org.eclipse.collections.api.map.ImmutableMap} with user defined hashing strategy. *
  • *
  • * {@link org.eclipse.collections.api.factory.map.MutableMapFactory} - a factory which creates instances of type {@link org.eclipse.collections.api.map.MutableMap} with user defined hashing strategy. *
  • *
*/ package org.eclipse.collections.api.factory.map.strategy; set/000077500000000000000000000000001407344533200346445ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factoryFixedSizeSetFactory.java000066400000000000000000000035071407344533200414120ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/set/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.set; import java.util.stream.Stream; import org.eclipse.collections.api.set.FixedSizeSet; import org.eclipse.collections.api.set.MutableSet; public interface FixedSizeSetFactory { /** * @since 6.0 */ FixedSizeSet empty(); /** * Same as {@link #empty()}. */ FixedSizeSet of(); /** * Same as {@link #empty()}. */ FixedSizeSet with(); /** * Same as {@link #with(Object)}. */ FixedSizeSet of(T one); FixedSizeSet with(T one); /** * Same as {@link #with(Object, Object)}. */ FixedSizeSet of(T one, T two); FixedSizeSet with(T one, T two); /** * Same as {@link #with(Object, Object, Object)}. */ FixedSizeSet of(T one, T two, T three); FixedSizeSet with(T one, T two, T three); /** * Same as {@link #with(Object, Object, Object, Object)}. */ FixedSizeSet of(T one, T two, T three, T four); FixedSizeSet with(T one, T two, T three, T four); /** * Same as {@link #withAll(Iterable)}. */ MutableSet ofAll(Iterable items); MutableSet withAll(Iterable items); /** * @since 10.0.0 */ MutableSet fromStream(Stream stream); } ImmutableSetFactory.java000066400000000000000000000040521407344533200414330ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/set/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.set; import java.util.stream.Stream; import org.eclipse.collections.api.factory.Sets; import org.eclipse.collections.api.set.ImmutableSet; public interface ImmutableSetFactory { /** * @since 6.0 */ ImmutableSet empty(); /** * Same as {@link #empty()}. */ ImmutableSet of(); /** * Same as {@link #empty()}. */ ImmutableSet with(); /** * Same as {@link #with(Object)}. */ ImmutableSet of(T one); ImmutableSet with(T one); /** * Same as {@link #with(Object, Object)}. */ ImmutableSet of(T one, T two); ImmutableSet with(T one, T two); /** * Same as {@link #with(Object, Object, Object)}. */ ImmutableSet of(T one, T two, T three); ImmutableSet with(T one, T two, T three); /** * Same as {@link #with(Object, Object, Object, Object)}. */ ImmutableSet of(T one, T two, T three, T four); ImmutableSet with(T one, T two, T three, T four); /** * Same as {@link #with(Object[])}. */ ImmutableSet of(T... items); ImmutableSet with(T... items); /** * Same as {@link #withAll(Iterable)}. */ ImmutableSet ofAll(Iterable items); ImmutableSet withAll(Iterable items); /** * @since 10.0. */ default ImmutableSet fromStream(Stream stream) { return Sets.mutable.fromStream(stream).toImmutable(); } } MultiReaderSetFactory.java000066400000000000000000000035601407344533200417340ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/set/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.set; import java.util.stream.Stream; import org.eclipse.collections.api.set.MultiReaderSet; /** * A factory which creates instances of type {@link MultiReaderSet}. * * @since 10.0. */ public interface MultiReaderSetFactory { MultiReaderSet empty(); /** * Same as {@link #empty()}. */ default MultiReaderSet of() { return this.empty(); } /** * Same as {@link #empty()}. */ default MultiReaderSet with() { return this.empty(); } /** * Same as {@link #with(Object[])}. */ default MultiReaderSet of(T... items) { return this.with(items); } MultiReaderSet with(T... items); /** * Same as {@link #empty()}. but takes in initial capacity. */ default MultiReaderSet ofInitialCapacity(int capacity) { return this.withInitialCapacity(capacity); } /** * Same as {@link #empty()}. but takes in initial capacity. */ MultiReaderSet withInitialCapacity(int capacity); /** * Same as {@link #withAll(Iterable)}. */ default MultiReaderSet ofAll(Iterable items) { return this.withAll(items); } MultiReaderSet withAll(Iterable items); MultiReaderSet fromStream(Stream stream); } MutableSetFactory.java000066400000000000000000000034461407344533200411130ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/set/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.set; import java.util.stream.Stream; import org.eclipse.collections.api.set.MutableSet; public interface MutableSetFactory { /** * @since 6.0 */ MutableSet empty(); /** * Same as {@link #empty()}. */ default MutableSet of() { return this.empty(); } /** * Same as {@link #empty()}. */ default MutableSet with() { return this.empty(); } /** * Same as {@link #with(Object[])}. */ default MutableSet of(T... items) { return this.with(items); } MutableSet with(T... items); /** * Same as {@link #empty()}. but takes in initial capacity. */ default MutableSet ofInitialCapacity(int capacity) { return this.withInitialCapacity(capacity); } /** * Same as {@link #empty()}. but takes in initial capacity. */ MutableSet withInitialCapacity(int capacity); /** * Same as {@link #withAll(Iterable)}. */ default MutableSet ofAll(Iterable items) { return this.withAll(items); } MutableSet withAll(Iterable items); /** * @since 10.0. */ MutableSet fromStream(Stream stream); } package-info.java000066400000000000000000000024771407344533200400450ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/set/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains Factory API for {@link org.eclipse.collections.api.set.FixedSizeSet}, {@link org.eclipse.collections.api.set.ImmutableSet} and {@link org.eclipse.collections.api.set.MutableSet}. *

* This package contains 3 interfaces: *

    *
  • * {@link org.eclipse.collections.api.factory.set.FixedSizeSetFactory} - Contains Factory API for {@link org.eclipse.collections.api.set.FixedSizeSet}. *
  • *
  • * {@link org.eclipse.collections.api.factory.set.ImmutableSetFactory} - Contains Factory API for {@link org.eclipse.collections.api.set.ImmutableSet}. *
  • *
  • * {@link org.eclipse.collections.api.factory.set.MutableSetFactory} - Contains Factory API for {@link org.eclipse.collections.api.set.MutableSet}. *
  • *
*/ package org.eclipse.collections.api.factory.set; sorted/000077500000000000000000000000001407344533200361445ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/setImmutableSortedSetFactory.java000066400000000000000000000043571407344533200441240ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/set/sorted/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.set.sorted; import java.util.Comparator; import java.util.SortedSet; import org.eclipse.collections.api.set.sorted.ImmutableSortedSet; public interface ImmutableSortedSetFactory { /** * @since 6.0 */ ImmutableSortedSet empty(); /** * @since 7.0 */ ImmutableSortedSet empty(Comparator comparator); /** * Same as {@link #empty()}. */ ImmutableSortedSet of(); /** * Same as {@link #empty()}. */ ImmutableSortedSet with(); /** * Same as {@link #with(Object[])}. */ ImmutableSortedSet of(T... items); ImmutableSortedSet with(T... items); /** * Same as {@link #withAll(Iterable)}. */ ImmutableSortedSet ofAll(Iterable items); ImmutableSortedSet withAll(Iterable items); /** * Same as {@link #with(Comparator)}. */ ImmutableSortedSet of(Comparator comparator); ImmutableSortedSet with(Comparator comparator); /** * Same as {@link #with(Comparator, Object[])}. */ ImmutableSortedSet of(Comparator comparator, T... items); ImmutableSortedSet with(Comparator comparator, T... items); /** * Same as {@link #withAll(Comparator, Iterable)}. */ ImmutableSortedSet ofAll(Comparator comparator, Iterable items); ImmutableSortedSet withAll(Comparator comparator, Iterable items); /** * Same as {@link #withSortedSet(SortedSet)}. */ ImmutableSortedSet ofSortedSet(SortedSet set); ImmutableSortedSet withSortedSet(SortedSet set); } MutableSortedSetFactory.java000066400000000000000000000031231407344533200435640ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/set/sorted/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.set.sorted; import java.util.Comparator; import org.eclipse.collections.api.set.sorted.MutableSortedSet; public interface MutableSortedSetFactory { /** * @since 6.0 */ MutableSortedSet empty(); /** * Same as {@link #empty()}. */ MutableSortedSet of(); /** * Same as {@link #empty()}. */ MutableSortedSet with(); MutableSortedSet of(T... items); MutableSortedSet with(T... items); MutableSortedSet ofAll(Iterable items); MutableSortedSet withAll(Iterable items); MutableSortedSet of(Comparator comparator); MutableSortedSet with(Comparator comparator); MutableSortedSet of(Comparator comparator, T... items); MutableSortedSet with(Comparator comparator, T... items); MutableSortedSet ofAll(Comparator comparator, Iterable items); MutableSortedSet withAll(Comparator comparator, Iterable items); } package-info.java000066400000000000000000000022621407344533200413350ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/set/sorted/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains {@link org.eclipse.collections.api.factory.set.sorted.ImmutableSortedSetFactory} and {@link org.eclipse.collections.api.factory.set.sorted.MutableSortedSetFactory}. *

* This package contains 2 interfaces: *

    *
  • * {@link org.eclipse.collections.api.factory.set.sorted.ImmutableSortedSetFactory} - Contains Factory API for {@link org.eclipse.collections.api.set.sorted.ImmutableSortedSet}. *
  • *
  • * {@link org.eclipse.collections.api.factory.set.sorted.MutableSortedSetFactory} - Contains Factory API for {@link org.eclipse.collections.api.set.sorted.MutableSortedSet}. *
  • *
*/ package org.eclipse.collections.api.factory.set.sorted; strategy/000077500000000000000000000000001407344533200365065ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/setImmutableHashingStrategySetFactory.java000066400000000000000000000033151407344533200463230ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/set/strategy/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.set.strategy; import org.eclipse.collections.api.block.HashingStrategy; import org.eclipse.collections.api.set.ImmutableSet; public interface ImmutableHashingStrategySetFactory { /** * Same as {@link #with(HashingStrategy)}. */ ImmutableSet of(HashingStrategy hashingStrategy); ImmutableSet with(HashingStrategy hashingStrategy); /** * Same as {@link #with(HashingStrategy, Object[])}. */ ImmutableSet of(HashingStrategy hashingStrategy, T... items); ImmutableSet with(HashingStrategy hashingStrategy, T... items); /** * Same as {@link #withAll(HashingStrategy, Iterable)}. */ ImmutableSet ofAll(HashingStrategy hashingStrategy, Iterable items); ImmutableSet withAll(HashingStrategy hashingStrategy, Iterable items); /** * Same as {@link #withInitialCapacity(HashingStrategy, int)}. of initial capacity. */ ImmutableSet ofInitialCapacity(HashingStrategy hashingStrategy, int capacity); ImmutableSet withInitialCapacity(HashingStrategy hashingStrategy, int capacity); } MutableHashingStrategySetFactory.java000066400000000000000000000032711407344533200457760ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/set/strategy/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.set.strategy; import org.eclipse.collections.api.block.HashingStrategy; import org.eclipse.collections.api.set.MutableSet; public interface MutableHashingStrategySetFactory { /** * Same as {@link #with(HashingStrategy)}. */ MutableSet of(HashingStrategy hashingStrategy); MutableSet with(HashingStrategy hashingStrategy); /** * Same as {@link #with(HashingStrategy, Object[])}. */ MutableSet of(HashingStrategy hashingStrategy, T... items); MutableSet with(HashingStrategy hashingStrategy, T... items); /** * Same as {@link #withAll(HashingStrategy, Iterable)}. */ MutableSet ofAll(HashingStrategy hashingStrategy, Iterable items); MutableSet withAll(HashingStrategy hashingStrategy, Iterable items); /** * Same as {@link #withInitialCapacity(HashingStrategy, int)}. of initial capacity. */ MutableSet ofInitialCapacity(HashingStrategy hashingStrategy, int capacity); MutableSet withInitialCapacity(HashingStrategy hashingStrategy, int capacity); } package-info.java000066400000000000000000000023101407344533200416710ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/set/strategy/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains Factory API for {@link org.eclipse.collections.api.factory.set.strategy.ImmutableHashingStrategySetFactory} and {@link org.eclipse.collections.api.factory.set.strategy.MutableHashingStrategySetFactory}. *

* This package contains 2 interfaces: *

    *
  • * {@link org.eclipse.collections.api.factory.bag.ImmutableBagFactory} - Contains Hashing Strategy Factory API for {@link org.eclipse.collections.api.set.ImmutableSet}. *
  • *
  • * {@link org.eclipse.collections.api.factory.bag.MutableBagFactory} - Contains Hashing Strategy Factory API for {@link org.eclipse.collections.api.set.MutableSet}. *
  • *
*/ package org.eclipse.collections.api.factory.set.strategy; stack/000077500000000000000000000000001407344533200351565ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factoryImmutableStackFactory.java000066400000000000000000000037131407344533200422620ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/stack/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.stack; import java.util.stream.Stream; import org.eclipse.collections.api.factory.Stacks; import org.eclipse.collections.api.stack.ImmutableStack; public interface ImmutableStackFactory { /** * @since 6.0 */ ImmutableStack empty(); /** * Same as {@link #empty()}. */ ImmutableStack of(); /** * Same as {@link #empty()}. */ ImmutableStack with(); /** * Same as {@link #with(Object)}. */ ImmutableStack of(T element); ImmutableStack with(T element); /** * Same as {@link #with(Object[])}. */ ImmutableStack of(T... elements); ImmutableStack with(T... elements); /** * Same as {@link #withAll(Iterable)}. */ ImmutableStack ofAll(Iterable items); ImmutableStack withAll(Iterable items); /** * @since 10.0. */ default ImmutableStack fromStream(Stream stream) { return Stacks.mutable.fromStream(stream).toImmutable(); } /** * Same as {@link #withReversed(Object[])}. */ ImmutableStack ofReversed(T... elements); ImmutableStack withReversed(T... elements); /** * Same as {@link #withAllReversed(Iterable)}. */ ImmutableStack ofAllReversed(Iterable items); ImmutableStack withAllReversed(Iterable items); } MutableStackFactory.java000066400000000000000000000037571407344533200417440ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/stack/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.factory.stack; import java.util.stream.Stream; import org.eclipse.collections.api.stack.MutableStack; public interface MutableStackFactory { /** * @since 6.0 */ MutableStack empty(); /** * Same as {@link #empty()}. */ default MutableStack of() { return this.empty(); } /** * Same as {@link #empty()}. */ default MutableStack with() { return this.empty(); } /** * Same as {@link #with(Object[])}. */ default MutableStack of(T... elements) { return this.with(elements); } MutableStack with(T... elements); /** * Same as {@link #withAll(Iterable)}. */ default MutableStack ofAll(Iterable elements) { return this.withAll(elements); } MutableStack withAll(Iterable elements); /** * @since 10.0. */ MutableStack fromStream(Stream stream); /** * Same as {@link #withReversed(Object[])}. */ default MutableStack ofReversed(T... elements) { return this.withReversed(elements); } MutableStack withReversed(T... elements); /** * Same as {@link #withAllReversed(Iterable)}. */ default MutableStack ofAllReversed(Iterable items) { return this.withAllReversed(items); } MutableStack withAllReversed(Iterable items); } package-info.java000066400000000000000000000021511407344533200403440ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/factory/stack/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains Factory API for {@link org.eclipse.collections.api.stack.ImmutableStack} and {@link org.eclipse.collections.api.stack.MutableStack}. *

* This package contains 2 interfaces: *

    *
  • * {@link org.eclipse.collections.api.factory.stack.ImmutableStackFactory} - Contains Factory API for {@link org.eclipse.collections.api.stack.ImmutableStack}. *
  • *
  • * {@link org.eclipse.collections.api.factory.stack.MutableStackFactory} - Contains Factory API for {@link org.eclipse.collections.api.stack.MutableStack}. *
  • *
*/ package org.eclipse.collections.api.factory.stack; iterator/000077500000000000000000000000001407344533200342335ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/apipackage-info.java000066400000000000000000000012641407344533200374250ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/iterator/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains primitive iterator API. *

* This package contains 8 iterator interfaces one each for boolean, byte, char, int, long, double, short and float. */ package org.eclipse.collections.api.iterator; list/000077500000000000000000000000001407344533200333555ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/apiFixedSizeList.java000066400000000000000000000031571407344533200367540ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/list/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.list; import java.util.Comparator; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.collection.FixedSizeCollection; /** * A FixedSizeList is a list that may be mutated, but cannot grow or shrink in size. The typical * mutation allowed for a FixedSizeList implementation is a working implementation for set(int, T). * This will allow the FixedSizeList to be sorted. */ public interface FixedSizeList extends MutableList, FixedSizeCollection { @Override MutableList with(T element); @Override MutableList without(T element); @Override MutableList withAll(Iterable elements); @Override MutableList withoutAll(Iterable elements); @Override FixedSizeList toReversed(); @Override FixedSizeList tap(Procedure procedure); @Override default FixedSizeList sortThis(Comparator comparator) { this.sort(comparator); return this; } @Override default FixedSizeList sortThis() { return this.sortThis(null); } } ImmutableList.java000066400000000000000000000174371407344533200370070ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/list/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.list; import java.util.List; import org.eclipse.collections.api.block.HashingStrategy; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.predicate.primitive.ObjectIntPredicate; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.collection.ImmutableCollection; import org.eclipse.collections.api.list.primitive.ImmutableBooleanList; import org.eclipse.collections.api.list.primitive.ImmutableByteList; import org.eclipse.collections.api.list.primitive.ImmutableCharList; import org.eclipse.collections.api.list.primitive.ImmutableDoubleList; import org.eclipse.collections.api.list.primitive.ImmutableFloatList; import org.eclipse.collections.api.list.primitive.ImmutableIntList; import org.eclipse.collections.api.list.primitive.ImmutableLongList; import org.eclipse.collections.api.list.primitive.ImmutableShortList; import org.eclipse.collections.api.multimap.list.ImmutableListMultimap; import org.eclipse.collections.api.partition.list.PartitionImmutableList; import org.eclipse.collections.api.tuple.Pair; /** * ImmutableList is the non-modifiable equivalent interface to {@link MutableList}. {@link MutableList#toImmutable()} * will give you an appropriately trimmed implementation of ImmutableList. All ImmutableList implementations must * implement the java.util.List interface so they can satisfy the equals() contract and be compared against other list * structures like FastList or ArrayList. */ public interface ImmutableList extends ImmutableCollection, ListIterable { @Override ImmutableList newWith(T element); @Override ImmutableList newWithout(T element); @Override ImmutableList newWithAll(Iterable elements); @Override ImmutableList newWithoutAll(Iterable elements); @Override ImmutableList tap(Procedure procedure); @Override ImmutableList select(Predicate predicate); @Override

ImmutableList selectWith(Predicate2 predicate, P parameter); @Override ImmutableList reject(Predicate predicate); @Override

ImmutableList rejectWith(Predicate2 predicate, P parameter); @Override PartitionImmutableList partition(Predicate predicate); @Override

PartitionImmutableList partitionWith(Predicate2 predicate, P parameter); @Override ImmutableList selectInstancesOf(Class clazz); @Override ImmutableList collect(Function function); /** * @since 9.1. */ @Override default ImmutableList collectWithIndex(ObjectIntToObjectFunction function) { int[] index = {0}; return this.collect(each -> function.valueOf(each, index[0]++)); } /** * Returns a new ImmutableList with all elements of the collection that return true when evaluating the specified * predicate which is supplied each element and its relative index. * * @since 11.0 */ default ImmutableList selectWithIndex(ObjectIntPredicate predicate) { int[] index = {0}; return this.select(each -> predicate.accept(each, index[0]++)); } /** * Returns a new ImmutableList with all elements of the collection that return false when evaluating the specified * predicate which is supplied each element and its relative index. * * @since 11.0 */ default ImmutableList rejectWithIndex(ObjectIntPredicate predicate) { int[] index = {0}; return this.reject(each -> predicate.accept(each, index[0]++)); } @Override ImmutableBooleanList collectBoolean(BooleanFunction booleanFunction); @Override ImmutableByteList collectByte(ByteFunction byteFunction); @Override ImmutableCharList collectChar(CharFunction charFunction); @Override ImmutableDoubleList collectDouble(DoubleFunction doubleFunction); @Override ImmutableFloatList collectFloat(FloatFunction floatFunction); @Override ImmutableIntList collectInt(IntFunction intFunction); @Override ImmutableLongList collectLong(LongFunction longFunction); @Override ImmutableShortList collectShort(ShortFunction shortFunction); @Override ImmutableList collectWith(Function2 function, P parameter); @Override ImmutableList collectIf(Predicate predicate, Function function); @Override ImmutableList flatCollect(Function> function); /** * @since 9.2 */ @Override default ImmutableList flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override ImmutableListMultimap groupBy(Function function); @Override ImmutableListMultimap groupByEach(Function> function); @Override ImmutableList distinct(); @Override ImmutableList distinct(HashingStrategy hashingStrategy); /** * @since 9.0 */ @Override ImmutableList distinctBy(Function function); @Override ImmutableList> zip(Iterable that); @Override ImmutableList> zipWithIndex(); @Override ImmutableList take(int count); @Override ImmutableList takeWhile(Predicate predicate); @Override ImmutableList drop(int count); @Override ImmutableList dropWhile(Predicate predicate); @Override PartitionImmutableList partitionWhile(Predicate predicate); List castToList(); /** * @see List#subList(int, int) * @since 6.0 */ @Override ImmutableList subList(int fromIndex, int toIndex); @Override ImmutableList toReversed(); /** * Overrides toImmutableList in RichIterable to return this. * * @since 11.0 */ @Override default ImmutableList toImmutableList() { return this; } } ListIterable.java000066400000000000000000000275771407344533200366250ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/list/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.list; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.ListIterator; import java.util.Objects; import java.util.concurrent.ExecutorService; import org.eclipse.collections.api.annotation.Beta; import org.eclipse.collections.api.block.HashingStrategy; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.predicate.primitive.ObjectIntPredicate; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.list.primitive.BooleanList; import org.eclipse.collections.api.list.primitive.ByteList; import org.eclipse.collections.api.list.primitive.CharList; import org.eclipse.collections.api.list.primitive.DoubleList; import org.eclipse.collections.api.list.primitive.FloatList; import org.eclipse.collections.api.list.primitive.IntList; import org.eclipse.collections.api.list.primitive.LongList; import org.eclipse.collections.api.list.primitive.ShortList; import org.eclipse.collections.api.multimap.list.ListMultimap; import org.eclipse.collections.api.ordered.ReversibleIterable; import org.eclipse.collections.api.partition.list.PartitionList; import org.eclipse.collections.api.tuple.Pair; /** * An iterable whose items are ordered and may be accessed directly by index. A reverseForEach * internal iterator is available iterating over the indexed iterable in reverse, starting from * the end and going to the beginning. Additionally, internal iterators are available for batching * style iteration which is useful for parallel processing. */ public interface ListIterable extends ReversibleIterable { /** * Returns the item at the specified position in this list iterable. */ T get(int index); /** * Returns the index of the last occurrence of the specified item * in this list, or -1 if this list does not contain the item. */ int lastIndexOf(Object o); /** * Returns the item at index 0 of the container. If the container is empty, null is returned. If null * is a valid item of the container, then a developer will need to check to see if the container is * empty first. */ @Override T getFirst(); /** * Returns the item at index (size() - 1) of the container. If the container is empty, null is returned. If null * is a valid item of the container, then a developer will need to check to see if the container is * empty first. */ @Override T getLast(); /** * @see List#listIterator() * @since 1.0. */ ListIterator listIterator(); /** * @see List#listIterator(int) * @since 1.0. */ ListIterator listIterator(int index); /** * Converts the ListIterable to an immutable implementation. Returns this for immutable lists. * * @since 5.0 */ ImmutableList toImmutable(); @Override ListIterable tap(Procedure procedure); @Override ListIterable select(Predicate predicate); @Override

ListIterable selectWith(Predicate2 predicate, P parameter); @Override ListIterable reject(Predicate predicate); @Override

ListIterable rejectWith(Predicate2 predicate, P parameter); @Override PartitionList partition(Predicate predicate); @Override

PartitionList partitionWith(Predicate2 predicate, P parameter); @Override ListIterable selectInstancesOf(Class clazz); @Override ListIterable collect(Function function); /** * @since 9.1. */ @Override default ListIterable collectWithIndex(ObjectIntToObjectFunction function) { int[] index = {0}; return this.collect(each -> function.valueOf(each, index[0]++)); } /** * Returns a new ListIterable with all elements of the collection that return true when evaluating the specified * predicate which is supplied each element and its relative index. * * @since 11.0 */ default ListIterable selectWithIndex(ObjectIntPredicate predicate) { int[] index = {0}; return this.select(each -> predicate.accept(each, index[0]++)); } /** * Returns a new ListIterable with all elements of the collection that return false when evaluating the specified * predicate which is supplied each element and its relative index. * * @since 11.0 */ default ListIterable rejectWithIndex(ObjectIntPredicate predicate) { int[] index = {0}; return this.select(each -> predicate.accept(each, index[0]++)); } @Override BooleanList collectBoolean(BooleanFunction booleanFunction); @Override ByteList collectByte(ByteFunction byteFunction); @Override CharList collectChar(CharFunction charFunction); @Override DoubleList collectDouble(DoubleFunction doubleFunction); @Override FloatList collectFloat(FloatFunction floatFunction); @Override IntList collectInt(IntFunction intFunction); @Override LongList collectLong(LongFunction longFunction); @Override ShortList collectShort(ShortFunction shortFunction); @Override ListIterable collectWith(Function2 function, P parameter); @Override ListIterable collectIf(Predicate predicate, Function function); @Override ListIterable flatCollect(Function> function); /** * @since 9.2 */ @Override default ListIterable flatCollectWith( Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override ListMultimap groupBy(Function function); @Override ListMultimap groupByEach(Function> function); /** * Returns a new {@code ListIterable} containing the distinct elements in this list. *

* Conceptually similar to {@link #toSet()}.{@link #toList()} but retains the original order. If an element appears * multiple times in this list, the first one will be copied into the result. * * @return {@code ListIterable} of distinct elements * @since 3.0 */ @Override ListIterable distinct(); /** * Returns a new {@code ListIterable} containing the distinct elements in this list. Takes a HashingStrategy. * * @return {@code ListIterable} of distinct elements * @since 7.0 */ ListIterable distinct(HashingStrategy hashingStrategy); /** * Returns a new {@code ListIterable} containing the distinct elements in this list. * The specified function will be used to create a HashingStrategy to unique the elements. * * @see ListIterable#distinct(HashingStrategy) * @since 9.0 */ ListIterable distinctBy(Function function); @Override ListIterable> zip(Iterable that); @Override ListIterable> zipWithIndex(); @Override ListIterable take(int count); /** * Returns the initial elements that satisfy the Predicate. Short circuits at the first element which does not * satisfy the Predicate. * * @since 3.0 */ @Override ListIterable takeWhile(Predicate predicate); @Override ListIterable drop(int count); /** * Returns the final elements that do not satisfy the Predicate. Short circuits at the first element which does * satisfy the Predicate. * * @since 3.0 */ @Override ListIterable dropWhile(Predicate predicate); /** * Returns a Partition of the initial elements that satisfy the Predicate and the remaining elements. Short circuits at the first element which does * satisfy the Predicate. * * @since 3.0 */ @Override PartitionList partitionWhile(Predicate predicate); @Override ListIterable toReversed(); /** * Returns a parallel iterable of this ListIterable. * * @since 6.0 */ @Beta ParallelListIterable asParallel(ExecutorService executorService, int batchSize); /** * Searches for the specified object using the binary search algorithm. The list must be sorted into ascending * order according to the specified comparator. * * @see Collections#binarySearch(List, Object, Comparator) */ default int binarySearch(T key, Comparator comparator) { return Collections.binarySearch((List) this, key, comparator); } /** * Searches for the specified object using the binary search algorithm. The elements in this list must implement * Comparable and the list must be sorted into ascending order. * * @see Collections#binarySearch(List, Object) */ default int binarySearch(T key) { return Collections.binarySearch((List>) this, key); } /** * Follows the same general contract as {@link List#equals(Object)}. */ @Override boolean equals(Object o); /** * Follows the same general contract as {@link List#hashCode()}. */ @Override int hashCode(); /** * @see List#subList(int, int) * @since 6.0 */ ListIterable subList(int fromIndex, int toIndex); /** * Iterates over this ListIterable and the other ListIterable together passing * the elements of each list as parameters to the specified procedure. * * @since 10.3 */ default void forEachInBoth(ListIterable other, Procedure2 procedure) { Objects.requireNonNull(other); if (this.size() == other.size()) { this.forEachWithIndex((each, index) -> procedure.value(each, other.get(index))); } else { throw new IllegalArgumentException("Attempt to call forEachInBoth with two Lists of different sizes :" + this.size() + ':' + other.size()); } } } MultiReaderList.java000066400000000000000000000056371407344533200373040ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/list/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.list; import java.util.Comparator; import java.util.Random; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.procedure.Procedure; /** * A MultiReaderList provides thread-safe iteration for a list through methods {@code withReadLockAndDelegate()} and {@code withWriteLockAndDelegate()}. * * @since 10.0. */ public interface MultiReaderList extends MutableList { void withReadLockAndDelegate(Procedure> procedure); void withWriteLockAndDelegate(Procedure> procedure); @Override default MultiReaderList sortThis(Comparator comparator) { this.sort(comparator); return this; } @Override default MultiReaderList sortThis() { return this.sortThis(null); } @Override > MultiReaderList sortThisBy(Function function); @Override MultiReaderList sortThisByInt(IntFunction function); @Override MultiReaderList sortThisByBoolean(BooleanFunction function); @Override MultiReaderList sortThisByChar(CharFunction function); @Override MultiReaderList sortThisByByte(ByteFunction function); @Override MultiReaderList sortThisByShort(ShortFunction function); @Override MultiReaderList sortThisByFloat(FloatFunction function); @Override MultiReaderList sortThisByLong(LongFunction function); @Override MultiReaderList sortThisByDouble(DoubleFunction function); @Override MultiReaderList reverseThis(); @Override MultiReaderList shuffleThis(); @Override MultiReaderList shuffleThis(Random random); } MutableList.java000066400000000000000000000273551407344533200364610ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/list/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.list; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Random; import org.eclipse.collections.api.block.HashingStrategy; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.predicate.primitive.ObjectIntPredicate; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.collection.MutableCollection; import org.eclipse.collections.api.factory.Lists; import org.eclipse.collections.api.list.primitive.MutableBooleanList; import org.eclipse.collections.api.list.primitive.MutableByteList; import org.eclipse.collections.api.list.primitive.MutableCharList; import org.eclipse.collections.api.list.primitive.MutableDoubleList; import org.eclipse.collections.api.list.primitive.MutableFloatList; import org.eclipse.collections.api.list.primitive.MutableIntList; import org.eclipse.collections.api.list.primitive.MutableLongList; import org.eclipse.collections.api.list.primitive.MutableShortList; import org.eclipse.collections.api.multimap.list.MutableListMultimap; import org.eclipse.collections.api.partition.list.PartitionMutableList; import org.eclipse.collections.api.tuple.Pair; /** * A MutableList is an extension of java.util.List which provides methods matching the Smalltalk Collection protocol. */ public interface MutableList extends MutableCollection, List, Cloneable, ListIterable { @Override default MutableList with(T element) { this.add(element); return this; } @Override default MutableList without(T element) { this.remove(element); return this; } @Override default MutableList withAll(Iterable elements) { this.addAllIterable(elements); return this; } @Override default MutableList withoutAll(Iterable elements) { this.removeAllIterable(elements); return this; } @Override MutableList newEmpty(); MutableList clone(); @Override default MutableList tap(Procedure procedure) { this.forEach(procedure); return this; } @Override default MutableList select(Predicate predicate) { return this.select(predicate, this.newEmpty()); } @Override default

MutableList selectWith(Predicate2 predicate, P parameter) { return this.selectWith(predicate, parameter, this.newEmpty()); } @Override default MutableList reject(Predicate predicate) { return this.reject(predicate, this.newEmpty()); } @Override default

MutableList rejectWith(Predicate2 predicate, P parameter) { return this.rejectWith(predicate, parameter, this.newEmpty()); } @Override PartitionMutableList partition(Predicate predicate); @Override

PartitionMutableList partitionWith(Predicate2 predicate, P parameter); @Override MutableList selectInstancesOf(Class clazz); @Override default MutableList collect(Function function) { return this.collect(function, Lists.mutable.withInitialCapacity(this.size())); } /** * @since 9.1. */ @Override default MutableList collectWithIndex(ObjectIntToObjectFunction function) { int[] index = {0}; return this.collect(each -> function.valueOf(each, index[0]++)); } /** * Returns a new MutableList with all elements of the collection that return true when evaluating the specified * predicate which is supplied each element and its relative index. * * @since 11.0 */ default MutableList selectWithIndex(ObjectIntPredicate predicate) { int[] index = {0}; return this.select(each -> predicate.accept(each, index[0]++)); } /** * Returns a new MutableList with all elements of the collection that return false when evaluating the specified * predicate which is supplied each element and its relative index. * * @since 11.0 */ default MutableList rejectWithIndex(ObjectIntPredicate predicate) { int[] index = {0}; return this.reject(each -> predicate.accept(each, index[0]++)); } @Override MutableBooleanList collectBoolean(BooleanFunction booleanFunction); @Override MutableByteList collectByte(ByteFunction byteFunction); @Override MutableCharList collectChar(CharFunction charFunction); @Override MutableDoubleList collectDouble(DoubleFunction doubleFunction); @Override MutableFloatList collectFloat(FloatFunction floatFunction); @Override MutableIntList collectInt(IntFunction intFunction); @Override MutableLongList collectLong(LongFunction longFunction); @Override MutableShortList collectShort(ShortFunction shortFunction); @Override default MutableList collectWith(Function2 function, P parameter) { return this.collectWith(function, parameter, Lists.mutable.withInitialCapacity(this.size())); } @Override default MutableList collectIf(Predicate predicate, Function function) { return this.collectIf(predicate, function, Lists.mutable.empty()); } @Override default MutableList flatCollect(Function> function) { return this.flatCollect(function, Lists.mutable.withInitialCapacity(this.size())); } /** * @since 9.2 */ @Override default MutableList flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } /** * Returns a new {@code ListIterable} containing the distinct elements in this list. * * @since 7.0 */ @Override MutableList distinct(); /** * Returns a new {@code ListIterable} containing the distinct elements in this list. Takes HashingStrategy. * * @since 7.0 */ @Override MutableList distinct(HashingStrategy hashingStrategy); /** * @since 9.0 */ @Override MutableList distinctBy(Function function); /** * Sorts the internal data structure of this list and returns the list itself as a convenience. * * @since 10.0 - Added default implementation. */ default MutableList sortThis(Comparator comparator) { this.sort(comparator); return this; } /** * Sorts the internal data structure of this list and returns the list itself as a convenience. * * @since 10.0 - Added default implementation. */ default MutableList sortThis() { return this.sortThis(null); } /** * Sorts the internal data structure of this list based on the natural order of the attribute returned by {@code * function}. */ > MutableList sortThisBy(Function function); /** * @since 6.0 */ MutableList sortThisByInt(IntFunction function); /** * @since 6.0 */ MutableList sortThisByBoolean(BooleanFunction function); /** * @since 6.0 */ MutableList sortThisByChar(CharFunction function); /** * @since 6.0 */ MutableList sortThisByByte(ByteFunction function); /** * @since 6.0 */ MutableList sortThisByShort(ShortFunction function); /** * @since 6.0 */ MutableList sortThisByFloat(FloatFunction function); /** * @since 6.0 */ MutableList sortThisByLong(LongFunction function); /** * @since 6.0 */ MutableList sortThisByDouble(DoubleFunction function); @Override MutableList subList(int fromIndex, int toIndex); /** * Returns an unmodifiable view of the list. * * @return an unmodifiable view of this list */ @Override MutableList asUnmodifiable(); @Override MutableList asSynchronized(); /** * Returns an immutable copy of this list. If the list is immutable, it returns itself. */ @Override default ImmutableList toImmutable() { return Lists.immutable.withAll(this); } @Override MutableListMultimap groupBy(Function function); @Override MutableListMultimap groupByEach(Function> function); @Override MutableList> zip(Iterable that); @Override MutableList> zipWithIndex(); @Override MutableList take(int count); @Override MutableList takeWhile(Predicate predicate); @Override MutableList drop(int count); @Override MutableList dropWhile(Predicate predicate); @Override PartitionMutableList partitionWhile(Predicate predicate); /** * Returns a new MutableList in reverse order. */ @Override default MutableList toReversed() { return this.toList().reverseThis(); } /** * Mutates this list by reversing its order and returns the current list as a result. */ default MutableList reverseThis() { Collections.reverse(this); return this; } /** * Mutates this list by shuffling its elements. */ default MutableList shuffleThis() { Collections.shuffle(this); return this; } /** * Mutates this list by shuffling its elements using the specified random. */ default MutableList shuffleThis(Random random) { Collections.shuffle(this, random); return this; } /** * Converts the MutableList to the default ImmutableList implementation. * * @since 11.0 */ @Override default ImmutableList toImmutableList() { return this.toImmutable(); } } ParallelListIterable.java000066400000000000000000000121321407344533200402570ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/list/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.list; import org.eclipse.collections.api.ParallelIterable; import org.eclipse.collections.api.annotation.Beta; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.multimap.list.ListMultimap; import org.eclipse.collections.api.set.ParallelUnsortedSetIterable; /** * A ParallelIterable is RichIterable which will defer evaluation for certain methods like select, reject, collect, etc. * Any methods that do not return a ParallelIterable when called will cause evaluation to be forced. Evaluation occurs * in parallel. All code blocks passed in must be stateless or thread-safe. * * @since 5.0 */ @Beta public interface ParallelListIterable extends ParallelIterable { @Override ParallelUnsortedSetIterable asUnique(); /** * Creates a parallel iterable for selecting elements from the current iterable. */ @Override ParallelListIterable select(Predicate predicate); @Override

ParallelListIterable selectWith(Predicate2 predicate, P parameter); /** * Creates a parallel iterable for rejecting elements from the current iterable. */ @Override ParallelListIterable reject(Predicate predicate); @Override

ParallelListIterable rejectWith(Predicate2 predicate, P parameter); @Override ParallelListIterable selectInstancesOf(Class clazz); /** * Creates a parallel iterable for collecting elements from the current iterable. */ @Override ParallelListIterable collect(Function function); @Override ParallelListIterable collectWith(Function2 function, P parameter); /** * Creates a parallel iterable for selecting and collecting elements from the current iterable. */ @Override ParallelListIterable collectIf(Predicate predicate, Function function); /** * Creates a parallel flattening iterable for the current iterable. */ @Override ParallelListIterable flatCollect(Function> function); @Override ListMultimap groupBy(Function function); @Override ListMultimap groupByEach(Function> function); // /** // * Returns a parallel BooleanIterable which will transform the underlying iterable data to boolean values based on the booleanFunction. // */ // ParallelBooleanIterable collectBoolean(BooleanFunction booleanFunction); // // /** // * Returns a parallel ByteIterable which will transform the underlying iterable data to byte values based on the byteFunction. // */ // ParallelByteIterable collectByte(ByteFunction byteFunction); // // /** // * Returns a parallel CharIterable which will transform the underlying iterable data to char values based on the charFunction. // */ // ParallelCharIterable collectChar(CharFunction charFunction); // // /** // * Returns a parallel DoubleIterable which will transform the underlying iterable data to double values based on the doubleFunction. // */ // ParallelDoubleIterable collectDouble(DoubleFunction doubleFunction); // // /** // * Returns a parallel FloatIterable which will transform the underlying iterable data to float values based on the floatFunction. // */ // ParallelFloatIterable collectFloat(FloatFunction floatFunction); // // /** // * Returns a parallel IntIterable which will transform the underlying iterable data to int values based on the intFunction. // */ // ParallelIntIterable collectInt(IntFunction intFunction); // // /** // * Returns a parallel LongIterable which will transform the underlying iterable data to long values based on the longFunction. // */ // ParallelLongIterable collectLong(LongFunction longFunction); // // /** // * Returns a parallel ShortIterable which will transform the underlying iterable data to short values based on the shortFunction. // */ // ParallelShortIterable collectShort(ShortFunction shortFunction); } package-info.java000066400000000000000000000033041407344533200365440ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/list/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for list API which enhance the performance and functionality of {@link java.util.List}. *

* This package contains 5 interfaces: *

    *
  • * {@link org.eclipse.collections.api.list.ListIterable} - an {@link java.lang.Iterable} which contains items that are ordered and may be accessed directly by index. *
  • *
  • * {@link org.eclipse.collections.api.list.MutableList} - an implementation of a JCF List which provides internal iterator methods matching the Smalltalk Collection protocol. *
  • *
  • * {@link org.eclipse.collections.api.list.ImmutableList} - the non-modifiable equivalent interface to {@link org.eclipse.collections.api.list.MutableList}. *
  • *
  • * {@link org.eclipse.collections.api.list.FixedSizeList} - a list that may be mutated, but cannot grow or shrink in size. *
  • *
  • * {@link org.eclipse.collections.api.list.ParallelListIterable} - a {@link org.eclipse.collections.api.RichIterable} which will defer evaluation for certain methods like select, reject, collect, etc. When evaluation occurs it is in parallel. *
  • *
*/ package org.eclipse.collections.api.list; primitive/000077500000000000000000000000001407344533200353655ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/listpackage-info.java000066400000000000000000000013321407344533200405530ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/list/primitive/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains mutable and immutable primitive list API. *

* A primitive list is similar to a {@link org.eclipse.collections.api.list.ListIterable}, but is memory-optimized for primitives. */ package org.eclipse.collections.api.list.primitive; eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/map/000077500000000000000000000000001407344533200332365ustar00rootroot00000000000000ConcurrentMutableMap.java000066400000000000000000000026231407344533200401170ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/map/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.map; import java.util.Map; import java.util.concurrent.ConcurrentMap; import org.eclipse.collections.api.block.procedure.Procedure; /** * A ConcurrentMutableMap provides an api which combines and supports both MutableMap and ConcurrentMap. */ public interface ConcurrentMutableMap extends MutableMap, ConcurrentMap { @Override ConcurrentMutableMap tap(Procedure procedure); @Override default V getOrDefault(Object key, V defaultValue) { return this.getIfAbsentValue((K) key, defaultValue); } @Override default ConcurrentMutableMap withMap(Map map) { this.putAll(map); return this; } @Override default ConcurrentMutableMap withMapIterable(MapIterable mapIterable) { this.putAllMapIterable(mapIterable); return this; } } FixedSizeMap.java000066400000000000000000000054051407344533200363560ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/map/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.map; import java.util.Map; import java.util.Set; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; /** * A FixedSizeMap is a map that may be mutated, but cannot grow or shrink in size. */ public interface FixedSizeMap extends MutableMap { /** * @throws UnsupportedOperationException the {@code clear} operation is not supported by this map. */ @Override void clear(); /** * @throws UnsupportedOperationException the {@code put} operation is not supported by this map. */ @Override V put(K key, V value); /** * @throws UnsupportedOperationException the {@code putAll} operation is not supported by this map. */ @Override void putAll(Map map); /** * @throws UnsupportedOperationException the {@code remove} operation is not supported by this map. */ @Override V remove(Object key); /** * @throws UnsupportedOperationException the {@code removeKey} operation is not supported by this map. */ @Override V removeKey(K key); /** * @throws UnsupportedOperationException the {@code removeAllKeys} operation is not supported by this map. */ @Override boolean removeAllKeys(Set keys); /** * @throws UnsupportedOperationException the {@code removeIf} operation is not supported by this map. */ @Override boolean removeIf(Predicate2 predicate); @Override FixedSizeMap tap(Procedure procedure); @Override default FixedSizeMap withMap(Map map) { throw new UnsupportedOperationException("Cannot call withMap() on " + this.getClass().getSimpleName()); } @Override default FixedSizeMap withMapIterable(MapIterable mapIterable) { throw new UnsupportedOperationException("Cannot call withMapIterable() on " + this.getClass().getSimpleName()); } @Override default void putAllMapIterable(MapIterable mapIterable) { throw new UnsupportedOperationException("Cannot call putAllMapIterable() on " + this.getClass().getSimpleName()); } } ImmutableMap.java000066400000000000000000000210171407344533200364000ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/map/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.map; import java.util.Map; import org.eclipse.collections.api.bag.ImmutableBag; import org.eclipse.collections.api.bag.primitive.ImmutableBooleanBag; import org.eclipse.collections.api.bag.primitive.ImmutableByteBag; import org.eclipse.collections.api.bag.primitive.ImmutableCharBag; import org.eclipse.collections.api.bag.primitive.ImmutableDoubleBag; import org.eclipse.collections.api.bag.primitive.ImmutableFloatBag; import org.eclipse.collections.api.bag.primitive.ImmutableIntBag; import org.eclipse.collections.api.bag.primitive.ImmutableLongBag; import org.eclipse.collections.api.bag.primitive.ImmutableShortBag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.factory.Maps; import org.eclipse.collections.api.multimap.bag.ImmutableBagMultimap; import org.eclipse.collections.api.multimap.set.ImmutableSetMultimap; import org.eclipse.collections.api.ordered.OrderedIterable; import org.eclipse.collections.api.partition.bag.PartitionImmutableBag; import org.eclipse.collections.api.set.ImmutableSet; import org.eclipse.collections.api.tuple.Pair; /** * An ImmutableMap is different than a JCF Map but in that it has no mutating methods. It shares the read-only * protocol of a JDK Map. */ public interface ImmutableMap extends UnsortedMapIterable, ImmutableMapIterable { @Override ImmutableMap newWithKeyValue(K key, V value); @Override ImmutableMap newWithAllKeyValues(Iterable> keyValues); @Override ImmutableMap newWithMap(Map map); @Override ImmutableMap newWithMapIterable(MapIterable mapIterable); @Override ImmutableMap newWithAllKeyValueArguments(Pair... keyValuePairs); @Override ImmutableMap newWithoutKey(K key); @Override ImmutableMap newWithoutAllKeys(Iterable keys); MutableMap toMap(); @Override ImmutableSetMultimap flip(); @Override ImmutableMap select(Predicate2 predicate); @Override ImmutableMap reject(Predicate2 predicate); @Override ImmutableMap tap(Procedure procedure); @Override ImmutableBag select(Predicate predicate); @Override

ImmutableBag selectWith(Predicate2 predicate, P parameter); @Override ImmutableBag reject(Predicate predicate); @Override

ImmutableBag rejectWith(Predicate2 predicate, P parameter); @Override PartitionImmutableBag partition(Predicate predicate); @Override

PartitionImmutableBag partitionWith(Predicate2 predicate, P parameter); @Override ImmutableBag selectInstancesOf(Class clazz); @Override ImmutableMap collect(Function2> function); @Override ImmutableMap collectValues(Function2 function); @Override ImmutableBag collect(Function function); @Override ImmutableBag collectWith(Function2 function, P parameter); @Override ImmutableBooleanBag collectBoolean(BooleanFunction booleanFunction); @Override ImmutableByteBag collectByte(ByteFunction byteFunction); @Override ImmutableCharBag collectChar(CharFunction charFunction); @Override ImmutableDoubleBag collectDouble(DoubleFunction doubleFunction); @Override ImmutableFloatBag collectFloat(FloatFunction floatFunction); @Override ImmutableIntBag collectInt(IntFunction intFunction); @Override ImmutableLongBag collectLong(LongFunction longFunction); @Override ImmutableShortBag collectShort(ShortFunction shortFunction); @Override ImmutableBag collectIf(Predicate predicate, Function function); @Override ImmutableBag flatCollect(Function> function); /** * @since 9.2 */ @Override default ImmutableBag flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } /** * @deprecated in 6.0. Use {@link OrderedIterable#zip(Iterable)} instead. */ @Override @Deprecated ImmutableBag> zip(Iterable that); /** * @deprecated in 6.0. Use {@link OrderedIterable#zipWithIndex()} instead. */ @Override @Deprecated ImmutableSet> zipWithIndex(); @Override ImmutableBagMultimap groupBy(Function function); @Override ImmutableBagMultimap groupByEach(Function> function); @Override default ImmutableMap groupByUniqueKey(Function function) { MutableMap target = Maps.mutable.withInitialCapacity(this.size()); return this.groupByUniqueKey(function, target).toImmutable(); } @Override default ImmutableMap aggregateInPlaceBy( Function groupBy, Function0 zeroValueFactory, Procedure2 mutatingAggregator) { MutableMap map = Maps.mutable.empty(); this.forEach(each -> { KK key = groupBy.valueOf(each); VV value = map.getIfAbsentPut(key, zeroValueFactory); mutatingAggregator.value(value, each); }); return map.toImmutable(); } @Override default ImmutableMap aggregateBy( Function groupBy, Function0 zeroValueFactory, Function2 nonMutatingAggregator) { MutableMap map = this.aggregateBy( groupBy, zeroValueFactory, nonMutatingAggregator, Maps.mutable.empty()); return map.toImmutable(); } @Override default ImmutableMap aggregateBy( Function keyFunction, Function valueFunction, Function0 zeroValueFactory, Function2 nonMutatingAggregator) { MutableMap map = Maps.mutable.empty(); this.forEachKeyValue((key, value) -> { map.updateValueWith(keyFunction.valueOf(key), zeroValueFactory, nonMutatingAggregator, valueFunction.valueOf(value)); }); return map.toImmutable(); } @Override ImmutableMap flipUniqueValues(); } ImmutableMapIterable.java000066400000000000000000000141511407344533200400510ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/map/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.map; import java.util.Map; import org.eclipse.collections.api.bag.ImmutableBag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.collection.ImmutableCollection; import org.eclipse.collections.api.factory.Maps; import org.eclipse.collections.api.multimap.ImmutableMultimap; import org.eclipse.collections.api.partition.PartitionImmutableCollection; import org.eclipse.collections.api.tuple.Pair; public interface ImmutableMapIterable extends MapIterable { Map castToMap(); ImmutableMapIterable newWithKeyValue(K key, V value); ImmutableMapIterable newWithAllKeyValues(Iterable> keyValues); ImmutableMapIterable newWithMap(Map map); ImmutableMapIterable newWithMapIterable(MapIterable mapIterable); ImmutableMapIterable newWithAllKeyValueArguments(Pair... keyValuePairs); ImmutableMapIterable newWithoutKey(K key); ImmutableMapIterable newWithoutAllKeys(Iterable keys); // TODO // ImmutableSetIterable keySet(); @Override ImmutableMapIterable tap(Procedure procedure); @Override ImmutableMapIterable flipUniqueValues(); @Override ImmutableMultimap flip(); @Override ImmutableMapIterable select(Predicate2 predicate); @Override ImmutableMapIterable reject(Predicate2 predicate); @Override ImmutableMapIterable collect(Function2> function); @Override ImmutableMapIterable collectValues(Function2 function); @Override ImmutableCollection select(Predicate predicate); @Override

ImmutableCollection selectWith(Predicate2 predicate, P parameter); @Override ImmutableCollection reject(Predicate predicate); @Override

ImmutableCollection rejectWith(Predicate2 predicate, P parameter); @Override PartitionImmutableCollection partition(Predicate predicate); @Override ImmutableCollection selectInstancesOf(Class clazz); /** * @since 9.0 */ @Override default ImmutableBag countBy(Function function) { return this.asLazy().collect(function).toBag().toImmutable(); } /** * @since 9.0 */ @Override default ImmutableBag countByWith(Function2 function, P parameter) { return this.asLazy().collectWith(function, parameter).toBag().toImmutable(); } /** * @since 10.0.0 */ @Override default ImmutableBag countByEach(Function> function) { return this.asLazy().flatCollect(function).toBag().toImmutable(); } @Override ImmutableMultimap groupBy(Function function); @Override ImmutableMultimap groupByEach(Function> function); @Override ImmutableMapIterable groupByUniqueKey(Function function); @Override ImmutableCollection> zip(Iterable that); @Override ImmutableCollection> zipWithIndex(); @Override default ImmutableMapIterable aggregateInPlaceBy( Function groupBy, Function0 zeroValueFactory, Procedure2 mutatingAggregator) { MutableMap map = Maps.mutable.empty(); this.forEach(each -> { KK key = groupBy.valueOf(each); VV value = map.getIfAbsentPut(key, zeroValueFactory); mutatingAggregator.value(value, each); }); return map.toImmutable(); } @Override default ImmutableMapIterable aggregateBy( Function groupBy, Function0 zeroValueFactory, Function2 nonMutatingAggregator) { MutableMap map = this.aggregateBy( groupBy, zeroValueFactory, nonMutatingAggregator, Maps.mutable.empty()); return map.toImmutable(); } @Override default ImmutableMapIterable aggregateBy( Function keyFunction, Function valueFunction, Function0 zeroValueFactory, Function2 nonMutatingAggregator) { MutableMap map = Maps.mutable.empty(); this.forEachKeyValue((key, value) -> map.updateValueWith( keyFunction.valueOf(key), zeroValueFactory, nonMutatingAggregator, valueFunction.valueOf(value))); return map.toImmutable(); } } ImmutableOrderedMap.java000066400000000000000000000155671407344533200377220ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/map/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.map; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.list.ImmutableList; import org.eclipse.collections.api.list.primitive.ImmutableBooleanList; import org.eclipse.collections.api.list.primitive.ImmutableByteList; import org.eclipse.collections.api.list.primitive.ImmutableCharList; import org.eclipse.collections.api.list.primitive.ImmutableDoubleList; import org.eclipse.collections.api.list.primitive.ImmutableFloatList; import org.eclipse.collections.api.list.primitive.ImmutableIntList; import org.eclipse.collections.api.list.primitive.ImmutableLongList; import org.eclipse.collections.api.list.primitive.ImmutableShortList; import org.eclipse.collections.api.multimap.list.ImmutableListMultimap; import org.eclipse.collections.api.partition.list.PartitionImmutableList; import org.eclipse.collections.api.tuple.Pair; public interface ImmutableOrderedMap extends OrderedMap, ImmutableMapIterable { @Override ImmutableOrderedMap tap(Procedure procedure); @Override ImmutableOrderedMap flipUniqueValues(); @Override ImmutableListMultimap flip(); @Override ImmutableOrderedMap select(Predicate2 predicate); @Override ImmutableOrderedMap reject(Predicate2 predicate); @Override ImmutableOrderedMap collect(Function2> function); @Override ImmutableOrderedMap collectValues(Function2 function); @Override ImmutableOrderedMap toReversed(); @Override ImmutableOrderedMap take(int count); @Override ImmutableOrderedMap takeWhile(Predicate predicate); @Override ImmutableOrderedMap drop(int count); @Override ImmutableOrderedMap dropWhile(Predicate predicate); @Override PartitionImmutableList partitionWhile(Predicate predicate); @Override ImmutableList distinct(); @Override ImmutableList select(Predicate predicate); @Override

ImmutableList selectWith(Predicate2 predicate, P parameter); @Override ImmutableList reject(Predicate predicate); @Override

ImmutableList rejectWith(Predicate2 predicate, P parameter); @Override PartitionImmutableList partition(Predicate predicate); @Override

PartitionImmutableList partitionWith(Predicate2 predicate, P parameter); @Override ImmutableBooleanList collectBoolean(BooleanFunction booleanFunction); @Override ImmutableByteList collectByte(ByteFunction byteFunction); @Override ImmutableCharList collectChar(CharFunction charFunction); @Override ImmutableDoubleList collectDouble(DoubleFunction doubleFunction); @Override ImmutableFloatList collectFloat(FloatFunction floatFunction); @Override ImmutableIntList collectInt(IntFunction intFunction); @Override ImmutableLongList collectLong(LongFunction longFunction); @Override ImmutableShortList collectShort(ShortFunction shortFunction); @Override ImmutableList> zip(Iterable that); @Override ImmutableList> zipWithIndex(); @Override ImmutableList collect(Function function); @Override ImmutableList collectWith(Function2 function, P parameter); @Override ImmutableList collectIf(Predicate predicate, Function function); @Override ImmutableList selectInstancesOf(Class clazz); @Override ImmutableList flatCollect(Function> function); /** * @since 9.2 */ @Override default ImmutableList flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override ImmutableListMultimap groupBy(Function function); @Override ImmutableListMultimap groupByEach(Function> function); @Override ImmutableOrderedMap groupByUniqueKey(Function function); @Override ImmutableOrderedMap aggregateInPlaceBy(Function groupBy, Function0 zeroValueFactory, Procedure2 mutatingAggregator); @Override ImmutableOrderedMap aggregateBy(Function groupBy, Function0 zeroValueFactory, Function2 nonMutatingAggregator); @Override default ImmutableOrderedMap aggregateBy( Function keyFunction, Function valueFunction, Function0 zeroValueFactory, Function2 nonMutatingAggregator) { throw new UnsupportedOperationException("Not implemented"); } } MapIterable.java000066400000000000000000000320771407344533200362200ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/map/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.map; import java.util.Map; import java.util.Optional; import java.util.Spliterator; import java.util.Spliterators; import java.util.stream.Stream; import java.util.stream.StreamSupport; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.factory.Maps; import org.eclipse.collections.api.multimap.Multimap; import org.eclipse.collections.api.tuple.Pair; /** * A Read-only Map API, with the minor exception inherited from java.lang.Iterable. The method map.iterator().remove() * will throw an UnsupportedOperationException. */ public interface MapIterable extends RichIterable { /** * @see Map#get(Object) */ V get(Object key); /** * @see Map#containsKey(Object) */ boolean containsKey(Object key); /** * @see Map#containsValue(Object) */ boolean containsValue(Object value); /** * Calls the procedure with each value of the map. *

     *     Set<String> result = UnifiedSet.newSet();
     *     MutableMap<Integer, String> map = this.newMapWithKeysValues(1, "One", 2, "Two", 3, "Three", 4, "Four");
     *     map.forEachValue(new CollectionAddProcedure<String>(result));
     *     Verify.assertSetsEqual(UnifiedSet.newSetWith("One", "Two", "Three", "Four"), result);
     * 
*/ void forEachValue(Procedure procedure); /** * Executes the Procedure for each value of the map and returns {@code this}. * *
     * return peopleByCity.tap(person -> LOGGER.info(person.getName()));
     * 
* * @see #forEach(Procedure) * @since 6.0 */ @Override MapIterable tap(Procedure procedure); /** * Calls the {@code procedure} with each key of the map. *
     *     final Collection<Integer> result = new ArrayList<Integer>();
     *     MutableMap<Integer, String> map = this.newMapWithKeysValues(1, "1", 2, "2", 3, "3");
     *     map.forEachKey(new CollectionAddProcedure<Integer>(result));
     *     Verify.assertContainsAll(result, 1, 2, 3);
     * 
*/ void forEachKey(Procedure procedure); /** * Calls the {@code procedure} with each key-value pair of the map. *
     *     final Collection<String> collection = new ArrayList<String>();
     *     MutableMap<Integer, String> map = this.newMapWithKeysValues(1, "One", 2, "Two", 3, "Three");
     *     map.forEachKeyValue((Integer key, String value) -> collection.add(String.valueOf(key) + value));
     *     Verify.assertContainsAll(collection, "1One", "2Two", "3Three");
     * 
*/ void forEachKeyValue(Procedure2 procedure); /** * Return the MapIterable that is obtained by flipping the direction of this map and making the associations * from value to key. *
     *     MapIterable<Integer, String> map = this.newMapWithKeysValues(1, "1", 2, "2", 3, "3");
     *     MapIterable<String, Integer> result = map.flipUniqueValues();
     *     Assert.assertTrue(result.equals(UnifiedMap.newWithKeysValues("1", 1, "2", 2, "3", 3)));
     * 
* * @throws IllegalStateException if the MapIterable contains duplicate values. * @since 5.0 */ MapIterable flipUniqueValues(); default V getOrDefault(Object key, V defaultValue) { return this.getIfAbsentValue((K) key, defaultValue); } /** * Return the value in the Map that corresponds to the specified key, or if there is no value at the key, return the * result of evaluating the specified Function0. */ V getIfAbsent(K key, Function0 function); /** * Return the value in the Map that corresponds to the specified key, or if there is no value at the key, return {@code value}. */ V getIfAbsentValue(K key, V value); /** * Return the value in the Map that corresponds to the specified key, or if there is no value at the key, return the * result of evaluating the specified function and parameter. */

V getIfAbsentWith(K key, Function function, P parameter); /** * If there is a value in the Map that corresponds to the specified key return the result of applying the specified * Function on the value, otherwise return null. */ A ifPresentApply(K key, Function function); /** * Returns an unmodifiable lazy iterable wrapped around the keySet for the map. */ RichIterable keysView(); /** * Returns an unmodifiable lazy iterable wrapped around the values for the map. */ RichIterable valuesView(); /** * Returns an unmodifiable lazy iterable of key/value pairs wrapped around the entrySet for the map. */ RichIterable> keyValuesView(); /** * Given a map from Domain {@code ->} Range return a multimap from Range {@code ->} Domain. We chose the name 'flip' * rather than 'invert' or 'transpose' since this method does not have the property of applying twice * returns the original. *

* Since the keys in the input are unique, the values in the output are unique, so the return type should * be a SetMultimap. However since SetMultimap and SortedSetMultimap don't inherit from one another, SetMultimap * here does not allow SortedMapIterable to have a SortedSetMultimap return. Thus we compromise and call this * Multimap, even though all implementations will be a SetMultimap or SortedSetMultimap. * * @since 5.0 */ Multimap flip(); /** * For each key and value of the map the predicate is evaluated, if the result of the evaluation is true, * that key and value are returned in a new map. * *

     * MapIterable<City, Person> selected =
     *     peopleByCity.select((city, person) -> city.getName().equals("Anytown") && person.getLastName().equals("Smith"));
     * 
*/ MapIterable select(Predicate2 predicate); /** * For each key and value of the map the predicate is evaluated, if the result of the evaluation is false, * that key and value are returned in a new map. * *
     * MapIterable<City, Person> rejected =
     *     peopleByCity.reject((city, person) -> city.getName().equals("Anytown") && person.getLastName().equals("Smith"));
     * 
*/ MapIterable reject(Predicate2 predicate); /** * For each key and value of the map the function is evaluated. The results of these evaluations are returned in * a new map. The map returned will use the values projected from the function rather than the original values. * *
     * MapIterable<String, String> collected =
     *     peopleByCity.collect((City city, Person person) -> Pair.of(city.getCountry(), person.getAddress().getCity()));
     * 
*/ MapIterable collect(Function2> function); /** * For each key and value of the map the function is evaluated. The results of these evaluations are returned in * a new map. The map returned will use the values projected from the function rather than the original values. * *
     * MapIterable<City, String> collected =
     *     peopleByCity.collectValues((City city, Person person) -> person.getFirstName() + " " + person.getLastName());
     * 
*/ MapIterable collectValues(Function2 function); /** * Return the first key and value of the map for which the predicate evaluates to true when they are given * as arguments. The predicate will only be evaluated until such pair is found or until all of the keys and * values of the map have been used as arguments. That is, there may be keys and values of the map that are * never used as arguments to the predicate. The result is null if predicate does not evaluate to true for * any key/value combination. * *
     * Pair<City, Person> detected =
     *     peopleByCity.detect((City city, Person person) -> city.getName().equals("Anytown") && person.getLastName().equals("Smith"));
     * 
*/ Pair detect(Predicate2 predicate); /** * Return the first key and value of the map as an Optional for which the predicate evaluates to true when * they are given as arguments. The predicate will only be evaluated until such pair is found or until all * of the keys and values of the map have been used as arguments. That is, there may be keys and values of * the map that are never used as arguments to the predicate. * *
     * Optional<Pair<City, Person>> detected =
     *     peopleByCity.detectOptional((city, person)
     *          -> city.getName().equals("Anytown") && person.getLastName().equals("Smith"));
     * 
*/ Optional> detectOptional(Predicate2 predicate); /** * Follows the same general contract as {@link Map#equals(Object)}. */ @Override boolean equals(Object o); /** * Follows the same general contract as {@link Map#hashCode()}. */ @Override int hashCode(); /** * Returns a string with the keys and values of this map separated by commas with spaces and * enclosed in curly braces. Each key and value is separated by an equals sign. * *
     * Assert.assertEquals("{1=1, 2=2, 3=3}", Maps.mutable.with(1, 1, 2, 2, 3, 3).toString());
     * 
* * @return a string representation of this MapIterable * @see java.util.AbstractMap#toString() */ @Override String toString(); ImmutableMapIterable toImmutable(); /** * @since 9.0 */ default Stream stream() { return StreamSupport.stream(this.spliterator(), false); } /** * @since 9.0 */ default Stream parallelStream() { return StreamSupport.stream(this.spliterator(), true); } /** * @since 9.0 */ @Override default Spliterator spliterator() { return Spliterators.spliterator(this.iterator(), (long) this.size(), 0); } /** * Applies an aggregate function over the map grouping results into a map based on the specific key and value groupBy functions. * Aggregate results are allowed to be immutable as they will be replaced in place in the map. A second function * specifies the initial "zero" aggregate value to work with. * *
     * MapIterable<String, Interval> map = Maps.mutable.with("oneToFive", Interval.fromTo(1, 5), "sixToNine", Interval.fromTo(6, 9));
     *
     * MapIterable<String, Long> result = map.aggregateBy(
     *         eachKey -> {
     *             return eachKey.equals("oneToFive")  ? "lessThanSix" : "greaterOrEqualsToSix";
     *         },
     *         each -> each.sumOfInt(Integer::intValue),
     *         () -> 0L,
     *         (argument1, argument2) -> argument1 + argument2);
     *
     * MapIterable<String, Long> expected =
     *         Maps.mutable.with("lessThanSix", Interval.fromTo(1, 5).sumOfInt(Integer::intValue),
     *                 "greaterOrEqualsToSix", Interval.fromTo(6, 9).sumOfInt(Integer::intValue));
     * Assert.assertEquals(expected, result);
     * 
* * @since 10.3.0 */ default MapIterable aggregateBy( Function keyFunction, Function valueFunction, Function0 zeroValueFactory, Function2 nonMutatingAggregator) { MutableMap map = Maps.mutable.empty(); this.forEachKeyValue((key, value) -> { map.updateValueWith( keyFunction.valueOf(key), zeroValueFactory, nonMutatingAggregator, valueFunction.valueOf(value)); }); return map; } } MutableMap.java000066400000000000000000000223221407344533200360520ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/map/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.map; import java.util.Map; import org.eclipse.collections.api.bag.MutableBag; import org.eclipse.collections.api.bag.primitive.MutableBooleanBag; import org.eclipse.collections.api.bag.primitive.MutableByteBag; import org.eclipse.collections.api.bag.primitive.MutableCharBag; import org.eclipse.collections.api.bag.primitive.MutableDoubleBag; import org.eclipse.collections.api.bag.primitive.MutableFloatBag; import org.eclipse.collections.api.bag.primitive.MutableIntBag; import org.eclipse.collections.api.bag.primitive.MutableLongBag; import org.eclipse.collections.api.bag.primitive.MutableShortBag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.factory.Maps; import org.eclipse.collections.api.multimap.bag.MutableBagMultimap; import org.eclipse.collections.api.multimap.set.MutableSetMultimap; import org.eclipse.collections.api.ordered.OrderedIterable; import org.eclipse.collections.api.partition.bag.PartitionMutableBag; import org.eclipse.collections.api.set.MutableSet; import org.eclipse.collections.api.tuple.Pair; /** * A MutableMap is similar to a JCF Map but adds additional useful internal iterator methods. The MutableMap interface * additionally implements some of the methods in the Smalltalk Dictionary protocol. */ public interface MutableMap extends MutableMapIterable, UnsortedMapIterable, Cloneable { /** * Adds all the entries derived from {@code iterable} to {@code this}. The key and value for each entry * is determined by applying the {@code keyFunction} and {@code valueFunction} to each item in * {@code collection}. Any entry in {@code map} that has the same key as an entry in {@code this} * will have its value replaced by that in {@code map}. */ MutableMap collectKeysAndValues( Iterable iterable, Function keyFunction, Function valueFunction); @Override MutableMap newEmpty(); MutableMap clone(); @Override MutableMap asUnmodifiable(); @Override MutableMap asSynchronized(); @Override MutableSetMultimap flip(); @Override MutableMap select(Predicate2 predicate); @Override MutableMap reject(Predicate2 predicate); @Override MutableMap collectValues(Function2 function); @Override MutableMap collect(Function2> function); @Override MutableMap tap(Procedure procedure); @Override MutableBag select(Predicate predicate); @Override

MutableBag selectWith(Predicate2 predicate, P parameter); @Override MutableBag reject(Predicate predicate); @Override

MutableBag rejectWith(Predicate2 predicate, P parameter); @Override PartitionMutableBag partition(Predicate predicate); @Override

PartitionMutableBag partitionWith(Predicate2 predicate, P parameter); @Override MutableBag selectInstancesOf(Class clazz); @Override MutableBag collect(Function function); @Override MutableBag collectWith(Function2 function, P parameter); @Override MutableBooleanBag collectBoolean(BooleanFunction booleanFunction); @Override MutableByteBag collectByte(ByteFunction byteFunction); @Override MutableCharBag collectChar(CharFunction charFunction); @Override MutableDoubleBag collectDouble(DoubleFunction doubleFunction); @Override MutableFloatBag collectFloat(FloatFunction floatFunction); @Override MutableIntBag collectInt(IntFunction intFunction); @Override MutableLongBag collectLong(LongFunction longFunction); @Override MutableShortBag collectShort(ShortFunction shortFunction); @Override MutableBag collectIf(Predicate predicate, Function function); @Override MutableBag flatCollect(Function> function); /** * @since 9.2 */ @Override default MutableBag flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } /** * @deprecated in 6.0. Use {@link OrderedIterable#zip(Iterable)} instead. */ @Override @Deprecated MutableBag> zip(Iterable that); /** * @deprecated in 6.0. Use {@link OrderedIterable#zipWithIndex()} instead. */ @Override @Deprecated MutableSet> zipWithIndex(); @Override MutableBagMultimap groupBy(Function function); @Override MutableBagMultimap groupByEach(Function> function); @Override default MutableMap groupByUniqueKey(Function function) { return this.groupByUniqueKey(function, Maps.mutable.withInitialCapacity(this.size())); } @Override default MutableMap aggregateInPlaceBy( Function groupBy, Function0 zeroValueFactory, Procedure2 mutatingAggregator) { MutableMap map = Maps.mutable.empty(); this.forEach(each -> { KK key = groupBy.valueOf(each); VV value = map.getIfAbsentPut(key, zeroValueFactory); mutatingAggregator.value(value, each); }); return map; } @Override default MutableMap aggregateBy( Function groupBy, Function0 zeroValueFactory, Function2 nonMutatingAggregator) { return this.aggregateBy( groupBy, zeroValueFactory, nonMutatingAggregator, Maps.mutable.empty()); } @Override default MutableMap aggregateBy( Function keyFunction, Function valueFunction, Function0 zeroValueFactory, Function2 nonMutatingAggregator) { MutableMap map = Maps.mutable.empty(); this.forEachKeyValue((key, value) -> { map.updateValueWith(keyFunction.valueOf(key), zeroValueFactory, nonMutatingAggregator, valueFunction.valueOf(value)); }); return map; } @Override MutableMap flipUniqueValues(); @Override MutableMap withKeyValue(K key, V value); @Override default MutableMap withMap(Map map) { this.putAll(map); return this; } @Override default MutableMap withMapIterable(MapIterable mapIterable) { this.putAllMapIterable(mapIterable); return this; } @Override MutableMap withAllKeyValues(Iterable> keyValues); @Override MutableMap withAllKeyValueArguments(Pair... keyValuePairs); @Override MutableMap withoutKey(K key); @Override MutableMap withoutAllKeys(Iterable keys); } MutableMapIterable.java000066400000000000000000000424161407344533200375300ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/map/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.map; import java.util.Map; import java.util.Objects; import java.util.Set; import org.eclipse.collections.api.bag.MutableBag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.collection.MutableCollection; import org.eclipse.collections.api.factory.Maps; import org.eclipse.collections.api.map.primitive.MutableObjectDoubleMap; import org.eclipse.collections.api.map.primitive.MutableObjectLongMap; import org.eclipse.collections.api.multimap.MutableMultimap; import org.eclipse.collections.api.partition.PartitionMutableCollection; import org.eclipse.collections.api.tuple.Pair; /** * @since 6.0 */ public interface MutableMapIterable extends MapIterable, Map { /** * This method allows mutable map the ability to add an element in the form of {@code Pair}. * * @see #put(Object, Object) * @since 9.1.0 */ default V putPair(Pair keyValuePair) { return this.put(keyValuePair.getOne(), keyValuePair.getTwo()); } /** * This method allows mutable map the ability to add an element in the form of {@code Pair}. * * @return previous value in the map for the key, or null if no value exists for the key. * @see #put(Object, Object) */ default V add(Pair keyValuePair) { return this.putPair(keyValuePair); } /** * Remove an entry from the map at the specified {@code key}. * * @return The value removed from entry at key, or null if not found. * @see #remove(Object) */ V removeKey(K key); /** * Remove entries from the map at the specified {@code keys}. * * @return {@code true} if this map changed as a result of the call * @since 10.0 */ default boolean removeAllKeys(Set keys) { Objects.requireNonNull(keys); int previousSize = this.size(); keys.forEach(this::removeKey); return previousSize != this.size(); } /** * Remove an entry from the map if the {@code predicate} evaluates to true. * * @return true if any entry is removed. * @since 10.0 */ default boolean removeIf(Predicate2 predicate) { return this.entrySet().removeIf(entry -> predicate.accept(entry.getKey(), entry.getValue())); } @Override default V getOrDefault(Object key, V defaultValue) { return this.getIfAbsentValue((K) key, defaultValue); } /** * Get and return the value in the Map at the specified key. Alternatively, if there is no value in the map at the key, * return the result of evaluating the specified Function0, and put that value in the map at the specified key. */ V getIfAbsentPut(K key, Function0 function); /** * Get and return the value in the Map at the specified key. Alternatively, if there is no value in the map at the key, * return the specified value, and put that value in the map at the specified key. * * @since 5.0 */ V getIfAbsentPut(K key, V value); /** * Get and return the value in the Map at the specified key. Alternatively, if there is no value in the map for that key * return the result of evaluating the specified Function using the specified key, and put that value in the * map at the specified key. */ V getIfAbsentPutWithKey(K key, Function function); /** * Get and return the value in the Map at the specified key. Alternatively, if there is no value in the map for that key * return the result of evaluating the specified Function using the specified parameter, and put that value in the * map at the specified key. */

V getIfAbsentPutWith(K key, Function function, P parameter); /** * Looks up the value associated with {@code key}, applies the {@code function} to it, and replaces the value. If there * is no value associated with {@code key}, starts it off with a value supplied by {@code factory}. */ V updateValue(K key, Function0 factory, Function function); /** * Same as {@link #updateValue(Object, Function0, Function)} with a Function2 and specified parameter which is * passed to the function. */

V updateValueWith(K key, Function0 factory, Function2 function, P parameter); /** * This method allows mutable, fixed size, and immutable maps the ability to add elements to their existing * elements. In order to support fixed size maps, a new instance of a map would have to be returned including the * keys and values of the original plus the additional key and value. In the case of mutable maps, the original map * is modified and then returned. In order to use this method properly with mutable and fixed size maps the * following approach must be taken: * *

     * map = map.withKeyValue("new key", "new value");
     * 
* In the case of FixedSizeMap, a new instance will be returned by withKeyValue, and any variables that * previously referenced the original map will need to be redirected to reference the new instance. In the case * of a FastMap or UnifiedMap, you will be replacing the reference to map with map, since FastMap and UnifiedMap * will both return "this" after calling put on themselves. * * @see #put(Object, Object) */ MutableMapIterable withKeyValue(K key, V value); /** * Similar to {@link #putAll(Map)}, but returns this instead of void * * @see #putAll(Map) * * @since 10.3.0 */ default MutableMapIterable withMap(Map map) { this.putAll(map); return this; } default MutableMapIterable withMapIterable(MapIterable mapIterable) { this.putAllMapIterable(mapIterable); return this; } default void putAllMapIterable(MapIterable mapIterable) { mapIterable.forEachKeyValue(this::put); } /** * This method allows mutable, fixed size, and immutable maps the ability to add elements to their existing * elements. In order to support fixed size maps, a new instance of a map would have to be returned including the * keys and values of the original plus all of the additional keys and values. In the case of mutable maps, the * original map is modified and then returned. In order to use this method properly with mutable and fixed size * maps the following approach must be taken: * *
     * map = map.withAllKeyValues(FastList.newListWith(PairImpl.of("new key", "new value")));
     * 
* In the case of FixedSizeMap, a new instance will be returned by withAllKeyValues, and any variables that * previously referenced the original map will need to be redirected to reference the new instance. In the case * of a FastMap or UnifiedMap, you will be replacing the reference to map with map, since FastMap and UnifiedMap * will both return "this" after calling put on themselves. * * @see #put(Object, Object) */ MutableMapIterable withAllKeyValues(Iterable> keyValues); /** * Convenience var-args version of withAllKeyValues * * @see #withAllKeyValues(Iterable) */ MutableMapIterable withAllKeyValueArguments(Pair... keyValuePairs); /** * This method allows mutable, fixed size, and immutable maps the ability to remove elements from their existing * elements. In order to support fixed size maps, a new instance of a map would have to be returned including the * keys and values of the original minus the key and value to be removed. In the case of mutable maps, the original * map is modified and then returned. In order to use this method properly with mutable and fixed size maps the * following approach must be taken: * *
     * map = map.withoutKey("key");
     * 
* In the case of FixedSizeMap, a new instance will be returned by withoutKey, and any variables that previously * referenced the original map will need to be redirected to reference the new instance. In the case of a FastMap * or UnifiedMap, you will be replacing the reference to map with map, since FastMap and UnifiedMap will both return * "this" after calling remove on themselves. * * @see #remove(Object) */ MutableMapIterable withoutKey(K key); /** * This method allows mutable, fixed size, and immutable maps the ability to remove elements from their existing * elements. In order to support fixed size maps, a new instance of a map would have to be returned including the * keys and values of the original minus all of the keys and values to be removed. In the case of mutable maps, the * original map is modified and then returned. In order to use this method properly with mutable and fixed size * maps the following approach must be taken: * *
     * map = map.withoutAllKeys(FastList.newListWith("key1", "key2"));
     * 
* In the case of FixedSizeMap, a new instance will be returned by withoutAllKeys, and any variables that previously * referenced the original map will need to be redirected to reference the new instance. In the case of a FastMap * or UnifiedMap, you will be replacing the reference to map with map, since FastMap and UnifiedMap will both return * "this" after calling remove on themselves. * * @see #remove(Object) */ MutableMapIterable withoutAllKeys(Iterable keys); /** * Creates a new instance of the same type, using the default capacity and growth parameters. */ MutableMapIterable newEmpty(); /** * Returns an unmodifiable view of this map. This is the equivalent of using * {@code Collections.unmodifiableMap(this)} only with a return type that supports the full * iteration protocols available on {@code MutableMapIterable}. Methods which would * mutate the underlying map will throw UnsupportedOperationExceptions. * * @return an unmodifiable view of this map. * @see java.util.Collections#unmodifiableMap(Map) */ MutableMapIterable asUnmodifiable(); /** * Returns a synchronized wrapper backed by this map. This is the equivalent of calling * {@code Collections.synchronizedMap(this)} only with the more feature rich return type of * {@code MutableMapIterable}. *

* The preferred way of iterating over a synchronized map is to use the forEachKey(), forEachValue() * and forEachKeyValue() methods which are properly synchronized internally. *

     *  MutableMap synchedMap = map.asSynchronized();
     *
     *  synchedMap.forEachKey(key -> ... );
     *  synchedMap.forEachValue(value -> ... );
     *  synchedMap.forEachKeyValue((key, value) -> ... );
     * 
*

* If you want to iterate imperatively over the keySet(), values(), or entrySet(), you will * need to protect the iteration by wrapping the code in a synchronized block on the map. * * @see java.util.Collections#synchronizedMap(Map) */ MutableMapIterable asSynchronized(); /** * Returns an immutable copy of this map. * If the map is immutable, it returns itself. */ @Override ImmutableMapIterable toImmutable(); // TODO // MutableSetIterable keySet(); @Override MutableMapIterable tap(Procedure procedure); @Override MutableMapIterable flipUniqueValues(); @Override MutableMultimap flip(); @Override MutableMapIterable select(Predicate2 predicate); @Override MutableMapIterable reject(Predicate2 predicate); @Override MutableMapIterable collect(Function2> function); @Override MutableMapIterable collectValues(Function2 function); @Override MutableCollection select(Predicate predicate); @Override

MutableCollection selectWith(Predicate2 predicate, P parameter); @Override MutableCollection reject(Predicate predicate); @Override

MutableCollection rejectWith(Predicate2 predicate, P parameter); @Override PartitionMutableCollection partition(Predicate predicate); @Override MutableCollection selectInstancesOf(Class clazz); @Override MutableObjectLongMap sumByInt(Function groupBy, IntFunction function); @Override MutableObjectDoubleMap sumByFloat(Function groupBy, FloatFunction function); @Override MutableObjectLongMap sumByLong(Function groupBy, LongFunction function); @Override MutableObjectDoubleMap sumByDouble(Function groupBy, DoubleFunction function); /** * @since 9.0 */ @Override default MutableBag countBy(Function function) { return this.asLazy().collect(function).toBag(); } /** * @since 9.0 */ @Override default MutableBag countByWith(Function2 function, P parameter) { return this.asLazy().collectWith(function, parameter).toBag(); } /** * @since 10.0.0 */ @Override default MutableBag countByEach(Function> function) { return this.asLazy().flatCollect(function).toBag(); } @Override MutableMultimap groupBy(Function function); @Override MutableMultimap groupByEach(Function> function); @Override MutableMapIterable groupByUniqueKey(Function function); @Override MutableCollection> zip(Iterable that); @Override MutableCollection> zipWithIndex(); // TODO: Return MutableMapIterable @Override default MutableMap aggregateInPlaceBy( Function groupBy, Function0 zeroValueFactory, Procedure2 mutatingAggregator) { MutableMap map = Maps.mutable.empty(); this.forEach(each -> { KK key = groupBy.valueOf(each); VV value = map.getIfAbsentPut(key, zeroValueFactory); mutatingAggregator.value(value, each); }); return map; } @Override default MutableMapIterable aggregateBy( Function groupBy, Function0 zeroValueFactory, Function2 nonMutatingAggregator) { return this.aggregateBy( groupBy, zeroValueFactory, nonMutatingAggregator, Maps.mutable.empty()); } @Override default MutableMapIterable aggregateBy( Function keyFunction, Function valueFunction, Function0 zeroValueFactory, Function2 nonMutatingAggregator) { MutableMap map = Maps.mutable.empty(); this.forEachKeyValue((key, value) -> map.updateValueWith( keyFunction.valueOf(key), zeroValueFactory, nonMutatingAggregator, valueFunction.valueOf(value))); return map; } } MutableOrderedMap.java000066400000000000000000000152721407344533200373650ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/map/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.map; import java.util.Map; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.list.primitive.MutableBooleanList; import org.eclipse.collections.api.list.primitive.MutableByteList; import org.eclipse.collections.api.list.primitive.MutableCharList; import org.eclipse.collections.api.list.primitive.MutableDoubleList; import org.eclipse.collections.api.list.primitive.MutableFloatList; import org.eclipse.collections.api.list.primitive.MutableIntList; import org.eclipse.collections.api.list.primitive.MutableLongList; import org.eclipse.collections.api.list.primitive.MutableShortList; import org.eclipse.collections.api.multimap.list.MutableListMultimap; import org.eclipse.collections.api.partition.list.PartitionMutableList; import org.eclipse.collections.api.tuple.Pair; public interface MutableOrderedMap extends OrderedMap, MutableMapIterable { @Override MutableOrderedMap tap(Procedure procedure); @Override MutableOrderedMap flipUniqueValues(); @Override MutableListMultimap flip(); @Override MutableOrderedMap select(Predicate2 predicate); @Override MutableOrderedMap reject(Predicate2 predicate); @Override MutableOrderedMap collect(Function2> function); @Override MutableOrderedMap collectValues(Function2 function); @Override MutableOrderedMap toReversed(); @Override MutableOrderedMap take(int count); @Override MutableOrderedMap takeWhile(Predicate predicate); @Override MutableOrderedMap drop(int count); @Override MutableOrderedMap dropWhile(Predicate predicate); @Override PartitionMutableList partitionWhile(Predicate predicate); @Override MutableList distinct(); @Override MutableList select(Predicate predicate); @Override

MutableList selectWith(Predicate2 predicate, P parameter); @Override MutableList reject(Predicate predicate); @Override

MutableList rejectWith(Predicate2 predicate, P parameter); @Override PartitionMutableList partition(Predicate predicate); @Override

PartitionMutableList partitionWith(Predicate2 predicate, P parameter); @Override MutableBooleanList collectBoolean(BooleanFunction booleanFunction); @Override MutableByteList collectByte(ByteFunction byteFunction); @Override MutableCharList collectChar(CharFunction charFunction); @Override MutableDoubleList collectDouble(DoubleFunction doubleFunction); @Override MutableFloatList collectFloat(FloatFunction floatFunction); @Override MutableIntList collectInt(IntFunction intFunction); @Override MutableLongList collectLong(LongFunction longFunction); @Override MutableShortList collectShort(ShortFunction shortFunction); @Override MutableList> zip(Iterable that); @Override MutableList> zipWithIndex(); @Override MutableList collect(Function function); @Override MutableList collectWith(Function2 function, P parameter); @Override MutableList collectIf(Predicate predicate, Function function); @Override MutableList selectInstancesOf(Class clazz); @Override MutableList flatCollect(Function> function); /** * @since 9.2 */ @Override default MutableList flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override MutableListMultimap groupBy(Function function); @Override MutableListMultimap groupByEach(Function> function); @Override MutableOrderedMap groupByUniqueKey(Function function); @Override MutableOrderedMap withKeyValue(K key, V value); @Override default MutableOrderedMap withMap(Map map) { this.putAll(map); return this; } @Override default MutableOrderedMap withMapIterable(MapIterable mapIterable) { this.putAllMapIterable(mapIterable); return this; } @Override MutableOrderedMap withAllKeyValues(Iterable> keyValues); @Override MutableOrderedMap withAllKeyValueArguments(Pair... keyValuePairs); @Override MutableOrderedMap withoutKey(K key); @Override MutableOrderedMap withoutAllKeys(Iterable keys); @Override MutableOrderedMap asUnmodifiable(); } OrderedMap.java000066400000000000000000000134511407344533200360500ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/map/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.map; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.list.ListIterable; import org.eclipse.collections.api.list.primitive.BooleanList; import org.eclipse.collections.api.list.primitive.ByteList; import org.eclipse.collections.api.list.primitive.CharList; import org.eclipse.collections.api.list.primitive.DoubleList; import org.eclipse.collections.api.list.primitive.FloatList; import org.eclipse.collections.api.list.primitive.IntList; import org.eclipse.collections.api.list.primitive.LongList; import org.eclipse.collections.api.list.primitive.ShortList; import org.eclipse.collections.api.multimap.list.ListMultimap; import org.eclipse.collections.api.ordered.ReversibleIterable; import org.eclipse.collections.api.partition.list.PartitionList; import org.eclipse.collections.api.tuple.Pair; /** * A map whose keys are ordered but not necessarily sorted, for example a linked hash map. */ public interface OrderedMap extends MapIterable, ReversibleIterable { @Override OrderedMap tap(Procedure procedure); @Override OrderedMap flipUniqueValues(); @Override ListMultimap flip(); @Override OrderedMap select(Predicate2 predicate); @Override OrderedMap reject(Predicate2 predicate); @Override OrderedMap collect(Function2> function); @Override OrderedMap collectValues(Function2 function); @Override ImmutableOrderedMap toImmutable(); @Override OrderedMap toReversed(); @Override OrderedMap take(int count); @Override OrderedMap takeWhile(Predicate predicate); @Override OrderedMap drop(int count); @Override OrderedMap dropWhile(Predicate predicate); @Override PartitionList partitionWhile(Predicate predicate); @Override ListIterable distinct(); @Override ListIterable select(Predicate predicate); @Override

ListIterable selectWith(Predicate2 predicate, P parameter); @Override ListIterable reject(Predicate predicate); @Override

ListIterable rejectWith(Predicate2 predicate, P parameter); @Override PartitionList partition(Predicate predicate); @Override

PartitionList partitionWith(Predicate2 predicate, P parameter); @Override BooleanList collectBoolean(BooleanFunction booleanFunction); @Override ByteList collectByte(ByteFunction byteFunction); @Override CharList collectChar(CharFunction charFunction); @Override DoubleList collectDouble(DoubleFunction doubleFunction); @Override FloatList collectFloat(FloatFunction floatFunction); @Override IntList collectInt(IntFunction intFunction); @Override LongList collectLong(LongFunction longFunction); @Override ShortList collectShort(ShortFunction shortFunction); @Override ListIterable> zip(Iterable that); @Override ListIterable> zipWithIndex(); @Override ListIterable collect(Function function); @Override ListIterable collectWith(Function2 function, P parameter); @Override ListIterable collectIf(Predicate predicate, Function function); @Override ListIterable selectInstancesOf(Class clazz); @Override ListIterable flatCollect(Function> function); /** * @since 9.2 */ @Override default ListIterable flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override ListMultimap groupBy(Function function); @Override ListMultimap groupByEach(Function> function); @Override OrderedMap groupByUniqueKey(Function function); } UnsortedMapIterable.java000066400000000000000000000133311407344533200377340ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/map/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.map; import org.eclipse.collections.api.bag.Bag; import org.eclipse.collections.api.bag.primitive.BooleanBag; import org.eclipse.collections.api.bag.primitive.ByteBag; import org.eclipse.collections.api.bag.primitive.CharBag; import org.eclipse.collections.api.bag.primitive.DoubleBag; import org.eclipse.collections.api.bag.primitive.FloatBag; import org.eclipse.collections.api.bag.primitive.IntBag; import org.eclipse.collections.api.bag.primitive.LongBag; import org.eclipse.collections.api.bag.primitive.ShortBag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.multimap.bag.BagMultimap; import org.eclipse.collections.api.multimap.set.UnsortedSetMultimap; import org.eclipse.collections.api.ordered.OrderedIterable; import org.eclipse.collections.api.partition.bag.PartitionBag; import org.eclipse.collections.api.set.UnsortedSetIterable; import org.eclipse.collections.api.tuple.Pair; /** * An iterable Map whose elements are unsorted. */ public interface UnsortedMapIterable extends MapIterable { @Override UnsortedSetMultimap flip(); @Override UnsortedMapIterable flipUniqueValues(); @Override UnsortedMapIterable tap(Procedure procedure); @Override UnsortedMapIterable select(Predicate2 predicate); @Override UnsortedMapIterable reject(Predicate2 predicate); @Override UnsortedMapIterable collectValues(Function2 function); @Override UnsortedMapIterable collect(Function2> function); @Override Bag select(Predicate predicate); @Override

Bag selectWith(Predicate2 predicate, P parameter); @Override Bag reject(Predicate predicate); @Override

Bag rejectWith(Predicate2 predicate, P parameter); @Override PartitionBag partition(Predicate predicate); @Override

PartitionBag partitionWith(Predicate2 predicate, P parameter); @Override Bag selectInstancesOf(Class clazz); @Override Bag collect(Function function); @Override BooleanBag collectBoolean(BooleanFunction booleanFunction); @Override ByteBag collectByte(ByteFunction byteFunction); @Override CharBag collectChar(CharFunction charFunction); @Override DoubleBag collectDouble(DoubleFunction doubleFunction); @Override FloatBag collectFloat(FloatFunction floatFunction); @Override IntBag collectInt(IntFunction intFunction); @Override LongBag collectLong(LongFunction longFunction); @Override ShortBag collectShort(ShortFunction shortFunction); @Override Bag collectWith(Function2 function, P parameter); @Override Bag collectIf(Predicate predicate, Function function); @Override Bag flatCollect(Function> function); /** * @since 9.2 */ @Override default Bag flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override BagMultimap groupBy(Function function); @Override BagMultimap groupByEach(Function> function); @Override UnsortedMapIterable groupByUniqueKey(Function function); /** * @deprecated in 6.0. Use {@link OrderedIterable#zip(Iterable)} instead. */ @Override @Deprecated Bag> zip(Iterable that); /** * @deprecated in 6.0. Use {@link OrderedIterable#zipWithIndex()} instead. */ @Override @Deprecated UnsortedSetIterable> zipWithIndex(); /** * Converts the UnsortedMapIterable to an immutable implementation. Returns this for immutable maps. * * @since 5.0 */ @Override ImmutableMap toImmutable(); } package-info.java000066400000000000000000000032721407344533200363520ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/map/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for map API which enhance the performance and functionality of {@link java.util.Map} *

* This package contains the following interfaces: *

    *
  • * {@link org.eclipse.collections.api.map.MapIterable} - a Read-only Map API, with the minor exception inherited from {@link java.lang.Iterable}. *
  • *
  • * {@link org.eclipse.collections.api.map.MutableMap} - an implementation of a JCF Map which provides methods matching the Smalltalk Collection protocol. *
  • *
  • * {@link org.eclipse.collections.api.map.ImmutableMap} - the non-modifiable equivalent interface to {@link org.eclipse.collections.api.map.MutableMap}. *
  • *
  • * {@link org.eclipse.collections.api.map.FixedSizeMap} - a map that may be mutated, but cannot grow or shrink in size. *
  • *
  • * {@link org.eclipse.collections.api.map.ConcurrentMutableMap} - provides an API which combines and supports both MutableMap and ConcurrentMap. *
  • *
  • * {@link org.eclipse.collections.api.map.UnsortedMapIterable} - a map whose elements are unsorted. *
  • *
*/ package org.eclipse.collections.api.map; primitive/000077500000000000000000000000001407344533200351675ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/mapImmutablePrimitiveObjectMap.java000066400000000000000000000160401407344533200434300ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/map/primitive/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.map.primitive; import org.eclipse.collections.api.bag.ImmutableBag; import org.eclipse.collections.api.bag.primitive.ImmutableBooleanBag; import org.eclipse.collections.api.bag.primitive.ImmutableByteBag; import org.eclipse.collections.api.bag.primitive.ImmutableCharBag; import org.eclipse.collections.api.bag.primitive.ImmutableDoubleBag; import org.eclipse.collections.api.bag.primitive.ImmutableFloatBag; import org.eclipse.collections.api.bag.primitive.ImmutableIntBag; import org.eclipse.collections.api.bag.primitive.ImmutableLongBag; import org.eclipse.collections.api.bag.primitive.ImmutableShortBag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.factory.Maps; import org.eclipse.collections.api.map.ImmutableMap; import org.eclipse.collections.api.map.MutableMap; import org.eclipse.collections.api.multimap.bag.ImmutableBagMultimap; import org.eclipse.collections.api.ordered.OrderedIterable; import org.eclipse.collections.api.partition.bag.PartitionImmutableBag; import org.eclipse.collections.api.set.ImmutableSet; import org.eclipse.collections.api.tuple.Pair; /** * @since 8.0. */ public interface ImmutablePrimitiveObjectMap extends PrimitiveObjectMap { @Override default ImmutableMap aggregateInPlaceBy( Function groupBy, Function0 zeroValueFactory, Procedure2 mutatingAggregator) { MutableMap map = Maps.mutable.empty(); this.forEach(each -> { K key = groupBy.valueOf(each); VV value = map.getIfAbsentPut(key, zeroValueFactory); mutatingAggregator.value(value, each); }); return map.toImmutable(); } @Override default ImmutableMap aggregateBy( Function groupBy, Function0 zeroValueFactory, Function2 nonMutatingAggregator) { MutableMap map = this.aggregateBy( groupBy, zeroValueFactory, nonMutatingAggregator, Maps.mutable.empty()); return map.toImmutable(); } @Override ImmutableBagMultimap groupByEach(Function> function); @Override ImmutableBagMultimap groupBy(Function function); @Override default ImmutableMap groupByUniqueKey(Function function) { MutableMap target = Maps.mutable.withInitialCapacity(this.size()); return this.groupByUniqueKey(function, target).toImmutable(); } @Override ImmutableBag collectIf(Predicate predicate, Function function); @Override ImmutableBag collect(Function function); @Override ImmutableBag flatCollect(Function> function); /** * @since 9.2 */ @Override default ImmutableBag flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override ImmutableBooleanBag collectBoolean(BooleanFunction booleanFunction); @Override ImmutableByteBag collectByte(ByteFunction byteFunction); @Override ImmutableCharBag collectChar(CharFunction charFunction); @Override ImmutableDoubleBag collectDouble(DoubleFunction doubleFunction); @Override ImmutableFloatBag collectFloat(FloatFunction floatFunction); @Override ImmutableIntBag collectInt(IntFunction intFunction); @Override ImmutableLongBag collectLong(LongFunction longFunction); @Override ImmutableShortBag collectShort(ShortFunction shortFunction); @Override ImmutableBag collectWith(Function2 function, P parameter); @Override ImmutableBag selectInstancesOf(Class clazz); @Override ImmutableBag select(Predicate predicate); @Override

ImmutableBag selectWith(Predicate2 predicate, P parameter); @Override ImmutableBag reject(Predicate predicate); @Override

ImmutableBag rejectWith(Predicate2 predicate, P parameter); @Override PartitionImmutableBag partition(Predicate predicate); @Override

PartitionImmutableBag partitionWith(Predicate2 predicate, P parameter); /** * @deprecated in 7.0. Use {@link OrderedIterable#zip(Iterable)} instead. */ @Override @Deprecated ImmutableBag> zip(Iterable that); /** * @deprecated in 7.0. Use {@link OrderedIterable#zipWithIndex()} instead. */ @Override @Deprecated ImmutableSet> zipWithIndex(); @Override ImmutableObjectLongMap sumByInt(Function groupBy, IntFunction function); @Override ImmutableObjectDoubleMap sumByFloat(Function groupBy, FloatFunction function); @Override ImmutableObjectLongMap sumByLong(Function groupBy, LongFunction function); @Override ImmutableObjectDoubleMap sumByDouble(Function groupBy, DoubleFunction function); } MutablePrimitiveObjectMap.java000066400000000000000000000146331407344533200431100ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/map/primitive/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.map.primitive; import org.eclipse.collections.api.bag.MutableBag; import org.eclipse.collections.api.bag.primitive.MutableBooleanBag; import org.eclipse.collections.api.bag.primitive.MutableByteBag; import org.eclipse.collections.api.bag.primitive.MutableCharBag; import org.eclipse.collections.api.bag.primitive.MutableDoubleBag; import org.eclipse.collections.api.bag.primitive.MutableFloatBag; import org.eclipse.collections.api.bag.primitive.MutableIntBag; import org.eclipse.collections.api.bag.primitive.MutableLongBag; import org.eclipse.collections.api.bag.primitive.MutableShortBag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.factory.Maps; import org.eclipse.collections.api.map.MutableMap; import org.eclipse.collections.api.multimap.bag.MutableBagMultimap; import org.eclipse.collections.api.ordered.OrderedIterable; import org.eclipse.collections.api.partition.bag.PartitionMutableBag; import org.eclipse.collections.api.set.MutableSet; import org.eclipse.collections.api.tuple.Pair; public interface MutablePrimitiveObjectMap extends PrimitiveObjectMap { void clear(); @Override MutableMap aggregateInPlaceBy(Function groupBy, Function0 zeroValueFactory, Procedure2 mutatingAggregator); @Override default MutableMap aggregateBy(Function groupBy, Function0 zeroValueFactory, Function2 nonMutatingAggregator) { return this.aggregateBy( groupBy, zeroValueFactory, nonMutatingAggregator, Maps.mutable.empty()); } @Override MutableBagMultimap groupByEach(Function> function); @Override MutableBagMultimap groupBy(Function function); @Override default MutableMap groupByUniqueKey(Function function) { return this.groupByUniqueKey(function, Maps.mutable.withInitialCapacity(this.size())); } @Override MutableBag collectIf(Predicate predicate, Function function); @Override MutableBag collect(Function function); @Override MutableBooleanBag collectBoolean(BooleanFunction booleanFunction); @Override MutableByteBag collectByte(ByteFunction byteFunction); @Override MutableCharBag collectChar(CharFunction charFunction); @Override MutableDoubleBag collectDouble(DoubleFunction doubleFunction); @Override MutableFloatBag collectFloat(FloatFunction floatFunction); @Override MutableIntBag collectInt(IntFunction intFunction); @Override MutableLongBag collectLong(LongFunction longFunction); @Override MutableShortBag collectShort(ShortFunction shortFunction); @Override MutableBag collectWith(Function2 function, P parameter); @Override MutableBag flatCollect(Function> function); /** * @since 9.2 */ @Override default MutableBag flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override MutableBag selectInstancesOf(Class clazz); @Override MutableBag select(Predicate predicate); @Override

MutableBag selectWith(Predicate2 predicate, P parameter); @Override MutableBag reject(Predicate predicate); @Override

MutableBag rejectWith(Predicate2 predicate, P parameter); @Override PartitionMutableBag partition(Predicate predicate); @Override

PartitionMutableBag partitionWith(Predicate2 predicate, P parameter); /** * @deprecated in 7.0. Use {@link OrderedIterable#zip(Iterable)} instead. */ @Override @Deprecated MutableBag> zip(Iterable that); /** * @deprecated in 7.0. Use {@link OrderedIterable#zipWithIndex()} instead. */ @Override @Deprecated MutableSet> zipWithIndex(); @Override MutableObjectLongMap sumByInt(Function groupBy, IntFunction function); @Override MutableObjectDoubleMap sumByFloat(Function groupBy, FloatFunction function); @Override MutableObjectLongMap sumByLong(Function groupBy, LongFunction function); @Override MutableObjectDoubleMap sumByDouble(Function groupBy, DoubleFunction function); } PrimitiveObjectMap.java000066400000000000000000000147241407344533200415770ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/map/primitive/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.map.primitive; import java.util.Collection; import java.util.Map; import java.util.Spliterator; import java.util.Spliterators; import java.util.stream.Stream; import java.util.stream.StreamSupport; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.bag.Bag; import org.eclipse.collections.api.bag.primitive.BooleanBag; import org.eclipse.collections.api.bag.primitive.ByteBag; import org.eclipse.collections.api.bag.primitive.CharBag; import org.eclipse.collections.api.bag.primitive.DoubleBag; import org.eclipse.collections.api.bag.primitive.FloatBag; import org.eclipse.collections.api.bag.primitive.IntBag; import org.eclipse.collections.api.bag.primitive.LongBag; import org.eclipse.collections.api.bag.primitive.ShortBag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.map.UnsortedMapIterable; import org.eclipse.collections.api.multimap.bag.BagMultimap; import org.eclipse.collections.api.ordered.OrderedIterable; import org.eclipse.collections.api.partition.bag.PartitionBag; import org.eclipse.collections.api.set.UnsortedSetIterable; import org.eclipse.collections.api.tuple.Pair; /** * @since 8.0. */ public interface PrimitiveObjectMap extends RichIterable { boolean containsValue(Object value); void forEachValue(Procedure procedure); /** * Follows the same general contract as {@link Map#equals(Object)}. */ @Override boolean equals(Object o); /** * Follows the same general contract as {@link Map#hashCode()}. */ @Override int hashCode(); /** * Returns a string with the keys and values of this map separated by commas with spaces and * enclosed in curly braces. Each key and value is separated by an equals sign. * *

     * Assert.assertEquals(
     *     "{1=1, 2=2, 3=3}",
     *     IntObjectMaps.mutable.empty().withKeyValue(1, 1).withKeyValue(2, 2).withKeyValue(3, 3).toString());
     * 
* * @return a string representation of this PrimitiveObjectMap * @see java.util.AbstractMap#toString() */ @Override String toString(); Collection values(); @Override Bag select(Predicate predicate); @Override

Bag selectWith(Predicate2 predicate, P parameter); @Override Bag reject(Predicate predicate); @Override

Bag rejectWith(Predicate2 predicate, P parameter); @Override PartitionBag partition(Predicate predicate); @Override

PartitionBag partitionWith(Predicate2 predicate, P parameter); @Override Bag selectInstancesOf(Class clazz); @Override Bag collect(Function function); @Override BooleanBag collectBoolean(BooleanFunction booleanFunction); @Override ByteBag collectByte(ByteFunction byteFunction); @Override CharBag collectChar(CharFunction charFunction); @Override DoubleBag collectDouble(DoubleFunction doubleFunction); @Override FloatBag collectFloat(FloatFunction floatFunction); @Override IntBag collectInt(IntFunction intFunction); @Override LongBag collectLong(LongFunction longFunction); @Override ShortBag collectShort(ShortFunction shortFunction); @Override Bag collectWith(Function2 function, P parameter); @Override Bag collectIf(Predicate predicate, Function function); @Override Bag flatCollect(Function> function); /** * @since 9.2 */ @Override default Bag flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override BagMultimap groupBy(Function function); @Override BagMultimap groupByEach(Function> function); @Override UnsortedMapIterable groupByUniqueKey(Function function); /** * @deprecated in 6.0. Use {@link OrderedIterable#zip(Iterable)} instead. */ @Override @Deprecated Bag> zip(Iterable that); /** * @deprecated in 6.0. Use {@link OrderedIterable#zipWithIndex()} instead. */ @Override @Deprecated UnsortedSetIterable> zipWithIndex(); /** * @since 9.0 */ default Stream stream() { return StreamSupport.stream(this.spliterator(), false); } /** * @since 9.0 */ default Stream parallelStream() { return StreamSupport.stream(this.spliterator(), true); } /** * @since 9.0 */ @Override default Spliterator spliterator() { return Spliterators.spliterator(this.iterator(), (long) this.size(), 0); } } package-info.java000066400000000000000000000014541407344533200403620ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/map/primitive/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains API for primitive to primitive maps, primitive to object maps and object to primitive maps with mutable and immutable variants. *

* A primitive map is similar to a {@link org.eclipse.collections.api.map.MapIterable}, but is memory-optimized for primitives. */ package org.eclipse.collections.api.map.primitive; sorted/000077500000000000000000000000001407344533200344575ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/mapImmutableSortedMap.java000066400000000000000000000222321407344533200410610ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/map/sorted/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.map.sorted; import java.util.Map; import java.util.SortedMap; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.factory.Maps; import org.eclipse.collections.api.list.ImmutableList; import org.eclipse.collections.api.list.primitive.ImmutableBooleanList; import org.eclipse.collections.api.list.primitive.ImmutableByteList; import org.eclipse.collections.api.list.primitive.ImmutableCharList; import org.eclipse.collections.api.list.primitive.ImmutableDoubleList; import org.eclipse.collections.api.list.primitive.ImmutableFloatList; import org.eclipse.collections.api.list.primitive.ImmutableIntList; import org.eclipse.collections.api.list.primitive.ImmutableLongList; import org.eclipse.collections.api.list.primitive.ImmutableShortList; import org.eclipse.collections.api.map.ImmutableMap; import org.eclipse.collections.api.map.ImmutableMapIterable; import org.eclipse.collections.api.map.MapIterable; import org.eclipse.collections.api.map.MutableMap; import org.eclipse.collections.api.multimap.list.ImmutableListMultimap; import org.eclipse.collections.api.multimap.sortedset.ImmutableSortedSetMultimap; import org.eclipse.collections.api.partition.list.PartitionImmutableList; import org.eclipse.collections.api.tuple.Pair; /** * An ImmutableSortedMap is different than a JCF SortedMap in that it has no mutating methods, but it shares * the read-only protocol of a SortedMap. */ public interface ImmutableSortedMap extends SortedMapIterable, ImmutableMapIterable { @Override SortedMap castToMap(); SortedMap castToSortedMap(); // TODO: Keys could be ordered @Override ImmutableSortedSetMultimap flip(); @Override ImmutableSortedMap newWithKeyValue(K key, V value); @Override ImmutableSortedMap newWithMap(Map map); @Override ImmutableSortedMap newWithMapIterable(MapIterable mapIterable); @Override ImmutableSortedMap newWithAllKeyValues(Iterable> keyValues); @Override ImmutableSortedMap newWithAllKeyValueArguments(Pair... keyValuePairs); @Override ImmutableSortedMap newWithoutKey(K key); @Override ImmutableSortedMap newWithoutAllKeys(Iterable keys); MutableSortedMap toSortedMap(); // TODO: When we have implementations of linked hash maps // ImmutableOrderedMap flipUniqueValues(); @Override ImmutableSortedMap select(Predicate2 predicate); @Override ImmutableSortedMap reject(Predicate2 predicate); @Override ImmutableSortedMap tap(Procedure procedure); @Override ImmutableList select(Predicate predicate); @Override

ImmutableList selectWith(Predicate2 predicate, P parameter); @Override ImmutableList reject(Predicate predicate); @Override

ImmutableList rejectWith(Predicate2 predicate, P parameter); @Override ImmutableList selectInstancesOf(Class clazz); @Override PartitionImmutableList partition(Predicate predicate); @Override

PartitionImmutableList partitionWith(Predicate2 predicate, P parameter); @Override ImmutableList collect(Function function); /** * @since 9.1. */ @Override default ImmutableList collectWithIndex(ObjectIntToObjectFunction function) { int[] index = {0}; return this.collect(each -> function.valueOf(each, index[0]++)); } @Override ImmutableList collectWith(Function2 function, P parameter); @Override ImmutableMap collect(Function2> function); @Override ImmutableSortedMap collectValues(Function2 function); @Override ImmutableList collectIf( Predicate predicate, Function function); @Override ImmutableList flatCollect(Function> function); /** * @since 9.2 */ @Override default ImmutableList flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override ImmutableBooleanList collectBoolean(BooleanFunction booleanFunction); @Override ImmutableByteList collectByte(ByteFunction byteFunction); @Override ImmutableCharList collectChar(CharFunction charFunction); @Override ImmutableDoubleList collectDouble(DoubleFunction doubleFunction); @Override ImmutableFloatList collectFloat(FloatFunction floatFunction); @Override ImmutableIntList collectInt(IntFunction intFunction); @Override ImmutableLongList collectLong(LongFunction longFunction); @Override ImmutableShortList collectShort(ShortFunction shortFunction); @Override ImmutableList> zip(Iterable that); @Override ImmutableList> zipWithIndex(); @Override ImmutableListMultimap groupBy(Function function); @Override ImmutableListMultimap groupByEach(Function> function); @Override default ImmutableMap groupByUniqueKey(Function function) { MutableMap target = Maps.mutable.withInitialCapacity(this.size()); return this.groupByUniqueKey(function, target).toImmutable(); } @Override default ImmutableMap aggregateInPlaceBy( Function groupBy, Function0 zeroValueFactory, Procedure2 mutatingAggregator) { MutableMap map = Maps.mutable.empty(); this.forEach(each -> { KK key = groupBy.valueOf(each); VV value = map.getIfAbsentPut(key, zeroValueFactory); mutatingAggregator.value(value, each); }); return map.toImmutable(); } @Override default ImmutableMap aggregateBy( Function groupBy, Function0 zeroValueFactory, Function2 nonMutatingAggregator) { MutableMap map = this.aggregateBy( groupBy, zeroValueFactory, nonMutatingAggregator, Maps.mutable.empty()); return map.toImmutable(); } @Override default ImmutableMap aggregateBy( Function keyFunction, Function valueFunction, Function0 zeroValueFactory, Function2 nonMutatingAggregator) { MutableMap map = Maps.mutable.empty(); this.forEachKeyValue((key, value) -> { map.updateValueWith(keyFunction.valueOf(key), zeroValueFactory, nonMutatingAggregator, valueFunction.valueOf(value)); }); return map.toImmutable(); } } MutableSortedMap.java000066400000000000000000000241051407344533200405340ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/map/sorted/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.map.sorted; import java.util.Map; import java.util.SortedMap; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.collection.MutableCollection; import org.eclipse.collections.api.factory.Maps; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.list.primitive.MutableBooleanList; import org.eclipse.collections.api.list.primitive.MutableByteList; import org.eclipse.collections.api.list.primitive.MutableCharList; import org.eclipse.collections.api.list.primitive.MutableDoubleList; import org.eclipse.collections.api.list.primitive.MutableFloatList; import org.eclipse.collections.api.list.primitive.MutableIntList; import org.eclipse.collections.api.list.primitive.MutableLongList; import org.eclipse.collections.api.list.primitive.MutableShortList; import org.eclipse.collections.api.map.MapIterable; import org.eclipse.collections.api.map.MutableMap; import org.eclipse.collections.api.map.MutableMapIterable; import org.eclipse.collections.api.multimap.list.MutableListMultimap; import org.eclipse.collections.api.multimap.sortedset.MutableSortedSetMultimap; import org.eclipse.collections.api.partition.list.PartitionMutableList; import org.eclipse.collections.api.set.MutableSet; import org.eclipse.collections.api.tuple.Pair; /** * A MutableSortedMap is similar to a JCF Map but adds additional useful internal iterator methods. * The MutableSortedMap interface additionally implements some of the methods in the Smalltalk Dictionary protocol. */ public interface MutableSortedMap extends MutableMapIterable, SortedMapIterable, SortedMap, Cloneable { /** * Creates a new instance of the same type with the same internal Comparator. */ @Override MutableSortedMap newEmpty(); /** * Adds all the entries derived from {@code iterable} to {@code this}. * The key and value for each entry is determined by applying the {@code keyFunction} and {@code valueFunction} to each item in {@code collection}. * Any entry in {@code map} that has the same key as an entry in {@code this} will have it's value replaced by that in {@code map}. */ MutableSortedMap collectKeysAndValues( Iterable iterable, Function keyFunction, Function valueFunction); /** * Return the value in the Map that corresponds to the specified key, or if there is no value * at the key, return the result of evaluating the specified one argument Function * using the specified parameter, and put that value in the map at the specified key. */ @Override

V getIfAbsentPutWith(K key, Function function, P parameter); @Override MutableSortedMap asUnmodifiable(); @Override MutableSortedMap asSynchronized(); // TODO: Keys could be ordered @Override MutableSortedSetMultimap flip(); @Override MutableSortedMap select(Predicate2 predicate); @Override MutableSortedMap reject(Predicate2 predicate); @Override MutableMap collect(Function2> function); @Override MutableSortedMap collectValues(Function2 function); @Override MutableList collect(Function function); /** * @since 9.1. */ @Override default MutableList collectWithIndex(ObjectIntToObjectFunction function) { int[] index = {0}; return this.collect(each -> function.valueOf(each, index[0]++)); } @Override MutableBooleanList collectBoolean(BooleanFunction booleanFunction); @Override MutableByteList collectByte(ByteFunction byteFunction); @Override MutableCharList collectChar(CharFunction charFunction); @Override MutableDoubleList collectDouble(DoubleFunction doubleFunction); @Override MutableFloatList collectFloat(FloatFunction floatFunction); @Override MutableIntList collectInt(IntFunction intFunction); @Override MutableLongList collectLong(LongFunction longFunction); @Override MutableShortList collectShort(ShortFunction shortFunction); @Override MutableList collectWith(Function2 function, P parameter); @Override MutableList collectIf(Predicate predicate, Function function); @Override MutableList flatCollect(Function> function); /** * @since 9.2 */ @Override default MutableList flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override MutableSortedMap tap(Procedure procedure); @Override MutableList select(Predicate predicate); @Override

MutableList selectWith(Predicate2 predicate, P parameter); @Override MutableList reject(Predicate predicate); @Override

MutableList rejectWith(Predicate2 predicate, P parameter); @Override PartitionMutableList partition(Predicate predicate); @Override

PartitionMutableList partitionWith(Predicate2 predicate, P parameter); @Override MutableList selectInstancesOf(Class clazz); @Override MutableList> zip(Iterable that); @Override MutableList> zipWithIndex(); @Override MutableSortedMap toReversed(); @Override MutableSortedMap take(int count); @Override MutableSortedMap takeWhile(Predicate predicate); @Override MutableSortedMap drop(int count); @Override MutableSortedMap dropWhile(Predicate predicate); @Override PartitionMutableList partitionWhile(Predicate predicate); @Override MutableList distinct(); @Override MutableSet> entrySet(); /** * The underlying set for the keys is sorted in ascending order according to their natural ordering or a custom comparator. * However, Java 5 TreeMap returns a keySet that does not inherit from SortedSet therefore we have decided to * return the keySet simply as a MutableSet to maintain Java 5 compatibility. */ //todo: Change return type to MutableSortedSet when we move to Java 6 @Override MutableSet keySet(); @Override MutableSortedMap headMap(K toKey); @Override MutableSortedMap tailMap(K fromKey); @Override MutableSortedMap subMap(K fromKey, K toKey); @Override MutableCollection values(); MutableSortedMap clone(); @Override MutableListMultimap groupBy(Function function); @Override MutableListMultimap groupByEach(Function> function); @Override default MutableMap groupByUniqueKey(Function function) { return this.groupByUniqueKey(function, Maps.mutable.withInitialCapacity(this.size())); } // TODO: When we have implementations of linked hash maps // MutableOrderedMap flipUniqueValues(); @Override MutableSortedMap withKeyValue(K key, V value); @Override default MutableSortedMap withMap(Map map) { this.putAll(map); return this; } @Override default MutableSortedMap withMapIterable(MapIterable mapIterable) { this.putAllMapIterable(mapIterable); return this; } @Override MutableSortedMap withAllKeyValues(Iterable> keyValues); @Override MutableSortedMap withAllKeyValueArguments(Pair... keyValuePairs); /** * @deprecated in 6.0 Use {@link #withAllKeyValueArguments(Pair[])} instead. Inlineable. */ @Deprecated default MutableSortedMap with(Pair... pairs) { return this.withAllKeyValueArguments(pairs); } @Override MutableSortedMap withoutKey(K key); @Override MutableSortedMap withoutAllKeys(Iterable keys); } SortedMapIterable.java000066400000000000000000000151561407344533200407000ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/map/sorted/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.map.sorted; import java.util.Comparator; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.list.ListIterable; import org.eclipse.collections.api.list.primitive.BooleanList; import org.eclipse.collections.api.list.primitive.ByteList; import org.eclipse.collections.api.list.primitive.CharList; import org.eclipse.collections.api.list.primitive.DoubleList; import org.eclipse.collections.api.list.primitive.FloatList; import org.eclipse.collections.api.list.primitive.IntList; import org.eclipse.collections.api.list.primitive.LongList; import org.eclipse.collections.api.list.primitive.ShortList; import org.eclipse.collections.api.map.MapIterable; import org.eclipse.collections.api.map.UnsortedMapIterable; import org.eclipse.collections.api.multimap.list.ListMultimap; import org.eclipse.collections.api.multimap.sortedset.SortedSetMultimap; import org.eclipse.collections.api.ordered.ReversibleIterable; import org.eclipse.collections.api.partition.list.PartitionList; import org.eclipse.collections.api.tuple.Pair; /** * An iterable Map whose elements are sorted. */ public interface SortedMapIterable extends MapIterable, ReversibleIterable { Comparator comparator(); // TODO: Keys could be ordered @Override SortedSetMultimap flip(); // TODO: When we have implementations of linked hash maps // OrderedMapIterable flipUniqueValues(); @Override SortedMapIterable select(Predicate2 predicate); @Override SortedMapIterable reject(Predicate2 predicate); @Override UnsortedMapIterable collect(Function2> function); @Override SortedMapIterable collectValues(Function2 function); @Override SortedMapIterable tap(Procedure procedure); @Override ListIterable select(Predicate predicate); @Override

ListIterable selectWith(Predicate2 predicate, P parameter); @Override ListIterable reject(Predicate predicate); @Override

ListIterable rejectWith(Predicate2 predicate, P parameter); @Override PartitionList partition(Predicate predicate); @Override

PartitionList partitionWith(Predicate2 predicate, P parameter); @Override ListIterable selectInstancesOf(Class clazz); @Override ListIterable collect(Function function); /** * @since 9.1. */ @Override default ListIterable collectWithIndex(ObjectIntToObjectFunction function) { int[] index = {0}; return this.collect(each -> function.valueOf(each, index[0]++)); } @Override BooleanList collectBoolean(BooleanFunction booleanFunction); @Override ByteList collectByte(ByteFunction byteFunction); @Override CharList collectChar(CharFunction charFunction); @Override DoubleList collectDouble(DoubleFunction doubleFunction); @Override FloatList collectFloat(FloatFunction floatFunction); @Override IntList collectInt(IntFunction intFunction); @Override LongList collectLong(LongFunction longFunction); @Override ShortList collectShort(ShortFunction shortFunction); @Override ListIterable collectWith(Function2 function, P parameter); @Override ListIterable collectIf(Predicate predicate, Function function); @Override ListIterable flatCollect(Function> function); /** * @since 9.2 */ @Override default ListIterable flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override ListIterable> zip(Iterable that); @Override ListIterable> zipWithIndex(); @Override ListMultimap groupBy(Function function); @Override ListMultimap groupByEach(Function> function); @Override SortedMapIterable toReversed(); @Override SortedMapIterable take(int count); @Override SortedMapIterable takeWhile(Predicate predicate); @Override SortedMapIterable drop(int count); @Override SortedMapIterable dropWhile(Predicate predicate); // TODO: PartitionSortedMapIterable? @Override PartitionList partitionWhile(Predicate predicate); @Override ListIterable distinct(); /** * Converts the SortedMapIterable to an immutable implementation. Returns this for immutable maps. * * @since 5.0 */ @Override ImmutableSortedMap toImmutable(); } package-info.java000066400000000000000000000024351407344533200376520ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/map/sorted/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains mutable and immutable sorted map interfaces. *

* A sorted map is a map which contains elements in sorted order. It allows for faster retrievals. *

* This package contains 3 interfaces: *

    *
  • * {@link org.eclipse.collections.api.map.sorted.MutableSortedMap} - an implementation of a JCF Map which provides methods matching the Smalltalk Collection protocol. *
  • *
  • * {@link org.eclipse.collections.api.map.sorted.ImmutableSortedMap} - the non-mutable equivalent of {@link org.eclipse.collections.api.map.sorted.MutableSortedMap}. *
  • *
  • * {@link org.eclipse.collections.api.map.sorted.SortedMapIterable} - a map which contains elements in sorted order. *
  • *
*/ package org.eclipse.collections.api.map.sorted; multimap/000077500000000000000000000000001407344533200342325ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/apiImmutableMultimap.java000066400000000000000000000055621407344533200405350ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.collection.ImmutableCollection; import org.eclipse.collections.api.tuple.Pair; /** * @since 1.0 */ public interface ImmutableMultimap extends Multimap { @Override ImmutableMultimap newEmpty(); @Override ImmutableCollection get(K key); default ImmutableMultimap newWith(K key, V value) { MutableMultimap mutableMultimap = this.toMutable(); mutableMultimap.put(key, value); return mutableMultimap.toImmutable(); } default ImmutableMultimap newWithout(Object key, Object value) { MutableMultimap mutableMultimap = this.toMutable(); mutableMultimap.remove(key, value); return mutableMultimap.toImmutable(); } default ImmutableMultimap newWithAll(K key, Iterable values) { MutableMultimap mutableMultimap = this.toMutable(); mutableMultimap.putAll(key, values); return mutableMultimap.toImmutable(); } default ImmutableMultimap newWithoutAll(Object key) { MutableMultimap mutableMultimap = this.toMutable(); mutableMultimap.removeAll(key); return mutableMultimap.toImmutable(); } @Override ImmutableMultimap flip(); @Override ImmutableMultimap selectKeysValues(Predicate2 predicate); @Override ImmutableMultimap rejectKeysValues(Predicate2 predicate); @Override ImmutableMultimap selectKeysMultiValues(Predicate2> predicate); @Override ImmutableMultimap rejectKeysMultiValues(Predicate2> predicate); @Override ImmutableMultimap collectKeysValues(Function2> function); @Override ImmutableMultimap collectKeyMultiValues(Function keyFunction, Function valueFunction); @Override ImmutableMultimap collectValues(Function function); } Multimap.java000066400000000000000000000511161407344533200366710ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap; import java.util.Collection; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.bag.Bag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.map.MutableMap; import org.eclipse.collections.api.set.SetIterable; import org.eclipse.collections.api.tuple.Pair; /** * This collection is a type of {@code Map} that can associate multiple values for keys. * *

Unlike {@code Map} however, this interface is read-only so the results of access methods such as {@link * #get(Object)} return a view onto the values associated with that key. The {@link MutableMultimap} sub-interface * provides methods to mutate the collection.

* *

The advantages to using this container over a {@code Map>} is that all of the handling of the * value collection can be done automatically. It also allows implementations to further specialize in how duplicate * values will be handled. Value collections with list semantics would allow duplicate values for a key, while those * implementing set semantics would not. The value collections can never be empty.

* *

Internal iteration methods for keys and values (singly - {@link #forEachKey(Procedure)}, {@link #forEachValue(Procedure)}, * and together - {@link #forEachKeyValue(Procedure2)}), {@link #forEachKeyMultiValues(Procedure2)}) are provided to allow flexible * browsing of the collection's contents. Similarly, views also are provided for keys ({@link #keysView()}), values * ({@link #valuesView()}) and the combination thereof ({@link #keyValuePairsView()}, {@link #keyMultiValuePairsView()}).

* * @param the type of keys used * @param the type of mapped values * @since 1.0 */ @SuppressWarnings("JavaDoc") public interface Multimap { /** * Creates a new instance of the same implementation type, using the default capacity and growth parameters. */ Multimap newEmpty(); /** * Returns {@code true} if there are no entries. */ boolean isEmpty(); /** * Returns {@code true} if there is at least one entry. */ boolean notEmpty(); /** * Calls the procedure with each value. *

Given a Multimap with the contents:

*

* {@code {"key1" : ["val1", "val2", "val2"], "key2" : ["val3"]}} *

* The given procedure would be invoked with the parameters: *

* {@code ["val1", "val2", "val2", "val3"]} *

*/ void forEachValue(Procedure procedure); /** * Calls the {@code procedure} with each key. *

Given a Multimap with the contents:

*

* {@code {"key1" : ["val1", "val2", "val2"], "key2" : ["val3"]}} *

*

* The given procedure would be invoked with the parameters: *

*

* {@code ["key1", "key2"]} *

*/ void forEachKey(Procedure procedure); /** * Calls the {@code procedure} with each key-value pair. *

Given a Multimap with the contents:

*

* {@code {"key1" : ["val1", "val2", "val2"], "key2" : ["val3"]}} *

*

* The given procedure would be invoked with the parameters: *

*

* {@code [["key1", "val1"], ["key1", "val2"], ["key1", "val2"], ["key2", "val3"]]} *

*/ void forEachKeyValue(Procedure2 procedure); /** * Calls the {@code procedure} with each key-Iterable[value]. *

Given a Multimap with the contents:

*

* {@code {"key1" : ["val1", "val2", "val2"], "key2" : ["val3"]}} *

*

* The given procedure would be invoked with the parameters: *

*

* {@code [["key1", {@link RichIterable["val1", "val2", "val2"]}], ["key2", {@link RichIterable["val3"]}]]} *

* * @since 6.0 */ void forEachKeyMultiValues(Procedure2> procedure); /** * Returns the number of key-value entry pairs. *

This method is implemented with O(1) (constant-time) performance.

*/ int size(); /** * Returns the number of distinct keys. */ int sizeDistinct(); /** * Returns {@code true} if any values are mapped to the specified key. * * @param key the key to search for */ boolean containsKey(Object key); /** * Returns {@code true} if any key is mapped to the specified value. * * @param value the value to search for */ boolean containsValue(Object value); /** * Returns {@code true} if the specified key-value pair is mapped. * * @param key the key to search for * @param value the value to search for */ boolean containsKeyAndValue(Object key, Object value); /** * Returns a view of all values associated with the given key. *

If the given key does not exist, an empty {@link RichIterable} is returned.

* * @param key the key to search for */ RichIterable get(K key); /** * Returns a lazy view of the unique keys. */ RichIterable keysView(); /** * Returns a unmodifiable {@link SetIterable} of keys with O(1) complexity. */ SetIterable keySet(); /** * Returns a {@link Bag} of keys with the count corresponding to the number of mapped values. */ Bag keyBag(); /** * Returns an unmodifiable view of all of the values mapped to each key. */ RichIterable> multiValuesView(); /** * Returns a lazy flattened view of all the values. */ RichIterable valuesView(); /** * Returns a lazy view of the pair of a key and and a lazy view of the values mapped to that key. */ RichIterable>> keyMultiValuePairsView(); /** * Returns a lazy view of all of the key/value pairs. */ RichIterable> keyValuePairsView(); /** * Returns a new {@link MutableMap} of keys from this Multimap to the mapped values as a {@link RichIterable}. */ MutableMap> toMap(); /** * Returns a new {@link MutableMap} of keys from this Multimap to the mapped values as a {@link RichIterable}. * * @param collectionFactory used to create the collections that hold the values and affects the return type */ > MutableMap toMap(Function0 collectionFactory); /** * Compares the specified object with this Multimap for equality. *

Two Multimaps are equal when their map views (as returned by {@link #toMap}) are also equal.

*

In general, two Multimaps with identical key-value mappings may or may not be equal, depending on the type of * the collections holding the values. If the backing collections are Sets, then two instances with the same * key-value mappings are equal, but if the backing collections are Lists, equality depends on the ordering of the * values for each key.

*

Any two empty Multimaps are equal, because they both have empty {@link #toMap} views.

*/ @Override boolean equals(Object obj); /** * Returns the hash code for this Multimap. *

The hash code of a Multimap is defined as the hash code of the map view, as returned by {@link #toMap}.

*/ @Override int hashCode(); /** * Returns a mutable copy of this Multimap. */ MutableMultimap toMutable(); /** * Returns an immutable copy of this Multimap if it is not already immutable. If the Multimap is immutable, * it will return itself. *

The returned Multimap will be {@code Serializable} if this Multimap is {@code Serializable}.

*/ ImmutableMultimap toImmutable(); /** * Given a Multimap from Domain {@code ->} Range return a multimap from Range {@code ->} Domain. * * @since 6.0 */ Multimap flip(); /** * Returns all elements of the source multimap that satisfies the predicate. This method is also * commonly called filter. * *
e.g.
     * return multimap.selectKeysValues(new Predicate2<Integer, Person>()
     * {
     *     public boolean accept(Integer age, Person person)
     *     {
     *         return (age >= 18)
     *                  && (person.getAddress().getCity().equals("Metuchen"));
     *     }
     * });
     * 
* * @param predicate a {@link Predicate2} to use as the select criteria * @return {@code Multimap}, which contains elements as a result of the select criteria * @since 6.0 */ Multimap selectKeysValues(Predicate2 predicate); /** * Same as the select method but uses the specified target multimap for the results. * *
e.g.
     * return multimap.selectKeysValues(new Predicate2<Integer, Person>()
     * {
     *     public boolean accept(Integer age, Person person)
     *     {
     *         return (age >= 18)
     *                  && (person.getAddress().getCity().equals("Metuchen"));
     *     }
     * }, FastListMultimap.newMultimap());
     * 
* * @param predicate a {@link Predicate2} to use as the select criteria * @param target the Multimap to append to for all elements in this {@code Multimap} that satisfy the {@code predicate} * @return {@code target}, which contains appended elements as a result of the select criteria * @since 6.0 */ > R selectKeysValues(Predicate2 predicate, R target); /** * Returns all elements of the source multimap that don't satisfy the predicate. * *
e.g.
     * return multimap.rejectKeysValues(new Predicate2<Integer, Person>()
     * {
     *     public boolean accept(Integer age, Person person)
     *     {
     *         return (age >= 18)
     *                  && (person.getAddress().getCity().equals("Metuchen"));
     *     }
     * });
     * 
* * @param predicate a {@link Predicate2} to use as the reject criteria * @return {@code Multimap}, which contains elements that don't satisfy the {@code predicate} * @since 6.0 */ Multimap rejectKeysValues(Predicate2 predicate); /** * Same as the reject method but uses the specified target multimap for the results. * *
e.g.
     * return multimap.rejectKeysValues(new Predicate2<Integer, Person>()
     * {
     *     public boolean accept(Integer age, Person person)
     *     {
     *         return (age >= 18)
     *                  && (person.getAddress().getCity().equals("Metuchen"));
     *     }
     * }, FastListMultimap.newMultimap());
     * 
* * @param predicate a {@link Predicate2} to use as the reject criteria * @param target the Multimap to append to for all elements in this {@code Multimap} that don't satisfy the {@code predicate} * @return {@code target}, which contains appended elements that don't satisfy the {@code predicate} * @since 6.0 */ > R rejectKeysValues(Predicate2 predicate, R target); /** * Returns all elements of the source multimap that satisfies the predicate. This method is also * commonly called filter. * *
e.g.
     * return multimap.selectKeysMultiValues(new Predicate2<Integer, Iterable<Person>>()
     * {
     *     public boolean accept(Integer age, Iterable<Person> values)
     *     {
     *         return (age >= 18)
     *                  && ((RichIterable<Person>)values.size() >= 2);
     *     }
     * });
     * 
* * @param predicate a {@link Predicate2} to use as the select criteria * @return {@code Multimap}, which contains elements as a result of the select criteria * @since 6.0 */ Multimap selectKeysMultiValues(Predicate2> predicate); /** * Same as the select method but uses the specified target multimap for the results. * *
e.g.
     * return multimap.selectKeysMultiValues(new Predicate2<Integer, Iterable<Person>>()
     * {
     *     public boolean accept(Integer age, Iterable<Person> values)
     *     {
     *         return (age >= 18)
     *                  && ((RichIterable<Person>)values.size() >= 2);
     *     }
     * }, FastListMultimap.newMultimap());
     * 
* * @param predicate a {@link Predicate2} to use as the select criteria * @param target the Multimap to append to for all elements in this {@code Multimap} that satisfy the {@code predicate} * @return {@code target}, which contains appended elements as a result of the select criteria * @since 6.0 */ > R selectKeysMultiValues(Predicate2> predicate, R target); /** * Returns all elements of the source multimap that don't satisfy the predicate. * *
e.g.
     * return multimap.rejectKeysMultiValues(new Predicate2<Integer, Iterable<Person>>()
     * {
     *     public boolean accept(Integer age, Iterable<Person> values)
     *     {
     *         return (age >= 18)
     *                  && ((RichIterable<Person>)values.size() >= 2);
     *     }
     * });
     * 
* * @param predicate a {@link Predicate2} to use as the reject criteria * @return {@code Multimap}, which contains elements that don't satisfy the {@code predicate} * @since 6.0 */ Multimap rejectKeysMultiValues(Predicate2> predicate); /** * Same as the reject method but uses the specified target multimap for the results. * *
e.g.
     * return multimap.rejectKeysMultiValues(new Predicate2<Integer, Iterable<Person>>()
     * {
     *     public boolean accept(Integer age, Iterable<Person> values)
     *     {
     *         return (age >= 18)
     *                  && ((RichIterable<Person>)values.size() >= 2);
     *     }
     * }, FastListMultimap.newMultimap());
     * 
* * @param predicate a {@link Predicate2} to use as the reject criteria * @param target the Multimap to append to for all elements in this {@code Multimap} that don't satisfy the {@code predicate} * @return {@code target}, which contains appended elements that don't satisfy the {@code predicate} * @since 6.0 */ > R rejectKeysMultiValues(Predicate2> predicate, R target); /** * Returns a new multimap with the results of applying the specified function on each key and value of the source * multimap. This method is also commonly called transform or map. * *
e.g.
     * return multimap.collectKeysValues(new Function2<Integer, Person, Pair<String, String>>()
     * {
     *     public Pair<String, String> valueOf(Integer age, Person person)
     *     {
     *         return Tuples.pair(age.toString(), person.getLastName());
     *     }
     * });
     * 
* * @param function a {@link Function2} to use for transformation * @return {@code Multimap}, which contains elements as a result of the transformation * @since 6.0 */ Multimap collectKeysValues(Function2> function); /** * Same as the collect method but uses the specified target multimap for the results. * *
e.g.
     * return multimap.collectKeysValues(new Function2<Integer, Person, Pair<String, String>>()
     * {
     *     public Pair<String, String> valueOf(Integer age, Person person)
     *     {
     *         return Tuples.pair(age.toString(), person.getLastName());
     *     }
     * }, HashBagMultimap.<String, String>newMultimap());
     * 
* * @param function a {@link Function2} to use for transformation * @param target the Multimap to append for all elements in this {@code Multimap} that are evaluated in {@code function} * @return {@code target}, which contains appended elements as a result of the transformation * @since 6.0 */ > R collectKeysValues(Function2> function, R target); /** * Returns a new multimap with the results of applying the specified keyFunction and valueFunction on each key and corresponding values of the source multimap. * This method is also commonly called transform or map. * *
e.g.
     * return multimap.collectKeyMultiValues(each -> each + 1, Person::getLastName);
     * 
* * @param keyFunction {@link Function} to use transformation to get the key * @param valueFunction {@link Function} to use transformation to get the values * @return a new {@code Multimap}, which contains elements as a result of the transformation * @since 10.0 */ Multimap collectKeyMultiValues(Function keyFunction, Function valueFunction); /** * Same as the collectKeyMultiValues method but uses the specified target multimap for the results. * *
e.g.
     * return multimap.collectKeyMultiValues(each -> each + 1, Person::getLastName, HashBagMultimap.<Integer, String>newMultimap());
     * 
* * @param keyFunction {@link Function} to use transformation to get the key * @param valueFunction {@link Function} to use transformation to get the values * @param target the Multimap to append for all elements in this {@code Multimap} that are evaluated in {@code keyFunction} and {@code valueFunction} * @return {@code target}, which contains appended elements as a result of the transformation * @since 10.0 */ > R collectKeyMultiValues(Function keyFunction, Function valueFunction, R target); /** * Returns a new multimap with the results of applying the specified function on each value of the source * multimap. This method is also commonly called transform or map. * *
e.g.
     * return multimap.collectValues(new Function<Person, String>()
     * {
     *     public String valueOf(Person person)
     *     {
     *         return person.getLastName();
     *     }
     * });
     * 
* * @param function a {@link Function} to use for transformation * @return {@code Multimap}, which contains elements as a result of the transformation * @since 6.0 */ Multimap collectValues(Function function); /** * Same as the collect method but uses the specified target multimap for the results. * *
e.g.
     * return multimap.collectValues(new Function<Person, String>()
     * {
     *     public String valueOf(Person person)
     *     {
     *         return person.getLastName();
     *     }
     * }, FastListMultimap.<Integer, String>newMultimap());
     * 
* * @param function a {@link Function} to use for transformation * @param target the Multimap to append for all elements in this {@code Multimap} that are evaluated in {@code function} * @return {@code target}, which contains appended elements as a result of the transformation * @since 6.0 */ > R collectValues(Function function, R target); } MutableMultimap.java000066400000000000000000000112531407344533200402010ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.collection.MutableCollection; import org.eclipse.collections.api.map.MutableMapIterable; import org.eclipse.collections.api.tuple.Pair; /** * @since 1.0 */ public interface MutableMultimap extends Multimap { @Override MutableMultimap newEmpty(); @Override MutableCollection get(K key); // Modification Operations boolean put(K key, V value); /** * Modification operation similar to put, however, takes the key-value pair as the input. * * @param keyValuePair key value pair to add in the multimap * @see #put(Object, Object) * @since 6.0 */ default boolean add(Pair keyValuePair) { return this.put(keyValuePair.getOne(), keyValuePair.getTwo()); } boolean remove(Object key, Object value); // Bulk Operations default boolean putAllPairs(Pair... pairs) { boolean changed = false; for (Pair pair : pairs) { changed |= this.put(pair.getOne(), pair.getTwo()); } return changed; } default boolean putAllPairs(Iterable> pairs) { boolean changed = false; for (Pair pair : pairs) { changed |= this.put(pair.getOne(), pair.getTwo()); } return changed; } boolean putAll(K key, Iterable values); boolean putAll(Multimap multimap); RichIterable replaceValues(K key, Iterable values); RichIterable removeAll(Object key); /** * Puts values into multimap if there are no values already associated with key. * Then returns a view of the values associated with key, like the result of {@link Multimap#get(Object)} * * @since 10.0 */ MutableCollection getIfAbsentPutAll(K key, Iterable values); void clear(); @Override MutableMultimap flip(); @Override MutableMultimap selectKeysValues(Predicate2 predicate); @Override MutableMultimap rejectKeysValues(Predicate2 predicate); @Override MutableMultimap selectKeysMultiValues(Predicate2> predicate); @Override MutableMultimap rejectKeysMultiValues(Predicate2> predicate); @Override MutableMultimap collectKeysValues(Function2> function); @Override MutableMultimap collectValues(Function function); @Override MutableMultimap collectKeyMultiValues(Function keyFunction, Function valueFunction); /** * Returns a synchronized wrapper backed by this multimap. * * The preferred way of iterating over a synchronized multimap is to use the forEachKey(), forEachValue(), * forEachKeyValue() and forEachKeyMultiValues methods which are properly synchronized internally. *
     *  MutableMultimap synchedMultimap = multimap.asSynchronized();
     *
     *  synchedMultimap.forEachKey(key -> ... );
     *  synchedMultimap.forEachValue(value -> ... );
     *  synchedMultimap.forEachKeyValue((key, value) -> ... );
     *  synchedMultimap.forEachKeyMultiValues((key, values) -> ... );
     * 
*

* If you want to iterate imperatively over the keySet(), keysView(), valuesView(), or other views, you will * need to protect the iteration by wrapping the code in a synchronized block on the multimap. *

* * @return a synchronized view of this multimap. * @see MutableMapIterable#asSynchronized() * @since 8.0 */ MutableMultimap asSynchronized(); } bag/000077500000000000000000000000001407344533200347635ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimapBagMultimap.java000066400000000000000000000025161407344533200400340ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/bag/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap.bag; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.bag.Bag; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.multimap.Multimap; public interface BagMultimap extends Multimap { @Override BagMultimap newEmpty(); @Override Bag get(K key); @Override BagMultimap flip(); @Override BagMultimap selectKeysValues(Predicate2 predicate); @Override BagMultimap rejectKeysValues(Predicate2 predicate); @Override BagMultimap selectKeysMultiValues(Predicate2> predicate); @Override BagMultimap rejectKeysMultiValues(Predicate2> predicate); } ImmutableBagIterableMultimap.java000066400000000000000000000047351407344533200433510ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/bag/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap.bag; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.bag.ImmutableBagIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.multimap.ImmutableMultimap; import org.eclipse.collections.api.tuple.Pair; /** * @since 6.0 */ public interface ImmutableBagIterableMultimap extends ImmutableMultimap, BagMultimap { @Override ImmutableBagIterableMultimap newEmpty(); @Override ImmutableBagIterable get(K key); @Override ImmutableBagIterableMultimap newWith(K key, V value); @Override ImmutableBagIterableMultimap newWithout(Object key, Object value); @Override ImmutableBagIterableMultimap newWithAll(K key, Iterable values); @Override ImmutableBagIterableMultimap newWithoutAll(Object key); @Override ImmutableBagIterableMultimap flip(); @Override ImmutableBagIterableMultimap selectKeysValues(Predicate2 predicate); @Override ImmutableBagIterableMultimap rejectKeysValues(Predicate2 predicate); @Override ImmutableBagIterableMultimap selectKeysMultiValues(Predicate2> predicate); @Override ImmutableBagIterableMultimap rejectKeysMultiValues(Predicate2> predicate); @Override ImmutableBagIterableMultimap collectKeysValues(Function2> function); @Override ImmutableBagIterableMultimap collectKeyMultiValues(Function keyFunction, Function valueFunction); @Override ImmutableMultimap collectValues(Function function); } ImmutableBagMultimap.java000066400000000000000000000050051407344533200416700ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/bag/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap.bag; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.bag.ImmutableBag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.tuple.Pair; /** * @since 1.0 */ public interface ImmutableBagMultimap extends UnsortedBagMultimap, ImmutableBagIterableMultimap { /** * @since 11.0 */ void forEachKeyImmutableBag(Procedure2> procedure); @Override ImmutableBagMultimap newEmpty(); @Override ImmutableBag get(K key); @Override ImmutableBagMultimap newWith(K key, V value); @Override ImmutableBagMultimap newWithout(Object key, Object value); @Override ImmutableBagMultimap newWithAll(K key, Iterable values); @Override ImmutableBagMultimap newWithoutAll(Object key); @Override ImmutableBagMultimap flip(); @Override ImmutableBagMultimap selectKeysValues(Predicate2 predicate); @Override ImmutableBagMultimap rejectKeysValues(Predicate2 predicate); @Override ImmutableBagMultimap selectKeysMultiValues(Predicate2> predicate); @Override ImmutableBagMultimap rejectKeysMultiValues(Predicate2> predicate); @Override ImmutableBagMultimap collectKeysValues(Function2> function); @Override ImmutableBagMultimap collectKeyMultiValues(Function keyFunction, Function valueFunction); @Override ImmutableBagMultimap collectValues(Function function); } MutableBagIterableMultimap.java000066400000000000000000000046551407344533200430240ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/bag/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap.bag; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.bag.MutableBagIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.multimap.MutableMultimap; import org.eclipse.collections.api.tuple.Pair; /** * @since 6.0 */ public interface MutableBagIterableMultimap extends MutableMultimap, BagMultimap { @Override MutableBagIterable replaceValues(K key, Iterable values); @Override MutableBagIterable removeAll(Object key); @Override MutableBagIterableMultimap newEmpty(); @Override MutableBagIterable get(K key); @Override MutableBagIterable getIfAbsentPutAll(K key, Iterable values); @Override MutableBagIterableMultimap flip(); @Override MutableBagIterableMultimap selectKeysValues(Predicate2 predicate); @Override MutableBagIterableMultimap rejectKeysValues(Predicate2 predicate); @Override MutableBagIterableMultimap selectKeysMultiValues(Predicate2> predicate); @Override MutableBagIterableMultimap rejectKeysMultiValues(Predicate2> predicate); @Override MutableBagIterableMultimap collectKeysValues(Function2> function); @Override MutableBagIterableMultimap collectKeyMultiValues(Function keyFunction, Function valueFunction); @Override MutableMultimap collectValues(Function function); @Override MutableBagIterableMultimap asSynchronized(); } MutableBagMultimap.java000066400000000000000000000050031407344533200413400ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/bag/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap.bag; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.bag.MutableBag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.tuple.Pair; /** * @since 1.0 */ public interface MutableBagMultimap extends MutableBagIterableMultimap, UnsortedBagMultimap { /** * @since 11.0 */ void forEachKeyMutableBag(Procedure2> procedure); @Override MutableBag replaceValues(K key, Iterable values); @Override MutableBag removeAll(Object key); @Override MutableBagMultimap newEmpty(); @Override MutableBag get(K key); @Override MutableBag getIfAbsentPutAll(K key, Iterable values); void putOccurrences(K key, V value, int occurrences); @Override MutableBagMultimap flip(); @Override MutableBagMultimap selectKeysValues(Predicate2 predicate); @Override MutableBagMultimap rejectKeysValues(Predicate2 predicate); @Override MutableBagMultimap selectKeysMultiValues(Predicate2> predicate); @Override MutableBagMultimap rejectKeysMultiValues(Predicate2> predicate); @Override MutableBagMultimap collectKeysValues(Function2> function); @Override MutableBagMultimap collectKeyMultiValues(Function keyFunction, Function valueFunction); @Override MutableBagMultimap collectValues(Function function); @Override MutableBagMultimap asSynchronized(); } UnsortedBagMultimap.java000066400000000000000000000037441407344533200415640ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/bag/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap.bag; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.bag.UnsortedBag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.tuple.Pair; public interface UnsortedBagMultimap extends BagMultimap { @Override UnsortedBagMultimap newEmpty(); @Override UnsortedBag get(K key); @Override MutableBagMultimap toMutable(); @Override ImmutableBagMultimap toImmutable(); @Override UnsortedBagMultimap selectKeysValues(Predicate2 predicate); @Override UnsortedBagMultimap rejectKeysValues(Predicate2 predicate); @Override UnsortedBagMultimap selectKeysMultiValues(Predicate2> predicate); @Override UnsortedBagMultimap rejectKeysMultiValues(Predicate2> predicate); @Override UnsortedBagMultimap collectKeysValues(Function2> function); @Override UnsortedBagMultimap collectKeyMultiValues(Function keyFunction, Function valueFunction); @Override UnsortedBagMultimap collectValues(Function function); } package-info.java000066400000000000000000000024711407344533200401560ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/bag/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for {@link org.eclipse.collections.api.multimap.bag.BagMultimap}. *

* A BagMultimap is a type of {@link org.eclipse.collections.api.multimap.Multimap} that stores the values for keys in a {@link org.eclipse.collections.api.bag.Bag}. *

* This package contains 3 interfaces: *

    *
  • * {@link org.eclipse.collections.api.multimap.bag.BagMultimap} - A Read-only Bag Multimap API. *
  • *
  • * {@link org.eclipse.collections.api.multimap.bag.MutableBagMultimap} - Modifiable Bag multimap. *
  • *
  • * {@link org.eclipse.collections.api.multimap.bag.ImmutableBagMultimap} - Non-modifiable equivalent interface to {@link org.eclipse.collections.api.multimap.bag.MutableBagMultimap}. *
  • *
*/ package org.eclipse.collections.api.multimap.bag; list/000077500000000000000000000000001407344533200352055ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimapImmutableListMultimap.java000066400000000000000000000052111407344533200423330ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/list/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap.list; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.list.ImmutableList; import org.eclipse.collections.api.multimap.ImmutableMultimap; import org.eclipse.collections.api.multimap.bag.ImmutableBagMultimap; import org.eclipse.collections.api.tuple.Pair; /** * @since 1.0 */ public interface ImmutableListMultimap extends ListMultimap, ImmutableMultimap { /** * @since 11.0 */ void forEachKeyImmutableList(Procedure2> procedure); @Override ImmutableListMultimap newEmpty(); @Override ImmutableList get(K key); @Override ImmutableListMultimap newWith(K key, V value); @Override ImmutableListMultimap newWithout(Object key, Object value); @Override ImmutableListMultimap newWithAll(K key, Iterable values); @Override ImmutableListMultimap newWithoutAll(Object key); @Override ImmutableBagMultimap flip(); @Override ImmutableListMultimap selectKeysValues(Predicate2 predicate); @Override ImmutableListMultimap rejectKeysValues(Predicate2 predicate); @Override ImmutableListMultimap selectKeysMultiValues(Predicate2> predicate); @Override ImmutableListMultimap rejectKeysMultiValues(Predicate2> predicate); @Override ImmutableBagMultimap collectKeysValues(Function2> function); @Override ImmutableBagMultimap collectKeyMultiValues(Function keyFunction, Function valueFunction); @Override ImmutableListMultimap collectValues(Function function); } ListMultimap.java000066400000000000000000000043071407344533200405000ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/list/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap.list; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.list.ListIterable; import org.eclipse.collections.api.multimap.bag.BagMultimap; import org.eclipse.collections.api.multimap.bag.UnsortedBagMultimap; import org.eclipse.collections.api.multimap.ordered.ReversibleIterableMultimap; import org.eclipse.collections.api.tuple.Pair; public interface ListMultimap extends ReversibleIterableMultimap { @Override ListMultimap newEmpty(); @Override ListIterable get(K key); @Override MutableListMultimap toMutable(); @Override ImmutableListMultimap toImmutable(); @Override UnsortedBagMultimap flip(); @Override ListMultimap selectKeysValues(Predicate2 predicate); @Override ListMultimap rejectKeysValues(Predicate2 predicate); @Override ListMultimap selectKeysMultiValues(Predicate2> predicate); @Override ListMultimap rejectKeysMultiValues(Predicate2> predicate); @Override BagMultimap collectKeysValues(Function2> function); @Override BagMultimap collectKeyMultiValues(Function keyFunction, Function valueFunction); @Override ListMultimap collectValues(Function function); } MutableListMultimap.java000066400000000000000000000051101407344533200420030ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/list/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap.list; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.multimap.MutableMultimap; import org.eclipse.collections.api.multimap.bag.MutableBagMultimap; import org.eclipse.collections.api.tuple.Pair; /** * @since 1.0 */ public interface MutableListMultimap extends ListMultimap, MutableMultimap { /** * @since 11.0 */ void forEachKeyMutableList(Procedure2> procedure); @Override MutableList replaceValues(K key, Iterable values); @Override MutableList removeAll(Object key); @Override MutableListMultimap newEmpty(); @Override MutableList get(K key); @Override MutableList getIfAbsentPutAll(K key, Iterable values); @Override MutableBagMultimap flip(); @Override MutableListMultimap selectKeysValues(Predicate2 predicate); @Override MutableListMultimap rejectKeysValues(Predicate2 predicate); @Override MutableListMultimap selectKeysMultiValues(Predicate2> predicate); @Override MutableListMultimap rejectKeysMultiValues(Predicate2> predicate); @Override MutableBagMultimap collectKeysValues(Function2> function); @Override MutableBagMultimap collectKeyMultiValues(Function keyFunction, Function valueFunction); @Override MutableListMultimap collectValues(Function function); @Override MutableListMultimap asSynchronized(); } package-info.java000066400000000000000000000025201407344533200403730ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/list/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for {@link org.eclipse.collections.api.multimap.list.ListMultimap}. *

* A ListMultimap is a type of {@link org.eclipse.collections.api.multimap.Multimap} that stores the values for keys in a {@link org.eclipse.collections.api.list.MutableList}. *

* This package contains 3 interfaces: *

    *
  • * {@link org.eclipse.collections.api.multimap.list.ListMultimap} - A Read-only List Multimap API. *
  • *
  • * {@link org.eclipse.collections.api.multimap.list.MutableListMultimap} - Modifiable List multimap. *
  • *
  • * {@link org.eclipse.collections.api.multimap.list.ImmutableListMultimap} - Non-modifiable equivalent interface to {@link org.eclipse.collections.api.multimap.list.MutableListMultimap}. *
  • *
*/ package org.eclipse.collections.api.multimap.list; ordered/000077500000000000000000000000001407344533200356565ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimapOrderedIterableMultimap.java000066400000000000000000000040301407344533200432630ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/ordered/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap.ordered; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.multimap.Multimap; import org.eclipse.collections.api.multimap.bag.BagMultimap; import org.eclipse.collections.api.ordered.OrderedIterable; import org.eclipse.collections.api.tuple.Pair; /** * @since 6.0 */ public interface OrderedIterableMultimap extends Multimap { @Override OrderedIterableMultimap newEmpty(); @Override OrderedIterable get(K key); @Override OrderedIterableMultimap selectKeysValues(Predicate2 predicate); @Override OrderedIterableMultimap rejectKeysValues(Predicate2 predicate); @Override OrderedIterableMultimap selectKeysMultiValues(Predicate2> predicate); @Override OrderedIterableMultimap rejectKeysMultiValues(Predicate2> predicate); @Override BagMultimap collectKeysValues(Function2> function); @Override BagMultimap collectKeyMultiValues(Function keyFunction, Function valueFunction); @Override OrderedIterableMultimap collectValues(Function function); } ReversibleIterableMultimap.java000066400000000000000000000030531407344533200440050ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/ordered/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap.ordered; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.ordered.ReversibleIterable; public interface ReversibleIterableMultimap extends OrderedIterableMultimap { @Override ReversibleIterableMultimap newEmpty(); @Override ReversibleIterable get(K key); @Override ReversibleIterableMultimap selectKeysValues(Predicate2 predicate); @Override ReversibleIterableMultimap rejectKeysValues(Predicate2 predicate); @Override ReversibleIterableMultimap selectKeysMultiValues(Predicate2> predicate); @Override ReversibleIterableMultimap rejectKeysMultiValues(Predicate2> predicate); @Override ReversibleIterableMultimap collectValues(Function function); } SortedIterableMultimap.java000066400000000000000000000032311407344533200431410ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/ordered/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap.ordered; import java.util.Comparator; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.multimap.list.ListMultimap; import org.eclipse.collections.api.ordered.SortedIterable; /** * @since 5.0 */ public interface SortedIterableMultimap extends OrderedIterableMultimap { @Override SortedIterableMultimap newEmpty(); @Override SortedIterable get(K key); Comparator comparator(); @Override SortedIterableMultimap selectKeysValues(Predicate2 predicate); @Override SortedIterableMultimap rejectKeysValues(Predicate2 predicate); @Override SortedIterableMultimap selectKeysMultiValues(Predicate2> predicate); @Override SortedIterableMultimap rejectKeysMultiValues(Predicate2> predicate); @Override ListMultimap collectValues(Function function); } package-info.java000066400000000000000000000023151407344533200374220ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for {@link org.eclipse.collections.api.multimap.Multimap}. *

* A Multimap is a type of {@link java.util.Map} that can associate multiple values for keys. *

* This package contains 3 interfaces: *

    *
  • * {@link org.eclipse.collections.api.multimap.Multimap} - a Read-only Multimap API. *
  • *
  • * {@link org.eclipse.collections.api.multimap.MutableMultimap} - a modifiable Multimap. *
  • *
  • * {@link org.eclipse.collections.api.multimap.ImmutableMultimap} - the non-modifiable equivalent interface to {@link org.eclipse.collections.api.multimap.MutableMultimap}. *
  • *
*/ package org.eclipse.collections.api.multimap; set/000077500000000000000000000000001407344533200350255ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimapImmutableSetIterableMultimap.java000066400000000000000000000050531407344533200434470ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/set/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap.set; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.multimap.ImmutableMultimap; import org.eclipse.collections.api.multimap.bag.ImmutableBagIterableMultimap; import org.eclipse.collections.api.set.ImmutableSetIterable; import org.eclipse.collections.api.tuple.Pair; /** * @since 6.0 */ public interface ImmutableSetIterableMultimap extends SetMultimap, ImmutableMultimap { @Override ImmutableSetIterable get(K key); @Override ImmutableSetIterableMultimap newEmpty(); @Override ImmutableSetIterableMultimap newWith(K key, V value); @Override ImmutableSetIterableMultimap newWithout(Object key, Object value); @Override ImmutableSetIterableMultimap newWithAll(K key, Iterable values); @Override ImmutableSetIterableMultimap newWithoutAll(Object key); @Override ImmutableSetIterableMultimap flip(); @Override ImmutableSetIterableMultimap selectKeysValues(Predicate2 predicate); @Override ImmutableSetIterableMultimap rejectKeysValues(Predicate2 predicate); @Override ImmutableSetIterableMultimap selectKeysMultiValues(Predicate2> predicate); @Override ImmutableSetIterableMultimap rejectKeysMultiValues(Predicate2> predicate); @Override ImmutableBagIterableMultimap collectKeysValues(Function2> function); @Override ImmutableBagIterableMultimap collectKeyMultiValues(Function keyFunction, Function valueFunction); @Override ImmutableMultimap collectValues(Function function); } ImmutableSetMultimap.java000066400000000000000000000051131407344533200417740ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/set/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap.set; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.multimap.bag.ImmutableBagMultimap; import org.eclipse.collections.api.set.ImmutableSet; import org.eclipse.collections.api.tuple.Pair; /** * @since 1.0 */ public interface ImmutableSetMultimap extends UnsortedSetMultimap, ImmutableSetIterableMultimap { /** * @since 11.0 */ void forEachKeyImmutableSet(Procedure2> procedure); @Override ImmutableSet get(K key); @Override ImmutableSetMultimap newEmpty(); @Override ImmutableSetMultimap newWith(K key, V value); @Override ImmutableSetMultimap newWithout(Object key, Object value); @Override ImmutableSetMultimap newWithAll(K key, Iterable values); @Override ImmutableSetMultimap newWithoutAll(Object key); @Override ImmutableSetMultimap flip(); @Override ImmutableSetMultimap selectKeysValues(Predicate2 predicate); @Override ImmutableSetMultimap rejectKeysValues(Predicate2 predicate); @Override ImmutableSetMultimap selectKeysMultiValues(Predicate2> predicate); @Override ImmutableSetMultimap rejectKeysMultiValues(Predicate2> predicate); @Override ImmutableBagMultimap collectKeysValues(Function2> function); @Override ImmutableBagMultimap collectKeyMultiValues(Function keyFunction, Function valueFunction); @Override ImmutableBagMultimap collectValues(Function function); } MutableSetIterableMultimap.java000066400000000000000000000047711407344533200431270ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/set/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap.set; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.multimap.MutableMultimap; import org.eclipse.collections.api.multimap.bag.MutableBagIterableMultimap; import org.eclipse.collections.api.set.MutableSetIterable; import org.eclipse.collections.api.tuple.Pair; /** * @since 6.0 */ public interface MutableSetIterableMultimap extends SetMultimap, MutableMultimap { @Override MutableSetIterable replaceValues(K key, Iterable values); @Override MutableSetIterable removeAll(Object key); @Override MutableSetIterableMultimap newEmpty(); @Override MutableSetIterable get(K key); @Override MutableSetIterable getIfAbsentPutAll(K key, Iterable values); @Override MutableSetIterableMultimap flip(); @Override MutableSetIterableMultimap selectKeysValues(Predicate2 predicate); @Override MutableSetIterableMultimap rejectKeysValues(Predicate2 predicate); @Override MutableSetIterableMultimap selectKeysMultiValues(Predicate2> predicate); @Override MutableSetIterableMultimap rejectKeysMultiValues(Predicate2> predicate); @Override MutableBagIterableMultimap collectKeysValues(Function2> function); @Override MutableBagIterableMultimap collectKeyMultiValues(Function keyFunction, Function valueFunction); @Override MutableMultimap collectValues(Function function); @Override MutableSetIterableMultimap asSynchronized(); } MutableSetMultimap.java000066400000000000000000000050141407344533200414460ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/set/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap.set; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.multimap.bag.MutableBagMultimap; import org.eclipse.collections.api.set.MutableSet; import org.eclipse.collections.api.tuple.Pair; /** * @since 1.0 */ public interface MutableSetMultimap extends UnsortedSetMultimap, MutableSetIterableMultimap { /** * @since 11.0 */ void forEachKeyMutableSet(Procedure2> procedure); @Override MutableSet replaceValues(K key, Iterable values); @Override MutableSet removeAll(Object key); @Override MutableSetMultimap newEmpty(); @Override MutableSet get(K key); @Override MutableSet getIfAbsentPutAll(K key, Iterable values); @Override MutableSetMultimap flip(); @Override MutableSetMultimap selectKeysValues(Predicate2 predicate); @Override MutableSetMultimap rejectKeysValues(Predicate2 predicate); @Override MutableSetMultimap selectKeysMultiValues(Predicate2> predicate); @Override MutableSetMultimap rejectKeysMultiValues(Predicate2> predicate); @Override MutableBagMultimap collectKeysValues(Function2> function); @Override MutableBagMultimap collectKeyMultiValues(Function keyFunction, Function valueFunction); @Override MutableBagMultimap collectValues(Function function); @Override MutableSetMultimap asSynchronized(); } SetMultimap.java000066400000000000000000000025361407344533200401420ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/set/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap.set; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.multimap.Multimap; import org.eclipse.collections.api.set.SetIterable; public interface SetMultimap extends Multimap { @Override SetMultimap newEmpty(); @Override SetIterable get(K key); @Override SetMultimap flip(); @Override SetMultimap selectKeysValues(Predicate2 predicate); @Override SetMultimap rejectKeysValues(Predicate2 predicate); @Override SetMultimap selectKeysMultiValues(Predicate2> predicate); @Override SetMultimap rejectKeysMultiValues(Predicate2> predicate); } UnsortedSetMultimap.java000066400000000000000000000040711407344533200416620ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/set/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap.set; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.multimap.bag.UnsortedBagMultimap; import org.eclipse.collections.api.set.UnsortedSetIterable; import org.eclipse.collections.api.tuple.Pair; public interface UnsortedSetMultimap extends SetMultimap { @Override UnsortedSetMultimap newEmpty(); @Override UnsortedSetIterable get(K key); @Override MutableSetMultimap toMutable(); @Override ImmutableSetMultimap toImmutable(); @Override UnsortedSetMultimap selectKeysValues(Predicate2 predicate); @Override UnsortedSetMultimap rejectKeysValues(Predicate2 predicate); @Override UnsortedSetMultimap selectKeysMultiValues(Predicate2> predicate); @Override UnsortedSetMultimap rejectKeysMultiValues(Predicate2> predicate); @Override UnsortedBagMultimap collectKeysValues(Function2> function); @Override UnsortedBagMultimap collectKeyMultiValues(Function keyFunction, Function valueFunction); @Override UnsortedBagMultimap collectValues(Function function); } package-info.java000066400000000000000000000025001407344533200402110ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/set/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for {@link org.eclipse.collections.api.multimap.set.SetMultimap}. *

* A SetMultimap is a type of {@link org.eclipse.collections.api.multimap.Multimap} that stores the values for keys in a {@link org.eclipse.collections.api.set.MutableSet}. *

* This package contains 3 interfaces: *

    *
  • * {@link org.eclipse.collections.api.multimap.set.SetMultimap} - A Read-only Set Multimap API. *
  • *
  • * {@link org.eclipse.collections.api.multimap.set.MutableSetMultimap} - Modifiable Set multimap. *
  • *
  • * {@link org.eclipse.collections.api.multimap.set.ImmutableSetMultimap} - Non-modifiable equivalent interface to {@link org.eclipse.collections.api.multimap.set.MutableSetMultimap}. *
  • *
*/ package org.eclipse.collections.api.multimap.set; sortedbag/000077500000000000000000000000001407344533200362045ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimapImmutableSortedBagMultimap.java000066400000000000000000000051541407344533200442770ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/sortedbag/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap.sortedbag; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.bag.sorted.ImmutableSortedBag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.multimap.bag.ImmutableBagIterableMultimap; import org.eclipse.collections.api.multimap.bag.ImmutableBagMultimap; import org.eclipse.collections.api.multimap.list.ImmutableListMultimap; import org.eclipse.collections.api.tuple.Pair; /** * @since 4.2 */ public interface ImmutableSortedBagMultimap extends ImmutableBagIterableMultimap, SortedBagMultimap { @Override ImmutableSortedBag get(K key); @Override ImmutableSortedBagMultimap newEmpty(); @Override ImmutableSortedBagMultimap newWith(K key, V value); @Override ImmutableSortedBagMultimap newWithout(Object key, Object value); @Override ImmutableSortedBagMultimap newWithAll(K key, Iterable values); @Override ImmutableSortedBagMultimap newWithoutAll(Object key); @Override ImmutableBagMultimap flip(); @Override ImmutableSortedBagMultimap selectKeysValues(Predicate2 predicate); @Override ImmutableSortedBagMultimap rejectKeysValues(Predicate2 predicate); @Override ImmutableSortedBagMultimap selectKeysMultiValues(Predicate2> predicate); @Override ImmutableSortedBagMultimap rejectKeysMultiValues(Predicate2> predicate); @Override ImmutableBagMultimap collectKeysValues(Function2> function); @Override ImmutableBagMultimap collectKeyMultiValues(Function keyFunction, Function valueFunction); @Override ImmutableListMultimap collectValues(Function function); } MutableSortedBagMultimap.java000066400000000000000000000050701407344533200437460ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/sortedbag/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap.sortedbag; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.bag.sorted.MutableSortedBag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.multimap.bag.MutableBagIterableMultimap; import org.eclipse.collections.api.multimap.bag.MutableBagMultimap; import org.eclipse.collections.api.multimap.list.MutableListMultimap; import org.eclipse.collections.api.tuple.Pair; /** * @since 4.2 */ public interface MutableSortedBagMultimap extends MutableBagIterableMultimap, SortedBagMultimap { @Override MutableSortedBag replaceValues(K key, Iterable values); @Override MutableSortedBag removeAll(Object key); @Override MutableSortedBagMultimap newEmpty(); @Override MutableSortedBag get(K key); @Override MutableSortedBag getIfAbsentPutAll(K key, Iterable values); @Override MutableBagMultimap flip(); @Override MutableSortedBagMultimap selectKeysValues(Predicate2 predicate); @Override MutableSortedBagMultimap rejectKeysValues(Predicate2 predicate); @Override MutableSortedBagMultimap selectKeysMultiValues(Predicate2> predicate); @Override MutableSortedBagMultimap rejectKeysMultiValues(Predicate2> predicate); @Override MutableBagMultimap collectKeysValues(Function2> function); @Override MutableBagMultimap collectKeyMultiValues(Function keyFunction, Function valueFunction); @Override MutableListMultimap collectValues(Function function); @Override MutableSortedBagMultimap asSynchronized(); } SortedBagMultimap.java000066400000000000000000000045141407344533200424360ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/sortedbag/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap.sortedbag; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.bag.sorted.SortedBag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.multimap.bag.BagMultimap; import org.eclipse.collections.api.multimap.list.ListMultimap; import org.eclipse.collections.api.multimap.ordered.ReversibleIterableMultimap; import org.eclipse.collections.api.multimap.ordered.SortedIterableMultimap; import org.eclipse.collections.api.tuple.Pair; /** * @since 4.2 */ public interface SortedBagMultimap extends BagMultimap, SortedIterableMultimap, ReversibleIterableMultimap { @Override SortedBagMultimap newEmpty(); @Override SortedBag get(K key); @Override MutableSortedBagMultimap toMutable(); @Override ImmutableSortedBagMultimap toImmutable(); @Override SortedBagMultimap selectKeysValues(Predicate2 predicate); @Override SortedBagMultimap rejectKeysValues(Predicate2 predicate); @Override SortedBagMultimap selectKeysMultiValues(Predicate2> predicate); @Override SortedBagMultimap rejectKeysMultiValues(Predicate2> predicate); @Override BagMultimap collectKeysValues(Function2> function); @Override BagMultimap collectKeyMultiValues(Function keyFunction, Function valueFunction); @Override ListMultimap collectValues(Function function); } package-info.java000066400000000000000000000026431407344533200414000ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/sortedbag/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for {@link org.eclipse.collections.api.multimap.sortedbag.SortedBagMultimap}. *

* A SortedBagMultimap is a type of {@link org.eclipse.collections.api.multimap.Multimap} that stores the values for keys in a {@link org.eclipse.collections.api.bag.sorted.MutableSortedBag}. *

* This package contains 3 interfaces: *

    *
  • * {@link org.eclipse.collections.api.multimap.sortedbag.SortedBagMultimap} - A Read-only Sorted Bag Multimap API. *
  • *
  • * {@link org.eclipse.collections.api.multimap.sortedbag.MutableSortedBagMultimap} - Modifiable Sorted Bag multimap. *
  • *
  • * {@link org.eclipse.collections.api.multimap.sortedbag.ImmutableSortedBagMultimap} - Non-modifiable equivalent interface to {@link org.eclipse.collections.api.multimap.sortedbag.MutableSortedBagMultimap}. *
  • *
*/ package org.eclipse.collections.api.multimap.sortedbag; sortedset/000077500000000000000000000000001407344533200362465ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimapImmutableSortedSetMultimap.java000066400000000000000000000052621407344533200444030ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/sortedset/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap.sortedset; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.multimap.bag.ImmutableBagMultimap; import org.eclipse.collections.api.multimap.list.ImmutableListMultimap; import org.eclipse.collections.api.multimap.set.ImmutableSetIterableMultimap; import org.eclipse.collections.api.multimap.set.ImmutableSetMultimap; import org.eclipse.collections.api.set.sorted.ImmutableSortedSet; import org.eclipse.collections.api.tuple.Pair; /** * @since 1.0 */ public interface ImmutableSortedSetMultimap extends SortedSetMultimap, ImmutableSetIterableMultimap { @Override ImmutableSortedSet get(K key); @Override ImmutableSortedSetMultimap newEmpty(); @Override ImmutableSortedSetMultimap newWith(K key, V value); @Override ImmutableSortedSetMultimap newWithout(Object key, Object value); @Override ImmutableSortedSetMultimap newWithAll(K key, Iterable values); @Override ImmutableSortedSetMultimap newWithoutAll(Object key); @Override ImmutableSetMultimap flip(); @Override ImmutableSortedSetMultimap selectKeysValues(Predicate2 predicate); @Override ImmutableSortedSetMultimap rejectKeysValues(Predicate2 predicate); @Override ImmutableSortedSetMultimap selectKeysMultiValues(Predicate2> predicate); @Override ImmutableSortedSetMultimap rejectKeysMultiValues(Predicate2> predicate); @Override ImmutableBagMultimap collectKeysValues(Function2> function); @Override ImmutableBagMultimap collectKeyMultiValues(Function keyFunction, Function valueFunction); @Override ImmutableListMultimap collectValues(Function function); } MutableSortedSetMultimap.java000066400000000000000000000051741407344533200440570ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/sortedset/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap.sortedset; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.multimap.bag.MutableBagMultimap; import org.eclipse.collections.api.multimap.list.MutableListMultimap; import org.eclipse.collections.api.multimap.set.MutableSetIterableMultimap; import org.eclipse.collections.api.multimap.set.MutableSetMultimap; import org.eclipse.collections.api.set.sorted.MutableSortedSet; import org.eclipse.collections.api.tuple.Pair; /** * @since 1.0 */ public interface MutableSortedSetMultimap extends MutableSetIterableMultimap, SortedSetMultimap { @Override MutableSortedSet replaceValues(K key, Iterable values); @Override MutableSortedSet removeAll(Object key); @Override MutableSortedSetMultimap newEmpty(); @Override MutableSortedSet get(K key); @Override MutableSortedSet getIfAbsentPutAll(K key, Iterable values); @Override MutableSetMultimap flip(); @Override MutableSortedSetMultimap selectKeysValues(Predicate2 predicate); @Override MutableSortedSetMultimap rejectKeysValues(Predicate2 predicate); @Override MutableSortedSetMultimap selectKeysMultiValues(Predicate2> predicate); @Override MutableSortedSetMultimap rejectKeysMultiValues(Predicate2> predicate); @Override MutableBagMultimap collectKeysValues(Function2> function); @Override MutableBagMultimap collectKeyMultiValues(Function keyFunction, Function valueFunction); @Override MutableListMultimap collectValues(Function function); @Override MutableSortedSetMultimap asSynchronized(); } SortedSetMultimap.java000066400000000000000000000046311407344533200425420ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/sortedset/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.multimap.sortedset; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.multimap.bag.BagMultimap; import org.eclipse.collections.api.multimap.list.ListMultimap; import org.eclipse.collections.api.multimap.ordered.ReversibleIterableMultimap; import org.eclipse.collections.api.multimap.ordered.SortedIterableMultimap; import org.eclipse.collections.api.multimap.set.SetMultimap; import org.eclipse.collections.api.set.sorted.SortedSetIterable; import org.eclipse.collections.api.tuple.Pair; /** * @since 1.0 */ public interface SortedSetMultimap extends SetMultimap, SortedIterableMultimap, ReversibleIterableMultimap { @Override SortedSetMultimap newEmpty(); @Override SortedSetIterable get(K key); @Override MutableSortedSetMultimap toMutable(); @Override ImmutableSortedSetMultimap toImmutable(); @Override SortedSetMultimap selectKeysValues(Predicate2 predicate); @Override SortedSetMultimap rejectKeysValues(Predicate2 predicate); @Override SortedSetMultimap selectKeysMultiValues(Predicate2> predicate); @Override SortedSetMultimap rejectKeysMultiValues(Predicate2> predicate); @Override BagMultimap collectKeysValues(Function2> function); @Override BagMultimap collectKeyMultiValues(Function keyFunction, Function valueFunction); @Override ListMultimap collectValues(Function function); } package-info.java000066400000000000000000000026411407344533200414400ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/multimap/sortedset/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for {@link org.eclipse.collections.api.multimap.sortedset.SortedSetMultimap}. *

* A SortedSetMultimap is a type of {@link org.eclipse.collections.api.multimap.Multimap} that stores the values for keys in a {@link org.eclipse.collections.api.set.sorted.MutableSortedSet}. *

* This package contains 3 interfaces: *

    *
  • * {@link org.eclipse.collections.api.multimap.sortedset.SortedSetMultimap} - A Read-only SortedSet Multimap API. *
  • *
  • * {@link org.eclipse.collections.api.multimap.sortedset.MutableSortedSetMultimap} - Modifiable SortedSet multimap. *
  • *
  • * {@link org.eclipse.collections.api.multimap.sortedset.ImmutableSortedSetMultimap} - Non-modifiable equivalent interface to {@link org.eclipse.collections.api.multimap.sortedset.MutableSortedSetMultimap}. *
  • *
*/ package org.eclipse.collections.api.multimap.sortedset; ordered/000077500000000000000000000000001407344533200340265ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/apiOrderedIterable.java000066400000000000000000000365341407344533200377400ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/ordered/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.ordered; import java.util.Collection; import java.util.List; import java.util.NoSuchElementException; import java.util.Optional; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.predicate.primitive.ObjectIntPredicate; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.primitive.ObjectIntProcedure; import org.eclipse.collections.api.factory.Stacks; import org.eclipse.collections.api.multimap.ordered.OrderedIterableMultimap; import org.eclipse.collections.api.ordered.primitive.OrderedBooleanIterable; import org.eclipse.collections.api.ordered.primitive.OrderedByteIterable; import org.eclipse.collections.api.ordered.primitive.OrderedCharIterable; import org.eclipse.collections.api.ordered.primitive.OrderedDoubleIterable; import org.eclipse.collections.api.ordered.primitive.OrderedFloatIterable; import org.eclipse.collections.api.ordered.primitive.OrderedIntIterable; import org.eclipse.collections.api.ordered.primitive.OrderedLongIterable; import org.eclipse.collections.api.ordered.primitive.OrderedShortIterable; import org.eclipse.collections.api.partition.ordered.PartitionOrderedIterable; import org.eclipse.collections.api.stack.MutableStack; import org.eclipse.collections.api.tuple.Pair; /** * An OrderedIterable is a RichIterable with some meaningful order, such as insertion order, access order, or sorted order. * * @since 6.0 */ public interface OrderedIterable extends RichIterable { /** * Returns the index of the first occurrence of the specified item * in this iterable, or -1 if this iterable does not contain the item. * * @see List#indexOf(Object) */ int indexOf(Object object); /** * Returns the first element of an iterable. In the case of a List it is the element at the first index. In the * case of any other Collection, it is the first element that would be returned during an iteration. If the * iterable is empty, null is returned. If null is a valid element of the container, then a developer would need to * check to see if the iterable is empty to validate that a null result was not due to the container being empty. */ @Override T getFirst(); /** * Returns the first element of an iterable as an Optional. In the case of a List it is the element at the first index. * In the case of any other Collection, it is the first element that would be returned during an iteration. If the * iterable is empty, {@link Optional#empty} is returned. * * @throws NullPointerException if the element is null * @since 8.2 */ default Optional getFirstOptional() { if (this.isEmpty()) { return Optional.empty(); } return Optional.of(this.getFirst()); } /** * Returns the last element of an iterable. In the case of a List it is the element at the last index. In the case * of any other Collection, it is the last element that would be returned during an iteration. If the iterable is * empty, null is returned. If null is a valid element of the container, then a developer would need to check to * see if the iterable is empty to validate that a null result was not due to the container being empty. */ @Override T getLast(); /** * Returns the last element of an iterable as an Optional. In the case of a List it is the element at the last index. * In the case of any other Collection, it is the last element that would be returned during an iteration. If the * iterable is empty, {@link Optional#empty} is returned. * * @throws NullPointerException if the element is null * @since 8.2 */ default Optional getLastOptional() { if (this.isEmpty()) { return Optional.empty(); } return Optional.of(this.getLast()); } @Override OrderedIterable tap(Procedure procedure); /** * Returns the initial elements that satisfy the Predicate. Short circuits at the first element which does not * satisfy the Predicate. */ OrderedIterable takeWhile(Predicate predicate); /** * Returns the final elements that do not satisfy the Predicate. Short circuits at the first element which does * satisfy the Predicate. */ OrderedIterable dropWhile(Predicate predicate); /** * Returns a Partition of the initial elements that satisfy the Predicate and the remaining elements. Short circuits at the first element which does * satisfy the Predicate. */ PartitionOrderedIterable partitionWhile(Predicate predicate); /** * Returns a new {@code OrderedIterable} containing the distinct elements in this iterable. *

* Conceptually similar to {@link #toSet()}.{@link #toList()} but retains the original order. If an element appears * multiple times in this iterable, the first one will be copied into the result. * * @return {@code OrderedIterable} of distinct elements */ OrderedIterable distinct(); /** * Returns true if both OrderedIterables have the same length * and {@code predicate} returns true for all corresponding elements e1 of * this {@code OrderedIterable} and e2 of {@code other}. * The {@code predicate} is evaluated for each element at the same position of each {@code OrderedIterable} in a forward iteration order. * This is a short circuit pattern. * * @since 6.0 */ boolean corresponds(OrderedIterable other, Predicate2 predicate); /** * Iterates over the section of the iterable covered by the specified inclusive indexes. The indexes are * both inclusive. * *

e.g.
     * OrderedIterable<People> people = FastList.newListWith(ted, mary, bob, sally)
     * people.forEach(0, 1, new Procedure<Person>()
     * {
     *     public void value(Person person)
     *     {
     *          LOGGER.info(person.getName());
     *     }
     * });
     * 
*

* This code would output ted and mary's names. */ void forEach(int startIndex, int endIndex, Procedure procedure); /** * Iterates over the iterable passing each element and the current relative int index to the specified instance of * ObjectIntProcedure *

e.g.
     * people.forEachWithIndex(new ObjectIntProcedure<Person>()
     * {
     *     public void value(Person person, int index)
     *     {
     *         LOGGER.info("Index: " + index + " person: " + person.getName());
     *     }
     * });
     * 
*/ @Override void forEachWithIndex(ObjectIntProcedure objectIntProcedure); /** * Iterates over the section of the iterable covered by the specified inclusive indexes. The indexes are * both inclusive. * *
e.g.
     * OrderedIterable<People> people = FastList.newListWith(ted, mary, bob, sally)
     * people.forEachWithIndex(0, 1, new ObjectIntProcedure<Person>()
     * {
     *     public void value(Person person, int index)
     *     {
     *          LOGGER.info(person.getName());
     *     }
     * });
     * 
*

* This code would output ted and mary's names. */ void forEachWithIndex(int fromIndex, int toIndex, ObjectIntProcedure objectIntProcedure); /** * Converts the OrderedIterable to a mutable MutableStack implementation. */ default MutableStack toStack() { return Stacks.mutable.withAll(this); } /** * Returns the minimum element out of this container based on the natural order, not the order of this container. * If you want the minimum element based on the order of this container, use {@link #getFirst()}. * * @throws ClassCastException if the elements are not {@link Comparable} * @throws NoSuchElementException if the OrderedIterable is empty */ @Override T min(); /** * Returns the maximum element out of this container based on the natural order, not the order of this container. * If you want the maximum element based on the order of this container, use {@link #getLast()}. * * @throws ClassCastException if the elements are not {@link Comparable} * @throws NoSuchElementException if the OrderedIterable is empty */ @Override T max(); @Override OrderedIterable select(Predicate predicate); @Override

OrderedIterable selectWith(Predicate2 predicate, P parameter); @Override OrderedIterable reject(Predicate predicate); @Override

OrderedIterable rejectWith(Predicate2 predicate, P parameter); @Override PartitionOrderedIterable partition(Predicate predicate); @Override

PartitionOrderedIterable partitionWith(Predicate2 predicate, P parameter); @Override OrderedIterable selectInstancesOf(Class clazz); @Override OrderedIterable collect(Function function); /** * Returns a new OrderedIterable using results obtained by applying the specified function to each element * and its corresponding index. * * @since 9.1. */ default OrderedIterable collectWithIndex(ObjectIntToObjectFunction function) { int[] index = {0}; return this.collect(each -> function.valueOf(each, index[0]++)); } /** * Adds elements to the target Collection using results obtained by applying the specified function to each element * and its corresponding index. * * @since 9.1. */ default > R collectWithIndex(ObjectIntToObjectFunction function, R target) { int[] index = {0}; return this.collect(each -> function.valueOf(each, index[0]++), target); } /** * Adds all elements to the target Collection that return true when evaluating the specified predicate which is * supplied each element and its relative index. * * @since 11.0 */ default > R selectWithIndex(ObjectIntPredicate predicate, R target) { int[] index = {0}; return this.select(each -> predicate.accept(each, index[0]++), target); } /** * Adds all elements to the target Collection that return false when evaluating the specified predicate which is * supplied each element and its relative index. * * @since 11.0 */ default > R rejectWithIndex(ObjectIntPredicate predicate, R target) { int[] index = {0}; return this.reject(each -> predicate.accept(each, index[0]++), target); } @Override OrderedIterable collectWith(Function2 function, P parameter); @Override OrderedIterable collectIf(Predicate predicate, Function function); @Override OrderedIterable flatCollect(Function> function); /** * @since 9.2 */ @Override default OrderedIterable flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override OrderedBooleanIterable collectBoolean(BooleanFunction booleanFunction); @Override OrderedByteIterable collectByte(ByteFunction byteFunction); @Override OrderedCharIterable collectChar(CharFunction charFunction); @Override OrderedDoubleIterable collectDouble(DoubleFunction doubleFunction); @Override OrderedFloatIterable collectFloat(FloatFunction floatFunction); @Override OrderedIntIterable collectInt(IntFunction intFunction); @Override OrderedLongIterable collectLong(LongFunction longFunction); @Override OrderedShortIterable collectShort(ShortFunction shortFunction); /** * Returns the index of the first element of the {@code OrderedIterable} for which the {@code predicate} evaluates to true. * Returns -1 if no element evaluates true for the {@code predicate}. * * @since 6.0 */ int detectIndex(Predicate predicate); @Override OrderedIterableMultimap groupBy(Function function); @Override OrderedIterableMultimap groupByEach(Function> function); /** * Returns a {@code OrderedIterable} formed from this {@code OrderedIterable} and another {@code Iterable} by * combining corresponding elements in pairs. The second {@code Iterable} should also be ordered. * If one of the two {@code Iterable}s is longer than the other, its * remaining elements are ignored. * * @param that The {@code Iterable} providing the second half of each result pair * @param the type of the second half of the returned pairs * @return A new {@code OrderedIterable} containing pairs consisting of corresponding elements of this {@code * OrderedIterable} and that. The length of the returned {@code OrderedIterable} is the minimum of the lengths of * this {@code OrderedIterable} and that. */ @Override OrderedIterable> zip(Iterable that); /** * Same as {@link #zip(Iterable)} but uses {@code target} for output. */ @Override >> R zip(Iterable that, R target); @Override OrderedIterable> zipWithIndex(); /** * Same as {@link #zipWithIndex()} but uses {@code target} for output. */ @Override >> R zipWithIndex(R target); } ReversibleIterable.java000066400000000000000000000210651407344533200404470ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/ordered/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.ordered; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.primitive.ObjectIntProcedure; import org.eclipse.collections.api.multimap.ordered.ReversibleIterableMultimap; import org.eclipse.collections.api.ordered.primitive.ReversibleBooleanIterable; import org.eclipse.collections.api.ordered.primitive.ReversibleByteIterable; import org.eclipse.collections.api.ordered.primitive.ReversibleCharIterable; import org.eclipse.collections.api.ordered.primitive.ReversibleDoubleIterable; import org.eclipse.collections.api.ordered.primitive.ReversibleFloatIterable; import org.eclipse.collections.api.ordered.primitive.ReversibleIntIterable; import org.eclipse.collections.api.ordered.primitive.ReversibleLongIterable; import org.eclipse.collections.api.ordered.primitive.ReversibleShortIterable; import org.eclipse.collections.api.partition.ordered.PartitionReversibleIterable; import org.eclipse.collections.api.tuple.Pair; /** * A ReversibleIterable is an ordered iterable that you can iterate over forwards or backwards. Besides being ordered, * it has methods that support efficient iteration from the end, including {@link #asReversed()} and * {@link #reverseForEach(Procedure)}. * * @since 5.0 */ public interface ReversibleIterable extends OrderedIterable { /** * Evaluates the procedure for each element of the list iterating in reverse order. * *

e.g.
     * people.reverseForEach(person -> LOGGER.info(person.getName()));
     * 
*/ default void reverseForEach(Procedure procedure) { if (this.notEmpty()) { this.forEach(this.size() - 1, 0, procedure); } } /** * Evaluates the procedure for each element and it's index in reverse order. *
e.g.
     * people.reverseForEachWithIndex((person, index) ->
     *         LOGGER.info("Index: " + index + " person: " + person.getName()));
     * 
* * @since 9.0.0 */ default void reverseForEachWithIndex(ObjectIntProcedure procedure) { if (this.notEmpty()) { this.forEachWithIndex(this.size() - 1, 0, procedure); } } /** * Returns a reversed view of this ReversibleIterable. */ default LazyIterable asReversed() { throw new UnsupportedOperationException(this.getClass().getSimpleName() + ".asReversed() not implemented yet"); } /** * Returns a new ReversibleIterable in reverse order. * * @since 6.0.0 */ ReversibleIterable toReversed(); /** * Returns the index of the last element of the {@code ReversibleIterable} for which the {@code predicate} evaluates to true. * Returns -1 if no element evaluates true for the {@code predicate}. * * @since 6.0 */ int detectLastIndex(Predicate predicate); /** * Returns the first {@code count} elements of the iterable * or all the elements in the iterable if {@code count} is greater than the length of * the iterable. * * @param count the number of items to take. * @throws IllegalArgumentException if {@code count} is less than zero * @since 6.0 */ ReversibleIterable take(int count); /** * Returns the initial elements that satisfy the Predicate. Short circuits at the first element which does not * satisfy the Predicate. */ @Override ReversibleIterable takeWhile(Predicate predicate); /** * Returns an iterable after skipping the first {@code count} elements * or an empty iterable if the {@code count} is greater than the length of the iterable. * * @param count the number of items to drop. * @throws IllegalArgumentException if {@code count} is less than zero * @since 6.0 */ ReversibleIterable drop(int count); /** * Returns the final elements that do not satisfy the Predicate. Short circuits at the first element which does * satisfy the Predicate. */ @Override ReversibleIterable dropWhile(Predicate predicate); @Override PartitionReversibleIterable partitionWhile(Predicate predicate); @Override ReversibleIterable distinct(); @Override ReversibleIterable tap(Procedure procedure); @Override ReversibleIterable select(Predicate predicate); @Override

ReversibleIterable selectWith(Predicate2 predicate, P parameter); @Override ReversibleIterable reject(Predicate predicate); @Override

ReversibleIterable rejectWith(Predicate2 predicate, P parameter); @Override PartitionReversibleIterable partition(Predicate predicate); @Override

PartitionReversibleIterable partitionWith(Predicate2 predicate, P parameter); @Override ReversibleIterable selectInstancesOf(Class clazz); @Override ReversibleIterable collect(Function function); /** * @since 9.1. */ @Override default ReversibleIterable collectWithIndex(ObjectIntToObjectFunction function) { int[] index = {0}; return this.collect(each -> function.valueOf(each, index[0]++)); } @Override ReversibleIterable collectWith(Function2 function, P parameter); @Override ReversibleIterable collectIf(Predicate predicate, Function function); @Override ReversibleIterable flatCollect(Function> function); /** * @since 9.2 */ @Override default ReversibleIterable flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override ReversibleBooleanIterable collectBoolean(BooleanFunction booleanFunction); @Override ReversibleByteIterable collectByte(ByteFunction byteFunction); @Override ReversibleCharIterable collectChar(CharFunction charFunction); @Override ReversibleDoubleIterable collectDouble(DoubleFunction doubleFunction); @Override ReversibleFloatIterable collectFloat(FloatFunction floatFunction); @Override ReversibleIntIterable collectInt(IntFunction intFunction); @Override ReversibleLongIterable collectLong(LongFunction longFunction); @Override ReversibleShortIterable collectShort(ShortFunction shortFunction); @Override ReversibleIterableMultimap groupBy(Function function); @Override ReversibleIterableMultimap groupByEach(Function> function); @Override ReversibleIterable> zip(Iterable that); @Override ReversibleIterable> zipWithIndex(); } SortedIterable.java000066400000000000000000000113631407344533200376050ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/ordered/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.ordered; import java.util.Comparator; import java.util.NoSuchElementException; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.list.ListIterable; import org.eclipse.collections.api.multimap.ordered.SortedIterableMultimap; import org.eclipse.collections.api.partition.ordered.PartitionSortedIterable; import org.eclipse.collections.api.tuple.Pair; /** * A SortedIterable is an ordered iterable where the elements are stored in sorted order defined by a non-strict partial * order relation. The sort order is determined by the Comparator returned by {@link #comparator()} or is the natural * ordering if {@code comparator()} returns {@code null}. Operations that would sort the collection can be faster than * O(n log n). For example {@link #toSortedList()} takes O(n) time. * * @since 5.0 */ public interface SortedIterable extends OrderedIterable { /** * Returns the comparator used to order the elements in this container, or null if this container uses the natural * ordering of its elements. */ Comparator comparator(); @Override SortedIterable tap(Procedure procedure); /** * Returns the initial elements that satisfy the Predicate. Short circuits at the first element which does not * satisfy the Predicate. */ @Override SortedIterable takeWhile(Predicate predicate); /** * Returns the final elements that do not satisfy the Predicate. Short circuits at the first element which does * satisfy the Predicate. */ @Override SortedIterable dropWhile(Predicate predicate); /** * Returns a Partition of the initial elements that satisfy the Predicate and the remaining elements. Short circuits at the first element which does * satisfy the Predicate. */ @Override PartitionSortedIterable partitionWhile(Predicate predicate); /** * Returns a new {@code SortedIterable} containing the distinct elements in this iterable. *

* Conceptually similar to {@link #toSet()}.{@link #toList()} but retains the original order. If an element appears * multiple times in this iterable, the first one will be copied into the result. * * @return {@code SortedIterable} of distinct elements */ @Override SortedIterable distinct(); /** * Returns the minimum element out of this container based on the natural order, not the order of this container. * If you want the minimum element based on the order of this container, use {@link #getFirst()}. * * @throws ClassCastException if the elements are not {@link Comparable} * @throws NoSuchElementException if the SortedIterable is empty */ @Override T min(); /** * Returns the maximum element out of this container based on the natural order, not the order of this container. * If you want the maximum element based on the order of this container, use {@link #getLast()}. * * @throws ClassCastException if the elements are not {@link Comparable} * @throws NoSuchElementException if the SortedIterable is empty */ @Override T max(); @Override SortedIterable select(Predicate predicate); @Override

SortedIterable selectWith(Predicate2 predicate, P parameter); @Override SortedIterable reject(Predicate predicate); @Override

SortedIterable rejectWith(Predicate2 predicate, P parameter); @Override PartitionSortedIterable partition(Predicate predicate); @Override SortedIterable selectInstancesOf(Class clazz); @Override SortedIterableMultimap groupBy(Function function); @Override SortedIterableMultimap groupByEach(Function> function); @Override ListIterable> zip(Iterable that); @Override SortedIterable> zipWithIndex(); } package-info.java000066400000000000000000000012541407344533200355730ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for Eclipse Collections API. *

* This package contains interfaces for object collections, primitive collections and lazy iterables. */ package org.eclipse.collections.api; partition/000077500000000000000000000000001407344533200344135ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/apiPartitionImmutableCollection.java000066400000000000000000000021361407344533200431050ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition; import org.eclipse.collections.api.collection.ImmutableCollection; /** * A PartitionImmutableCollection is the result of splitting an immutable collection into two immutable collections based * on a Predicate. The results that answer true for the Predicate will be returned from the getSelected() method and the * results that answer false for the predicate will be returned from the getRejected() method. */ public interface PartitionImmutableCollection extends PartitionIterable { @Override ImmutableCollection getSelected(); @Override ImmutableCollection getRejected(); } PartitionIterable.java000066400000000000000000000017271407344533200407060ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition; import org.eclipse.collections.api.RichIterable; /** * A PartitionIterable is the result of splitting an iterable into two iterables based on a Predicate. The results that * answer true for the Predicate will be returned from the getSelected() method and the results that answer false for the * predicate will be returned from the getRejected() method. */ public interface PartitionIterable { RichIterable getSelected(); RichIterable getRejected(); } PartitionMutableCollection.java000066400000000000000000000022031407344533200425520ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition; import org.eclipse.collections.api.collection.MutableCollection; /** * A PartitionMutableCollection is the result of splitting a mutable collection into two mutable collections based on a Predicate. * The results that answer true for the Predicate will be returned from the getSelected() method and the results that answer false * for the predicate will be returned from the getRejected() method. */ public interface PartitionMutableCollection extends PartitionIterable { @Override MutableCollection getSelected(); @Override MutableCollection getRejected(); PartitionImmutableCollection toImmutable(); } bag/000077500000000000000000000000001407344533200351445ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partitionPartitionBag.java000066400000000000000000000020501407344533200403670ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/bag/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.bag; import org.eclipse.collections.api.bag.Bag; import org.eclipse.collections.api.partition.PartitionIterable; /** * A PartitionBag is the result of splitting a bag into two Bags based on a Predicate. The results that answer true for * the Predicate will be returned from the getSelected() method and the results that answer false for the * predicate will be returned from the getRejected() method. */ public interface PartitionBag extends PartitionIterable { @Override Bag getSelected(); @Override Bag getRejected(); } PartitionImmutableBag.java000066400000000000000000000021171407344533200422330ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/bag/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.bag; import org.eclipse.collections.api.bag.ImmutableBag; /** * A PartitionImmutableBag is the result of splitting an immutable bag into two immutable bags based on a Predicate. * The results that answer true for the Predicate will be returned from the getSelected() method and the * results that answer false for the predicate will be returned from the getRejected() method. */ public interface PartitionImmutableBag extends PartitionImmutableBagIterable, PartitionUnsortedBag { @Override ImmutableBag getSelected(); @Override ImmutableBag getRejected(); } PartitionImmutableBagIterable.java000066400000000000000000000022751407344533200437100ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/bag/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.bag; import org.eclipse.collections.api.bag.ImmutableBagIterable; import org.eclipse.collections.api.partition.PartitionImmutableCollection; /** * A PartitionImmutableBagIterable is the result of splitting a mutable bag into two ImmutableBagIterables based on a Predicate. * The results that answer true for the Predicate will be returned from the getSelected() method and the results that answer * false for the predicate will be returned from the getRejected() method. */ public interface PartitionImmutableBagIterable extends PartitionImmutableCollection, PartitionBag { @Override ImmutableBagIterable getSelected(); @Override ImmutableBagIterable getRejected(); } PartitionMutableBag.java000066400000000000000000000021711407344533200417050ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/bag/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.bag; import org.eclipse.collections.api.bag.MutableBag; /** * A PartitionMutableBag is the result of splitting a mutable bag into two mutable bags based on a Predicate. * The results that answer true for the Predicate will be returned from the getSelected() method and the results that answer * false for the predicate will be returned from the getRejected() method. */ public interface PartitionMutableBag extends PartitionMutableBagIterable, PartitionUnsortedBag { @Override MutableBag getSelected(); @Override MutableBag getRejected(); @Override PartitionImmutableBag toImmutable(); } PartitionMutableBagIterable.java000066400000000000000000000023601407344533200433550ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/bag/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.bag; import org.eclipse.collections.api.bag.MutableBagIterable; import org.eclipse.collections.api.partition.PartitionMutableCollection; /** * A PartitionMutableBagIterable is the result of splitting a mutable bag into two MutableBagIterables based on a Predicate. * The results that answer true for the Predicate will be returned from the getSelected() method and the results that answer * false for the predicate will be returned from the getRejected() method. */ public interface PartitionMutableBagIterable extends PartitionMutableCollection, PartitionBag { @Override MutableBagIterable getSelected(); @Override MutableBagIterable getRejected(); @Override PartitionImmutableBagIterable toImmutable(); } PartitionUnsortedBag.java000066400000000000000000000013341407344533200421170ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/bag/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.bag; import org.eclipse.collections.api.bag.UnsortedBag; public interface PartitionUnsortedBag extends PartitionBag { @Override UnsortedBag getSelected(); @Override UnsortedBag getRejected(); } package-info.java000066400000000000000000000024501407344533200403340ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/bag/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for {@link org.eclipse.collections.api.partition.bag.PartitionBag}. *

* A PartitionBag is the result of splitting a {@link org.eclipse.collections.api.bag.Bag} into two bags based on a Predicate. *

* This package contains 3 interfaces: *

    *
  • * {@link org.eclipse.collections.api.partition.bag.PartitionBag} - a read-only PartitionBag API. *
  • *
  • * {@link org.eclipse.collections.api.partition.bag.PartitionMutableBag} - a modifiable PartitionBag. *
  • *
  • * {@link org.eclipse.collections.api.partition.bag.PartitionImmutableBag} - the non-modifiable equivalent interface to {@link org.eclipse.collections.api.partition.bag.PartitionMutableBag}. *
  • *
*/ package org.eclipse.collections.api.partition.bag; sorted/000077500000000000000000000000001407344533200364445ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/bagPartitionImmutableSortedBag.java000066400000000000000000000023501407344533200447130ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/bag/sorted/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.bag.sorted; import org.eclipse.collections.api.bag.sorted.ImmutableSortedBag; import org.eclipse.collections.api.partition.bag.PartitionImmutableBagIterable; /** * A PartitionImmutableSortedBag is the result of splitting an immutable sorted bag into two immutable sorted bags based * on a Predicate. The results that answer true for the Predicate will be returned from the getSelected() method and the * results that answer false for the predicate will be returned from the getRejected() method. * * @since 4.2 */ public interface PartitionImmutableSortedBag extends PartitionSortedBag, PartitionImmutableBagIterable { @Override ImmutableSortedBag getSelected(); @Override ImmutableSortedBag getRejected(); } PartitionMutableSortedBag.java000066400000000000000000000017111407344533200443650ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/bag/sorted/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.bag.sorted; import org.eclipse.collections.api.bag.sorted.MutableSortedBag; import org.eclipse.collections.api.partition.bag.PartitionMutableBagIterable; /** * @since 4.2 */ public interface PartitionMutableSortedBag extends PartitionSortedBag, PartitionMutableBagIterable { @Override MutableSortedBag getSelected(); @Override MutableSortedBag getRejected(); @Override PartitionImmutableSortedBag toImmutable(); } PartitionSortedBag.java000066400000000000000000000020231407344533200430500ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/bag/sorted/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.bag.sorted; import org.eclipse.collections.api.bag.sorted.SortedBag; import org.eclipse.collections.api.partition.bag.PartitionBag; import org.eclipse.collections.api.partition.ordered.PartitionReversibleIterable; import org.eclipse.collections.api.partition.ordered.PartitionSortedIterable; /** * @since 4.2 */ public interface PartitionSortedBag extends PartitionBag, PartitionSortedIterable, PartitionReversibleIterable { @Override SortedBag getSelected(); @Override SortedBag getRejected(); } package-info.java000066400000000000000000000021721407344533200416350ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/bag/sorted/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for {@link org.eclipse.collections.api.partition.bag.sorted.PartitionSortedBag}. *

* A PartitionSortedBag is the result of splitting a sorted bag into two sorted bags based on a Predicate. *

* This package contains the following interfaces: *

    *
  • * {@link org.eclipse.collections.api.partition.bag.sorted.PartitionSortedBag} - a Read-only PartitionSortedSet API. *
  • *
  • * {@link org.eclipse.collections.api.partition.bag.sorted.PartitionMutableSortedBag} - a modifiable PartitionSortedSet. *
  • *
*/ package org.eclipse.collections.api.partition.bag.sorted; list/000077500000000000000000000000001407344533200353665ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partitionPartitionImmutableList.java000066400000000000000000000022331407344533200426760ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/list/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.list; import org.eclipse.collections.api.list.ImmutableList; import org.eclipse.collections.api.partition.PartitionImmutableCollection; /** * A PartitionImmutableList is the result of splitting an immutable list into two immutable lists based on a Predicate. * The results that answer true for the Predicate will be returned from the getSelected() method and the results that answer * false for the predicate will be returned from the getRejected() method. */ public interface PartitionImmutableList extends PartitionImmutableCollection, PartitionList { @Override ImmutableList getSelected(); @Override ImmutableList getRejected(); } PartitionList.java000066400000000000000000000021651407344533200410420ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/list/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.list; import org.eclipse.collections.api.list.ListIterable; import org.eclipse.collections.api.partition.ordered.PartitionReversibleIterable; /** * A PartitionList is the result of splitting a ListIterable into two ListIterables based on a Predicate. * The results that answer true for the Predicate will be returned from the getSelected() method and the results * that answer false for the predicate will be returned from the getRejected() method. */ public interface PartitionList extends PartitionReversibleIterable { @Override ListIterable getSelected(); @Override ListIterable getRejected(); } PartitionMutableList.java000066400000000000000000000023041407344533200423470ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/list/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.list; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.partition.PartitionMutableCollection; /** * A PartitionMutableList is the result of splitting a mutable list into two mutable lists based on a Predicate. * The results that answer true for the Predicate will be returned from the getSelected() method and the results that answer * false for the predicate will be returned from the getRejected() method. */ public interface PartitionMutableList extends PartitionMutableCollection, PartitionList { @Override MutableList getSelected(); @Override MutableList getRejected(); @Override PartitionImmutableList toImmutable(); } package-info.java000066400000000000000000000024201407344533200405530ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/list/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for {@link org.eclipse.collections.api.partition.list.PartitionList}. *

* A PartitionList is the result of splitting a list into two lists based on a Predicate. *

* This package contains 3 interfaces: *

    *
  • * {@link org.eclipse.collections.api.partition.list.PartitionList} - a read-only PartitionList API. *
  • *
  • * {@link org.eclipse.collections.api.partition.list.PartitionMutableList} - a modifiable PartitionList. *
  • *
  • * {@link org.eclipse.collections.api.partition.list.PartitionImmutableList} - the non-modifiable equivalent interface to {@link org.eclipse.collections.api.partition.list.PartitionMutableList}. *
  • *
*/ package org.eclipse.collections.api.partition.list; ordered/000077500000000000000000000000001407344533200360375ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partitionPartitionOrderedIterable.java000066400000000000000000000022251407344533200436310ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/ordered/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.ordered; import org.eclipse.collections.api.ordered.OrderedIterable; import org.eclipse.collections.api.partition.PartitionIterable; /** * A PartitionOrderedIterable is the result of splitting a OrderedIterable into two OrderedIterables based on a Predicate. * The results that answer true for the Predicate will be returned from the getSelected() method and the results * that answer false for the predicate will be returned from the getRejected() method. * * @since 6.0 */ public interface PartitionOrderedIterable extends PartitionIterable { @Override OrderedIterable getSelected(); @Override OrderedIterable getRejected(); } PartitionReversibleIterable.java000066400000000000000000000021611407344533200443460ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/ordered/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.ordered; import org.eclipse.collections.api.ordered.ReversibleIterable; /** * A PartitionReversibleIterable is the result of splitting a ReversibleIterable into two ReversibleIterables based on a Predicate. * The results that answer true for the Predicate will be returned from the getSelected() method and the results * that answer false for the predicate will be returned from the getRejected() method. * * @since 5.0 */ public interface PartitionReversibleIterable extends PartitionOrderedIterable { @Override ReversibleIterable getSelected(); @Override ReversibleIterable getRejected(); } PartitionSortedIterable.java000066400000000000000000000021251407344533200435040ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/ordered/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.ordered; import org.eclipse.collections.api.ordered.SortedIterable; /** * A PartitionSortedIterable is the result of splitting a SortedIterable into two SortedIterables based on a Predicate. * The results that answer true for the Predicate will be returned from the getSelected() method and the results * that answer false for the predicate will be returned from the getRejected() method. * * @since 5.0 */ public interface PartitionSortedIterable extends PartitionOrderedIterable { @Override SortedIterable getSelected(); @Override SortedIterable getRejected(); } package-info.java000066400000000000000000000025251407344533200376060ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for {@link org.eclipse.collections.api.partition.PartitionIterable}. *

* A PartitionIterable is the result of splitting an iterable into two iterables based on a {@link org.eclipse.collections.api.block.predicate.Predicate}. *

* This package contains 3 interfaces: *

    *
  • * {@link org.eclipse.collections.api.partition.PartitionIterable} - a read-only PartitionIterable API. *
  • *
  • * {@link org.eclipse.collections.api.partition.PartitionMutableCollection} - a modifiable PartitionIterable. *
  • *
  • * {@link org.eclipse.collections.api.partition.PartitionImmutableCollection} - the non-modifiable equivalent interface to {@link org.eclipse.collections.api.partition.PartitionMutableCollection}. *
  • *
*/ package org.eclipse.collections.api.partition; set/000077500000000000000000000000001407344533200352065ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partitionPartitionImmutableSet.java000066400000000000000000000021171407344533200423370ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/set/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.set; import org.eclipse.collections.api.set.ImmutableSet; /** * A PartitionImmutableSet is the result of splitting an immutable set into two immutable sets based on a Predicate. * The results that answer true for the Predicate will be returned from the getSelected() method and the * results that answer false for the predicate will be returned from the getRejected() method. */ public interface PartitionImmutableSet extends PartitionUnsortedSet, PartitionImmutableSetIterable { @Override ImmutableSet getSelected(); @Override ImmutableSet getRejected(); } PartitionImmutableSetIterable.java000066400000000000000000000023061407344533200440070ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/set/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.set; import org.eclipse.collections.api.partition.PartitionImmutableCollection; import org.eclipse.collections.api.set.ImmutableSetIterable; /** * A PartitionImmutableSetIterable is the result of splitting a ImmutableSetIterable into two ImmutableSetIterables based on a Predicate. The results that * answer true for the Predicate will be returned from the getSelected() method and the results that answer * false for the predicate will be returned from the getRejected() method. */ public interface PartitionImmutableSetIterable extends PartitionSet, PartitionImmutableCollection { @Override ImmutableSetIterable getSelected(); @Override ImmutableSetIterable getRejected(); } PartitionMutableSet.java000066400000000000000000000021711407344533200420110ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/set/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.set; import org.eclipse.collections.api.set.MutableSet; /** * A PartitionMutableSet is the result of splitting a mutable set into two mutable sets based on a Predicate. * The results that answer true for the Predicate will be returned from the getSelected() method and the results that answer * false for the predicate will be returned from the getRejected() method. */ public interface PartitionMutableSet extends PartitionUnsortedSet, PartitionMutableSetIterable { @Override MutableSet getSelected(); @Override MutableSet getRejected(); @Override PartitionImmutableSet toImmutable(); } PartitionMutableSetIterable.java000066400000000000000000000022641407344533200434640ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/set/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.set; import org.eclipse.collections.api.partition.PartitionMutableCollection; import org.eclipse.collections.api.set.MutableSetIterable; /** * A PartitionMutableSetIterable is the result of splitting a MutableSetIterable into two MutableSetIterables based on a Predicate. The results that * answer true for the Predicate will be returned from the getSelected() method and the results that answer * false for the predicate will be returned from the getRejected() method. */ public interface PartitionMutableSetIterable extends PartitionSet, PartitionMutableCollection { @Override MutableSetIterable getSelected(); @Override MutableSetIterable getRejected(); } PartitionSet.java000066400000000000000000000021201407344533200404710ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/set/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.set; import org.eclipse.collections.api.partition.PartitionIterable; import org.eclipse.collections.api.set.SetIterable; /** * A PartitionSet is the result of splitting a SetIterable into two SetIterables based on a Predicate. The results that * answer true for the Predicate will be returned from the getSelected() method and the results that answer * false for the predicate will be returned from the getRejected() method. */ public interface PartitionSet extends PartitionIterable { @Override SetIterable getSelected(); @Override SetIterable getRejected(); } PartitionUnsortedSet.java000066400000000000000000000020411407344533200422170ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/set/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.set; import org.eclipse.collections.api.set.UnsortedSetIterable; /** * A PartitionUnsortedSet is the result of splitting two UnsortedSetIterable on a Predicate. The results that * answer true for the Predicate will be returned from the getSelected() method and the results that answer * false for the predicate will be returned from the getRejected() method. */ public interface PartitionUnsortedSet extends PartitionSet { @Override UnsortedSetIterable getSelected(); @Override UnsortedSetIterable getRejected(); } package-info.java000066400000000000000000000026571407344533200404070ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/set/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for {@link org.eclipse.collections.api.partition.set.PartitionSet}. *

* A PartitionSet is the result of splitting a set into two sets based on a Predicate. *

* This package contains 4 interfaces: *

    *
  • * {@link org.eclipse.collections.api.partition.set.PartitionSet} - a read-only PartitionSet API. *
  • *
  • * {@link org.eclipse.collections.api.partition.set.PartitionMutableSet} - a modifiable PartitionSet. *
  • *
  • * {@link org.eclipse.collections.api.partition.set.PartitionImmutableSet} - the non-modifiable equivalent interface to {@link org.eclipse.collections.api.partition.set.PartitionMutableSet}. *
  • *
  • * {@link org.eclipse.collections.api.partition.set.PartitionUnsortedSet} - the result of splitting two UnsortedSetIterables based on a Predicate. *
  • *
*/ package org.eclipse.collections.api.partition.set; sorted/000077500000000000000000000000001407344533200365065ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/setPartitionImmutableSortedSet.java000066400000000000000000000023271407344533200450230ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/set/sorted/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.set.sorted; import org.eclipse.collections.api.partition.set.PartitionImmutableSetIterable; import org.eclipse.collections.api.set.sorted.ImmutableSortedSet; /** * A PartitionImmutableSortedSet is the result of splitting an immutable sorted set into two immutable sorted sets based * on a Predicate. The results that answer true for the Predicate will be returned from the getSelected() method and the * results that answer false for the predicate will be returned from the getRejected() method. */ public interface PartitionImmutableSortedSet extends PartitionSortedSet, PartitionImmutableSetIterable { @Override ImmutableSortedSet getSelected(); @Override ImmutableSortedSet getRejected(); } PartitionMutableSortedSet.java000066400000000000000000000024051407344533200444720ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/set/sorted/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.set.sorted; import org.eclipse.collections.api.partition.set.PartitionMutableSetIterable; import org.eclipse.collections.api.set.sorted.MutableSortedSet; /** * A PartitionMutableSortedSet is the result of splitting a mutable sorted set into two mutable sorted sets based on a Predicate. * The results that answer true for the Predicate will be returned from the getSelected() method and the results that answer * false for the predicate will be returned from the getRejected() method. */ public interface PartitionMutableSortedSet extends PartitionSortedSet, PartitionMutableSetIterable { @Override MutableSortedSet getSelected(); @Override MutableSortedSet getRejected(); @Override PartitionImmutableSortedSet toImmutable(); } PartitionSortedSet.java000066400000000000000000000025361407344533200431650ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/set/sorted/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.set.sorted; import org.eclipse.collections.api.partition.ordered.PartitionReversibleIterable; import org.eclipse.collections.api.partition.ordered.PartitionSortedIterable; import org.eclipse.collections.api.partition.set.PartitionSet; import org.eclipse.collections.api.set.sorted.SortedSetIterable; /** * A PartitionSortedSet is the result of splitting a SortedSetIterable into two SortedSetIterables based on a Predicate. * The results that answer true for the Predicate will be returned from the getSelected() method and the results that answer * false for the predicate will be returned from the getRejected() method. */ public interface PartitionSortedSet extends PartitionSet, PartitionSortedIterable, PartitionReversibleIterable { @Override SortedSetIterable getSelected(); @Override SortedSetIterable getRejected(); } package-info.java000066400000000000000000000025641407344533200417040ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/set/sorted/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for {@link org.eclipse.collections.api.partition.set.sorted.PartitionSortedSet}. *

* A PartitionSortedSet is the result of splitting a sorted set into two sorted sets based on a Predicate. *

* This package contains the following interfaces: *

    *
  • * {@link org.eclipse.collections.api.partition.set.sorted.PartitionSortedSet} - a Read-only PartitionSortedSet API. *
  • *
  • * {@link org.eclipse.collections.api.partition.set.sorted.PartitionMutableSortedSet} - a modifiable PartitionSortedSet. *
  • *
  • * {@link org.eclipse.collections.api.partition.set.sorted.PartitionImmutableSortedSet} - the non-modifiable equivalent interface to {@link org.eclipse.collections.api.partition.set.sorted.PartitionMutableSortedSet}. *
  • *
*/ package org.eclipse.collections.api.partition.set.sorted; stack/000077500000000000000000000000001407344533200355205ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partitionPartitionImmutableStack.java000066400000000000000000000020711407344533200431620ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/stack/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.stack; import org.eclipse.collections.api.stack.ImmutableStack; /** * A PartitionImmutableStack is the result of splitting an immutable stack into two immutable stacks based on a Predicate. * The results that answer true for the Predicate will be returned from the getSelected() method and the results that answer * false for the predicate will be returned from the getRejected() method. */ public interface PartitionImmutableStack extends PartitionStack { @Override ImmutableStack getSelected(); @Override ImmutableStack getRejected(); } PartitionMutableStack.java000066400000000000000000000022411407344533200426330ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/stack/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.stack; import org.eclipse.collections.api.stack.MutableStack; /** * A PartitionMutableStack is the result of splitting a mutable stack into two mutable stacks on a Predicate. * The results that answer true for the Predicate will be returned from the getSelected() method and the results * that answer false for the predicate will be returned from the getRejected() method. */ public interface PartitionMutableStack extends PartitionStack { @Override MutableStack getSelected(); @Override MutableStack getRejected(); PartitionImmutableStack toImmutable(); /** * @deprecated in 5.0 */ @Deprecated void add(T t); } PartitionStack.java000066400000000000000000000021701407344533200413220ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/stack/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.partition.stack; import org.eclipse.collections.api.partition.ordered.PartitionOrderedIterable; import org.eclipse.collections.api.stack.StackIterable; /** * A PartitionStack is the result of splitting a StackIterable into two StackIterables based on a Predicate. * The results that answer true for the Predicate will be returned from the getSelected() method and the results * that answer false for the predicate will be returned from the getRejected() method. */ public interface PartitionStack extends PartitionOrderedIterable { @Override StackIterable getSelected(); @Override StackIterable getRejected(); } package-info.java000066400000000000000000000024331407344533200407110ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/partition/stack/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for {@link org.eclipse.collections.api.partition.stack.PartitionStack}. *

* A PartitionStack is the result of splitting a stack into two stacks based on a Predicate. *

* This package contains 3 interfaces: *

    *
  • * {@link org.eclipse.collections.api.partition.stack.PartitionStack} - a read-only PartitionStack API. *
  • *
  • * {@link org.eclipse.collections.api.partition.stack.PartitionMutableStack} - a modifiable PartitionStack. *
  • *
  • * {@link org.eclipse.collections.api.partition.stack.PartitionImmutableStack} - the non-modifiable equivalent interface to {@link org.eclipse.collections.api.partition.stack.PartitionMutableStack}. *
  • *
*/ package org.eclipse.collections.api.partition.stack; eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/set/000077500000000000000000000000001407344533200332545ustar00rootroot00000000000000FixedSizeSet.java000066400000000000000000000021641407344533200364110ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/set/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.set; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.collection.FixedSizeCollection; /** * A FixedSizeSet is a set that may be mutated, but cannot grow or shrink in size. */ public interface FixedSizeSet extends MutableSet, FixedSizeCollection { @Override MutableSet with(T element); @Override MutableSet without(T element); @Override MutableSet withAll(Iterable elements); @Override MutableSet withoutAll(Iterable elements); @Override FixedSizeSet tap(Procedure procedure); } ImmutableSet.java000066400000000000000000000143041407344533200364350ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/set/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.set; import java.util.Set; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.multimap.set.ImmutableSetMultimap; import org.eclipse.collections.api.ordered.OrderedIterable; import org.eclipse.collections.api.partition.set.PartitionImmutableSet; import org.eclipse.collections.api.set.primitive.ImmutableBooleanSet; import org.eclipse.collections.api.set.primitive.ImmutableByteSet; import org.eclipse.collections.api.set.primitive.ImmutableCharSet; import org.eclipse.collections.api.set.primitive.ImmutableDoubleSet; import org.eclipse.collections.api.set.primitive.ImmutableFloatSet; import org.eclipse.collections.api.set.primitive.ImmutableIntSet; import org.eclipse.collections.api.set.primitive.ImmutableLongSet; import org.eclipse.collections.api.set.primitive.ImmutableShortSet; import org.eclipse.collections.api.tuple.Pair; /** * ImmutableSet is the non-modifiable equivalent interface to {@link MutableSet}. {@link MutableSet#toImmutable()} will * give you an appropriately trimmed implementation of ImmutableSet. All ImmutableSet implementations must implement * the java.util.Set interface so they can satisfy the equals() contract and be compared against other set structures * like UnifiedSet or HashSet. */ public interface ImmutableSet extends UnsortedSetIterable, ImmutableSetIterable { @Override ImmutableSet newWith(T element); @Override ImmutableSet newWithout(T element); @Override ImmutableSet newWithAll(Iterable elements); @Override ImmutableSet newWithoutAll(Iterable elements); @Override ImmutableSet tap(Procedure procedure); @Override ImmutableSet select(Predicate predicate); @Override

ImmutableSet selectWith(Predicate2 predicate, P parameter); @Override ImmutableSet reject(Predicate predicate); @Override

ImmutableSet rejectWith(Predicate2 predicate, P parameter); @Override PartitionImmutableSet partition(Predicate predicate); @Override

PartitionImmutableSet partitionWith(Predicate2 predicate, P parameter); @Override ImmutableSet selectInstancesOf(Class clazz); @Override ImmutableSet collect(Function function); @Override ImmutableBooleanSet collectBoolean(BooleanFunction booleanFunction); @Override ImmutableByteSet collectByte(ByteFunction byteFunction); @Override ImmutableCharSet collectChar(CharFunction charFunction); @Override ImmutableDoubleSet collectDouble(DoubleFunction doubleFunction); @Override ImmutableFloatSet collectFloat(FloatFunction floatFunction); @Override ImmutableIntSet collectInt(IntFunction intFunction); @Override ImmutableLongSet collectLong(LongFunction longFunction); @Override ImmutableShortSet collectShort(ShortFunction shortFunction); @Override ImmutableSet collectWith(Function2 function, P parameter); @Override ImmutableSet collectIf(Predicate predicate, Function function); @Override ImmutableSet flatCollect(Function> function); /** * @since 9.2 */ @Override default ImmutableSet flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override ImmutableSetMultimap groupBy(Function function); @Override ImmutableSetMultimap groupByEach(Function> function); /** * @deprecated in 6.0. Use {@link OrderedIterable#zip(Iterable)} instead. */ @Override @Deprecated ImmutableSet> zip(Iterable that); /** * @deprecated in 6.0. Use {@link OrderedIterable#zipWithIndex()} instead. */ @Override @Deprecated ImmutableSet> zipWithIndex(); Set castToSet(); @Override ImmutableSet union(SetIterable set); @Override ImmutableSet intersect(SetIterable set); @Override ImmutableSet difference(SetIterable subtrahendSet); @Override ImmutableSet symmetricDifference(SetIterable setB); @Override ImmutableSet> powerSet(); /** * Overrides toImmutableSet in RichIterable to return this. * * @since 11.0 */ @Override default ImmutableSet toImmutableSet() { return this; } } ImmutableSetIterable.java000066400000000000000000000045361407344533200401130ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/set/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.set; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.collection.ImmutableCollection; import org.eclipse.collections.api.multimap.set.ImmutableSetIterableMultimap; import org.eclipse.collections.api.ordered.OrderedIterable; import org.eclipse.collections.api.partition.set.PartitionImmutableSetIterable; import org.eclipse.collections.api.tuple.Pair; /** * @since 6.0 */ public interface ImmutableSetIterable extends SetIterable, ImmutableCollection { @Override ImmutableSetIterable tap(Procedure procedure); @Override ImmutableSetIterable select(Predicate predicate); @Override

ImmutableSetIterable selectWith(Predicate2 predicate, P parameter); @Override ImmutableSetIterable reject(Predicate predicate); @Override

ImmutableSetIterable rejectWith(Predicate2 predicate, P parameter); @Override PartitionImmutableSetIterable partition(Predicate predicate); @Override

PartitionImmutableSetIterable partitionWith(Predicate2 predicate, P parameter); @Override ImmutableSetIterable selectInstancesOf(Class clazz); @Override ImmutableSetIterableMultimap groupBy(Function function); @Override ImmutableSetIterableMultimap groupByEach(Function> function); /** * @deprecated in 6.0. Use {@link OrderedIterable#zipWithIndex()} instead. */ @Override @Deprecated ImmutableSetIterable> zipWithIndex(); } MultiReaderSet.java000066400000000000000000000017261407344533200367370ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/set/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.set; import org.eclipse.collections.api.block.procedure.Procedure; /** * A MultiReaderSet provides thread-safe iteration for a set through methods {@code withReadLockAndDelegate()} and {@code withWriteLockAndDelegate()}. * * @since 10.0. */ public interface MultiReaderSet extends MutableSet { void withReadLockAndDelegate(Procedure> procedure); void withWriteLockAndDelegate(Procedure> procedure); } MutableSet.java000066400000000000000000000150531407344533200361110ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/set/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.set; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.multimap.set.MutableSetMultimap; import org.eclipse.collections.api.ordered.OrderedIterable; import org.eclipse.collections.api.partition.set.PartitionMutableSet; import org.eclipse.collections.api.set.primitive.MutableBooleanSet; import org.eclipse.collections.api.set.primitive.MutableByteSet; import org.eclipse.collections.api.set.primitive.MutableCharSet; import org.eclipse.collections.api.set.primitive.MutableDoubleSet; import org.eclipse.collections.api.set.primitive.MutableFloatSet; import org.eclipse.collections.api.set.primitive.MutableIntSet; import org.eclipse.collections.api.set.primitive.MutableLongSet; import org.eclipse.collections.api.set.primitive.MutableShortSet; import org.eclipse.collections.api.tuple.Pair; /** * A MutableSet is an extension java.util.Set which provides methods matching the Smalltalk Collection protocol. */ public interface MutableSet extends UnsortedSetIterable, MutableSetIterable, Cloneable { @Override default MutableSet with(T element) { this.add(element); return this; } @Override default MutableSet without(T element) { this.remove(element); return this; } @Override default MutableSet withAll(Iterable elements) { this.addAllIterable(elements); return this; } @Override default MutableSet withoutAll(Iterable elements) { this.removeAllIterable(elements); return this; } @Override MutableSet newEmpty(); MutableSet clone(); @Override MutableSet tap(Procedure procedure); @Override MutableSet select(Predicate predicate); @Override

MutableSet selectWith(Predicate2 predicate, P parameter); @Override MutableSet reject(Predicate predicate); @Override

MutableSet rejectWith(Predicate2 predicate, P parameter); @Override PartitionMutableSet partition(Predicate predicate); @Override

PartitionMutableSet partitionWith(Predicate2 predicate, P parameter); @Override MutableSet selectInstancesOf(Class clazz); @Override MutableSet collect(Function function); @Override MutableBooleanSet collectBoolean(BooleanFunction booleanFunction); @Override MutableByteSet collectByte(ByteFunction byteFunction); @Override MutableCharSet collectChar(CharFunction charFunction); @Override MutableDoubleSet collectDouble(DoubleFunction doubleFunction); @Override MutableFloatSet collectFloat(FloatFunction floatFunction); @Override MutableIntSet collectInt(IntFunction intFunction); @Override MutableLongSet collectLong(LongFunction longFunction); @Override MutableShortSet collectShort(ShortFunction shortFunction); @Override MutableSet collectWith(Function2 function, P parameter); @Override MutableSet collectIf(Predicate predicate, Function function); @Override MutableSet flatCollect(Function> function); /** * @since 9.2 */ @Override default MutableSet flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } /** * Returns an unmodifiable view of the set. * * @return an unmodifiable view of this set */ @Override MutableSet asUnmodifiable(); @Override MutableSet asSynchronized(); /** * Returns an immutable copy of this set. If the set is immutable, it returns itself. */ @Override ImmutableSet toImmutable(); @Override MutableSetMultimap groupBy(Function function); @Override MutableSetMultimap groupByEach(Function> function); /** * @deprecated in 6.0. Use {@link OrderedIterable#zip(Iterable)} instead. */ @Override @Deprecated MutableSet> zip(Iterable that); /** * @deprecated in 6.0. Use {@link OrderedIterable#zipWithIndex()} instead. */ @Override @Deprecated MutableSet> zipWithIndex(); @Override MutableSet union(SetIterable set); @Override MutableSet intersect(SetIterable set); @Override MutableSet difference(SetIterable subtrahendSet); @Override MutableSet symmetricDifference(SetIterable setB); @Override MutableSet> powerSet(); /** * Converts the MutableSet to the default ImmutableSet implementation. * * @since 11.0 */ @Override default ImmutableSet toImmutableSet() { return this.toImmutable(); } } MutableSetIterable.java000066400000000000000000000061371407344533200375640ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/set/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.set; import java.util.Set; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.collection.MutableCollection; import org.eclipse.collections.api.multimap.set.MutableSetIterableMultimap; import org.eclipse.collections.api.ordered.OrderedIterable; import org.eclipse.collections.api.partition.set.PartitionMutableSetIterable; import org.eclipse.collections.api.tuple.Pair; /** * @since 6.0 */ public interface MutableSetIterable extends SetIterable, MutableCollection, Set { @Override MutableSetIterable tap(Procedure procedure); @Override MutableSetIterable select(Predicate predicate); @Override

MutableSetIterable selectWith(Predicate2 predicate, P parameter); @Override MutableSetIterable reject(Predicate predicate); @Override

MutableSetIterable rejectWith(Predicate2 predicate, P parameter); @Override PartitionMutableSetIterable partition(Predicate predicate); @Override

PartitionMutableSetIterable partitionWith(Predicate2 predicate, P parameter); @Override MutableSetIterable selectInstancesOf(Class clazz); @Override MutableSetIterableMultimap groupBy(Function function); @Override MutableSetIterableMultimap groupByEach(Function> function); /** * @deprecated in 6.0. Use {@link OrderedIterable#zip(Iterable)} instead. */ @Override @Deprecated MutableCollection> zip(Iterable that); /** * @deprecated in 6.0. Use {@link OrderedIterable#zipWithIndex()} instead. */ @Override @Deprecated MutableSetIterable> zipWithIndex(); @Override default MutableSetIterable with(T element) { this.add(element); return this; } @Override default MutableSetIterable without(T element) { this.remove(element); return this; } @Override default MutableSetIterable withAll(Iterable elements) { this.addAllIterable(elements); return this; } @Override default MutableSetIterable withoutAll(Iterable elements) { this.removeAllIterable(elements); return this; } } ParallelSetIterable.java000066400000000000000000000035351407344533200377260ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/set/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.set; import org.eclipse.collections.api.ParallelIterable; import org.eclipse.collections.api.annotation.Beta; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.multimap.set.SetMultimap; /** * @since 5.0 */ @Beta public interface ParallelSetIterable extends ParallelIterable { @Override ParallelSetIterable asUnique(); /** * Creates a parallel iterable for selecting elements from the current iterable. */ @Override ParallelSetIterable select(Predicate predicate); @Override

ParallelSetIterable selectWith(Predicate2 predicate, P parameter); /** * Creates a parallel iterable for rejecting elements from the current iterable. */ @Override ParallelSetIterable reject(Predicate predicate); @Override

ParallelSetIterable rejectWith(Predicate2 predicate, P parameter); @Override ParallelSetIterable selectInstancesOf(Class clazz); @Override SetMultimap groupBy(Function function); @Override SetMultimap groupByEach(Function> function); } ParallelUnsortedSetIterable.java000066400000000000000000000103161407344533200414450ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/set/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.set; import org.eclipse.collections.api.annotation.Beta; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.multimap.set.UnsortedSetMultimap; /** * A ParallelIterable is RichIterable which will defer evaluation for certain methods like select, reject, collect, etc. * Any methods that do not return a ParallelIterable when called will cause evaluation to be forced. Evaluation occurs * in parallel. All code blocks passed in must be stateless or thread-safe. * * @since 5.0 */ @Beta public interface ParallelUnsortedSetIterable extends ParallelSetIterable { @Override ParallelUnsortedSetIterable asUnique(); /** * Creates a parallel iterable for selecting elements from the current iterable. */ @Override ParallelUnsortedSetIterable select(Predicate predicate); @Override

ParallelUnsortedSetIterable selectWith(Predicate2 predicate, P parameter); /** * Creates a parallel iterable for rejecting elements from the current iterable. */ @Override ParallelUnsortedSetIterable reject(Predicate predicate); @Override

ParallelUnsortedSetIterable rejectWith(Predicate2 predicate, P parameter); @Override ParallelUnsortedSetIterable selectInstancesOf(Class clazz); @Override UnsortedSetMultimap groupBy(Function function); @Override UnsortedSetMultimap groupByEach(Function> function); // /** // * Returns a parallel BooleanIterable which will transform the underlying iterable data to boolean values based on the booleanFunction. // */ // ParallelBooleanIterable collectBoolean(BooleanFunction booleanFunction); // // /** // * Returns a parallel ByteIterable which will transform the underlying iterable data to byte values based on the byteFunction. // */ // ParallelByteIterable collectByte(ByteFunction byteFunction); // // /** // * Returns a parallel CharIterable which will transform the underlying iterable data to char values based on the charFunction. // */ // ParallelCharIterable collectChar(CharFunction charFunction); // // /** // * Returns a parallel DoubleIterable which will transform the underlying iterable data to double values based on the doubleFunction. // */ // ParallelDoubleIterable collectDouble(DoubleFunction doubleFunction); // // /** // * Returns a parallel FloatIterable which will transform the underlying iterable data to float values based on the floatFunction. // */ // ParallelFloatIterable collectFloat(FloatFunction floatFunction); // // /** // * Returns a parallel IntIterable which will transform the underlying iterable data to int values based on the intFunction. // */ // ParallelIntIterable collectInt(IntFunction intFunction); // // /** // * Returns a parallel LongIterable which will transform the underlying iterable data to long values based on the longFunction. // */ // ParallelLongIterable collectLong(LongFunction longFunction); // // /** // * Returns a parallel ShortIterable which will transform the underlying iterable data to short values based on the shortFunction. // */ // ParallelShortIterable collectShort(ShortFunction shortFunction); } Pool.java000066400000000000000000000030431407344533200347510ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/set/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.set; public interface Pool { /** * Locates an object in the pool which is equal to {@code key}. * * @param key the value to look for * @return The object reference in the pool equal to key or null. */ V get(V key); void clear(); /** * Puts {@code key} into the pool. If there is no existing object that is equal * to key, key will be added to the pool and the return value will be the same instance. * If there is an existing object in the pool that is equal to {@code key}, the pool will remain unchanged * and the pooled instance will be is returned. * * @param key the value to add if not in the pool * @return the object reference in the pool equal to key (either key itself or the existing reference) */ V put(V key); int size(); /** * Locates an object in the pool which is equal to {@code key} and removes it. * * @param key object to remove * @return The object reference in the pool equal to key or null. */ V removeFromPool(V key); } SetIterable.java000066400000000000000000000127701407344533200362520ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/set/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.set; import java.util.Set; import java.util.concurrent.ExecutorService; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.annotation.Beta; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.ordered.OrderedIterable; import org.eclipse.collections.api.partition.set.PartitionSet; import org.eclipse.collections.api.tuple.Pair; /** * A Read-only Set api, with the minor exception inherited from java.lang.Iterable (iterable.iterator().remove()). */ public interface SetIterable extends RichIterable { /** * Returns the set of all objects that are a member of {@code this} or {@code set} or both. The union of [1, 2, 3] * and [2, 3, 4] is the set [1, 2, 3, 4]. If equal elements appear in both sets, then the output will contain the * copy from {@code this}. */ SetIterable union(SetIterable set); /** * Same as {@link #union(SetIterable)} but adds all the objects to {@code targetSet} and returns it. */ > R unionInto(SetIterable set, R targetSet); /** * Returns the set of all objects that are members of both {@code this} and {@code set}. The intersection of * [1, 2, 3] and [2, 3, 4] is the set [2, 3]. The output will contain instances from {@code this}, not {@code set}. */ SetIterable intersect(SetIterable set); /** * Same as {@link #intersect(SetIterable)} but adds all the objects to {@code targetSet} and returns it. */ > R intersectInto(SetIterable set, R targetSet); /** * Returns the set of all members of {@code this} that are not members of {@code subtrahendSet}. The difference of * [1, 2, 3] and [2, 3, 4] is [1]. */ SetIterable difference(SetIterable subtrahendSet); /** * Same as {@link #difference(SetIterable)} but adds all the objects to {@code targetSet} and returns it. */ > R differenceInto(SetIterable subtrahendSet, R targetSet); /** * Returns the set of all objects that are a member of exactly one of {@code this} and {@code setB} (elements which * are in one of the sets, but not in both). For instance, for the sets [1, 2, 3] and [2, 3, 4], the symmetric * difference set is [1, 4] . It is the set difference of the union and the intersection. */ SetIterable symmetricDifference(SetIterable setB); /** * Same as {@link #symmetricDifference(SetIterable)} but adds all the objects to {@code targetSet} and returns it. */ > R symmetricDifferenceInto(SetIterable set, R targetSet); /** * Returns {@literal true} if all the members of {@code this} are also members of {@code candidateSuperset}. * For example, [1, 2] is a subset of [1, 2, 3], but [1, 4] is not. */ boolean isSubsetOf(SetIterable candidateSuperset); /** * Returns {@literal true} if all the members of {@code this} are also members of {@code candidateSuperset} and the * two sets are not equal. For example, [1, 2] is a proper subset of [1, 2, 3], but [1, 2, 3] is not. */ boolean isProperSubsetOf(SetIterable candidateSuperset); /** * Returns the set whose members are all possible ordered pairs (a, b) where a is a member of {@code this} and b is a * member of {@code set}. */ LazyIterable> cartesianProduct(SetIterable set); @Override SetIterable tap(Procedure procedure); @Override SetIterable select(Predicate predicate); @Override

SetIterable selectWith(Predicate2 predicate, P parameter); @Override SetIterable reject(Predicate predicate); @Override

SetIterable rejectWith(Predicate2 predicate, P parameter); @Override PartitionSet partition(Predicate predicate); @Override

PartitionSet partitionWith(Predicate2 predicate, P parameter); @Override SetIterable selectInstancesOf(Class clazz); /** * @deprecated in 6.0. Use {@link OrderedIterable#zipWithIndex()} instead. */ @Override @Deprecated SetIterable> zipWithIndex(); /** * Returns a parallel iterable of this SetIterable. * * @since 6.0 */ @Beta ParallelSetIterable asParallel(ExecutorService executorService, int batchSize); /** * Follows the same general contract as {@link Set#equals(Object)}. */ @Override boolean equals(Object o); /** * Follows the same general contract as {@link Set#hashCode()}. */ @Override int hashCode(); ImmutableSetIterable toImmutable(); } UnsortedSetIterable.java000066400000000000000000000130211407344533200377640ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/set/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.set; import java.util.concurrent.ExecutorService; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.multimap.set.UnsortedSetMultimap; import org.eclipse.collections.api.ordered.OrderedIterable; import org.eclipse.collections.api.set.primitive.BooleanSet; import org.eclipse.collections.api.set.primitive.ByteSet; import org.eclipse.collections.api.set.primitive.CharSet; import org.eclipse.collections.api.set.primitive.DoubleSet; import org.eclipse.collections.api.set.primitive.FloatSet; import org.eclipse.collections.api.set.primitive.IntSet; import org.eclipse.collections.api.set.primitive.LongSet; import org.eclipse.collections.api.set.primitive.ShortSet; import org.eclipse.collections.api.tuple.Pair; /** * An iterable whose items are unique. */ public interface UnsortedSetIterable extends SetIterable { /** * Returns the set whose members are all possible subsets of {@code this}. For example, the powerset of [1, 2] is * [[], [1], [2], [1, 2]]. */ UnsortedSetIterable> powerSet(); @Override UnsortedSetIterable tap(Procedure procedure); @Override UnsortedSetIterable collect(Function function); @Override BooleanSet collectBoolean(BooleanFunction booleanFunction); @Override ByteSet collectByte(ByteFunction byteFunction); @Override CharSet collectChar(CharFunction charFunction); @Override DoubleSet collectDouble(DoubleFunction doubleFunction); @Override FloatSet collectFloat(FloatFunction floatFunction); @Override IntSet collectInt(IntFunction intFunction); @Override LongSet collectLong(LongFunction longFunction); @Override ShortSet collectShort(ShortFunction shortFunction); @Override UnsortedSetIterable collectWith(Function2 function, P parameter); @Override UnsortedSetIterable collectIf(Predicate predicate, Function function); @Override UnsortedSetIterable flatCollect(Function> function); /** * @since 9.2 */ @Override default UnsortedSetIterable flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override UnsortedSetMultimap groupBy(Function function); @Override UnsortedSetMultimap groupByEach(Function> function); @Override UnsortedSetIterable union(SetIterable set); @Override UnsortedSetIterable intersect(SetIterable set); @Override UnsortedSetIterable difference(SetIterable subtrahendSet); @Override UnsortedSetIterable symmetricDifference(SetIterable setB); @Override UnsortedSetIterable select(Predicate predicate); @Override

UnsortedSetIterable selectWith(Predicate2 predicate, P parameter); @Override UnsortedSetIterable reject(Predicate predicate); @Override

UnsortedSetIterable rejectWith(Predicate2 predicate, P parameter); @Override UnsortedSetIterable selectInstancesOf(Class clazz); /** * @deprecated in 6.0. Use {@link OrderedIterable#zip(Iterable)} instead. */ @Override @Deprecated UnsortedSetIterable> zip(Iterable that); /** * @deprecated in 6.0. Use {@link OrderedIterable#zipWithIndex()} instead. */ @Override @Deprecated UnsortedSetIterable> zipWithIndex(); /** * Converts the UnsortedSetIterable to an immutable implementation. Returns this for immutable sets. * * @since 5.0 */ @Override ImmutableSet toImmutable(); @Override ParallelUnsortedSetIterable asParallel(ExecutorService executorService, int batchSize); } package-info.java000066400000000000000000000032401407344533200363630ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/set/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for set API which enhance the performance and functionality of {@link java.util.Set}. *

* This package contains 6 interfaces: *

    *
  • * {@link org.eclipse.collections.api.set.FixedSizeSet} - a set that may be mutated, but cannot grow or shrink in size. *
  • *
  • * {@link org.eclipse.collections.api.set.ImmutableSet} - the non-modifiable equivalent interface to {@link org.eclipse.collections.api.set.MutableSet}. *
  • *
  • * {@link org.eclipse.collections.api.set.MutableSet} - an implementation of a JCF Set which provides internal iterator methods matching the Smalltalk Collection protocol. *
  • *
  • * {@link org.eclipse.collections.api.set.Pool} - locates an object in the pool which is equal to {@code key}. *
  • *
  • * {@link org.eclipse.collections.api.set.SetIterable} - a read-only Set API, with the minor exception inherited from {@link java.lang.Iterable} (iterable.iterator().remove()). *
  • *
  • * {@link org.eclipse.collections.api.set.UnsortedSetIterable} - an iterable whose items are unique. *
  • *
*/ package org.eclipse.collections.api.set; primitive/000077500000000000000000000000001407344533200352055ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/setpackage-info.java000066400000000000000000000013271407344533200403770ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/set/primitive/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains API for mutable and immutable primitive sets. *

* A primitive set is similar to {@link org.eclipse.collections.api.set.SetIterable} and is memory-optimized for primitives. */ package org.eclipse.collections.api.set.primitive; sorted/000077500000000000000000000000001407344533200344755ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/setImmutableSortedSet.java000066400000000000000000000161301407344533200411150ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/set/sorted/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.set.sorted; import java.util.Set; import java.util.SortedSet; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.list.ImmutableList; import org.eclipse.collections.api.list.primitive.ImmutableBooleanList; import org.eclipse.collections.api.list.primitive.ImmutableByteList; import org.eclipse.collections.api.list.primitive.ImmutableCharList; import org.eclipse.collections.api.list.primitive.ImmutableDoubleList; import org.eclipse.collections.api.list.primitive.ImmutableFloatList; import org.eclipse.collections.api.list.primitive.ImmutableIntList; import org.eclipse.collections.api.list.primitive.ImmutableLongList; import org.eclipse.collections.api.list.primitive.ImmutableShortList; import org.eclipse.collections.api.multimap.sortedset.ImmutableSortedSetMultimap; import org.eclipse.collections.api.partition.set.sorted.PartitionImmutableSortedSet; import org.eclipse.collections.api.set.ImmutableSetIterable; import org.eclipse.collections.api.set.SetIterable; import org.eclipse.collections.api.tuple.Pair; /** * ImmutableSortedSet is the non-modifiable equivalent interface to {@link MutableSortedSet}. {@link * MutableSortedSet#toImmutable()} will give you an appropriately trimmed implementation of ImmutableSortedSet. All * ImmutableSortedSet implementations must implement the {@link SortedSet} interface so they can satisfy the * {@link Set#equals(Object)} contract and be compared against other Sets. */ public interface ImmutableSortedSet extends SortedSetIterable, ImmutableSetIterable { @Override ImmutableSortedSet newWith(T element); @Override ImmutableSortedSet newWithout(T element); @Override ImmutableSortedSet newWithAll(Iterable elements); @Override ImmutableSortedSet newWithoutAll(Iterable elements); @Override ImmutableSortedSet tap(Procedure procedure); @Override ImmutableSortedSet select(Predicate predicate); @Override

ImmutableSortedSet selectWith(Predicate2 predicate, P parameter); @Override ImmutableSortedSet reject(Predicate predicate); @Override

ImmutableSortedSet rejectWith(Predicate2 predicate, P parameter); @Override PartitionImmutableSortedSet partition(Predicate predicate); @Override

PartitionImmutableSortedSet partitionWith(Predicate2 predicate, P parameter); @Override PartitionImmutableSortedSet partitionWhile(Predicate predicate); @Override ImmutableSortedSet selectInstancesOf(Class clazz); @Override ImmutableList collect(Function function); /** * @since 9.1. */ @Override default ImmutableList collectWithIndex(ObjectIntToObjectFunction function) { int[] index = {0}; return this.collect(each -> function.valueOf(each, index[0]++)); } @Override ImmutableBooleanList collectBoolean(BooleanFunction booleanFunction); @Override ImmutableByteList collectByte(ByteFunction byteFunction); @Override ImmutableCharList collectChar(CharFunction charFunction); @Override ImmutableDoubleList collectDouble(DoubleFunction doubleFunction); @Override ImmutableFloatList collectFloat(FloatFunction floatFunction); @Override ImmutableIntList collectInt(IntFunction intFunction); @Override ImmutableLongList collectLong(LongFunction longFunction); @Override ImmutableShortList collectShort(ShortFunction shortFunction); @Override ImmutableList collectWith(Function2 function, P parameter); @Override ImmutableList collectIf(Predicate predicate, Function function); @Override ImmutableList flatCollect(Function> function); /** * @since 9.2 */ @Override default ImmutableList flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override ImmutableSortedSet distinct(); @Override ImmutableSortedSet takeWhile(Predicate predicate); @Override ImmutableSortedSet dropWhile(Predicate predicate); @Override ImmutableSortedSetMultimap groupBy(Function function); @Override ImmutableSortedSetMultimap groupByEach(Function> function); @Override ImmutableList> zip(Iterable that); @Override ImmutableSortedSet> zipWithIndex(); @Override ImmutableSortedSet toReversed(); @Override ImmutableSortedSet take(int count); @Override ImmutableSortedSet drop(int count); SortedSet castToSortedSet(); @Override ImmutableSortedSet union(SetIterable set); @Override ImmutableSortedSet intersect(SetIterable set); @Override ImmutableSortedSet difference(SetIterable subtrahendSet); @Override ImmutableSortedSet symmetricDifference(SetIterable setB); @Override ImmutableSortedSet> powerSet(); /** * @since 11.0 */ @Override default ImmutableSortedSet toImmutableSortedSet() { return this; } } MutableSortedSet.java000066400000000000000000000172731407344533200406000ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/set/sorted/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.set.sorted; import java.util.SortedSet; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.list.primitive.MutableBooleanList; import org.eclipse.collections.api.list.primitive.MutableByteList; import org.eclipse.collections.api.list.primitive.MutableCharList; import org.eclipse.collections.api.list.primitive.MutableDoubleList; import org.eclipse.collections.api.list.primitive.MutableFloatList; import org.eclipse.collections.api.list.primitive.MutableIntList; import org.eclipse.collections.api.list.primitive.MutableLongList; import org.eclipse.collections.api.list.primitive.MutableShortList; import org.eclipse.collections.api.multimap.sortedset.MutableSortedSetMultimap; import org.eclipse.collections.api.partition.set.sorted.PartitionMutableSortedSet; import org.eclipse.collections.api.set.MutableSetIterable; import org.eclipse.collections.api.set.SetIterable; import org.eclipse.collections.api.tuple.Pair; /** * A MutableSortedSet is an implementation of a JCF SortedSet which provides methods matching the Smalltalk Collection * protocol. * * @since 1.0 */ public interface MutableSortedSet extends MutableSetIterable, SortedSetIterable, SortedSet, Cloneable { @Override default MutableSortedSet with(T element) { this.add(element); return this; } @Override default MutableSortedSet without(T element) { this.remove(element); return this; } @Override default MutableSortedSet withAll(Iterable elements) { this.addAllIterable(elements); return this; } @Override default MutableSortedSet withoutAll(Iterable elements) { this.removeAllIterable(elements); return this; } @Override MutableSortedSet newEmpty(); MutableSortedSet clone(); @Override MutableSortedSet tap(Procedure procedure); @Override MutableSortedSet select(Predicate predicate); @Override

MutableSortedSet selectWith(Predicate2 predicate, P parameter); @Override MutableSortedSet reject(Predicate predicate); @Override

MutableSortedSet rejectWith(Predicate2 predicate, P parameter); @Override PartitionMutableSortedSet partition(Predicate predicate); @Override

PartitionMutableSortedSet partitionWith(Predicate2 predicate, P parameter); @Override PartitionMutableSortedSet partitionWhile(Predicate predicate); @Override MutableSortedSet selectInstancesOf(Class clazz); @Override MutableList collect(Function function); /** * @since 9.1. */ @Override default MutableList collectWithIndex(ObjectIntToObjectFunction function) { int[] index = {0}; return this.collect(each -> function.valueOf(each, index[0]++)); } @Override MutableBooleanList collectBoolean(BooleanFunction booleanFunction); @Override MutableByteList collectByte(ByteFunction byteFunction); @Override MutableCharList collectChar(CharFunction charFunction); @Override MutableDoubleList collectDouble(DoubleFunction doubleFunction); @Override MutableFloatList collectFloat(FloatFunction floatFunction); @Override MutableIntList collectInt(IntFunction intFunction); @Override MutableLongList collectLong(LongFunction longFunction); @Override MutableShortList collectShort(ShortFunction shortFunction); @Override MutableList collectWith(Function2 function, P parameter); @Override MutableList collectIf(Predicate predicate, Function function); @Override MutableList flatCollect(Function> function); /** * @since 9.2 */ @Override default MutableList flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override MutableSortedSet distinct(); @Override MutableSortedSet takeWhile(Predicate predicate); @Override MutableSortedSet dropWhile(Predicate predicate); /** * Returns an unmodifiable view of the set. * * @return an unmodifiable view of this set */ @Override MutableSortedSet asUnmodifiable(); @Override MutableSortedSet asSynchronized(); /** * Returns an immutable copy of this set. If the set is immutable, it returns itself. */ @Override ImmutableSortedSet toImmutable(); @Override MutableSortedSetMultimap groupBy(Function function); @Override MutableSortedSetMultimap groupByEach(Function> function); // TODO Return linked set @Override MutableList> zip(Iterable that); @Override MutableSortedSet> zipWithIndex(); @Override MutableSortedSet toReversed(); @Override MutableSortedSet take(int count); @Override MutableSortedSet drop(int count); @Override MutableSortedSet union(SetIterable set); @Override MutableSortedSet intersect(SetIterable set); @Override MutableSortedSet difference(SetIterable subtrahendSet); @Override MutableSortedSet symmetricDifference(SetIterable setB); @Override MutableSortedSet> powerSet(); @Override MutableSortedSet subSet(T fromElement, T toElement); @Override MutableSortedSet headSet(T toElement); @Override MutableSortedSet tailSet(T fromElement); /** * @since 11.0 */ @Override default ImmutableSortedSet toImmutableSortedSet() { return this.toImmutable(); } } ParallelSortedSetIterable.java000066400000000000000000000116241407344533200424050ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/set/sorted/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.set.sorted; import java.util.Comparator; import org.eclipse.collections.api.annotation.Beta; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.list.ParallelListIterable; import org.eclipse.collections.api.multimap.sortedset.SortedSetMultimap; import org.eclipse.collections.api.set.ParallelSetIterable; /** * @since 5.0 */ @Beta public interface ParallelSortedSetIterable extends ParallelSetIterable { Comparator comparator(); @Override ParallelSortedSetIterable asUnique(); /** * Creates a parallel iterable for selecting elements from the current iterable. */ @Override ParallelSortedSetIterable select(Predicate predicate); @Override

ParallelSortedSetIterable selectWith(Predicate2 predicate, P parameter); /** * Creates a parallel iterable for rejecting elements from the current iterable. */ @Override ParallelSortedSetIterable reject(Predicate predicate); @Override

ParallelSortedSetIterable rejectWith(Predicate2 predicate, P parameter); @Override ParallelSortedSetIterable selectInstancesOf(Class clazz); /** * Creates a parallel iterable for collecting elements from the current iterable. */ @Override ParallelListIterable collect(Function function); @Override ParallelListIterable collectWith(Function2 function, P parameter); /** * Creates a parallel iterable for selecting and collecting elements from the current iterable. */ @Override ParallelListIterable collectIf(Predicate predicate, Function function); /** * Creates a parallel flattening iterable for the current iterable. */ @Override ParallelListIterable flatCollect(Function> function); @Override SortedSetMultimap groupBy(Function function); @Override SortedSetMultimap groupByEach(Function> function); // /** // * Returns a parallel BooleanIterable which will transform the underlying iterable data to boolean values based on the booleanFunction. // */ // ParallelBooleanIterable collectBoolean(BooleanFunction booleanFunction); // // /** // * Returns a parallel ByteIterable which will transform the underlying iterable data to byte values based on the byteFunction. // */ // ParallelByteIterable collectByte(ByteFunction byteFunction); // // /** // * Returns a parallel CharIterable which will transform the underlying iterable data to char values based on the charFunction. // */ // ParallelCharIterable collectChar(CharFunction charFunction); // // /** // * Returns a parallel DoubleIterable which will transform the underlying iterable data to double values based on the doubleFunction. // */ // ParallelDoubleIterable collectDouble(DoubleFunction doubleFunction); // // /** // * Returns a parallel FloatIterable which will transform the underlying iterable data to float values based on the floatFunction. // */ // ParallelFloatIterable collectFloat(FloatFunction floatFunction); // // /** // * Returns a parallel IntIterable which will transform the underlying iterable data to int values based on the intFunction. // */ // ParallelIntIterable collectInt(IntFunction intFunction); // // /** // * Returns a parallel LongIterable which will transform the underlying iterable data to long values based on the longFunction. // */ // ParallelLongIterable collectLong(LongFunction longFunction); // // /** // * Returns a parallel ShortIterable which will transform the underlying iterable data to short values based on the shortFunction. // */ // ParallelShortIterable collectShort(ShortFunction shortFunction); } SortedSetIterable.java000066400000000000000000000177731407344533200407430ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/set/sorted/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.set.sorted; import java.util.Comparator; import java.util.concurrent.ExecutorService; import org.eclipse.collections.api.annotation.Beta; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.list.ListIterable; import org.eclipse.collections.api.list.primitive.BooleanList; import org.eclipse.collections.api.list.primitive.ByteList; import org.eclipse.collections.api.list.primitive.CharList; import org.eclipse.collections.api.list.primitive.DoubleList; import org.eclipse.collections.api.list.primitive.FloatList; import org.eclipse.collections.api.list.primitive.IntList; import org.eclipse.collections.api.list.primitive.LongList; import org.eclipse.collections.api.list.primitive.ShortList; import org.eclipse.collections.api.multimap.sortedset.SortedSetMultimap; import org.eclipse.collections.api.ordered.ReversibleIterable; import org.eclipse.collections.api.ordered.SortedIterable; import org.eclipse.collections.api.partition.set.sorted.PartitionSortedSet; import org.eclipse.collections.api.set.SetIterable; import org.eclipse.collections.api.tuple.Pair; /** * An iterable whose items are unique and sorted by some comparator or their natural ordering. */ public interface SortedSetIterable extends SetIterable, Comparable>, SortedIterable, ReversibleIterable { /** * Returns the comparator used to order the elements in this set, or null if this set uses the natural ordering of * its elements. */ @Override Comparator comparator(); /** * Returns the set of all objects that are a member of {@code this} or {@code set} or both. The union of [1, 2, 3] * and [2, 3, 4] is the set [1, 2, 3, 4]. If equal elements appear in both sets, then the output will contain the * copy from {@code this}. */ @Override SortedSetIterable union(SetIterable set); /** * Returns the set of all objects that are members of both {@code this} and {@code set}. The intersection of * [1, 2, 3] and [2, 3, 4] is the set [2, 3]. The output will contain instances from {@code this}, not {@code set}. */ @Override SortedSetIterable intersect(SetIterable set); /** * Returns the set of all members of {@code this} that are not members of {@code subtrahendSet}. The difference of * [1, 2, 3] and [2, 3, 4] is [1]. */ @Override SortedSetIterable difference(SetIterable subtrahendSet); /** * Returns the set of all objects that are a member of exactly one of {@code this} and {@code setB} (elements which * are in one of the sets, but not in both). For instance, for the sets [1, 2, 3] and [2, 3, 4], the symmetric * difference set is [1, 4] . It is the set difference of the union and the intersection. */ @Override SortedSetIterable symmetricDifference(SetIterable setB); /** * Returns the set whose members are all possible subsets of {@code this}. For example, the powerset of [1, 2] is * [[], [1], [2], [1, 2]]. */ SortedSetIterable> powerSet(); @Override SortedSetIterable tap(Procedure procedure); @Override SortedSetIterable select(Predicate predicate); @Override

SortedSetIterable selectWith(Predicate2 predicate, P parameter); @Override SortedSetIterable reject(Predicate predicate); @Override

SortedSetIterable rejectWith(Predicate2 predicate, P parameter); @Override PartitionSortedSet partition(Predicate predicate); @Override

PartitionSortedSet partitionWith(Predicate2 predicate, P parameter); @Override PartitionSortedSet partitionWhile(Predicate predicate); @Override SortedSetIterable selectInstancesOf(Class clazz); @Override ListIterable collect(Function function); /** * @since 9.1. */ @Override default ListIterable collectWithIndex(ObjectIntToObjectFunction function) { int[] index = {0}; return this.collect(each -> function.valueOf(each, index[0]++)); } @Override BooleanList collectBoolean(BooleanFunction booleanFunction); @Override ByteList collectByte(ByteFunction byteFunction); @Override CharList collectChar(CharFunction charFunction); @Override DoubleList collectDouble(DoubleFunction doubleFunction); @Override FloatList collectFloat(FloatFunction floatFunction); @Override IntList collectInt(IntFunction intFunction); @Override LongList collectLong(LongFunction longFunction); @Override ShortList collectShort(ShortFunction shortFunction); @Override ListIterable collectWith(Function2 function, P parameter); @Override ListIterable collectIf(Predicate predicate, Function function); @Override ListIterable flatCollect(Function> function); /** * @since 9.2 */ @Override default ListIterable flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override SortedSetIterable distinct(); @Override SortedSetIterable takeWhile(Predicate predicate); @Override SortedSetIterable dropWhile(Predicate predicate); @Override SortedSetMultimap groupBy(Function function); @Override SortedSetMultimap groupByEach(Function> function); @Override SortedSetIterable> zipWithIndex(); @Override SortedSetIterable toReversed(); @Override SortedSetIterable take(int count); @Override SortedSetIterable drop(int count); /** * Converts the SortedSetIterable to an immutable implementation. Returns this for immutable sets. * * @since 5.0 */ @Override ImmutableSortedSet toImmutable(); /** * Returns a parallel iterable of this SortedSetIterable. * * @since 6.0 */ @Override @Beta ParallelSortedSetIterable asParallel(ExecutorService executorService, int batchSize); } package-info.java000066400000000000000000000024711407344533200376700ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/set/sorted/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for sorted set API. *

* A sorted set is an {@link java.lang.Iterable} which contains elements in sorted order. It allows for faster retrievals. *

* This package contains 3 interfaces: *

    *
  • * {@link org.eclipse.collections.api.set.sorted.ImmutableSortedSet} - the non-modifiable equivalent interface to {@link org.eclipse.collections.api.set.sorted.MutableSortedSet}. *
  • *
  • * {@link org.eclipse.collections.api.set.sorted.MutableSortedSet} - an implementation of a JCF SortedSet which provides internal iterator methods matching the Smalltalk Collection protocol. *
  • *
  • * {@link org.eclipse.collections.api.set.sorted.SortedSetIterable} - an iterable whose items are unique and sorted. *
  • *
*/ package org.eclipse.collections.api.set.sorted; stack/000077500000000000000000000000001407344533200335075ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/apiImmutableStack.java000066400000000000000000000210341407344533200372570ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/stack/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.stack; import org.eclipse.collections.api.bag.ImmutableBag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.factory.Maps; import org.eclipse.collections.api.map.ImmutableMap; import org.eclipse.collections.api.map.MutableMap; import org.eclipse.collections.api.map.primitive.ImmutableObjectDoubleMap; import org.eclipse.collections.api.map.primitive.ImmutableObjectLongMap; import org.eclipse.collections.api.multimap.list.ImmutableListMultimap; import org.eclipse.collections.api.partition.stack.PartitionImmutableStack; import org.eclipse.collections.api.stack.primitive.ImmutableBooleanStack; import org.eclipse.collections.api.stack.primitive.ImmutableByteStack; import org.eclipse.collections.api.stack.primitive.ImmutableCharStack; import org.eclipse.collections.api.stack.primitive.ImmutableDoubleStack; import org.eclipse.collections.api.stack.primitive.ImmutableFloatStack; import org.eclipse.collections.api.stack.primitive.ImmutableIntStack; import org.eclipse.collections.api.stack.primitive.ImmutableLongStack; import org.eclipse.collections.api.stack.primitive.ImmutableShortStack; import org.eclipse.collections.api.tuple.Pair; public interface ImmutableStack extends StackIterable { ImmutableStack push(T item); ImmutableStack pop(); ImmutableStack pop(int count); @Override ImmutableStack takeWhile(Predicate predicate); @Override ImmutableStack dropWhile(Predicate predicate); @Override PartitionImmutableStack partitionWhile(Predicate predicate); @Override ImmutableStack distinct(); @Override ImmutableStack tap(Procedure procedure); @Override ImmutableStack select(Predicate predicate); @Override

ImmutableStack selectWith(Predicate2 predicate, P parameter); @Override ImmutableStack reject(Predicate predicate); @Override

ImmutableStack rejectWith(Predicate2 predicate, P parameter); @Override ImmutableStack selectInstancesOf(Class clazz); @Override PartitionImmutableStack partition(Predicate predicate); @Override

PartitionImmutableStack partitionWith(Predicate2 predicate, P parameter); @Override ImmutableStack collect(Function function); @Override ImmutableBooleanStack collectBoolean(BooleanFunction booleanFunction); @Override ImmutableByteStack collectByte(ByteFunction byteFunction); @Override ImmutableCharStack collectChar(CharFunction charFunction); @Override ImmutableDoubleStack collectDouble(DoubleFunction doubleFunction); @Override ImmutableFloatStack collectFloat(FloatFunction floatFunction); @Override ImmutableIntStack collectInt(IntFunction intFunction); @Override ImmutableLongStack collectLong(LongFunction longFunction); @Override ImmutableShortStack collectShort(ShortFunction shortFunction); @Override ImmutableStack collectWith(Function2 function, P parameter); @Override ImmutableStack collectIf(Predicate predicate, Function function); /** * @since 9.1. */ @Override default ImmutableStack collectWithIndex(ObjectIntToObjectFunction function) { int[] index = {0}; return this.collect(each -> function.valueOf(each, index[0]++)); } @Override ImmutableStack flatCollect(Function> function); /** * @since 9.2 */ @Override default ImmutableStack flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override ImmutableListMultimap groupBy(Function function); /** * @since 9.0 */ @Override default ImmutableBag countBy(Function function) { return this.asLazy().collect(function).toBag().toImmutable(); } /** * @since 9.0 */ @Override default ImmutableBag countByWith(Function2 function, P parameter) { return this.asLazy().collectWith(function, parameter).toBag().toImmutable(); } /** * @since 10.0.0 */ @Override default ImmutableBag countByEach(Function> function) { return this.asLazy().flatCollect(function).toBag().toImmutable(); } @Override ImmutableListMultimap groupByEach(Function> function); @Override default ImmutableMap groupByUniqueKey(Function function) { MutableMap target = Maps.mutable.withInitialCapacity(this.size()); return this.groupByUniqueKey(function, target).toImmutable(); } @Override ImmutableStack> zip(Iterable that); @Override ImmutableStack> zipWithIndex(); @Override default ImmutableMap aggregateInPlaceBy( Function groupBy, Function0 zeroValueFactory, Procedure2 mutatingAggregator) { MutableMap map = Maps.mutable.empty(); this.forEach(each -> { K key = groupBy.valueOf(each); V value = map.getIfAbsentPut(key, zeroValueFactory); mutatingAggregator.value(value, each); }); return map.toImmutable(); } @Override default ImmutableMap aggregateBy( Function groupBy, Function0 zeroValueFactory, Function2 nonMutatingAggregator) { MutableMap map = this.aggregateBy( groupBy, zeroValueFactory, nonMutatingAggregator, Maps.mutable.empty()); return map.toImmutable(); } @Override ImmutableObjectLongMap sumByInt(Function groupBy, IntFunction function); @Override ImmutableObjectDoubleMap sumByFloat(Function groupBy, FloatFunction function); @Override ImmutableObjectLongMap sumByLong(Function groupBy, LongFunction function); @Override ImmutableObjectDoubleMap sumByDouble(Function groupBy, DoubleFunction function); /** * Size takes linear time on ImmutableStacks. */ @Override int size(); } MutableStack.java000066400000000000000000000221751407344533200367400ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/stack/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.stack; import java.util.Collection; import org.eclipse.collections.api.bag.MutableBag; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.factory.Maps; import org.eclipse.collections.api.list.ListIterable; import org.eclipse.collections.api.map.MutableMap; import org.eclipse.collections.api.map.primitive.MutableObjectDoubleMap; import org.eclipse.collections.api.map.primitive.MutableObjectLongMap; import org.eclipse.collections.api.multimap.list.MutableListMultimap; import org.eclipse.collections.api.partition.stack.PartitionMutableStack; import org.eclipse.collections.api.stack.primitive.MutableBooleanStack; import org.eclipse.collections.api.stack.primitive.MutableByteStack; import org.eclipse.collections.api.stack.primitive.MutableCharStack; import org.eclipse.collections.api.stack.primitive.MutableDoubleStack; import org.eclipse.collections.api.stack.primitive.MutableFloatStack; import org.eclipse.collections.api.stack.primitive.MutableIntStack; import org.eclipse.collections.api.stack.primitive.MutableLongStack; import org.eclipse.collections.api.stack.primitive.MutableShortStack; import org.eclipse.collections.api.tuple.Pair; public interface MutableStack extends StackIterable { /** * Adds an item to the top of the stack. */ void push(T item); /** * Removes and returns the top element of the stack. */ T pop(); /** * Removes and returns a ListIterable of the number of elements specified by the count, beginning with the top of the stack. */ ListIterable pop(int count); /** * Removes and returns a ListIterable of the number of elements specified by the count, * beginning with the top of the stack and puts them into the targeted collection type. */ > R pop(int count, R targetCollection); /** * Removes and returns a ListIterable of the number of elements specified by the count, * beginning with the top of the stack and puts them into a new stack. */ > R pop(int count, R targetStack); void clear(); @Override MutableStack takeWhile(Predicate predicate); @Override MutableStack dropWhile(Predicate predicate); @Override PartitionMutableStack partitionWhile(Predicate predicate); @Override MutableStack distinct(); MutableStack asUnmodifiable(); MutableStack asSynchronized(); @Override MutableStack tap(Procedure procedure); @Override MutableStack select(Predicate predicate); @Override

MutableStack selectWith(Predicate2 predicate, P parameter); @Override MutableStack reject(Predicate predicate); @Override

MutableStack rejectWith(Predicate2 predicate, P parameter); @Override MutableStack selectInstancesOf(Class clazz); @Override PartitionMutableStack partition(Predicate predicate); @Override

PartitionMutableStack partitionWith(Predicate2 predicate, P parameter); @Override MutableStack collect(Function function); @Override MutableBooleanStack collectBoolean(BooleanFunction booleanFunction); @Override MutableByteStack collectByte(ByteFunction byteFunction); @Override MutableCharStack collectChar(CharFunction charFunction); @Override MutableDoubleStack collectDouble(DoubleFunction doubleFunction); @Override MutableFloatStack collectFloat(FloatFunction floatFunction); @Override MutableIntStack collectInt(IntFunction intFunction); @Override MutableLongStack collectLong(LongFunction longFunction); @Override MutableShortStack collectShort(ShortFunction shortFunction); @Override MutableStack collectWith(Function2 function, P parameter); @Override MutableStack collectIf(Predicate predicate, Function function); /** * @since 9.1. */ @Override default MutableStack collectWithIndex(ObjectIntToObjectFunction function) { int[] index = {0}; return this.collect(each -> function.valueOf(each, index[0]++)); } @Override MutableStack flatCollect(Function> function); /** * @since 9.2 */ @Override default MutableStack flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override MutableObjectLongMap sumByInt(Function groupBy, IntFunction function); @Override MutableObjectDoubleMap sumByFloat(Function groupBy, FloatFunction function); @Override MutableObjectLongMap sumByLong(Function groupBy, LongFunction function); @Override MutableObjectDoubleMap sumByDouble(Function groupBy, DoubleFunction function); @Override MutableListMultimap groupBy(Function function); /** * @since 9.0 */ @Override default MutableBag countBy(Function function) { return this.asLazy().collect(function).toBag(); } /** * @since 9.0 */ @Override default MutableBag countByWith(Function2 function, P parameter) { return this.asLazy().collectWith(function, parameter).toBag(); } /** * @since 10.0.0 */ @Override default MutableBag countByEach(Function> function) { return this.asLazy().flatCollect(function).toBag(); } @Override MutableListMultimap groupByEach(Function> function); @Override default MutableMap groupByUniqueKey(Function function) { return this.groupByUniqueKey(function, Maps.mutable.withInitialCapacity(this.size())); } @Override MutableStack> zip(Iterable that); @Override MutableStack> zipWithIndex(); @Override default MutableMap aggregateInPlaceBy( Function groupBy, Function0 zeroValueFactory, Procedure2 mutatingAggregator) { MutableMap map = Maps.mutable.empty(); this.forEach(each -> { K key = groupBy.valueOf(each); V value = map.getIfAbsentPut(key, zeroValueFactory); mutatingAggregator.value(value, each); }); return map; } @Override default MutableMap aggregateBy( Function groupBy, Function0 zeroValueFactory, Function2 nonMutatingAggregator) { MutableMap map = Maps.mutable.empty(); this.forEach(each -> { K key = groupBy.valueOf(each); map.updateValueWith(key, zeroValueFactory, nonMutatingAggregator, each); }); return map; } } StackIterable.java000066400000000000000000000173171407344533200371000ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/stack/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.stack; import java.util.List; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.BooleanFunction; import org.eclipse.collections.api.block.function.primitive.ByteFunction; import org.eclipse.collections.api.block.function.primitive.CharFunction; import org.eclipse.collections.api.block.function.primitive.DoubleFunction; import org.eclipse.collections.api.block.function.primitive.FloatFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.LongFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ShortFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.factory.Stacks; import org.eclipse.collections.api.list.ListIterable; import org.eclipse.collections.api.multimap.list.ListMultimap; import org.eclipse.collections.api.ordered.OrderedIterable; import org.eclipse.collections.api.partition.stack.PartitionStack; import org.eclipse.collections.api.stack.primitive.BooleanStack; import org.eclipse.collections.api.stack.primitive.ByteStack; import org.eclipse.collections.api.stack.primitive.CharStack; import org.eclipse.collections.api.stack.primitive.DoubleStack; import org.eclipse.collections.api.stack.primitive.FloatStack; import org.eclipse.collections.api.stack.primitive.IntStack; import org.eclipse.collections.api.stack.primitive.LongStack; import org.eclipse.collections.api.stack.primitive.ShortStack; import org.eclipse.collections.api.tuple.Pair; /** * StackIterable is a last-in-first-out data structure. All iteration methods iterate from the "top" of the stack to the * "bottom". In other words, it processes the most recently added elements first. *

* For example: *

* {@link #forEach(Procedure)} iterates over every element, starting with the most recently added *

* {@link #getFirst()} returns the most recently added element, not the element that was added first *

* {@link #toString()} follows the same rules as {@link java.util.AbstractCollection#toString()} except it processes the elements * in the same order as {@code forEach()}. */ public interface StackIterable extends OrderedIterable { /** * Returns the element at the top of the stack, without removing it from the stack. * * @return the top of the stack. */ T peek(); /** * @return a ListIterable of the number of elements specified by the count, beginning with the top of the stack. */ ListIterable peek(int count); /** * Returns the element at a specific index, without removing it from the stack. * * @param index the location to peek into * @return the element at the specified index */ T peekAt(int index); /** * Should return the same value as peek(). */ @Override default T getFirst() { return this.peek(); } /** * Should not work as it violates the contract of a Stack. */ @Override T getLast(); /** * Follows the same rules as {@link java.util.AbstractCollection#toString()} except it processes the elements * in the same order as {@code forEach()}. *

     * Assert.assertEquals("[3, 2, 1]", Stacks.mutable.with(1, 2, 3).toString());
     * 
*/ @Override String toString(); /** * Follows the same general contract as {@link List#equals(Object)}, but for Stacks. */ @Override boolean equals(Object o); /** * Follows the same general contract as {@link List#hashCode()}, but for Stacks. */ @Override int hashCode(); @Override StackIterable takeWhile(Predicate predicate); @Override StackIterable dropWhile(Predicate predicate); @Override PartitionStack partitionWhile(Predicate predicate); @Override StackIterable distinct(); /** * Converts the stack to a MutableStack implementation. * * @since 2.0 */ @Override default MutableStack toStack() { return Stacks.mutable.withAllReversed(this); } @Override StackIterable tap(Procedure procedure); @Override StackIterable select(Predicate predicate); @Override

StackIterable selectWith(Predicate2 predicate, P parameter); @Override StackIterable reject(Predicate predicate); @Override

StackIterable rejectWith(Predicate2 predicate, P parameter); @Override StackIterable selectInstancesOf(Class clazz); @Override PartitionStack partition(Predicate predicate); @Override

PartitionStack partitionWith(Predicate2 predicate, P parameter); @Override StackIterable collect(Function function); @Override BooleanStack collectBoolean(BooleanFunction booleanFunction); @Override ByteStack collectByte(ByteFunction byteFunction); @Override CharStack collectChar(CharFunction charFunction); @Override DoubleStack collectDouble(DoubleFunction doubleFunction); @Override FloatStack collectFloat(FloatFunction floatFunction); @Override IntStack collectInt(IntFunction intFunction); @Override LongStack collectLong(LongFunction longFunction); @Override ShortStack collectShort(ShortFunction shortFunction); @Override StackIterable collectWith(Function2 function, P parameter); @Override StackIterable collectIf(Predicate predicate, Function function); /** * @since 9.1. */ @Override default StackIterable collectWithIndex(ObjectIntToObjectFunction function) { int[] index = {0}; return this.collect(each -> function.valueOf(each, index[0]++)); } @Override StackIterable flatCollect(Function> function); /** * @since 9.2 */ @Override default StackIterable flatCollectWith(Function2> function, P parameter) { return this.flatCollect(each -> function.apply(each, parameter)); } @Override ListMultimap groupBy(Function function); @Override ListMultimap groupByEach(Function> function); @Override StackIterable> zip(Iterable that); @Override StackIterable> zipWithIndex(); /** * Converts the StackIterable to an immutable implementation. Returns this for immutable stacks. * * @since 5.0 */ ImmutableStack toImmutable(); } package-info.java000066400000000000000000000021141407344533200366740ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/stack/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains interfaces for stack API. *

* A stack is a last-in-first-out data structure. *

* This package contains 3 interfaces: *

    *
  • * {@link org.eclipse.collections.api.stack.MutableStack} - a mutable stack API. *
  • *
  • * {@link org.eclipse.collections.api.stack.ImmutableStack} - the non-modifiable equivalent interface to {@link org.eclipse.collections.api.stack.MutableStack}. *
  • *
  • * {@link org.eclipse.collections.api.stack.StackIterable} - a read-only stack API. *
  • *
*/ package org.eclipse.collections.api.stack; primitive/000077500000000000000000000000001407344533200355175ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/stackpackage-info.java000066400000000000000000000013341407344533200407070ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/stack/primitive/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains mutable and immutable primitive stack API. *

* A primitive stack is similar to {@link org.eclipse.collections.api.stack.StackIterable} and is memory-optimized for primitives. */ package org.eclipse.collections.api.stack.primitive; tuple/000077500000000000000000000000001407344533200335335ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/apiPair.java000066400000000000000000000034151407344533200352740ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/tuple/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.tuple; import java.io.Serializable; import java.util.Map; import java.util.Objects; /** * A Pair is a container that holds two related objects. It is the equivalent of an Association in Smalltalk, or an * implementation of Map.Entry in the JDK. * * An instance of this interface can be created by calling Tuples.pair(Object, Object) or Tuples.twin(Object, Object). */ public interface Pair extends Serializable, Comparable> { T1 getOne(); T2 getTwo(); void put(Map map); Map.Entry toEntry(); /** * Method used to swap the elements of pair. * *

e.g.
     * Pair<String, Integer> pair = Tuples.pair("One", 1);
     * Pair<Integer, String> swappedPair = pair.swap();
     * 
* * @since 6.0 */ Pair swap(); /* * Returns true if value of getOne() is equal to value of getTwo(). * * @since 11.0 */ default boolean isEqual() { return Objects.equals(this.getOne(), this.getTwo()); } /* * Returns true if value of getOne() is the same instance as the value of getTwo(). * * @since 11.0 */ default boolean isSame() { return this.getOne() == this.getTwo(); } } Triple.java000066400000000000000000000024431407344533200356400ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/tuple/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.tuple; import java.io.Serializable; import java.util.Objects; public interface Triple extends Serializable, Comparable> { T1 getOne(); T2 getTwo(); T3 getThree(); Triple reverse(); /* * Returns true if value of getOne() is equal to value of getTwo() and getThree(). * * @since 11.0 */ default boolean isEqual() { return Objects.equals(this.getOne(), this.getTwo()) && Objects.equals(this.getOne(), this.getThree()); } /* * Returns true if value of getOne() is the same instance as the value of getTwo() and getThree(). * * @since 11.0 */ default boolean isSame() { return this.getOne() == this.getTwo() && this.getOne() == this.getThree(); } } Triplet.java000066400000000000000000000011261407344533200360210ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/tuple/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.tuple; public interface Triplet extends Triple { Triplet reverse(); } Twin.java000066400000000000000000000013751407344533200353250ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/tuple/* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.api.tuple; /** * A Twin is a Pair where both elements have the same type. * * An instance of this interface can be created by calling Tuples.twin(Object, Object). */ public interface Twin extends Pair { @Override Twin swap(); } package-info.java000066400000000000000000000024251407344533200367250ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/java/org/eclipse/collections/api/tuple/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains the {@link org.eclipse.collections.api.tuple.Pair} and {@link org.eclipse.collections.api.tuple.Twin} interfaces. *

* A tuple is a container used to hold two related objects. *

* This package contains 4 interfaces: *

    *
  • * {@link org.eclipse.collections.api.tuple.Pair} - a container that holds two related objects. *
  • *
  • * {@link org.eclipse.collections.api.tuple.Twin} - a Pair that has the same type for both items. *
  • *
  • * {@link org.eclipse.collections.api.tuple.Triple} - a container that holds three related objects. *
  • *
  • * {@link org.eclipse.collections.api.tuple.Triplet} - a Triple that has the same type for all three items. *
  • *
*/ package org.eclipse.collections.api.tuple; eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/resources/000077500000000000000000000000001407344533200262505ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/resources/LICENSE-EDL-1.0.txt000066400000000000000000000030311407344533200307660ustar00rootroot00000000000000Eclipse Distribution License - v 1.0 Copyright (c) 2007, Eclipse Foundation, Inc. and its licensors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of the Eclipse Foundation, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/resources/LICENSE-EPL-1.0.txt000066400000000000000000000257401407344533200310150ustar00rootroot00000000000000Eclipse Public License - v 1.0 THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. 1. DEFINITIONS "Contribution" means: a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and b) in the case of each subsequent Contributor: i) changes to the Program, and ii) additions to the Program; where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. "Contributor" means any person or entity that distributes the Program. "Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. "Program" means the Contributions distributed in accordance with this Agreement. "Recipient" means anyone who receives the Program under this Agreement, including all Contributors. 2. GRANT OF RIGHTS a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form. b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. 3. REQUIREMENTS A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: a) it complies with the terms and conditions of this Agreement; and b) its license agreement: i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. When the Program is made available in source code form: a) it must be made available under this Agreement; and b) a copy of this Agreement must be included with each copy of the Program. Contributors may not remove or alter any copyright notices contained within the Program. Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. 4. COMMERCIAL DISTRIBUTION Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. 5. NO WARRANTY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. 6. DISCLAIMER OF LIABILITY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. GENERAL If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. eclipse-collections-11.0.0.M3/eclipse-collections-api/src/main/resources/about.html000066400000000000000000000051361407344533200302550ustar00rootroot00000000000000 About Eclipse Collections 7.0

Eclipse Collections 7.0

Eclipse Collections initial release

Dec 24 2015

About

License

The Eclipse Foundation makes available all content in this module ("Content"). Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the Eclipse Public License Version 1.0 ("EPL") and Eclipse Distribution License Version 1.0 (“EDLâ€). A copy of the EPL is available at http://www.eclipse.org/legal/epl-v10.html and a copy of the EDL is available at http://www.eclipse.org/org/documents/edl-v10.php. For purposes of the EPL, "Program" will mean the Content.

If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party ("Redistributor") and different terms and conditions may apply to your use of any object code in the Content. Check the Redistributor’s license that was provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise indicated below, the terms and conditions of the EPL and EDL still apply to any source code in the Content and such source code may be obtained at http://www.eclipse.org.

eclipse-collections-11.0.0.M3/eclipse-collections-code-generator-maven-plugin/000077500000000000000000000000001407344533200272505ustar00rootroot00000000000000eclipse-collections-code-generator-maven-plugin.iml000066400000000000000000000043461407344533200411370ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator-maven-plugin eclipse-collections-11.0.0.M3/eclipse-collections-code-generator-maven-plugin/pom.xml000066400000000000000000000124031407344533200305650ustar00rootroot00000000000000 4.0.0 eclipse-collections-parent org.eclipse.collections 11.0.0.M3 eclipse-collections-code-generator-maven-plugin maven-plugin Eclipse Collections Code Generator Maven Plugin true true org.eclipse.collections eclipse-collections-code-generator ${project.version} org.apache.maven maven-plugin-api 2.0 org.apache.maven maven-project 2.0 maven-surefire-plugin maven-source-plugin org.codehaus.mojo sonar-maven-plugin maven-checkstyle-plugin org.codehaus.mojo findbugs-maven-plugin maven-javadoc-plugin Eclipse Collections - ${project.version} Eclipse Collections - ${project.version} public https://docs.oracle.com/javase/8/docs/api/ ${project.version} none maven-enforcer-plugin maven-plugin-plugin org.eclipse.m2e lifecycle-mapping 1.0.0 org.apache.maven.plugins maven-plugin-plugin [3.5,) descriptor maven-plugin-plugin eclipse-collections-11.0.0.M3/eclipse-collections-code-generator-maven-plugin/src/000077500000000000000000000000001407344533200300375ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator-maven-plugin/src/main/000077500000000000000000000000001407344533200307635ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator-maven-plugin/src/main/java/000077500000000000000000000000001407344533200317045ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator-maven-plugin/src/main/java/org/000077500000000000000000000000001407344533200324735ustar00rootroot00000000000000eclipse/000077500000000000000000000000001407344533200340405ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator-maven-plugin/src/main/java/orgcollections/000077500000000000000000000000001407344533200363565ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator-maven-plugin/src/main/java/org/eclipsecodegenerator/000077500000000000000000000000001407344533200411775ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator-maven-plugin/src/main/java/org/eclipse/collectionsmaven/000077500000000000000000000000001407344533200423055ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator-maven-plugin/src/main/java/org/eclipse/collections/codegeneratorGenerateMojo.java000066400000000000000000000060061407344533200455310ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator-maven-plugin/src/main/java/org/eclipse/collections/codegenerator/maven/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.codegenerator.maven; import java.net.URL; import java.net.URLClassLoader; import java.util.Arrays; import java.util.List; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.project.MavenProject; import org.eclipse.collections.codegenerator.EclipseCollectionsCodeGenerator; /** * @goal generate * @phase generate-sources * @requiresDependencyResolution compile */ public class GenerateMojo extends AbstractMojo { /** * Skips code generation if true. * * @parameter property="skipCodeGen" */ private boolean skipCodeGen; /** * @parameter default-value="${project.build.directory}/generated-sources" * @required */ private String templateDirectory; /** * The Maven project to act upon. * * @parameter property="project" * @required */ private MavenProject project; @Override public void execute() throws MojoExecutionException { if (this.skipCodeGen) { this.getLog().info("Skipping code generation in " + this.project.getArtifactId()); } else { this.getLog().info("Generating sources to " + this.project.getArtifactId()); } List urls = Arrays.asList(((URLClassLoader) GenerateMojo.class.getClassLoader()).getURLs()); boolean[] error = new boolean[1]; EclipseCollectionsCodeGenerator.ErrorListener errorListener = new EclipseCollectionsCodeGenerator.ErrorListener() { public void error(String string) { GenerateMojo.this.getLog().error(string); error[0] = true; } }; EclipseCollectionsCodeGenerator gsCollectionsCodeGenerator = new EclipseCollectionsCodeGenerator(this.templateDirectory, this.project.getBasedir(), urls, errorListener); if (!this.skipCodeGen) { int numFilesWritten = gsCollectionsCodeGenerator.generateFiles(); this.getLog().info("Generated " + numFilesWritten + " files"); } if (error[0]) { throw new MojoExecutionException("Error(s) during code generation."); } if (gsCollectionsCodeGenerator.isTest()) { this.project.addTestCompileSourceRoot(EclipseCollectionsCodeGenerator.GENERATED_TEST_SOURCES_LOCATION); } else { this.project.addCompileSourceRoot(EclipseCollectionsCodeGenerator.GENERATED_SOURCES_LOCATION); } } } package-info.java000066400000000000000000000012261407344533200454750ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator-maven-plugin/src/main/java/org/eclipse/collections/codegenerator/maven/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains the mojo implementation used by maven during the generate-source phase to generate code for primitive collections. */ package org.eclipse.collections.codegenerator.maven; eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/000077500000000000000000000000001407344533200246505ustar00rootroot00000000000000eclipse-collections-code-generator.iml000066400000000000000000000016351407344533200341350ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/pom.xml000066400000000000000000000057451407344533200262000ustar00rootroot00000000000000 eclipse-collections-parent org.eclipse.collections 11.0.0.M3 4.0.0 eclipse-collections-code-generator Eclipse Collections Code Generator true true org.antlr ST4 4.3.1 org.antlr stringtemplate maven-surefire-plugin maven-source-plugin org.codehaus.mojo sonar-maven-plugin maven-checkstyle-plugin org.codehaus.mojo findbugs-maven-plugin maven-javadoc-plugin Eclipse Collections - ${project.version} Eclipse Collections - ${project.version} public https://docs.oracle.com/javase/8/docs/api/ ${project.version} none maven-enforcer-plugin eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/000077500000000000000000000000001407344533200254375ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/000077500000000000000000000000001407344533200263635ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/java/000077500000000000000000000000001407344533200273045ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/java/org/000077500000000000000000000000001407344533200300735ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/java/org/eclipse/000077500000000000000000000000001407344533200315175ustar00rootroot00000000000000collections/000077500000000000000000000000001407344533200337565ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/java/org/eclipsecodegenerator/000077500000000000000000000000001407344533200365775ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/java/org/eclipse/collectionsEclipseCollectionsCodeGenerator.java000066400000000000000000000244501407344533200456740ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/java/org/eclipse/collections/codegenerator/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.codegenerator; import java.io.File; import java.net.URL; import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.zip.CRC32; import org.eclipse.collections.codegenerator.model.Primitive; import org.eclipse.collections.codegenerator.tools.FileUtils; import org.eclipse.collections.codegenerator.tools.IntegerOrStringRenderer; import org.stringtemplate.v4.ST; import org.stringtemplate.v4.STErrorListener; import org.stringtemplate.v4.STGroupFile; import org.stringtemplate.v4.misc.STMessage; public class EclipseCollectionsCodeGenerator { public static final String GENERATED_TEST_SOURCES_LOCATION = "target/generated-test-sources/java/"; public static final String GENERATED_SOURCES_LOCATION = "target/generated-sources/java/"; private final String templateDirectory; private final File moduleBaseDir; private final List classPathURLs; private boolean isTest; private STGroupFile templateFile; private final STErrorListener stErrorListener; private URL url; private int numFileWritten = 0; public EclipseCollectionsCodeGenerator(String templateDirectory, File moduleBaseDir, List classPathURLs, ErrorListener errorListener) { this.templateDirectory = templateDirectory; this.moduleBaseDir = moduleBaseDir; this.classPathURLs = classPathURLs; this.stErrorListener = new LoggingErrorListener(errorListener); } /** * Generates code and only write contents to disk which differ from the current file contents. * * @return The number of files written. */ public int generateFiles() { List allTemplateFilesFromClassPath = FileUtils.getAllTemplateFilesFromClasspath(this.templateDirectory, this.classPathURLs); for (URL url : allTemplateFilesFromClassPath) { this.url = url; this.templateFile = new STGroupFile(this.url, "UTF-8", '<', '>'); this.templateFile.setListener(this.stErrorListener); this.templateFile.registerRenderer(String.class, new IntegerOrStringRenderer()); if (this.templateFile.isDefined("fileName")) { this.setTest(); File targetPath = this.constructTargetPath(); FileUtils.createDirectory(targetPath); boolean hasTwoPrimitives = this.templateFile.isDefined("hasTwoPrimitives") && Boolean.valueOf(this.templateFile.getInstanceOf("hasTwoPrimitives").render()); boolean skipBoolean = this.templateFile.isDefined("skipBoolean") && Boolean.valueOf(this.templateFile.getInstanceOf("skipBoolean").render()); boolean skipBooleanKeys = this.templateFile.isDefined("skipBooleanKeys") && Boolean.valueOf(this.templateFile.getInstanceOf("skipBooleanKeys").render()); boolean forSpecializedStream = this.templateFile.isDefined("forSpecializedStream") && Boolean.valueOf(this.templateFile.getInstanceOf("forSpecializedStream").render()); if (hasTwoPrimitives) { for (Primitive primitive1 : Primitive.values()) { if (primitive1 == Primitive.BOOLEAN && (skipBoolean || skipBooleanKeys)) { continue; } for (Primitive primitive2 : Primitive.values()) { if (primitive2 == Primitive.BOOLEAN && skipBoolean) { continue; } String sourceFileName = this.executeTemplate(primitive1, primitive2, "fileName"); File outputFile = new File(targetPath, sourceFileName + ".java"); if (!EclipseCollectionsCodeGenerator.sourceFileExists(outputFile)) { String classContents = this.executeTemplate(primitive1, primitive2, "class"); this.checkSumClassContentsAndWrite(classContents, targetPath, sourceFileName); } } } } else { for (Primitive primitive : Primitive.values()) { if (primitive == Primitive.BOOLEAN && skipBoolean) { continue; } if (forSpecializedStream && !primitive.hasSpecializedStream()) { continue; } String sourceFileName = this.executeTemplate(primitive, "fileName"); File outputFile = new File(targetPath, sourceFileName + ".java"); if (!EclipseCollectionsCodeGenerator.sourceFileExists(outputFile)) { String classContents = this.executeTemplate(primitive, "class"); this.checkSumClassContentsAndWrite(classContents, targetPath, sourceFileName); } } } } } return this.numFileWritten; } private void checkSumClassContentsAndWrite(String classContents, File targetPath, String sourceFileName) { long checksumValue = EclipseCollectionsCodeGenerator.calculateChecksum(classContents); File outputFile = new File(targetPath, sourceFileName + ".java"); Path outputChecksumPath = Paths.get(targetPath.getAbsolutePath(), sourceFileName + ".java.crc"); if (!outputChecksumPath.toFile().exists()) { this.writeFileAndChecksum(outputFile, classContents, checksumValue, outputChecksumPath, false); return; } String existingChecksum = FileUtils.readFile(outputChecksumPath); if (existingChecksum.equals(String.valueOf(checksumValue))) { return; } this.writeFileAndChecksum(outputFile, classContents, checksumValue, outputChecksumPath, true); } private static long calculateChecksum(String string) { CRC32 checksum = new CRC32(); checksum.update(string.getBytes(StandardCharsets.UTF_8)); return checksum.getValue(); } private void writeFileAndChecksum(File outputFile, String output, long checksumValue, Path outputChecksumPath, boolean outputFileMustExist) { this.numFileWritten++; FileUtils.writeToFile(output, outputFile, outputFileMustExist); FileUtils.writeToFile(String.valueOf(checksumValue), outputChecksumPath.toFile(), outputFileMustExist); } private String executeTemplate(Primitive primitive, String templateName) { ST template = this.findTemplate(templateName); template.add("primitive", primitive); return template.render(); } private String executeTemplate(Primitive primitive1, Primitive primitive2, String templateName) { ST template = this.findTemplate(templateName); template.add("primitive1", primitive1); template.add("primitive2", primitive2); template.add("sameTwoPrimitives", primitive1 == primitive2); return template.render(); } private ST findTemplate(String templateName) { ST template = this.templateFile.getInstanceOf(templateName); if (template == null) { throw new RuntimeException("Could not find template " + templateName + " in " + this.templateFile.getFileName()); } return template; } private void setTest() { this.isTest = this.templateFile.getInstanceOf("isTest") == null ? false : Boolean.valueOf(this.templateFile.getInstanceOf("isTest").render()); } private File constructTargetPath() { ST targetPath = this.findTemplate("targetPath"); return this.isTest ? new File(this.moduleBaseDir, GENERATED_TEST_SOURCES_LOCATION + targetPath.render()) : new File(this.moduleBaseDir, GENERATED_SOURCES_LOCATION + targetPath.render()); } private static boolean sourceFileExists(File outputFile) { File newPath = new File(outputFile.getAbsolutePath() .replace("target", "src") .replace("generated-sources", "main") .replace("generated-test-sources", "test")); return newPath.exists(); } public boolean isTest() { return this.isTest; } public interface ErrorListener { void error(String string); } private final class LoggingErrorListener implements STErrorListener { private final ErrorListener errorListener; private LoggingErrorListener(ErrorListener errorListener) { this.errorListener = errorListener; } private void logError(STMessage stMessage, String errorType) { String error = String.format("String template %s error while processing [%s]: %s", errorType, EclipseCollectionsCodeGenerator.this.url.getPath(), stMessage.toString()); this.errorListener.error(error); throw new RuntimeException(error); } @Override public void compileTimeError(STMessage stMessage) { this.logError(stMessage, "compile time"); } @Override public void runTimeError(STMessage stMessage) { this.logError(stMessage, "run time"); } @Override public void IOError(STMessage stMessage) { this.logError(stMessage, "IO"); } @Override public void internalError(STMessage stMessage) { this.logError(stMessage, "internal"); } } } model/000077500000000000000000000000001407344533200376775ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/java/org/eclipse/collections/codegeneratorPrimitive.java000066400000000000000000000043271407344533200425200ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/java/org/eclipse/collections/codegenerator/model/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.codegenerator.model; public enum Primitive { INT("int"), FLOAT("float"), DOUBLE("double"), LONG("long"), SHORT("short"), BYTE("byte"), CHAR("char"), BOOLEAN("boolean"); public final String type; Primitive(String type) { this.type = type; } public String getName() { return this.type.substring(0, 1).toUpperCase() + this.type.substring(1); } public String getWrapperName() { if ("int".equals(this.type)) { return "Integer"; } if ("char".equals(this.type)) { return "Character"; } return this.getName(); } public boolean isIntPrimitive() { return this == INT; } public boolean isFloatingPoint() { return this == FLOAT || this == DOUBLE; } public boolean isBytePrimitive() { return this == BYTE; } public boolean isBooleanPrimitive() { return this == BOOLEAN; } public boolean isCharPrimitive() { return this == CHAR; } public boolean isShortPrimitive() { return this == SHORT; } public boolean isFloatPrimitive() { return this == FLOAT; } public boolean isDoublePrimitive() { return this == DOUBLE; } public boolean isLongPrimitive() { return this == LONG; } public boolean hasSpecializedStream() { return this == INT || this == LONG || this == DOUBLE; } public boolean isByteOrShortOrCharPrimitive() { return this == BYTE || this == SHORT || this == CHAR; } public boolean isFloatOrDoublePrimitive() { return this == FLOAT || this == DOUBLE; } } package-info.java000066400000000000000000000011151407344533200430640ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/java/org/eclipse/collections/codegenerator/model/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains an enum which has the list of primitives. */ package org.eclipse.collections.codegenerator.model; package-info.java000066400000000000000000000012761407344533200417740ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/java/org/eclipse/collections/codegenerator/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains a implementation which is used to generate code for primitive collections. *

* String Template is used to generate the code for primitive collections. */ package org.eclipse.collections.codegenerator; tools/000077500000000000000000000000001407344533200377375ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/java/org/eclipse/collections/codegeneratorFileUtils.java000066400000000000000000000131711407344533200425050ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/java/org/eclipse/collections/codegenerator/tools/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.codegenerator.tools; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; import java.util.jar.JarEntry; import java.util.jar.JarInputStream; public final class FileUtils { private FileUtils() { throw new AssertionError("Suppress for noninstantiability"); } public static void writeToFile(String data, File outputFile, boolean outputFileMustExist) { if (!outputFile.delete() && outputFileMustExist) { throw new IllegalStateException(outputFile.getAbsolutePath()); } FileWriter fileWriter = null; BufferedWriter bufferedWriter = null; try { fileWriter = new FileWriter(outputFile); bufferedWriter = new BufferedWriter(fileWriter); bufferedWriter.write(data); bufferedWriter.flush(); } catch (IOException e) { throw new RuntimeException("Could not write generated sources to file: " + e); } finally { if (fileWriter != null) { try { fileWriter.close(); } catch (IOException e) { throw new RuntimeException("Could not close filewriter: " + e); } } if (bufferedWriter != null) { try { bufferedWriter.close(); } catch (IOException e) { throw new RuntimeException("Could not close bufferedwriter: " + e); } } } } public static List getAllTemplateFilesFromClasspath(String templateDirectory, List classPathURLs) { List files = new ArrayList<>(); try { for (URL url : classPathURLs) { recurseURL(url, files, templateDirectory); } } catch (IOException | URISyntaxException e) { throw new RuntimeException(e); } return files; } private static void recurseURL(URL url, List files, String templateDirectory) throws URISyntaxException, IOException { if ("file".equals(url.getProtocol())) { recurse(new File(url.toURI()), new File(url.toURI()), files, templateDirectory); } else { if (url.getPath().endsWith(".jar")) { JarInputStream stream = new JarInputStream(url.openStream()); processJar(stream, files, templateDirectory); stream.close(); } } } private static void recurse(File rootDirectory, File file, List files, String templateDirectory) throws IOException { if (file.isDirectory()) { File[] children = file.listFiles(); if (children != null) { for (File child : children) { recurse(rootDirectory, child, files, templateDirectory); } } } else { if (file.getName().endsWith(".jar")) { JarInputStream stream = new JarInputStream(new FileInputStream(file)); processJar(stream, files, templateDirectory); stream.close(); } else { String rootPath = rootDirectory.getAbsolutePath(); String filePath = file.getAbsolutePath(); if (filePath.contains(templateDirectory) && !rootPath.equals(filePath) && isTemplateFile(filePath)) { files.add(new URL("file:" + filePath)); } } } } private static void processJar( JarInputStream stream, List files, String templateDirectory) throws IOException { JarEntry entry; while ((entry = stream.getNextJarEntry()) != null) { String entryName = entry.getName(); if (isTemplateFile(entryName) && entryName.startsWith(templateDirectory)) { files.add(FileUtils.class.getClassLoader().getResource(entryName)); } } } public static void createDirectory(File path) { if (!path.exists()) { boolean mkdirs = path.mkdirs(); if (!mkdirs) { throw new RuntimeException("Could not create directory " + path); } } } private static boolean isTemplateFile(String filePath) { return filePath.endsWith(".stg"); } public static String readFile(Path path) { try { return new String(Files.readAllBytes(path)); } catch (IOException e) { throw new RuntimeException(e); } } } IntegerOrStringRenderer.java000066400000000000000000000026541407344533200453650ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/java/org/eclipse/collections/codegenerator/tools/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.eclipse.collections.codegenerator.tools; import java.util.Locale; import org.stringtemplate.v4.AttributeRenderer; import org.stringtemplate.v4.NumberRenderer; import org.stringtemplate.v4.StringRenderer; public class IntegerOrStringRenderer implements AttributeRenderer { private final AttributeRenderer numberRenderer = new NumberRenderer(); private final AttributeRenderer stringRenderer = new StringRenderer(); @Override public String toString(Object object, String formatString, Locale locale) { if (!(object instanceof String)) { throw new RuntimeException("Only works on Strings"); } try { Integer integer = Integer.valueOf((String) object); return this.numberRenderer.toString(integer, formatString, locale); } catch (NumberFormatException ignored) { return this.stringRenderer.toString(object, formatString, locale); } } } package-info.java000066400000000000000000000012541407344533200431300ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/java/org/eclipse/collections/codegenerator/tools/* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ /** * This package contains utilities used by {@link org.eclipse.collections.codegenerator.EclipseCollectionsCodeGenerator} to get the string form to write to file. */ package org.eclipse.collections.codegenerator.tools; eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/000077500000000000000000000000001407344533200303755ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/000077500000000000000000000000001407344533200311465ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/bag/000077500000000000000000000000001407344533200316775ustar00rootroot00000000000000immutablePrimitiveBag.stg000066400000000000000000000056471407344533200366350ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/bagimport "copyrightAndOthers.stg" import "primitiveAPI.stg" targetPath() ::= "org/eclipse/collections/api/bag/primitive" fileName(primitive) ::= "ImmutableBag" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.bag.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.bag.ImmutableBag; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.IntPredicate; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.collection.primitive.ImmutableCollection; import org.eclipse.collections.api.list.ImmutableList; import org.eclipse.collections.api.tuple.primitive.IntPair; import org.eclipse.collections.api.set.primitive.ImmutableSet; /** * This file was automatically generated from template file immutablePrimitiveBag.stg. * * @since 3.0. */ public interface ImmutableBag extends ImmutableCollection, Bag { /** * @since 9.0. */ @Override default ImmutableBag tap(Procedure procedure) { this.forEach(procedure); return this; } /** * Returns all elements of the bag that have a number of occurrences that satisfy the predicate. * * @since 8.0 */ @Override ImmutableBag selectByOccurrences(IntPredicate predicate); /** * Returns all elements of the bag that have more than one occurrence. * * @since 9.2 */ @Override default ImmutableBag selectDuplicates() { return this.selectByOccurrences(occurrences -> occurrences > 1); } /** * Returns all elements of the bag that have exactly one occurrence. * * @since 9.2 */ @Override ImmutableSet selectUnique(); /** * Returns the {@code count} most frequently occurring items. * * In the event of a tie, all of the items with the number of occurrences that match the occurrences of the last * item will be returned. * * @since 8.0 */ @Override ImmutableList\<IntPair> topOccurrences(int count); /** * Returns the {@code count} least frequently occurring items. * * In the event of a tie, all of the items with the number of occurrences that match the occurrences of the last * item will be returned. * * @since 8.0 */ @Override ImmutableList\<IntPair> bottomOccurrences(int count); @Override \ ImmutableBag\ collect(ToObjectFunction\ function); } >> mutablePrimitiveBag.stg000066400000000000000000000067171407344533200363060ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/bagimport "copyrightAndOthers.stg" import "primitiveAPI.stg" targetPath() ::= "org/eclipse/collections/api/bag/primitive" fileName(primitive) ::= "MutableBag" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.bag.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.bag.MutableBag; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.IntPredicate; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.collection.primitive.MutableCollection; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.tuple.primitive.IntPair; import org.eclipse.collections.api.set.primitive.MutableSet; /** * This file was automatically generated from template file mutablePrimitiveBag.stg. * * @since 3.0. */ public interface MutableBag extends MutableCollection, Bag { void addOccurrences( item, int occurrences); boolean removeOccurrences( item, int occurrences); /** * @since 9.0. */ @Override default MutableBag tap(Procedure procedure) { this.forEach(procedure); return this; } /** * Returns all elements of the bag that have a number of occurrences that satisfy the predicate. * * @since 8.0 */ @Override MutableBag selectByOccurrences(IntPredicate predicate); /** * Returns all elements of the bag that have more than one occurrence. * * @since 9.2 */ @Override default MutableBag selectDuplicates() { return this.selectByOccurrences(occurrences -> occurrences > 1); } /** * Returns all elements of the bag that have exactly one occurrence. * * @since 9.2 */ @Override MutableSet selectUnique(); /** * Returns the {@code count} most frequently occurring items. * * In the event of a tie, all of the items with the number of occurrences that match the occurrences of the last * item will be returned. * * @since 8.0 */ @Override MutableList\<IntPair> topOccurrences(int count); /** * Returns the {@code count} least frequently occurring items. * * In the event of a tie, all of the items with the number of occurrences that match the occurrences of the last * item will be returned. * * @since 8.0 */ @Override MutableList\<IntPair> bottomOccurrences(int count); @Override \ MutableBag\ collect(ToObjectFunction\ function); @Override MutableBag asUnmodifiable(); @Override MutableBag asSynchronized(); /** * Returns an immutable copy of this bag. */ @Override ImmutableBag toImmutable(); /** * Creates a new empty mutable version of the same Bag type. * * @since 9.2. */ default MutableBag newEmpty() { throw new UnsupportedOperationException("Implement in concrete classes."); } } >> primitiveBag.stg000066400000000000000000000074071407344533200347710ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/bagimport "copyrightAndOthers.stg" import "primitiveAPI.stg" targetPath() ::= "org/eclipse/collections/api/bag/primitive" fileName(primitive) ::= "Bag" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.bag.primitive; import java.util.StringJoiner; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.bag.Bag; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.IntPredicate; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.block.procedure.primitive.IntProcedure; import org.eclipse.collections.api.list.ListIterable; import org.eclipse.collections.api.tuple.primitive.IntPair; import org.eclipse.collections.api.set.primitive.Set; /** * This file was automatically generated from template file primitiveBag.stg. * * @since 3.0. */ public interface Bag extends Iterable { /** * The size of the Bag when counting only distinct elements. */ int sizeDistinct(); /** * @since 9.0. */ @Override default Bag tap(Procedure procedure) { this.forEach(procedure); return this; } /** * Returns all elements of the bag that have a number of occurrences that satisfy the predicate. * * @since 8.0 */ Bag selectByOccurrences(IntPredicate predicate); /** * Returns all elements of the bag that have more than one occurrence. * * @since 9.2 */ default Bag selectDuplicates() { return this.selectByOccurrences(occurrences -> occurrences > 1); } /** * Returns all elements of the bag that have exactly one occurrence. * * @since 9.2 */ Set selectUnique(); /** * Returns the {@code count} most frequently occurring items. * * In the event of a tie, all of the items with the number of occurrences that match the occurrences of the last * item will be returned. * * @since 8.0 */ ListIterable\<IntPair> topOccurrences(int count); /** * Returns the {@code count} least frequently occurring items. * * In the event of a tie, all of the items with the number of occurrences that match the occurrences of the last * item will be returned. * * @since 8.0 */ ListIterable\<IntPair> bottomOccurrences(int count); /** * The occurrences of a distinct item in the bag. */ int occurrencesOf( item); /** * For each distinct item, with the number of occurrences, execute the specified procedure. */ void forEachWithOccurrences(IntProcedure procedure); @Override \ Bag\ collect(ToObjectFunction\ function); /** * Follows the same general contract as {@link Bag#equals(Object)}. */ @Override boolean equals(Object o); /** * Follows the same general contract as {@link Bag#hashCode()}. */ @Override int hashCode(); /** * Returns an immutable copy of this bag. If the bag is immutable, it returns itself. */ ImmutableBag toImmutable(); /** * @since 9.2 */ default String toStringOfItemToCount() { StringJoiner joiner = new StringJoiner(", ", "{", "}"); this.forEachWithOccurrences((each, occurrences) -> joiner.add(each + "=" + occurrences)); return joiner.toString(); } } >> eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/block/000077500000000000000000000000001407344533200322405ustar00rootroot00000000000000function/000077500000000000000000000000001407344533200340065ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/blockobjectPrimitiveIntToObjectFunction.stg000066400000000000000000000012631407344533200435010ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/block/functionimport "copyright.stg" targetPath() ::= "org/eclipse/collections/api/block/function/primitive" fileName(primitive) ::= "ObjectIntToObjectFunction" class(primitive) ::= << >> body(type, name, wrapperName) ::= << package org.eclipse.collections.api.block.function.primitive; import java.io.Serializable; /** * This file was automatically generated from template file objectPrimitiveIntToObjectFunction.stg. * * @since 3.2. */ @FunctionalInterface public interface ObjectIntToObjectFunction\ extends Serializable { R valueOf(T object, value, int index); } >> objectPrimitiveToObjectFunction.stg000066400000000000000000000012371407344533200430270ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/block/functionimport "copyright.stg" targetPath() ::= "org/eclipse/collections/api/block/function/primitive" fileName(primitive) ::= "ObjectToObjectFunction" class(primitive) ::= << >> body(type, name, wrapperName) ::= << package org.eclipse.collections.api.block.function.primitive; import java.io.Serializable; /** * This file was automatically generated from template file objectPrimitiveToObjectFunction.stg. * * @since 3.2. */ @FunctionalInterface public interface ObjectToObjectFunction\ extends Serializable { R valueOf(T object, value); } >> objectPrimitiveToPrimitiveFunction.stg000066400000000000000000000012571407344533200435730ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/block/functionimport "copyright.stg" targetPath() ::= "org/eclipse/collections/api/block/function/primitive" fileName(primitive) ::= "ObjectToFunction" class(primitive) ::= << >> body(type, name, wrapperName) ::= << package org.eclipse.collections.api.block.function.primitive; import java.io.Serializable; /** * This file was automatically generated from template file objectPrimitiveToPrimitiveFunction.stg. * * @since 10.0. */ @FunctionalInterface public interface ObjectToFunction\ extends Serializable { valueOf(T object, value); } >> primitiveComparator.stg000066400000000000000000000017061407344533200405710ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/block/functionimport "copyright.stg" targetPath() ::= "org/eclipse/collections/api/block/comparator/primitive" fileName(primitive) ::= "Comparator" class(primitive) ::= << >> body(type, name, wrapperName) ::= << package org.eclipse.collections.api.block.comparator.primitive; import java.io.Serializable; /** * Comparator is a primitive Comparator that takes two arguments of type and * otherwise follows the contract of {@code java.util.Comparator}. * This comparator can be used to sort primitive collections, which support indirect sorting, * if a sort order other thant the natural one of the collection elements is required. * * This file was automatically generated from template file primitiveComparator.stg. * */ @FunctionalInterface public interface Comparator extends Serializable { int compare( value1, value2); } >> primitiveFunction.stg000066400000000000000000000020061407344533200402410ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/block/functionimport "copyright.stg" targetPath() ::= "org/eclipse/collections/api/block/function/primitive" fileName(primitive) ::= "Function" class(primitive) ::= << >> body(type, name, wrapperName) ::= << package org.eclipse.collections.api.block.function.primitive; import java.io.Serializable; /** * Function is a primitive Function which may be used to reduce the overhead * of autoboxing objects in places where primitive s could be used. * This file was automatically generated from template file primitiveFunction.stg. * * @since 3.0. */ @FunctionalInterface public interface Function\ extends java.util.function.ToFunction\, Serializable { ValueOf(T anObject); @Override default applyAs(T value) { return this.ValueOf(value); } } >> primitiveFunction0.stg000066400000000000000000000020761407344533200403300ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/block/functionimport "copyright.stg" targetPath() ::= "org/eclipse/collections/api/block/function/primitive" fileName(primitive) ::= "Function0" class(primitive) ::= << >> body(type, name, wrapperName) ::= << package org.eclipse.collections.api.block.function.primitive; import java.io.Serializable; /** * Function0 is a zero argument lambda. It can be stored in a variable or passed as a parameter and executed * by calling the value method. It may be used to reduce the overhead * of autoboxing objects in places where primitive s could be used. * This file was automatically generated from template file primitiveFunction0.stg. * * @since 3.0. */ @FunctionalInterface public interface Function0 extends java.util.function.Supplier, Serializable { value(); @Override default getAs() { return this.value(); } } >> primitiveObjectToPrimitiveFunction.stg000066400000000000000000000012431407344533200435660ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/block/functionimport "copyright.stg" targetPath() ::= "org/eclipse/collections/api/block/function/primitive" fileName(primitive) ::= "ObjectToFunction" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.block.function.primitive; import java.io.Serializable; /** * This file was automatically generated from template file primitiveObjectToPrimitiveFunction.stg. * * @since 3.0. */ @FunctionalInterface public interface ObjectToFunction\ extends Serializable { ValueOf( Parameter, T objectParameter); } >> primitivePrimitive2ToPrimitive2Function.stg000066400000000000000000000021631407344533200444760ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/block/functionimport "copyrightAndOthers.stg" hasTwoPrimitives() ::= "true" targetPath() ::= "org/eclipse/collections/api/block/function/primitive" fileName(primitive1, primitive2, sameTwoPrimitives) ::= "ToFunction" class(primitive1, primitive2, sameTwoPrimitives) ::= << >> body(type1, type2, name1, name2) ::= << package org.eclipse.collections.api.block.function.primitive; import java.io.Serializable; /** * This file was automatically generated from template file primitivePrimitiveToPrimitive2Function.stg. * * @since 10.0. */ @FunctionalInterface public interface ToFunction extends java.util.function.BinaryOperator, Serializable { valueOf( left, right); @Override default applyAs( left, right) { return this.valueOf(left, right); } } >> primitivePrimitiveToObjectFunction.stg000066400000000000000000000020061407344533200435640ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/block/functionimport "copyrightAndOthers.stg" hasTwoPrimitives() ::= "true" targetPath() ::= "org/eclipse/collections/api/block/function/primitive" fileName(primitive1, primitive2, sameTwoPrimitives) ::= "ToObjectFunction" class(primitive1, primitive2, sameTwoPrimitives) ::= << >> body(type1, type2, name1, name2) ::= << package org.eclipse.collections.api.block.function.primitive; import java.io.Serializable; /** * A ToObjectFunction is a two argument lambda or closure which takes a primitive as the first and * a primitive as the second argument and returns an Object as the result. * This file was automatically generated from template file primitivePrimitiveToObjectFunction.stg. * * @since 9.0. */ @FunctionalInterface public interface ToObjectFunction\ extends Serializable { T value( argument1, argument2); } >> primitivePrimitiveToPrimitiveFunction1.stg000066400000000000000000000021621407344533200444120ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/block/functionimport "copyrightAndOthers.stg" hasTwoPrimitives() ::= "true" targetPath() ::= "org/eclipse/collections/api/block/function/primitive" fileName(primitive1, primitive2, sameTwoPrimitives) ::= "ToFunction" class(primitive1, primitive2, sameTwoPrimitives) ::= << >> body(type1, type2, name1, name2) ::= << package org.eclipse.collections.api.block.function.primitive; import java.io.Serializable; /** * This file was automatically generated from template file primitivePrimitiveToPrimitiveFunction.stg. * * @since 10.0. */ @FunctionalInterface public interface ToFunction extends java.util.function.BinaryOperator, Serializable { valueOf( left, right); @Override default applyAs( left, right) { return this.valueOf(left, right); } } >> primitiveToObjectFunction.stg000066400000000000000000000015101407344533200416720ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/block/functionimport "copyright.stg" targetPath() ::= "org/eclipse/collections/api/block/function/primitive" fileName(primitive) ::= "ToObjectFunction" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.block.function.primitive; import java.io.Serializable; /** * This file was automatically generated from template file primitiveToObjectFunction.stg. * * @since 3.0. */ @FunctionalInterface public interface ToObjectFunction\ extends java.util.function.Function\, Serializable { V valueOf( Parameter); @Override default V apply( parameter) { return this.valueOf(parameter); } } >> primitiveToPrimitiveFunction.stg000066400000000000000000000022701407344533200424400ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/block/functionimport "copyright.stg" hasTwoPrimitives() ::= "true" targetPath() ::= "org/eclipse/collections/api/block/function/primitive" fileName(primitive1, primitive2, sameTwoPrimitives) ::= "ToFunction" class(primitive1, primitive2, sameTwoPrimitives) ::= << >> body(type1, type2, name1, name2) ::= << package org.eclipse.collections.api.block.function.primitive; import java.io.Serializable; /** * This file was automatically generated from template file primitiveToPrimitiveFunction.stg. * * @since 3.0. */ @FunctionalInterface public interface ToFunction extends java.util.function.ToFunction, java.util.function.UnaryOperator, Serializable { valueOf( Parameter); @Override default applyAs( each) { return this.valueOf(each); } } >> predicate/000077500000000000000000000000001407344533200341215ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/blockobjectPrimitivePredicate.stg000066400000000000000000000013041407344533200416160ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/block/predicateimport "copyright.stg" targetPath() ::= "org/eclipse/collections/api/block/predicate/primitive" fileName(primitive) ::= "ObjectPredicate" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.block.predicate.primitive; import java.io.Serializable; /** * A two argument Predicate that takes type T and * a primitive as the arguments. * This file was automatically generated from template file objectPrimitivePredicate.stg. * * @since 3.0. */ @FunctionalInterface public interface ObjectPredicate\ extends Serializable { boolean accept(T object, value); } >> primitiveObjectPredicate.stg000066400000000000000000000013041407344533200416160ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/block/predicateimport "copyright.stg" targetPath() ::= "org/eclipse/collections/api/block/predicate/primitive" fileName(primitive) ::= "ObjectPredicate" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.block.predicate.primitive; import java.io.Serializable; /** * A two argument Predicate that takes a primitive and * type T as the arguments. * This file was automatically generated from template file primitiveObjectPredicate.stg. * * @since 3.0. */ @FunctionalInterface public interface ObjectPredicate\ extends Serializable { boolean accept( value, T object); } >> primitivePredicate.stg000066400000000000000000000017661407344533200405030ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/block/predicateimport "copyright.stg" targetPath() ::= "org/eclipse/collections/api/block/predicate/primitive" fileName(primitive) ::= "Predicate" class(primitive) ::= << >> body(type, name, wrapperName) ::= << package org.eclipse.collections.api.block.predicate.primitive; import java.io.Serializable; /** * Predicate is a primitive Predicate which may be used to reduce the overhead * of autoboxing objects in places where primitive s could be used. * This file was automatically generated from template file primitivePredicate.stg. * * @since 3.0. */ @FunctionalInterface public interface Predicate extends java.util.function.Predicate, Serializable { boolean accept( value); @Override default boolean test( value) { return this.accept(value); } } >> primitivePrimitivePredicate.stg000066400000000000000000000014221407344533200423610ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/block/predicateimport "copyright.stg" hasTwoPrimitives() ::= "true" targetPath() ::= "org/eclipse/collections/api/block/predicate/primitive" fileName(primitive1, primitive2, sameTwoPrimitives) ::= "Predicate" class(primitive1, primitive2, sameTwoPrimitives) ::= << >> body(type1, type2, name1, name2) ::= << package org.eclipse.collections.api.block.predicate.primitive; import java.io.Serializable; /** * This file was automatically generated from template file primitivePrimitivePredicate.stg. * * @since 3.0. */ @FunctionalInterface public interface Predicate extends Serializable { boolean accept( value1, value2); } >> procedure/000077500000000000000000000000001407344533200341515ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/blockobjectPrimitiveProcedure.stg000066400000000000000000000016671407344533200417120ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/block/procedureimport "copyright.stg" targetPath() ::= "org/eclipse/collections/api/block/procedure/primitive" fileName(primitive) ::= "ObjectProcedure" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.block.procedure.primitive; import java.io.Serializable; /** * A two argument procedure that takes a type T and primitive as the arguments. * This file was automatically generated from template file objectPrimitiveProcedure.stg. * * @since 3.0. */ @FunctionalInterface public interface ObjectProcedure\ extends java.util.function.ObjConsumer\, Serializable { void value(T each, parameter); @Override default void accept(T each, parameter) { this.value(each, parameter); } } >> primitiveObjectProcedure.stg000066400000000000000000000012771407344533200417070ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/block/procedureimport "copyright.stg" targetPath() ::= "org/eclipse/collections/api/block/procedure/primitive" fileName(primitive) ::= "ObjectProcedure" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.block.procedure.primitive; import java.io.Serializable; /** * A two argument procedure that takes a primitive and type T as the arguments. * This file was automatically generated from template file primitiveObjectProcedure.stg. * * @since 3.0. */ @FunctionalInterface public interface ObjectProcedure\ extends Serializable { void value( each, T parameter); } >> primitivePrimitiveProcedure.stg000066400000000000000000000017201407344533200424420ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/block/procedureimport "copyright.stg" hasTwoPrimitives() ::= "true" targetPath() ::= "org/eclipse/collections/api/block/procedure/primitive" fileName(primitive1, primitive2, sameTwoPrimitives) ::= "Procedure" class(primitive1, primitive2, sameTwoPrimitives) ::= << >> body(type1, type2, name1, name2) ::= << package org.eclipse.collections.api.block.procedure.primitive; import java.io.Serializable; /** * A Procedure is a two argument lambda or closure which has no return argument and takes a primitive as the first and * a primitive as the second argument. * This file was automatically generated from template file primitivePrimitiveProcedure.stg. * * @since 3.0. */ @FunctionalInterface public interface Procedure extends Serializable { void value( argument1, argument2); } >> primitiveProcedure.stg000066400000000000000000000015371407344533200405570ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/block/procedureimport "copyright.stg" targetPath() ::= "org/eclipse/collections/api/block/procedure/primitive" fileName(primitive) ::= "Procedure" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.block.procedure.primitive; import java.io.Serializable; /** * A one argument procedure that takes a primitive as the argument. * This file was automatically generated from template file primitiveProcedure.stg. * * @since 3.0. */ @FunctionalInterface public interface Procedure extends java.util.function.Consumer, Serializable { void value( each); @Override default void accept( each) { this.value(each); } } >> eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/collection/000077500000000000000000000000001407344533200333015ustar00rootroot00000000000000immutablePrimitiveCollection.stg000066400000000000000000000024411407344533200416260ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/collectionimport "copyrightAndOthers.stg" import "primitiveAPI.stg" targetPath() ::= "org/eclipse/collections/api/collection/primitive" fileName(primitive) ::= "ImmutableCollection" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.collection.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.collection.ImmutableCollection; /** * This file was automatically generated from template file immutablePrimitiveCollection.stg. * * @since 3.0. */ public interface ImmutableCollection extends Iterable { @Override \ ImmutableCollection\ collect(ToObjectFunction\ function); /** * @since 9.0. */ @Override default ImmutableCollection tap(Procedure procedure) { this.forEach(procedure); return this; } } >> mutablePrimitiveCollection.stg000066400000000000000000000053441407344533200413050ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/collectionimport "copyrightAndOthers.stg" import "primitiveAPI.stg" targetPath() ::= "org/eclipse/collections/api/collection/primitive" fileName(primitive) ::= "MutableCollection" class(primitive) ::= << >> body(type, name, primitive) ::= << package org.eclipse.collections.api.collection.primitive; import java.util.Collection; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.iterator.MutableIterator; import org.eclipse.collections.api.collection.MutableCollection; /** * This file was automatically generated from template file mutablePrimitiveCollection.stg. * * @since 3.0. */ public interface MutableCollection extends Iterable { @Override MutableIterator Iterator(); boolean add( element); boolean addAll(... source); boolean addAll(Iterable source); boolean remove( value); boolean removeAll(Iterable source); boolean removeAll(... source); /** * @since 9.1 */ default boolean removeIf(Predicate predicate) { boolean changed = false; MutableIterator iterator = this.Iterator(); while (iterator.hasNext()) { if (predicate.accept(iterator.next())) { iterator.remove(); changed = true; } } return changed; } /** * @see Collection#retainAll(Collection) * @since 5.0 */ boolean retainAll(Iterable elements); /** * @see Collection#retainAll(Collection) * @since 5.0 */ boolean retainAll(... source); void clear(); \ MutableCollection\ collect(ToObjectFunction\ function); MutableCollection asUnmodifiable(); MutableCollection asSynchronized(); ImmutableCollection toImmutable(); /** * @since 9.0. */ @Override default MutableCollection tap(Procedure procedure) { this.forEach(procedure); return this; } /** * Creates a new empty mutable version of the same collection type. * @since 9.2. */ default MutableCollection newEmpty() { throw new UnsupportedOperationException("Implement in concrete classes."); } } >> eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/factory/000077500000000000000000000000001407344533200326155ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/factory/bag/000077500000000000000000000000001407344533200333465ustar00rootroot00000000000000immutablePrimitiveBagFactory.stg000066400000000000000000000047741407344533200416340ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/factory/bagimport "copyrightAndOthers.stg" targetPath() ::= "org/eclipse/collections/api/factory/bag/primitive" fileName(primitive) ::= "ImmutableBagFactory" class(primitive) ::= << >> body(type, name, wrapperName) ::= << package org.eclipse.collections.api.factory.bag.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.bag.primitive.ImmutableBag; <(wideStreamImport.(type))> /** * A factory which creates instances of type {@link ImmutableBag}. * This file was automatically generated from template file immutablePrimitiveBagFactory.stg. * * @since 4.0. */ public interface ImmutableBagFactory { /** * @since 6.0 */ ImmutableBag empty(); /** * Same as {@link #empty()}. */ ImmutableBag of(); /** * Same as {@link #empty()}. */ ImmutableBag with(); /** * Same as {@link #with()}. */ ImmutableBag of( one); ImmutableBag with( one); /** * Same as {@link #with([])}. */ ImmutableBag of(... items); ImmutableBag with(... items); /** * Same as {@link #withAll(Iterable)}. */ ImmutableBag ofAll(Iterable items); ImmutableBag withAll(Iterable items); /** * Same as {@link #withAll(Iterable)}. */ ImmutableBag ofAll(Iterable\<\> iterable); ImmutableBag withAll(Iterable\<\> iterable); <(streamMethods.(type))()> } >> streamMethods ::= [ "byte": "noMethods", "short": "noMethods", "char": "noMethods", "int": "allMethods", "long": "allMethods", "float": "noMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods() ::= << /** * @since 9.0 */ ImmutableBag ofAll(<(wideStream.(type))> items); /** * @since 9.0 */ ImmutableBag withAll(<(wideStream.(type))> items); >> noMethods() ::= "" wideStream ::= [ "int": "IntStream", "long": "LongStream", "double": "DoubleStream", default: "no matching wide type" ] wideStreamImport ::= [ "boolean": "", "byte": "", "short": "", "char": "", "int": "import java.util.stream.IntStream;", "long": "import java.util.stream.LongStream;", "float": "", "double": "import java.util.stream.DoubleStream;", default: "no matching wide type" ] mutablePrimitiveBagFactory.stg000066400000000000000000000044621407344533200413000ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/factory/bagimport "copyrightAndOthers.stg" targetPath() ::= "org/eclipse/collections/api/factory/bag/primitive" fileName(primitive) ::= "MutableBagFactory" class(primitive) ::= << >> body(type, name, wrapperName) ::= << package org.eclipse.collections.api.factory.bag.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.bag.primitive.MutableBag; <(wideStreamImport.(type))> /** * A factory which creates instances of type {@link MutableBag}. * This file was automatically generated from template file mutablePrimitiveBagFactory.stg. * * @since 6.0. */ public interface MutableBagFactory { MutableBag empty(); /** * Same as {@link #empty()}. */ MutableBag of(); /** * Same as {@link #empty()}. */ MutableBag with(); /** * Same as {@link #with([])}. */ MutableBag of(... items); MutableBag with(... items); /** * Same as {@link #withAll(Iterable)}. */ MutableBag ofAll(Iterable items); MutableBag withAll(Iterable items); /** * Same as {@link #withAll(Iterable)}. */ MutableBag ofAll(Iterable\<\> iterable); MutableBag withAll(Iterable\<\> iterable); <(streamMethods.(type))()> } >> streamMethods ::= [ "byte": "noMethods", "short": "noMethods", "char": "noMethods", "int": "allMethods", "long": "allMethods", "float": "noMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods() ::= << /** * @since 9.0 */ MutableBag ofAll(<(wideStream.(type))> items); /** * @since 9.0 */ MutableBag withAll(<(wideStream.(type))> items); >> noMethods() ::= "" wideStream ::= [ "int": "IntStream", "long": "LongStream", "double": "DoubleStream", default: "no matching wide type" ] wideStreamImport ::= [ "boolean": "", "byte": "", "short": "", "char": "", "int": "import java.util.stream.IntStream;", "long": "import java.util.stream.LongStream;", "float": "", "double": "import java.util.stream.DoubleStream;", default: "no matching wide type" ] list/000077500000000000000000000000001407344533200335115ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/factoryimmutablePrimitiveListFactory.stg000066400000000000000000000050211407344533200422620ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/factory/listimport "copyrightAndOthers.stg" targetPath() ::= "org/eclipse/collections/api/factory/list/primitive" fileName(primitive) ::= "ImmutableListFactory" class(primitive) ::= << >> body(type, name, wrapperName) ::= << package org.eclipse.collections.api.factory.list.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.list.primitive.ImmutableList; <(wideStreamImport.(type))> /** * A factory which creates instances of type {@link ImmutableList}. * This file was automatically generated from template file immutablePrimitiveListFactory.stg. * * @since 3.2. */ public interface ImmutableListFactory { /** * @since 6.0 */ ImmutableList empty(); /** * Same as {@link #empty()}. */ ImmutableList of(); /** * Same as {@link #empty()}. */ ImmutableList with(); /** * Same as {@link #with()}. */ ImmutableList of( one); ImmutableList with( one); /** * Same as {@link #with([])}. */ ImmutableList of(... items); ImmutableList with(... items); /** * Same as {@link #withAll(Iterable)}. */ ImmutableList ofAll(Iterable items); ImmutableList withAll(Iterable items); /** * Same as {@link #withAll(Iterable)}. */ ImmutableList ofAll(Iterable\<\> iterable); ImmutableList withAll(Iterable\<\> iterable); <(streamMethods.(type))()> } >> streamMethods ::= [ "byte": "noMethods", "short": "noMethods", "char": "noMethods", "int": "allMethods", "long": "allMethods", "float": "noMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods() ::= << /** * @since 9.0 */ ImmutableList ofAll(<(wideStream.(type))> items); /** * @since 9.0 */ ImmutableList withAll(<(wideStream.(type))> items); >> noMethods() ::= "" wideStream ::= [ "int": "IntStream", "long": "LongStream", "double": "DoubleStream", default: "no matching wide type" ] wideStreamImport ::= [ "boolean": "", "byte": "", "short": "", "char": "", "int": "import java.util.stream.IntStream;", "long": "import java.util.stream.LongStream;", "float": "", "double": "import java.util.stream.DoubleStream;", default: "no matching wide type" ] mutablePrimitiveListFactory.stg000066400000000000000000000062131407344533200417400ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/factory/listimport "copyrightAndOthers.stg" targetPath() ::= "org/eclipse/collections/api/factory/list/primitive" fileName(primitive) ::= "MutableListFactory" class(primitive) ::= << >> body(type, name, wrapperName) ::= << package org.eclipse.collections.api.factory.list.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.list.primitive.MutableList; <(wideStreamImport.(type))> /** * A factory which creates instances of type {@link MutableList}. * This file was automatically generated from template file mutablePrimitiveListFactory.stg. * * @since 6.0. */ public interface MutableListFactory { MutableList empty(); /** * Same as {@link #empty()}. */ MutableList of(); /** * Same as {@link #empty()}. */ MutableList with(); /** * Same as {@link #empty()}. but takes in an initial capacity * @since 10.3 */ default MutableList withInitialCapacity(int capacity) { throw new UnsupportedOperationException("Default method to ensure backwards compatibility"); } /** * Same as {@link #with([])}. */ MutableList of(... items); /** * Creates a new list using the passed {@code items} argument as the backing store. * \

* !!! WARNING: This method uses the passed in array, so can be very unsafe if the original * array is held onto anywhere else. !!! */ MutableList with(... items); /** * Creates a new list by first copying the array passed in. */ default MutableList wrapCopy(... array) { [] newArray = new [array.length]; System.arraycopy(array, 0, newArray, 0, array.length); return this.with(newArray); } /** * Same as {@link #withAll(Iterable)}. */ MutableList ofAll(Iterable items); MutableList withAll(Iterable items); /** * Same as {@link #withAll(Iterable)}. */ MutableList ofAll(Iterable\<\> iterable); MutableList withAll(Iterable\<\> iterable); <(streamMethods.(type))()> } >> streamMethods ::= [ "byte": "noMethods", "short": "noMethods", "char": "noMethods", "int": "allMethods", "long": "allMethods", "float": "noMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods() ::= << /** * @since 9.0 */ MutableList ofAll(<(wideStream.(type))> items); /** * @since 9.0 */ MutableList withAll(<(wideStream.(type))> items); >> noMethods() ::= "" wideStream ::= [ "int": "IntStream", "long": "LongStream", "double": "DoubleStream", default: "no matching wide type" ] wideStreamImport ::= [ "boolean": "", "byte": "", "short": "", "char": "", "int": "import java.util.stream.IntStream;", "long": "import java.util.stream.LongStream;", "float": "", "double": "import java.util.stream.DoubleStream;", default: "no matching wide type" ] eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/factory/map/000077500000000000000000000000001407344533200333725ustar00rootroot00000000000000immutableObjectPrimitiveMapFactory.stg000066400000000000000000000035571407344533200430310ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/factory/mapimport "copyright.stg" targetPath() ::= "org/eclipse/collections/api/factory/map/primitive" fileName(primitive) ::= "ImmutableObjectMapFactory" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.factory.map.primitive; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.primitive.Function; import org.eclipse.collections.api.map.primitive.ImmutableObjectMap; import org.eclipse.collections.api.map.primitive.ObjectMap; /** * A factory which creates instances of type {@link ImmutableObjectMap}. * This file was automatically generated from template file immutableObjectPrimitiveMapFactory.stg. * * @since 4.0. */ public interface ImmutableObjectMapFactory { /** * @since 6.0 */ \ ImmutableObjectMap\ empty(); /** * Same as {@link #empty()}. */ \ ImmutableObjectMap\ of(); /** * Same as {@link #empty()}. */ \ ImmutableObjectMap\ with(); /** * Same as {@link #with(Object, )}. */ \ ImmutableObjectMap\ of(K key, value); \ ImmutableObjectMap\ with(K key, value); /** * Same as {@link #withAll(ObjectMap)}. */ \ ImmutableObjectMap\ ofAll(ObjectMap\ map); \ ImmutableObjectMap\ withAll(ObjectMap\ map); /** * Creates an {@code ImmutableObjectMap} from an {@code Iterable\} by applying {@code keyFunction} and {@code valueFunction}. * * @since 10.0 */ \ ImmutableObjectMap\ from(Iterable\ iterable, Function\ keyFunction, Function\ valueFunction); } >> immutablePrimitiveObjectMapFactory.stg000066400000000000000000000036111407344533200430200ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/factory/mapimport "copyright.stg" targetPath() ::= "org/eclipse/collections/api/factory/map/primitive" fileName(primitive) ::= "ImmutableObjectMapFactory" skipBoolean() ::= "true" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.factory.map.primitive; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.primitive.Function; import org.eclipse.collections.api.map.primitive.ImmutableObjectMap; import org.eclipse.collections.api.map.primitive.ObjectMap; /** * A factory which creates instances of type {@link ImmutableObjectMap}. * This file was automatically generated from template file immutablePrimitiveObjectMapFactory.stg. * * @since 4.0. */ public interface ImmutableObjectMapFactory { /** * @since 6.0 */ \ ImmutableObjectMap\ empty(); /** * Same as {@link #empty()}. */ \ ImmutableObjectMap\ of(); /** * Same as {@link #empty()}. */ \ ImmutableObjectMap\ with(); /** * Same as {@link #with(, Object)}. */ \ ImmutableObjectMap\ of( key, V value); \ ImmutableObjectMap\ with( key, V value); /** * Same as {@link #withAll(ObjectMap)}. */ \ ImmutableObjectMap\ ofAll(ObjectMap\ map); \ ImmutableObjectMap\ withAll(ObjectMap\ map); /** * Creates an {@code ImmutableObjectMap} from an {@code Iterable\} by applying {@code keyFunction} and {@code valueFunction}. * * @since 10.0 */ \ ImmutableObjectMap\ from(Iterable\ iterable, Function\ keyFunction, Function\ valueFunction); } >> immutablePrimitivePrimitiveMapFactory.stg000066400000000000000000000040511407344533200435610ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/factory/mapimport "copyright.stg" hasTwoPrimitives() ::= "true" skipBooleanKeys() ::= "true" targetPath() ::= "org/eclipse/collections/api/factory/map/primitive" fileName(primitive1, primitive2, sameTwoPrimitives) ::= "ImmutableMapFactory" class(primitive1, primitive2, sameTwoPrimitives) ::= << >> body(type1, type2, name1, name2) ::= << package org.eclipse.collections.api.factory.map.primitive; import org.eclipse.collections.api.block.function.primitive.Function; import org.eclipse.collections.api.block.function.primitive.Function; import org.eclipse.collections.api.map.primitive.Map; import org.eclipse.collections.api.map.primitive.ImmutableMap; /** * A factory which creates instances of type {@link ImmutableMap}. * This file was automatically generated from template file immutablePrimitivePrimitiveMapFactory.stg. * * @since 4.0. */ public interface ImmutableMapFactory { /** * @since 6.0 */ ImmutableMap empty(); /** * Same as {@link #empty()}. */ ImmutableMap of(); /** * Same as {@link #empty()}. */ ImmutableMap with(); /** * Same as {@link #with(, )}. */ ImmutableMap of( key, value); ImmutableMap with( key, value); /** * Same as {@link #withAll(Map)}. */ ImmutableMap ofAll(Map map); ImmutableMap withAll(Map map); /** * Creates an {@code ImmutableMap} from an {@code Iterable\} by applying {@code keyFunction} and {@code valueFunction}. * * @since 10.0 */ \ ImmutableMap from(Iterable\ iterable, Function\ keyFunction, Function\ valueFunction); } >> mutableObjectPrimitiveMapFactory.stg000066400000000000000000000036511407344533200424760ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/factory/mapimport "copyright.stg" targetPath() ::= "org/eclipse/collections/api/factory/map/primitive" fileName(primitive) ::= "MutableObjectMapFactory" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.factory.map.primitive; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.primitive.Function; import org.eclipse.collections.api.map.primitive.MutableObjectMap; import org.eclipse.collections.api.map.primitive.ObjectMap; /** * A factory which creates instances of type {@link MutableObjectMap}. * This file was automatically generated from template file mutableObjectPrimitiveMapFactory.stg. * * @since 6.0. */ public interface MutableObjectMapFactory { \ MutableObjectMap\ empty(); /** * Same as {@link #empty()}. */ \ MutableObjectMap\ of(); /** * Same as {@link #empty()}. */ \ MutableObjectMap\ with(); /** * Same as {@link #empty()}. but takes in an initial capacity */ \ MutableObjectMap\ ofInitialCapacity(int capacity); /** * Same as {@link #empty()}. but takes in an initial capacity */ \ MutableObjectMap\ withInitialCapacity(int capacity); /** * Same as {@link #withAll(ObjectMap)}. */ \ MutableObjectMap\ ofAll(ObjectMap\ map); \ MutableObjectMap\ withAll(ObjectMap\ map); /** * Creates an {@code MutableObjectMap} from an {@code Iterable\} by applying {@code keyFunction} and {@code valueFunction}. * * @since 10.0 */ \ MutableObjectMap\ from(Iterable\ iterable, Function\ keyFunction, Function\ valueFunction); } >> mutablePrimitiveObjectMapFactory.stg000066400000000000000000000037031407344533200424740ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/factory/mapimport "copyright.stg" targetPath() ::= "org/eclipse/collections/api/factory/map/primitive" fileName(primitive) ::= "MutableObjectMapFactory" skipBoolean() ::= "true" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.factory.map.primitive; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.primitive.Function; import org.eclipse.collections.api.map.primitive.MutableObjectMap; import org.eclipse.collections.api.map.primitive.ObjectMap; /** * A factory which creates instances of type {@link MutableObjectMap}. * This file was automatically generated from template file mutablePrimitiveObjectMapFactory.stg. * * @since 6.0. */ public interface MutableObjectMapFactory { \ MutableObjectMap\ empty(); /** * Same as {@link #empty()}. */ \ MutableObjectMap\ of(); /** * Same as {@link #empty()}. */ \ MutableObjectMap\ with(); /** * Same as {@link #empty()}. but takes in an initial capacity */ \ MutableObjectMap\ ofInitialCapacity(int capacity); /** * Same as {@link #empty()}. but takes in an initial capacity */ \ MutableObjectMap\ withInitialCapacity(int capacity); /** * Same as {@link #withAll(ObjectMap)}. */ \ MutableObjectMap\ ofAll(ObjectMap\ map); \ MutableObjectMap\ withAll(ObjectMap\ map); /** * Creates an {@code MutableObjectMap} from an {@code Iterable\} by applying {@code keyFunction} and {@code valueFunction}. * * @since 10.0 */ \ MutableObjectMap\ from(Iterable\ iterable, Function\ keyFunction, Function\ valueFunction); } >> mutablePrimitivePrimitiveMapFactory.stg000066400000000000000000000041211407344533200432310ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/factory/mapimport "copyright.stg" hasTwoPrimitives() ::= "true" skipBooleanKeys() ::= "true" targetPath() ::= "org/eclipse/collections/api/factory/map/primitive" fileName(primitive1, primitive2, sameTwoPrimitives) ::= "MutableMapFactory" class(primitive1, primitive2, sameTwoPrimitives) ::= << >> body(type1, type2, name1, name2) ::= << package org.eclipse.collections.api.factory.map.primitive; import org.eclipse.collections.api.block.function.primitive.Function; import org.eclipse.collections.api.block.function.primitive.Function; import org.eclipse.collections.api.map.primitive.MutableMap; import org.eclipse.collections.api.map.primitive.Map; /** * A factory which creates instances of type {@link MutableMap}. * This file was automatically generated from template file mutablePrimitivePrimitiveMapFactory.stg. * * @since 6.0. */ public interface MutableMapFactory { MutableMap empty(); /** * Same as {@link #empty()}. */ MutableMap of(); /** * Same as {@link #empty()}. */ MutableMap with(); /** * Same as {@link #empty()}. but takes in an initial capacity */ MutableMap ofInitialCapacity(int capacity); /** * Same as {@link #empty()}. but takes in an initial capacity */ MutableMap withInitialCapacity(int capacity); /** * Same as {@link #withAll(Map)}. */ MutableMap ofAll(Map map); MutableMap withAll(Map map); /** * Creates an {@code MutableMap} from an {@code Iterable\} by applying {@code keyFunction} and {@code valueFunction}. * * @since 10.0 */ \ MutableMap from(Iterable\ iterable, Function\ keyFunction, Function\ valueFunction); } >> eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/factory/set/000077500000000000000000000000001407344533200334105ustar00rootroot00000000000000immutablePrimitiveSetFactory.stg000066400000000000000000000047741407344533200417400ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/factory/setimport "copyrightAndOthers.stg" targetPath() ::= "org/eclipse/collections/api/factory/set/primitive" fileName(primitive) ::= "ImmutableSetFactory" class(primitive) ::= << >> body(type, name, wrapperName) ::= << package org.eclipse.collections.api.factory.set.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.set.primitive.ImmutableSet; <(wideStreamImport.(type))> /** * A factory which creates instances of type {@link ImmutableSet}. * This file was automatically generated from template file immutablePrimitiveSetFactory.stg. * * @since 4.0. */ public interface ImmutableSetFactory { /** * @since 6.0 */ ImmutableSet empty(); /** * Same as {@link #empty()}. */ ImmutableSet of(); /** * Same as {@link #empty()}. */ ImmutableSet with(); /** * Same as {@link #with()}. */ ImmutableSet of( one); ImmutableSet with( one); /** * Same as {@link #with([])}. */ ImmutableSet of(... items); ImmutableSet with(... items); /** * Same as {@link #withAll(Iterable)}. */ ImmutableSet ofAll(Iterable items); ImmutableSet withAll(Iterable items); /** * Same as {@link #withAll(Iterable)}. */ ImmutableSet ofAll(Iterable\<\> iterable); ImmutableSet withAll(Iterable\<\> iterable); <(streamMethods.(type))()> } >> streamMethods ::= [ "byte": "noMethods", "short": "noMethods", "char": "noMethods", "int": "allMethods", "long": "allMethods", "float": "noMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods() ::= << /** * @since 9.0 */ ImmutableSet ofAll(<(wideStream.(type))> items); /** * @since 9.0 */ ImmutableSet withAll(<(wideStream.(type))> items); >> noMethods() ::= "" wideStream ::= [ "int": "IntStream", "long": "LongStream", "double": "DoubleStream", default: "no matching wide type" ] wideStreamImport ::= [ "boolean": "", "byte": "", "short": "", "char": "", "int": "import java.util.stream.IntStream;", "long": "import java.util.stream.LongStream;", "float": "", "double": "import java.util.stream.DoubleStream;", default: "no matching wide type" ] mutablePrimitiveSetFactory.stg000066400000000000000000000055701407344533200414050ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/factory/setimport "copyrightAndOthers.stg" targetPath() ::= "org/eclipse/collections/api/factory/set/primitive" fileName(primitive) ::= "MutableSetFactory" class(primitive) ::= << >> body(type, name, wrapperName) ::= << package org.eclipse.collections.api.factory.set.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.set.primitive.MutableSet; <(wideStreamImport.(type))> /** * A factory which creates instances of type {@link MutableSet}. * This file was automatically generated from template file mutablePrimitiveSetFactory.stg. * * @since 6.0. */ public interface MutableSetFactory { MutableSet empty(); /** * Same as {@link #empty()}. */ MutableSet of(); /** * Same as {@link #empty()}. */ MutableSet with(); <(capacityMethods.(type))()> /** * Same as {@link #with([])}. */ MutableSet of(... items); MutableSet with(... items); /** * Same as {@link #withAll(Iterable)}. */ MutableSet ofAll(Iterable items); MutableSet withAll(Iterable items); /** * Same as {@link #withAll(Iterable)}. */ MutableSet ofAll(Iterable\<\> iterable); MutableSet withAll(Iterable\<\> iterable); <(streamMethods.(type))()> } >> capacityMethods ::= [ "byte": "noMethods", "short": "capacityMethods", "char": "capacityMethods", "int": "capacityMethods", "long": "capacityMethods", "float": "capacityMethods", "double": "capacityMethods", "boolean": "noMethods" ] capacityMethods() ::= << /** * Same as {@link #empty()}. but takes in an initial capacity * @since 10.3 */ default MutableSet withInitialCapacity(int capacity) { throw new UnsupportedOperationException("Default method to ensure backwards compatibility"); } >> streamMethods ::= [ "byte": "noMethods", "short": "noMethods", "char": "noMethods", "int": "allMethods", "long": "allMethods", "float": "noMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods() ::= << /** * @since 9.0 */ MutableSet ofAll(<(wideStream.(type))> items); /** * @since 9.0 */ MutableSet withAll(<(wideStream.(type))> items); >> noMethods() ::= "" wideStream ::= [ "int": "IntStream", "long": "LongStream", "double": "DoubleStream", default: "no matching wide type" ] wideStreamImport ::= [ "boolean": "", "byte": "", "short": "", "char": "", "int": "import java.util.stream.IntStream;", "long": "import java.util.stream.LongStream;", "float": "", "double": "import java.util.stream.DoubleStream;", default: "no matching wide type" ] stack/000077500000000000000000000000001407344533200336435ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/factoryimmutablePrimitiveStackFactory.stg000066400000000000000000000053571407344533200425620ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/factory/stackimport "copyrightAndOthers.stg" targetPath() ::= "org/eclipse/collections/api/factory/stack/primitive" fileName(primitive) ::= "ImmutableStackFactory" class(primitive) ::= << >> body(type, name, wrapperName) ::= << package org.eclipse.collections.api.factory.stack.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.stack.primitive.ImmutableStack; <(wideStreamImport.(type))> /** * A factory which creates instances of type {@link ImmutableStack}. * This file was automatically generated from template file immutablePrimitiveStackFactory.stg. * * @since 4.0. */ public interface ImmutableStackFactory { /** * @since 6.0 */ ImmutableStack empty(); /** * Same as {@link #empty()}. */ ImmutableStack of(); /** * Same as {@link #empty()}. */ ImmutableStack with(); /** * Same as {@link #with()}. */ ImmutableStack of( one); ImmutableStack with( one); /** * Same as {@link #with([])}. */ ImmutableStack of(... items); ImmutableStack with(... items); /** * Same as {@link #withAll(Iterable)}. */ ImmutableStack ofAll(Iterable items); ImmutableStack withAll(Iterable items); /** * Same as {@link #withAll(Iterable)}. */ ImmutableStack ofAll(Iterable\<\> iterable); ImmutableStack withAll(Iterable\<\> iterable); /** * Same as {@link #withAllReversed(Iterable)}. */ ImmutableStack ofAllReversed(Iterable items); ImmutableStack withAllReversed(Iterable items); <(streamMethods.(type))()> } >> streamMethods ::= [ "byte": "noMethods", "short": "noMethods", "char": "noMethods", "int": "allMethods", "long": "allMethods", "float": "noMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods() ::= << /** * @since 9.0 */ ImmutableStack ofAll(<(wideStream.(type))> items); /** * @since 9.0 */ ImmutableStack withAll(<(wideStream.(type))> items); >> noMethods() ::= "" wideStream ::= [ "int": "IntStream", "long": "LongStream", "double": "DoubleStream", default: "no matching wide type" ] wideStreamImport ::= [ "boolean": "", "byte": "", "short": "", "char": "", "int": "import java.util.stream.IntStream;", "long": "import java.util.stream.LongStream;", "float": "", "double": "import java.util.stream.DoubleStream;", default: "no matching wide type" ] mutablePrimitiveStackFactory.stg000066400000000000000000000050351407344533200422250ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/factory/stackimport "copyrightAndOthers.stg" targetPath() ::= "org/eclipse/collections/api/factory/stack/primitive" fileName(primitive) ::= "MutableStackFactory" class(primitive) ::= << >> body(type, name, wrapperName) ::= << package org.eclipse.collections.api.factory.stack.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.stack.primitive.MutableStack; <(wideStreamImport.(type))> /** * A factory which creates instances of type {@link MutableStack}. * This file was automatically generated from template file mutablePrimitiveStackFactory.stg. * * @since 6.0. */ public interface MutableStackFactory { MutableStack empty(); /** * Same as {@link #empty()}. */ MutableStack of(); /** * Same as {@link #empty()}. */ MutableStack with(); /** * Same as {@link #with([])}. */ MutableStack of(... items); MutableStack with(... items); /** * Same as {@link #withAll(Iterable)}. */ MutableStack ofAll(Iterable items); MutableStack withAll(Iterable items); /** * Same as {@link #withAll(Iterable)}. */ MutableStack ofAll(Iterable\<\> iterable); MutableStack withAll(Iterable\<\> iterable); /** * Same as {@link #withAllReversed(Iterable)}. */ MutableStack ofAllReversed(Iterable items); MutableStack withAllReversed(Iterable items); <(streamMethods.(type))()> } >> streamMethods ::= [ "byte": "noMethods", "short": "noMethods", "char": "noMethods", "int": "allMethods", "long": "allMethods", "float": "noMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods() ::= << /** * @since 9.0 */ MutableStack ofAll(<(wideStream.(type))> items); /** * @since 9.0 */ MutableStack withAll(<(wideStream.(type))> items); >> noMethods() ::= "" wideStream ::= [ "int": "IntStream", "long": "LongStream", "double": "DoubleStream", default: "no matching wide type" ] wideStreamImport ::= [ "boolean": "", "byte": "", "short": "", "char": "", "int": "import java.util.stream.IntStream;", "long": "import java.util.stream.LongStream;", "float": "", "double": "import java.util.stream.DoubleStream;", default: "no matching wide type" ] eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/iterator/000077500000000000000000000000001407344533200327775ustar00rootroot00000000000000mutablePrimitiveIterator.stg000066400000000000000000000007621407344533200405000ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/iteratorimport "copyright.stg" targetPath() ::= "org/eclipse/collections/api/iterator" fileName(primitive) ::= "MutableIterator" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.iterator; /** * This file was automatically generated from template file mutablePrimitiveIterator.stg. * * @since 6.0. */ public interface MutableIterator extends Iterator { void remove(); } >> primitiveIterator.stg000066400000000000000000000010261407344533200371600ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/iteratorimport "copyright.stg" targetPath() ::= "org/eclipse/collections/api/iterator" fileName(primitive) ::= "Iterator" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.iterator; /** * Iterator is an iterator over a Iterable. * This file was automatically generated from template file primitiveIterator.stg. * * @since 3.0. */ public interface Iterator { next(); boolean hasNext(); } >> lazyPrimitiveIterable.stg000066400000000000000000000046301407344533200361310ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/apiimport "copyrightAndOthers.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/api" fileName(primitive) ::= "LazyIterable" class(primitive) ::= << >> collectPrimitive(fromName, fromType, toName, toType) ::= << /** * @since 7.0 */ LazyIterable collect(ToFunction function); >> body(type, name) ::= << package org.eclipse.collections.api; import org.eclipse.collections.api.block.function.primitive.ToBooleanFunction; import org.eclipse.collections.api.block.function.primitive.ToByteFunction; import org.eclipse.collections.api.block.function.primitive.ToCharFunction; import org.eclipse.collections.api.block.function.primitive.ToDoubleFunction; import org.eclipse.collections.api.block.function.primitive.ToFloatFunction; import org.eclipse.collections.api.block.function.primitive.ToIntFunction; import org.eclipse.collections.api.block.function.primitive.ToLongFunction; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ToShortFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; /** * This file was automatically generated from template file lazyPrimitiveIterable.stg. */ public interface LazyIterable extends Iterable { /** * @since 9.0. */ @Override LazyIterable tap(Procedure procedure); @Override LazyIterable select(Predicate predicate); @Override LazyIterable reject(Predicate predicate); @Override \ LazyIterable\ collect(ToObjectFunction\ function); /** * @since 9.0 */ \ LazyIterable\ flatCollect(ToObjectFunction\\> function); } >> eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/list/000077500000000000000000000000001407344533200321215ustar00rootroot00000000000000immutablePrimitiveList.stg000066400000000000000000000062451407344533200372740ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/listimport "copyrightAndOthers.stg" import "primitiveAPI.stg" targetPath() ::= "org/eclipse/collections/api/list/primitive" fileName(primitive) ::= "ImmutableList" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.list.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.block.function.primitive.IntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.collection.primitive.ImmutableCollection; import org.eclipse.collections.api.list.ImmutableList; import org.eclipse.collections.api.tuple.primitive.Pair; import org.eclipse.collections.api.tuple.primitive.ObjectPair; /** * This file was automatically generated from template file immutablePrimitiveList.stg. * * @since 3.0. */ public interface ImmutableList extends ImmutableCollection, List { /** * @since 9.0. */ @Override default ImmutableList tap(Procedure procedure) { this.forEach(procedure); return this; } @Override \ ImmutableList\ collect(ToObjectFunction\ function); /** * Returns a new ImmutableList using results obtained by applying the specified function to each element * and its corresponding index. * * @since 9.1. */ @Override default \ ImmutableList\ collectWithIndex(IntToObjectFunction\ function) { int[] index = {0}; return this.collect(each -> function.value(each, index[0]++)); } @Override ImmutableList toReversed(); /** * @since 6.0. */ @Override ImmutableList distinct(); @Override ImmutableList subList(int fromIndex, int toIndex); /** * Returns an {@code ImmutableList} formed from this {@code ImmutableList} and another {@code List} by * combining corresponding elements in pairs. If one of the two {@code List}s is longer than the other, its * remaining elements are ignored. * * @since 9.1. */ default ImmutableList\<Pair> zip(Iterable iterable) { throw new UnsupportedOperationException("Default method to prevent breaking backwards compatibility"); } /** * Returns an {@code ImmutableList} formed from this {@code ImmutableList} and a {@code ListIterable} by * combining corresponding elements in pairs. If one of the two Lists is longer than the other, its * remaining elements are ignored. * * @since 9.1. */ default \ ImmutableList\<ObjectPair\> zip(Iterable\ iterable) { throw new UnsupportedOperationException("Default method to prevent breaking backwards compatibility"); } } >> mutablePrimitiveList.stg000066400000000000000000000152021407344533200367370ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/listimport "copyrightAndOthers.stg" import "primitiveAPI.stg" targetPath() ::= "org/eclipse/collections/api/list/primitive" fileName(primitive) ::= "MutableList" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.list.primitive; <(auxiliaryImports.(type))(type)> import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.block.function.primitive.IntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.collection.primitive.MutableCollection; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.tuple.primitive.Pair; import org.eclipse.collections.api.tuple.primitive.ObjectPair; /** * This file was automatically generated from template file mutablePrimitiveList.stg. * * @since 3.0. */ public interface MutableList extends MutableCollection, List { void addAtIndex(int index, element); boolean addAllAtIndex(int index, ... source); boolean addAllAtIndex(int index, Iterable source); removeAtIndex(int index); set(int index, element); default void swap(int index1, int index2) { value = this.get(index1); this.set(index1, this.get(index2)); this.set(index2, value); } /** * @since 9.0. */ @Override default MutableList tap(Procedure procedure) { this.forEach(procedure); return this; } \ MutableList\ collect(ToObjectFunction\ function); /** * Returns a new MutableList using results obtained by applying the specified function to each element * and its corresponding index. * * @since 9.1. */ @Override default \ MutableList\ collectWithIndex(IntToObjectFunction\ function) { int[] index = {0}; return this.collect(each -> function.value(each, index[0]++)); } MutableList reverseThis(); @Override MutableList toReversed(); /** * @since 6.0. */ @Override MutableList distinct(); <(arithmeticMethods.(type))(type)> @Override MutableList asUnmodifiable(); @Override MutableList asSynchronized(); /** * Returns an immutable copy of this list. */ @Override ImmutableList toImmutable(); @Override MutableList subList(int fromIndex, int toIndex); /** * Returns a {@code MutableList} formed from this {@code MutableList} and another {@code List} by * combining corresponding elements in pairs. If one of the two {@code List}s is longer than the other, its * remaining elements are ignored. * * @since 9.1. */ default MutableList\<Pair> zip(Iterable iterable) { throw new UnsupportedOperationException("Default method to prevent breaking backwards compatibility"); } /** * Returns a {@code MutableList} formed from this {@code MutableList} and a {@code ListIterable} by * combining corresponding elements in pairs. If one of the two Lists is longer than the other, its * remaining elements are ignored. * * @since 9.1. */ default \ MutableList\<ObjectPair\> zip(Iterable\ list) { throw new UnsupportedOperationException("Default method to prevent breaking backwards compatibility"); } /** * Creates a new empty mutable version of the same List type. * * @since 9.2. */ default MutableList newEmpty() { throw new UnsupportedOperationException("Implement in concrete classes."); } } >> arithmeticMethods ::= [ "byte": "allMethods", "short": "allMethods", "char": "allMethods", "int": "allMethods", "long": "allMethods", "float": "allMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods(type) ::= << /** * Sorts this list mutating its contents and returns the same mutable list (this). */ MutableList sortThis(); /** * Sorts the internal data structure of this list and returns the list itself as a convenience. */ default MutableList sortThis(Comparator comparator) { throw new UnsupportedOperationException("sortThis(Comparator comparator) is not supported on " + this.getClass()); } /** * Sorts the internal data structure of this list based on the natural order of the key returned by {@code * function}. */ default \ MutableList sortThisBy(ToObjectFunction\ function) { return sortThisBy(function, (Comparator\) Comparator.naturalOrder()); } /** * Sorts the internal data structure of this list based on the key returned by {@code * function} using the provided {@code comparator}. */ default \ MutableList sortThisBy(ToObjectFunction\ function, Comparator\ comparator) { return this.sortThis((i1, i2) -> comparator.compare(function.valueOf(i1), function.valueOf(i2))); } /** * Randomly permutes this list mutating its contents and returns the same list (this). * * Uses {@code java.util.Random} as the source of randomness. */ default MutableList shuffleThis() { return this.shuffleThis(new Random()); } /** * Randomly permutes this list mutating its contents and returns the same list (this). * * Implements the Fisher-Yates shuffle algorithm using the provided source of randomness. */ default MutableList shuffleThis(Random rnd) { for (int j = this.size() - 1; j > 0; j--) { int k = rnd.nextInt(j + 1); selected = this.get(j); this.set(j, this.get(k)); this.set(k, selected); } return this; } >> noMethods(type) ::= "" auxiliaryImports ::= [ "byte": "allAuxiliaryImports", "short": "allAuxiliaryImports", "char": "allAuxiliaryImports", "int": "allAuxiliaryImports", "long": "allAuxiliaryImports", "float": "allAuxiliaryImports", "double": "allAuxiliaryImports", "boolean": "noAuxiliaryImports" ] allAuxiliaryImports(type) ::= << import java.util.Comparator; import java.util.Random; import org.eclipse.collections.api.block.comparator.primitive.Comparator; >> noAuxiliaryImports(type) ::= "" primitiveList.stg000066400000000000000000000112331407344533200354250ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/listimport "copyrightAndOthers.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveAPI.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/api/list/primitive" fileName(primitive) ::= "List" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.list.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.block.function.primitive.IntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.list.ListIterable; import org.eclipse.collections.api.ordered.primitive.ReversibleIterable; import org.eclipse.collections.api.tuple.primitive.Pair; import org.eclipse.collections.api.tuple.primitive.ObjectPair; import java.util.Spliterator; import java.util.stream.StreamSupport; import java.util.stream.Stream; /** * This file was automatically generated from template file primitiveList.stg. * * @since 3.0. */ public interface List extends ReversibleIterable { get(int index); <(arithmeticMethods.(type))(name, type)> int lastIndexOf( value); /** * @since 9.0. */ @Override default List tap(Procedure procedure) { this.forEach(procedure); return this; } @Override \ ListIterable\ collect(ToObjectFunction\ function); /** * Returns a new ListIterable using results obtained by applying the specified function to each element * and its corresponding index. * * @since 9.1. */ @Override default \ ListIterable\ collectWithIndex(IntToObjectFunction\ function) { int[] index = {0}; return this.collect(each -> function.value(each, index[0]++)); } /** * Follows the same general contract as {@link java.util.List#equals(Object)}. */ @Override boolean equals(Object o); /** * Follows the same general contract as {@link java.util.List#hashCode()}. */ @Override int hashCode(); /** * Returns an immutable copy of this list. If the list is immutable, it returns itself. */ ImmutableList toImmutable(); /** * @since 6.0. */ @Override List distinct(); /** * @since 5.0. */ @Override List toReversed(); /** * @see java.util.List#subList(int fromIndex, int toIndex) * @since 5.0. */ List subList(int fromIndex, int toIndex); /** * Returns a {@code ListIterable} formed from this {@code List} and another {@code List} by * combining corresponding elements in pairs. If one of the two {@code List}s is longer than the other, its * remaining elements are ignored. * * @since 9.1. */ default ListIterable\<Pair> zip(Iterable iterable) { throw new UnsupportedOperationException("Default method to prevent breaking backwards compatibility"); } /** * Returns a {@code ListIterable} formed from this {@code List} and a {@code ListIterable} by * combining corresponding elements in pairs. If one of the two Lists is longer than the other, its * remaining elements are ignored. * * @since 9.1. */ default \ ListIterable\<ObjectPair\> zip(Iterable\ iterable) { throw new UnsupportedOperationException("Default method to prevent breaking backwards compatibility"); } /** * @since 10.0 */ Spliterator.Of spliterator(); /** * @since 10.0 */ default Stream primitiveStream() { return StreamSupport.Stream(this.spliterator(), false); } /** * @since 10.0 */ default Stream primitiveParallelStream() { return StreamSupport.Stream(this.spliterator(), true); } } >> arithmeticMethods ::= [ "byte": "allMethods", "short": "allMethods", "char": "allMethods", "int": "allMethods", "long": "allMethods", "float": "allMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods(name, type) ::=<< dotProduct(List list); int binarySearch( value); >> noMethods(name, type) ::= "" eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/map/000077500000000000000000000000001407344533200317235ustar00rootroot00000000000000immutableObjectPrimitiveMap.stg000066400000000000000000000064141407344533200400250ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/mapimport "copyrightAndOthers.stg" targetPath() ::= "org/eclipse/collections/api/map/primitive" fileName(primitive) ::= "ImmutableObjectMap" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.map.primitive; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.ObjectPredicate; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.collection.ImmutableCollection; import org.eclipse.collections.api.collection.primitive.ImmutableCollection; /** * This file was automatically generated from template file immutableObjectPrimitiveMap.stg. * * @since 3.0. */ public interface ImmutableObjectMap\ extends ObjectMap\ { @Override ImmutableObjectMap\ select(ObjectPredicate\ predicate); @Override ImmutableObjectMap\ reject(ObjectPredicate\ predicate); @Override ImmutableCollection select(Predicate predicate); @Override ImmutableCollection reject(Predicate predicate); /** * @since 9.0. */ @Override default ImmutableObjectMap\ tap(Procedure procedure) { this.forEach(procedure); return this; } @Override \ ImmutableCollection\ collect(ToObjectFunction\ function); /** * Copy this map, associate the value with the key (replacing the value if one * already exists for {@code key}), and return the copy as new immutable map. * A copy is always made even if {@code key} is already associated with {@code value}. * @param key the key to add * @param value the value to associate with the key in the copy * @return an immutable copy of this map with {@code value} associated with {@code key} */ ImmutableObjectMap\ newWithKeyValue(K key, value); /** * Copy this map, remove any associated value with the key (if one exists), and * return the copy as a new immutable map. * @param key the key to remove * @return an immutable copy of this map with {@code key} removed */ ImmutableObjectMap\ newWithoutKey(K key); /** * Copy this map, remove any associated values with the specified keys (if any exist), * and return the copy as a new immutable map. * @param keys the keys to remove * @return an immutable copy of this map with all keys in {@code keys} removed */ ImmutableObjectMap\ newWithoutAllKeys(Iterable\ keys); <(flipUniqueValues.(name))(name)> } >> flipUniqueValues ::= [ "Byte": "flipUniqueValues", "Short": "flipUniqueValues", "Char": "flipUniqueValues", "Int": "flipUniqueValues", "Long": "flipUniqueValues", "Float": "flipUniqueValues", "Double": "flipUniqueValues", "Boolean": "noMethods" ] noMethods(type) ::= "" flipUniqueValues(name) ::= << @Override ImmutableObjectMap\ flipUniqueValues(); >> immutablePrimitiveObjectMap.stg000066400000000000000000000044231407344533200400230ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/mapimport "copyright.stg" skipBoolean() ::= "true" targetPath() ::= "org/eclipse/collections/api/map/primitive" fileName(primitive) ::= "ImmutableObjectMap" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.map.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.predicate.primitive.ObjectPredicate; /** * This file was automatically generated from template file immutablePrimitiveObjectMap.stg. * * @since 3.0. */ public interface ImmutableObjectMap\ extends ObjectMap\, ImmutablePrimitiveObjectMap\ { @Override ImmutableObjectMap\ tap(Procedure\ procedure); @Override ImmutableObjectMap\ select(ObjectPredicate\ predicate); @Override ImmutableObjectMap\ reject(ObjectPredicate\ predicate); /** * Copy this map, associate the value with the key (replacing the value if one * already exists for {@code key}), and return the copy as new immutable map. * A copy is always made even if {@code key} is already associated with {@code value}. * @param key the key to add * @param value the value to associate with the key in the copy * @return an immutable copy of this map with {@code value} associated with {@code key} */ ImmutableObjectMap\ newWithKeyValue( key, V value); /** * Copy this map, remove any associated value with the key (if one exists), and * return the copy as a new immutable map. * @param key the key to remove * @return an immutable copy of this map with {@code key} removed */ ImmutableObjectMap\ newWithoutKey( key); /** * Copy this map, remove any associated values with the specified keys (if any exist), * and return the copy as a new immutable map. * @param keys the keys to remove * @return an immutable copy of this map with all keys in {@code keys} removed */ ImmutableObjectMap\ newWithoutAllKeys(Iterable keys); @Override ImmutableObjectMap\ flipUniqueValues(); } >> immutablePrimitivePrimitiveMap.stg000066400000000000000000000062711407344533200405700ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/mapimport "copyright.stg" skipBooleanKeys() ::= "true" hasTwoPrimitives() ::= "true" targetPath() ::= "org/eclipse/collections/api/map/primitive" fileName(primitive1, primitive2, sameTwoPrimitives) ::= "ImmutableMap" class(primitive1, primitive2, sameTwoPrimitives) ::= << >> body(type1, type2, name1, name2) ::= << package org.eclipse.collections.api.map.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.bag.ImmutableBag; import org.eclipse.collections.api.bag.primitive.ImmutableBag; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.predicate.primitive.Predicate; /** * This file was automatically generated from template file immutablePrimitivePrimitiveMap.stg. * * @since 3.0. */ public interface ImmutableMap extends Map { @Override ImmutableMap select(Predicate predicate); @Override ImmutableMap reject(Predicate predicate); @Override ImmutableBag select(Predicate predicate); @Override ImmutableBag reject(Predicate predicate); @Override \ ImmutableBag\ collect(ToObjectFunction\ function); /** * Copy this map, associate the value with the key (replacing the value if one * already exists for {@code key}), and return the copy as new immutable map. * A copy is always made even if {@code key} is already associated with {@code value}. * @param key the key to add * @param value the value to associate with the key in the copy * @return an immutable copy of this map with {@code value} associated with {@code key} */ ImmutableMap newWithKeyValue( key, value); /** * Copy this map, remove any associated value with the key (if one exists), and * return the copy as a new immutable map. * @param key the key to remove * @return an immutable copy of this map with {@code key} removed */ ImmutableMap newWithoutKey( key); /** * Copy this map, remove any associated values with the specified keys (if any exist), * and return the copy as a new immutable map. * @param keys the keys to remove * @return an immutable copy of this map with all keys in {@code keys} removed */ ImmutableMap newWithoutAllKeys(Iterable keys); <(flipUniqueValues.(name2))(name1, name2)> } >> flipUniqueValues ::= [ "Byte": "flipUniqueValues", "Short": "flipUniqueValues", "Char": "flipUniqueValues", "Int": "flipUniqueValues", "Long": "flipUniqueValues", "Float": "flipUniqueValues", "Double": "flipUniqueValues", "Boolean": "noMethods" ] noMethods(name1, name2) ::= "" flipUniqueValues(name1, name2) ::= << @Override ImmutableMap flipUniqueValues(); >> mutableObjectPrimitiveMap.stg000066400000000000000000000225001407344533200374710ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/mapimport "copyrightAndOthers.stg" targetPath() ::= "org/eclipse/collections/api/map/primitive" fileName(primitive) ::= "MutableObjectMap" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.map.primitive; import org.eclipse.collections.api.block.function.primitive.Function; import org.eclipse.collections.api.block.function.primitive.Function0; import org.eclipse.collections.api.block.function.primitive.ToFunction; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ObjectToFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.block.predicate.primitive.ObjectPredicate; import org.eclipse.collections.api.collection.MutableCollection; import org.eclipse.collections.api.collection.primitive.MutableCollection; import org.eclipse.collections.api.iterator.MutableIterator; import org.eclipse.collections.api.tuple.primitive.ObjectPair; /** * This file was automatically generated from template file mutableObjectPrimitiveMap.stg. * * @since 3.0. */ public interface MutableObjectMap\ extends ObjectMap\ { @Override MutableIterator Iterator(); /** * Removes all entries from this map. */ void clear(); /** * Associates a value with the specified key. If a value is already associated * with the key in this map, it will be replaced with {@code value}. * @param key the key * @param value the value to associate with {@code value} */ void put(K key, value); /** * This method allows MutableObjectMap the ability to add an element in the form of {@code ObjectPair\}. * * @see #put(Object, ) * @since 9.1.0 */ default void putPair(ObjectPair\ keyValuePair) { this.put(keyValuePair.getOne(), keyValuePair.getTwo()); } /** * Puts all of the key/value mappings from the specified map into this map. If this * map already has a value associated with one of the keys in the map, it will be * replaced with the value in {@code map}. * @param map the map to copy into this map */ void putAll(ObjectMap\ map); /** * Updates the values in-place. * * @param function that takes a key and its value and that returns a new value for this key * @since 10.0 */ void updateValues(ObjectToFunction\ function); /** * Removes the mapping associated with the key, if one exists, from the map. * @param key the key to remove * @see #remove(Object) */ void removeKey(K key); /** * Removes the mapping associated with the key, if one exists, from the map. * @param key the key to remove * @see #removeKey(K) */ void remove(Object key); /** * Removes the mapping associated with the key, if one exists, from the map, * returning the previously associated value with the key. If no mapping * existed for the key, the specified default value is returned. * @param key the key to remove * @param value the default value to return if no mapping for the key exists * @return the value previously associated with the key, if one existed, * or {@code value} if not */ removeKeyIfAbsent(K key, value); /** * Retrieves the value associated with the key if one exists; if it does not, * associates a value with the key. * a new value with they key * @param key the key * @param value the value to associate with {@code key} if no such mapping exists * @return the value associated with key, if one exists, or {@code value} if not */ getIfAbsentPut(K key, value); /** * Retrieves the value associated with the key if one exists; if it does not, * invokes the supplier and associates the result with the key. * @param key the key * @param function the supplier that provides the value if no mapping exists for {@code key} * @return the value associated with the key, if one exists, or the result of * invoking {@code function} if not */ getIfAbsentPut(K key, Function0 function); /** * Retrieves the value associated with the key if one exists; if it does not, * associates the result of invoking the value function with the key. * @param key the key * @param function the function that provides the value if no mapping exists. * The {@code key} will be passed as the argument to the function. * @return the value associated with the key, if one exists, or the result of * invoking {@code function} with {@code key} if not */ getIfAbsentPutWithKey(K key, Function\ function); /** * Retrieves the value associated with the key if one exists; if it does not, * invokes the value function with the parameter and associates the result with the key. * @param key the key * @param function the function that provides the value if no mapping exists. * The specified {@code parameter} will be passed as the argument to the function. * @param parameter the parameter to provide to {@code function} if no value * exists for {@code key} * @param \

the type of the value function's {@code parameter} * @return the value associated with the key, if one exists, or the result of * invoking {@code function} with {@code parameter} if not */ \

getIfAbsentPutWith(K key, Function\ function, P parameter); /** * Updates or sets the value associated with the key by applying the function to the * existing value, if one exists, or to the specified initial value if one does not. * @param key the key * @param initialValueIfAbsent the initial value to supply to the function if no * mapping exists for the key * @param function the function that returns the updated value based on the current * value or the initial value, if no value exists * @return the new value associated with the key, either as a result of applying * {@code function} to the value already associated with the key or as a result of * applying it to {@code initialValueIfAbsent} and associating the result with {@code key} */ updateValue(K key, initialValueIfAbsent, ToFunction function); <(flipUniqueValues.(name))(name)> @Override MutableObjectMap\ select(ObjectPredicate\ predicate); @Override MutableObjectMap\ reject(ObjectPredicate\ predicate); @Override MutableCollection select(Predicate predicate); @Override MutableCollection reject(Predicate predicate); /** * @since 9.0. */ @Override default MutableObjectMap\ tap(Procedure procedure) { this.forEach(procedure); return this; } @Override \ MutableCollection\ collect(ToObjectFunction\ function); /** * Associates a value with the specified key. If a value is already associated * with the key in this map, it will be replaced with {@code value}. * @param key the key * @param value the value to associate with {@code value} * @return this map * @see #put(K, ) */ MutableObjectMap\ withKeyValue(K key, value); /** * Removes the mapping associated with the key, if one exists, from this map. * @param key the key to remove * @return this map * @see #remove(Object) */ MutableObjectMap\ withoutKey(K key); /** * Removes the mappings associated with all the keys, if they exist, from this map. * @param keys the keys to remove * @return this map * @see #remove(Object) */ MutableObjectMap\ withoutAllKeys(Iterable\ keys); default MutableObjectMap\ withAllKeyValues(Iterable\Pair\\> keyValuePairs) { for (ObjectPair\ keyValuePair : keyValuePairs) { this.putPair(keyValuePair); } return this; } MutableObjectMap\ asUnmodifiable(); MutableObjectMap\ asSynchronized(); <(arithmeticMethods.(type))(type)> } >> arithmeticMethods ::= [ "byte": "allMethods", "short": "allMethods", "char": "allMethods", "int": "allMethods", "long": "allMethods", "float": "allMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods(type) ::= << addToValue(K key, toBeAdded); >> noMethods(type) ::= "" flipUniqueValues ::= [ "Byte": "flipUniqueValues", "Short": "flipUniqueValues", "Char": "flipUniqueValues", "Int": "flipUniqueValues", "Long": "flipUniqueValues", "Float": "flipUniqueValues", "Double": "flipUniqueValues", "Boolean": "noMethods" ] flipUniqueValues(name) ::= << @Override MutableObjectMap\ flipUniqueValues(); >> mutablePrimitiveObjectMap.stg000066400000000000000000000213271407344533200374770ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/mapimport "copyright.stg" skipBoolean() ::= "true" targetPath() ::= "org/eclipse/collections/api/map/primitive" fileName(primitive) ::= "MutableObjectMap" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.map.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.block.function.Function2; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.ObjectPredicate; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.tuple.primitive.ObjectPair; /** * This file was automatically generated from template file mutablePrimitiveObjectMap.stg. * * @since 3.0. */ public interface MutableObjectMap\ extends ObjectMap\, MutablePrimitiveObjectMap\ { /** * Associates a value with the specified key. If a value is already associated * with the key in this map, it will be replaced with {@code value}. * @param key the key * @param value the value to associate with {@code value} * @return the value previously associated with {@code key} if one existed, or * {@code null} if not */ V put( key, V value); /** * This method allows MutableObjectMap the ability to add an element in the form of {@code ObjectPair\}. * * @see #put(, Object) * @since 9.1.0 */ default V putPair(ObjectPair\ keyValuePair) { return this.put(keyValuePair.getOne(), keyValuePair.getTwo()); } /** * Puts all of the key/value mappings from the specified map into this map. If this * map already has a value associated with one of the keys in the map, it will be * replaced with the value in {@code map}. * @param map the map to copy into this map * @since 5.0. */ void putAll(ObjectMap\ map); /** * Removes the mapping associated with the key, if one exists, from the map. * @param key the key to remove * @see #remove() */ V removeKey( key); /** * Removes the mapping associated with the key, if one exists, from the map. * @param key the key to remove * @see #removeKey() */ V remove( key); /** * Retrieves the value associated with the key if one exists; if it does not, * associates a value with the key. * @param key the key * @param value the value to associate with {@code key} if no such mapping exists * @return the value associated with key, if one exists, or {@code value} if not */ V getIfAbsentPut( key, V value); /** * Retrieves the value associated with the key if one exists; if it does not, * invokes the supplier and associates the result with the key. * @param key the key * @param function the supplier that provides the value if no mapping exists for {@code key} * @return the value associated with the key, if one exists, or the result of * invoking {@code function} if not */ V getIfAbsentPut( key, Function0\ function); /** * Retrieves the value associated with the key if one exists; if it does not, * associates the result of invoking the value function with the key. * @param key the key * @param function the function that provides the value if no mapping exists. * The {@code key} will be passed as the argument to the function. * @return the value associated with the key, if one exists, or the result of * invoking {@code function} with {@code key} if not */ V getIfAbsentPutWithKey( key, ToObjectFunction\ function); /** * Retrieves the value associated with the key if one exists; if it does not, * invokes the value function with the parameter and associates the result with the key. * @param key the key * @param function the function that provides the value if no mapping exists. * The specified {@code parameter} will be passed as the argument to the function. * @param parameter the parameter to provide to {@code function} if no value * exists for {@code key} * @param \

the type of the value function's {@code parameter} * @return the value associated with the key, if one exists, or the result of * invoking {@code function} with {@code parameter} if not */ \

V getIfAbsentPutWith( key, Function\ function, P parameter); /** * Look up the value associated with {@code key}, apply the {@code function} to it, and replace the value. If there * is no value associated with {@code key}, start it off with a value supplied by {@code factory}. */ V updateValue( key, Function0\ factory, Function\ function); /** * Updates or sets the value associated with the key by applying the function to the * existing value, if one exists, or the initial value supplied by the factory if one does not. * @param key the key * @param factory the supplier providing the initial value to the function if no * mapping exists for the key * @param function the function that returns the updated value based on the current * value or the initial value, if no value exists. The specified {@code parameter} * will also be passed as the second argument to the function. * @param parameter the parameter to provide to {@code function} if no value * exists for {@code key} * @param \

the type of the value function's {@code parameter} * @return the new value associated with the key, either as a result of applying * {@code function} to the value already associated with the key or as a result of * applying it to the value returned by {@code factory} and associating the result * with {@code key} */ \

V updateValueWith( key, Function0\ factory, Function2\ function, P parameter); @Override MutableObjectMap\ flipUniqueValues(); @Override MutableObjectMap\ tap(Procedure\ procedure); @Override MutableObjectMap\ select(ObjectPredicate\ predicate); @Override MutableObjectMap\ reject(ObjectPredicate\ predicate); /** * Associates a value with the specified key. If a value is already associated * with the key in this map, it will be replaced with {@code value}. * @param key the key * @param value the value to associate with {@code value} * @return this map * @see #put(, V) */ MutableObjectMap\ withKeyValue( key, V value); /** * Removes the mapping associated with the key, if one exists, from this map. * @param key the key to remove * @return this map * @see #remove() */ MutableObjectMap\ withoutKey( key); /** * Removes the mappings associated with all the keys, if they exist, from this map. * @param keys the keys to remove * @return this map * @see #remove() */ MutableObjectMap\ withoutAllKeys(Iterable keys); /** * Puts all of the key/value mappings from the specified pairs into this map. If this * map already has a value associated with one of the keys in the pairs, it will be * replaced with the value in the pair. * @param iterable the pairs to put into this map * @return this map * @see #putPair(ObjectPair) */ default MutableObjectMap\ withAllKeyValues(Iterable\<ObjectPair\\> keyValuePairs) { for (ObjectPair\ keyValuePair : keyValuePairs) { this.putPair(keyValuePair); } return this; } /** * Returns an unmodifiable view of this map, delegating all read-only operations to this * map and throwing an {@link UnsupportedOperationException} for all mutating operations. * This avoids the overhead of copying the map when calling {@link #toImmutable()} while * still providing immutability. * @return an unmodifiable view of this map */ MutableObjectMap\ asUnmodifiable(); /** * Returns a synchronized view of this map, delegating all operations to this map but * ensuring only one caller has access to the map at a time. * @return a synchronized view of this map */ MutableObjectMap\ asSynchronized(); } >> mutablePrimitivePrimitiveMap.stg000066400000000000000000000241131407344533200402350ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/mapimport "copyright.stg" skipBooleanKeys() ::= "true" hasTwoPrimitives() ::= "true" targetPath() ::= "org/eclipse/collections/api/map/primitive" fileName(primitive1, primitive2, sameTwoPrimitives) ::= "MutableMap" class(primitive1, primitive2, sameTwoPrimitives) ::= << >> body(type1, type2, name1, name2) ::= << package org.eclipse.collections.api.map.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.block.function.primitive.ToFunction; import org.eclipse.collections.api.block.function.primitive.Function; import org.eclipse.collections.api.block.function.primitive.Function0; import org.eclipse.collections.api.block.function.primitive.ToFunction; import org.eclipse.collections.api.block.function.primitive.ToFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.tuple.primitive.Pair; /** * This file was automatically generated from template file mutablePrimitivePrimitiveMap.stg. * * @since 3.0. */ public interface MutableMap extends Map, MutableValuesMap { /** * Associates a value with the specified key. If a value is already associated * with the key in this map, it will be replaced with {@code value}. * @param key the key * @param value the value to associate with {@code value} */ void put( key, value); /** * This method allows MutableMap the ability to add an element in the form of Pair. * * @see #put(, ) * @since 9.1.0 */ default void putPair(Pair keyValuePair) { this.put(keyValuePair.getOne(), keyValuePair.getTwo()); } /** * Puts all of the key/value mappings from the specified map into this map. If this * map already has a value associated with one of the keys in the map, it will be * replaced with the value in {@code map}. * @param map the map to copy into this map */ void putAll(Map map); /** * Updates the values in-place. * * @param function that takes a key and its value and that returns a new value for this key * @since 10.0 */ void updateValues(ToFunction function); /** * Removes the mapping associated with the key, if one exists, from the map. * @param key the key to remove * @see #remove() */ void removeKey( key); /** * Removes the mapping associated with the key, if one exists, from the map. * @param key the key to remove * @see #removeKey() */ void remove( key); /** * Removes the mapping associated with the key, if one exists, from the map, * returning the previously associated value with the key. If no mapping * existed for the key, the specified default value is returned. * @param key the key to remove * @param value the default value to return if no mapping for the key exists * @return the value previously associated with the key, if one existed, * or {@code value} if not */ removeKeyIfAbsent( key, value); /** * Retrieves the value associated with the key if one exists; if it does not, * associates a value with the key. * @param key the key * @param value the value to associate with {@code key} if no such mapping exists * @return the value associated with key, if one exists, or {@code value} if not */ getIfAbsentPut( key, value); /** * Retrieves the value associated with the key if one exists; if it does not, * invokes the supplier and associates the result with the key. * @param key the key * @param function the supplier that provides the value if no mapping exists for {@code key} * @return the value associated with the key, if one exists, or the result of * invoking {@code function} if not */ getIfAbsentPut( key, Function0 function); /** * Retrieves the value associated with the key if one exists; if it does not, * associates the result of invoking the value function with the key. * @param key the key * @param function the function that provides the value if no mapping exists. * The {@code key} will be passed as the argument to the function. * @return the value associated with the key, if one exists, or the result of * invoking {@code function} with {@code key} if not */ getIfAbsentPutWithKey( key, ToFunction function); /** * Retrieves the value associated with the key if one exists; if it does not, * invokes the value function with the parameter and associates the result with the key. * @param key the key * @param function the function that provides the value if no mapping exists. * The specified {@code parameter} will be passed as the argument to the function. * @param parameter the parameter to provide to {@code function} if no value * exists for {@code key} * @param \

the type of the value function's {@code parameter} * @return the value associated with the key, if one exists, or the result of * invoking {@code function} with {@code parameter} if not */ \

getIfAbsentPutWith( key, Function\ function, P parameter); /** * Updates or sets the value associated with the key by applying the function to the * existing value, if one exists, or to the specified initial value if one does not. * @param key the key * @param initialValueIfAbsent the initial value to supply to the function if no * mapping exists for the key * @param function the function that returns the updated value based on the current * value or the initial value, if no value exists * @return the new value associated with the key, either as a result of applying * {@code function} to the value already associated with the key or as a result of * applying it to {@code initialValueIfAbsent} and associating the result with {@code key} */ updateValue( key, initialValueIfAbsent, ToFunction function); <(flipUniqueValues.(name2))(name1, name2)> @Override MutableMap select(Predicate predicate); @Override MutableMap reject(Predicate predicate); /** * Associates a value with the specified key. If a value is already associated * with the key in this map, it will be replaced with {@code value}. * @param key the key * @param value the value to associate with {@code value} * @return this map * @see #put(, ) */ MutableMap withKeyValue( key, value); /** * Removes the mapping associated with the key, if one exists, from this map. * @param key the key to remove * @return this map * @see #remove() */ MutableMap withoutKey( key); /** * Removes the mappings associated with all the keys, if they exist, from this map. * @param keys the keys to remove * @return this map * @see #remove() */ MutableMap withoutAllKeys(Iterable keys); /** * Puts all of the key/value mappings from the specified pairs into this map. If this * map already has a value associated with one of the keys in the pairs, it will be * replaced with the value in the pair. * @param iterable the pairs to put into this map * @return this map * @see #putPair(Pair) */ default MutableMap withAllKeyValues(Iterable\<Pair> keyValuePairs) { for (Pair keyValuePair : keyValuePairs) { this.putPair(keyValuePair); } return this; } /** * Returns an unmodifiable view of this map, delegating all read-only operations to this * map and throwing an {@link UnsupportedOperationException} for all mutating operations. * This avoids the overhead of copying the map when calling {@link #toImmutable()} while * still providing immutability. * @return an unmodifiable view of this map */ MutableMap asUnmodifiable(); /** * Returns a synchronized view of this map, delegating all operations to this map but * ensuring only one caller has access to the map at a time. * @return a synchronized view of this map */ MutableMap asSynchronized(); <(arithmeticMethods.(type2))(type1, type2)> } >> arithmeticMethods ::= [ "byte": "allMethods", "short": "allMethods", "char": "allMethods", "int": "allMethods", "long": "allMethods", "float": "allMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods(type1, type2) ::= << /** * Increments and updates the value associated with the key, if a value exists, or * sets the value to be the specified value if one does not. * @param key the key * @param toBeAdded the amount to increment the existing value, if one exists, or * to use as the initial value if one does not * @return the value after incrementing {@code toBeAdded} to the existing value * associated with {@code key} or {@code toBeAdded} if one does not */ addToValue( key, toBeAdded); >> noMethods(type1, type2) ::= "" flipUniqueValues ::= [ "Byte": "flipUniqueValues", "Short": "flipUniqueValues", "Char": "flipUniqueValues", "Int": "flipUniqueValues", "Long": "flipUniqueValues", "Float": "flipUniqueValues", "Double": "flipUniqueValues", "Boolean": "noMethods" ] flipUniqueValues(name1, name2) ::= << @Override MutableMap flipUniqueValues(); >> mutablePrimitiveValuesMap.stg000066400000000000000000000024271407344533200375300ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/mapimport "copyright.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/api/map/primitive" fileName(primitive) ::= "MutableValuesMap" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.map.primitive; import org.eclipse.collections.api.bag.MutableBag; import org.eclipse.collections.api.bag.primitive.MutableBag; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.iterator.MutableIterator; /** * This file was automatically generated from template file mutablePrimitiveValuesMap.stg. * * @since 6.0. */ public interface MutableValuesMap extends ValuesMap { @Override MutableBag select(Predicate predicate); @Override MutableBag reject(Predicate predicate); @Override \ MutableBag\ collect(ToObjectFunction\ function); /** * Removes all entries from this map. */ void clear(); @Override MutableIterator Iterator(); } >> objectPrimitiveMap.stg000066400000000000000000000147121407344533200361650ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/mapimport "copyrightAndOthers.stg" targetPath() ::= "org/eclipse/collections/api/map/primitive" fileName(primitive) ::= "ObjectMap" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.map.primitive; import java.util.Set; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.predicate.primitive.ObjectPredicate; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.primitive.ObjectProcedure; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.collection.primitive.MutableCollection; import org.eclipse.collections.api.tuple.primitive.ObjectPair; /** * This file was automatically generated from template file objectPrimitiveMap.stg. * * @since 3.0. */ public interface ObjectMap\ extends Iterable { /** * Retrieves the value associated with the key. If no mapping exists for the key, * the default value (usually {@code 0}) is returned. * @param key the key * @return the value associated with the key, or the default value if no such * mapping exists */ get(Object key); /** * Retrieves the value associated with the key, throwing an {@link IllegalStateException} * if no such mapping exists. * @param key the key * @return the value associated with the key * @throws IllegalStateException if no mapping exists for the key */ getOrThrow(Object key); /** * Retrieves the value associated with the key, returning the specified default * value if no such mapping exists. * @param key the key * @param ifAbsent the default value to return if no mapping exists for {@code key} * @return the value associated with the key, or {@code ifAbsent} if no such * mapping exists. */ getIfAbsent(Object key, ifAbsent); /** * Returns whether or not the key is present in the map. * @param key the key * @return if a mapping exists in this map for the key */ boolean containsKey(Object key); /** * Returns whether or not this map contains the value. * @param value the value to test * @return if this collection contains the value */ boolean containsValue( value); /** * Iterates through each value in this map. * @param procedure the procedure to invoke for each value in this map. */ void forEachValue(Procedure procedure); /** * Iterates through each key in the map, invoking the procedure for each. * @param procedure the procedure to invoke for each key */ void forEachKey(Procedure\ procedure); /** * Iterates through each key/value pair in the map, invoking the procedure for each. * @param procedure the procedure to invoke for each key/value pair */ void forEachKeyValue(ObjectProcedure\ procedure); <(flipUniqueValues.(name))(name)> /** * Return a copy of this map containing only the key/value pairs that match the predicate. * @param predicate the predicate to determine which key/value pairs in this map should be * included in the returned map * @return a copy of this map with the matching key/value pairs */ ObjectMap\ select(ObjectPredicate\ predicate); /** * Return a copy of this map containing only the key/value pairs that do not match the * predicate. * @param predicate the predicate to determine which key/value pairs in this map should be * excluded from the returned map * @return a copy of this map without the matching key/value pairs */ ObjectMap\ reject(ObjectPredicate\ predicate); /** * @since 9.0. */ @Override default ObjectMap\ tap(Procedure procedure) { this.forEach(procedure); return this; } /** * Follows the same general contract as {@link java.util.AbstractMap#toString()} * * @return a string representation of this ObjectMap */ @Override String toString(); /** * Returns a copy of this map that is immutable (if this map is mutable) or * itself if it is already immutable. * @return an immutable map that is equivalent to this one */ ImmutableObjectMap\ toImmutable(); /** * Returns a set containing all the keys in this map. The set is backed by the * map, so any modifications to the returned set will affect this map. * @return a mutable set containing the keys in this map */ Set\ keySet(); /** * Returns the values in this map as a separate collection. The returned collection is backed by the map, so any * changes made to the returned collection will affect the state of this map. * @return the values as a collection backed by this map */ MutableCollection values(); /** * Returns a view of the keys in this map. This iterable is backed by the map, so * any modifications to the underlying map will be reflected in the keys returned * by the iterable. * @return a view of the keys in this map * @since 5.0 */ LazyIterable\ keysView(); /** * Returns a view of the key/value pairs in this map. This iterable is backed by * the map, so any modifications to the underlying map will be reflected in the * pairs returned by the iterable. * @return a view of the keys in this map * @since 5.0 */ RichIterable\Pair\\> keyValuesView(); } >> flipUniqueValues ::= [ "Byte": "flipUniqueValues", "Short": "flipUniqueValues", "Char": "flipUniqueValues", "Int": "flipUniqueValues", "Long": "flipUniqueValues", "Float": "flipUniqueValues", "Double": "flipUniqueValues", "Boolean": "noMethods" ] noMethods(name) ::= "" flipUniqueValues(name) ::= <<<\n>/** * Return the ObjectMap that is obtained by flipping the direction of this map and making the associations * from value to key. * * @throws IllegalStateException if the ObjectMap contains duplicate values. * @since 9.0 */ ObjectMap\ flipUniqueValues(); >> primitiveObjectMap.stg000066400000000000000000000114331407344533200361620ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/mapimport "copyright.stg" skipBoolean() ::= "true" targetPath() ::= "org/eclipse/collections/api/map/primitive" fileName(primitive) ::= "ObjectMap" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.map.primitive; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.block.predicate.primitive.ObjectPredicate; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.primitive.ObjectProcedure; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.set.primitive.MutableSet; import org.eclipse.collections.api.tuple.primitive.ObjectPair; /** * This file was automatically generated from template file primitiveObjectMap.stg. * * @since 3.0. */ public interface ObjectMap\ extends PrimitiveObjectMap\ { /** * Retrieves the value associated with the key. If no mapping exists for the key, * {@code null} is returned. * @param key the key * @return the value associated with the key, or the default value if no such * mapping exists */ V get( key); /** * Retrieves the value associated with the key if one exists; if it does not, * returns the result of invoking the value supplier. * @param key the key * @param function the supplier that provides the value if no mapping exists for {@code key} * @return the value associated with the key, if one exists, or the result of * invoking {@code ifAbsent} if not */ V getIfAbsent( key, Function0\ ifAbsent); /** * Returns whether or not the key is present in the map. * @param key the key * @return if a mapping exists in this map for the key */ boolean containsKey( key); @Override ObjectMap\ tap(Procedure\ procedure); /** * Iterates through each key in the map, invoking the procedure for each. * @param procedure the procedure to invoke for each key */ void forEachKey(Procedure procedure); /** * Iterates through each key/value pair in the map, invoking the procedure for each. * @param procedure the procedure to invoke for each key/value pair */ void forEachKeyValue(ObjectProcedure\ procedure); /** * Return a copy of this map containing only the key/value pairs that match the predicate. * @param predicate the predicate to determine which key/value pairs in this map should be * included in the returned map * @return a copy of this map with the matching key/value pairs */ ObjectMap\ select(ObjectPredicate\ predicate); /** * Return a copy of this map containing only the key/value pairs that do not match the * predicate. * @param predicate the predicate to determine which key/value pairs in this map should be * excluded from the returned map * @return a copy of this map without the matching key/value pairs */ ObjectMap\ reject(ObjectPredicate\ predicate); /** * Returns a copy of this map that is immutable (if this map is mutable) or * itself if it is already immutable. * @return an immutable map that is equivalent to this one */ ImmutableObjectMap\ toImmutable(); /** * Returns a set containing all the keys in this map. The set is backed by the * map, so any modifications to the returned set will affect this map. * @return a mutable set containing the keys in this map */ MutableSet keySet(); /** * Returns a view of the keys in this map. This iterable is backed by the map, so * any modifications to the underlying map will be reflected in the keys returned * by the iterable. * @return a view of the keys in this map * @since 5.0 */ LazyIterable keysView(); /** * Returns a view of the key/value pairs in this map. This iterable is backed by * the map, so any modifications to the underlying map will be reflected in the * pairs returned by the iterable. * @return a view of the keys in this map * @since 5.0 */ RichIterable\<ObjectPair\\> keyValuesView(); /** * Return the ObjectMap that is obtained by flipping the direction of this map and making the associations * from value to key. * * @throws IllegalStateException if the ObjectMap contains duplicate values. * @since 9.0 */ ObjectMap\ flipUniqueValues(); } >> primitivePrimitiveMap.stg000066400000000000000000000136461407344533200367340ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/mapimport "copyright.stg" skipBooleanKeys() ::= "true" hasTwoPrimitives() ::= "true" targetPath() ::= "org/eclipse/collections/api/map/primitive" fileName(primitive1, primitive2, sameTwoPrimitives) ::= "Map" class(primitive1, primitive2, sameTwoPrimitives) ::= << >> body(type1, type2, name1, name2) ::= << package org.eclipse.collections.api.map.primitive; import java.util.Map; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.set.primitive.MutableSet; import org.eclipse.collections.api.tuple.primitive.Pair; /** * This file was automatically generated from template file primitivePrimitiveMap.stg. * * @since 3.0. */ public interface Map extends ValuesMap { /** * Retrieves the value associated with the key. If no mapping exists for the key, * the default value (usually {@code 0}) is returned. * @param key the key * @return the value associated with the key, or the default value if no such * mapping exists */ get( key); /** * Retrieves the value associated with the key, returning the specified default * value if no such mapping exists. * @param key the key * @param ifAbsent the default value to return if no mapping exists for {@code key} * @return the value associated with the key, or {@code ifAbsent} if no such * mapping exists. */ getIfAbsent( key, ifAbsent); /** * Retrieves the value associated with the key, throwing an {@link IllegalStateException} * if no such mapping exists. * @param key the key * @return the value associated with the key * @throws IllegalStateException if no mapping exists for the key */ getOrThrow( key); /** * Returns whether or not the key is present in the map. * @param key the key * @return if a mapping exists in this map for the key */ boolean containsKey( key); /** * Iterates through each key in the map, invoking the procedure for each. * @param procedure the procedure to invoke for each key */ void forEachKey(Procedure procedure); /** * Iterates through each key/value pair in the map, invoking the procedure for each. * @param procedure the procedure to invoke for each key/value pair */ void forEachKeyValue(Procedure procedure); /** * Returns a view of the keys in this map. This iterable is backed by the map, so * any modifications to the underlying map will be reflected in the keys returned * by the iterable. * @return a view of the keys in this map * @since 5.0 */ LazyIterable keysView(); /** * Returns a view of the key/value pairs in this map. This iterable is backed by * the map, so any modifications to the underlying map will be reflected in the * pairs returned by the iterable. * @return a view of the keys in this map * @since 5.0 */ RichIterable\<Pair> keyValuesView(); <(flipUniqueValues.(name2))(name1, name2)> /** * Return a copy of this map containing only the key/value pairs that match the predicate. * @param predicate the predicate to determine which key/value pairs in this map should be * included in the returned map * @return a copy of this map with the matching key/value pairs */ Map select(Predicate predicate); /** * Return a copy of this map containing only the key/value pairs that do not match the * predicate. * @param predicate the predicate to determine which key/value pairs in this map should be * excluded from the returned map * @return a copy of this map without the matching key/value pairs */ Map reject(Predicate predicate); /** * Follows the same general contract as {@link Map#equals(Object)}. */ @Override boolean equals(Object o); /** * Follows the same general contract as {@link Map#hashCode()}. */ @Override int hashCode(); /** * Follows the same general contract as {@link java.util.AbstractMap#toString()} * * @return a string representation of this Map */ @Override String toString(); /** * Returns a copy of this map that is immutable (if this map is mutable) or * itself if it is already immutable. * @return an immutable map that is equivalent to this one */ ImmutableMap toImmutable(); /** * Returns a set containing all the keys in this map. The set is backed by the * map, so any modifications to the returned set will affect this map. * @return a mutable set containing the keys in this map */ MutableSet keySet(); } >> flipUniqueValues ::= [ "Byte": "flipUniqueValues", "Short": "flipUniqueValues", "Char": "flipUniqueValues", "Int": "flipUniqueValues", "Long": "flipUniqueValues", "Float": "flipUniqueValues", "Double": "flipUniqueValues", "Boolean": "noMethods" ] noMethods(name1, name2) ::= "" flipUniqueValues(name1, name2) ::= <<<\n>/** * Return the Map that is obtained by flipping the direction of this map and making the associations * from value to key. * * @throws IllegalStateException if the Map contains duplicate values. * @since 9.0 */ Map flipUniqueValues(); >> primitiveValuesMap.stg000066400000000000000000000041601407344533200362120ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/mapimport "copyrightAndOthers.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/api/map/primitive" fileName(primitive) ::= "ValuesMap" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.map.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.bag.Bag; import org.eclipse.collections.api.bag.primitive.Bag; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.collection.primitive.MutableCollection; /** * This file was automatically generated from template file primitiveValuesMap.stg. * * @since 6.0. */ public interface ValuesMap extends Iterable { /** * Returns whether or not this map contains the value. * @param value the value to test * @return if this collection contains the value */ boolean containsValue( value); /** * Iterates through each value in this map. * @param procedure the procedure to invoke for each value in this map. */ void forEachValue(Procedure procedure); /** * Returns the values in this map as a separate collection. The returned collection is backed by the map, so any * changes made to the returned collection will affect the state of this map. * @return the values as a collection backed by this map */ MutableCollection values(); @Override Bag select(Predicate predicate); @Override Bag reject(Predicate predicate); /** * @since 9.0. */ @Override default ValuesMap tap(Procedure procedure) { this.forEach(procedure); return this; } @Override \ Bag\ collect(ToObjectFunction\ function); } >> eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/ordered/000077500000000000000000000000001407344533200325725ustar00rootroot00000000000000orderedPrimitiveIterable.stg000066400000000000000000000045561407344533200402310ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/orderedimport "copyrightAndOthers.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveAPI.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/api/ordered/primitive" fileName(primitive) ::= "OrderedIterable" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.ordered.primitive; import java.util.Collection; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.block.function.primitive.IntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.IntProcedure; import org.eclipse.collections.api.ordered.OrderedIterable; /** * This file was automatically generated from template file orderedPrimitiveIterable.stg. * * @since 6.0. */ public interface OrderedIterable extends Iterable { getFirst(); int indexOf( value); @Override \ OrderedIterable\ collect(ToObjectFunction\ function); /** * Returns a new OrderedIterable using results obtained by applying the specified function to each element * and its corresponding index. * * @since 9.1. */ default \ OrderedIterable\ collectWithIndex(IntToObjectFunction\ function) { int[] index = {0}; return this.collect(each -> function.value(each, index[0]++)); } /** * Adds elements to the target Collection using results obtained by applying the specified function to each element * and its corresponding index. * * @since 9.1. */ default \> R collectWithIndex(IntToObjectFunction\ function, R target) { int[] index = {0}; return this.collect(each -> function.value(each, index[0]++), target); } \ T injectIntoWithIndex(T injectedValue, ObjectIntToObjectFunction\ function); void forEachWithIndex(IntProcedure procedure); } >> reversiblePrimitiveIterable.stg000066400000000000000000000037071407344533200407440ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/orderedimport "copyrightAndOthers.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveAPI.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/api/ordered/primitive" fileName(primitive) ::= "ReversibleIterable" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.ordered.primitive; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.block.function.primitive.IntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.ordered.ReversibleIterable; /** * This file was automatically generated from template file reversiblePrimitiveIterable.stg. * * @since 5.0. */ public interface ReversibleIterable extends OrderedIterable { getLast(); LazyIterable asReversed(); @Override \ ReversibleIterable\ collect(ToObjectFunction\ function); /** * Returns a new ReversibleIterable using results obtained by applying the specified function to each element * and its corresponding index. * * @since 9.1. */ @Override default \ ReversibleIterable\ collectWithIndex(IntToObjectFunction\ function) { int[] index = {0}; return this.collect(each -> function.value(each, index[0]++)); } ReversibleIterable toReversed(); /** * @since 6.0. */ ReversibleIterable distinct(); @Override \ T injectIntoWithIndex(T injectedValue, ObjectIntToObjectFunction\ function); } >> primitiveIterable.stg000066400000000000000000000511021407344533200352650ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/apiimport "copyrightAndOthers.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/api" fileName(primitive) ::= "Iterable" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api; import java.util.Collection; import java.util.NoSuchElementException; <(wideStatisticsImport.(type))> <(comparatorImports.(type))(type)> import org.eclipse.collections.api.bag.primitive.MutableBag; import org.eclipse.collections.api.block.function.primitive.<(wideName.(type))>To<(wideName.(type))>Function; import org.eclipse.collections.api.block.function.primitive.ToBooleanFunction; import org.eclipse.collections.api.block.function.primitive.ToByteFunction; import org.eclipse.collections.api.block.function.primitive.ToShortFunction; import org.eclipse.collections.api.block.function.primitive.ToCharFunction; import org.eclipse.collections.api.block.function.primitive.ToDoubleFunction; import org.eclipse.collections.api.block.function.primitive.ToFloatFunction; import org.eclipse.collections.api.block.function.primitive.ToIntFunction; import org.eclipse.collections.api.block.function.primitive.ToLongFunction; import org.eclipse.collections.api.block.function.primitive.ObjectToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.collection.primitive.MutableBooleanCollection; import org.eclipse.collections.api.collection.primitive.MutableByteCollection; import org.eclipse.collections.api.collection.primitive.MutableCharCollection; import org.eclipse.collections.api.collection.primitive.MutableDoubleCollection; import org.eclipse.collections.api.collection.primitive.MutableFloatCollection; import org.eclipse.collections.api.collection.primitive.MutableIntCollection; import org.eclipse.collections.api.collection.primitive.MutableLongCollection; import org.eclipse.collections.api.collection.primitive.MutableShortCollection; import org.eclipse.collections.api.iterator.Iterator; import org.eclipse.collections.api.list.primitive.MutableList; import org.eclipse.collections.api.set.primitive.Set; import org.eclipse.collections.api.set.primitive.MutableSet; /** * Iterable is an interface which is memory-optimized for primitives. * It is inspired by the interface RichIterable, and contains a subset of the internal iterator methods on RichIterable like collect, sum, etc. * The API also includes an external iterator method, which returns an Iterator. Iterator helps iterate over the Iterable without boxing the primitives. * This file was automatically generated from template file primitiveIterable.stg. */ public interface Iterable extends PrimitiveIterable { /** * Returns a primitive iterator that can be used to iterate over the Iterable in an * imperative style. */ Iterator Iterator(); /** * Converts the Iterable to a primitive array. */ [] toArray(); /** * Converts the Iterable to a primitive array. If the collection fits into the provided array it is used * to store its elements and is returned from the method, otherwise a new array of the appropriate size is allocated * and returned. If the iterable is empty, the target array is returned unchanged. */ default [] toArray([] target) { return this.toList().toArray(target); } /** * Returns true if the value is contained in the Iterable, and false if it is not. */ boolean contains( value); /** * Returns true if all of the values specified in the source array are contained * in the Iterable, and false if they are not. */ default boolean containsAll(... source) { if (this.size() \<= 32 || source.length \< 4) { for ( item : source) { if (!this.contains(item)) { return false; } } return true; } else { Set set = this instanceof Set ? (Set) this : this.toSet(); for ( item : source) { if (!set.contains(item)) { return false; } } return true; } } /** * Returns true if all of the values specified in the source Iterable are contained * in the Iterable, and false if they are not. */ default boolean containsAll(Iterable source) { if (this.size() \<= 32 || source.size() \< 4) { return source.allSatisfy(this::contains); } else { Set set = this instanceof Set ? (Set) this : this.toSet(); return source.allSatisfy(set::contains); } } /** * Returns true if any of the values specified in the source array are contained * in the Iterable, and false if they are not. * * @since 11.0 */ default boolean containsAny(... source) { Iterable inside = this; if (this.size() > 32 && source.length > 32 && !(this instanceof Set)) { inside = this.toSet(); } for (int i = 0; i \< source.length; i++) { if (inside.contains(source[i])) { return true; } } return false; } /** * Returns true if any of the values specified in the source Iterable are contained * in the Iterable, and false if they are not. * * @since 11.0 */ default boolean containsAny(Iterable source) { Iterable outside = this; Iterable inside = source; if (this.size() \< source.size()) { outside = source; inside = this; } if (outside instanceof Set) { Iterable temp = outside; outside = inside; inside = temp; } else if (inside.size() > 32 && !(inside instanceof Set)) { inside = inside.toSet(); } return outside.anySatisfy(inside::contains); } /** * Returns true if none of the values specified in the source array are contained * in the Iterable, and false if they are. * * @since 11.0 */ default boolean containsNone(... source) { Iterable inside = this; if (this.size() > 32 && source.length > 32 && !(this instanceof Set)) { inside = this.toSet(); } for (int i = 0; i \< source.length; i++) { if (inside.contains(source[i])) { return false; } } return true; } /** * Returns true if none of the values specified in the source Iterable are contained * in the Iterable, and false if they are. * * @since 11.0 */ default boolean containsNone(Iterable source) { Iterable outside = this; Iterable inside = source; if (this.size() \< source.size()) { outside = source; inside = this; } if (outside instanceof Set) { Iterable temp = outside; outside = inside; inside = temp; } else if (inside.size() > 32 && !(inside instanceof Set)) { inside = inside.toSet(); } return outside.noneSatisfy(inside::contains); } /** * Applies the Procedure to each element in the Iterable. */ void forEach(Procedure procedure); /** * A synonym for forEach. * * @since 7.0. */ void each(Procedure procedure); /** * @since 9.0. */ default Iterable tap(Procedure procedure) { this.forEach(procedure); return this; } /** * Returns a new Iterable with all of the elements in the Iterable that * return true for the specified predicate. */ Iterable select(Predicate predicate); /** * Returns a new Iterable with all of the elements in the Iterable that * return false for the specified predicate. */ Iterable reject(Predicate predicate); /** * Same as {@link #select(Predicate)} , only the results are added to the target MutableCollection. * * @since 8.1. */ default \Collection> R select(Predicate predicate, R target) { this.each(each -> { if (predicate.accept(each)) { target.add(each); } }); return target; } /** * Same as {@link #reject(Predicate)} , only the results are added to the target MutableCollection. * * @since 8.1. */ default \Collection> R reject(Predicate predicate, R target) { this.each(each -> { if (!predicate.accept(each)) { target.add(each); } }); return target; } /** * Returns a new collection with the results of applying the specified function on each element of the source * collection. This method is also commonly called transform or map. */ \ RichIterable\ collect(ToObjectFunction\ function); /** * Same as {@link #collect(ToObjectFunction)} , only the results are added to the target Collection. * * @since 8.1. */ default \\> R collect(ToObjectFunction\ function, R target) { this.each(each -> target.add(function.valueOf(each))); return target; } /** * {@code flatCollect} is a special case of {@link #collect(ToObjectFunction)}. With {@code collect}, when the {@link ToObjectFunction} returns * a collection, the result is a collection of collections. {@code flatCollect} outputs a single "flattened" collection * instead. This method is commonly called flatMap. * * @since 8.1. */ default \\> R flatCollect(ToObjectFunction\\> function, R target) { this.each(each -> { Iterable\ iterable = function.valueOf(each); if (iterable instanceof Collection) { target.addAll((Collection\) iterable); } else { iterable.forEach(target::add); } }); return target; } /** * Returns the target {@code MutableBooleanCollection} with the results of applying the specified function on each element * of the source collection. * * @since 8.1. */ default \ R collectBoolean(ToBooleanFunction function, R target) { this.each(each -> target.add(function.valueOf(each))); return target; } /** * Returns the target {@code MutableByteCollection} with the results of applying the specified function on each element * of the source collection. * * @since 8.1. */ default \ R collectByte(ToByteFunction function, R target) { this.each(each -> target.add(function.valueOf(each))); return target; } /** * Returns the target {@code MutableCharCollection} with the results of applying the specified function on each element * of the source collection. * * @since 8.1. */ default \ R collectChar(ToCharFunction function, R target) { this.each(each -> target.add(function.valueOf(each))); return target; } /** * Returns the target {@code MutableShortCollection} with the results of applying the specified function on each element * of the source collection. * * @since 8.1. */ default \ R collectShort(ToShortFunction function, R target) { this.each(each -> target.add(function.valueOf(each))); return target; } /** * Returns the target {@code MutableIntCollection} with the results of applying the specified function on each element * of the source collection. * * @since 8.1. */ default \ R collectInt(ToIntFunction function, R target) { this.each(each -> target.add(function.valueOf(each))); return target; } /** * Returns the target {@code MutableFloatCollection} with the results of applying the specified function on each element * of the source collection. * * @since 8.1. */ default \ R collectFloat(ToFloatFunction function, R target) { this.each(each -> target.add(function.valueOf(each))); return target; } /** * Returns the target {@code MutableLongCollection} with the results of applying the specified function on each element * of the source collection. * * @since 8.1. */ default \ R collectLong(ToLongFunction function, R target) { this.each(each -> target.add(function.valueOf(each))); return target; } /** * Returns the target {@code MutableDoubleCollection} with the results of applying the specified function on each element * of the source collection. * * @since 8.1. */ default \ R collectDouble(ToDoubleFunction function, R target) { this.each(each -> target.add(function.valueOf(each))); return target; } detectIfNone(Predicate predicate, ifNone); /** * Returns a count of the number of elements in the Iterable that return true for the * specified predicate. */ int count(Predicate predicate); /** * Returns true if any of the elements in the Iterable return true for the * specified predicate, otherwise returns false. */ boolean anySatisfy(Predicate predicate); /** * Returns true if all of the elements in the Iterable return true for the * specified predicate, otherwise returns false. */ boolean allSatisfy(Predicate predicate); /** * Returns true if none of the elements in the Iterable return true for the * specified predicate, otherwise returns false. */ boolean noneSatisfy(Predicate predicate); /** * Converts the Iterable to a new MutableList. */ MutableList toList(); /** * Converts the Iterable to a new MutableSet. */ MutableSet toSet(); /** * Converts the Iterable to a new MutableBag. */ MutableBag toBag(); /** * Returns a LazyIterable adapter wrapping the source Iterable. */ LazyIterable asLazy(); \ T injectInto(T injectedValue, ObjectToObjectFunction\ function); /** * @see #reduce(<(wideName.(type))>To<(wideName.(type))>Function) * * @since 10.0 */ default <(wideType.(type))> reduceIfEmpty(<(wideName.(type))>To<(wideName.(type))>Function accumulator, <(wideType.(type))> defaultValue) { if (this.isEmpty()) { return defaultValue; } else { return this.reduce(accumulator); } } /** * @see RichIterable#reduce(BinaryOperator) * * @since 10.0 */ default <(wideType.(type))> reduce(<(wideName.(type))>To<(wideName.(type))>Function accumulator) { boolean[] seenOne = new boolean[1]; <(wideType.(type))>[] result = new <(wideType.(type))>[1]; this.each(each -> { if (seenOne[0]) { result[0] = accumulator.valueOf(result[0], each); } else { seenOne[0] = true; result[0] = each; } }); if (!seenOne[0]) { throw new NoSuchElementException(); } else { return result[0]; } } /** * Partitions elements in fixed size chunks. * * @param size the number of elements per chunk * * @return A {@code RichIterable} containing {@code Iterable}s of size {@code size}, except the last will be * truncated if the elements don't divide evenly. * * @since 9.2 */ default RichIterable\<Iterable> chunk(int size) { throw new UnsupportedOperationException("Default method to prevent breaking backwards compatibility"); } <(arithmeticMethods.(type))()> } >> arithmeticMethods ::= [ "byte": "allMethods", "short": "allMethods", "char": "allMethods", "int": "allMethods", "long": "allMethods", "float": "allMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods() ::= << <(wideType.(type))> sum(); /** * @since 8.0 */ default <(wideStatistics.(type))> summaryStatistics() { <(wideStatistics.(type))> stats = new <(wideStatistics.(type))>(); this.forEach(stats::accept); return stats; } max(); maxIfEmpty( defaultValue); min(); minIfEmpty( defaultValue); double average(); /** * @since 9.0 */ default double averageIfEmpty(double defaultValue) { if (this.isEmpty()) { return defaultValue; } return this.average(); } double median(); /** * @since 9.0 */ default double medianIfEmpty(double defaultValue) { if (this.isEmpty()) { return defaultValue; } return this.median(); } [] toSortedArray(); MutableList toSortedList(); /** * Converts the collection to a MutableList implementation sorted using the provided comparator. */ default MutableList toSortedList(Comparator comparator) { return this.toList().sortThis(comparator); } /** * Converts the collection to a MutableListImplementation sorted based on the natural order of the key returned * by {@code function}. */ default \ MutableList toSortedListBy(ToObjectFunction\ function) { return this.toList().sortThisBy(function); } /** * Converts the collection to a MutableList implementation, which is sorted based on the key returned by * {@code function} using the provided {@code comparator}. */ default \ MutableList toSortedListBy(ToObjectFunction\ function, Comparator\ comparator) { return this.toList().sortThisBy(function, comparator); } >> noMethods() ::= "" wideStatistics ::= [ "byte": "IntSummaryStatistics", "short": "IntSummaryStatistics", "char": "IntSummaryStatistics", "int": "IntSummaryStatistics", "long": "LongSummaryStatistics", "float": "DoubleSummaryStatistics", "double": "DoubleSummaryStatistics", default: "no matching wide type" ] wideStatisticsImport ::= [ "boolean": "", "byte": "import java.util.IntSummaryStatistics;", "short": "import java.util.IntSummaryStatistics;", "char": "import java.util.IntSummaryStatistics;", "int": "import java.util.IntSummaryStatistics;", "long": "import java.util.LongSummaryStatistics;", "float": "import java.util.DoubleSummaryStatistics;", "double": "import java.util.DoubleSummaryStatistics;", default: "no matching wide type" ] comparatorImports ::= [ "byte": "allComparatorImports", "short": "allComparatorImports", "char": "allComparatorImports", "int": "allComparatorImports", "long": "allComparatorImports", "float": "allComparatorImports", "double": "allComparatorImports", "boolean": "noComparatorImports" ] allComparatorImports(type) ::= << import java.util.Comparator; import org.eclipse.collections.api.block.comparator.primitive.Comparator; >> noComparatorImports(type) ::= "" eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/set/000077500000000000000000000000001407344533200317415ustar00rootroot00000000000000immutablePrimitiveSet.stg000066400000000000000000000057021407344533200367310ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/setimport "copyrightAndOthers.stg" import "primitiveAPI.stg" targetPath() ::= "org/eclipse/collections/api/set/primitive" fileName(primitive) ::= "ImmutableSet" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.set.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.collection.primitive.ImmutableCollection; import org.eclipse.collections.api.set.ImmutableSet; /** * This file was automatically generated from template file immutablePrimitiveSet.stg. * * @since 3.0. */ public interface ImmutableSet extends ImmutableCollection, Set { /** * @since 9.0. */ @Override default ImmutableSet tap(Procedure procedure) { this.forEach(procedure); return this; } @Override \ ImmutableSet\ collect(ToObjectFunction\ function); /** * @since 11.0. */ @Override default ImmutableSet union(Set set) { if (this.size() > set.size()) { return this.toSet().withAll(set).toImmutable(); } else { return set.toSet().withAll(this).toImmutable(); } } /** * Returns the set of all objects that are members of both {@code this} and {@code set}. The intersection of * [1, 2, 3] and [2, 3, 4] is the set [2, 3]. * * @since 11.0. */ @Override default ImmutableSet intersect(Set set) { if (this.size() \< set.size()) { return this.select(set::contains); } else { return set.select(this::contains).toImmutable(); } } /** * Returns the set of all members of {@code this} that are not members of {@code set}. The difference of * [1, 2, 3] and [2, 3, 4] is [1]. * * @since 11.0. */ @Override default ImmutableSet difference(Set set) { return this.reject(set::contains); } /** * Returns the set of all objects that are a member of exactly one of {@code this} and {@code set} (elements which * are in one of the sets, but not in both). For instance, for the sets [1, 2, 3] and [2, 3, 4], the symmetric * difference set is [1, 4] . It is the set difference of the union and the intersection. * * @since 11.0. */ @Override default ImmutableSet symmetricDifference(Set set) { return this.toSet().symmetricDifference(set).toImmutable(); } } >> mutablePrimitiveSet.stg000066400000000000000000000070251407344533200364030ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/setimport "copyrightAndOthers.stg" import "primitiveAPI.stg" targetPath() ::= "org/eclipse/collections/api/set/primitive" fileName(primitive) ::= "MutableSet" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.set.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.collection.primitive.MutableCollection; import org.eclipse.collections.api.set.MutableSet; /** * This file was automatically generated from template file mutablePrimitiveSet.stg. * * @since 3.0. */ public interface MutableSet extends MutableCollection, Set { /** * @since 9.0. */ @Override default MutableSet tap(Procedure procedure) { this.forEach(procedure); return this; } @Override \ MutableSet\ collect(ToObjectFunction\ function); @Override MutableSet asUnmodifiable(); @Override MutableSet asSynchronized(); /** * Returns a frozen copy of this set. A frozen copy is the same thing as an immutable copy without safe-publish guarantees. */ @Override Set freeze(); /** * Returns an immutable copy of this set. */ @Override ImmutableSet toImmutable(); /** * Creates a new empty mutable version of the same Set type. * * @since 9.2. */ default MutableSet newEmpty() { throw new UnsupportedOperationException("Implement in concrete classes."); } /** * @since 11.0. */ @Override default MutableSet union(Set set) { if (this.size() > set.size()) { return this.toSet().withAll(set); } else { return set.toSet().withAll(this); } } /** * Returns the set of all objects that are members of both {@code this} and {@code set}. The intersection of * [1, 2, 3] and [2, 3, 4] is the set [2, 3]. * * @since 11.0. */ @Override default MutableSet intersect(Set set) { if (this.size() \< set.size()) { return this.select(set::contains); } else { return set.select(this::contains, this.newEmpty()); } } /** * Returns the set of all members of {@code this} that are not members of {@code set}. The difference of * [1, 2, 3] and [2, 3, 4] is [1]. * * @since 11.0. */ @Override default MutableSet difference(Set set) { return this.reject(set::contains); } /** * Returns the set of all objects that are a member of exactly one of {@code this} and {@code set} (elements which * are in one of the sets, but not in both). For instance, for the sets [1, 2, 3] and [2, 3, 4], the symmetric * difference set is [1, 4] . It is the set difference of the union and the intersection. * * @since 11.0. */ @Override default MutableSet symmetricDifference(Set set) { return set.reject(this::contains, this.difference(set)); } } >> primitiveSet.stg000066400000000000000000000074411407344533200350730ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/setimport "copyrightAndOthers.stg" import "primitiveAPI.stg" targetPath() ::= "org/eclipse/collections/api/set/primitive" fileName(primitive) ::= "Set" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.set.primitive; import java.util.Set; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.set.SetIterable; import org.eclipse.collections.api.tuple.primitive.Pair; /** * This file was automatically generated from template file primitiveSet.stg. * * @since 3.0. */ public interface Set extends Iterable { /** * @since 9.0. */ @Override default Set tap(Procedure procedure) { this.forEach(procedure); return this; } /** * @since 11.0. */ Set union(Set set); /** * Returns the set of all objects that are members of both {@code this} and {@code set}. The intersection of * [1, 2, 3] and [2, 3, 4] is the set [2, 3]. * * @since 11.0. */ Set intersect(Set set); /** * Returns the set of all members of {@code this} that are not members of {@code set}. The difference of * [1, 2, 3] and [2, 3, 4] is the set [1]. * * @since 11.0. */ Set difference(Set set); /** * Returns the set of all objects that are a member of exactly one of {@code this} and {@code set} (elements which * are in one of the sets, but not in both). For instance, for the sets [1, 2, 3] and [2, 3, 4], the symmetric * difference set is [1, 4] . It is the set difference of the union and the intersection. * * @since 11.0. */ Set symmetricDifference(Set set); /** * Returns {@literal true} if all the members of {@code this} are also members of {@code set}. * For example, [1, 2] is a subset of [1, 2, 3], but [1, 4] is not. * * @since 11.0. */ default boolean isSubsetOf(Set set) { return this.size() \<= set.size() && set.containsAll(this); } /** * Returns {@literal true} if all the members of {@code this} are also members of {@code set} and the * two sets are not equal. For example, [1, 2] is a proper subset of [1, 2, 3], but [1, 2, 3] is not. * * @since 11.0. */ default boolean isProperSubsetOf(Set set) { return this.size() \< set.size() && set.containsAll(this); } /** * Returns the set whose members are all possible ordered pairs (a, b) where a is a member of {@code this} and b is a * member of {@code set}. * * @since 11.0. */ LazyIterable\<Pair> cartesianProduct(Set set); /** * Follows the same general contract as {@link Set#equals(Object)}. */ @Override boolean equals(Object o); /** * Follows the same general contract as {@link Set#hashCode()}. */ @Override int hashCode(); @Override \ SetIterable\ collect(ToObjectFunction\ function); /** * Returns a frozen copy of this set. If the set is frozen, it returns itself. A frozen copy is the same thing as an immutable copy without safe-publish guarantees. */ Set freeze(); /** * Returns an immutable copy of this set. If the set is immutable, it returns itself. */ ImmutableSet toImmutable(); } >> eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/stack/000077500000000000000000000000001407344533200322535ustar00rootroot00000000000000immutablePrimitiveStack.stg000066400000000000000000000033561407344533200375600ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/stackimport "copyrightAndOthers.stg" import "primitiveAPI.stg" targetPath() ::= "org/eclipse/collections/api/stack/primitive" fileName(primitive) ::= "ImmutableStack" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.stack.primitive; import org.eclipse.collections.api.block.function.primitive.IntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.stack.ImmutableStack; /** * This file was automatically generated from template file immutablePrimitiveStack.stg. * * @since 3.0. */ public interface ImmutableStack extends Stack { /** * @since 9.0. */ @Override default ImmutableStack tap(Procedure procedure) { this.forEach(procedure); return this; } ImmutableStack push( item); ImmutableStack pop(); ImmutableStack pop(int count); @Override \ ImmutableStack\ collect(ToObjectFunction\ function); /** * Returns a new ImmutableStack using results obtained by applying the specified function to each element * and its corresponding index. * * @since 9.1. */ @Override default \ ImmutableStack\ collectWithIndex(IntToObjectFunction\ function) { int[] index = {0}; return this.collect(each -> function.value(each, index[0]++)); } } >> mutablePrimitiveStack.stg000066400000000000000000000046171407344533200372330ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/stackimport "copyrightAndOthers.stg" import "primitiveAPI.stg" targetPath() ::= "org/eclipse/collections/api/stack/primitive" fileName(primitive) ::= "MutableStack" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.stack.primitive; import org.eclipse.collections.api.block.function.primitive.IntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.list.primitive.List; import org.eclipse.collections.api.stack.MutableStack; /** * This file was automatically generated from template file mutablePrimitiveStack.stg. * * @since 3.0. */ public interface MutableStack extends Stack { /** * Adds an item to the top of the stack. */ void push( item); /** * Removes and returns the top element of the stack. */ pop(); /** * Removes and returns a List of the number of elements specified by the count, beginning with the top of the stack. */ List pop(int count); /** * Clears the Stack */ void clear(); /** * @since 9.0. */ @Override default MutableStack tap(Procedure procedure) { this.forEach(procedure); return this; } @Override \ MutableStack\ collect(ToObjectFunction\ function); /** * Returns a new MutableStack using results obtained by applying the specified function to each element * and its corresponding index. * * @since 9.1. */ @Override default \ MutableStack\ collectWithIndex(IntToObjectFunction\ function) { int[] index = {0}; return this.collect(each -> function.value(each, index[0]++)); } MutableStack asUnmodifiable(); MutableStack asSynchronized(); /** * Creates a new empty mutable version of the same stack type. * * @since 9.2. */ default MutableStack newEmpty() { throw new UnsupportedOperationException("Implement in concrete classes."); } } >> primitiveStack.stg000066400000000000000000000047311407344533200357160ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/stackimport "copyrightAndOthers.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveAPI.stg" targetPath() ::= "org/eclipse/collections/api/stack/primitive" fileName(primitive) ::= "Stack" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.stack.primitive; import org.eclipse.collections.api.block.function.primitive.IntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.list.primitive.List; import org.eclipse.collections.api.ordered.primitive.OrderedIterable; import org.eclipse.collections.api.stack.StackIterable; /** * This file was automatically generated from template file primitiveStack.stg. * * @since 3.0. */ public interface Stack extends OrderedIterable { /** * Returns the top of the stack. */ peek(); /** * Returns List of the number of elements specified by the count, beginning with the top of the stack. */ List peek(int count); /** * Returns the element at the specified index. * * @param index the location to peek into */ peekAt(int index); /** * @since 9.0. */ @Override default Stack tap(Procedure procedure) { this.forEach(procedure); return this; } @Override \ StackIterable\ collect(ToObjectFunction\ function); /** * Returns a new StackIterable using results obtained by applying the specified function to each element * and its corresponding index. * * @since 9.1. */ @Override default \ StackIterable\ collectWithIndex(IntToObjectFunction\ function) { int[] index = {0}; return this.collect(each -> function.value(each, index[0]++)); } /** * Follows the same general contract as {@link StackIterable#equals(Object)}. */ @Override boolean equals(Object o); /** * Follows the same general contract as {@link StackIterable#hashCode()}. */ @Override int hashCode(); ImmutableStack toImmutable(); } >> eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/tuple/000077500000000000000000000000001407344533200322775ustar00rootroot00000000000000objectPrimitivePair.stg000066400000000000000000000013501407344533200367110ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/tupleimport "copyrightAndOthers.stg" targetPath() ::= "org/eclipse/collections/api/tuple/primitive" fileName(primitive) ::= "ObjectPair" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.tuple.primitive; import java.io.Serializable; import org.eclipse.collections.api.tuple.Pair; /** * An instance of this interface can be created by calling PrimitiveTuples.pair(Object, ). * * @see Pair * This file was automatically generated from template file objectPrimitivePair.stg */ public interface ObjectPair\ extends Serializable, Comparable\Pair\\> { T getOne(); getTwo(); } >> primitiveObjectPair.stg000066400000000000000000000013501407344533200367110ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/tupleimport "copyrightAndOthers.stg" targetPath() ::= "org/eclipse/collections/api/tuple/primitive" fileName(primitive) ::= "ObjectPair" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.api.tuple.primitive; import java.io.Serializable; import org.eclipse.collections.api.tuple.Pair; /** * An instance of this interface can be created by calling PrimitiveTuples.pair(, Object). * * @see Pair * This file was automatically generated from template file primitiveObjectPair.stg */ public interface ObjectPair\ extends Serializable, Comparable\<ObjectPair\\> { getOne(); T getTwo(); } >> primitivePrimitivePair.stg000066400000000000000000000015421407344533200374560ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/api/tupleimport "copyrightAndOthers.stg" hasTwoPrimitives() ::= "true" targetPath() ::= "org/eclipse/collections/api/tuple/primitive" fileName(primitive1, primitive2, sameTwoPrimitives) ::= "Pair" class(primitive1, primitive2, sameTwoPrimitives) ::= << >> body(type1, type2, name1, name2) ::= << package org.eclipse.collections.api.tuple.primitive; import java.io.Serializable; /** * An instance of this interface can be created by calling PrimitiveTuples.pair(, ). * * This file was automatically generated from template file primitivePrimitivePair.stg * * @since 5.0 */ public interface Pair extends Serializable, Comparable\<Pair> { getOne(); getTwo(); } >> eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/copyright.stg000066400000000000000000000007421407344533200331270ustar00rootroot00000000000000copyright() ::= << /* * Copyright (c) 2021 Goldman Sachs. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ >> copyrightAndOthers.stg000066400000000000000000000007661407344533200346660ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resourcescopyrightAndOthers() ::= << /* * Copyright (c) 2021 Goldman Sachs and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompany this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. */ >> eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/000077500000000000000000000000001407344533200313365ustar00rootroot00000000000000abstractPrimitiveIterable.stg000066400000000000000000000062351407344533200371500ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/implimport "copyright.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/primitive" fileName(primitive) ::= "AbstractIterable" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.primitive; import java.util.Arrays; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.bag.primitive.MutableBag; import org.eclipse.collections.api.list.primitive.MutableList; import org.eclipse.collections.api.set.primitive.MutableSet; import org.eclipse.collections.impl.bag.mutable.primitive.HashBag; import org.eclipse.collections.impl.lazy.primitive.LazyIterableAdapter; import org.eclipse.collections.impl.list.mutable.primitive.ArrayList; import org.eclipse.collections.impl.set.mutable.primitive.HashSet; /** * This file was automatically generated from template file abstractPrimitiveIterable.stg. * @since 6.0 */ public abstract class AbstractIterable implements Iterable { @Override public String toString() { return this.makeString("[", ", ", "]"); } <(arithmeticMethods.(type))()> @Override public MutableList toList() { return ArrayList.newList(this); } @Override public MutableSet toSet() { return HashSet.newSet(this); } @Override public MutableBag toBag() { return HashBag.newBag(this); } } >> arithmeticMethods ::= [ "boolean": "noMethods", "default": "allMethods" ] allMethods() ::= << @Override public minIfEmpty( defaultValue) { if (this.isEmpty()) { return defaultValue; } return this.min(); } @Override public maxIfEmpty( defaultValue) { if (this.isEmpty()) { return defaultValue; } return this.max(); } @Override public double average() { if (this.isEmpty()) { throw new ArithmeticException(); } return (double) this.sum() / (double) this.size(); } @Override public double median() { if (this.isEmpty()) { throw new ArithmeticException(); } [] sortedArray = this.toSortedArray(); int middleIndex = sortedArray.length >\> 1; if (sortedArray.length > 1 && (sortedArray.length & 1) == 0) { first = sortedArray[middleIndex]; second = sortedArray[middleIndex - 1]; return ((double) first + (double) second) / 2.0; } return (double) sortedArray[middleIndex]; } @Override public [] toSortedArray() { [] array = this.toArray(); Arrays.sort(array); return array; } @Override public MutableList toSortedList() { return this.toList().sortThis(); } @Override public LazyIterable asLazy() { return new LazyIterableAdapter(this); } >> noMethods() ::= << @Override public LazyIterable asLazy() { return new LazyIterableAdapter(this); } >> eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/bag/000077500000000000000000000000001407344533200320675ustar00rootroot00000000000000immutable/000077500000000000000000000000001407344533200337675ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/bagimmutablePrimitiveBagFactoryImpl.stg000066400000000000000000000072571407344533200431550ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/bag/immutableimport "copyrightAndOthers.stg" targetPath() ::= "org/eclipse/collections/impl/bag/immutable/primitive" fileName(primitive) ::= "ImmutableBagFactoryImpl" class(primitive) ::= << >> body(type, name, wrapperName) ::= << package org.eclipse.collections.impl.bag.immutable.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.bag.primitive.ImmutableBag; import org.eclipse.collections.api.factory.bag.primitive.ImmutableBagFactory; import org.eclipse.collections.impl.factory.primitive.Bags; <(wideStreamImport.(type))> /** * ImmutableBagFactoryImpl is a factory implementation which creates instances of type {@link ImmutableBag}. * This file was automatically generated from template file immutablePrimitiveBagFactoryImpl.stg. * * @since 4.0. */ public enum ImmutableBagFactoryImpl implements ImmutableBagFactory { INSTANCE; @Override public ImmutableBag empty() { return ImmutableEmptyBag.INSTANCE; } @Override public ImmutableBag of() { return this.empty(); } @Override public ImmutableBag with() { return this.empty(); } @Override public ImmutableBag of( one) { return this.with(one); } @Override public ImmutableBag with( one) { return new ImmutableSingletonBag(one); } @Override public ImmutableBag of(... items) { return this.with(items); } @Override public ImmutableBag with(... items) { if (items == null || items.length == 0) { return this.with(); } if (items.length == 1) { return this.with(items[0]); } return ImmutableHashBag.newBagWith(items); } @Override public ImmutableBag ofAll(Iterable items) { return this.withAll(items); } @Override public ImmutableBag withAll(Iterable items) { if (items instanceof ImmutableBag) { return (ImmutableBag) items; } return this.with(items.toArray()); } /** * @since 10.0 */ @Override public ImmutableBag ofAll(Iterable\<\> iterable) { return this.withAll(iterable); } /** * @since 10.0 */ @Override public ImmutableBag withAll(Iterable\<\> iterable) { return Bags.mutable.withAll(iterable).toImmutable(); } <(streamMethods.(type))()> } >> streamMethods ::= [ "byte": "noMethods", "short": "noMethods", "char": "noMethods", "int": "allMethods", "long": "allMethods", "float": "noMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods() ::= << /** * @since 9.0 */ @Override public ImmutableBag ofAll(<(wideStream.(type))> items) { return this.withAll(items); } /** * @since 9.0 */ @Override public ImmutableBag withAll(<(wideStream.(type))> items) { return this.with(items.toArray()); } >> noMethods() ::= "" wideStream ::= [ "int": "IntStream", "long": "LongStream", "double": "DoubleStream", default: "no matching wide type" ] wideStreamImport ::= [ "boolean": "", "byte": "", "short": "", "char": "", "int": "import java.util.stream.IntStream;", "long": "import java.util.stream.LongStream;", "float": "", "double": "import java.util.stream.DoubleStream;", default: "no matching wide type" ] immutablePrimitiveEmptyBag.stg000066400000000000000000000224001407344533200420050ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/bag/immutableimport "copyright.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/bag/immutable/primitive" fileName(primitive) ::= "ImmutableEmptyBag" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.bag.immutable.primitive; import java.io.IOException; import java.io.Serializable; import java.util.NoSuchElementException; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.bag.ImmutableBag; import org.eclipse.collections.api.bag.primitive.ImmutableBag; import org.eclipse.collections.api.bag.primitive.Bag; import org.eclipse.collections.api.bag.primitive.MutableBag; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ObjectToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.IntPredicate; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.IntProcedure; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.iterator.Iterator; import org.eclipse.collections.api.list.primitive.MutableList; import org.eclipse.collections.api.set.primitive.MutableSet; import org.eclipse.collections.impl.bag.mutable.primitive.HashBag; import org.eclipse.collections.impl.factory.Bags; import org.eclipse.collections.impl.factory.primitive.Bags; import org.eclipse.collections.impl.iterator.ImmutableEmptyIterator; import org.eclipse.collections.impl.lazy.primitive.LazyIterableAdapter; import org.eclipse.collections.impl.list.mutable.primitive.ArrayList; import org.eclipse.collections.impl.set.mutable.primitive.HashSet; import org.eclipse.collections.api.list.ImmutableList; import org.eclipse.collections.api.tuple.primitive.IntPair; import org.eclipse.collections.impl.factory.Lists; import org.eclipse.collections.api.set.primitive.ImmutableSet; import org.eclipse.collections.impl.factory.primitive.Sets; /** * ImmutableEmptyBag is an optimization for {@link ImmutableBag} of size 0. * This file was automatically generated from template file immutablePrimitiveEmptyBag.stg. * * @since 4.0. */ final class ImmutableEmptyBag implements ImmutableBag, Serializable { static final ImmutableBag INSTANCE = new ImmutableEmptyBag(); private static final long serialVersionUID = 1L; private Object readResolve() { return INSTANCE; } @Override public ImmutableBag newWith( element) { return new ImmutableSingletonBag(element); } @Override public ImmutableBag newWithout( element) { return this; } @Override public ImmutableBag newWithAll(Iterable elements) { return Bags.immutable.withAll(elements); } @Override public ImmutableBag newWithoutAll(Iterable elements) { return this; } @Override public int size() { return 0; } @Override public boolean isEmpty() { return true; } @Override public boolean notEmpty() { return false; } @Override public boolean contains( value) { return false; } @Override public boolean containsAll(Iterable source) { return source.isEmpty(); } @Override public boolean containsAll(... elements) { return elements.length == 0; } @Override public void forEach(Procedure procedure) { } /** * @since 7.0. */ @Override public void each(Procedure procedure) { } @Override public ImmutableBag select(Predicate predicate) { return this; } @Override public ImmutableSet selectUnique() { return Sets.immutable.empty(); } @Override public ImmutableBag reject(Predicate predicate) { return this; } @Override public \ ImmutableBag\ collect(ToObjectFunction\ function) { return Bags.immutable.of(); } @Override public MutableList toList() { return new ArrayList(); } @Override public int sizeDistinct() { return 0; } @Override public int occurrencesOf( item) { return 0; } @Override public void forEachWithOccurrences(IntProcedure IntProcedure) { } @Override public ImmutableBag selectByOccurrences(IntPredicate predicate) { return this; } @Override public ImmutableList\<IntPair> topOccurrences(int count) { if (count \< 0) { throw new IllegalArgumentException("Cannot use a value of count \< 0"); } return Lists.immutable.empty(); } @Override public ImmutableList\<IntPair> bottomOccurrences(int count) { if (count \< 0) { throw new IllegalArgumentException("Cannot use a value of count \< 0"); } return Lists.immutable.empty(); } @Override public detectIfNone(Predicate predicate, ifNone) { return ifNone; } @Override public int count(Predicate predicate) { return 0; } @Override public boolean anySatisfy(Predicate predicate) { return false; } <(arithmeticMethods.(type))()> @Override public boolean noneSatisfy(Predicate predicate) { return true; } @Override public boolean allSatisfy(Predicate predicate) { return true; } @Override public \ T injectInto(T injectedValue, ObjectToObjectFunction\ function) { return injectedValue; } @Override public RichIterable\<Iterable> chunk(int size) { return Lists.immutable.empty(); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof Bag)) { return false; } Bag bag = (Bag) obj; return bag.isEmpty(); } @Override public int hashCode() { return 0; } @Override public MutableSet toSet() { return new HashSet(); } @Override public MutableBag toBag() { return new HashBag(); } @Override public ImmutableBag toImmutable() { return this; } @Override public LazyIterable asLazy() { return new LazyIterableAdapter(this); } @Override public [] toArray() { return new [0]; } @Override public [] toArray([] target) { return target; } @Override public String toString() { return "[]"; } @Override public String makeString() { return ""; } @Override public String makeString(String separator) { return ""; } @Override public String makeString(String start, String separator, String end) { return start + end; } @Override public void appendString(Appendable appendable) { } @Override public void appendString(Appendable appendable, String separator) { } @Override public void appendString(Appendable appendable, String start, String separator, String end) { try { appendable.append(start); appendable.append(end); } catch (IOException e) { throw new RuntimeException(e); } } @Override public Iterator Iterator() { return ImmutableEmptyIterator.INSTANCE; } } >> arithmeticMethods ::= [ "byte": "allMethods", "short": "allMethods", "char": "allMethods", "int": "allMethods", "long": "allMethods", "float": "allMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods() ::= << @Override public sum() { return ; } @Override public min() { throw new NoSuchElementException(); } @Override public max() { throw new NoSuchElementException(); } @Override public maxIfEmpty( defaultValue) { return defaultValue; } @Override public minIfEmpty( defaultValue) { return defaultValue; } @Override public double average() { throw new ArithmeticException(); } @Override public double median() { throw new ArithmeticException(); } @Override public [] toSortedArray() { return new [0]; } @Override public MutableList toSortedList() { return new ArrayList(); } >> noMethods() ::= "" immutablePrimitiveHashBag.stg000066400000000000000000000326451407344533200416060ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/bag/immutableimport "copyright.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/bag/immutable/primitive" fileName(primitive) ::= "ImmutableHashBag" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.bag.immutable.primitive; import java.io.Externalizable; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import java.io.Serializable; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.bag.ImmutableBag; import org.eclipse.collections.api.bag.MutableBag; import org.eclipse.collections.api.bag.primitive.Bag; import org.eclipse.collections.api.bag.primitive.ImmutableBag; import org.eclipse.collections.api.bag.primitive.MutableBag; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ObjectToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.IntPredicate; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.IntProcedure; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.iterator.Iterator; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.list.primitive.MutableList; import org.eclipse.collections.api.set.primitive.MutableSet; import org.eclipse.collections.impl.bag.mutable.primitive.HashBag; import org.eclipse.collections.impl.block.procedure.checked.primitive.CheckedIntProcedure; import org.eclipse.collections.impl.factory.Lists; import org.eclipse.collections.impl.factory.primitive.Bags; import org.eclipse.collections.impl.iterator.UnmodifiableIterator; import org.eclipse.collections.api.list.ImmutableList; import org.eclipse.collections.api.tuple.primitive.IntPair; import org.eclipse.collections.api.set.primitive.ImmutableSet; import org.eclipse.collections.impl.factory.primitive.Sets; /** * ImmutableHashBag is the non-modifiable equivalent of {@link HashBag}. * This file was automatically generated from template file immutablePrimitiveHashBag.stg. * * @since 4.0. */ final class ImmutableHashBag implements ImmutableBag, Serializable { private static final long serialVersionUID = 1L; private final MutableBag delegate; private ImmutableHashBag([] newElements) { this.checkOptimizedSize(newElements.length); this.delegate = HashBag.newBagWith(newElements); } private void checkOptimizedSize(int length) { if (length \<= 1) { throw new IllegalArgumentException("Use Bags.immutable.with() to instantiate an optimized collection"); } } public static ImmutableHashBag newBagWith(... elements) { return new ImmutableHashBag(elements); } @Override public ImmutableBag newWith( element) { return HashBag.newBag(this.delegate).with(element).toImmutable(); } @Override public ImmutableBag newWithout( element) { HashBag hashBag = HashBag.newBag(this.delegate); hashBag.remove(element); return hashBag.toImmutable(); } @Override public ImmutableBag newWithAll(Iterable elements) { HashBag bag = HashBag.newBag(this.delegate); bag.addAll(elements); return bag.toImmutable(); } @Override public ImmutableBag newWithoutAll(Iterable elements) { HashBag bag = HashBag.newBag(this.delegate); bag.removeAll(elements); return bag.toImmutable(); } @Override public int size() { return this.delegate.size(); } @Override public boolean isEmpty() { return this.delegate.isEmpty(); } @Override public boolean notEmpty() { return this.delegate.notEmpty(); } @Override public boolean contains( value) { return this.delegate.contains(value); } @Override public boolean containsAll(Iterable source) { return this.delegate.containsAll(source); } @Override public boolean containsAll(... elements) { return this.delegate.containsAll(elements); } @Override public void forEach(Procedure procedure) { this.each(procedure); } /** * @since 7.0. */ @Override public void each(Procedure procedure) { this.delegate.forEach(procedure); } @Override public ImmutableBag select(Predicate predicate) { return this.delegate.select(predicate).toImmutable(); } @Override public ImmutableBag selectByOccurrences(IntPredicate predicate) { return this.delegate.selectByOccurrences(predicate).toImmutable(); } @Override public ImmutableSet selectUnique() { MutableSet result = Sets.mutable.empty(); this.forEachWithOccurrences((each, occurrences) -> { if (occurrences == 1) { result.add(each); } }); return result.toImmutable(); } @Override public ImmutableList\<IntPair> topOccurrences(int count) { return this.delegate.topOccurrences(count).toImmutable(); } @Override public ImmutableList\<IntPair> bottomOccurrences(int count) { return this.delegate.bottomOccurrences(count).toImmutable(); } @Override public ImmutableBag reject(Predicate predicate) { return this.delegate.reject(predicate).toImmutable(); } @Override public \ ImmutableBag\ collect(ToObjectFunction\ function) { MutableBag\ bag = this.delegate.collect(function); return bag.toImmutable(); } @Override public MutableList toList() { return this.delegate.toList(); } @Override public int sizeDistinct() { return this.delegate.sizeDistinct(); } @Override public int occurrencesOf( item) { return this.delegate.occurrencesOf(item); } @Override public void forEachWithOccurrences(IntProcedure IntProcedure) { this.delegate.forEachWithOccurrences(IntProcedure); } @Override public detectIfNone(Predicate predicate, ifNone) { return this.delegate.detectIfNone(predicate, ifNone); } @Override public int count(Predicate predicate) { return this.delegate.count(predicate); } @Override public boolean anySatisfy(Predicate predicate) { return this.delegate.anySatisfy(predicate); } <(arithmeticMethods.(type))()> @Override public boolean noneSatisfy(Predicate predicate) { return this.delegate.noneSatisfy(predicate); } @Override public boolean allSatisfy(Predicate predicate) { return this.delegate.allSatisfy(predicate); } @Override public \ T injectInto(T injectedValue, ObjectToObjectFunction\ function) { return this.delegate.injectInto(injectedValue, function); } @Override public RichIterable\<Iterable> chunk(int size) { if (size \<= 0) { throw new IllegalArgumentException("Size for groups must be positive but was: " + size); } MutableList\<Iterable> result = Lists.mutable.empty(); if (this.notEmpty()) { if (this.size() \<= size) { result.add(this); } else { Iterator iterator = this.Iterator(); while (iterator.hasNext()) { MutableBag batch = Bags.mutable.empty(); for (int i = 0; i \< size && iterator.hasNext(); i++) { batch.add(iterator.next()); } result.add(batch.toImmutable()); } } } return result.toImmutable(); } @Override public boolean equals(Object obj) { return this.delegate.equals(obj); } @Override public int hashCode() { return this.delegate.hashCode(); } @Override public MutableSet toSet() { return this.delegate.toSet(); } @Override public MutableBag toBag() { return this.delegate.toBag(); } @Override public ImmutableBag toImmutable() { return this; } @Override public LazyIterable asLazy() { return this.delegate.asLazy(); } @Override public [] toArray() { return this.delegate.toArray(); } @Override public [] toArray([] target) { return this.delegate.toArray(target); } @Override public String toString() { return this.delegate.toString(); } @Override public String makeString() { return this.delegate.makeString(); } @Override public String makeString(String separator) { return this.delegate.makeString(separator); } @Override public String makeString(String start, String separator, String end) { return this.delegate.makeString(start, separator, end); } @Override public void appendString(Appendable appendable) { this.delegate.appendString(appendable); } @Override public void appendString(Appendable appendable, String separator) { this.delegate.appendString(appendable, separator); } @Override public void appendString(Appendable appendable, String start, String separator, String end) { this.delegate.appendString(appendable, start, separator, end); } @Override public Iterator Iterator() { return new UnmodifiableIterator(this.delegate.Iterator()); } private Object writeReplace() { return new ImmutableBagSerializationProxy(this); } protected static class ImmutableBagSerializationProxy implements Externalizable { private static final long serialVersionUID = 1L; private Bag bag; @SuppressWarnings("UnusedDeclaration") public ImmutableBagSerializationProxy() { // Empty constructor for Externalizable class } protected ImmutableBagSerializationProxy(Bag bag) { this.bag = bag; } @Override public void writeExternal(ObjectOutput out) throws IOException { out.writeInt(this.bag.sizeDistinct()); try { this.bag.forEachWithOccurrences(new CheckedIntProcedure() { @Override public void safeValue( item, int count) throws IOException { out.write(item); out.writeInt(count); } }); } catch (RuntimeException e) { if (e.getCause() instanceof IOException) { throw (IOException) e.getCause(); } throw e; } } @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { int size = in.readInt(); MutableBag deserializedBag = new HashBag(); for (int i = 0; i \< size; i++) { deserializedBag.addOccurrences(in.read(), in.readInt()); } this.bag = deserializedBag; } protected Object readResolve() { return this.bag.toImmutable(); } } } >> arithmeticMethods ::= [ "byte": "allMethods", "short": "allMethods", "char": "allMethods", "int": "allMethods", "long": "allMethods", "float": "allMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods() ::= << @Override public sum() { return this.delegate.sum(); } @Override public min() { return this.delegate.min(); } @Override public max() { return this.delegate.max(); } @Override public maxIfEmpty( defaultValue) { return this.delegate.maxIfEmpty(defaultValue); } @Override public minIfEmpty( defaultValue) { return this.delegate.minIfEmpty(defaultValue); } @Override public double average() { return this.delegate.average(); } @Override public double median() { return this.delegate.median(); } @Override public [] toSortedArray() { return this.delegate.toSortedArray(); } @Override public MutableList toSortedList() { return this.delegate.toSortedList(); } >> noMethods() ::= "" immutablePrimitiveSingletonBag.stg000066400000000000000000000274441407344533200426660ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/bag/immutableimport "copyright.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/bag/immutable/primitive" fileName(primitive) ::= "ImmutableSingletonBag" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.bag.immutable.primitive; import java.io.IOException; import java.io.Serializable; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.bag.ImmutableBag; import org.eclipse.collections.api.bag.primitive.ImmutableBag; import org.eclipse.collections.api.bag.primitive.Bag; import org.eclipse.collections.api.bag.primitive.MutableBag; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ObjectToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.IntPredicate; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.IntProcedure; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.iterator.Iterator; import org.eclipse.collections.api.list.primitive.MutableList; import org.eclipse.collections.api.set.primitive.MutableSet; import org.eclipse.collections.impl.bag.mutable.primitive.HashBag; import org.eclipse.collections.impl.factory.Bags; import org.eclipse.collections.impl.factory.Lists; import org.eclipse.collections.impl.factory.primitive.Bags; import org.eclipse.collections.impl.iterator.SingletonIterator; import org.eclipse.collections.impl.lazy.primitive.LazyIterableAdapter; import org.eclipse.collections.impl.list.mutable.primitive.ArrayList; import org.eclipse.collections.impl.set.mutable.primitive.HashSet; import org.eclipse.collections.api.list.ImmutableList; import org.eclipse.collections.api.tuple.primitive.IntPair; import org.eclipse.collections.impl.tuple.primitive.PrimitiveTuples; import org.eclipse.collections.api.set.primitive.ImmutableSet; import org.eclipse.collections.impl.factory.primitive.Sets; /** * ImmutableSingletonBag is an optimization for {@link ImmutableBag} of size 1. * This file was automatically generated from template file immutablePrimitiveSingletonBag.stg. * * @since 4.0. */ final class ImmutableSingletonBag implements ImmutableBag, Serializable { private static final long serialVersionUID = 1L; private final element1; ImmutableSingletonBag( element) { this.element1 = element; } @Override public ImmutableBag newWith( element) { return Bags.immutable.with(this.element1, element); } @Override public ImmutableBag newWithout( element) { return <(equals.(type))("this.element1", "element")> ? Bags.immutable.with() : this; } @Override public ImmutableBag newWithAll(Iterable elements) { return HashBag.newBag(elements).with(this.element1).toImmutable(); } @Override public ImmutableBag newWithoutAll(Iterable elements) { return elements.contains(this.element1) ? Bags.immutable.with() : this; } @Override public int size() { return 1; } @Override public boolean isEmpty() { return false; } @Override public boolean notEmpty() { return true; } @Override public boolean contains( value) { return <(equals.(type))("this.element1", "value")>; } @Override public boolean containsAll(Iterable source) { for (Iterator iterator = source.Iterator(); iterator.hasNext(); ) { if (<(notEquals.(type))("this.element1", "iterator.next()")>) { return false; } } return true; } @Override public boolean containsAll(... source) { for ( value : source) { if (<(notEquals.(type))("this.element1", "value")>) { return false; } } return true; } @Override public void forEach(Procedure procedure) { this.each(procedure); } /** * @since 7.0. */ @Override public void each(Procedure procedure) { procedure.value(this.element1); } @Override public ImmutableBag select(Predicate predicate) { return predicate.accept(this.element1) ? Bags.immutable.with(this.element1) : Bags.immutable.empty(); } @Override public ImmutableBag selectByOccurrences(IntPredicate predicate) { return predicate.accept(1) ? Bags.immutable.with(this.element1) : Bags.immutable.empty(); } @Override public ImmutableSet selectUnique() { return Sets.immutable.of(this.element1); } @Override public ImmutableList\<IntPair> topOccurrences(int count) { if (count \< 0) { throw new IllegalArgumentException("Cannot use a value of count \< 0"); } if (count == 0) { return Lists.immutable.empty(); } return Lists.immutable.with(PrimitiveTuples.pair(this.element1, 1)); } @Override public ImmutableList\<IntPair> bottomOccurrences(int count) { if (count \< 0) { throw new IllegalArgumentException("Cannot use a value of count \< 0"); } if (count == 0) { return Lists.immutable.empty(); } return Lists.immutable.with(PrimitiveTuples.pair(this.element1, 1)); } @Override public ImmutableBag reject(Predicate predicate) { return predicate.accept(this.element1) ? Bags.immutable.empty() : Bags.immutable.with(this.element1); } @Override public \ ImmutableBag\ collect(ToObjectFunction\ function) { return Bags.immutable.with(function.valueOf(this.element1)); } @Override public MutableList toList() { return ArrayList.newListWith(this.element1); } @Override public int sizeDistinct() { return 1; } @Override public int occurrencesOf( item) { return <(equals.(type))("this.element1", "item")> ? 1 : 0; } @Override public void forEachWithOccurrences(IntProcedure IntProcedure) { IntProcedure.value(this.element1, 1); } @Override public detectIfNone(Predicate predicate, ifNone) { return predicate.accept(this.element1) ? this.element1 : ifNone; } @Override public int count(Predicate predicate) { return predicate.accept(this.element1) ? 1 : 0; } @Override public boolean anySatisfy(Predicate predicate) { return predicate.accept(this.element1); } <(arithmeticMethods.(type))()> @Override public boolean noneSatisfy(Predicate predicate) { return !predicate.accept(this.element1); } @Override public boolean allSatisfy(Predicate predicate) { return predicate.accept(this.element1); } @Override public \ T injectInto(T injectedValue, ObjectToObjectFunction\ function) { return function.valueOf(injectedValue, this.element1); } @Override public RichIterable\<Iterable> chunk(int size) { if (size \<= 0) { throw new IllegalArgumentException("Size for groups must be positive but was: " + size); } return Lists.immutable.with(this); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof Bag)) { return false; } Bag bag = (Bag) obj; if (bag.size() != 1) { return false; } return this.occurrencesOf(this.element1) == bag.occurrencesOf(this.element1); } @Override public int hashCode() { return <(hashCode.(type))("this.element1")> ^ 1; } @Override public MutableSet toSet() { return HashSet.newSetWith(this.element1); } @Override public MutableBag toBag() { return HashBag.newBagWith(this.element1); } @Override public ImmutableBag toImmutable() { return this; } @Override public LazyIterable asLazy() { return new LazyIterableAdapter(this); } @Override public [] toArray() { return new []{this.element1}; } @Override public [] toArray([] target) { if (target.length \< 1) { target = new []{this.element1}; } else { target[0] = this.element1; } return target; } @Override public String toString() { return '[' + this.makeString() + ']'; } @Override public String makeString() { return this.makeString(", "); } @Override public String makeString(String separator) { return this.makeString("", separator, ""); } @Override public String makeString(String start, String separator, String end) { Appendable stringBuilder = new StringBuilder(); this.appendString(stringBuilder, start, separator, end); return stringBuilder.toString(); } @Override public void appendString(Appendable appendable) { this.appendString(appendable, ", "); } @Override public void appendString(Appendable appendable, String separator) { this.appendString(appendable, "", separator, ""); } @Override public void appendString(Appendable appendable, String start, String separator, String end) { try { appendable.append(start); appendable.append(String.valueOf(this.element1)); appendable.append(end); } catch (IOException e) { throw new RuntimeException(e); } } @Override public Iterator Iterator() { return new SingletonIterator(element1); } } >> arithmeticMethods ::= [ "byte": "allMethods", "short": "allMethods", "char": "allMethods", "int": "allMethods", "long": "allMethods", "float": "allMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods() ::= << @Override public sum() { return this.element1; } @Override public min() { return this.element1; } @Override public max() { return this.element1; } @Override public maxIfEmpty( defaultValue) { return this.element1; } @Override public minIfEmpty( defaultValue) { return this.element1; } @Override public double average() { return this.element1; } @Override public double median() { return this.element1; } @Override public [] toSortedArray() { return new []{this.element1}; } @Override public MutableList toSortedList() { return ArrayList.newListWith(this.element1); } >> noMethods() ::= "" mutable/000077500000000000000000000000001407344533200334415ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/bagmutablePrimitiveBagFactoryImpl.stg000066400000000000000000000064251407344533200422750ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/bag/mutableimport "copyrightAndOthers.stg" targetPath() ::= "org/eclipse/collections/impl/bag/mutable/primitive" fileName(primitive) ::= "MutableBagFactoryImpl" class(primitive) ::= << >> body(type, name, wrapperName) ::= << package org.eclipse.collections.impl.bag.mutable.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.factory.bag.primitive.MutableBagFactory; import org.eclipse.collections.api.bag.primitive.MutableBag; import org.eclipse.collections.impl.factory.primitive.Bags; import org.eclipse.collections.impl.utility.Iterate; <(wideStreamImport.(type))> /** * MutableBagFactoryImpl is a factory implementation which creates instances of type {@link MutableBag}. * This file was automatically generated from template file mutablePrimitiveBagFactoryImpl.stg. * * @since 6.0. */ public enum MutableBagFactoryImpl implements MutableBagFactory { INSTANCE; @Override public MutableBag empty() { return new HashBag(); } @Override public MutableBag of() { return this.empty(); } @Override public MutableBag with() { return this.empty(); } @Override public MutableBag of(... items) { return this.with(items); } @Override public MutableBag with(... items) { if (items == null || items.length == 0) { return this.with(); } return HashBag.newBagWith(items); } @Override public MutableBag ofAll(Iterable items) { return this.withAll(items); } @Override public MutableBag withAll(Iterable items) { return HashBag.newBag(items); } /** * @since 10.0 */ @Override public MutableBag ofAll(Iterable\<\> iterable) { return this.withAll(iterable); } /** * @since 10.0 */ @Override public MutableBag withAll(Iterable\<\> iterable) { return Iterate.collect(iterable, ::Value, Bags.mutable.empty()); } <(streamMethods.(type))()> } >> streamMethods ::= [ "byte": "noMethods", "short": "noMethods", "char": "noMethods", "int": "allMethods", "long": "allMethods", "float": "noMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods() ::= << /** * @since 9.0 */ @Override public MutableBag ofAll(<(wideStream.(type))> items) { return this.withAll(items); } /** * @since 9.0 */ @Override public MutableBag withAll(<(wideStream.(type))> items) { return this.with(items.toArray()); } >> noMethods() ::= "" wideStream ::= [ "int": "IntStream", "long": "LongStream", "double": "DoubleStream", default: "no matching wide type" ] wideStreamImport ::= [ "boolean": "", "byte": "", "short": "", "char": "", "int": "import java.util.stream.IntStream;", "long": "import java.util.stream.LongStream;", "float": "", "double": "import java.util.stream.DoubleStream;", default: "no matching wide type" ] primitiveHashBag.stg000066400000000000000000000566731407344533200374270ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/bag/mutableimport "copyrightAndOthers.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/bag/mutable/primitive" fileName(primitive) ::= "HashBag" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.bag.mutable.primitive; import java.io.Externalizable; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import java.util.NoSuchElementException; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.bag.MutableBag; import org.eclipse.collections.api.bag.primitive.Bag; import org.eclipse.collections.api.bag.primitive.ImmutableBag; import org.eclipse.collections.api.bag.primitive.MutableBag; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.function.primitive.IntFunction; import org.eclipse.collections.api.block.function.primitive.ObjectToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.IntPredicate; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.block.procedure.primitive.IntProcedure; import org.eclipse.collections.api.iterator.Iterator; import org.eclipse.collections.api.iterator.MutableIterator; import org.eclipse.collections.api.set.primitive.Set; import org.eclipse.collections.api.tuple.primitive.IntPair; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.impl.factory.Lists; import org.eclipse.collections.impl.list.mutable.FastList; import org.eclipse.collections.impl.Counter; import org.eclipse.collections.impl.bag.mutable.HashBag; import org.eclipse.collections.impl.block.factory.primitive.IntToIntFunctions; import org.eclipse.collections.impl.factory.primitive.Bags; import org.eclipse.collections.impl.map.mutable.primitive.IntHashMap; import org.eclipse.collections.impl.primitive.AbstractIterable; import org.eclipse.collections.impl.set.mutable.primitive.HashSet; import org.eclipse.collections.impl.tuple.primitive.PrimitiveTuples; import org.eclipse.collections.impl.factory.primitive.Sets; import org.eclipse.collections.api.set.primitive.MutableSet; /** * HashBag is similar to {@link HashBag}, and is memory-optimized for primitives. * This file was automatically generated from template file primitiveHashBag.stg. * * @since 3.0. */ public class HashBag extends AbstractIterable implements MutableBag, Externalizable { private static final long serialVersionUID = 1L; private IntHashMap items; private int size; public HashBag() { this.items = new IntHashMap(); } public HashBag(int size) { this.items = new IntHashMap(size); } public HashBag(Iterable iterable) { this(); this.addAll(iterable); } public HashBag(... elements) { this(); this.addAll(elements); } public HashBag(HashBag bag) { this.items = new IntHashMap(bag.sizeDistinct()); this.addAll(bag); } public static HashBag newBag(int size) { return new HashBag(size); } public static HashBag newBagWith(... source) { return new HashBag(source); } public static HashBag newBag(Iterable source) { if (source instanceof HashBag) { return new HashBag((HashBag) source); } return new HashBag(source); } public static HashBag newBag(Bag source) { return new HashBag(source); } @Override public boolean isEmpty() { return this.items.isEmpty(); } @Override public boolean notEmpty() { return this.items.notEmpty(); } @Override public int size() { return this.size; } @Override public int sizeDistinct() { return this.items.size(); } @Override public void clear() { this.items.clear(); this.size = 0; } @Override public HashBag with( element) { this.add(element); return this; } public HashBag with( element1, element2) { this.add(element1); this.add(element2); return this; } public HashBag with( element1, element2, element3) { this.add(element1); this.add(element2); this.add(element3); return this; } @Override public HashBag withAll(Iterable iterable) { this.addAll(iterable); return this; } @Override public HashBag without( element) { this.remove(element); return this; } @Override public HashBag withoutAll(Iterable iterable) { this.removeAll(iterable); return this; } @Override public boolean contains( value) { return this.items.containsKey(value); } @Override public int occurrencesOf( item) { return this.items.get(item); } @Override public void forEachWithOccurrences(IntProcedure procedure) { this.items.forEachKeyValue(procedure); } @Override public HashBag selectByOccurrences(IntPredicate predicate) { HashBag result = new HashBag(); this.forEachWithOccurrences((each, occurrences) -> { if (predicate.accept(occurrences)) { result.addOccurrences(each, occurrences); } }); return result; } @Override public MutableSet selectUnique() { MutableSet result = Sets.mutable.empty(); this.forEachWithOccurrences((each, occurrences) -> { if (occurrences == 1) { result.add(each); } }); return result; } @Override public MutableList\<IntPair> topOccurrences(int count) { return this.occurrencesSortingBy(count, item -> -item.getTwo(), Lists.mutable.empty()); } @Override public MutableList\<IntPair> bottomOccurrences(int count) { return this.occurrencesSortingBy(count, IntPair::getTwo, Lists.mutable.empty()); } protected MutableList\<IntPair> occurrencesSortingBy( int n, IntFunction\<IntPair> function, MutableList\<IntPair> returnWhenEmpty) { if (n \< 0) { throw new IllegalArgumentException("Cannot use a value of n \< 0"); } if (n == 0) { return returnWhenEmpty; } int keySize = Math.min(n, this.sizeDistinct()); MutableList\<IntPair> sorted = this.toListWithOccurrences().sortThisByInt(function); MutableList\<IntPair> results = sorted.subList(0, keySize).toList(); while (keySize \< sorted.size() && results.getLast().getTwo() == sorted.get(keySize).getTwo()) { results.add(sorted.get(keySize)); keySize++; } return results; } protected MutableList\<IntPair> toListWithOccurrences() { MutableList\<IntPair> result = FastList.newList(this.sizeDistinct()); this.forEachWithOccurrences((each, count) -> result.add(PrimitiveTuples.pair(each, count))); return result; } @Override public boolean add( item) { this.items.updateValue(item, 0, IntToIntFunctions.increment()); this.size++; return true; } @Override public boolean remove( item) { int newValue = this.items.updateValue(item, 0, IntToIntFunctions.decrement()); if (newValue \<= 0) { this.items.removeKey(item); if (newValue == 0) { this.size--; } return newValue == 0; } this.size--; return true; } @Override public boolean removeIf(Predicate predicate) { boolean changed = false; for (MutableIterator iterator = this.items.keySet().Iterator(); iterator.hasNext(); ) { key = iterator.next(); if (predicate.accept(key)) { this.size -= this.items.get(key); iterator.remove(); changed = true; } } return changed; } @Override public boolean addAll(... source) { if (source.length == 0) { return false; } for ( each : source) { this.add(each); } return true; } @Override public boolean addAll(Iterable source) { if (source.isEmpty()) { return false; } if (source instanceof Bag) { Bag otherBag = (Bag) source; otherBag.forEachWithOccurrences(this::addOccurrences); } else { Iterator iterator = source.Iterator(); while (iterator.hasNext()) { each = iterator.next(); this.add(each); } } return true; } @Override public boolean removeAll(... source) { if (source.length == 0) { return false; } int oldSize = this.size(); for ( each : source) { int occurrences = this.items.removeKeyIfAbsent(each, 0); this.size -= occurrences; } return this.size() != oldSize; } @Override public boolean removeAll(Iterable source) { if (source.isEmpty()) { return false; } int oldSize = this.size(); if (source instanceof Bag) { Bag otherBag = (Bag) source; otherBag.forEachWithOccurrences(( each, int occurrences) -> { int oldOccurrences = this.items.removeKeyIfAbsent(each, 0); HashBag.this.size -= oldOccurrences; }); } else { Iterator iterator = source.Iterator(); while (iterator.hasNext()) { each = iterator.next(); int occurrences = this.items.removeKeyIfAbsent(each, 0); this.size -= occurrences; } } return this.size() != oldSize; } @Override public boolean retainAll(Iterable source) { int oldSize = this.size(); Set sourceSet = source instanceof Set ? (Set) source : source.toSet(); HashBag retained = this.select(sourceSet::contains); if (retained.size() != oldSize) { this.items = retained.items; this.size = retained.size; return true; } return false; } @Override public boolean retainAll(... source) { return this.retainAll(HashSet.newSetWith(source)); } @Override public void addOccurrences( item, int occurrences) { if (occurrences \< 0) { throw new IllegalArgumentException("Cannot add a negative number of occurrences"); } if (occurrences > 0) { this.items.updateValue(item, 0, (int intParameter) -> intParameter + occurrences); this.size += occurrences; } } @Override public boolean removeOccurrences( item, int occurrences) { if (occurrences \< 0) { throw new IllegalArgumentException("Cannot remove a negative number of occurrences"); } if (occurrences == 0) { return false; } int newValue = this.items.updateValue(item, 0, (int intParameter) -> intParameter - occurrences); if (newValue \<= 0) { this.size -= occurrences - newValue; this.items.removeKey(item); return newValue + occurrences != 0; } this.size -= occurrences; return true; } @Override public void forEach(Procedure procedure) { this.each(procedure); } /** * @since 7.0. */ @Override public void each(Procedure procedure) { this.items.forEachKeyValue(( key, int occurrences) -> { for (int i = 0; i \< occurrences; i++) { procedure.value(key); } }); } @Override public HashBag select(Predicate predicate) { HashBag result = new HashBag(); this.forEachWithOccurrences(( each, int occurrences) -> { if (predicate.accept(each)) { result.addOccurrences(each, occurrences); } }); return result; } @Override public HashBag reject(Predicate predicate) { HashBag result = new HashBag(); this.forEachWithOccurrences(( each, int occurrences) -> { if (!predicate.accept(each)) { result.addOccurrences(each, occurrences); } }); return result; } @Override public \ T injectInto(T injectedValue, ObjectToObjectFunction\ function) { T[] result = (T[]) new Object[1]; result[0] = injectedValue; this.forEachWithOccurrences(( each, int occurrences) -> { for (int i = 0; i \< occurrences; i++) { result[0] = function.valueOf(result[0], each); } }); return result[0]; } @Override public RichIterable\<Iterable> chunk(int size) { if (size \<= 0) { throw new IllegalArgumentException("Size for groups must be positive but was: " + size); } MutableList\<Iterable> result = Lists.mutable.empty(); if (this.notEmpty()) { if (this.size() \<= size) { result.add(Bags.mutable.withAll(this)); } else { Iterator iterator = this.Iterator(); while (iterator.hasNext()) { MutableBag batch = Bags.mutable.empty(); for (int i = 0; i \< size && iterator.hasNext(); i++) { batch.add(iterator.next()); } result.add(batch); } } } return result; } @Override public boolean equals(Object otherBag) { if (otherBag == this) { return true; } if (!(otherBag instanceof Bag)) { return false; } Bag bag = (Bag) otherBag; if (this.sizeDistinct() != bag.sizeDistinct()) { return false; } return this.items.keysView().allSatisfy(( key) -> HashBag.this.occurrencesOf(key) == bag.occurrencesOf(key)); } @Override public int hashCode() { Counter result = new Counter(); this.forEachWithOccurrences(( eachItem, int occurrences) -> result.add(<(hashCode.(type))("eachItem")> ^ occurrences)); return result.getCount(); } @Override public void appendString( Appendable appendable, String start, String separator, String end) { boolean[] firstItem = {true}; try { appendable.append(start); this.items.forEachKeyValue(( each, int occurrences) -> { try { for (int i = 0; i \< occurrences; i++) { if (!firstItem[0]) { appendable.append(separator); } appendable.append(String.valueOf(each)); firstItem[0] = false; } } catch (IOException e) { throw new RuntimeException(e); } }); appendable.append(end); } catch (IOException e) { throw new RuntimeException(e); } } @Override public int count(Predicate predicate) { Counter result = new Counter(); this.forEachWithOccurrences(( each, int occurrences) -> { if (predicate.accept(each)) { result.add(occurrences); } }); return result.getCount(); } @Override public boolean anySatisfy(Predicate predicate) { return this.items.keysView().anySatisfy(predicate); } @Override public boolean allSatisfy(Predicate predicate) { return this.items.keysView().allSatisfy(predicate); } @Override public boolean noneSatisfy(Predicate predicate) { return this.items.keysView().noneSatisfy(predicate); } @Override public detectIfNone(Predicate predicate, ifNone) { return this.items.keysView().detectIfNone(predicate, ifNone); } @Override public \ MutableBag\ collect(ToObjectFunction\ function) { HashBag\ result = HashBag.newBag(this.items.size()); this.forEachWithOccurrences(( each, int occurrences) -> result.addOccurrences(function.valueOf(each), occurrences)); return result; } @Override public max() { if (this.isEmpty()) { throw new NoSuchElementException(); } return this.items.keysView().max(); } @Override public min() { if (this.isEmpty()) { throw new NoSuchElementException(); } return this.items.keysView().min(); } @Override public sum() { [] result = {}; [] compensation = {}; this.forEachWithOccurrences(( each, int occurrences) -> { for (int i = 0; i \< occurrences; i++) { adjustedValue = () each - compensation[0]; nextSum = result[0] + adjustedValue; compensation[0] = nextSum - result[0] - adjustedValue; result[0] = nextSum; } }); return result[0]; } public sum() { [] result = {}; this.forEachWithOccurrences(( each, int occurrences) -> result[0] += () each * occurrences); return result[0]; } @Override public [] toArray() { [] array = new [this.size()]; int[] index = {0}; this.forEachWithOccurrences(( each, int occurrences) -> { for (int i = 0; i \< occurrences; i++) { array[index[0]] = each; index[0]++; } }); return array; } @Override public [] toArray([] array) { if (array.length \< this.size()) { array = new [this.size()]; } int[] index = {0}; [] finalBypass = array; this.forEachWithOccurrences(( each, int occurrences) -> { for (int i = 0; i \< occurrences; i++) { finalBypass[index[0]] = each; index[0]++; } }); return array; } @Override public MutableBag asUnmodifiable() { return new UnmodifiableBag(this); } @Override public MutableBag asSynchronized() { return new SynchronizedBag(this); } @Override public ImmutableBag toImmutable() { return Bags.immutable.withAll(this); } /** * Creates a new empty HashBag. * * @since 9.2. */ @Override public HashBag newEmpty() { return new HashBag(); } @Override public MutableIterator Iterator() { return new InternalIterator(); } @Override public void writeExternal(ObjectOutput out) throws IOException { out.writeInt(this.items.size()); try { this.items.forEachKeyValue(( each, int occurrences) -> { try { out.write(each); out.writeInt(occurrences); } catch (IOException e) { throw new RuntimeException(e); } }); } catch (RuntimeException e) { if (e.getCause() instanceof IOException) { throw (IOException) e.getCause(); } throw e; } } @Override public void readExternal(ObjectInput in) throws IOException { int size = in.readInt(); this.items = new IntHashMap(size); for (int i = 0; i \< size; i++) { this.addOccurrences(in.read(), in.readInt()); } } private class InternalIterator implements MutableIterator { private MutableIterator Iterator = HashBag.this.items.keySet().Iterator(); private currentItem; private int occurrences; private boolean canRemove; @Override public boolean hasNext() { return this.occurrences > 0 || this.Iterator.hasNext(); } @Override public next() { if (this.occurrences == 0) { this.currentItem = this.Iterator.next(); this.occurrences = HashBag.this.occurrencesOf(this.currentItem); } this.occurrences--; this.canRemove = true; return this.currentItem; } @Override public void remove() { if (!this.canRemove) { throw new IllegalStateException(); } if (this.occurrences == 0) { this.Iterator.remove(); HashBag.this.size--; } else { HashBag.this.remove(this.currentItem); } this.canRemove = false; } } } >> synchronizedPrimitiveBag.stg000066400000000000000000000162031407344533200412040ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/bag/mutableimport "copyrightAndOthers.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/bag/mutable/primitive" fileName(primitive) ::= "SynchronizedBag" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.bag.mutable.primitive; import java.util.Collection; import java.util.Collections; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.bag.MutableBag; import org.eclipse.collections.api.bag.primitive.ImmutableBag; import org.eclipse.collections.api.bag.primitive.MutableBag; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.IntPredicate; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.IntProcedure; import org.eclipse.collections.api.iterator.Iterator; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.tuple.primitive.IntPair; import org.eclipse.collections.impl.collection.mutable.primitive.AbstractSynchronizedCollection; import org.eclipse.collections.impl.factory.primitive.Bags; import org.eclipse.collections.impl.lazy.primitive.LazyIterableAdapter; import org.eclipse.collections.api.set.primitive.MutableSet; /** * A synchronized view of a {@link MutableBag}. It is imperative that the user manually synchronize on the collection when iterating over it using the * {@link Iterator}, as per {@link Collections#synchronizedCollection(Collection)}. * \

* This file was automatically generated from template file synchronizedPrimitiveBag.stg. * * @see MutableBag#asSynchronized() * @see MutableBag#asSynchronized() * @since 3.1. */ public class SynchronizedBag extends AbstractSynchronizedCollection implements MutableBag { private static final long serialVersionUID = 1L; public SynchronizedBag(MutableBag bag) { super(bag); } public SynchronizedBag(MutableBag bag, Object newLock) { super(bag, newLock); } private MutableBag getMutableBag() { return (MutableBag) this.getCollection(); } @Override public SynchronizedBag with( element) { synchronized (this.getLock()) { this.getMutableBag().add(element); } return this; } @Override public SynchronizedBag without( element) { synchronized (this.getLock()) { this.getMutableBag().remove(element); } return this; } @Override public SynchronizedBag withAll(Iterable elements) { synchronized (this.getLock()) { this.getMutableBag().addAll(elements.toArray()); } return this; } @Override public SynchronizedBag withoutAll(Iterable elements) { synchronized (this.getLock()) { this.getMutableBag().removeAll(elements); } return this; } @Override public void addOccurrences( item, int occurrences) { synchronized (this.getLock()) { this.getMutableBag().addOccurrences(item, occurrences); } } @Override public boolean removeOccurrences( item, int occurrences) { synchronized (this.getLock()) { return this.getMutableBag().removeOccurrences(item, occurrences); } } @Override public int sizeDistinct() { synchronized (this.getLock()) { return this.getMutableBag().sizeDistinct(); } } @Override public int occurrencesOf( item) { synchronized (this.getLock()) { return this.getMutableBag().occurrencesOf(item); } } @Override public void forEachWithOccurrences(IntProcedure procedure) { synchronized (this.getLock()) { this.getMutableBag().forEachWithOccurrences(procedure); } } @Override public MutableBag select(Predicate predicate) { synchronized (this.getLock()) { return this.getMutableBag().select(predicate); } } @Override public MutableBag selectByOccurrences(IntPredicate predicate) { synchronized (this.getLock()) { return this.getMutableBag().selectByOccurrences(predicate); } } @Override public MutableSet selectUnique() { synchronized (this.getLock()) { return this.getMutableBag().selectUnique(); } } @Override public MutableList\<IntPair> topOccurrences(int count) { synchronized (this.getLock()) { return this.getMutableBag().topOccurrences(count); } } @Override public MutableList\<IntPair> bottomOccurrences(int count) { synchronized (this.getLock()) { return this.getMutableBag().bottomOccurrences(count); } } @Override public MutableBag reject(Predicate predicate) { synchronized (this.getLock()) { return this.getMutableBag().reject(predicate); } } @Override public \ MutableBag\ collect(ToObjectFunction\ function) { synchronized (this.getLock()) { return this.getMutableBag().collect(function); } } @Override public boolean equals(Object otherBag) { synchronized (this.getLock()) { return this.getMutableBag().equals(otherBag); } } @Override public int hashCode() { synchronized (this.getLock()) { return this.getMutableBag().hashCode(); } } @Override public LazyIterable asLazy() { synchronized (this.getLock()) { return new LazyIterableAdapter(this); } } @Override public MutableBag asUnmodifiable() { synchronized (this.getLock()) { return new UnmodifiableBag(this); } } @Override public MutableBag asSynchronized() { return this; } @Override public ImmutableBag toImmutable() { synchronized (this.getLock()) { return Bags.immutable.withAll(this); } } /** * @since 9.2. */ @Override public MutableBag newEmpty() { synchronized (this.getLock()) { return this.getMutableBag().newEmpty(); } } } >> unmodifiablePrimitiveBag.stg000066400000000000000000000123331407344533200411230ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/bag/mutableimport "copyrightAndOthers.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/bag/mutable/primitive" fileName(primitive) ::= "UnmodifiableBag" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.bag.mutable.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.bag.MutableBag; import org.eclipse.collections.api.bag.primitive.ImmutableBag; import org.eclipse.collections.api.bag.primitive.MutableBag; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.IntPredicate; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.IntProcedure; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.tuple.primitive.IntPair; import org.eclipse.collections.impl.collection.mutable.primitive.AbstractUnmodifiableCollection; import org.eclipse.collections.impl.factory.primitive.Bags; import org.eclipse.collections.api.set.primitive.MutableSet; /** * This file was automatically generated from template file unmodifiablePrimitiveBag.stg. * * @since 3.1. */ public class UnmodifiableBag extends AbstractUnmodifiableCollection implements MutableBag { private static final long serialVersionUID = 1L; public UnmodifiableBag(MutableBag bag) { super(bag); } private MutableBag getMutableBag() { return (MutableBag) this.getCollection(); } @Override public UnmodifiableBag with( element) { throw new UnsupportedOperationException("Cannot call with() on " + this.getClass().getSimpleName()); } @Override public UnmodifiableBag without( element) { throw new UnsupportedOperationException("Cannot call without() on " + this.getClass().getSimpleName()); } @Override public UnmodifiableBag withAll(Iterable elements) { throw new UnsupportedOperationException("Cannot call withAll() on " + this.getClass().getSimpleName()); } @Override public UnmodifiableBag withoutAll(Iterable elements) { throw new UnsupportedOperationException("Cannot call withoutAll() on " + this.getClass().getSimpleName()); } @Override public void addOccurrences( item, int occurrences) { throw new UnsupportedOperationException("Cannot call addOccurrences() on " + this.getClass().getSimpleName()); } @Override public boolean removeOccurrences( item, int occurrences) { throw new UnsupportedOperationException("Cannot call removeOccurrences() on " + this.getClass().getSimpleName()); } @Override public int sizeDistinct() { return this.getMutableBag().sizeDistinct(); } @Override public int occurrencesOf( item) { return this.getMutableBag().occurrencesOf(item); } @Override public void forEachWithOccurrences(IntProcedure procedure) { this.getMutableBag().forEachWithOccurrences(procedure); } @Override public MutableBag selectByOccurrences(IntPredicate predicate) { return this.getMutableBag().selectByOccurrences(predicate); } @Override public MutableSet selectUnique() { return this.getMutableBag().selectUnique(); } @Override public MutableList\<IntPair> topOccurrences(int count) { return this.getMutableBag().topOccurrences(count); } @Override public MutableList\<IntPair> bottomOccurrences(int count) { return this.getMutableBag().bottomOccurrences(count); } @Override public MutableBag select(Predicate predicate) { return this.getMutableBag().select(predicate); } @Override public MutableBag reject(Predicate predicate) { return this.getMutableBag().reject(predicate); } @Override public \ MutableBag\ collect(ToObjectFunction\ function) { return this.getMutableBag().collect(function); } @Override public boolean equals(Object otherBag) { return this.getMutableBag().equals(otherBag); } @Override public int hashCode() { return this.getMutableBag().hashCode(); } @Override public MutableBag asUnmodifiable() { return this; } @Override public MutableBag asSynchronized() { return new SynchronizedBag(this); } @Override public ImmutableBag toImmutable() { return Bags.immutable.withAll(this); } /** * @since 9.2. */ public MutableBag newEmpty() { return this.getMutableBag().newEmpty(); } } >> eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/block/000077500000000000000000000000001407344533200324305ustar00rootroot00000000000000comparator/000077500000000000000000000000001407344533200345205ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/blockprimitiveFunctionComparator.stg000066400000000000000000000024131407344533200430050ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/block/comparatorimport "copyright.stg" import "primitiveCompare.stg" targetPath() ::= "org/eclipse/collections/impl/block/comparator/primitive" fileName(primitive) ::= "FunctionComparator" class(primitive) ::= << >> body(type, name, wrapperName) ::= << package org.eclipse.collections.impl.block.comparator.primitive; import org.eclipse.collections.api.block.SerializableComparator; import org.eclipse.collections.api.block.function.primitive.Function; /** * A Comparator which takes a Function to compare a primitive value retrieved from an object. * This file was automatically generated from template file primitiveFunctionComparator.stg. */ public class FunctionComparator\ implements SerializableComparator\ { private static final long serialVersionUID = 1L; private final Function\ function; public FunctionComparator(Function\ function) { this.function = function; } @Override public int compare(T o1, T o2) { one = this.function.ValueOf(o1); two = this.function.ValueOf(o2); return <(compare.(type))("one", "two", wrapperName)>; } } >> factory/000077500000000000000000000000001407344533200340205ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/blockprimitiveEqualsWithDelta.stg000066400000000000000000000023241407344533200415310ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/block/factoryequalWithDelta ::= [ "byte": "equalWithoutDelta", "short": "equalWithoutDelta", "char": "equalWithoutDelta", "int": "equalWithoutDelta", "long": "equalWithoutDelta", "float": "equalWithDelta", "double": "equalWithDelta" ] equalsWithDeltaClass ::= [ "byte": "equalWithoutDelta", "short": "equalWithoutDelta", "char": "equalWithoutDelta", "int": "equalWithoutDelta", "long": "equalWithoutDelta", "float": "equalsWithDeltaClass", "double": "equalsWithDeltaClass" ] equalWithoutDelta() ::= "" equalWithDelta() ::= << public static Predicate equal( expected, delta) { return new EqualsWithDeltaPredicate(expected, delta); } >> equalsWithDeltaClass() ::= << private static final class EqualsWithDeltaPredicate implements Predicate { private static final long serialVersionUID = 1L; private final expected; private final delta; private EqualsWithDeltaPredicate( expected, delta) { this.expected = expected; this.delta = delta; } @Override public boolean accept( actual) { return Math.abs(this.expected - actual) \<= this.delta; } } >> primitivePredicates.stg000066400000000000000000000130671407344533200405620ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/block/factoryimport "copyright.stg" import "primitiveEquals.stg" import "primitiveEqualsWithDelta.stg" import "specialPredicates.stg" targetPath() ::= "org/eclipse/collections/impl/block/factory/primitive" fileName(primitive) ::= "Predicates" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.block.factory.primitive; import org.eclipse.collections.api.block.predicate.primitive.Predicate; /** * Provides a set of common predicates for values. * This file was automatically generated from template file primitivePredicates.stg. */ public final class Predicates { <(intPredicateConstants.(type))()> <(charPredicateConstants.(type))()> private static final Predicate ALWAYS_TRUE = new AlwaysTruePredicate(); private static final Predicate ALWAYS_FALSE = new AlwaysFalsePredicate(); private Predicates() { throw new AssertionError("Suppress default constructor for noninstantiability"); } @SuppressWarnings("MisspelledEquals") public static Predicate equal( expected) { return new EqualsPredicate(expected); } <(equalWithDelta.(type))()> public static Predicate lessThan( expected) { return new LessThanPredicate(expected); } public static Predicate greaterThan( expected) { return new GreaterThanPredicate(expected); } <(intPredicateMethods.(type))()> <(charPredicateMethods.(type))()> public static Predicate alwaysTrue() { return ALWAYS_TRUE; } public static Predicate alwaysFalse() { return ALWAYS_FALSE; } public static Predicate and(Predicate one, Predicate two) { return new AndPredicate(one, two); } public static Predicate or(Predicate one, Predicate two) { return new OrPredicate(one, two); } public static Predicate not(Predicate negate) { return new NotPredicate(negate); } private static final class EqualsPredicate implements Predicate { private static final long serialVersionUID = 1L; private final expected; private EqualsPredicate( expected) { this.expected = expected; } @Override public boolean accept( actual) { return <(equals.(type))("actual", "this.expected")>; } } <(equalsWithDeltaClass.(type))()> private static final class LessThanPredicate implements Predicate { private static final long serialVersionUID = 1L; private final expected; private LessThanPredicate( expected) { this.expected = expected; } @Override public boolean accept( actual) { return actual \< this.expected; } } private static final class GreaterThanPredicate implements Predicate { private static final long serialVersionUID = 1L; private final expected; private GreaterThanPredicate( expected) { this.expected = expected; } @Override public boolean accept( actual) { return actual > this.expected; } } private static final class AndPredicate implements Predicate { private static final long serialVersionUID = 1L; private final Predicate one; private final Predicate two; private AndPredicate(Predicate one, Predicate two) { this.one = one; this.two = two; } @Override public boolean accept( actual) { return this.one.accept(actual) && this.two.accept(actual); } } private static final class OrPredicate implements Predicate { private static final long serialVersionUID = 1L; private final Predicate one; private final Predicate two; private OrPredicate(Predicate one, Predicate two) { this.one = one; this.two = two; } @Override public boolean accept( actual) { return this.one.accept(actual) || this.two.accept(actual); } } private static final class NotPredicate implements Predicate { private static final long serialVersionUID = 1L; private final Predicate negate; private NotPredicate(Predicate negate) { this.negate = negate; } @Override public boolean accept( actual) { return !this.negate.accept(actual); } } <(intPredicateClasses.(type))()> <(charPredicateClasses.(type))()> private static final class AlwaysTruePredicate implements Predicate { private static final long serialVersionUID = 1L; @Override public boolean accept( value) { return true; } } private static final class AlwaysFalsePredicate implements Predicate { private static final long serialVersionUID = 1L; @Override public boolean accept( value) { return false; } } } >> specialPredicates.stg000066400000000000000000000121031407344533200401600ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/block/factoryintPredicateConstants ::= [ "byte": "allIntPredicateConstants", "short": "allIntPredicateConstants", "int": "allIntPredicateConstants", "long": "allIntPredicateConstants", default: "noPredicates" ] intPredicateMethods ::= [ "byte": "allIntPredicateMethods", "short": "allIntPredicateMethods", "int": "allIntPredicateMethods", "long": "allIntPredicateMethods", default: "noPredicates" ] intPredicateClasses ::= [ "byte": "allIntPredicateClasses", "short": "allIntPredicateClasses", "int": "allIntPredicateClasses", "long": "allIntPredicateClasses", default: "noPredicates" ] noPredicates() ::= "" allIntPredicateConstants() ::= << private static final IsEvenPredicate IS_EVEN = new IsEvenPredicate(); private static final IsOddPredicate IS_ODD = new IsOddPredicate(); >> allIntPredicateMethods() ::= << public static Predicate isEven() { return IS_EVEN; } public static Predicate isOdd() { return IS_ODD; } >> allIntPredicateClasses() ::= << private static final class IsEvenPredicate implements Predicate { private static final long serialVersionUID = 1L; @Override public boolean accept( integral) { return integral % 2 == 0; } } private static final class IsOddPredicate implements Predicate { private static final long serialVersionUID = 1L; @Override public boolean accept( integral) { return integral % 2 != 0; } } >> charPredicateConstants ::= [ "char": "allCharPredicateConstants", default: "noPredicates" ] allCharPredicateConstants() ::= << private static final IsUpperCaseCharPredicate IS_UPPER_CASE = new IsUpperCaseCharPredicate(); private static final IsLowerCaseCharPredicate IS_LOWER_CASE = new IsLowerCaseCharPredicate(); private static final IsDigitCharPredicate IS_DIGIT = new IsDigitCharPredicate(); private static final IsDigitOrDotCharPredicate IS_DIGIT_OR_DOT = new IsDigitOrDotCharPredicate(); private static final IsLetterCharPredicate IS_LETTER = new IsLetterCharPredicate(); private static final IsLetterOrDigitCharPredicate IS_LETTER_OR_DIGIT = new IsLetterOrDigitCharPredicate(); private static final IsWhiteSpaceCharPredicate IS_WHITESPACE = new IsWhiteSpaceCharPredicate(); private static final IsUndefinedCharPredicate IS_UNDEFINED = new IsUndefinedCharPredicate(); >> charPredicateMethods ::= [ "char": "allCharPredicateMethods", default: "noPredicates" ] allCharPredicateMethods() ::= << public static CharPredicate isUpperCase() { return IS_UPPER_CASE; } public static CharPredicate isLowerCase() { return IS_LOWER_CASE; } public static CharPredicate isDigit() { return IS_DIGIT; } public static CharPredicate isDigitOrDot() { return IS_DIGIT_OR_DOT; } public static CharPredicate isLetter() { return IS_LETTER; } public static CharPredicate isLetterOrDigit() { return IS_LETTER_OR_DIGIT; } public static CharPredicate isWhitespace() { return IS_WHITESPACE; } public static CharPredicate isUndefined() { return IS_UNDEFINED; } >> charPredicateClasses ::= [ "char": "allCharPredicateClasses", default: "noPredicates" ] allCharPredicateClasses() ::= << private static class IsUpperCaseCharPredicate implements CharPredicate { private static final long serialVersionUID = 1L; @Override public boolean accept(char value) { return Character.isUpperCase(value); } } private static class IsLowerCaseCharPredicate implements CharPredicate { private static final long serialVersionUID = 1L; @Override public boolean accept(char value) { return Character.isLowerCase(value); } } private static class IsDigitCharPredicate implements CharPredicate { private static final long serialVersionUID = 1L; @Override public boolean accept(char value) { return Character.isDigit(value); } } private static class IsDigitOrDotCharPredicate implements CharPredicate { private static final long serialVersionUID = 1L; @Override public boolean accept(char value) { return Character.isDigit(value) || value == '.'; } } private static class IsLetterCharPredicate implements CharPredicate { private static final long serialVersionUID = 1L; @Override public boolean accept(char value) { return Character.isLetter(value); } } private static class IsLetterOrDigitCharPredicate implements CharPredicate { private static final long serialVersionUID = 1L; @Override public boolean accept(char value) { return Character.isLetterOrDigit(value); } } private static class IsWhiteSpaceCharPredicate implements CharPredicate { private static final long serialVersionUID = 1L; @Override public boolean accept(char value) { return Character.isWhitespace(value); } } private static class IsUndefinedCharPredicate implements CharPredicate { private static final long serialVersionUID = 1L; @Override public boolean accept(char value) { return !Character.isDefined(value); } } >> function/000077500000000000000000000000001407344533200341765ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/blockprimitiveCaseFunction.stg000066400000000000000000000046311407344533200412330ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/block/functionimport "copyright.stg" skipBoolean() ::= "false" targetPath() ::= "org/eclipse/collections/impl/block/function/primitive" fileName(primitive) ::= "CaseFunction" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.block.function.primitive; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.tuple.Pair; import org.eclipse.collections.impl.factory.Lists; import org.eclipse.collections.impl.tuple.Tuples; /** * This file was automatically generated from template file primitiveCaseFunction.stg. */ public class CaseFunction\ implements ToObjectFunction\ { private static final long serialVersionUID = 1L; private final MutableList\Predicate, ToObjectFunction\\>> predicateFunctions = Lists.mutable.empty(); private ToObjectFunction\ defaultFunction; public CaseFunction() { } public CaseFunction(ToObjectFunction\ newDefaultFunction) { this.setDefault(newDefaultFunction); } public CaseFunction\ addCase( Predicate predicate, ToObjectFunction\ function) { this.predicateFunctions.add(Tuples.pair(predicate, function)); return this; } public CaseFunction\ setDefault(ToObjectFunction\ function) { this.defaultFunction = function; return this; } @Override public V valueOf( argument) { int localSize = this.predicateFunctions.size(); for (int i = 0; i \< localSize; i++) { Pair\<Predicate, ToObjectFunction\> pair = this.predicateFunctions.get(i); if (pair.getOne().accept(argument)) { return pair.getTwo().valueOf(argument); } } if (this.defaultFunction != null) { return this.defaultFunction.valueOf(argument); } return null; } @Override public String toString() { return "new CaseFunction(" + this.predicateFunctions + ')'; } } >> procedure/000077500000000000000000000000001407344533200343415ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/blockchecked/000077500000000000000000000000001407344533200357275ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/block/procedurecheckedObjectPrimitiveProcedure.stg000066400000000000000000000023351407344533200447300ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/block/procedure/checkedimport "copyright.stg" skipBooleanKeys() ::= "true" targetPath() ::= "org/eclipse/collections/impl/block/procedure/checked/primitive" fileName(primitive) ::= "CheckedObjectProcedure" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.block.procedure.checked.primitive; import org.eclipse.collections.api.block.procedure.primitive.ObjectProcedure; /** * This file was automatically generated from template file checkedObjectPrimitiveProcedure.stg. * * @since 4.0. */ public abstract class CheckedObjectProcedure\ implements ObjectProcedure\ { private static final long serialVersionUID = 1L; @Override public final void value(V item1, item2) { try { this.safeValue(item1, item2); } catch (RuntimeException e) { throw e; } catch (Exception e) { throw new RuntimeException("Checked exception caught in ObjectProcedure", e); } } @SuppressWarnings("ProhibitedExceptionDeclared") public abstract void safeValue(V item1, item2) throws Exception; } >> checkedPrimitiveObjectProcedure.stg000066400000000000000000000023351407344533200447300ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/block/procedure/checkedimport "copyright.stg" skipBooleanKeys() ::= "true" targetPath() ::= "org/eclipse/collections/impl/block/procedure/checked/primitive" fileName(primitive) ::= "CheckedObjectProcedure" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.block.procedure.checked.primitive; import org.eclipse.collections.api.block.procedure.primitive.ObjectProcedure; /** * This file was automatically generated from template file checkedPrimitiveObjectProcedure.stg. * * @since 4.0. */ public abstract class CheckedObjectProcedure\ implements ObjectProcedure\ { private static final long serialVersionUID = 1L; @Override public final void value( item1, V item2) { try { this.safeValue(item1, item2); } catch (RuntimeException e) { throw e; } catch (Exception e) { throw new RuntimeException("Checked exception caught in ObjectProcedure", e); } } @SuppressWarnings("ProhibitedExceptionDeclared") public abstract void safeValue( item1, V item2) throws Exception; } >> checkedPrimitivePrimitiveProcedure.stg000066400000000000000000000026151407344533200454730ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/block/procedure/checkedimport "copyright.stg" hasTwoPrimitives() ::= "true" skipBooleanKeys() ::= "true" targetPath() ::= "org/eclipse/collections/impl/block/procedure/checked/primitive" fileName(primitive1, primitive2, sameTwoPrimitives) ::= "CheckedProcedure" class(primitive1, primitive2, sameTwoPrimitives) ::= << >> body(type1, type2, name1, name2) ::= << package org.eclipse.collections.impl.block.procedure.checked.primitive; import org.eclipse.collections.api.block.procedure.primitive.Procedure; /** * This file was automatically generated from template file checkedPrimitivePrimitiveProcedure.stg. * * @since 4.0. */ public abstract class CheckedProcedure implements Procedure { private static final long serialVersionUID = 1L; @Override public final void value( item1, item2) { try { this.safeValue(item1, item2); } catch (RuntimeException e) { throw e; } catch (Exception e) { throw new RuntimeException("Checked exception caught in Procedure", e); } } @SuppressWarnings("ProhibitedExceptionDeclared") public abstract void safeValue( item1, item2) throws Exception; } >> checkedPrimitiveProcedure.stg000066400000000000000000000021451407344533200436000ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/block/procedure/checkedimport "copyright.stg" targetPath() ::= "org/eclipse/collections/impl/block/procedure/checked/primitive" fileName(primitive) ::= "CheckedProcedure" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.block.procedure.checked.primitive; import org.eclipse.collections.api.block.procedure.primitive.Procedure; /** * This file was automatically generated from template file checkedPrimitiveProcedure.stg. */ public abstract class CheckedProcedure implements Procedure { private static final long serialVersionUID = 1L; @Override public final void value( item) { try { this.safeValue(item); } catch (RuntimeException e) { throw e; } catch (Exception e) { throw new RuntimeException("Checked exception caught in Procedure", e); } } @SuppressWarnings("ProhibitedExceptionDeclared") public abstract void safeValue( item) throws Exception; } >> collectPrimitiveProcedure.stg000066400000000000000000000027711407344533200422560ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/block/procedureimport "copyright.stg" skipBoolean() ::= "false" targetPath() ::= "org/eclipse/collections/impl/block/procedure/primitive" fileName(primitive) ::= "CollectProcedure" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.block.procedure.primitive; import org.eclipse.collections.api.block.function.primitive.Function; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.collection.primitive.MutableCollection; /** * Applies a Function to an object and adds the result to a target collection. * * This file was automatically generated from template file CollectPrimitiveProcedure.stg. */ public final class CollectProcedure\ implements Procedure\ { private static final long serialVersionUID = 1L; private final Function\ Function; private final MutableCollection Collection; public CollectProcedure(Function\ Function, MutableCollection targetCollection) { this.Function = Function; this.Collection = targetCollection; } @Override public void value(T object) { value = this.Function.ValueOf(object); this.Collection.add(value); } public MutableCollection getCollection() { return this.Collection; } } >>primitiveCaseProcedure.stg000066400000000000000000000044101407344533200415340ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/block/procedureimport "copyright.stg" skipBoolean() ::= "false" targetPath() ::= "org/eclipse/collections/impl/block/procedure/primitive" fileName(primitive) ::= "CaseProcedure" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.block.procedure.primitive; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.tuple.Pair; import org.eclipse.collections.impl.factory.Lists; import org.eclipse.collections.impl.tuple.Tuples; /** * This file was automatically generated from template file primitiveCaseProcedure.stg. */ public class CaseProcedure implements Procedure { private static final long serialVersionUID = 1L; private final MutableList\Predicate, Procedure>\> predicateProcedures = Lists.mutable.empty(); private Procedure defaultProcedure; public CaseProcedure() { } public CaseProcedure(Procedure newDefaultProcedure) { this.setDefault(newDefaultProcedure); } public CaseProcedure addCase( Predicate predicate, Procedure procedure) { this.predicateProcedures.add(Tuples.pair(predicate, procedure)); return this; } public CaseProcedure setDefault(Procedure procedure) { this.defaultProcedure = procedure; return this; } @Override public void value( argument) { int localSize = this.predicateProcedures.size(); for (int i = 0; i \< localSize; i++) { Pair\<Predicate, Procedure> pair = this.predicateProcedures.get(i); if (pair.getOne().accept(argument)) { pair.getTwo().value(argument); return; } } if (this.defaultProcedure != null) { this.defaultProcedure.value(argument); } } @Override public String toString() { return "new CaseProcedure(" + this.predicateProcedures + ')'; } } >> sumOfPrimitiveProcedure.stg000066400000000000000000000024001407344533200417070ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/block/procedureimport "copyright.stg" skipBoolean() ::= "true" targetPath() ::= "org/eclipse/collections/impl/block/procedure" fileName(primitive) ::= "SumOfProcedure" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.block.procedure; import org.eclipse.collections.api.block.function.Function; import org.eclipse.collections.api.block.function.primitive.Function; import org.eclipse.collections.api.block.procedure.Procedure; /** * Implementation of {@link Procedure} that holds on to the summation of elements seen so far, * determined by the {@link Function}. * * This file was automatically generated from template file sumOfPrimitiveProcedure.stg. */ public class SumOfProcedure\ implements Procedure\ { private static final long serialVersionUID = 1L; protected final Function\ function; protected result; public SumOfProcedure(Function\ function) { this.function = function; } public getResult() { return this.result; } @Override public void value(T each) { this.result += this.function.ValueOf(each); } } >> eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/collection/000077500000000000000000000000001407344533200334715ustar00rootroot00000000000000mutable/000077500000000000000000000000001407344533200350435ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/collectionabstractSynchronizedPrimitiveCollection.stg000066400000000000000000000342561407344533200457040ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/collection/mutableimport "copyrightAndOthers.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/collection/mutable/primitive" fileName(primitive) ::= "AbstractSynchronizedCollection" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.collection.mutable.primitive; import java.io.Serializable; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.bag.primitive.MutableBag; import org.eclipse.collections.api.block.function.primitive.<(wideName.(type))>To<(wideName.(type))>Function; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ObjectToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.collection.MutableCollection; import org.eclipse.collections.api.collection.primitive.ImmutableCollection; import org.eclipse.collections.api.collection.primitive.MutableCollection; import org.eclipse.collections.api.iterator.MutableIterator; import org.eclipse.collections.api.list.primitive.MutableList; import org.eclipse.collections.api.set.primitive.MutableSet; import org.eclipse.collections.impl.lazy.primitive.LazyIterableAdapter; /** * This file was automatically generated from template file abstractSynchronizedPrimitiveCollection.stg. * * @since 3.1. */ public abstract class AbstractSynchronizedCollection implements MutableCollection, Serializable { private static final long serialVersionUID = 1L; private final Object lock; private final MutableCollection collection; protected AbstractSynchronizedCollection(MutableCollection collection) { this(collection, null); } protected AbstractSynchronizedCollection(MutableCollection collection, Object newLock) { if (collection == null) { throw new IllegalArgumentException("Cannot create a AbstractSynchronizedCollection on a null collection"); } this.collection = collection; this.lock = newLock == null ? this : newLock; } protected Object getLock() { return this.lock; } protected MutableCollection getCollection() { return this.collection; } @Override public int size() { synchronized (this.lock) { return this.collection.size(); } } @Override public boolean isEmpty() { synchronized (this.lock) { return this.collection.isEmpty(); } } @Override public boolean notEmpty() { synchronized (this.lock) { return this.collection.notEmpty(); } } @Override public void clear() { synchronized (this.lock) { this.collection.clear(); } } @Override public MutableCollection select(Predicate predicate) { synchronized (this.lock) { return this.collection.select(predicate); } } @Override public MutableCollection reject(Predicate predicate) { synchronized (this.lock) { return this.collection.reject(predicate); } } @Override public \ MutableCollection\ collect(ToObjectFunction\ function) { synchronized (this.lock) { return this.collection.collect(function); } } @Override public MutableCollection with( element) { synchronized (this.lock) { this.add(element); } return this; } @Override public MutableCollection without( element) { synchronized (this.lock) { this.remove(element); } return this; } @Override public MutableCollection withAll(Iterable elements) { synchronized (this.lock) { this.addAll(elements); } return this; } @Override public MutableCollection withoutAll(Iterable elements) { synchronized (this.lock) { this.removeAll(elements); } return this; } @Override public MutableCollection asUnmodifiable() { return new UnmodifiableCollection(this); } @Override public MutableCollection asSynchronized() { return this; } @Override public ImmutableCollection toImmutable() { synchronized (this.lock) { return this.collection.toImmutable(); } } @Override public LazyIterable asLazy() { return new LazyIterableAdapter(this); } @Override public boolean contains( value) { synchronized (this.lock) { return this.collection.contains(value); } } @Override public boolean containsAll(... source) { synchronized (this.lock) { return this.collection.containsAll(source); } } @Override public boolean containsAll(Iterable source) { synchronized (this.lock) { return this.collection.containsAll(source); } } @Override public boolean containsAny(... source) { synchronized (this.lock) { return this.collection.containsAny(source); } } @Override public boolean containsAny(Iterable source) { synchronized (this.lock) { return this.collection.containsAny(source); } } @Override public boolean containsNone(... source) { synchronized (this.lock) { return this.collection.containsNone(source); } } @Override public boolean containsNone(Iterable source) { synchronized (this.lock) { return this.collection.containsNone(source); } } @Override public boolean add( newItem) { synchronized (this.lock) { return this.collection.add(newItem); } } @Override public boolean addAll(... source) { synchronized (this.lock) { return this.collection.addAll(source); } } @Override public boolean addAll(Iterable source) { synchronized (this.lock) { return this.collection.addAll(source); } } @Override public boolean remove( value) { synchronized (this.lock) { return this.collection.remove(value); } } @Override public boolean removeIf(Predicate predicate) { synchronized (this.lock) { return this.collection.removeIf(predicate); } } @Override public boolean removeAll(Iterable source) { synchronized (this.lock) { return this.collection.removeAll(source); } } @Override public boolean removeAll(... source) { synchronized (this.lock) { return this.collection.removeAll(source); } } @Override public boolean retainAll(Iterable source) { synchronized (this.lock) { return this.collection.retainAll(source); } } @Override public boolean retainAll(... source) { synchronized (this.lock) { return this.collection.retainAll(source); } } /** * Must be called in a synchronized block. */ @Override public MutableIterator Iterator() { return this.collection.Iterator(); } @Override public void forEach(Procedure procedure) { this.each(procedure); } /** * @since 7.0. */ @Override public void each(Procedure procedure) { synchronized (this.lock) { this.collection.forEach(procedure); } } @Override public int count(Predicate predicate) { synchronized (this.lock) { return this.collection.count(predicate); } } @Override public boolean anySatisfy(Predicate predicate) { synchronized (this.lock) { return this.collection.anySatisfy(predicate); } } @Override public boolean allSatisfy(Predicate predicate) { synchronized (this.lock) { return this.collection.allSatisfy(predicate); } } @Override public boolean noneSatisfy(Predicate predicate) { synchronized (this.lock) { return this.collection.noneSatisfy(predicate); } } @Override public detectIfNone(Predicate predicate, ifNone) { synchronized (this.lock) { return this.collection.detectIfNone(predicate, ifNone); } } <(arithmeticMethods.(type))(name, type)> @Override public [] toArray() { synchronized (this.lock) { return this.collection.toArray(); } } @Override public [] toArray([] target) { synchronized (this.lock) { return this.collection.toArray(target); } } @Override public String toString() { synchronized (this.lock) { return this.collection.toString(); } } @Override public String makeString() { synchronized (this.lock) { return this.collection.makeString(); } } @Override public String makeString(String separator) { synchronized (this.lock) { return this.collection.makeString(separator); } } @Override public String makeString(String start, String separator, String end) { synchronized (this.lock) { return this.collection.makeString(start, separator, end); } } @Override public void appendString(Appendable appendable) { synchronized (this.lock) { this.collection.appendString(appendable); } } @Override public void appendString(Appendable appendable, String separator) { synchronized (this.lock) { this.collection.appendString(appendable, separator); } } @Override public void appendString( Appendable appendable, String start, String separator, String end) { synchronized (this.lock) { this.collection.appendString(appendable, start, separator, end); } } @Override public MutableList toList() { synchronized (this.lock) { return this.collection.toList(); } } @Override public MutableSet toSet() { synchronized (this.lock) { return this.collection.toSet(); } } @Override public MutableBag toBag() { synchronized (this.lock) { return this.collection.toBag(); } } @Override public \ T injectInto(T injectedValue, ObjectToObjectFunction\ function) { synchronized (this.lock) { return this.collection.injectInto(injectedValue, function); } } @Override public <(wideType.(type))> reduce(<(wideName.(type))>To<(wideName.(type))>Function accumulator) { synchronized (this.lock) { return this.collection.reduce(accumulator); } } @Override public <(wideType.(type))> reduceIfEmpty(<(wideName.(type))>To<(wideName.(type))>Function accumulator, <(wideType.(type))> defaultValue) { synchronized (this.lock) { return this.collection.reduceIfEmpty(accumulator, defaultValue); } } @Override public RichIterable\<Iterable> chunk(int size) { synchronized (this.lock) { return this.collection.chunk(size); } } } >> arithmeticMethods ::= [ "byte": "allMethods", "short": "allMethods", "char": "allMethods", "int": "allMethods", "long": "allMethods", "float": "allMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods(name, type) ::=<< @Override public sum() { synchronized (this.lock) { return this.collection.sum(); } } @Override public max() { synchronized (this.lock) { return this.collection.max(); } } @Override public min() { synchronized (this.lock) { return this.collection.min(); } } @Override public minIfEmpty( defaultValue) { synchronized (this.lock) { return this.collection.minIfEmpty(defaultValue); } } @Override public maxIfEmpty( defaultValue) { synchronized (this.lock) { return this.collection.maxIfEmpty(defaultValue); } } @Override public double average() { synchronized (this.lock) { return this.collection.average(); } } @Override public double median() { synchronized (this.lock) { return this.collection.median(); } } @Override public MutableList toSortedList() { synchronized (this.lock) { return this.collection.toSortedList(); } } @Override public [] toSortedArray() { synchronized (this.lock) { return this.collection.toSortedArray(); } } >> noMethods(name, type) ::= "" abstractUnmodifiablePrimitiveCollection.stg000066400000000000000000000272211407344533200456150ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/collection/mutableimport "copyrightAndOthers.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/collection/mutable/primitive" fileName(primitive) ::= "AbstractUnmodifiableCollection" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.collection.mutable.primitive; import java.io.Serializable; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.bag.primitive.MutableBag; import org.eclipse.collections.api.block.function.primitive.<(wideName.(type))>To<(wideName.(type))>Function; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ObjectToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.collection.MutableCollection; import org.eclipse.collections.api.collection.primitive.ImmutableCollection; import org.eclipse.collections.api.collection.primitive.MutableCollection; import org.eclipse.collections.api.iterator.MutableIterator; import org.eclipse.collections.api.list.primitive.MutableList; import org.eclipse.collections.api.set.primitive.MutableSet; import org.eclipse.collections.impl.iterator.UnmodifiableIterator; import org.eclipse.collections.impl.lazy.primitive.LazyIterableAdapter; /** * This file was automatically generated from template file abstractUnmodifiablePrimitiveCollection.stg. * * @since 3.1. */ public abstract class AbstractUnmodifiableCollection implements MutableCollection, Serializable { private static final long serialVersionUID = 1L; private final MutableCollection collection; protected AbstractUnmodifiableCollection(MutableCollection collection) { if (collection == null) { throw new IllegalArgumentException("Cannot create a AbstractUnmodifiableCollection on a null collection"); } this.collection = collection; } protected MutableCollection getCollection() { return this.collection; } @Override public int size() { return this.collection.size(); } @Override public boolean isEmpty() { return this.collection.isEmpty(); } @Override public boolean notEmpty() { return this.collection.notEmpty(); } @Override public void clear() { throw new UnsupportedOperationException("Cannot call clear() on " + this.getClass().getSimpleName()); } @Override public boolean contains( value) { return this.collection.contains(value); } @Override public boolean containsAll(... source) { return this.collection.containsAll(source); } @Override public boolean containsAll(Iterable source) { return this.collection.containsAll(source); } @Override public boolean containsAny(... source) { return this.collection.containsAny(source); } @Override public boolean containsAny(Iterable source) { return this.collection.containsAny(source); } @Override public boolean containsNone(... source) { return this.collection.containsNone(source); } @Override public boolean containsNone(Iterable source) { return this.collection.containsNone(source); } @Override public boolean add( newItem) { throw new UnsupportedOperationException("Cannot call add() on " + this.getClass().getSimpleName()); } @Override public boolean addAll(... source) { throw new UnsupportedOperationException("Cannot call addAll() on " + this.getClass().getSimpleName()); } @Override public boolean addAll(Iterable source) { throw new UnsupportedOperationException("Cannot call addAll() on " + this.getClass().getSimpleName()); } @Override public boolean remove( value) { throw new UnsupportedOperationException("Cannot call remove() on " + this.getClass().getSimpleName()); } /** * @since 9.1 */ @Override public boolean removeIf(Predicate predicate) { throw new UnsupportedOperationException("Cannot call removeIf() on " + this.getClass().getSimpleName()); } @Override public boolean removeAll(Iterable source) { throw new UnsupportedOperationException("Cannot call removeAll() on " + this.getClass().getSimpleName()); } @Override public boolean removeAll(... source) { throw new UnsupportedOperationException("Cannot call removeAll() on " + this.getClass().getSimpleName()); } @Override public boolean retainAll(Iterable source) { throw new UnsupportedOperationException("Cannot call retainAll() on " + this.getClass().getSimpleName()); } @Override public boolean retainAll(... source) { throw new UnsupportedOperationException("Cannot call retainAll() on " + this.getClass().getSimpleName()); } @Override public MutableIterator Iterator() { return new UnmodifiableIterator(this.collection.Iterator()); } @Override public void forEach(Procedure procedure) { this.each(procedure); } /** * @since 7.0. */ @Override public void each(Procedure procedure) { this.collection.forEach(procedure); } @Override public int count(Predicate predicate) { return this.collection.count(predicate); } @Override public boolean anySatisfy(Predicate predicate) { return this.collection.anySatisfy(predicate); } @Override public boolean allSatisfy(Predicate predicate) { return this.collection.allSatisfy(predicate); } @Override public boolean noneSatisfy(Predicate predicate) { return this.collection.noneSatisfy(predicate); } @Override public MutableCollection select(Predicate predicate) { return this.collection.select(predicate); } @Override public MutableCollection reject(Predicate predicate) { return this.collection.reject(predicate); } @Override public \ MutableCollection\ collect(ToObjectFunction\ function) { return this.collection.collect(function); } @Override public MutableCollection with( element) { throw new UnsupportedOperationException("Cannot call with() on " + this.getClass().getSimpleName()); } @Override public MutableCollection without( element) { throw new UnsupportedOperationException("Cannot call without() on " + this.getClass().getSimpleName()); } @Override public MutableCollection withAll(Iterable elements) { throw new UnsupportedOperationException("Cannot call withAll() on " + this.getClass().getSimpleName()); } @Override public MutableCollection withoutAll(Iterable elements) { throw new UnsupportedOperationException("Cannot call withoutAll() on " + this.getClass().getSimpleName()); } @Override public MutableCollection asUnmodifiable() { return this; } @Override public MutableCollection asSynchronized() { return new SynchronizedCollection(this); } @Override public ImmutableCollection toImmutable() { return this.collection.toImmutable(); } @Override public LazyIterable asLazy() { return new LazyIterableAdapter(this); } @Override public detectIfNone(Predicate predicate, ifNone) { return this.collection.detectIfNone(predicate, ifNone); } <(arithmeticMethods.(type))(name, type)> @Override public [] toArray() { return this.collection.toArray(); } @Override public [] toArray([] target) { return this.collection.toArray(target); } @Override public String toString() { return this.collection.toString(); } @Override public String makeString() { return this.collection.makeString(); } @Override public String makeString(String separator) { return this.collection.makeString(separator); } @Override public String makeString(String start, String separator, String end) { return this.collection.makeString(start, separator, end); } @Override public void appendString(Appendable appendable) { this.collection.appendString(appendable); } @Override public void appendString(Appendable appendable, String separator) { this.collection.appendString(appendable, separator); } @Override public void appendString( Appendable appendable, String start, String separator, String end) { this.collection.appendString(appendable, start, separator, end); } @Override public MutableList toList() { return this.collection.toList(); } @Override public MutableSet toSet() { return this.collection.toSet(); } @Override public MutableBag toBag() { return this.collection.toBag(); } @Override public \ T injectInto(T injectedValue, ObjectToObjectFunction\ function) { return this.collection.injectInto(injectedValue, function); } @Override public <(wideType.(type))> reduce(<(wideName.(type))>To<(wideName.(type))>Function accumulator) { return this.collection.reduce(accumulator); } @Override public <(wideType.(type))> reduceIfEmpty(<(wideName.(type))>To<(wideName.(type))>Function accumulator, <(wideType.(type))> defaultValue) { return this.collection.reduceIfEmpty(accumulator, defaultValue); } @Override public RichIterable\<Iterable> chunk(int size) { return this.collection.chunk(size); } } >> arithmeticMethods ::= [ "byte": "allMethods", "short": "allMethods", "char": "allMethods", "int": "allMethods", "long": "allMethods", "float": "allMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods(name, type) ::=<< @Override public sum() { return this.collection.sum(); } @Override public max() { return this.collection.max(); } @Override public min() { return this.collection.min(); } @Override public minIfEmpty( defaultValue) { return this.collection.minIfEmpty(defaultValue); } @Override public maxIfEmpty( defaultValue) { return this.collection.maxIfEmpty(defaultValue); } @Override public double average() { return this.collection.average(); } @Override public double median() { return this.collection.median(); } @Override public MutableList toSortedList() { return this.collection.toSortedList(); } @Override public [] toSortedArray() { return this.collection.toSortedArray(); } >> noMethods(name, type) ::= "" synchronizedPrimitiveCollection.stg000066400000000000000000000036631407344533200442160ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/collection/mutableimport "copyrightAndOthers.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/collection/mutable/primitive" fileName(primitive) ::= "SynchronizedCollection" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.collection.mutable.primitive; import org.eclipse.collections.api.collection.primitive.MutableCollection; import org.eclipse.collections.impl.bag.mutable.primitive.HashBag; /** * This file was automatically generated from template file synchronizedPrimitiveCollection.stg. * * @since 4.0. */ public class SynchronizedCollection extends AbstractSynchronizedCollection { private static final long serialVersionUID = 1L; protected SynchronizedCollection(MutableCollection collection) { this(collection, null); } protected SynchronizedCollection(MutableCollection collection, Object newLock) { super(collection, newLock); } /** * This method will take a MutableCollection and wrap it directly in a SynchronizedCollection. */ public static SynchronizedCollection of(MutableCollection collection) { return new SynchronizedCollection(collection); } /** * This method will take a MutableCollection and wrap it directly in a SynchronizedCollection. * Additionally, a developer specifies which lock to use with the collection. */ public static SynchronizedCollection of(MutableCollection collection, Object lock) { return new SynchronizedCollection(collection, lock); } /** * @since 9.2. */ @Override public MutableCollection newEmpty() { return new HashBag(); } } >> unmodifiablePrimitiveCollection.stg000066400000000000000000000030671407344533200441330ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/collection/mutableimport "copyrightAndOthers.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/collection/mutable/primitive" fileName(primitive) ::= "UnmodifiableCollection" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.collection.mutable.primitive; import org.eclipse.collections.api.collection.primitive.MutableCollection; import org.eclipse.collections.impl.bag.mutable.primitive.HashBag; /** * This file was automatically generated from template file unmodifiablePrimitiveCollection.stg. * * @since 4.0. */ public class UnmodifiableCollection extends AbstractUnmodifiableCollection { private static final long serialVersionUID = 1L; protected UnmodifiableCollection(MutableCollection collection) { super(collection); } /** * This method will take a MutableCollection and wrap it directly in a UnmodifiableCollection. */ public static UnmodifiableCollection of(MutableCollection collection) { if (collection == null) { throw new IllegalArgumentException("cannot create a UnmodifiableCollection for null"); } return new UnmodifiableCollection(collection); } /** * @since 9.2. */ @Override public MutableCollection newEmpty() { return new HashBag(); } } >> eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/factory/000077500000000000000000000000001407344533200330055ustar00rootroot00000000000000objectPrimitiveMaps.stg000066400000000000000000000024571407344533200374350ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/factoryimport "copyright.stg" targetPath() ::= "org/eclipse/collections/impl/factory/primitive" fileName(primitive) ::= "ObjectMaps" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.factory.primitive; import org.eclipse.collections.api.factory.map.primitive.ImmutableObjectMapFactory; import org.eclipse.collections.api.factory.map.primitive.MutableObjectMapFactory; import org.eclipse.collections.impl.map.immutable.primitive.ImmutableObjectMapFactoryImpl; import org.eclipse.collections.impl.map.mutable.primitive.MutableObjectMapFactoryImpl; /** * ObjectMaps is a static utility for creating {@link ImmutableObjectMapFactory}. * This file was automatically generated from template file objectPrimitiveMaps.stg. * * @since 4.0. */ @SuppressWarnings("ConstantNamingConvention") public final class ObjectMaps { public static final ImmutableObjectMapFactory immutable = ImmutableObjectMapFactoryImpl.INSTANCE; public static final MutableObjectMapFactory mutable = MutableObjectMapFactoryImpl.INSTANCE; private ObjectMaps() { throw new AssertionError("Suppress default constructor for noninstantiability"); } } >> primitiveBags.stg000066400000000000000000000023331407344533200362530ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/factoryimport "copyright.stg" targetPath() ::= "org/eclipse/collections/impl/factory/primitive" fileName(primitive) ::= "Bags" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.factory.primitive; import org.eclipse.collections.api.factory.bag.primitive.ImmutableBagFactory; import org.eclipse.collections.api.factory.bag.primitive.MutableBagFactory; import org.eclipse.collections.impl.bag.immutable.primitive.ImmutableBagFactoryImpl; import org.eclipse.collections.impl.bag.mutable.primitive.MutableBagFactoryImpl; /** * Bags is a static utility for creating {@link ImmutableBagFactory}. * This file was automatically generated from template file primitiveBags.stg. * * @since 4.0. */ @SuppressWarnings("ConstantNamingConvention") public final class Bags { public static final ImmutableBagFactory immutable = ImmutableBagFactoryImpl.INSTANCE; public static final MutableBagFactory mutable = MutableBagFactoryImpl.INSTANCE; private Bags() { throw new AssertionError("Suppress default constructor for noninstantiability"); } } >> primitiveLists.stg000066400000000000000000000023551407344533200365010ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/factoryimport "copyright.stg" targetPath() ::= "org/eclipse/collections/impl/factory/primitive" fileName(primitive) ::= "Lists" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.factory.primitive; import org.eclipse.collections.api.factory.list.primitive.ImmutableListFactory; import org.eclipse.collections.api.factory.list.primitive.MutableListFactory; import org.eclipse.collections.impl.list.immutable.primitive.ImmutableListFactoryImpl; import org.eclipse.collections.impl.list.mutable.primitive.MutableListFactoryImpl; /** * Lists is a static utility for creating {@link ImmutableListFactory}. * This file was automatically generated from template file primitiveLists.stg. * * @since 3.2. */ @SuppressWarnings("ConstantNamingConvention") public final class Lists { public static final ImmutableListFactory immutable = ImmutableListFactoryImpl.INSTANCE; public static final MutableListFactory mutable = MutableListFactoryImpl.INSTANCE; private Lists() { throw new AssertionError("Suppress default constructor for noninstantiability"); } } >> primitiveObjectMaps.stg000066400000000000000000000025111407344533200374240ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/factoryimport "copyright.stg" skipBoolean() ::= "true" targetPath() ::= "org/eclipse/collections/impl/factory/primitive" fileName(primitive) ::= "ObjectMaps" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.factory.primitive; import org.eclipse.collections.api.factory.map.primitive.ImmutableObjectMapFactory; import org.eclipse.collections.api.factory.map.primitive.MutableObjectMapFactory; import org.eclipse.collections.impl.map.immutable.primitive.ImmutableObjectMapFactoryImpl; import org.eclipse.collections.impl.map.mutable.primitive.MutableObjectMapFactoryImpl; /** * ObjectMaps is a static utility for creating {@link ImmutableObjectMapFactory}. * This file was automatically generated from template file primitiveObjectMaps.stg. * * @since 4.0. */ @SuppressWarnings("ConstantNamingConvention") public final class ObjectMaps { public static final ImmutableObjectMapFactory immutable = ImmutableObjectMapFactoryImpl.INSTANCE; public static final MutableObjectMapFactory mutable = MutableObjectMapFactoryImpl.INSTANCE; private ObjectMaps() { throw new AssertionError("Suppress default constructor for noninstantiability"); } } >> primitivePrimitiveMaps.stg000066400000000000000000000030071407344533200401670ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/factoryimport "copyright.stg" hasTwoPrimitives() ::= "true" skipBooleanKeys() ::= "true" targetPath() ::= "org/eclipse/collections/impl/factory/primitive" fileName(primitive1, primitive2, sameTwoPrimitives) ::= "Maps" class(primitive1, primitive2, sameTwoPrimitives) ::= << >> body(type1, type2, name1, name2) ::= << package org.eclipse.collections.impl.factory.primitive; import org.eclipse.collections.api.factory.map.primitive.ImmutableMapFactory; import org.eclipse.collections.api.factory.map.primitive.MutableMapFactory; import org.eclipse.collections.impl.map.immutable.primitive.ImmutableMapFactoryImpl; import org.eclipse.collections.impl.map.mutable.primitive.MutableMapFactoryImpl; /** * Maps is a static utility for creating {@link ImmutableMapFactory}. * This file was automatically generated from template file primitivePrimitiveMaps.stg. * * @since 4.0. */ @SuppressWarnings("ConstantNamingConvention") public final class Maps { public static final ImmutableMapFactory immutable = ImmutableMapFactoryImpl.INSTANCE; public static final MutableMapFactory mutable = MutableMapFactoryImpl.INSTANCE; private Maps() { throw new AssertionError("Suppress default constructor for noninstantiability"); } } >> primitiveSets.stg000066400000000000000000000042211407344533200363130ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/factoryimport "copyrightAndOthers.stg" targetPath() ::= "org/eclipse/collections/impl/factory/primitive" fileName(primitive) ::= "Sets" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.factory.primitive; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.factory.set.primitive.ImmutableSetFactory; import org.eclipse.collections.api.factory.set.primitive.MutableSetFactory; import org.eclipse.collections.api.set.primitive.Set; import org.eclipse.collections.impl.set.immutable.primitive.ImmutableSetFactoryImpl; import org.eclipse.collections.impl.set.mutable.primitive.MutableSetFactoryImpl; import org.eclipse.collections.api.tuple.primitive.Pair; import org.eclipse.collections.impl.tuple.primitive.PrimitiveTuples; /** * Sets is a static utility for creating {@link ImmutableSetFactory}. * This file was automatically generated from template file primitiveSets.stg. * * @since 3.2. */ @SuppressWarnings("ConstantNamingConvention") public final class Sets { public static final ImmutableSetFactory immutable = ImmutableSetFactoryImpl.INSTANCE; public static final MutableSetFactory mutable = MutableSetFactoryImpl.INSTANCE; private Sets() { throw new AssertionError("Suppress default constructor for noninstantiability"); } /** * @since 9.0 */ public static \ LazyIterable\<Pair> cartesianProduct(Set set1, Set set2) { return Sets.cartesianProduct(set1, set2, PrimitiveTuples::pair); } /** * @since 9.0 */ public static \ LazyIterable\ cartesianProduct(Set set1, Set set2, ToObjectFunction\ function) { return set1.asLazy() .flatCollect(first -> set2.asLazy() .collect(second -> function.value(first, second))); } } >> primitiveStacks.stg000066400000000000000000000023771407344533200366370ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/factoryimport "copyright.stg" targetPath() ::= "org/eclipse/collections/impl/factory/primitive" fileName(primitive) ::= "Stacks" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.factory.primitive; import org.eclipse.collections.api.factory.stack.primitive.ImmutableStackFactory; import org.eclipse.collections.api.factory.stack.primitive.MutableStackFactory; import org.eclipse.collections.impl.stack.immutable.primitive.ImmutableStackFactoryImpl; import org.eclipse.collections.impl.stack.mutable.primitive.MutableStackFactoryImpl; /** * Stacks is a static utility for creating {@link ImmutableStackFactory}. * This file was automatically generated from template file primitiveStacks.stg. * * @since 4.0. */ @SuppressWarnings("ConstantNamingConvention") public final class Stacks { public static final ImmutableStackFactory immutable = ImmutableStackFactoryImpl.INSTANCE; public static final MutableStackFactory mutable = MutableStackFactoryImpl.INSTANCE; private Stacks() { throw new AssertionError("Suppress default constructor for noninstantiability"); } } >> eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/iterator/000077500000000000000000000000001407344533200331675ustar00rootroot00000000000000primitiveImmutableEmptyIterator.stg000066400000000000000000000016701407344533200422340ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/iteratorimport "copyright.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/iterator" fileName(primitive) ::= "ImmutableEmptyIterator" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.iterator; import java.util.NoSuchElementException; import org.eclipse.collections.api.iterator.Iterator; /** * This file was automatically generated from template file primitiveImmutableEmptyIterator.stg. */ public final class ImmutableEmptyIterator implements Iterator { public static final ImmutableEmptyIterator INSTANCE = new ImmutableEmptyIterator(); private ImmutableEmptyIterator() { } @Override public boolean hasNext() { return false; } @Override public next() { throw new NoSuchElementException(); } } >> singletonPrimitiveIterator.stg000066400000000000000000000020451407344533200412350ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/iteratorimport "copyright.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/iterator" fileName(primitive) ::= "SingletonIterator" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.iterator; import java.util.NoSuchElementException; import org.eclipse.collections.api.iterator.Iterator; /** * This file was automatically generated from template file singletonPrimitiveIterator.stg. */ public final class SingletonIterator implements Iterator { private final value; private boolean next = true; public SingletonIterator( value) { this.value = value; } @Override public boolean hasNext() { return this.next; } @Override public next() { if (this.next) { this.next = false; return this.value; } throw new NoSuchElementException("i=" + this.next); } } >> unmodifiablePrimitiveIterator.stg000066400000000000000000000024161407344533200416730ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/iteratorimport "copyright.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/iterator" fileName(primitive) ::= "UnmodifiableIterator" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.iterator; import org.eclipse.collections.api.iterator.Iterator; import org.eclipse.collections.api.iterator.MutableIterator; /** * UnmodifiableIterator is a wrapper around Iterator which is unmodifiable and doesn't support remove. * This file was automatically generated from template file unmodifiablePrimitiveIterator.stg. */ public class UnmodifiableIterator implements MutableIterator { private final Iterator Iterator; public UnmodifiableIterator(Iterator Iterator) { this.Iterator = Iterator; } @Override public boolean hasNext() { return this.Iterator.hasNext(); } @Override public next() { return this.Iterator.next(); } @Override public void remove() { throw new UnsupportedOperationException("Cannot call remove() on " + this.getClass().getSimpleName()); } } >> eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/lazy/000077500000000000000000000000001407344533200323155ustar00rootroot00000000000000abstractLazyPrimitiveIterable.stg000066400000000000000000000276111407344533200407700ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/lazyimport "copyrightAndOthers.stg" import "primitiveLiteral.stg" import "primitiveEquals.stg" targetPath() ::= "org/eclipse/collections/impl/lazy/primitive" fileName(primitive) ::= "AbstractLazyIterable" class(primitive) ::= << >> collectPrimitive(fromName, fromType, toName, toType) ::= << /** * @since 7.0 */ @Override public LazyIterable collect(ToFunction function) { return new CollectToIterable(this, function); } >> body(type, name) ::= << package org.eclipse.collections.impl.lazy.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.LazyBooleanIterable; import org.eclipse.collections.api.LazyByteIterable; import org.eclipse.collections.api.LazyCharIterable; import org.eclipse.collections.api.LazyDoubleIterable; import org.eclipse.collections.api.LazyFloatIterable; import org.eclipse.collections.api.LazyIntIterable; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.LazyLongIterable; import org.eclipse.collections.api.LazyShortIterable; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.bag.primitive.MutableBag; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ToBooleanFunction; import org.eclipse.collections.api.block.function.primitive.ToByteFunction; import org.eclipse.collections.api.block.function.primitive.ToCharFunction; import org.eclipse.collections.api.block.function.primitive.ToDoubleFunction; import org.eclipse.collections.api.block.function.primitive.ToFloatFunction; import org.eclipse.collections.api.block.function.primitive.ToIntFunction; import org.eclipse.collections.api.block.function.primitive.ToLongFunction; import org.eclipse.collections.api.block.function.primitive.ToShortFunction; import org.eclipse.collections.api.block.function.primitive.ObjectToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.list.primitive.MutableList; import org.eclipse.collections.api.set.primitive.MutableSet; import org.eclipse.collections.impl.bag.mutable.primitive.HashBag; import org.eclipse.collections.impl.block.factory.primitive.Predicates; import org.eclipse.collections.impl.factory.primitive.Sets; import org.eclipse.collections.impl.list.mutable.primitive.ArrayList; import org.eclipse.collections.impl.set.mutable.primitive.HashSet; import org.eclipse.collections.impl.utility.internal.primitive.IterableIterate; import org.eclipse.collections.impl.utility.primitive.LazyIterate; import java.util.NoSuchElementException; /** * This file was automatically generated from template file abstractLazyPrimitiveIterable.stg. * * @since 5.0 */ public abstract class AbstractLazyIterable implements LazyIterable { @Override public void forEach(Procedure procedure) { this.each(procedure); } @Override public int size() { return this.count(Predicates.alwaysTrue()); } @Override public String toString() { return this.makeString("[", ", ", "]"); } @Override public boolean isEmpty() { return IterableIterate.isEmpty(this); } @Override public boolean notEmpty() { return IterableIterate.notEmpty(this); } @Override public String makeString() { return this.makeString(", "); } @Override public String makeString(String separator) { return this.makeString("", separator, ""); } @Override public String makeString(String start, String separator, String end) { Appendable stringBuilder = new StringBuilder(); this.appendString(stringBuilder, start, separator, end); return stringBuilder.toString(); } @Override public void appendString(Appendable appendable) { this.appendString(appendable, ", "); } @Override public void appendString(Appendable appendable, String separator) { this.appendString(appendable, "", separator, ""); } @Override public void appendString(Appendable appendable, String start, String separator, String end) { IterableIterate.appendString(this, appendable, start, separator, end); } @Override public boolean contains( value) { return this.anySatisfy(Predicates.equal(value)); } @Override public boolean containsAll(... source) { return this.containsAll(Sets.immutable.of(source)); } @Override public boolean containsAll(Iterable source) { return source.allSatisfy(( value) -> AbstractLazyIterable.this.contains(value)); } @Override public LazyIterable select(Predicate predicate) { return LazyIterate.select(this, predicate); } @Override public LazyIterable reject(Predicate predicate) { return LazyIterate.select(this, Predicates.not(predicate)); } @Override public LazyIterable tap(Procedure procedure) { return LazyIterate.tap(this, procedure); } @Override public \ LazyIterable\ collect(ToObjectFunction\ function) { return LazyIterate.collect(this, function); } public \ LazyIterable\ flatCollect(ToObjectFunction\\> function) { return LazyIterate.flatCollect(this, function); } @Override public detectIfNone(Predicate predicate, ifNone) { return IterableIterate.detectIfNone(this, predicate, ifNone); } @Override public int count(Predicate predicate) { return IterableIterate.count(this, predicate); } @Override public boolean anySatisfy(Predicate predicate) { return IterableIterate.anySatisfy(this, predicate); } @Override public boolean allSatisfy(Predicate predicate) { return IterableIterate.allSatisfy(this, predicate); } @Override public boolean noneSatisfy(Predicate predicate) { return IterableIterate.noneSatisfy(this, predicate); } @Override public \ T injectInto(T injectedValue, ObjectToObjectFunction\ function) { return IterableIterate.injectInto(this, injectedValue, function); } @Override public RichIterable\<Iterable> chunk(int size) { return new ChunkIterable(this, size); } @Override public [] toArray() { return this.toList().toArray(); } @Override public MutableList toList() { final MutableList list = new ArrayList(); this.forEach(list::add); return list; } @Override public MutableSet toSet() { final MutableSet set = new HashSet(); this.forEach(set::add); return set; } @Override public MutableBag toBag() { final MutableBag bag = new HashBag(); this.forEach(bag::add); return bag; } <(arithmeticMethods.(type))()> @Override public LazyIterable asLazy() { return this; } } >> arithmeticMethods ::= [ "boolean": "noMethods", "default": "allMethods" ] allMethods() ::= << @Override public sum() { SumProcedure procedure = new SumProcedure(); this.forEach(procedure); return procedure.getValue(); } @Override public max() { if (this.isEmpty()) { throw new NoSuchElementException(); } MaxProcedure procedure = new MaxProcedure(); this.forEach(procedure); return procedure.getValue(); } @Override public maxIfEmpty( ifEmpty) { if (this.isEmpty()) { return ifEmpty; } return this.max(); } @Override public min() { if (this.isEmpty()) { throw new NoSuchElementException(); } MinProcedure procedure = new MinProcedure(); this.forEach(procedure); return procedure.getValue(); } @Override public minIfEmpty( ifEmpty) { if (this.isEmpty()) { return ifEmpty; } return this.min(); } @Override public double average() { if (this.isEmpty()) { throw new ArithmeticException(); } return (double) this.sum() / (double) this.size(); } @Override public double median() { if (this.isEmpty()) { throw new ArithmeticException(); } [] sortedArray = this.toSortedArray(); int middleIndex = sortedArray.length >\> 1; if (sortedArray.length > 1 && (sortedArray.length & 1) == 0) { first = sortedArray[middleIndex]; second = sortedArray[middleIndex - 1]; return ((double) first + (double) second) / 2.0; } return (double) sortedArray[middleIndex]; } @Override public [] toSortedArray() { return this.toSortedList().toArray(); } @Override public MutableList toSortedList() { return ArrayList.newList(this).sortThis(); } private static final class MaxProcedure implements Procedure { private boolean visitedOnce; private max; @Override public void value( each) { if (this.visitedOnce) { if (<(lessThan.(type))("this.max", "each")>) { this.max = each; } } else { this.max = each; this.visitedOnce = true; } } public getValue() { return this.max; } } private static final class MinProcedure implements Procedure { private boolean visitedOnce; private min; @Override public void value( each) { if (this.visitedOnce) { if (<(lessThan.(type))("each", "this.min")>) { this.min = each; } } else { this.min = each; this.visitedOnce = true; } } public getValue() { return this.min; } } private static final class SumProcedure implements Procedure { private sum = ; private compensation = ; @Override public void value( each) { adjustedValue = each - this.compensation; nextSum = this.sum + adjustedValue; this.compensation = nextSum - this.sum - adjustedValue; this.sum = nextSum; } public getValue() { return this.sum; } } private static final class SumProcedure implements Procedure { private sum = 0; @Override public void value( each) { this.sum += each; } public getValue() { return this.sum; } } >> noMethods() ::= "" chunkPrimitiveIterable.stg000066400000000000000000000062071407344533200374330ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/lazyimport "copyright.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/lazy/primitive" fileName(primitive) ::= "ChunkIterable" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.lazy.primitive; import java.util.Iterator; import java.util.NoSuchElementException; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.block.function.Function0; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.collection.primitive.MutableCollection; import org.eclipse.collections.api.iterator.Iterator; import org.eclipse.collections.impl.factory.primitive.Lists; import org.eclipse.collections.impl.lazy.AbstractLazyIterable; import org.eclipse.collections.impl.utility.internal.IterableIterate; /** * This file was automatically generated from template file chunkPrimitiveIterable.stg. */ public class ChunkIterable extends AbstractLazyIterable\<Iterable> { private final Iterable adapted; private final int size; public ChunkIterable(Iterable delegate, int size) { if (size \<= 0) { throw new IllegalArgumentException("Size for groups must be positive but was: " + size); } this.adapted = delegate; this.size = size; } @Override public Iterator\<Iterable> iterator() { return new ChunkIterator(this.adapted, this.size); } @Override public void each(Procedure\Iterable> procedure) { IterableIterate.forEach(this, procedure); } public static class ChunkIterator implements Iterator\<Iterable> { private final Iterator iterator; private final int size; private final Function0\Collection> speciesNewStrategy; public ChunkIterator(Iterable iterable, int size) { if (size \<= 0) { throw new IllegalArgumentException("Size for groups must be positive but was: " + size); } this.size = size; this.iterator = iterable.Iterator(); this.speciesNewStrategy = iterable instanceof MutableCollection ? ((MutableCollection) iterable)::newEmpty : Lists.mutable::empty; } @Override public boolean hasNext() { return this.iterator.hasNext(); } @Override public Iterable next() { if (!this.iterator.hasNext()) { throw new NoSuchElementException(); } int i = this.size; MutableCollection result = this.speciesNewStrategy.value(); while (i > 0 && this.iterator.hasNext()) { result.add(this.iterator.next()); i -= 1; } return result; } } } >> collectPrimitiveIterable.stg000066400000000000000000000130771407344533200377530ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/lazyimport "copyright.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/lazy/primitive" skipBoolean() ::= "true" fileName(primitive) ::= "CollectIterable" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.lazy.primitive; import java.util.Arrays; import java.util.Iterator; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.bag.primitive.MutableBag; import org.eclipse.collections.api.block.function.primitive.Function; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.iterator.Iterator; import org.eclipse.collections.api.list.primitive.MutableList; import org.eclipse.collections.api.set.primitive.MutableSet; import org.eclipse.collections.impl.bag.mutable.primitive.HashBag; import org.eclipse.collections.impl.list.mutable.primitive.ArrayList; import org.eclipse.collections.impl.set.mutable.primitive.HashSet; /** * This file was automatically generated from template file collectPrimitiveIterable.stg. */ public class CollectIterable\ extends AbstractLazyIterable { private final LazyIterable\ iterable; private final Function\ function; private final FunctionToProcedure\ FunctionToProcedure; public CollectIterable(LazyIterable\ adapted, Function\ function) { this.iterable = adapted; this.function = function; this.FunctionToProcedure = new FunctionToProcedure\<>(function); } @Override public Iterator Iterator() { return new Iterator() { private final Iterator\ iterator = CollectIterable.this.iterable.iterator(); @Override public next() { return CollectIterable.this.function.ValueOf(this.iterator.next()); } @Override public boolean hasNext() { return this.iterator.hasNext(); } }; } @Override public void forEach(Procedure procedure) { this.each(procedure); } /** * @since 7.0. */ @Override public void each(Procedure procedure) { this.iterable.forEachWith(this.FunctionToProcedure, procedure); } @Override public int size() { return this.iterable.size(); } @Override public boolean isEmpty() { return this.iterable.isEmpty(); } @Override public boolean notEmpty() { return this.iterable.notEmpty(); } @Override public int count(final Predicate predicate) { return this.iterable.count((T each) -> predicate.accept(this.function.ValueOf(each))); } @Override public boolean anySatisfy(final Predicate predicate) { return this.iterable.anySatisfy((T each) -> predicate.accept(this.function.ValueOf(each))); } @Override public boolean allSatisfy(final Predicate predicate) { return this.iterable.allSatisfy((T each) -> predicate.accept(this.function.ValueOf(each))); } @Override public boolean noneSatisfy(final Predicate predicate) { return this.iterable.allSatisfy((T each) -> !predicate.accept(this.function.ValueOf(each))); } @Override public [] toArray() { final [] array = new [this.size()]; this.iterable.forEachWithIndex((T each, int index) -> array[index] = this.function.ValueOf(each)); return array; } @Override public [] toSortedArray() { [] array = this.toArray(); Arrays.sort(array); return array; } @Override public MutableList toList() { return ArrayList.newList(this); } @Override public MutableSet toSet() { return HashSet.newSet(this); } @Override public MutableBag toBag() { return HashBag.newBag(this); } @Override public boolean containsAll(... source) { for ( value : source) { if (!this.contains(value)) { return false; } } return true; } @Override public boolean containsAll(Iterable source) { for (Iterator iterator = source.Iterator(); iterator.hasNext(); ) { if (!this.contains(iterator.next())) { return false; } } return true; } private static final class FunctionToProcedure\ implements Procedure2\Procedure> { private static final long serialVersionUID = 1L; private final Function\ function; private FunctionToProcedure(Function\ function) { this.function = function; } @Override public void value(T each, Procedure procedure) { procedure.value(this.function.ValueOf(each)); } } } >> collectPrimitiveToObjectIterable.stg000066400000000000000000000064641407344533200414070ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/lazyimport "copyright.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/lazy/primitive" skipBoolean() ::= "true" fileName(primitive) ::= "CollectToObjectIterable" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.lazy.primitive; import java.util.Iterator; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.block.procedure.primitive.ObjectIntProcedure; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.iterator.Iterator; import org.eclipse.collections.impl.lazy.AbstractLazyIterable; /** * This file was automatically generated from template file collectPrimitiveToObjectIterable.stg. */ public class CollectToObjectIterable\ extends AbstractLazyIterable\ { private final Iterable iterable; private final ToObjectFunction\ function; public CollectToObjectIterable(Iterable iterable, ToObjectFunction\ function) { this.iterable = iterable; this.function = function; } @Override public void each(final Procedure\ procedure) { this.iterable.forEach(( each) -> procedure.value(this.function.valueOf(each))); } @Override public void forEachWithIndex(final ObjectIntProcedure\ objectIntProcedure) { this.iterable.forEach(new Procedure() { private int index; @Override public void value( each) { objectIntProcedure.value(CollectToObjectIterable.this.function.valueOf(each), this.index++); } }); } @Override public \

void forEachWith(final Procedure2\ procedure, final P parameter) { this.iterable.forEach(( each) -> procedure.value(this.function.valueOf(each), parameter)); } @Override public Iterator\ iterator() { return new Iterator\() { private final Iterator iterator = CollectToObjectIterable.this.iterable.Iterator(); @Override public boolean hasNext() { return this.iterator.hasNext(); } @Override public V next() { return CollectToObjectIterable.this.function.valueOf(this.iterator.next()); } @Override public void remove() { throw new UnsupportedOperationException("Cannot call remove() on " + this.getClass().getSimpleName()); } }; } @Override public int size() { return this.iterable.size(); } @Override public boolean isEmpty() { return this.iterable.isEmpty(); } @Override public boolean notEmpty() { return this.iterable.notEmpty(); } } >> collectPrimitiveToPrimitiveIterable.stg000066400000000000000000000047221407344533200421440ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/lazyimport "copyright.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/lazy/primitive" hasTwoPrimitives() ::= "true" skipBoolean() ::= "false" fileName(primitive1, primitive2, sameTwoPrimitives) ::= "CollectToIterable" class(primitive1, primitive2, sameTwoPrimitives) ::= << >> body(type1, type2, name1, name2, sameTwoPrimitives) ::= << package org.eclipse.collections.impl.lazy.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.block.function.primitive.ToFunction; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.iterator.Iterator; import org.eclipse.collections.api.iterator.Iterator; /** * This file was automatically generated from template file collectPrimitiveToPrimitiveIterable.stg. */ public class CollectToIterable extends AbstractLazyIterable { private final Iterable iterable; private final ToFunction function; public CollectToIterable(Iterable iterable, ToFunction function) { this.iterable = iterable; this.function = function; } @Override public void each(final Procedure procedure) { this.iterable.forEach(( each) -> procedure.value(this.function.valueOf(each))); } @Override public Iterator Iterator() { return new Iterator() { private final Iterator iterator = CollectToIterable.this.iterable.Iterator(); @Override public boolean hasNext() { return this.iterator.hasNext(); } @Override public next() { return CollectToIterable.this.function.valueOf(this.iterator.next()); } }; } @Override public int size() { return this.iterable.size(); } @Override public boolean isEmpty() { return this.iterable.isEmpty(); } @Override public boolean notEmpty() { return this.iterable.notEmpty(); } } >> flatCollectPrimitiveToObjectIterable.stg000066400000000000000000000157071407344533200422160ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/lazyimport "copyrightAndOthers.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/lazy/primitive" skipBoolean() ::= "false" fileName(primitive) ::= "FlatCollectToObjectIterable" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.lazy.primitive; import java.util.Iterator; import java.util.NoSuchElementException; import java.util.Optional; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.Predicate; import org.eclipse.collections.api.block.predicate.Predicate2; import org.eclipse.collections.api.block.procedure.Procedure; import org.eclipse.collections.api.block.procedure.Procedure2; import org.eclipse.collections.api.block.procedure.primitive.ObjectIntProcedure; import org.eclipse.collections.impl.EmptyIterator; import org.eclipse.collections.impl.block.factory.Predicates; import org.eclipse.collections.api.iterator.Iterator; import org.eclipse.collections.impl.block.procedure.AdaptObjectIntProcedureToProcedure; import org.eclipse.collections.impl.lazy.AbstractLazyIterable; import org.eclipse.collections.impl.utility.Iterate; /** * This file was automatically generated from template file flatCollectPrimitiveToObjectIterable.stg. */ public class FlatCollectToObjectIterable\ extends AbstractLazyIterable\ { private final Iterable iterable; private final ToObjectFunction\\> function; public FlatCollectToObjectIterable( Iterable iterable, ToObjectFunction\\> function) { this.iterable = iterable; this.function = function; } @Override public void each(Procedure\ procedure) { this.iterable.forEach(( each) -> Iterate.forEach(this.function.valueOf(each), procedure)); } @Override public void forEachWithIndex(ObjectIntProcedure\ objectIntProcedure) { Procedure\ innerProcedure = new AdaptObjectIntProcedureToProcedure\<>(objectIntProcedure); this.iterable.forEach(each -> { Iterable\ iterable = this.function.valueOf(each); Iterate.forEach(iterable, innerProcedure); }); } @Override public \

void forEachWith(Procedure2\ procedure, P parameter) { this.iterable.forEach(( each) -> Iterate.forEachWith(this.function.valueOf(each), procedure, parameter)); } @Override public Iterator\ iterator() { return new FlatCollectIterator\<>(this.iterable, this.function); } @Override public V detect(Predicate\ predicate) { V[] result = (V[]) new Object[1]; this.iterable.anySatisfy(each -> { Iterable\ it = this.function.valueOf(each); return Iterate.anySatisfy(it, each1 -> { if (predicate.accept(each1)) { result[0] = each1; return true; } return false; }); }); return result[0]; } @Override public Optional\ detectOptional(Predicate\ predicate) { V[] result = (V[]) new Object[1]; this.iterable.anySatisfy(each -> { Iterable\ it = this.function.valueOf(each); if (iterable == null) { throw new NullPointerException(); } return Iterate.anySatisfy(it, each1 -> { if (predicate.accept(each1)) { if (each1 == null) { throw new NullPointerException(); } result[0] = each1; return true; } return false; }); }); return Optional.ofNullable(result[0]); } @Override public boolean anySatisfy(Predicate\ predicate) { return this.iterable.anySatisfy(each -> Iterate.anySatisfy(this.function.valueOf(each), predicate)); } @Override public \

boolean anySatisfyWith(Predicate2\ predicate, P parameter) { return this.anySatisfy(Predicates.bind(predicate, parameter)); } @Override public boolean allSatisfy(Predicate\ predicate) { return this.iterable.allSatisfy(each -> Iterate.allSatisfy(this.function.valueOf(each), predicate)); } @Override public \

boolean allSatisfyWith(Predicate2\ predicate, P parameter) { return this.allSatisfy(Predicates.bind(predicate, parameter)); } @Override public boolean noneSatisfy(Predicate\ predicate) { return this.iterable.noneSatisfy(each -> Iterate.anySatisfy(this.function.valueOf(each), predicate)); } @Override public \

boolean noneSatisfyWith(Predicate2\ predicate, P parameter) { return this.noneSatisfy(Predicates.bind(predicate, parameter)); } private final class FlatCollectIterator\ implements Iterator\ { private final Iterator iterator; private final ToObjectFunction\\> function; private Iterator\ innerIterator = EmptyIterator.getInstance(); public FlatCollectIterator( Iterable iterable, ToObjectFunction\\> newFunction) { this(iterable.Iterator(), newFunction); } public FlatCollectIterator( Iterator newIterator, ToObjectFunction\\> newFunction) { this.iterator = newIterator; this.function = newFunction; } @Override public void remove() { throw new UnsupportedOperationException("Cannot remove from a flatCollect iterator"); } @Override public boolean hasNext() { while (true) { if (this.innerIterator.hasNext()) { return true; } if (!this.iterator.hasNext()) { return false; } this.innerIterator = this.function.valueOf(this.iterator.next()).iterator(); } } @Override public V next() { if (!this.hasNext()) { throw new NoSuchElementException(); } return this.innerIterator.next(); } } } >> lazyPrimitiveIterableAdapter.stg000066400000000000000000000127751407344533200406120ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/lazyimport "copyright.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/lazy/primitive" fileName(primitive) ::= "LazyIterableAdapter" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.lazy.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.bag.primitive.MutableBag; import org.eclipse.collections.api.block.function.primitive.ObjectToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.iterator.Iterator; import org.eclipse.collections.api.list.primitive.MutableList; import org.eclipse.collections.api.set.primitive.MutableSet; /** * This file was automatically generated from template file lazyPrimitiveIterableAdapter.stg. * * @since 3.0 */ public class LazyIterableAdapter extends AbstractLazyIterable { private final Iterable delegate; public LazyIterableAdapter(Iterable delegate) { this.delegate = delegate; } @Override public Iterator Iterator() { return this.delegate.Iterator(); } /** * @since 7.0. */ @Override public void each(Procedure procedure) { this.delegate.forEach(procedure); } @Override public int size() { return this.delegate.size(); } @Override public boolean isEmpty() { return this.delegate.isEmpty(); } @Override public boolean notEmpty() { return this.delegate.notEmpty(); } @Override public int count(Predicate predicate) { return this.delegate.count(predicate); } @Override public boolean anySatisfy(Predicate predicate) { return this.delegate.anySatisfy(predicate); } @Override public boolean allSatisfy(Predicate predicate) { return this.delegate.allSatisfy(predicate); } @Override public boolean noneSatisfy(Predicate predicate) { return this.delegate.noneSatisfy(predicate); } @Override public detectIfNone(Predicate predicate, ifNone) { return this.delegate.detectIfNone(predicate, ifNone); } <(arithmeticMethods.(type))(name, type)> @Override public [] toArray() { return this.delegate.toArray(); } @Override public String toString() { return this.delegate.toString(); } @Override public String makeString() { return this.delegate.makeString(); } @Override public String makeString(String separator) { return this.delegate.makeString(separator); } @Override public String makeString(String start, String separator, String end) { return this.delegate.makeString(start, separator, end); } @Override public void appendString(Appendable appendable) { this.delegate.appendString(appendable); } @Override public void appendString(Appendable appendable, String separator) { this.delegate.appendString(appendable, separator); } @Override public void appendString(Appendable appendable, String start, String separator, String end) { this.delegate.appendString(appendable, start, separator, end); } @Override public boolean contains( value) { return this.delegate.contains(value); } @Override public boolean containsAll(... source) { return this.delegate.containsAll(source); } @Override public boolean containsAll(Iterable source) { return this.delegate.containsAll(source); } @Override public MutableList toList() { return this.delegate.toList(); } @Override public MutableSet toSet() { return this.delegate.toSet(); } @Override public MutableBag toBag() { return this.delegate.toBag(); } @Override public \ T injectInto(T injectedValue, ObjectToObjectFunction\ function) { return this.delegate.injectInto(injectedValue, function); } } >> arithmeticMethods ::= [ "byte": "allMethods", "short": "allMethods", "char": "allMethods", "int": "allMethods", "long": "allMethods", "float": "allMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods(name, type) ::=<< @Override public sum() { return this.delegate.sum(); } @Override public max() { return this.delegate.max(); } @Override public min() { return this.delegate.min(); } @Override public minIfEmpty( defaultValue) { return this.delegate.minIfEmpty(defaultValue); } @Override public maxIfEmpty( defaultValue) { return this.delegate.maxIfEmpty(defaultValue); } @Override public double average() { return this.delegate.average(); } @Override public double median() { return this.delegate.median(); } @Override public [] toSortedArray() { return this.delegate.toSortedArray(); } @Override public MutableList toSortedList() { return this.delegate.toSortedList(); } >> noMethods(name, type) ::= "" reversePrimitiveIterable.stg000066400000000000000000000123111407344533200377670ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/lazyimport "copyright.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/lazy/primitive" fileName(primitive) ::= "ReverseIterable" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.lazy.primitive; import java.util.NoSuchElementException; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.bag.primitive.MutableBag; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.iterator.Iterator; import org.eclipse.collections.api.list.primitive.List; import org.eclipse.collections.api.list.primitive.MutableList; import org.eclipse.collections.api.set.primitive.MutableSet; import org.eclipse.collections.impl.bag.mutable.primitive.HashBag; import org.eclipse.collections.impl.lazy.ReverseIterable; import org.eclipse.collections.impl.list.mutable.primitive.ArrayList; import org.eclipse.collections.impl.set.mutable.primitive.HashSet; /** * This file was automatically generated from template file reversePrimitiveIterable.stg. * * @see ReverseIterable * @since 5.0. */ public class ReverseIterable extends AbstractLazyIterable { private final List adapted; public ReverseIterable(List newAdapted) { this.adapted = newAdapted; } public static ReverseIterable adapt(List List) { return new ReverseIterable(List); } @Override public Iterator Iterator() { return new ReverseIterator(); } /** * @since 7.0. */ @Override public void each(Procedure procedure) { Iterator iterator = this.Iterator(); while (iterator.hasNext()) { procedure.value(iterator.next()); } } <(arithmeticMethods.(type))(name, type)> @Override public [] toArray() { [] results = new [this.adapted.size()]; int index = 0; Iterator iterator = this.Iterator(); while (iterator.hasNext()) { results[index] = iterator.next(); index++; } return results; } @Override public boolean contains( value) { return this.adapted.contains(value); } @Override public boolean containsAll(... source) { return this.adapted.containsAll(source); } @Override public boolean containsAll(Iterable source) { return this.adapted.containsAll(source); } @Override public int size() { return this.adapted.size(); } @Override public boolean isEmpty() { return this.adapted.isEmpty(); } @Override public boolean notEmpty() { return this.adapted.notEmpty(); } @Override public MutableList toList() { return ArrayList.newList(this); } @Override public MutableSet toSet() { return HashSet.newSet(this); } @Override public MutableBag toBag() { return HashBag.newBag(this); } @Override public LazyIterable asLazy() { return new LazyIterableAdapter(this); } private class ReverseIterator implements Iterator { /** * Index of element to be returned by subsequent call to next. */ private int currentIndex = ReverseIterable.this.adapted.size() - 1; @Override public boolean hasNext() { return this.currentIndex != -1; } @Override public next() { if (!this.hasNext()) { throw new NoSuchElementException(); } next = ReverseIterable.this.adapted.get(this.currentIndex); this.currentIndex--; return next; } } } >> arithmeticMethods ::= [ "byte": "allMethods", "short": "allMethods", "char": "allMethods", "int": "allMethods", "long": "allMethods", "float": "allMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods(name, type) ::=<< @Override public sum() { return this.adapted.sum(); } @Override public max() { return this.adapted.max(); } @Override public min() { return this.adapted.min(); } @Override public minIfEmpty( defaultValue) { if (this.adapted.isEmpty()) { return defaultValue; } return this.adapted.min(); } @Override public maxIfEmpty( defaultValue) { if (this.adapted.isEmpty()) { return defaultValue; } return this.adapted.max(); } @Override public double average() { return this.adapted.average(); } @Override public double median() { return this.adapted.median(); } @Override public [] toSortedArray() { return this.adapted.toSortedArray(); } >> noMethods(name, type) ::= "" selectPrimitiveIterable.stg000066400000000000000000000153331407344533200376020ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/lazyimport "copyright.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/lazy/primitive" fileName(primitive) ::= "SelectIterable" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.lazy.primitive; import java.util.NoSuchElementException; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.bag.primitive.MutableBag; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.iterator.Iterator; import org.eclipse.collections.api.list.primitive.MutableList; import org.eclipse.collections.api.set.primitive.MutableSet; import org.eclipse.collections.impl.bag.mutable.primitive.HashBag; import org.eclipse.collections.impl.block.factory.primitive.Predicates; import org.eclipse.collections.impl.list.mutable.primitive.ArrayList; import org.eclipse.collections.impl.set.mutable.primitive.HashSet; /** * This file was automatically generated from template file selectPrimitiveIterable.stg. */ public class SelectIterable extends AbstractLazyIterable { private final Iterable delegate; private final Predicate predicate; public SelectIterable(Iterable delegate, Predicate predicate) { this.delegate = delegate; this.predicate = predicate; } @Override public Iterator Iterator() { return new SelectIterator(this.delegate, this.predicate); } /** * @since 7.0. */ @Override public void each(Procedure procedure) { this.delegate.forEach(new IfProcedure(procedure)); } @Override public int size() { return this.delegate.count(this.predicate); } @Override public boolean isEmpty() { return !this.Iterator().hasNext(); } @Override public boolean notEmpty() { return this.Iterator().hasNext(); } @Override public int count(Predicate predicate) { CountProcedure countProcedure = new CountProcedure(predicate); this.forEach(countProcedure); return countProcedure.getCount(); } @Override public boolean anySatisfy(Predicate predicate) { return this.delegate.anySatisfy(Predicates.and(this.predicate, predicate)); } @Override public boolean allSatisfy(Predicate predicate) { return this.noneSatisfy(Predicates.not(predicate)); } @Override public boolean noneSatisfy(Predicate predicate) { return !this.anySatisfy(predicate); } @Override public [] toArray() { final [] array = new [this.size()]; this.forEach(new Procedure() { @SuppressWarnings("FieldMayBeFinal") private int index = 0; @Override public void value( each) { array[this.index++] = each; } }); return array; } @Override public boolean containsAll(... source) { for ( value : source) { if (!this.contains(value)) { return false; } } return true; } @Override public boolean containsAll(Iterable source) { for (Iterator iterator = source.Iterator(); iterator.hasNext(); ) { if (!this.contains(iterator.next())) { return false; } } return true; } @Override public MutableList toList() { return ArrayList.newList(this); } @Override public MutableSet toSet() { return HashSet.newSet(this); } @Override public MutableBag toBag() { return HashBag.newBag(this); } private static final class CountProcedure implements Procedure { private static final long serialVersionUID = 1L; private final Predicate predicate; private int counter = 0; private CountProcedure(Predicate predicate) { this.predicate = predicate; } @Override public void value( each) { if (this.predicate.accept(each)) { this.counter++; } } public int getCount() { return this.counter; } } private final class IfProcedure implements Procedure { private static final long serialVersionUID = 1L; private final Procedure procedure; private IfProcedure(Procedure procedure) { this.procedure = procedure; } @Override public void value( each) { if (SelectIterable.this.predicate.accept(each)) { this.procedure.value(each); } } } private static final class SelectIterator implements Iterator { private final Iterator iterator; private final Predicate predicate; private next; private boolean verifiedHasNext = false; private SelectIterator(Iterable iterable, Predicate predicate) { this(iterable.Iterator(), predicate); } private SelectIterator(Iterator iterator, Predicate predicate) { this.iterator = iterator; this.predicate = predicate; } @Override public boolean hasNext() { if (this.verifiedHasNext) { return true; } while (this.iterator.hasNext()) { temp = this.iterator.next(); if (this.predicate.accept(temp)) { this.next = temp; this.verifiedHasNext = true; return true; } } return false; } @Override public next() { if (this.verifiedHasNext || this.hasNext()) { this.verifiedHasNext = false; return this.next; } throw new NoSuchElementException(); } } } >> tapPrimitiveIterable.stg000066400000000000000000000062541407344533200371110ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/lazyimport "copyrightAndOthers.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/lazy/primitive" fileName(primitive) ::= "TapIterable" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.lazy.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.iterator.Iterator; /** * This file was automatically generated from template file tapPrimitiveIterable.stg. */ public class TapIterable extends AbstractLazyIterable { private final Iterable adapted; private final Procedure procedure; public TapIterable(Iterable delegate, Procedure procedure) { this.adapted = delegate; this.procedure = procedure; } @Override public void each(Procedure procedure) { this.adapted.forEach(each -> { this.procedure.value(each); procedure.value(each); }); } @Override public boolean anySatisfy(Predicate predicate) { return this.adapted.anySatisfy(each -> { this.procedure.value(each); return predicate.accept(each); }); } @Override public boolean allSatisfy(Predicate predicate) { return this.adapted.allSatisfy(each -> { this.procedure.value(each); return predicate.accept(each); }); } @Override public boolean noneSatisfy(Predicate predicate) { return this.adapted.noneSatisfy(each -> { this.procedure.value(each); return predicate.accept(each); }); } @Override public detectIfNone(Predicate predicate, ifNone) { return this.adapted.detectIfNone(each -> { this.procedure.value(each); return predicate.accept(each); }, ifNone); } @Override public Iterator Iterator() { return new TapIterator(this.adapted, this.procedure); } public static class TapIterator implements Iterator { private final Iterator iterator; private final Procedure procedure; public TapIterator(Iterable iterable, Procedure procedure) { this(iterable.Iterator(), procedure); } public TapIterator(Iterator iterator, Procedure procedure) { this.iterator = iterator; this.procedure = procedure; } @Override public boolean hasNext() { return this.iterator.hasNext(); } @Override public next() { next = this.iterator.next(); this.procedure.value(next); return next; } } } >> eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/list/000077500000000000000000000000001407344533200323115ustar00rootroot00000000000000immutable/000077500000000000000000000000001407344533200342115ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/listimmutablePrimitiveArrayList.stg000066400000000000000000000524161407344533200424430ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/list/immutableimport "copyrightAndOthers.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/list/immutable/primitive" fileName(primitive) ::= "ImmutableArrayList" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.list.immutable.primitive; import java.io.IOException; import java.io.Serializable; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.NoSuchElementException; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.bag.primitive.MutableBag; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ObjectToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.block.procedure.primitive.IntProcedure; import org.eclipse.collections.api.collection.primitive.MutableCollection; import org.eclipse.collections.api.iterator.Iterator; import org.eclipse.collections.api.list.ImmutableList; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.list.primitive.ImmutableList; import org.eclipse.collections.api.list.primitive.List; import org.eclipse.collections.api.list.primitive.MutableList; import org.eclipse.collections.api.set.primitive.MutableSet; import org.eclipse.collections.api.tuple.primitive.Pair; import org.eclipse.collections.api.tuple.primitive.ObjectPair; import org.eclipse.collections.impl.bag.mutable.primitive.HashBag; import org.eclipse.collections.impl.factory.Lists; import org.eclipse.collections.impl.factory.primitive.Lists; import org.eclipse.collections.impl.lazy.primitive.LazyIterableAdapter; import org.eclipse.collections.impl.lazy.primitive.ReverseIterable; import org.eclipse.collections.impl.list.mutable.FastList; import org.eclipse.collections.impl.list.mutable.primitive.ArrayList; import org.eclipse.collections.impl.set.mutable.primitive.HashSet; import org.eclipse.collections.impl.tuple.primitive.PrimitiveTuples; import org.eclipse.collections.impl.utility.Iterate; import java.util.Spliterator; import java.util.Spliterators; /** * ImmutableArrayList is the non-modifiable equivalent of {@link ArrayList}. * It wraps a Java array. * This file was automatically generated from template file immutablePrimitiveArrayList.stg. * * @since 3.2. */ final class ImmutableArrayList implements ImmutableList, Serializable { private static final long serialVersionUID = 1L; private final [] items; private ImmutableArrayList([] newElements) { if (newElements.length \<= 1) { throw new IllegalArgumentException("Use Lists.immutable.with() to instantiate an optimized collection"); } this.items = newElements; } public static ImmutableArrayList newList(Iterable iterable) { return new ImmutableArrayList(iterable.toArray()); } public static ImmutableArrayList newListWith(... elements) { [] newArray = new [elements.length]; System.arraycopy(elements, 0, newArray, 0, elements.length); return new ImmutableArrayList(newArray); } @Override public get(int index) { return this.items[index]; } @Override public getFirst() { return this.items[0]; } @Override public getLast() { return this.items[this.items.length - 1]; } @Override public int indexOf( value) { for (int i = 0; i \< this.items.length; i++) { if (<(equals.(type))("this.items[i]", "value")>) { return i; } } return -1; } @Override public int lastIndexOf( value) { for (int i = this.items.length - 1; i >= 0; i--) { if (<(equals.(type))("this.items[i]", "value")>) { return i; } } return -1; } @Override public Iterator Iterator() { return new InternalIterator(); } @Override public void forEach(Procedure procedure) { this.each(procedure); } /** * @since 7.0. */ @Override public void each(Procedure procedure) { for ( item : this.items) { procedure.value(item); } } @Override public void forEachWithIndex(IntProcedure procedure) { for (int i = 0; i \< this.items.length; i++) { procedure.value(this.items[i], i); } } @Override public int count(Predicate predicate) { int count = 0; for ( item : this.items) { if (predicate.accept(item)) { count++; } } return count; } @Override public boolean anySatisfy(Predicate predicate) { for ( item : this.items) { if (predicate.accept(item)) { return true; } } return false; } @Override public boolean allSatisfy(Predicate predicate) { for ( item : this.items) { if (!predicate.accept(item)) { return false; } } return true; } @Override public boolean noneSatisfy(Predicate predicate) { return !this.anySatisfy(predicate); } @Override public ImmutableList select(Predicate predicate) { return this.select(predicate, new ArrayList()).toImmutable(); } /** * @since 8.1. */ @Override public \Collection> R select(Predicate predicate, R target) { for ( item : this.items) { if (predicate.accept(item)) { target.add(item); } } return target; } @Override public ImmutableList reject(Predicate predicate) { return this.reject(predicate, new ArrayList()).toImmutable(); } /** * @since 8.1. */ @Override public \Collection> R reject(Predicate predicate, R target) { for ( item : this.items) { if (!predicate.accept(item)) { target.add(item); } } return target; } @Override public detectIfNone(Predicate predicate, ifNone) { for ( item : this.items) { if (predicate.accept(item)) { return item; } } return ifNone; } @Override public \ ImmutableList\ collect(ToObjectFunction\ function) { FastList\ list = this.collect(function, FastList.newList(this.items.length)); return list.toImmutable(); } /** * @since 8.1. */ @Override public \\> R collect(ToObjectFunction\ function, R target) { for ( item : this.items) { target.add(function.valueOf(item)); } return target; } @Override public sum() { result = ; compensation = ; for ( item : this.items) { adjustedValue = item - compensation; nextSum = result + adjustedValue; compensation = nextSum - result - adjustedValue; result = nextSum; } return result; } public sum() { result = ; for ( item : this.items) { result += item; } return result; } @Override public max() { max = this.items[0]; for (int i = 1; i \< this.items.length; i++) { value = this.items[i]; if (<(lessThan.(type))("max", "value")>) { max = value; } } return max; } @Override public maxIfEmpty( defaultValue) { return this.max(); } @Override public min() { min = this.items[0]; for (int i = 1; i \< this.items.length; i++) { value = this.items[i]; if (<(lessThan.(type))("value", "min")>) { min = value; } } return min; } @Override public minIfEmpty( defaultValue) { return this.min(); } @Override public double average() { return this.sum() / (double) this.size(); } @Override public double median() { [] sortedArray = this.toSortedArray(); int middleIndex = sortedArray.length >\> 1; if (sortedArray.length > 1 && (sortedArray.length & 1) == 0) { first = sortedArray[middleIndex]; second = sortedArray[middleIndex - 1]; return (first + second) / 2.0; } return sortedArray[middleIndex]; } @Override public [] toSortedArray() { [] array = this.toArray(); Arrays.sort(array); return array; } @Override public dotProduct(List list) { if (this.size() != list.size()) { throw new IllegalArgumentException("Lists used in dotProduct must be the same size"); } sum = ; for (int i = 0; i \< this.size(); i++) { sum += this.items[i] * list.get(i); } return sum; } @Override public LazyIterable asReversed() { return ReverseIterable.adapt(this); } @Override public MutableList toSortedList() { return ArrayList.newList(this).sortThis(); } @Override public int binarySearch( value) { return Arrays.binarySearch(this.items, value); } @Override public [] toArray() { [] newItems = new [this.items.length]; System.arraycopy(this.items, 0, newItems, 0, this.items.length); return newItems; } @Override public [] toArray([] target) { if (target.length \< this.items.length) { target = new [this.items.length]; } System.arraycopy(this.items, 0, target, 0, this.items.length); return target; } @Override public boolean contains( value) { for ( item : this.items) { if (<(equals.(type))("item", "value")>) { return true; } } return false; } @Override public boolean containsAll(... source) { for ( value : source) { if (!this.contains(value)) { return false; } } return true; } @Override public boolean containsAll(Iterable source) { for (Iterator iterator = source.Iterator(); iterator.hasNext(); ) { if (!this.contains(iterator.next())) { return false; } } return true; } @Override public MutableList toList() { return ArrayList.newList(this); } @Override public MutableSet toSet() { return HashSet.newSet(this); } @Override public MutableBag toBag() { return HashBag.newBag(this); } @Override public LazyIterable asLazy() { return new LazyIterableAdapter(this); } @Override public ImmutableList toImmutable() { return this; } @Override public ImmutableArrayList toReversed() { return ImmutableArrayList.newList(this.asReversed()); } @Override public ImmutableList newWith( element) { [] newItems = new [this.items.length + 1]; System.arraycopy(this.items, 0, newItems, 0, this.items.length); newItems[this.items.length] = element; return new ImmutableArrayList(newItems); } @Override public ImmutableList newWithout( element) { int index = this.indexOf(element); if (index != -1) { [] newItems = new [this.items.length - 1]; System.arraycopy(this.items, 0, newItems, 0, index); System.arraycopy(this.items, index + 1, newItems, index, this.items.length - index - 1); return Lists.immutable.with(newItems); } return this; } @Override public ImmutableList newWithAll(Iterable elements) { [] newItems = new [this.items.length + elements.size()]; System.arraycopy(this.items, 0, newItems, 0, this.items.length); int index = 0; for (Iterator iterator = elements.Iterator(); iterator.hasNext(); index++) { newItems[this.items.length + index] = iterator.next(); } return new ImmutableArrayList(newItems); } @Override public ImmutableList newWithoutAll(Iterable elements) { MutableList mutableList = this.toList(); mutableList.removeAll(elements); return mutableList.toImmutable(); } @Override public int size() { return this.items.length; } @Override public boolean isEmpty() { return false; } @Override public boolean notEmpty() { return true; } @Override public \ T injectInto(T injectedValue, ObjectToObjectFunction\ function) { T result = injectedValue; for (int i = 0; i \< this.items.length; i++) { result = function.valueOf(result, this.items[i]); } return result; } @Override public \ T injectIntoWithIndex(T injectedValue, ObjectIntToObjectFunction\ function) { T result = injectedValue; for (int i = 0; i \< this.items.length; i++) { result = function.valueOf(result, this.items[i], i); } return result; } @Override public RichIterable\<Iterable> chunk(int size) { if (size \<= 0) { throw new IllegalArgumentException("Size for groups must be positive but was: " + size); } MutableList\<Iterable> result = Lists.mutable.empty(); if (this.notEmpty()) { if (this.size() \<= size) { result.add(this); } else { Iterator iterator = this.Iterator(); while (iterator.hasNext()) { MutableList batch = Lists.mutable.empty(); for (int i = 0; i \< size && iterator.hasNext(); i++) { batch.add(iterator.next()); } result.add(batch.toImmutable()); } } } return result.toImmutable(); } @Override public boolean equals(Object otherList) { if (otherList == this) { return true; } if (!(otherList instanceof List)) { return false; } List list = (List) otherList; if (this.items.length != list.size()) { return false; } for (int i = 0; i \< this.items.length; i++) { if (<(notEquals.(type))("this.items[i]", "list.get(i)")>) { return false; } } return true; } @Override public int hashCode() { int hashCode = 1; for ( item : this.items) { hashCode = 31 * hashCode + <(hashCode.(type))("item")>; } return hashCode; } @Override public String toString() { return this.makeString("[", ", ", "]"); } @Override public String makeString() { return this.makeString(", "); } @Override public String makeString(String separator) { return this.makeString("", separator, ""); } @Override public String makeString(String start, String separator, String end) { Appendable stringBuilder = new StringBuilder(); this.appendString(stringBuilder, start, separator, end); return stringBuilder.toString(); } @Override public void appendString(Appendable appendable) { this.appendString(appendable, ", "); } @Override public void appendString(Appendable appendable, String separator) { this.appendString(appendable, "", separator, ""); } @Override public void appendString(Appendable appendable, String start, String separator, String end) { try { appendable.append(start); for (int i = 0; i \< this.items.length; i++) { if (i > 0) { appendable.append(separator); } value = this.items[i]; appendable.append(String.valueOf(value)); } appendable.append(end); } catch (IOException e) { throw new RuntimeException(e); } } /** * @since 6.0. */ @Override public ImmutableList distinct() { ArrayList target = new ArrayList(); MutableSet seenSoFar = new HashSet(this.size()); for ( each : this.items) { if (seenSoFar.add(each)) { target.add(each); } } return target.toImmutable(); } @Override public ImmutableList subList(int fromIndex, int toIndex) { throw new UnsupportedOperationException("subList not yet implemented!"); } /** * @since 9.1. */ @Override public ImmutableList\<Pair> zip(Iterable iterable) { int size = this.size(); int otherSize = iterable.size(); MutableList\<Pair> target = Lists.mutable.withInitialCapacity(Math.min(size, otherSize)); Iterator iterator = iterable.Iterator(); for (int i = 0; i \< size && iterator.hasNext(); i++) { target.add(PrimitiveTuples.pair(this.items[i], iterator.next())); } return target.toImmutable(); } /** * @since 9.1. */ @Override public \ ImmutableList\<ObjectPair\> zip(Iterable\ iterable) { int size = this.size(); int otherSize = Iterate.sizeOf(iterable); MutableList\<ObjectPair\> target = Lists.mutable.withInitialCapacity(Math.min(size, otherSize)); Iterator\ iterator = iterable.iterator(); for (int i = 0; i \< size && iterator.hasNext(); i++) { target.add(PrimitiveTuples.pair(this.items[i], iterator.next())); } return target.toImmutable(); } private class InternalIterator implements Iterator { /** * Index of element to be returned by subsequent call to next. */ private int currentIndex; @Override public boolean hasNext() { return this.currentIndex != ImmutableArrayList.this.items.length; } @Override public next() { if (!this.hasNext()) { throw new NoSuchElementException(); } next = ImmutableArrayList.this.items[this.currentIndex]; this.currentIndex++; return next; } } @Override public Spliterator.Of spliterator() { int characteristics = Spliterator.ORDERED | Spliterator.IMMUTABLE; return Spliterators.spliterator(this.items, characteristics); } } >> immutablePrimitiveEmptyList.stg000066400000000000000000000246241407344533200424630ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/list/immutableimport "copyrightAndOthers.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/list/immutable/primitive" fileName(primitive) ::= "ImmutableEmptyList" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.list.immutable.primitive; import java.io.IOException; import java.io.Serializable; import java.util.NoSuchElementException; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.bag.primitive.MutableBag; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ObjectToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.block.procedure.primitive.IntProcedure; import org.eclipse.collections.api.iterator.Iterator; import org.eclipse.collections.api.list.ImmutableList; import org.eclipse.collections.api.list.primitive.ImmutableList; import org.eclipse.collections.api.list.primitive.List; import org.eclipse.collections.api.list.primitive.MutableList; import org.eclipse.collections.api.set.primitive.MutableSet; import org.eclipse.collections.api.tuple.primitive.Pair; import org.eclipse.collections.api.tuple.primitive.ObjectPair; import org.eclipse.collections.impl.bag.mutable.primitive.HashBag; import org.eclipse.collections.impl.factory.Lists; import org.eclipse.collections.impl.factory.primitive.Lists; import org.eclipse.collections.impl.iterator.ImmutableEmptyIterator; import org.eclipse.collections.impl.lazy.primitive.LazyIterableAdapter; import org.eclipse.collections.impl.lazy.primitive.ReverseIterable; import org.eclipse.collections.impl.list.mutable.primitive.ArrayList; import org.eclipse.collections.impl.set.mutable.primitive.HashSet; import java.util.Spliterator; import java.util.Spliterators; /** * ImmutableEmptyList is an optimization for {@link ImmutableList} of size 0. * This file was automatically generated from template file immutablePrimitiveEmptyList.stg. */ final class ImmutableEmptyList implements ImmutableList, Serializable { static final ImmutableList INSTANCE = new ImmutableEmptyList(); private static final long serialVersionUID = 1L; private Object readResolve() { return INSTANCE; } @Override public get(int index) { throw new IndexOutOfBoundsException("Index: " + index + ", Size: 0"); } @Override public getFirst() { throw new IndexOutOfBoundsException("Index: 0, Size: 0"); } @Override public getLast() { throw new IndexOutOfBoundsException("Index: 0, Size: 0"); } @Override public int indexOf( value) { return -1; } @Override public int lastIndexOf( value) { return -1; } @Override public Iterator Iterator() { return ImmutableEmptyIterator.INSTANCE; } @Override public void forEach(Procedure procedure) { } /** * @since 7.0. */ @Override public void each(Procedure procedure) { } @Override public void forEachWithIndex(IntProcedure procedure) { } @Override public int count(Predicate predicate) { return 0; } @Override public boolean anySatisfy(Predicate predicate) { return false; } @Override public boolean allSatisfy(Predicate predicate) { return true; } @Override public boolean noneSatisfy(Predicate predicate) { return true; } @Override public ImmutableList select(Predicate predicate) { return this; } @Override public ImmutableList reject(Predicate predicate) { return this; } @Override public detectIfNone(Predicate predicate, ifNone) { return ifNone; } @Override public \ ImmutableList\ collect(ToObjectFunction\ function) { return Lists.immutable.of(); } <(arithmeticMethods.(type))(name, type)> @Override public [] toArray() { return new [0]; } @Override public [] toArray([] target) { return target; } @Override public boolean contains( value) { return false; } @Override public boolean containsAll(... source) { return source.length == 0; } @Override public boolean containsAll(Iterable source) { return source.isEmpty(); } @Override public LazyIterable asReversed() { return ReverseIterable.adapt(this); } @Override public MutableList toList() { return new ArrayList(); } @Override public MutableSet toSet() { return new HashSet(); } @Override public MutableBag toBag() { return new HashBag(); } @Override public LazyIterable asLazy() { return new LazyIterableAdapter(this); } @Override public ImmutableList toImmutable() { return this; } @Override public ImmutableEmptyList toReversed() { return this; } @Override public ImmutableList newWith( element) { return Lists.immutable.with(element); } @Override public ImmutableList newWithout( element) { return this; } @Override public ImmutableList newWithAll(Iterable elements) { return Lists.immutable.withAll(elements); } @Override public ImmutableList newWithoutAll(Iterable elements) { return this; } @Override public int size() { return 0; } @Override public boolean isEmpty() { return true; } @Override public boolean notEmpty() { return false; } @Override public \ T injectInto(T injectedValue, ObjectToObjectFunction\ function) { return injectedValue; } @Override public \ T injectIntoWithIndex(T injectedValue, ObjectIntToObjectFunction\ function) { return injectedValue; } @Override public RichIterable\<Iterable> chunk(int size) { return Lists.immutable.empty(); } @Override public boolean equals(Object otherList) { if (otherList == this) { return true; } if (!(otherList instanceof List)) { return false; } List list = (List) otherList; return list.isEmpty(); } @Override public int hashCode() { return 1; } @Override public String toString() { return "[]"; } @Override public String makeString() { return ""; } @Override public String makeString(String separator) { return ""; } @Override public String makeString(String start, String separator, String end) { return start + end; } @Override public void appendString(Appendable appendable) { } @Override public void appendString(Appendable appendable, String separator) { } @Override public void appendString(Appendable appendable, String start, String separator, String end) { try { appendable.append(start); appendable.append(end); } catch (IOException e) { throw new RuntimeException(e); } } /** * @since 6.0. */ @Override public ImmutableList distinct() { return INSTANCE; } @Override public ImmutableList subList(int fromIndex, int toIndex) { throw new UnsupportedOperationException("subList not yet implemented!"); } /** * @since 9.1. */ @Override public ImmutableList\<Pair> zip(Iterable iterable) { return Lists.immutable.empty(); } /** * @since 9.1. */ @Override public \ ImmutableList\<ObjectPair\> zip(Iterable\ iterable) { return Lists.immutable.empty(); } @Override public Spliterator.Of spliterator() { return Spliterators.emptySpliterator(); } } >> arithmeticMethods ::= [ "byte": "allMethods", "short": "allMethods", "char": "allMethods", "int": "allMethods", "long": "allMethods", "float": "allMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods(name, type) ::=<< @Override public sum() { return 0; } @Override public max() { throw new NoSuchElementException(); } @Override public maxIfEmpty( defaultValue) { return defaultValue; } @Override public min() { throw new NoSuchElementException(); } @Override public minIfEmpty( defaultValue) { return defaultValue; } @Override public double average() { throw new ArithmeticException(); } @Override public double median() { throw new ArithmeticException(); } @Override public [] toSortedArray() { return new [0]; } @Override public MutableList toSortedList() { return new ArrayList(); } @Override public int binarySearch( value) { return -1; } @Override public dotProduct(List list) { if (!list.isEmpty()) { throw new IllegalArgumentException("Lists used in dotProduct must be the same size"); } return 0; } >> noMethods(name, type) ::= "" immutablePrimitiveListFactoryImpl.stg000066400000000000000000000076471407344533200436240ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/list/immutableimport "copyrightAndOthers.stg" targetPath() ::= "org/eclipse/collections/impl/list/immutable/primitive" fileName(primitive) ::= "ImmutableListFactoryImpl" class(primitive) ::= << >> body(type, name, wrapperName) ::= << package org.eclipse.collections.impl.list.immutable.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.factory.list.primitive.ImmutableListFactory; import org.eclipse.collections.api.list.primitive.ImmutableList; import org.eclipse.collections.impl.factory.primitive.Lists; <(wideStreamImport.(type))> /** * ImmutableListFactoryImpl is a factory implementation which creates instances of type {@link ImmutableList}. * This file was automatically generated from template file immutablePrimitiveListFactoryImpl.stg. * * @since 3.2. */ public enum ImmutableListFactoryImpl implements ImmutableListFactory { INSTANCE; @Override public ImmutableList empty() { return ImmutableEmptyList.INSTANCE; } @Override public ImmutableList of() { return this.empty(); } @Override public ImmutableList with() { return this.empty(); } @Override public ImmutableList of( one) { return this.with(one); } @Override public ImmutableList with( one) { return new ImmutableSingletonList(one); } @Override public ImmutableList of(... items) { return this.with(items); } @Override public ImmutableList with(... items) { if (items == null || items.length == 0) { return this.with(); } if (items.length == 1) { return this.with(items[0]); } return ImmutableArrayList.newListWith(items); } @Override public ImmutableList ofAll(Iterable items) { return this.withAll(items); } @Override public ImmutableList withAll(Iterable items) { if (items instanceof ImmutableList) { return (ImmutableList) items; } if (items == null || items.size() == 0) { return this.with(); } if (items.size() == 1) { return this.with(items.toArray()[0]); } return ImmutableArrayList.newList(items); } /** * @since 10.0 */ @Override public ImmutableList ofAll(Iterable\<\> iterable) { return this.withAll(iterable); } /** * @since 10.0 */ @Override public ImmutableList withAll(Iterable\<\> iterable) { return Lists.mutable.withAll(iterable).toImmutable(); } <(streamMethods.(type))()> } >> streamMethods ::= [ "byte": "noMethods", "short": "noMethods", "char": "noMethods", "int": "allMethods", "long": "allMethods", "float": "noMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods() ::= << /** * @since 9.0 */ @Override public ImmutableList ofAll(<(wideStream.(type))> items) { return this.withAll(items); } /** * @since 9.0 */ @Override public ImmutableList withAll(<(wideStream.(type))> items) { return this.with(items.toArray()); } >> noMethods() ::= "" wideStream ::= [ "int": "IntStream", "long": "LongStream", "double": "DoubleStream", default: "no matching wide type" ] wideStreamImport ::= [ "boolean": "", "byte": "", "short": "", "char": "", "int": "import java.util.stream.IntStream;", "long": "import java.util.stream.LongStream;", "float": "", "double": "import java.util.stream.DoubleStream;", default: "no matching wide type" ] immutablePrimitiveSingletonList.stg000066400000000000000000000326371407344533200433320ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/list/immutableimport "copyrightAndOthers.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/list/immutable/primitive" fileName(primitive) ::= "ImmutableSingletonList" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.list.immutable.primitive; import java.io.IOException; import java.io.Serializable; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.bag.primitive.MutableBag; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ObjectToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.block.procedure.primitive.IntProcedure; import org.eclipse.collections.api.iterator.Iterator; import org.eclipse.collections.api.list.ImmutableList; import org.eclipse.collections.api.list.primitive.ImmutableList; import org.eclipse.collections.api.list.primitive.List; import org.eclipse.collections.api.list.primitive.MutableList; import org.eclipse.collections.api.set.primitive.MutableSet; import org.eclipse.collections.api.tuple.primitive.Pair; import org.eclipse.collections.api.tuple.primitive.ObjectPair; import org.eclipse.collections.impl.bag.mutable.primitive.HashBag; import org.eclipse.collections.impl.factory.Lists; import org.eclipse.collections.impl.factory.primitive.Lists; import org.eclipse.collections.impl.iterator.SingletonIterator; import org.eclipse.collections.impl.lazy.primitive.LazyIterableAdapter; import org.eclipse.collections.impl.lazy.primitive.ReverseIterable; import org.eclipse.collections.impl.list.mutable.primitive.ArrayList; import org.eclipse.collections.impl.set.mutable.primitive.HashSet; import org.eclipse.collections.impl.utility.Iterate; import org.eclipse.collections.impl.tuple.primitive.PrimitiveTuples; import java.util.Spliterator; import org.eclipse.collections.impl.stream.primitive.SingletonSpliterator; /** * ImmutableSingletonList is an optimization for {@link ImmutableList} of size 1. * This file was automatically generated from template file immutablePrimitiveSingletonList.stg. */ final class ImmutableSingletonList implements ImmutableList, Serializable { private static final long serialVersionUID = 1L; private final element1; ImmutableSingletonList( element) { this.element1 = element; } @Override public get(int index) { if (index == 0) { return this.element1; } throw new IndexOutOfBoundsException("Index: " + index + ", Size: 1"); } @Override public getFirst() { return this.element1; } @Override public getLast() { return this.element1; } @Override public int indexOf( value) { return <(equals.(type))("this.element1", "value")> ? 0 : -1; } @Override public int lastIndexOf( value) { return <(equals.(type))("this.element1", "value")> ? 0 : -1; } @Override public Iterator Iterator() { return new SingletonIterator(element1); } @Override public void forEach(Procedure procedure) { this.each(procedure); } /** * @since 7.0. */ @Override public void each(Procedure procedure) { procedure.value(this.element1); } @Override public void forEachWithIndex(IntProcedure procedure) { procedure.value(this.element1, 0); } @Override public int count(Predicate predicate) { return predicate.accept(this.element1) ? 1 : 0; } @Override public boolean anySatisfy(Predicate predicate) { return predicate.accept(this.element1); } @Override public boolean allSatisfy(Predicate predicate) { return predicate.accept(this.element1); } @Override public boolean noneSatisfy(Predicate predicate) { return !predicate.accept(this.element1); } @Override public ImmutableList select(Predicate predicate) { return predicate.accept(this.element1) ? ArrayList.newListWith(this.element1).toImmutable() : new ArrayList().toImmutable(); } @Override public ImmutableList reject(Predicate predicate) { return predicate.accept(this.element1) ? new ArrayList().toImmutable() : ArrayList.newListWith(this.element1).toImmutable(); } @Override public detectIfNone(Predicate predicate, ifNone) { return predicate.accept(this.element1) ? this.element1 : ifNone; } @Override public \ ImmutableList\ collect(ToObjectFunction\ function) { return Lists.immutable.with(function.valueOf(this.element1)); } <(arithmeticMethods.(type))(name, type)> @Override public [] toArray() { return new []{this.element1}; } @Override public [] toArray([] target) { if (target.length \< 1) { target = new []{this.element1}; } else { target[0] = this.element1; } return target; } @Override public boolean contains( value) { return <(equals.(type))("this.element1", "value")>; } @Override public boolean containsAll(... source) { for ( value : source) { if (<(notEquals.(type))("this.element1", "value")>) { return false; } } return true; } @Override public boolean containsAll(Iterable source) { for (Iterator iterator = source.Iterator(); iterator.hasNext(); ) { if (<(notEquals.(type))("this.element1", "iterator.next()")>) { return false; } } return true; } @Override public LazyIterable asReversed() { return ReverseIterable.adapt(this); } @Override public MutableList toList() { return ArrayList.newListWith(this.element1); } @Override public MutableSet toSet() { return HashSet.newSetWith(this.element1); } @Override public MutableBag toBag() { return HashBag.newBagWith(this.element1); } @Override public LazyIterable asLazy() { return new LazyIterableAdapter(this); } @Override public ImmutableList toImmutable() { return this; } @Override public ImmutableSingletonList toReversed() { return this; } @Override public ImmutableList newWith( element) { return Lists.immutable.with(this.element1, element); } @Override public ImmutableList newWithout( element) { return <(equals.(type))("this.element1", "element")> ? Lists.immutable.with() : this; } @Override public ImmutableList newWithAll(Iterable elements) { ArrayList arrayList = ArrayList.newListWith(this.element1); arrayList.addAll(elements); return arrayList.toImmutable(); } @Override public ImmutableList newWithoutAll(Iterable elements) { return elements.contains(this.element1) ? Lists.immutable.with() : this; } @Override public int size() { return 1; } @Override public boolean isEmpty() { return false; } @Override public boolean notEmpty() { return true; } @Override public \ T injectInto(T injectedValue, ObjectToObjectFunction\ function) { return function.valueOf(injectedValue, this.element1); } @Override public \ T injectIntoWithIndex(T injectedValue, ObjectIntToObjectFunction\ function) { return function.valueOf(injectedValue, this.element1, 0); } @Override public RichIterable\<Iterable> chunk(int size) { if (size \<= 0) { throw new IllegalArgumentException("Size for groups must be positive but was: " + size); } return Lists.immutable.with(this); } @Override public boolean equals(Object otherList) { if (otherList == this) { return true; } if (!(otherList instanceof List)) { return false; } List list = (List) otherList; if (list.size() != 1) { return false; } return <(equals.(type))("this.element1", "list.get(0)")>; } @Override public int hashCode() { return 31 + <(hashCode.(type))("this.element1")>; } @Override public String toString() { return "[" + this.element1 + ']'; } @Override public String makeString() { return this.makeString(", "); } @Override public String makeString(String separator) { return this.makeString("", separator, ""); } @Override public String makeString(String start, String separator, String end) { Appendable stringBuilder = new StringBuilder(); this.appendString(stringBuilder, start, separator, end); return stringBuilder.toString(); } @Override public void appendString(Appendable appendable) { this.appendString(appendable, ", "); } @Override public void appendString(Appendable appendable, String separator) { this.appendString(appendable, "", separator, ""); } @Override public void appendString(Appendable appendable, String start, String separator, String end) { try { appendable.append(start); appendable.append(String.valueOf(this.element1)); appendable.append(end); } catch (IOException e) { throw new RuntimeException(e); } } /** * @since 6.0. */ @Override public ImmutableList distinct() { return this; } @Override public ImmutableList subList(int fromIndex, int toIndex) { throw new UnsupportedOperationException("subList not yet implemented!"); } /** * @since 9.1. */ @Override public ImmutableList\<Pair> zip(Iterable iterable) { if (iterable.isEmpty()) { return Lists.immutable.empty(); } return Lists.immutable.with(PrimitiveTuples.pair(this.element1, iterable.Iterator().next())); } /** * @since 9.1. */ @Override public \ ImmutableList\<ObjectPair\> zip(Iterable\ iterable) { if (Iterate.isEmpty(iterable)) { return Lists.immutable.empty(); } return Lists.immutable.with(PrimitiveTuples.pair(this.element1, Iterate.getFirst(iterable))); } @Override public Spliterator.Of spliterator() { return new SingletonSpliterator(this.element1); } } >> arithmeticMethods ::= [ "byte": "allMethods", "short": "allMethods", "char": "allMethods", "int": "allMethods", "long": "allMethods", "float": "allMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods(name, type) ::=<< @Override public sum() { return this.element1; } @Override public max() { return this.element1; } @Override public maxIfEmpty( defaultValue) { return this.element1; } @Override public min() { return this.element1; } @Override public minIfEmpty( defaultValue) { return this.element1; } @Override public double average() { return this.element1; } @Override public double median() { return this.element1; } @Override public [] toSortedArray() { return new []{this.element1}; } @Override public MutableList toSortedList() { return ArrayList.newListWith(this.element1); } @Override public int binarySearch( value) { if (<(equals.(type))("this.element1", "value")>) { return 0; } if (<(lessThan.(type))("this.element1", "value")>) { return -2; } return -1; } @Override public dotProduct(List list) { if (list.size() != 1) { throw new IllegalArgumentException("Lists used in dotProduct must be the same size"); } return this.element1 * list.getFirst(); } >> noMethods(name, type) ::= "" mutable/000077500000000000000000000000001407344533200336635ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/listmutablePrimitiveListFactoryImpl.stg000066400000000000000000000072771407344533200427470ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/list/mutableimport "copyrightAndOthers.stg" targetPath() ::= "org/eclipse/collections/impl/list/mutable/primitive" fileName(primitive) ::= "MutableListFactoryImpl" class(primitive) ::= << >> body(type, name, wrapperName) ::= << package org.eclipse.collections.impl.list.mutable.primitive; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.factory.list.primitive.MutableListFactory; import org.eclipse.collections.api.list.primitive.MutableList; import org.eclipse.collections.impl.factory.primitive.Lists; import org.eclipse.collections.impl.utility.Iterate; <(wideStreamImport.(type))> /** * MutableListFactoryImpl is a factory implementation which creates instances of type {@link MutableList}. * This file was automatically generated from template file mutablePrimitiveListFactoryImpl.stg. * * @since 6.0. */ public enum MutableListFactoryImpl implements MutableListFactory { INSTANCE; @Override public MutableList empty() { return new ArrayList(); } @Override public MutableList of() { return this.empty(); } @Override public MutableList with() { return this.empty(); } @Override public MutableList withInitialCapacity(int capacity) { return new ArrayList(capacity); } @Override public MutableList of(... items) { return this.with(items); } /** * Creates a new list using the passed {@code items} argument as the backing store. * \

* !!! WARNING: This method uses the passed in array, so can be very unsafe if the original * array is held onto anywhere else. !!! */ @Override public MutableList with(... items) { if (items == null || items.length == 0) { return this.with(); } return ArrayList.newListWith(items); } @Override public MutableList ofAll(Iterable items) { return this.withAll(items); } @Override public MutableList withAll(Iterable items) { return ArrayList.newList(items); } /** * @since 10.0 */ @Override public MutableList ofAll(Iterable\<\> iterable) { return this.withAll(iterable); } /** * @since 10.0 */ @Override public MutableList withAll(Iterable\<\> iterable) { return Iterate.collect(iterable, ::Value, Lists.mutable.empty()); } <(streamMethods.(type))()> } >> streamMethods ::= [ "byte": "noMethods", "short": "noMethods", "char": "noMethods", "int": "allMethods", "long": "allMethods", "float": "noMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods() ::= << /** * @since 9.0 */ @Override public MutableList ofAll(<(wideStream.(type))> items) { return this.withAll(items); } /** * @since 9.0 */ @Override public MutableList withAll(<(wideStream.(type))> items) { return this.with(items.toArray()); } >> noMethods() ::= "" wideStream ::= [ "int": "IntStream", "long": "LongStream", "double": "DoubleStream", default: "no matching wide type" ] wideStreamImport ::= [ "boolean": "", "byte": "", "short": "", "char": "", "int": "import java.util.stream.IntStream;", "long": "import java.util.stream.LongStream;", "float": "", "double": "import java.util.stream.DoubleStream;", default: "no matching wide type" ] primitiveArrayList.stg000066400000000000000000000733171407344533200402600ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/list/mutableimport "copyrightAndOthers.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/list/mutable/primitive" fileName(primitive) ::= "ArrayList" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.list.mutable.primitive; import java.io.Externalizable; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.NoSuchElementException; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.block.comparator.primitive.Comparator; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ObjectToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.IntProcedure; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.collection.primitive.MutableCollection; import org.eclipse.collections.api.iterator.MutableIterator; import org.eclipse.collections.api.iterator.Iterator; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.list.primitive.List; import org.eclipse.collections.api.list.primitive.ImmutableList; import org.eclipse.collections.api.list.primitive.MutableList; import org.eclipse.collections.api.set.primitive.Set; import org.eclipse.collections.api.set.primitive.MutableSet; import org.eclipse.collections.api.tuple.primitive.Pair; import org.eclipse.collections.api.tuple.primitive.ObjectPair; import org.eclipse.collections.impl.factory.Lists; import org.eclipse.collections.impl.factory.primitive.Lists; import org.eclipse.collections.impl.lazy.primitive.ReverseIterable; import org.eclipse.collections.impl.list.mutable.FastList; import org.eclipse.collections.impl.primitive.AbstractIterable; import org.eclipse.collections.impl.set.mutable.primitive.HashSet; import org.eclipse.collections.impl.tuple.primitive.PrimitiveTuples; import org.eclipse.collections.impl.utility.Iterate; import org.eclipse.collections.impl.utility.primitive.QuickSort; import java.util.Spliterator; import java.util.Spliterators; /** * ArrayList is similar to {@link FastList}, and is memory-optimized for primitives. * This file was automatically generated from template file primitiveArrayList.stg. * * @since 3.0. */ public class ArrayList extends AbstractIterable implements MutableList, Externalizable { private static final long serialVersionUID = 1L; private static final [] DEFAULT_SIZED_EMPTY_ARRAY = {}; private static final [] ZERO_SIZED_ARRAY = {}; private static final int MAXIMUM_ARRAY_SIZE = Integer.MAX_VALUE - 8; protected int size; protected transient [] items = DEFAULT_SIZED_EMPTY_ARRAY; public ArrayList() { } public ArrayList(int initialCapacity) { this.items = initialCapacity == 0 ? ZERO_SIZED_ARRAY : new [initialCapacity]; } public ArrayList(... array) { this.size = array.length; this.items = array; } /** * Creates a new list using the passed {@code elements} argument as the backing store. * \

* !!! WARNING: This method uses the passed in array, so can be very unsafe if the original * array is held onto anywhere else. !!! */ public static ArrayList newListWith(... elements) { return new ArrayList(elements); } public static ArrayList newList(Iterable source) { return ArrayList.newListWith(source.toArray()); } public static ArrayList newWithNValues(int size, value) { ArrayList newList = new ArrayList(size); newList.size = size; Arrays.fill(newList.items, value); return newList; } /** * Creates a new list by first copying the array passed in. */ public static ArrayList wrapCopy(... array) { [] newArray = new [array.length]; System.arraycopy(array, 0, newArray, 0, array.length); return new ArrayList(newArray); } @Override public int size() { return this.size; } @Override public void clear() { Arrays.fill(this.items, 0, size, <(zero.(type))>); this.size = 0; } @Override public boolean contains( value) { for (int i = 0; i \< this.size; i++) { if (<(equals.(type))("this.items[i]", "value")>) { return true; } } return false; } @Override public get(int index) { if (index \< this.size) { return this.items[index]; } throw this.newIndexOutOfBoundsException(index); } private IndexOutOfBoundsException newIndexOutOfBoundsException(int index) { return new IndexOutOfBoundsException("Index: " + index + " Size: " + this.size); } @Override public getFirst() { this.checkEmpty(); return this.items[0]; } @Override public getLast() { this.checkEmpty(); return this.items[this.size() - 1]; } private void checkEmpty() { if (this.isEmpty()) { throw this.newIndexOutOfBoundsException(0); } } @Override public int indexOf( value) { for (int i = 0; i \< this.size; i++) { if (<(equals.(type))("this.items[i]", "value")>) { return i; } } return -1; } @Override public int lastIndexOf( value) { for (int i = this.size - 1; i >= 0; i--) { if (<(equals.(type))("this.items[i]", "value")>) { return i; } } return -1; } public void trimToSize() { if (this.size \< this.items.length) { this.transferItemsToNewArrayWithCapacity(this.size); } } private void transferItemsToNewArrayWithCapacity(int newCapacity) { this.items = this.copyItemsWithNewCapacity(newCapacity); } private [] copyItemsWithNewCapacity(int newCapacity) { [] newItems = new [newCapacity]; System.arraycopy(this.items, 0, newItems, 0, Math.min(this.size, newCapacity)); return newItems; } private int sizePlusFiftyPercent(int oldSize) { int result = oldSize + (oldSize >\> 1) + 1; return result \< oldSize ? MAXIMUM_ARRAY_SIZE : result; } public void ensureCapacity(int minCapacity) { int oldCapacity = this.items.length; if (minCapacity > oldCapacity) { int newCapacity = Math.max(this.sizePlusFiftyPercent(oldCapacity), minCapacity); this.transferItemsToNewArrayWithCapacity(newCapacity); } } private void ensureCapacityForAdd() { if (this.items == DEFAULT_SIZED_EMPTY_ARRAY) { this.items = new [10]; } else { this.transferItemsToNewArrayWithCapacity(this.sizePlusFiftyPercent(this.size)); } } @Override public boolean add( newItem) { if (this.items.length == this.size) { this.ensureCapacityForAdd(); } this.items[this.size] = newItem; this.size++; return true; } @Override public boolean addAll(... source) { if (source.length \< 1) { return false; } this.copyItems(source.length, source); return true; } @Override public boolean addAll(Iterable source) { if (source instanceof ArrayList) { if (source.isEmpty()) { return false; } ArrayList other = (ArrayList) source; this.copyItems(other.size(), other.items); return true; } return this.addAll(source.toArray()); } private void copyItems(int sourceSize, [] source) { int newSize = this.size + sourceSize; this.ensureCapacity(newSize); System.arraycopy(source, 0, this.items, this.size, sourceSize); this.size = newSize; } private void throwOutOfBounds(int index) { throw this.newIndexOutOfBoundsException(index); } @Override public void addAtIndex(int index, element) { if (index > -1 && index \< this.size) { this.addAtIndexLessThanSize(index, element); } else if (index == this.size) { this.add(element); } else { this.throwOutOfBounds(index); } } private void addAtIndexLessThanSize(int index, element) { int oldSize = this.size; this.size++; if (this.items.length == oldSize) { [] newItems = new [this.sizePlusFiftyPercent(oldSize)]; if (index > 0) { System.arraycopy(this.items, 0, newItems, 0, index); } System.arraycopy(this.items, index, newItems, index + 1, oldSize - index); this.items = newItems; } else { System.arraycopy(this.items, index, this.items, index + 1, oldSize - index); } this.items[index] = element; } @Override public boolean addAllAtIndex(int index, ... source) { if (index > this.size || index \< 0) { this.throwOutOfBounds(index); } if (source.length == 0) { return false; } int sourceSize = source.length; int newSize = this.size + sourceSize; this.ensureCapacity(newSize); this.shiftElementsAtIndex(index, sourceSize); System.arraycopy(source, 0, this.items, index, sourceSize); this.size = newSize; return true; } @Override public boolean addAllAtIndex(int index, Iterable source) { return this.addAllAtIndex(index, source.toArray()); } private void shiftElementsAtIndex(int index, int sourceSize) { int numberToMove = this.size - index; if (numberToMove > 0) { System.arraycopy(this.items, index, this.items, index + sourceSize, numberToMove); } } @Override public boolean remove( value) { int index = this.indexOf(value); if (index >= 0) { this.removeAtIndex(index); return true; } return false; } @Override public boolean removeIf(Predicate predicate) { int currentFilledIndex = 0; for (int i = 0; i \< this.size; i++) { item = this.items[i]; if (!predicate.accept(item)) { // keep it if (currentFilledIndex != i) { this.items[currentFilledIndex] = item; } currentFilledIndex++; } } boolean changed = currentFilledIndex \< this.size; this.wipeAndResetTheEnd(currentFilledIndex); return changed; } private void wipeAndResetTheEnd(int newCurrentFilledIndex) { for (int i = newCurrentFilledIndex; i \< this.size; i++) { this.items[i] = ; } this.size = newCurrentFilledIndex; } @Override public boolean removeAll(Iterable source) { boolean modified = false; for (int index = 0; index \< this.size; index++) { if (source.contains(this.get(index))) { this.removeAtIndex(index); index--; modified = true; } } return modified; } @Override public boolean removeAll(... source) { HashSet set = HashSet.newSetWith(source); [] newItems = new [this.size]; int count = 0; int oldSize = this.size; for (int index = 0; index \< this.size; index++) { if (!set.contains(this.items[index])) { newItems[count] = this.items[index]; count++; } } this.items = newItems; this.size = count; return oldSize != this.size; } @Override public boolean retainAll(Iterable source) { int oldSize = this.size(); final Set sourceSet = source instanceof Set ? (Set) source : source.toSet(); ArrayList retained = this.select(sourceSet::contains); this.size = retained.size; this.items = retained.items; return oldSize != this.size(); } @Override public boolean retainAll(... source) { return this.retainAll(HashSet.newSetWith(source)); } @Override public removeAtIndex(int index) { previous = this.get(index); int totalOffset = this.size - index - 1; if (totalOffset > 0) { System.arraycopy(this.items, index + 1, this.items, index, totalOffset); } --this.size; this.items[this.size] = ; return previous; } @Override public set(int index, element) { previous = this.get(index); this.items[index] = element; return previous; } @Override public void swap(int index1, int index2) { value = this.get(index1); this.items[index1] = this.items[index2]; this.items[index2] = value; } @Override public ArrayList with( element) { this.add(element); return this; } @Override public ArrayList without( element) { this.remove(element); return this; } @Override public ArrayList withAll(Iterable elements) { this.addAll(elements.toArray()); return this; } @Override public ArrayList withoutAll(Iterable elements) { this.removeAll(elements); return this; } public ArrayList with( element1, element2) { this.add(element1); this.add(element2); return this; } public ArrayList with( element1, element2, element3) { this.add(element1); this.add(element2); this.add(element3); return this; } public ArrayList with( element1, element2, element3, ... elements) { this.add(element1); this.add(element2); this.add(element3); return this.withArrayCopy(elements, 0, elements.length); } private ArrayList withArrayCopy([] elements, int begin, int length) { this.ensureCapacity(this.size + length); System.arraycopy(elements, begin, this.items, this.size, length); this.size += length; return this; } @Override public MutableIterator Iterator() { return new InternalIterator(); } @Override public void forEach(Procedure procedure) { this.each(procedure); } /** * @since 7.0. */ @Override public void each(Procedure procedure) { for (int i = 0; i \< this.size; i++) { procedure.value(this.items[i]); } } @Override public void forEachWithIndex(IntProcedure procedure) { for (int i = 0; i \< this.size; i++) { procedure.value(this.items[i], i); } } @Override public \ T injectInto(T injectedValue, ObjectToObjectFunction\ function) { T result = injectedValue; for (int i = 0; i \< this.size; i++) { result = function.valueOf(result, this.items[i]); } return result; } @Override public \ T injectIntoWithIndex(T injectedValue, ObjectIntToObjectFunction\ function) { T result = injectedValue; for (int i = 0; i \< this.size; i++) { result = function.valueOf(result, this.items[i], i); } return result; } @Override public RichIterable\<Iterable> chunk(int size) { if (size \<= 0) { throw new IllegalArgumentException("Size for groups must be positive but was: " + size); } MutableList\<Iterable> result = Lists.mutable.empty(); if (this.notEmpty()) { if (this.size() \<= size) { result.add(Lists.mutable.withAll(this)); } else { Iterator iterator = this.Iterator(); while (iterator.hasNext()) { MutableList batch = Lists.mutable.empty(); for (int i = 0; i \< size && iterator.hasNext(); i++) { batch.add(iterator.next()); } result.add(batch); } } } return result; } @Override public int count(Predicate predicate) { int count = 0; for (int i = 0; i \< this.size; i++) { if (predicate.accept(this.items[i])) { count++; } } return count; } @Override public boolean anySatisfy(Predicate predicate) { for (int i = 0; i \< this.size; i++) { if (predicate.accept(this.items[i])) { return true; } } return false; } @Override public boolean allSatisfy(Predicate predicate) { for (int i = 0; i \< this.size; i++) { if (!predicate.accept(this.items[i])) { return false; } } return true; } @Override public boolean noneSatisfy(Predicate predicate) { return !this.anySatisfy(predicate); } @Override public ArrayList select(Predicate predicate) { return this.select(predicate, new ArrayList()); } /** * @since 8.1. */ @Override public \Collection> R select(Predicate predicate, R target) { for (int i = 0; i \< this.size; i++) { item = this.items[i]; if (predicate.accept(item)) { target.add(item); } } return target; } @Override public ArrayList reject(Predicate predicate) { return this.reject(predicate, new ArrayList()); } /** * @since 8.1. */ @Override public \Collection> R reject(Predicate predicate, R target) { for (int i = 0; i \< this.size; i++) { item = this.items[i]; if (!predicate.accept(item)) { target.add(item); } } return target; } @Override public detectIfNone(Predicate predicate, ifNone) { for (int i = 0; i \< this.size; i++) { item = this.items[i]; if (predicate.accept(item)) { return item; } } return ifNone; } @Override public \ MutableList\ collect(ToObjectFunction\ function) { return this.collect(function, FastList.newList(this.size)); } /** * @since 8.1. */ @Override public \\> R collect(ToObjectFunction\ function, R target) { for (int i = 0; i \< this.size; i++) { target.add(function.valueOf(this.items[i])); } return target; } @Override public max() { if (this.isEmpty()) { throw new NoSuchElementException(); } max = this.items[0]; for (int i = 1; i \< this.size; i++) { value = this.items[i]; if (<(lessThan.(type))("max", "value")>) { max = value; } } return max; } @Override public min() { if (this.isEmpty()) { throw new NoSuchElementException(); } min = this.items[0]; for (int i = 1; i \< this.size; i++) { value = this.items[i]; if (<(lessThan.(type))("value", "min")>) { min = value; } } return min; } @Override public sum() { result = ; compensation = ; for (int i = 0; i \< this.size; i++) { adjustedValue = this.items[i] - compensation; nextSum = result + adjustedValue; compensation = nextSum - result - adjustedValue; result = nextSum; } return result; } public sum() { result = ; for (int i = 0; i \< this.size; i++) { result += this.items[i]; } return result; } @Override public dotProduct(List list) { if (this.size != list.size()) { throw new IllegalArgumentException("Lists used in dotProduct must be the same size"); } sum = ; for (int i = 0; i \< this.size; i++) { sum += this.items[i] * list.get(i); } return sum; } @Override public [] toArray() { [] newItems = new [this.size]; System.arraycopy(this.items, 0, newItems, 0, this.size); return newItems; } @Override public [] toArray([] target) { if (target.length \< this.size) { target = new [this.size]; } System.arraycopy(this.items, 0, target, 0, this.size); return target; } @Override public boolean equals(Object otherList) { if (otherList == this) { return true; } if (!(otherList instanceof List)) { return false; } List list = (List) otherList; if (this.size != list.size()) { return false; } for (int i = 0; i \< this.size; i++) { if (<(notEquals.(type))("this.items[i]", "list.get(i)")>) { return false; } } return true; } @Override public int hashCode() { int hashCode = 1; for (int i = 0; i \< this.size; i++) { item = this.items[i]; hashCode = 31 * hashCode + <(hashCode.(type))("item")>; } return hashCode; } @Override public void appendString( Appendable appendable, String start, String separator, String end) { try { appendable.append(start); for (int i = 0; i \< this.size; i++) { if (i > 0) { appendable.append(separator); } value = this.items[i]; appendable.append(String.valueOf(value)); } appendable.append(end); } catch (IOException e) { throw new RuntimeException(e); } } @Override public MutableList asUnmodifiable() { return new UnmodifiableList(this); } @Override public MutableList asSynchronized() { return new SynchronizedList(this); } @Override public ImmutableList toImmutable() { return Lists.immutable.withAll(this); } @Override public void writeExternal(ObjectOutput out) throws IOException { out.writeInt(this.size); for (int i = 0; i \< this.size; i++) { out.write(this.items[i]); } } @Override public void readExternal(ObjectInput in) throws IOException { this.size = in.readInt(); this.items = new [this.size]; for (int i = 0; i \< this.size; i++) { this.items[i] = in.read(); } } @Override public LazyIterable asReversed() { return ReverseIterable.adapt(this); } @Override public ArrayList reverseThis() { int endIndex = this.size - 1; for (int i = 0; i \< this.size / 2; i++) { tempSwapValue = this.items[i]; this.items[i] = this.items[endIndex - i]; this.items[endIndex - i] = tempSwapValue; } return this; } @Override public ArrayList sortThis() { Arrays.sort(this.items, 0, this.size); return this; } @Override public ArrayList sortThis(Comparator comparator) { QuickSort.sort(this.items, 0, this.size() - 1, comparator); return this; } @Override public ArrayList toReversed() { return ArrayList.newList(this.asReversed()); } @Override public int binarySearch( value) { return Arrays.binarySearch(this.items, 0, this.size, value); } @Override public MutableList distinct() { ArrayList target = new ArrayList(); MutableSet seenSoFar = new HashSet(this.size()); for (int i = 0; i \< this.size; i++) { each = this.items[i]; if (seenSoFar.add(each)) { target.add(each); } } return target; } @Override public MutableList subList(int fromIndex, int toIndex) { throw new UnsupportedOperationException("subList not yet implemented!"); } /** * @since 9.1. */ @Override public MutableList\<Pair> zip(Iterable iterable) { int size = this.size(); int otherSize = iterable.size(); MutableList\<Pair> target = Lists.mutable.withInitialCapacity(Math.min(size, otherSize)); Iterator iterator = iterable.Iterator(); for (int i = 0; i \< size && i \< otherSize; i++) { target.add(PrimitiveTuples.pair(this.items[i], iterator.next())); } return target; } /** * Creates a new empty ArrayList. * * @since 9.2. */ public ArrayList newEmpty() { return new ArrayList(); } /** * @since 9.1. */ @Override public \ MutableList\<ObjectPair\> zip(Iterable\ iterable) { int size = this.size(); int otherSize = Iterate.sizeOf(iterable); MutableList\<ObjectPair\> target = Lists.mutable.withInitialCapacity(Math.min(size, otherSize)); Iterator\ iterator = iterable.iterator(); for (int i = 0; i \< size && iterator.hasNext(); i++) { target.add(PrimitiveTuples.pair(this.items[i], iterator.next())); } return target; } private class InternalIterator implements MutableIterator { /** * Index of element to be returned by subsequent call to next. */ private int currentIndex; private int lastIndex = -1; @Override public boolean hasNext() { return this.currentIndex != ArrayList.this.size(); } @Override public next() { if (!this.hasNext()) { throw new NoSuchElementException(); } next = ArrayList.this.items[this.currentIndex]; this.lastIndex = this.currentIndex++; return next; } @Override public void remove() { if (this.lastIndex == -1) { throw new IllegalStateException(); } ArrayList.this.removeAtIndex(this.lastIndex); this.currentIndex--; this.lastIndex = -1; } } @Override public Spliterator.Of spliterator() { int characteristics = Spliterator.ORDERED; return Spliterators.spliterator(this.items, 0, size, characteristics); } } >> synchronizedPrimitiveList.stg000066400000000000000000000312031407344533200416450ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/list/mutableimport "copyrightAndOthers.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/list/mutable/primitive" fileName(primitive) ::= "SynchronizedList" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.list.mutable.primitive; import java.util.Collection; import java.util.Comparator; import java.util.Random; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.block.comparator.primitive.Comparator; import org.eclipse.collections.api.block.function.primitive.IntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.IntProcedure; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.list.primitive.List; import org.eclipse.collections.api.list.primitive.ImmutableList; import org.eclipse.collections.api.list.primitive.MutableList; import org.eclipse.collections.api.tuple.primitive.Pair; import org.eclipse.collections.api.tuple.primitive.ObjectPair; import org.eclipse.collections.impl.collection.mutable.primitive.AbstractSynchronizedCollection; import org.eclipse.collections.impl.factory.primitive.Lists; import org.eclipse.collections.impl.lazy.primitive.LazyIterableAdapter; import org.eclipse.collections.impl.lazy.primitive.ReverseIterable; import java.util.Spliterator; /** * A synchronized view of a {@link MutableList}. It is imperative that the user manually synchronize on the on the * collection when iterating over it using an iterator or stream. * \

* This file was automatically generated from template file synchronizedPrimitiveList.stg. * * @see MutableList#asSynchronized() * @see MutableList#asSynchronized() * @since 3.1. */ public class SynchronizedList extends AbstractSynchronizedCollection implements MutableList { private static final long serialVersionUID = 1L; public SynchronizedList(MutableList list) { super(list); } public SynchronizedList(MutableList list, Object newLock) { super(list, newLock); } private MutableList getMutableList() { return (MutableList) this.getCollection(); } @Override public get(int index) { synchronized (this.getLock()) { return this.getMutableList().get(index); } } @Override public getFirst() { synchronized (this.getLock()) { return this.getMutableList().getFirst(); } } @Override public getLast() { synchronized (this.getLock()) { return this.getMutableList().getLast(); } } @Override public int indexOf( value) { synchronized (this.getLock()) { return this.getMutableList().indexOf(value); } } @Override public int lastIndexOf( value) { synchronized (this.getLock()) { return this.getMutableList().lastIndexOf(value); } } @Override public void addAtIndex(int index, element) { synchronized (this.getLock()) { this.getMutableList().addAtIndex(index, element); } } @Override public boolean addAllAtIndex(int index, ... source) { synchronized (this.getLock()) { return this.getMutableList().addAllAtIndex(index, source); } } @Override public boolean addAllAtIndex(int index, Iterable source) { synchronized (this.getLock()) { return this.getMutableList().addAllAtIndex(index, source); } } @Override public removeAtIndex(int index) { synchronized (this.getLock()) { return this.getMutableList().removeAtIndex(index); } } @Override public set(int index, element) { synchronized (this.getLock()) { return this.getMutableList().set(index, element); } } @Override public SynchronizedList with( element) { synchronized (this.getLock()) { this.getMutableList().add(element); } return this; } @Override public SynchronizedList without( element) { synchronized (this.getLock()) { this.getMutableList().remove(element); } return this; } @Override public SynchronizedList withAll(Iterable elements) { synchronized (this.getLock()) { this.getMutableList().addAll(elements.toArray()); } return this; } @Override public SynchronizedList withoutAll(Iterable elements) { synchronized (this.getLock()) { this.getMutableList().removeAll(elements); } return this; } @Override public MutableList select(Predicate predicate) { synchronized (this.getLock()) { return this.getMutableList().select(predicate); } } @Override public MutableList reject(Predicate predicate) { synchronized (this.getLock()) { return this.getMutableList().reject(predicate); } } @Override public \ MutableList\ collect(ToObjectFunction\ function) { synchronized (this.getLock()) { return this.getMutableList().collect(function); } } <(arithmeticMethods.(type))(name, type)> @Override public boolean equals(Object otherList) { synchronized (this.getLock()) { return this.getMutableList().equals(otherList); } } @Override public int hashCode() { synchronized (this.getLock()) { return this.getMutableList().hashCode(); } } @Override public LazyIterable asLazy() { synchronized (this.getLock()) { return new LazyIterableAdapter(this); } } @Override public MutableList asUnmodifiable() { synchronized (this.getLock()) { return new UnmodifiableList(this); } } @Override public MutableList asSynchronized() { return this; } @Override public ImmutableList toImmutable() { synchronized (this.getLock()) { int size = this.size(); if (size == 0) { return Lists.immutable.with(); } if (size == 1) { return Lists.immutable.with(this.getFirst()); } return Lists.immutable.with(this.toArray()); } } /** * @since 9.2. */ public MutableList newEmpty() { synchronized (this.getLock()) { return this.getMutableList().newEmpty(); } } @Override public MutableList reverseThis() { synchronized (this.getLock()) { this.getMutableList().reverseThis(); } return this; } @Override public MutableList toReversed() { synchronized (this.getLock()) { return this.getMutableList().toReversed(); } } @Override public LazyIterable asReversed() { return ReverseIterable.adapt(this); } @Override public void forEachWithIndex(IntProcedure procedure) { synchronized (this.getLock()) { this.getMutableList().forEachWithIndex(procedure); } } @Override public \ T injectIntoWithIndex(T injectedValue, ObjectIntToObjectFunction\ function) { synchronized (this.getLock()) { return this.getMutableList().injectIntoWithIndex(injectedValue, function); } } /** * @since 6.0. */ @Override public MutableList distinct() { synchronized (this.getLock()) { return this.getMutableList().distinct(); } } @Override public MutableList subList(int fromIndex, int toIndex) { throw new UnsupportedOperationException("subList not yet implemented!"); } /** * @since 9.1. */ public MutableList\<Pair> zip(Iterable iterable) { synchronized (this.getLock()) { return this.getMutableList().zip(iterable); } } /** * @since 9.1. */ public \ MutableList\<ObjectPair\> zip(Iterable\ iterable) { synchronized (this.getLock()) { return this.getMutableList().zip(iterable); } } /** * Returns a new MutableList using results obtained by applying the specified function to each element * and its corresponding index. * * @since 9.1. */ @Override public \ MutableList\ collectWithIndex(IntToObjectFunction\ function) { synchronized (this.getLock()) { return this.getMutableList().collectWithIndex(function); } } /** * Adds elements to the target Collection using results obtained by applying the specified function to each element * and its corresponding index. * * @since 9.1. */ public \> R collectWithIndex(IntToObjectFunction\ function, R target) { synchronized (this.getLock()) { return this.getMutableList().collectWithIndex(function, target); } } /** * This function needs to be synchronized manually */ @Override public Spliterator.Of spliterator() { return this.getMutableList().spliterator(); } } >> arithmeticMethods ::= [ "byte": "allMethods", "short": "allMethods", "char": "allMethods", "int": "allMethods", "long": "allMethods", "float": "allMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods(name, type) ::=<< @Override public MutableList sortThis() { synchronized (this.getLock()) { this.getMutableList().sortThis(); } return this; } @Override public MutableList sortThis(Comparator comparator) { synchronized (this.getLock()) { this.getMutableList().sortThis(comparator); } return this; } @Override public \ MutableList sortThisBy(ToObjectFunction\ function) { synchronized (this.getLock()) { this.getMutableList().sortThisBy(function); } return this; } @Override public \ MutableList sortThisBy(ToObjectFunction\ function, Comparator\ comparator) { synchronized (this.getLock()) { this.getMutableList().sortThisBy(function, comparator); } return this; } @Override public MutableList shuffleThis() { synchronized (this.getLock()) { this.getMutableList().shuffleThis(); } return this; } @Override public MutableList shuffleThis(Random rnd) { synchronized (this.getLock()) { this.getMutableList().shuffleThis(rnd); } return this; } @Override public int binarySearch( value) { synchronized (this.getLock()) { return this.getMutableList().binarySearch(value); } } @Override public dotProduct(List list) { synchronized (this.getLock()) { return this.getMutableList().dotProduct(list); } } >> noMethods(name, type) ::= "" unmodifiablePrimitiveList.stg000066400000000000000000000224351407344533200415730ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/list/mutableimport "copyrightAndOthers.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/list/mutable/primitive" fileName(primitive) ::= "UnmodifiableList" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.list.mutable.primitive; import java.util.Collection; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.block.function.primitive.IntToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.IntProcedure; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.tuple.primitive.Pair; import org.eclipse.collections.api.tuple.primitive.ObjectPair; import org.eclipse.collections.api.list.primitive.List; import org.eclipse.collections.api.list.primitive.ImmutableList; import org.eclipse.collections.api.list.primitive.MutableList; import org.eclipse.collections.impl.collection.mutable.primitive.AbstractUnmodifiableCollection; import org.eclipse.collections.impl.factory.primitive.Lists; import org.eclipse.collections.impl.lazy.primitive.ReverseIterable; import java.util.Spliterator; /** * This file was automatically generated from template file unmodifiablePrimitiveList.stg. * * @since 3.1. */ public class UnmodifiableList extends AbstractUnmodifiableCollection implements MutableList { private static final long serialVersionUID = 1L; public UnmodifiableList(MutableList list) { super(list); } private MutableList getMutableList() { return (MutableList) this.getCollection(); } @Override public get(int index) { return this.getMutableList().get(index); } @Override public getFirst() { return this.getMutableList().getFirst(); } @Override public getLast() { return this.getMutableList().getLast(); } @Override public int indexOf( value) { return this.getMutableList().indexOf(value); } @Override public int lastIndexOf( value) { return this.getMutableList().lastIndexOf(value); } @Override public void addAtIndex(int index, element) { throw new UnsupportedOperationException("Cannot call addAtIndex() on " + this.getClass().getSimpleName()); } @Override public boolean addAllAtIndex(int index, ... source) { throw new UnsupportedOperationException("Cannot call addAllAtIndex() on " + this.getClass().getSimpleName()); } @Override public boolean addAllAtIndex(int index, Iterable source) { throw new UnsupportedOperationException("Cannot call addAllAtIndex() on " + this.getClass().getSimpleName()); } @Override public removeAtIndex(int index) { throw new UnsupportedOperationException("Cannot call removeAtIndex() on " + this.getClass().getSimpleName()); } @Override public set(int index, element) { throw new UnsupportedOperationException("Cannot call set() on " + this.getClass().getSimpleName()); } @Override public UnmodifiableList with( element) { throw new UnsupportedOperationException("Cannot call with() on " + this.getClass().getSimpleName()); } @Override public UnmodifiableList without( element) { throw new UnsupportedOperationException("Cannot call without() on " + this.getClass().getSimpleName()); } @Override public UnmodifiableList withAll(Iterable elements) { throw new UnsupportedOperationException("Cannot call withAll() on " + this.getClass().getSimpleName()); } @Override public UnmodifiableList withoutAll(Iterable elements) { throw new UnsupportedOperationException("Cannot call withoutAll() on " + this.getClass().getSimpleName()); } @Override public MutableList select(Predicate predicate) { return this.getMutableList().select(predicate); } @Override public MutableList reject(Predicate predicate) { return this.getMutableList().reject(predicate); } @Override public \ MutableList\ collect(ToObjectFunction\ function) { return this.getMutableList().collect(function); } <(arithmeticMethods.(type))(name, type)> @Override public boolean equals(Object otherList) { return this.getMutableList().equals(otherList); } @Override public int hashCode() { return this.getMutableList().hashCode(); } @Override public MutableList asUnmodifiable() { return this; } @Override public MutableList asSynchronized() { return new SynchronizedList(this); } @Override public ImmutableList toImmutable() { int size = this.size(); if (size == 0) { return Lists.immutable.with(); } if (size == 1) { return Lists.immutable.with(this.getFirst()); } return Lists.immutable.with(this.toArray()); } /** * @since 9.2. */ public MutableList newEmpty() { return this.getMutableList().newEmpty(); } @Override public MutableList reverseThis() { throw new UnsupportedOperationException("Cannot call reverseThis() on " + this.getClass().getSimpleName()); } @Override public MutableList toReversed() { return this.getMutableList().toReversed(); } @Override public void forEachWithIndex(IntProcedure procedure) { this.getMutableList().forEachWithIndex(procedure); } @Override public LazyIterable asReversed() { return ReverseIterable.adapt(this); } @Override public \ T injectIntoWithIndex(T injectedValue, ObjectIntToObjectFunction\ function) { return this.getMutableList().injectIntoWithIndex(injectedValue, function); } /** * @since 6.0. */ @Override public MutableList distinct() { return this.getMutableList().distinct(); } @Override public MutableList subList(int fromIndex, int toIndex) { throw new UnsupportedOperationException("subList not yet implemented!"); } /** * @since 9.1. */ public MutableList\<Pair> zip(Iterable iterable) { return this.getMutableList().zip(iterable); } /** * @since 9.1. */ public \ MutableList\<ObjectPair\> zip(Iterable\ iterable) { return this.getMutableList().zip(iterable); } /** * Returns a new MutableList using results obtained by applying the specified function to each element * and its corresponding index. * * @since 9.1. */ @Override public \ MutableList\ collectWithIndex(IntToObjectFunction\ function) { return this.getMutableList().collectWithIndex(function); } /** * Adds elements to the target Collection using results obtained by applying the specified function to each element * and its corresponding index. * * @since 9.1. */ public \> R collectWithIndex(IntToObjectFunction\ function, R target) { return this.getMutableList().collectWithIndex(function, target); } @Override public Spliterator.Of spliterator() { return this.getMutableList().spliterator(); } } >> arithmeticMethods ::= [ "byte": "allMethods", "short": "allMethods", "char": "allMethods", "int": "allMethods", "long": "allMethods", "float": "allMethods", "double": "allMethods", "boolean": "noMethods" ] allMethods(name, type) ::=<< @Override public MutableList sortThis() { throw new UnsupportedOperationException("Cannot call sortThis() on " + this.getClass().getSimpleName()); } @Override public MutableList shuffleThis() { throw new UnsupportedOperationException("Cannot call shuffleThis() on " + this.getClass().getSimpleName()); } @Override public int binarySearch( value) { return this.getMutableList().binarySearch(value); } @Override public dotProduct(List list) { return this.getMutableList().dotProduct(list); } >> noMethods(name, type) ::= "" eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/map/000077500000000000000000000000001407344533200321135ustar00rootroot00000000000000abstractMutablePrimitiveKeySet.stg000066400000000000000000000636301407344533200407160ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/mapimport "copyright.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/map/mutable/primitive" skipBoolean() ::= "true" fileName(primitive) ::= "AbstractMutableKeySet" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.map.mutable.primitive; import java.io.IOException; import java.io.Externalizable; import java.io.ObjectInput; import java.io.ObjectStreamException; import java.io.ObjectOutput; import java.util.Arrays; import java.util.NoSuchElementException; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.bag.primitive.MutableBag; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ObjectToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.iterator.Iterator; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.list.primitive.MutableList; import org.eclipse.collections.api.set.primitive.ImmutableSet; import org.eclipse.collections.impl.bag.mutable.primitive.HashBag; import org.eclipse.collections.impl.factory.Lists; import org.eclipse.collections.impl.factory.primitive.Sets; import org.eclipse.collections.impl.lazy.primitive.LazyIterableAdapter; import org.eclipse.collections.impl.list.mutable.primitive.ArrayList; import org.eclipse.collections.api.set.primitive.Set; import org.eclipse.collections.api.set.MutableSet; import org.eclipse.collections.api.set.primitive.MutableSet; import org.eclipse.collections.impl.factory.Sets; import org.eclipse.collections.impl.set.mutable.primitive.HashSet; import org.eclipse.collections.impl.set.mutable.primitive.SynchronizedSet; import org.eclipse.collections.impl.set.mutable.primitive.UnmodifiableSet; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.tuple.primitive.Pair; /** * This file was automatically generated from template file abstractMutablePrimitiveKeySet.stg. * * @since 6.0. */ public abstract class AbstractMutableKeySet implements MutableSet, Externalizable { private static final long serialVersionUID = 1L; private static final EMPTY_KEY = <(literal.(type))("0")>; private static final REMOVED_KEY = <(literal.(type))("1")>; private static boolean isEmptyKey( key) { return <(equals.(type))("key", "EMPTY_KEY")>; } private static boolean isRemovedKey( key) { return <(equals.(type))("key", "REMOVED_KEY")>; } private static boolean isNonSentinel( key) { return !isEmptyKey(key) && !isRemovedKey(key); } protected abstract getKeyAtIndex(int index); protected abstract int getTableSize(); protected abstract MutableKeysMap getOuter(); protected abstract AbstractSentinelValues getSentinelValues(); @Override public void forEach(Procedure procedure) { this.each(procedure); } /** * @since 7.0. */ @Override public void each(Procedure procedure) { this.getOuter().forEachKey(procedure); } @Override public int count(Predicate predicate) { int count = 0; if (this.getSentinelValues() != null) { if (this.getSentinelValues().containsZeroKey && predicate.accept(EMPTY_KEY)) { count++; } if (this.getSentinelValues().containsOneKey && predicate.accept(REMOVED_KEY)) { count++; } } for (int i = 0; i \< this.getTableSize(); i++) { if (isNonSentinel(this.getKeyAtIndex(i)) && predicate.accept(this.getKeyAtIndex(i))) { count++; } } return count; } @Override public boolean anySatisfy(Predicate predicate) { if (this.getSentinelValues() != null) { if (this.getSentinelValues().containsZeroKey && predicate.accept(EMPTY_KEY)) { return true; } if (this.getSentinelValues().containsOneKey && predicate.accept(REMOVED_KEY)) { return true; } } for (int i = 0; i \< this.getTableSize(); i++) { if (isNonSentinel(this.getKeyAtIndex(i)) && predicate.accept(this.getKeyAtIndex(i))) { return true; } } return false; } @Override public boolean allSatisfy(Predicate predicate) { if (this.getSentinelValues() != null) { if (this.getSentinelValues().containsZeroKey && !predicate.accept(EMPTY_KEY)) { return false; } if (this.getSentinelValues().containsOneKey && !predicate.accept(REMOVED_KEY)) { return false; } } for (int i = 0; i \< this.getTableSize(); i++) { if (isNonSentinel(this.getKeyAtIndex(i)) && !predicate.accept(this.getKeyAtIndex(i))) { return false; } } return true; } @Override public boolean noneSatisfy(Predicate predicate) { if (this.getSentinelValues() != null) { if (this.getSentinelValues().containsZeroKey && predicate.accept(EMPTY_KEY)) { return false; } if (this.getSentinelValues().containsOneKey && predicate.accept(REMOVED_KEY)) { return false; } } for (int i = 0; i \< this.getTableSize(); i++) { if (isNonSentinel(this.getKeyAtIndex(i)) && predicate.accept(this.getKeyAtIndex(i))) { return false; } } return true; } @Override public boolean add( element) { throw new UnsupportedOperationException("Cannot call add() on " + this.getClass().getSimpleName()); } @Override public boolean addAll(... source) { throw new UnsupportedOperationException("Cannot call addAll() on " + this.getClass().getSimpleName()); } @Override public boolean addAll(Iterable source) { throw new UnsupportedOperationException("Cannot call addAll() on " + this.getClass().getSimpleName()); } @Override public MutableSet select(Predicate predicate) { MutableSet result = new HashSet(); if (this.getSentinelValues() != null) { if (this.getSentinelValues().containsZeroKey && predicate.accept(EMPTY_KEY)) { result.add(EMPTY_KEY); } if (this.getSentinelValues().containsOneKey && predicate.accept(REMOVED_KEY)) { result.add(REMOVED_KEY); } } for (int i = 0; i \< this.getTableSize(); i++) { if (isNonSentinel(this.getKeyAtIndex(i)) && predicate.accept(this.getKeyAtIndex(i))) { result.add(this.getKeyAtIndex(i)); } } return result; } @Override public MutableSet reject(Predicate predicate) { MutableSet result = new HashSet(); if (this.getSentinelValues() != null) { if (this.getSentinelValues().containsZeroKey && !predicate.accept(EMPTY_KEY)) { result.add(EMPTY_KEY); } if (this.getSentinelValues().containsOneKey && !predicate.accept(REMOVED_KEY)) { result.add(REMOVED_KEY); } } for (int i = 0; i \< this.getTableSize(); i++) { if (isNonSentinel(this.getKeyAtIndex(i)) && !predicate.accept(this.getKeyAtIndex(i))) { result.add(this.getKeyAtIndex(i)); } } return result; } @Override public MutableSet with( element) { throw new UnsupportedOperationException("Cannot call with() on " + this.getClass().getSimpleName()); } @Override public MutableSet without( element) { throw new UnsupportedOperationException("Cannot call without() on " + this.getClass().getSimpleName()); } @Override public MutableSet withAll(Iterable elements) { throw new UnsupportedOperationException("Cannot call withAll() on " + this.getClass().getSimpleName()); } @Override public MutableSet withoutAll(Iterable elements) { throw new UnsupportedOperationException("Cannot call withoutAll() on " + this.getClass().getSimpleName()); } @Override public \ MutableSet\ collect(ToObjectFunction\ function) { MutableSet\ result = Sets.mutable.with(); if (this.getSentinelValues() != null) { if (this.getSentinelValues().containsZeroKey) { result.add(function.valueOf(EMPTY_KEY)); } if (this.getSentinelValues().containsOneKey) { result.add(function.valueOf(REMOVED_KEY)); } } for (int i = 0; i \< this.getTableSize(); i++) { if (isNonSentinel(this.getKeyAtIndex(i))) { result.add(function.valueOf(this.getKeyAtIndex(i))); } } return result; } @Override public boolean remove( key) { int oldSize = this.getOuter().size(); this.getOuter().removeKey(key); return oldSize != this.getOuter().size(); } @Override public boolean removeAll(Iterable source) { int oldSize = this.getOuter().size(); Iterator iterator = source.Iterator(); while (iterator.hasNext()) { this.getOuter().removeKey(iterator.next()); } return oldSize != this.getOuter().size(); } @Override public boolean removeAll(... source) { int oldSize = this.getOuter().size(); for ( item : source) { this.getOuter().removeKey(item); } return oldSize != this.getOuter().size(); } @Override public void clear() { this.getOuter().clear(); } @Override public detectIfNone(Predicate predicate, ifNone) { if (this.getSentinelValues() != null) { if (this.getSentinelValues().containsZeroKey && predicate.accept(EMPTY_KEY)) { return EMPTY_KEY; } if (this.getSentinelValues().containsOneKey && predicate.accept(REMOVED_KEY)) { return REMOVED_KEY; } } for (int i = 0; i \< this.getTableSize(); i++) { if (isNonSentinel(this.getKeyAtIndex(i)) && predicate.accept(this.getKeyAtIndex(i))) { return this.getKeyAtIndex(i); } } return ifNone; } @Override public MutableSet asUnmodifiable() { return UnmodifiableSet.of(this); } @Override public MutableSet asSynchronized() { return SynchronizedSet.of(this); } @Override public sum() { result = ; compensation = ; if (this.getSentinelValues() != null) { if (this.getSentinelValues().containsZeroKey) { adjustedValue = EMPTY_KEY - compensation; nextSum = result + adjustedValue; compensation = nextSum - result - adjustedValue; result = nextSum; } if (this.getSentinelValues().containsOneKey) { adjustedValue = REMOVED_KEY - compensation; nextSum = result + adjustedValue; compensation = nextSum - result - adjustedValue; result = nextSum; } } for (int i = 0; i \< this.getTableSize(); i++) { if (isNonSentinel(this.getKeyAtIndex(i))) { adjustedValue = this.getKeyAtIndex(i) - compensation; nextSum = result + adjustedValue; compensation = nextSum - result - adjustedValue; result = nextSum; } } return result; } public sum() { result = ; if (this.getSentinelValues() != null) { if (this.getSentinelValues().containsZeroKey) { result += EMPTY_KEY; } if (this.getSentinelValues().containsOneKey) { result += REMOVED_KEY; } } for (int i = 0; i \< this.getTableSize(); i++) { if (isNonSentinel(this.getKeyAtIndex(i))) { result += this.getKeyAtIndex(i); } } return result; } @Override public max() { if (this.getOuter().isEmpty()) { throw new NoSuchElementException(); } max = 0; boolean isMaxSet = false; if (this.getSentinelValues() != null) { if (this.getSentinelValues().containsZeroKey) { max = EMPTY_KEY; isMaxSet = true; } if (this.getSentinelValues().containsOneKey) { max = REMOVED_KEY; isMaxSet = true; } } for (int i = 0; i \< this.getTableSize(); i++) { if (isNonSentinel(this.getKeyAtIndex(i)) && (!isMaxSet || <(lessThan.(type))({max}, {this.getKeyAtIndex(i)})>)) { max = this.getKeyAtIndex(i); isMaxSet = true; } } return max; } @Override public maxIfEmpty( defaultValue) { if (this.getOuter().isEmpty()) { return defaultValue; } return this.max(); } @Override public min() { if (this.getOuter().isEmpty()) { throw new NoSuchElementException(); } min = 0; boolean isMinSet = false; if (this.getSentinelValues() != null) { if (this.getSentinelValues().containsZeroKey) { min = EMPTY_KEY; isMinSet = true; } if (this.getSentinelValues().containsOneKey && !isMinSet) { min = REMOVED_KEY; isMinSet = true; } } for (int i = 0; i \< this.getTableSize(); i++) { if (isNonSentinel(this.getKeyAtIndex(i)) && (!isMinSet || <(lessThan.(type))({this.getKeyAtIndex(i)}, {min})>)) { min = this.getKeyAtIndex(i); isMinSet = true; } } return min; } @Override public minIfEmpty( defaultValue) { if (this.getOuter().isEmpty()) { return defaultValue; } return this.min(); } @Override public double average() { if (this.isEmpty()) { throw new ArithmeticException(); } return this.sum() / (double) this.size(); } @Override public double median() { if (this.isEmpty()) { throw new ArithmeticException(); } [] sortedArray = this.toSortedArray(); int middleIndex = sortedArray.length >\> 1; if (sortedArray.length > 1 && (sortedArray.length & 1) == 0) { first = sortedArray[middleIndex]; second = sortedArray[middleIndex - 1]; return (first + second) / 2.0; } return sortedArray[middleIndex]; } @Override public [] toSortedArray() { [] array = this.toArray(); Arrays.sort(array); return array; } @Override public MutableList toSortedList() { return ArrayList.newList(this).sortThis(); } @Override public [] toArray() { int size = this.getOuter().size(); final [] result = new [size]; this.getOuter().forEachKey(new Procedure() { private int index; public void value( each) { result[this.index] = each; this.index++; } }); return result; } @Override public [] toArray([] result) { int size = this.getOuter().size(); if (result.length \< size) { result = new [size]; } [] finalBypass = result; this.getOuter().forEachKey(new Procedure() { private int index; public void value( each) { finalBypass[this.index] = each; this.index++; } }); return result; } @Override public boolean contains( value) { return this.getOuter().containsKey(value); } @Override public boolean containsAll(... source) { for ( item : source) { if (!this.getOuter().containsKey(item)) { return false; } } return true; } @Override public boolean containsAll(Iterable source) { Iterator iterator = source.Iterator(); while (iterator.hasNext()) { if (!this.getOuter().containsKey(iterator.next())) { return false; } } return true; } @Override public LazyIterable\<Pair> cartesianProduct(Set set) { return Sets.cartesianProduct(this, set); } @Override public MutableList toList() { return ArrayList.newList(this); } @Override public MutableSet toSet() { return HashSet.newSet(this); } @Override public MutableBag toBag() { return HashBag.newBag(this); } @Override public LazyIterable asLazy() { return new LazyIterableAdapter(this); } @Override public \ T injectInto(T injectedValue, ObjectToObjectFunction\ function) { T result = injectedValue; if (this.getSentinelValues() != null) { if (this.getSentinelValues().containsZeroKey) { result = function.valueOf(result, EMPTY_KEY); } if (this.getSentinelValues().containsOneKey) { result = function.valueOf(result, REMOVED_KEY); } } for (int i = 0; i \< this.getTableSize(); i++) { if (isNonSentinel(this.getKeyAtIndex(i))) { result = function.valueOf(result, this.getKeyAtIndex(i)); } } return result; } @Override public ImmutableSet toImmutable() { return Sets.immutable.withAll(this); } @Override public int size() { return this.getOuter().size(); } @Override public boolean isEmpty() { return this.getOuter().isEmpty(); } @Override public boolean notEmpty() { return this.getOuter().notEmpty(); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof Set)) { return false; } Set other = (Set) obj; return this.size() == other.size() && this.containsAll(other.toArray()); } @Override public int hashCode() { int result = 0; if (this.getSentinelValues() != null) { if (this.getSentinelValues().containsZeroKey) { result += <(hashCode.(type))("EMPTY_KEY")>; } if (this.getSentinelValues().containsOneKey) { result += <(hashCode.(type))("REMOVED_KEY")>; } } for (int i = 0; i \< this.getTableSize(); i++) { if (isNonSentinel(this.getKeyAtIndex(i))) { result += <(hashCode.(type))({this.getKeyAtIndex(i)})>; } } return result; } @Override public String toString() { return this.makeString("[", ", ", "]"); } @Override public String makeString() { return this.makeString(", "); } @Override public String makeString(String separator) { return this.makeString("", separator, ""); } @Override public String makeString(String start, String separator, String end) { Appendable stringBuilder = new StringBuilder(); this.appendString(stringBuilder, start, separator, end); return stringBuilder.toString(); } @Override public void appendString(Appendable appendable) { this.appendString(appendable, ", "); } @Override public void appendString(Appendable appendable, String separator) { this.appendString(appendable, "", separator, ""); } @Override public void appendString(Appendable appendable, String start, String separator, String end) { try { appendable.append(start); boolean first = true; if (this.getSentinelValues() != null) { if (this.getSentinelValues().containsZeroKey) { appendable.append(String.valueOf(EMPTY_KEY)); first = false; } if (this.getSentinelValues().containsOneKey) { if (!first) { appendable.append(separator); } appendable.append(String.valueOf(REMOVED_KEY)); first = false; } } for (int i = 0; i \< this.getTableSize(); i++) { if (isNonSentinel(this.getKeyAtIndex(i))) { if (!first) { appendable.append(separator); } appendable.append(String.valueOf(this.getKeyAtIndex(i))); first = false; } } appendable.append(end); } catch (IOException e) { throw new RuntimeException(e); } } @Override public RichIterable\<Iterable> chunk(int size) { if (size \<= 0) { throw new IllegalArgumentException("Size for groups must be positive but was: " + size); } MutableList\<Iterable> result = Lists.mutable.empty(); if (this.notEmpty()) { if (this.size() \<= size) { result.add(Sets.mutable.withAll(this)); } else { Iterator iterator = this.Iterator(); while (iterator.hasNext()) { MutableSet batch = Sets.mutable.empty(); for (int i = 0; i \< size && iterator.hasNext(); i++) { batch.add(iterator.next()); } result.add(batch); } } } return result; } public Object writeReplace() throws ObjectStreamException { return new SerRep(this); } @Override public void writeExternal(ObjectOutput out) throws IOException { } @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { } private static class SerRep implements Externalizable { private static final long serialVersionUID = 1L; private transient AbstractMutableKeySet original; private transient HashSet deserialized; @SuppressWarnings("RedundantModifier") public SerRep() { // for Externalizable } private SerRep(AbstractMutableKeySet original) { this.original = original; } @Override public void writeExternal(ObjectOutput out) throws IOException { out.writeInt(this.original.size()); Iterator it = this.original.Iterator(); while (it.hasNext()) { out.write(it.next()); } } @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { int unread = in.readInt(); this.deserialized = new HashSet(unread); while (unread > 0) { this.deserialized.add(in.read()); unread--; } } private Object readResolve() throws ObjectStreamException { return this.deserialized; } } } >> abstractMutablePrimitiveValuesMap.stg000066400000000000000000000561351407344533200414110ustar00rootroot00000000000000eclipse-collections-11.0.0.M3/eclipse-collections-code-generator/src/main/resources/impl/mapimport "copyright.stg" import "primitiveEquals.stg" import "primitiveHashCode.stg" import "primitiveLiteral.stg" targetPath() ::= "org/eclipse/collections/impl/map/mutable/primitive" skipBoolean() ::= "true" fileName(primitive) ::= "AbstractMutableValuesMap" class(primitive) ::= << >> body(type, name) ::= << package org.eclipse.collections.impl.map.mutable.primitive; import java.io.IOException; import java.util.NoSuchElementException; import org.eclipse.collections.api.Iterable; import org.eclipse.collections.api.LazyIterable; import org.eclipse.collections.api.RichIterable; import org.eclipse.collections.api.bag.MutableBag; import org.eclipse.collections.api.bag.primitive.MutableBag; import org.eclipse.collections.api.block.function.primitive.ToObjectFunction; import org.eclipse.collections.api.block.function.primitive.ObjectToObjectFunction; import org.eclipse.collections.api.block.predicate.primitive.Predicate; import org.eclipse.collections.api.block.procedure.primitive.Procedure; import org.eclipse.collections.api.collection.MutableCollection; import org.eclipse.collections.api.collection.primitive.ImmutableCollection; import org.eclipse.collections.api.collection.primitive.MutableCollection; import org.eclipse.collections.api.iterator.Iterator; import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.list.primitive.MutableList; import org.eclipse.collections.api.map.primitive.MutableValuesMap; import org.eclipse.collections.api.set.primitive.MutableSet; import org.eclipse.collections.impl.bag.mutable.HashBag; import org.eclipse.collections.impl.bag.mutable.primitive.HashBag; import org.eclipse.collections.impl.collection.mutable.primitive.SynchronizedCollection; import org.eclipse.collections.impl.collection.mutable.primitive.UnmodifiableCollection; import org.eclipse.collections.impl.factory.Lists; import org.eclipse.collections.impl.factory.primitive.Bags; import org.eclipse.collections.impl.factory.primitive.Lists; import org.eclipse.collections.impl.lazy.primitive.LazyIterableAdapter; import org.eclipse.collections.impl.primitive.AbstractIterable; import org.eclipse.collections.impl.set.mutable.primitive.HashSet; /** * This file was automatically generated from template file abstractMutablePrimitiveValuesMap.stg. * * @since 6.0. */ public abstract class AbstractMutableValuesMap extends AbstractIterable implements MutableValuesMap { protected abstract int getOccupiedWithData(); protected abstract SentinelValues getSentinelValues(); protected abstract void setSentinelValuesNull(); protected abstract getEmptyValue(); protected abstract getValueAtIndex(int index); protected abstract int getTableSize(); protected abstract boolean isNonSentinelAtIndex(int index); protected void addEmptyKeyValue( value) { this.getSentinelValues().containsZeroKey = true; this.getSentinelValues().zeroValue = value; } protected void removeEmptyKey() { if (this.getSentinelValues().containsOneKey) { this.getSentinelValues().containsZeroKey = false; this.getSentinelValues().zeroValue = this.getEmptyValue(); } else { this.setSentinelValuesNull(); } } protected void addRemovedKeyValue( value) { this.getSentinelValues().containsOneKey = true; this.getSentinelValues().oneValue = value; } protected void removeRemovedKey() { if (this.getSentinelValues().containsZeroKey) { this.getSentinelValues().containsOneKey = false; this.getSentinelValues().oneValue = this.getEmptyValue(); } else { this.setSentinelValuesNull(); } } @Override public boolean contains( value) { return this.containsValue(value); } @Override public boolean containsAll(Iterable source) { return source.allSatisfy(( value) -> AbstractMutableValuesMap.this.contains(value)); } @Override public max() { if (this.isEmpty()) { throw new NoSuchElementException(); } Iterator iterator = this.Iterator(); max = iterator.next(); while (iterator.hasNext()) { value = iterator.next(); if (<(lessThan.(type))("max", "value")>) { max = value; } } return max; } @Override public min() { if (this.isEmpty()) { throw new NoSuchElementException(); } Iterator iterator = this.Iterator(); min = iterator.next(); while (iterator.hasNext()) { value = iterator.next(); if (<(lessThan.(type))("value", "min")>) { min = value; } } return min; } @Override public int size() { return this.getOccupiedWithData() + (this.getSentinelValues() == null ? 0 : this.getSentinelValues().size()); } @Override public boolean isEmpty() { return this.getOccupiedWithData() == 0 && (this.getSentinelValues() == null || this.getSentinelValues().size() == 0); } @Override public boolean notEmpty() { return this.getOccupiedWithData() != 0 || (this.getSentinelValues() != null && this.getSentinelValues().size() != 0); } @Override public void forEach(Procedure procedure) { this.each(procedure); } /** * @since 7.0. */ @Override public void each(Procedure procedure) { this.forEachValue(procedure); } @Override public void appendString(Appendable appendable, String start, String separator, String end) { try { appendable.append(start); boolean first = true; if (this.getSentinelValues() != null) { if (this.getSentinelValues().containsZeroKey) { appendable.append(String.valueOf(this.getSentinelValues().zeroValue)); first = false; } if (this.getSentinelValues().containsOneKey) { if (!first) { appendable.append(separator); } appendable.append(String.valueOf(this.getSentinelValues().oneValue)); first = false; } } for (int i = 0; i \< this.getTableSize(); i++) { if (this.isNonSentinelAtIndex(i)) { if (!first) { appendable.append(separator); } appendable.append(String.valueOf(this.getValueAtIndex(i))); first = false; } } appendable.append(end); } catch (IOException e) { throw new RuntimeException(e); } } @Override public [] toArray() { [] array = new [this.size()]; int index = 0; ;<\n>index++})> return array; } @Override public [] toArray([] target) { if (target.length \< this.size()) { target = new [this.size()]; } int index = 0; ;<\n>index++})> return target; } @Override public MutableBag select(Predicate predicate) { return this.select(predicate, new HashBag()); } @Override public MutableBag reject(Predicate predicate) { return this.reject(predicate, new HashBag()); } @Override public \ MutableBag\ collect(ToObjectFunction\ function) { return this.collect(function, HashBag.newBag(this.size())); } @Override public detectIfNone(Predicate predicate, value) { })> return value; } @Override public int count(Predicate predicate) { int count = 0; return count; } @Override public boolean anySatisfy(Predicate predicate) { return false; } @Override public boolean allSatisfy(Predicate predicate) { if (this.getSentinelValues() != null) { if (this.getSentinelValues().containsZeroKey && !predicate.accept(this.getSentinelValues().zeroValue)) { return false; } if (this.getSentinelValues().containsOneKey && !predicate.accept(this.getSentinelValues().oneValue)) { return false; } } for (int i = 0; i \< this.getTableSize(); i++) { if (this.isNonSentinelAtIndex(i) && !predicate.accept(this.getValueAtIndex(i))) { return false; } } return true; } @Override public boolean noneSatisfy(Predicate predicate) { return !this.anySatisfy(predicate); } @Override public RichIterable\<Iterable> chunk(int size) { if (size \<= 0) { throw new IllegalArgumentException("Size for groups must be positive but was: " + size); } MutableList\<Iterable> result = Lists.mutable.empty(); if (this.notEmpty()) { if (this.size() \<= size) { result.add(Bags.mutable.withAll(this)); } else { Iterator iterator = this.Iterator(); while (iterator.hasNext()) { MutableBag batch = Bags.mutable.empty(); for (int i = 0; i \< size && iterator.hasNext(); i++) { batch.add(iterator.next()); } result.add(batch); } } } return result; } @Override public sum() { result = ; compensation = ; adjustedValue = - compensation; nextSum = result + adjustedValue; compensation = nextSum - result - adjustedValue; result = nextSum})> return result; } public sum() { result = ; })> return result; } @Override public boolean containsValue( value) { if (this.getSentinelValues() != null && this.getSentinelValues().containsValue(value)) { return true; } for (int i = 0; i \< this.getTableSize(); i++) { if (this.isNonSentinelAtIndex(i) && <(equals.(type))({this.getValueAtIndex(i)}, "value")>) { return true; } } return false; } @Override public void forEachValue(Procedure procedure) { )})> } protected static class SentinelValues extends AbstractSentinelValues { protected zeroValue; protected oneValue; public boolean containsValue( value) { boolean valueEqualsZeroValue = this.containsZeroKey && <(equals.(type))("this.zeroValue", "value")>; boolean valueEqualsOneValue = this.containsOneKey && <(equals.(type))("this.oneValue", "value")>; return valueEqualsZeroValue || valueEqualsOneValue; } public SentinelValues copy() { SentinelValues sentinelValues = new SentinelValues(); sentinelValues.zeroValue = this.zeroValue; sentinelValues.oneValue = this.oneValue; sentinelValues.containsOneKey = this.containsOneKey; sentinelValues.containsZeroKey = this.containsZeroKey; return sentinelValues; } } protected abstract class AbstractValuesCollection implements MutableCollection { @Override public void clear() { AbstractMutableValuesMap.this.clear(); } @Override public MutableCollection select(Predicate predicate) { return AbstractMutableValuesMap.this.select(predicate); } @Override public MutableCollection reject(Predicate predicate) { return AbstractMutableValuesMap.this.reject(predicate); } @Override public detectIfNone(Predicate predicate, ifNone) { return AbstractMutableValuesMap.this.detectIfNone(predicate, ifNone); } @Override public \ MutableCollection\ collect(ToObjectFunction\ function) { return AbstractMutableValuesMap.this.collect(function); } @Override public \ T injectInto(T injectedValue, ObjectToObjectFunction\ function) { return AbstractMutableValuesMap.this.injectInto(injectedValue, function); } @Override public RichIterable\<Iterable> chunk(int size) { return AbstractMutableValuesMap.this.chunk(size); } @Override public sum() { return AbstractMutableValuesMap.this.sum(); } @Override public max() { return AbstractMutableValuesMap.this.max(); } @Override public maxIfEmpty( defaultValue) { return AbstractMutableValuesMap.this.maxIfEmpty(defaultValue); } @Override public min() { return AbstractMutableValuesMap.this.min(); } @Override public minIfEmpty( defaultValue) { return AbstractMutableValuesMap.this.minIfEmpty(defaultValue); } @Override public double average() { return AbstractMutableValuesMap.this.average(); } @Override public double median() { return AbstractMutableValuesMap.this.median(); } @Override public [] toSortedArray() { return AbstractMutableValuesMap.this.toSortedArray(); } @Override public MutableList toSortedList() { return AbstractMutableValuesMap.this.toSortedList(); } @Override public MutableCollection with( element) { throw new UnsupportedOperationException("Cannot call with() on " + this.getClass().getSimpleName()); } @Override public MutableCollection without( element) { throw new UnsupportedOperationException("Cannot call without() on " + this.getClass().getSimpleName()); } @Override public MutableCollection withAll(Iterable elements) { throw new UnsupportedOperationException("Cannot call withAll() on " + this.getClass().getSimpleName()); } @Override public MutableCollection withoutAll(Iterable elements) { throw new UnsupportedOperationException("Cannot call withoutAll() on " + this.getClass().getSimpleName()); } @Override public MutableCollection asUnmodifiable() { return UnmodifiableCollection.of(this); } @Override public MutableCollection asSynchronized() { return SynchronizedCollection.of(this); } @Override public ImmutableCollection toImmutable() { return Lists.immutable.withAll(this); } @Override public boolean contains( value) { return AbstractMutableValuesMap.this.containsValue(value); } @Override public boolean containsAll(... source) { return AbstractMutableValuesMap.this.containsAll(source); } @Override public boolean containsAll(Iterable source) { return AbstractMutableValuesMap.this.containsAll(source); } @Override public MutableList toList() { return AbstractMutableValuesMap.this.toList(); } @Override public MutableSet toSet() { return AbstractMutableValuesMap.this.toSet(); } @Override public MutableBag toBag() { return AbstractMutableValuesMap.this.toBag(); } @Override public LazyIterable asLazy() { return new LazyIterableAdapter(this); } @Override public boolean isEmpty() { return AbstractMutableValuesMap.this.isEmpty(); } @Override public boolean notEmpty() { return AbstractMutableValuesMap.this.notEmpty(); } @Override public String makeString() { return AbstractMutableValuesMap.this.makeString(); } @Override public String makeString(String separator) { return AbstractMutableValuesMap.this.makeString(separator); } @Override public String makeString(String start, String separator, String end) { return AbstractMutableValuesMap.this.makeString(start, separator, end); } @Override public void appendString(Appendable appendable) { AbstractMutableValuesMap.this.appendString(appendable); } @Override public void appendString(Appendable appendable, String separator) { AbstractMutableValuesMap.this.appendString(appendable, separator); } @Override public void appendString(Appendable appendable, String start, String separator, String end) { AbstractMutableValuesMap.this.appendString(appendable, start, separator, end); } @Override public void forEach(Procedure procedure) { this.each(procedure); } @Override public void each(Procedure procedure) { AbstractMutableValuesMap.this.each(procedure); } @Override public int count(Predicate predicate) { return AbstractMutableValuesMap.this.count(predicate); } @Override public boolean anySatisfy(Predicate predicate) { return AbstractMutableValuesMap.this.anySatisfy(predicate); } @Override public boolean allSatisfy(Predicate predicate) { return AbstractMutableValuesMap.this.allSatisfy(predicate); } @Override public boolean noneSatisfy(Predicate predicate) { return AbstractMutableValuesMap.this.noneSatisfy(predicate); } @Override public boolean add( element) { throw new UnsupportedOperationException("Cannot call add() on " + this.getClass().getSimpleName()); } @Override public boolean addAll(... source) { throw new UnsupportedOperationException("Cannot call addAll() on " + this.getClass().getSimpleName()); } @Override public boolean addAll(Iterable source) { throw new UnsupportedOperationException("Cannot call addAll() on " + this.getClass().getSimpleName()); } @Override public boolean removeAll(Iterable source) { int oldSize = AbstractMutableValuesMap.this.size(); Iterator iterator = source.Iterator(); while (iterator.hasNext()) { this.remove(iterator.next()); } return oldSize != AbstractMutableValuesMap.this.size(); } @Override public boolean removeAll(... source) { int oldSize = AbstractMutableValuesMap.this.size(); for ( item : source) { this.remove(item); } return oldSize != AbstractMutableValuesMap.this.size(); } @Override public boolean retainAll(... source) { return this.retainAll(HashSet.newSetWith(source)); } @Override public int size() { return AbstractMutableValuesMap.this.size(); } @Override public [] toArray() { return AbstractMutableValuesMap.this.toArray(); } @Override public [] toArray([] target) { return AbstractMutableValuesMap.this.toArray(target); } } } >> forEachValue(template) ::= << if (this.getSentinelValues() != null) { if (this.getSentinelValues().containsZeroKey) { <"this.getSentinelValues().zeroValue":{value |

Eclipse Collections is a collections framework for Java. It has JDK-compatible List, Set and Map implementations with a rich API, additional types not found in the JDK like Bags, Multimaps and set of utility classes that work with any JDK compatible Collections, Arrays, Maps or Strings. The iteration protocol was inspired by the Smalltalk collection framework.