From 23eea7f7976cbca4284bc2ae693e174cc9389610 Mon Sep 17 00:00:00 2001 From: Guillaume LASNIER Date: Tue, 8 Dec 2020 12:54:49 +0100 Subject: [PATCH 01/24] Upgrade to Gradle Plugins for SAP Commerce 3.0.0 --- core-customize/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core-customize/build.gradle.kts b/core-customize/build.gradle.kts index f21298e..849d6bd 100644 --- a/core-customize/build.gradle.kts +++ b/core-customize/build.gradle.kts @@ -1,6 +1,6 @@ plugins { - id("mpern.sap.commerce.build") version("2.0.0") - id("mpern.sap.commerce.build.ccv2") version("2.0.0") + id("sap.commerce.build") version("3.0.0") + id("sap.commerce.build.ccv2") version("3.0.0") } import mpern.sap.commerce.build.tasks.HybrisAntTask import org.apache.tools.ant.taskdefs.condition.Os From 1d0547e4db34e6f3c2dd46ae7979fb3417153378 Mon Sep 17 00:00:00 2001 From: Guillaume LASNIER Date: Tue, 8 Dec 2020 12:56:16 +0100 Subject: [PATCH 02/24] Fix issue setupLocalDevelopment task regenerates demo storefront with error #8 --- core-customize/build.gradle.kts | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/core-customize/build.gradle.kts b/core-customize/build.gradle.kts index 849d6bd..c0210dc 100644 --- a/core-customize/build.gradle.kts +++ b/core-customize/build.gradle.kts @@ -22,7 +22,7 @@ tasks.named("installManifestAddons") { } tasks.register("setupLocalDevelopment") { - dependsOn("bootstrapPlatform", generateLocalProperties, "installManifestAddons") + dependsOn("bootstrapPlatform", generateLocalProperties, "installManifestAddons", "symlinkSolrConfigForLocalDevelopment") } // --------------------------------------------------- @@ -31,26 +31,16 @@ tasks.register("setupLocalDevelopment") { // *Those are only necessary because I don't want to add any properietary files owned by SAP to Github.* // For a regular project, just commit the config folder and your custom extensions (hybris/bin/custom) as usual! -// ant modulegen -Dinput.module=accelerator -Dinput.name=demoshop -Dinput.package=com.demo.shop -tasks.register("generateDemoStorefront") { - dependsOn("bootstrapPlatform", "createDefaultConfig") - - args("modulegen") - antProperty("input.module", "accelerator") - antProperty("input.name", "demoshop") - antProperty("input.package", "com.demo.shop") -} - // setup hybris/config folder tasks.register("mergeConfigFolder") { - dependsOn("generateDemoStorefront") + dependsOn("bootstrapPlatform", "createDefaultConfig") from("hybris/config-template") into("hybris/config") } tasks.register("symlinkCommonProperties") { dependsOn("mergeConfigFolder") - if (Os.isFamily(Os.FAMILY_UNIX)) { + if (Os.isFamily(Os.FAMILY_UNIX)) { commandLine("sh", "-c", "ln -s ../environments/common.properties 10-local.properties") } else { // https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/ @@ -69,18 +59,16 @@ tasks.register("symlinkLocalDevProperties") { workingDir("hybris/config/local-config") } tasks.named("generateLocalProperties") { - mustRunAfter("mergeConfigFolder") dependsOn("symlinkCommonProperties", "symlinkLocalDevProperties") } // starting and stopping solr generates the default solr configuration tasks.register("startSolr") { - dependsOn("mergeConfigFolder", "generateLocalProperties") args("startSolrServers") } tasks.register("stopSolr") { args("stopSolrServers") - mustRunAfter("startSolr") + mustRunAfter("startSolr") } tasks.register("startStopSolr") { dependsOn("startSolr", "stopSolr") @@ -104,6 +92,16 @@ tasks.register("symlinkSolrConfigForLocalDevelopment") { workingDir("hybris/config/solr/instances/cloud") } +// ant modulegen -Dinput.module=accelerator -Dinput.name=demoshop -Dinput.package=com.demo.shop +tasks.register("generateDemoStorefront") { + dependsOn("bootstrapPlatform", "createDefaultConfig") + + args("modulegen") + antProperty("input.module", "accelerator") + antProperty("input.name", "demoshop") + antProperty("input.package", "com.demo.shop") +} + tasks.register("generateProprietaryCode") { - dependsOn("symlinkSolrConfigForLocalDevelopment") + dependsOn("generateDemoStorefront") } From 706e96e742595e420c324c4f36bd8e62cbe3360a Mon Sep 17 00:00:00 2001 From: Guillaume LASNIER Date: Tue, 8 Dec 2020 16:57:26 +0100 Subject: [PATCH 03/24] Update spartacussampledataaddon --- .../spartacussampledataaddon/.classpath | 0 .../spartacussampledataaddon/.gitignore | 3 + .../buildcallbacks.xml | 0 .../extensioninfo.xml | 3 +- .../external-dependencies.xml | 0 .../project.properties.template | 0 .../cms-responsive-content.vt | 0 .../cms-responsive-content_de.properties | 0 .../cms-responsive-content.vt | 64 ++- .../cms-responsive-content_de.properties | 55 +- .../cms-responsive-content_en.properties | 55 +- .../apparel-ukContentCatalog/email-content.vt | 25 + .../email-content_en.properties | 13 + .../cms-responsive-content.vt | 0 .../cms-responsive-content_de.properties | 17 +- .../cms-responsive-content_en.properties | 17 +- .../cms-responsive-content_ja.properties | 17 +- .../cms-responsive-content_zh.properties | 17 +- .../email-content.vt | 25 + .../email-content_de.properties | 13 + .../email-content_en.properties | 13 + .../email-content_ja.properties | 14 + .../email-content_zh.properties | 13 + .../cms-responsive-content.vt | 0 .../cms-responsive-content_de.properties | 11 +- .../cms-responsive-content_en.properties | 11 +- .../cms-responsive-content_ja.properties | 11 +- .../cms-responsive-content_zh.properties | 11 +- .../import/stores/apparel-uk/consents.vt | 18 + .../stores/apparel-uk/consents_de.properties | 12 + .../stores/apparel-uk/consents_en.properties | 12 + .../import/stores/electronics/consents.vt | 0 .../stores/electronics/consents_de.properties | 6 +- .../stores/electronics/consents_en.properties | 6 +- .../installer/customconfig/custom.properties | 38 ++ ...tacussampledataaddon-locales_cs.properties | 0 ...tacussampledataaddon-locales_de.properties | 0 ...tacussampledataaddon-locales_en.properties | 0 ...tacussampledataaddon-locales_es.properties | 0 ...ussampledataaddon-locales_es_CO.properties | 0 ...tacussampledataaddon-locales_fr.properties | 0 ...tacussampledataaddon-locales_hi.properties | 0 ...tacussampledataaddon-locales_id.properties | 0 ...tacussampledataaddon-locales_it.properties | 0 ...tacussampledataaddon-locales_ja.properties | 0 ...tacussampledataaddon-locales_ko.properties | 0 ...tacussampledataaddon-locales_pl.properties | 0 ...tacussampledataaddon-locales_pt.properties | 0 ...tacussampledataaddon-locales_ru.properties | 0 ...tacussampledataaddon-locales_zh.properties | 0 ...ussampledataaddon-locales_zh_TW.properties | 0 .../spartacussampledataaddon-beans.xml | 0 .../spartacussampledataaddon-items.xml | 0 .../spartacussampledataaddon-spring.xml | 0 .../import/common/user-groups.impex | 29 - .../cms-responsive-content.impex | 0 .../apparel-ukContentCatalog/catalog.impex | 36 ++ .../apparel-ukContentCatalog/cleaning.impex | 281 +++++++++ .../cms-responsive-content.impex | 543 ++++++++++++++++-- .../email-content.impex | 91 +++ .../images/Homepage.png | Bin 0 -> 1084285 bytes .../images/banners/site/Elec_ErrorPage.svg | 33 ++ .../apparel-ukContentCatalog/sync.impex | 13 + .../electronicsContentCatalog/catalog.impex | 0 .../electronicsContentCatalog/cleaning.impex | 69 +-- .../cms-responsive-content.impex | 193 ++++++- .../email-content.impex | 84 ++- .../images/Homepage.png | Bin .../electronicsContentCatalog/solr.impex | 11 + .../electronicsContentCatalog/sync.impex | 0 .../electronicsContentCatalog/test-data.impex | 29 - .../powertoolsContentCatalog/catalog.impex | 0 .../powertoolsContentCatalog/cleaning.impex | 53 +- .../cms-responsive-content.impex | 127 +++- .../email-content.impex | 0 .../images/Homepage.png | Bin .../powertoolsContentCatalog/sync.impex | 0 .../import/emails/email-customerCouponBody.vm | 98 ++++ .../emails/email-customerCouponSubject.vm | 1 + .../emails/email-productBackInStockBody.vm | 168 ++++++ .../emails/email-productBackInStockSubject.vm | 1 + .../apparel-deProductCatalog/solr.impex | 11 + .../apparel-ukProductCatalog/solr.impex | 11 + .../apparelProductCatalog/reviews.impex | 258 +++++++++ .../products-stocklevels.impex | 12 + .../electronicsProductCatalog/solr.impex | 31 + .../import/stores/apparel-uk/consents.impex | 16 + .../stores/apparel-uk/points-of-service.impex | 144 +++++ .../import/stores/apparel-uk/site.impex | 44 ++ .../import/stores/apparel-uk/solr.impex | 14 + .../import/stores/apparel-uk/solr_en.impex | 13 + .../import/stores/apparel-uk/test-data.impex | 193 +++++++ .../import/stores/electronics/consents.impex | 2 +- .../import/stores/electronics/site.impex | 7 +- .../import/stores/electronics/solr.impex | 14 + .../import/stores/electronics/solr_en.impex | 13 + .../import/stores/electronics/test-data.impex | 230 ++++++++ .../import/stores/powertools/site.impex | 5 +- .../email-customerCoupon_de.properties | 25 + .../email-customerCoupon_en.properties | 25 + .../email-customerCoupon_ja.properties | 25 + .../email-customerCoupon_zh.properties | 25 + .../email-productBackInStock_de.properties | 24 + .../email-productBackInStock_en.properties | 24 + .../email-productBackInStock_ja.properties | 24 + .../email-productBackInStock_zh.properties | 24 + .../spartacussampledataaddon-web-spring.xml | 0 .../SpartacussampledataaddonConstants.java | 0 ...SpaSampleAddOnSampleDataImportService.java | 77 +-- 109 files changed, 3341 insertions(+), 310 deletions(-) mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/.classpath mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/.gitignore mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/buildcallbacks.xml mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/extensioninfo.xml mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/external-dependencies.xml mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/project.properties.template mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-deContentCatalog/cms-responsive-content.vt mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-deContentCatalog/cms-responsive-content_de.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-responsive-content.vt mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-responsive-content_de.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-responsive-content_en.properties create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/email-content.vt create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/email-content_en.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content.vt mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content_de.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content_en.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content_ja.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content_zh.properties create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content.vt create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content_de.properties create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content_en.properties create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content_ja.properties create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content_zh.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content.vt mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content_de.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content_en.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content_ja.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content_zh.properties create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/apparel-uk/consents.vt create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/apparel-uk/consents_de.properties create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/apparel-uk/consents_en.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/electronics/consents.vt mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/electronics/consents_de.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/electronics/consents_en.properties create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/installer/customconfig/custom.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_cs.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_de.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_en.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_es.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_es_CO.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_fr.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_hi.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_id.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_it.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_ja.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_ko.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_pl.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_pt.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_ru.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_zh.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_zh_TW.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon-beans.xml mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon-items.xml mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon-spring.xml delete mode 100755 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/common/user-groups.impex mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-deContentCatalog/cms-responsive-content.impex create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/catalog.impex create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/cleaning.impex mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-responsive-content.impex create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/email-content.impex create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/images/Homepage.png create mode 100755 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/images/banners/site/Elec_ErrorPage.svg create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/sync.impex mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/catalog.impex mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cleaning.impex mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content.impex mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content.impex mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/images/Homepage.png create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/solr.impex mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/sync.impex delete mode 100755 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/test-data.impex mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/catalog.impex mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cleaning.impex mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content.impex mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/email-content.impex mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/images/Homepage.png mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/sync.impex create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/emails/email-customerCouponBody.vm create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/emails/email-customerCouponSubject.vm create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/emails/email-productBackInStockBody.vm create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/emails/email-productBackInStockSubject.vm create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/productCatalogs/apparel-deProductCatalog/solr.impex create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/productCatalogs/apparel-ukProductCatalog/solr.impex create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/productCatalogs/apparelProductCatalog/reviews.impex create mode 100755 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/productCatalogs/electronicsProductCatalog/products-stocklevels.impex create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/productCatalogs/electronicsProductCatalog/solr.impex create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/apparel-uk/consents.impex create mode 100755 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/apparel-uk/points-of-service.impex create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/apparel-uk/site.impex create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/apparel-uk/solr.impex create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/apparel-uk/solr_en.impex create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/apparel-uk/test-data.impex mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/electronics/consents.impex mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/electronics/site.impex create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/electronics/solr.impex create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/electronics/solr_en.impex create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/electronics/test-data.impex mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/powertools/site.impex create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-customerCoupon_de.properties create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-customerCoupon_en.properties create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-customerCoupon_ja.properties create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-customerCoupon_zh.properties create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-productBackInStock_de.properties create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-productBackInStock_en.properties create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-productBackInStock_ja.properties create mode 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-productBackInStock_zh.properties mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/web/spring/spartacussampledataaddon-web-spring.xml mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/src/de/hybris/platform/spartacussampledataaddon/constants/SpartacussampledataaddonConstants.java mode change 100755 => 100644 core-customize/hybris/bin/custom/spartacussampledataaddon/src/de/hybris/platform/spartacussampledataaddon/setup/impl/SpaSampleAddOnSampleDataImportService.java diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/.classpath b/core-customize/hybris/bin/custom/spartacussampledataaddon/.classpath old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/.gitignore b/core-customize/hybris/bin/custom/spartacussampledataaddon/.gitignore old mode 100755 new mode 100644 index d08d50e..04496c0 --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/.gitignore +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/.gitignore @@ -17,4 +17,7 @@ build.xml resources/spartacussampledataaddon/*-*testclasses.xml resources-lang/touch_impexgen resources/spartacussampledataaddon/import/contentCatalogs/*ContentCatalog/cms-responsive-content_*.impex +resources/spartacussampledataaddon/import/contentCatalogs/*ContentCatalog/email-content_*.impex resources/spartacussampledataaddon/import/stores/*/consents_*.impex + +.vscode/ diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/buildcallbacks.xml b/core-customize/hybris/bin/custom/spartacussampledataaddon/buildcallbacks.xml old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/extensioninfo.xml b/core-customize/hybris/bin/custom/spartacussampledataaddon/extensioninfo.xml old mode 100755 new mode 100644 index fd0617b..5ef3c7b --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/extensioninfo.xml +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/extensioninfo.xml @@ -11,9 +11,8 @@ - - + diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/external-dependencies.xml b/core-customize/hybris/bin/custom/spartacussampledataaddon/external-dependencies.xml old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/project.properties.template b/core-customize/hybris/bin/custom/spartacussampledataaddon/project.properties.template old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-deContentCatalog/cms-responsive-content.vt b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-deContentCatalog/cms-responsive-content.vt old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-deContentCatalog/cms-responsive-content_de.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-deContentCatalog/cms-responsive-content_de.properties old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-responsive-content.vt b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-responsive-content.vt old mode 100755 new mode 100644 index 5ce74f2..000a5d4 --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-responsive-content.vt +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-responsive-content.vt @@ -5,18 +5,19 @@ # The files in this addon are licensed under the Apache Software License, v. 2 # except as noted otherwise in the LICENSE file. # ----------------------------------------------------------------------- +#set($escPicture=$esc.java('$picture[lang=$lang]')) +#set($escContentCV=$esc.java('$contentCV[unique=true]')) +#set( $escMedias=$esc.java('$medias') ) +#set( $escMediaContainer=$esc.java('$mediaContainer') ) +# Import the CMS content for the apparel-uk site # -# Import the English CMS content for the Apparel Site UK -# - -\$contentCatalog=apparel-ukContentCatalog +\$contentCatalog=apparel-uk-spaContentCatalog \$contentCV=catalogVersion(CatalogVersion.catalog(Catalog.id[default=\$contentCatalog]),CatalogVersion.version[default=Staged])[default=\$contentCatalog:Staged] -\$siteResource=jar:de.hybris.platform.spartacussampledataaddon.constants.SpartacussampledataaddonConstants&/spartacussampledataaddon/import/contentCatalogs/\$contentCatalog +\$siteResource=jar:de.hybris.platform.spartacussampledataaddon.constants.SpartacussampledataaddonConstants&/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog \$picture=media(code, \$contentCV) -#set( $escContentCV=$esc.java('$contentCV[unique=true]') ) - -# Language -\$lang=$lang.toLowerCase() +\$medias=medias(code, \$contentCV); +\$mediaContainer=media(qualifier, \$contentCV)[lang=\$lang]; +\$lang=$lang # CMS Link Components #set ($data = $query.load('cms-responsive-content', 'CMSLinkComponent') ) @@ -35,3 +36,48 @@ UPDATE SimpleBannerComponent;$escContentCV;uid[unique=true];$escPicture #foreach( $row in $logobannercomponent) ;;$row.key;$row.values.picture #end + +# CMSParagraphComponent +#set ($data = $query.load('cms-responsive-content', 'CMSParagraphComponent') ) +UPDATE CMSParagraphComponent;$escContentCV;uid[unique=true];content[lang=$lang] +#foreach( $row in $data ) +;;$row.key;$row.values.content +#end + +#################################### +# Responsive Error page +#################################### + +#set ( $media = $query.load('cms-responsive-content', 'MediaMultiformat') ) +INSERT_UPDATE Media;mediaFormat(qualifier);$escContentCV;code[unique=true];@media[translator=de.hybris.platform.impex.jalo.media.MediaDataTranslator][forceWrite=true];mime[default='image/svg+xml'];realfilename;folder(qualifier)[default='images'];altText +#foreach( $row in $media ) +;$row.values.format;;$row.key;$row.values.media;$row.values.mime;$row.values.realfilename;;"$row.values.altText" +#end + +#set ($data = $query.load('cms-responsive-content', 'MediaContainer') ) +INSERT_UPDATE MediaContainer;qualifier[unique=true];$escMedias;$escContentCV +#foreach( $row in $data ) +;$row.key;$row.values.medias +#end + +#set ($data = $query.load('cms-responsive-content', 'SimpleResponsiveBannerComponent') ) +UPDATE SimpleResponsiveBannerComponent;$escContentCV;uid[unique=true];$escMediaContainer +#foreach( $row in $data ) +;;$row.key;$row.values.mediaContainer +#end + +# Pages +#macro( generateImpexData $fileName $pageType $comment) + #set( $pageRows = $query.load($fileName, $pageType) ) + #if($pageRows.size() != 0) + +# $comment +UPDATE $pageType;$escContentCV;uid[unique=true];title[lang=\$lang] +#foreach( $row in $pageRows ) + ;;$row.key;"$row.values.title" +#end + + #end +#end + +#generateImpexData('cms-responsive-content', 'ContentPage', 'Content Pages') \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-responsive-content_de.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-responsive-content_de.properties old mode 100755 new mode 100644 index 8a39294..0656ef3 --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-responsive-content_de.properties +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-responsive-content_de.properties @@ -7,5 +7,58 @@ # ----------------------------------------------------------------------- CMSLinkComponent.StoreFinderLink.linkName=Find a Store CMSLinkComponent.SignOutLink.linkName=Sign Out +CMSLinkComponent.HelpLink.linkName=Help +CMSLinkComponent.FAQLink.linkName=Frequently Asked Questions +CMSLinkComponent.WishListLink.linkName=Wish List +CMSLinkComponent.OrdersLink.linkName=Orders +CMSLinkComponent.MyCouponsLink.linkName= My Coupons -LogoSimpleBannerComponent.SiteLogoComponent.picture=/images/theme/SAP_scrn_R.png \ No newline at end of file +LogoSimpleBannerComponent.SiteLogoComponent.picture=/images/theme/SAP_scrn_R.png + +MediaMultiformat.Elec_480x170_ErrorPage_EN_480W.svg.media=$siteResource/images/banners/site/Elec_ErrorPage.svg +MediaMultiformat.Elec_480x170_ErrorPage_EN_480W.svg.realfilename=Elec_ErrorPage.svg +MediaMultiformat.Elec_480x170_ErrorPage_EN_480W.svg.altText=Page not found +MediaMultiformat.Elec_480x170_ErrorPage_EN_480W.svg.format=mobile +MediaMultiformat.Elec_770x221_ErrorPage_EN_770W.svg.media=$siteResource/images/banners/site/Elec_ErrorPage.svg +MediaMultiformat.Elec_770x221_ErrorPage_EN_770W.svg.realfilename=Elec_ErrorPage.svg +MediaMultiformat.Elec_770x221_ErrorPage_EN_770W.svg.altText=Page not found +MediaMultiformat.Elec_770x221_ErrorPage_EN_770W.svg.format=tablet +MediaMultiformat.Elec_960x275_ErrorPage_EN_960W.svg.media=$siteResource/images/banners/site/Elec_ErrorPage.svg +MediaMultiformat.Elec_960x275_ErrorPage_EN_960W.svg.realfilename=Elec_ErrorPage.svg +MediaMultiformat.Elec_960x275_ErrorPage_EN_960W.svg.altText=Page not found +MediaMultiformat.Elec_960x275_ErrorPage_EN_960W.svg.format=desktop +MediaMultiformat.Elec_1400x401_ErrorPage_EN_1400W.svg.media=$siteResource/images/banners/site/Elec_ErrorPage.svg +MediaMultiformat.Elec_1400x401_ErrorPage_EN_1400W.svg.realfilename=Elec_ErrorPage.svg +MediaMultiformat.Elec_1400x401_ErrorPage_EN_1400W.svg.altText=Page not found +MediaMultiformat.Elec_1400x401_ErrorPage_EN_1400W.svg.format=widescreen +MediaContainer.apparel-uk-errorpage-pagenotfound.medias=Elec_480x170_ErrorPage_EN_480W.svg,Elec_770x221_ErrorPage_EN_770W.svg,Elec_960x275_ErrorPage_EN_960W.svg,Elec_1400x401_ErrorPage_EN_1400W.svg +SimpleResponsiveBannerComponent.ApparelUKErrorpageBannerComponent.mediaContainer=apparel-uk-errorpage-pagenotfound + +ContentPage.storefinderPage.title=Find a Store +ContentPage.help.title=Help +ContentPage.sale.title=Sale +ContentPage.contactUs.title=Contact Us +ContentPage.forgotPassword.title=Reset Password +ContentPage.resetPassword.title=Reset Password +ContentPage.register.title=Create an Account +ContentPage.updatePassword.title=Update Password +ContentPage.update-profile.title=Update Personal Details +ContentPage.close-account.title=Close Account +ContentPage.Checkout.title=Checkout +ContentPage.CheckoutShippingAddress.title=Checkout Shipping Address +ContentPage.CheckoutDeliveryMode.title=Checkout Delivery Mode +ContentPage.CheckoutPaymentDetails.title=Checkout Payment Details +ContentPage.CheckoutReviewOrder.title=Checkout Review Order +ContentPage.CancelOrderPage.title=Cancel Order +ContentPage.ReturnOrderPage.title=Return Order +ContentPage.ConfirmCancelOrderPage.title=Cancel Order Confirmation +ContentPage.ConfirmReturnOrderPage.title=Return Order Confirmation +ContentPage.ReturnRequestDetailsPage.title=Return Request Details +ContentPage.WishListPage.title=Wish List + +CMSParagraphComponent.HelpParagraphComponent.content="Need Help with your checkout process? Contact Us or Call phone number." +CMSParagraphComponent.SaleParagraphComponent.content="Sale" +CMSParagraphComponent.ContactUsParagraphComponent.content="Contact" +CMSParagraphComponent.CloseAccountParagraphComponent.content="When you close your account, your profile information will be kept for the retention period mandated by the laws and regulations of your country. Customer Support will be able to assist you with any order history or proof of purchase needs during this time.

At the end of the retention period, the following profile information will be deleted and will no longer be accessible to you or anyone else:

  • email addresses
  • contact information
  • shipping details
  • delivery preferences
  • consent management settings
  • account history
  • payment details
  • order history
" +CMSParagraphComponent.PageNotFoundParagraphComponent.content="

Oops!

We couldn't find the page you are looking for.

Here are some useful links instead:

" +CMSParagraphComponent.NoticeTextParagraph.content="
Copyright © 2020 SAP SE or an SAP affiliate company. All rights reserved.
" diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-responsive-content_en.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-responsive-content_en.properties old mode 100755 new mode 100644 index 8a39294..0656ef3 --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-responsive-content_en.properties +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-responsive-content_en.properties @@ -7,5 +7,58 @@ # ----------------------------------------------------------------------- CMSLinkComponent.StoreFinderLink.linkName=Find a Store CMSLinkComponent.SignOutLink.linkName=Sign Out +CMSLinkComponent.HelpLink.linkName=Help +CMSLinkComponent.FAQLink.linkName=Frequently Asked Questions +CMSLinkComponent.WishListLink.linkName=Wish List +CMSLinkComponent.OrdersLink.linkName=Orders +CMSLinkComponent.MyCouponsLink.linkName= My Coupons -LogoSimpleBannerComponent.SiteLogoComponent.picture=/images/theme/SAP_scrn_R.png \ No newline at end of file +LogoSimpleBannerComponent.SiteLogoComponent.picture=/images/theme/SAP_scrn_R.png + +MediaMultiformat.Elec_480x170_ErrorPage_EN_480W.svg.media=$siteResource/images/banners/site/Elec_ErrorPage.svg +MediaMultiformat.Elec_480x170_ErrorPage_EN_480W.svg.realfilename=Elec_ErrorPage.svg +MediaMultiformat.Elec_480x170_ErrorPage_EN_480W.svg.altText=Page not found +MediaMultiformat.Elec_480x170_ErrorPage_EN_480W.svg.format=mobile +MediaMultiformat.Elec_770x221_ErrorPage_EN_770W.svg.media=$siteResource/images/banners/site/Elec_ErrorPage.svg +MediaMultiformat.Elec_770x221_ErrorPage_EN_770W.svg.realfilename=Elec_ErrorPage.svg +MediaMultiformat.Elec_770x221_ErrorPage_EN_770W.svg.altText=Page not found +MediaMultiformat.Elec_770x221_ErrorPage_EN_770W.svg.format=tablet +MediaMultiformat.Elec_960x275_ErrorPage_EN_960W.svg.media=$siteResource/images/banners/site/Elec_ErrorPage.svg +MediaMultiformat.Elec_960x275_ErrorPage_EN_960W.svg.realfilename=Elec_ErrorPage.svg +MediaMultiformat.Elec_960x275_ErrorPage_EN_960W.svg.altText=Page not found +MediaMultiformat.Elec_960x275_ErrorPage_EN_960W.svg.format=desktop +MediaMultiformat.Elec_1400x401_ErrorPage_EN_1400W.svg.media=$siteResource/images/banners/site/Elec_ErrorPage.svg +MediaMultiformat.Elec_1400x401_ErrorPage_EN_1400W.svg.realfilename=Elec_ErrorPage.svg +MediaMultiformat.Elec_1400x401_ErrorPage_EN_1400W.svg.altText=Page not found +MediaMultiformat.Elec_1400x401_ErrorPage_EN_1400W.svg.format=widescreen +MediaContainer.apparel-uk-errorpage-pagenotfound.medias=Elec_480x170_ErrorPage_EN_480W.svg,Elec_770x221_ErrorPage_EN_770W.svg,Elec_960x275_ErrorPage_EN_960W.svg,Elec_1400x401_ErrorPage_EN_1400W.svg +SimpleResponsiveBannerComponent.ApparelUKErrorpageBannerComponent.mediaContainer=apparel-uk-errorpage-pagenotfound + +ContentPage.storefinderPage.title=Find a Store +ContentPage.help.title=Help +ContentPage.sale.title=Sale +ContentPage.contactUs.title=Contact Us +ContentPage.forgotPassword.title=Reset Password +ContentPage.resetPassword.title=Reset Password +ContentPage.register.title=Create an Account +ContentPage.updatePassword.title=Update Password +ContentPage.update-profile.title=Update Personal Details +ContentPage.close-account.title=Close Account +ContentPage.Checkout.title=Checkout +ContentPage.CheckoutShippingAddress.title=Checkout Shipping Address +ContentPage.CheckoutDeliveryMode.title=Checkout Delivery Mode +ContentPage.CheckoutPaymentDetails.title=Checkout Payment Details +ContentPage.CheckoutReviewOrder.title=Checkout Review Order +ContentPage.CancelOrderPage.title=Cancel Order +ContentPage.ReturnOrderPage.title=Return Order +ContentPage.ConfirmCancelOrderPage.title=Cancel Order Confirmation +ContentPage.ConfirmReturnOrderPage.title=Return Order Confirmation +ContentPage.ReturnRequestDetailsPage.title=Return Request Details +ContentPage.WishListPage.title=Wish List + +CMSParagraphComponent.HelpParagraphComponent.content="Need Help with your checkout process? Contact Us or Call phone number." +CMSParagraphComponent.SaleParagraphComponent.content="Sale" +CMSParagraphComponent.ContactUsParagraphComponent.content="Contact" +CMSParagraphComponent.CloseAccountParagraphComponent.content="When you close your account, your profile information will be kept for the retention period mandated by the laws and regulations of your country. Customer Support will be able to assist you with any order history or proof of purchase needs during this time.

At the end of the retention period, the following profile information will be deleted and will no longer be accessible to you or anyone else:

  • email addresses
  • contact information
  • shipping details
  • delivery preferences
  • consent management settings
  • account history
  • payment details
  • order history
" +CMSParagraphComponent.PageNotFoundParagraphComponent.content="

Oops!

We couldn't find the page you are looking for.

Here are some useful links instead:

" +CMSParagraphComponent.NoticeTextParagraph.content="
Copyright © 2020 SAP SE or an SAP affiliate company. All rights reserved.
" diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/email-content.vt b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/email-content.vt new file mode 100644 index 0000000..ed1c5ab --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/email-content.vt @@ -0,0 +1,25 @@ +# ----------------------------------------------------------------------- +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# ----------------------------------------------------------------------- +# +# ImpEx for Consents for Apparel UK Store +# +#set($escContentCV=$esc.java('$contentCV[unique=true]')) +# Email CMS data for stock notification +\$contentCatalog=apparel-uk-spaContentCatalog +\$contentCV=catalogVersion(CatalogVersion.catalog(Catalog.id[default=\$contentCatalog]),CatalogVersion.version[default=Staged])[default=\$contentCatalog:Staged] +\$emailResource=jar:de.hybris.platform.spartacussampledataaddon.constants.SpartacussampledataaddonConstants&/spartacussampledataaddon/import/emails +\$lang=$lang.toLowerCase() + +#set( $rows = $query.load('email-content', 'EmailPage') ) +UPDATE EmailPage;$escContentCV;uid[unique=true];fromEmail[lang=\$lang];fromName[lang=\$lang] +#foreach( $row in $rows ) +;;$row.key;"$row.values.fromEmail";"$row.values.fromName" +#end + +UPDATE RendererTemplate;code[unique=true];templateScript[lang=\$lang,translator=de.hybris.platform.commerceservices.impex.impl.FileLoaderValueTranslator] +;apparel-uk_Email_Product_Back_In_Stock_Body;\$emailResource/email-productBackInStockBody.vm +;apparel-uk_Email_Product_Back_In_Stock_Subject;\$emailResource/email-productBackInStockSubject.vm +;apparel-uk_Email_Customer_Customer_Coupon_Subject;\$emailResource/email-customerCouponSubject.vm +;apparel-uk_Email_Customer_Customer_Coupon_Body;\$emailResource/email-customerCouponBody.vm + diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/email-content_en.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/email-content_en.properties new file mode 100644 index 0000000..bfce5b2 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/email-content_en.properties @@ -0,0 +1,13 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# The files in this addon are licensed under the Apache Software License, v. 2 +# except as noted otherwise in the LICENSE file. +# ----------------------------------------------------------------------- + + +EmailPage.ProductBackInStockNotificationEmail.fromEmail=customerservices@hybris.com +EmailPage.ProductBackInStockNotificationEmail.fromName=Customer Services Team +EmailPage.CustomerCouponEmail.fromEmail=customerservices@hybris.com +EmailPage.CustomerCouponEmail.fromName=Customer Services Team \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content.vt b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content.vt old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content_de.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content_de.properties old mode 100755 new mode 100644 index f35016c..76c5270 --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content_de.properties +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content_de.properties @@ -8,9 +8,13 @@ CMSLinkComponent.StoreFinderLink.linkName=Find a Store CMSLinkComponent.SignOutLink.linkName=Sign Out CMSLinkComponent.HelpLink.linkName=Help -CMSLinkComponent.SaleLink.linkName=Sale CMSLinkComponent.FAQLink.linkName=Frequently Asked Questions CMSLinkComponent.CartLink.linkName=Cart +CMSLinkComponent.WishListLink.linkName=Wish List +CMSLinkComponent.NotificationPreferenceLink.linkName=Notification Preference +CMSLinkComponent.MyInterestsLink.linkName=My Interests +CMSLinkComponent.MyCouponsLink.linkName= My Coupons +CMSLinkComponent.OrdersLink.linkName=Orders LogoSimpleBannerComponent.SiteLogoComponent.picture=/images/theme/SAP_scrn_R.png @@ -48,9 +52,18 @@ ContentPage.CheckoutDeliveryMode.title=Checkout Delivery Mode ContentPage.CheckoutPaymentDetails.title=Checkout Payment Details ContentPage.CheckoutReviewOrder.title=Checkout Review Order ContentPage.storefinderPage.title=Find a Store +ContentPage.CancelOrderPage.title=Cancel Order +ContentPage.ReturnOrderPage.title=Return Order +ContentPage.ConfirmCancelOrderPage.title=Cancel Order Confirmation +ContentPage.ConfirmReturnOrderPage.title=Return Order Confirmation +ContentPage.WishListPage.title=Wish List +ContentPage.notification-preference.title=Notification Preference +ContentPage.my-interests.title=My Interests +ContentPage.ReturnRequestDetailsPage.title=Return Request Details CMSParagraphComponent.HelpParagraphComponent.content="Need Help with your checkout process? Contact Us or Call phone number." CMSParagraphComponent.SaleParagraphComponent.content="Sale" CMSParagraphComponent.ContactUsParagraphComponent.content="Contact" CMSParagraphComponent.CloseAccountParagraphComponent.content="When you close your account, your profile information will be kept for the retention period mandated by the laws and regulations of your country. Customer Support will be able to assist you with any order history or proof of purchase needs during this time.

At the end of the retention period, the following profile information will be deleted and will no longer be accessible to you or anyone else:

  • email addresses
  • contact information
  • shipping details
  • delivery preferences
  • consent management settings
  • account history
  • payment details
  • order history
" -CMSParagraphComponent.PageNotFoundParagraphComponent.content="

Oops!

We couldn't find the page you are looking for.

Here are some useful links instead:

" \ No newline at end of file +CMSParagraphComponent.PageNotFoundParagraphComponent.content="

Oops!

We couldn't find the page you are looking for.

Here are some useful links instead:

" +CMSParagraphComponent.NoticeTextParagraph.content="
Copyright © 2020 SAP SE or an SAP affiliate company. All rights reserved.
" diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content_en.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content_en.properties old mode 100755 new mode 100644 index d543db6..248204b --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content_en.properties +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content_en.properties @@ -8,9 +8,13 @@ CMSLinkComponent.StoreFinderLink.linkName=Find a Store CMSLinkComponent.SignOutLink.linkName=Sign Out CMSLinkComponent.HelpLink.linkName=Help -CMSLinkComponent.SaleLink.linkName=Sale CMSLinkComponent.FAQLink.linkName=Frequently Asked Questions CMSLinkComponent.CartLink.linkName=Cart +CMSLinkComponent.WishListLink.linkName=Wish List +CMSLinkComponent.NotificationPreferenceLink.linkName=Notification Preference +CMSLinkComponent.MyInterestsLink.linkName=My Interests +CMSLinkComponent.MyCouponsLink.linkName= My Coupons +CMSLinkComponent.OrdersLink.linkName=Orders LogoSimpleBannerComponent.SiteLogoComponent.picture=/images/theme/SAP_scrn_R.png @@ -48,9 +52,18 @@ ContentPage.CheckoutDeliveryMode.title=Checkout Delivery Mode ContentPage.CheckoutPaymentDetails.title=Checkout Payment Details ContentPage.CheckoutReviewOrder.title=Checkout Review Order ContentPage.storefinderPage.title=Find a Store +ContentPage.CancelOrderPage.title=Cancel Order +ContentPage.ReturnOrderPage.title=Return Order +ContentPage.ConfirmCancelOrderPage.title=Cancel Order Confirmation +ContentPage.ConfirmReturnOrderPage.title=Return Order Confirmation +ContentPage.WishListPage.title=Wish List +ContentPage.notification-preference.title=Notification Preference +ContentPage.my-interests.title=My Interests +ContentPage.ReturnRequestDetailsPage.title=Return Request Details CMSParagraphComponent.HelpParagraphComponent.content="Need Help with your checkout process? Contact Us or Call phone number." CMSParagraphComponent.SaleParagraphComponent.content="Sale" CMSParagraphComponent.ContactUsParagraphComponent.content="Contact" CMSParagraphComponent.CloseAccountParagraphComponent.content="When you close your account, your profile information will be kept for the retention period mandated by the laws and regulations of your country. Customer Support will be able to assist you with any order history or proof of purchase needs during this time.

At the end of the retention period, the following profile information will be deleted and will no longer be accessible to you or anyone else:

  • email addresses
  • contact information
  • shipping details
  • delivery preferences
  • consent management settings
  • account history
  • payment details
  • order history
" -CMSParagraphComponent.PageNotFoundParagraphComponent.content="

Oops!

We couldn't find the page you are looking for.

Here are some useful links instead:

" \ No newline at end of file +CMSParagraphComponent.PageNotFoundParagraphComponent.content="

Oops!

We couldn't find the page you are looking for.

Here are some useful links instead:

" +CMSParagraphComponent.NoticeTextParagraph.content="
Copyright © 2020 SAP SE or an SAP affiliate company. All rights reserved.
" diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content_ja.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content_ja.properties old mode 100755 new mode 100644 index 0dfaef2..0487208 --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content_ja.properties +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content_ja.properties @@ -8,9 +8,13 @@ CMSLinkComponent.StoreFinderLink.linkName=Find a Store CMSLinkComponent.SignOutLink.linkName=Sign Out CMSLinkComponent.HelpLink.linkName=Help -CMSLinkComponent.SaleLink.linkName=Sale CMSLinkComponent.FAQLink.linkName=Frequently Asked Questions CMSLinkComponent.CartLink.linkName=Cart +CMSLinkComponent.WishListLink.linkName=Wish List +CMSLinkComponent.NotificationPreferenceLink.linkName=Notification Preference +CMSLinkComponent.MyInterestsLink.linkName=My Interests +CMSLinkComponent.MyCouponsLink.linkName= My Coupons +CMSLinkComponent.OrdersLink.linkName=Orders LogoSimpleBannerComponent.SiteLogoComponent.picture=/images/theme/SAP_scrn_R.png @@ -48,9 +52,18 @@ ContentPage.CheckoutDeliveryMode.title=Checkout Delivery Mode ContentPage.CheckoutPaymentDetails.title=Checkout Payment Details ContentPage.CheckoutReviewOrder.title=Checkout Review Order ContentPage.storefinderPage.title=Find a Store +ContentPage.CancelOrderPage.title=Cancel Order +ContentPage.ReturnOrderPage.title=Return Order +ContentPage.ConfirmCancelOrderPage.title=Cancel Order Confirmation +ContentPage.ConfirmReturnOrderPage.title=Return Order Confirmation +ContentPage.WishListPage.title=Wish List +ContentPage.notification-preference.title=Notification Preference +ContentPage.my-interests.title=My Interests +ContentPage.ReturnRequestDetailsPage.title=Return Request Details CMSParagraphComponent.HelpParagraphComponent.content="Need Help with your checkout process? Contact Us or Call phone number." CMSParagraphComponent.SaleParagraphComponent.content="Sale" CMSParagraphComponent.ContactUsParagraphComponent.content="Contact" CMSParagraphComponent.CloseAccountParagraphComponent.content="When you close your account, your profile information will be kept for the retention period mandated by the laws and regulations of your country. Customer Support will be able to assist you with any order history or proof of purchase needs during this time.

At the end of the retention period, the following profile information will be deleted and will no longer be accessible to you or anyone else:

  • email addresses
  • contact information
  • shipping details
  • delivery preferences
  • consent management settings
  • account history
  • payment details
  • order history
" -CMSParagraphComponent.PageNotFoundParagraphComponent.content="

Oops!

We couldn't find the page you are looking for.

Here are some useful links instead:

" \ No newline at end of file +CMSParagraphComponent.PageNotFoundParagraphComponent.content="

Oops!

We couldn't find the page you are looking for.

Here are some useful links instead:

" +CMSParagraphComponent.NoticeTextParagraph.content="
Copyright © 2020 SAP SE or an SAP affiliate company. All rights reserved.
" diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content_zh.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content_zh.properties old mode 100755 new mode 100644 index edd8a51..68e6ae8 --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content_zh.properties +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content_zh.properties @@ -8,9 +8,13 @@ CMSLinkComponent.StoreFinderLink.linkName=Find a Store CMSLinkComponent.SignOutLink.linkName=Sign Out CMSLinkComponent.HelpLink.linkName=Help -CMSLinkComponent.SaleLink.linkName=Sale CMSLinkComponent.FAQLink.linkName=Frequently Asked Questions CMSLinkComponent.CartLink.linkName=Cart +CMSLinkComponent.WishListLink.linkName=Wish List +CMSLinkComponent.NotificationPreferenceLink.linkName=通知设置 +CMSLinkComponent.MyInterestsLink.linkName=我的订阅 +CMSLinkComponent.MyCouponsLink.linkName= 我的优惠券 +CMSLinkComponent.OrdersLink.linkName=Orders LogoSimpleBannerComponent.SiteLogoComponent.picture=/images/theme/SAP_scrn_R.png @@ -48,9 +52,18 @@ ContentPage.CheckoutDeliveryMode.title=Checkout Delivery Mode ContentPage.CheckoutPaymentDetails.title=Checkout Payment Details ContentPage.CheckoutReviewOrder.title=Checkout Review Order ContentPage.storefinderPage.title=Find a Store +ContentPage.CancelOrderPage.title=Cancel Order +ContentPage.ReturnOrderPage.title=Return Order +ContentPage.ConfirmCancelOrderPage.title=Cancel Order Confirmation +ContentPage.ConfirmReturnOrderPage.title=Return Order Confirmation +ContentPage.ReturnRequestDetailsPage.title=Return Request Details +ContentPage.WishListPage.title=Wish List +ContentPage.notification-preference.title=通知首选项 +ContentPage.my-interests.title=我的订阅 CMSParagraphComponent.HelpParagraphComponent.content="Need Help with your checkout process? Contact Us or Call phone number." CMSParagraphComponent.SaleParagraphComponent.content="Sale" CMSParagraphComponent.ContactUsParagraphComponent.content="Contact" CMSParagraphComponent.CloseAccountParagraphComponent.content="When you close your account, your profile information will be kept for the retention period mandated by the laws and regulations of your country. Customer Support will be able to assist you with any order history or proof of purchase needs during this time.

At the end of the retention period, the following profile information will be deleted and will no longer be accessible to you or anyone else:

  • email addresses
  • contact information
  • shipping details
  • delivery preferences
  • consent management settings
  • account history
  • payment details
  • order history
" -CMSParagraphComponent.PageNotFoundParagraphComponent.content="

Oops!

We couldn't find the page you are looking for.

Here are some useful links instead:

" \ No newline at end of file +CMSParagraphComponent.PageNotFoundParagraphComponent.content="

Oops!

We couldn't find the page you are looking for.

Here are some useful links instead:

" +CMSParagraphComponent.NoticeTextParagraph.content="
Copyright © 2020 SAP SE or an SAP affiliate company. All rights reserved.
" diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content.vt b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content.vt new file mode 100644 index 0000000..8a31f09 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content.vt @@ -0,0 +1,25 @@ +# ----------------------------------------------------------------------- +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# ----------------------------------------------------------------------- +# +# ImpEx for Consents for Electronics Store +# +#set($escContentCV=$esc.java('$contentCV[unique=true]')) +# Email CMS data for stock notification +\$contentCatalog=electronics-spaContentCatalog +\$contentCV=catalogVersion(CatalogVersion.catalog(Catalog.id[default=\$contentCatalog]),CatalogVersion.version[default=Staged])[default=\$contentCatalog:Staged] +\$emailResource=jar:de.hybris.platform.spartacussampledataaddon.constants.SpartacussampledataaddonConstants&/spartacussampledataaddon/import/emails +\$lang=$lang.toLowerCase() + +#set( $rows = $query.load('email-content', 'EmailPage') ) +UPDATE EmailPage;$escContentCV;uid[unique=true];fromEmail[lang=\$lang];fromName[lang=\$lang] +#foreach( $row in $rows ) +;;$row.key;"$row.values.fromEmail";"$row.values.fromName" +#end + +UPDATE RendererTemplate;code[unique=true];templateScript[lang=\$lang,translator=de.hybris.platform.commerceservices.impex.impl.FileLoaderValueTranslator] +;electronics_Email_Product_Back_In_Stock_Body;\$emailResource/email-productBackInStockBody.vm +;electronics_Email_Product_Back_In_Stock_Subject;\$emailResource/email-productBackInStockSubject.vm +;electronics_Email_Customer_Customer_Coupon_Subject;\$emailResource/email-customerCouponSubject.vm +;electronics_Email_Customer_Customer_Coupon_Body;\$emailResource/email-customerCouponBody.vm + diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content_de.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content_de.properties new file mode 100644 index 0000000..99d0035 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content_de.properties @@ -0,0 +1,13 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# The files in this addon are licensed under the Apache Software License, v. 2 +# except as noted otherwise in the LICENSE file. +# ----------------------------------------------------------------------- + + +EmailPage.ProductBackInStockNotificationEmail.fromEmail=customerservices@hybris.com +EmailPage.ProductBackInStockNotificationEmail.fromName=Customer Services Team +EmailPage.CustomerCouponEmail.fromEmail=customerservices@hybris.com +EmailPage.CustomerCouponEmail.fromName=Customer Services Team diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content_en.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content_en.properties new file mode 100644 index 0000000..bfce5b2 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content_en.properties @@ -0,0 +1,13 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# The files in this addon are licensed under the Apache Software License, v. 2 +# except as noted otherwise in the LICENSE file. +# ----------------------------------------------------------------------- + + +EmailPage.ProductBackInStockNotificationEmail.fromEmail=customerservices@hybris.com +EmailPage.ProductBackInStockNotificationEmail.fromName=Customer Services Team +EmailPage.CustomerCouponEmail.fromEmail=customerservices@hybris.com +EmailPage.CustomerCouponEmail.fromName=Customer Services Team \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content_ja.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content_ja.properties new file mode 100644 index 0000000..e7fd39e --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content_ja.properties @@ -0,0 +1,14 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# The files in this addon are licensed under the Apache Software License, v. 2 +# except as noted otherwise in the LICENSE file. +# ----------------------------------------------------------------------- + + +EmailPage.ProductBackInStockNotificationEmail.fromEmail=customerservices@hybris.com +EmailPage.ProductBackInStockNotificationEmail.fromName=Customer Services Team + +EmailPage.CustomerCouponEmail.fromEmail=customerservices@hybris.com +EmailPage.CustomerCouponEmail.fromName=Customer Services Team diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content_zh.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content_zh.properties new file mode 100644 index 0000000..4ce3c9f --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content_zh.properties @@ -0,0 +1,13 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# The files in this addon are licensed under the Apache Software License, v. 2 +# except as noted otherwise in the LICENSE file. +# ----------------------------------------------------------------------- + + +EmailPage.ProductBackInStockNotificationEmail.fromEmail=customerservices@hybris.com +EmailPage.ProductBackInStockNotificationEmail.fromName=客服团队 +EmailPage.CustomerCouponEmail.fromEmail=customerservices@hybris.com +EmailPage.CustomerCouponEmail.fromName=客服团队 \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content.vt b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content.vt old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content_de.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content_de.properties old mode 100755 new mode 100644 index aa9cf1b..84d32cc --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content_de.properties +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content_de.properties @@ -8,9 +8,10 @@ CMSLinkComponent.StoreFinderLink.linkName=Find a Store CMSLinkComponent.SignOutLink.linkName=Sign Out CMSLinkComponent.HelpLink.linkName=Help -CMSLinkComponent.SaleLink.linkName=Sale CMSLinkComponent.FAQLink.linkName=Frequently Asked Questions CMSLinkComponent.CartLink.linkName=Cart +CMSLinkComponent.WishListLink.linkName=Wish List +CMSLinkComponent.OrdersLink.linkName=Orders LogoSimpleBannerComponent.SiteLogoComponent.picture=/images/theme/SAP_scrn_R.png @@ -47,8 +48,14 @@ ContentPage.CheckoutDeliveryMode.title=Checkout Delivery Mode ContentPage.CheckoutPaymentDetails.title=Checkout Payment Details ContentPage.CheckoutReviewOrder.title=Checkout Review Order ContentPage.storefinderPage.title=Find a Store +ContentPage.CancelOrderPage.title=Cancel Order +ContentPage.ReturnOrderPage.title=Return Order +ContentPage.ConfirmCancelOrderPage.title=Cancel Order Confirmation +ContentPage.ConfirmReturnOrderPage.title=Return Order Confirmation +ContentPage.ReturnRequestDetailsPage.title=Return Request Details +ContentPage.WishListPage.title=Wish List CMSParagraphComponent.HelpParagraphComponent.content="Need Help with your checkout process? Contact Us or Call phone number." CMSParagraphComponent.SaleParagraphComponent.content="Sale" CMSParagraphComponent.ContactUsParagraphComponent.content="Contact" -CMSParagraphComponent.PageNotFoundParagraphComponent.content="

Oops!

We couldn't find the page you are looking for.

Here are some useful links instead:

" \ No newline at end of file +CMSParagraphComponent.PageNotFoundParagraphComponent.content="

Oops!

We couldn't find the page you are looking for.

Here are some useful links instead:

" diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content_en.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content_en.properties old mode 100755 new mode 100644 index 3eed0ed..4d38076 --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content_en.properties +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content_en.properties @@ -8,9 +8,10 @@ CMSLinkComponent.StoreFinderLink.linkName=Find a Store CMSLinkComponent.SignOutLink.linkName=Sign Out CMSLinkComponent.HelpLink.linkName=Help -CMSLinkComponent.SaleLink.linkName=Sale CMSLinkComponent.FAQLink.linkName=Frequently Asked Questions CMSLinkComponent.CartLink.linkName=Cart +CMSLinkComponent.WishListLink.linkName=Wish List +CMSLinkComponent.OrdersLink.linkName=Orders LogoSimpleBannerComponent.SiteLogoComponent.picture=/images/theme/SAP_scrn_R.png @@ -47,8 +48,14 @@ ContentPage.CheckoutDeliveryMode.title=Checkout Delivery Mode ContentPage.CheckoutPaymentDetails.title=Checkout Payment Details ContentPage.CheckoutReviewOrder.title=Checkout Review Order ContentPage.storefinderPage.title=Find a Store +ContentPage.CancelOrderPage.title=Cancel Order +ContentPage.ReturnOrderPage.title=Return Order +ContentPage.ConfirmCancelOrderPage.title=Cancel Order Confirmation +ContentPage.ConfirmReturnOrderPage.title=Return Order Confirmation +ContentPage.WishListPage.title=Wish List +ContentPage.ReturnRequestDetailsPage.title=Return Request Details CMSParagraphComponent.HelpParagraphComponent.content="Need Help with your checkout process? Contact Us or Call phone number." CMSParagraphComponent.SaleParagraphComponent.content="Sale" CMSParagraphComponent.ContactUsParagraphComponent.content="Contact" -CMSParagraphComponent.PageNotFoundParagraphComponent.content="

Oops!

We couldn't find the page you are looking for.

Here are some useful links instead:

" \ No newline at end of file +CMSParagraphComponent.PageNotFoundParagraphComponent.content="

Oops!

We couldn't find the page you are looking for.

Here are some useful links instead:

" diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content_ja.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content_ja.properties old mode 100755 new mode 100644 index 90c3831..d6247a1 --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content_ja.properties +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content_ja.properties @@ -8,9 +8,10 @@ CMSLinkComponent.StoreFinderLink.linkName=Find a Store CMSLinkComponent.SignOutLink.linkName=Sign Out CMSLinkComponent.HelpLink.linkName=Help -CMSLinkComponent.SaleLink.linkName=Sale CMSLinkComponent.FAQLink.linkName=Frequently Asked Questions CMSLinkComponent.CartLink.linkName=Cart +CMSLinkComponent.WishListLink.linkName=Wish List +CMSLinkComponent.OrdersLink.linkName=Orders LogoSimpleBannerComponent.SiteLogoComponent.picture=/images/theme/SAP_scrn_R.png @@ -47,8 +48,14 @@ ContentPage.CheckoutDeliveryMode.title=Checkout Delivery Mode ContentPage.CheckoutPaymentDetails.title=Checkout Payment Details ContentPage.CheckoutReviewOrder.title=Checkout Review Order ContentPage.storefinderPage.title=Find a Store +ContentPage.CancelOrderPage.title=Cancel Order +ContentPage.ReturnOrderPage.title=Return Order +ContentPage.ConfirmCancelOrderPage.title=Cancel Order Confirmation +ContentPage.ConfirmReturnOrderPage.title=Return Order Confirmation +ContentPage.WishListPage.title=Wish List +ContentPage.ReturnRequestDetailsPage.title=Return Request Details CMSParagraphComponent.HelpParagraphComponent.content="Need Help with your checkout process? Contact Us or Call phone number." CMSParagraphComponent.SaleParagraphComponent.content="Sale" CMSParagraphComponent.ContactUsParagraphComponent.content="Contact" -CMSParagraphComponent.PageNotFoundParagraphComponent.content="

Oops!

We couldn't find the page you are looking for.

Here are some useful links instead:

" \ No newline at end of file +CMSParagraphComponent.PageNotFoundParagraphComponent.content="

Oops!

We couldn't find the page you are looking for.

Here are some useful links instead:

" diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content_zh.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content_zh.properties old mode 100755 new mode 100644 index 2b286be..7ef48ea --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content_zh.properties +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content_zh.properties @@ -8,9 +8,10 @@ CMSLinkComponent.StoreFinderLink.linkName=Find a Store CMSLinkComponent.SignOutLink.linkName=Sign Out CMSLinkComponent.HelpLink.linkName=Help -CMSLinkComponent.SaleLink.linkName=Sale CMSLinkComponent.FAQLink.linkName=Frequently Asked Questions CMSLinkComponent.CartLink.linkName=Cart +CMSLinkComponent.WishListLink.linkName=Wish List +CMSLinkComponent.OrdersLink.linkName=Orders LogoSimpleBannerComponent.SiteLogoComponent.picture=/images/theme/SAP_scrn_R.png @@ -47,8 +48,14 @@ ContentPage.CheckoutDeliveryMode.title=Checkout Delivery Mode ContentPage.CheckoutPaymentDetails.title=Checkout Payment Details ContentPage.CheckoutReviewOrder.title=Checkout Review Order ContentPage.storefinderPage.title=Find a Store +ContentPage.CancelOrderPage.title=Cancel Order +ContentPage.ReturnOrderPage.title=Return Order +ContentPage.ConfirmCancelOrderPage.title=Cancel Order Confirmation +ContentPage.ConfirmReturnOrderPage.title=Return Order Confirmation +ContentPage.WishListPage.title=Wish List +ContentPage.ReturnRequestDetailsPage.title=Return Request Details CMSParagraphComponent.HelpParagraphComponent.content="Need Help with your checkout process? Contact Us or Call phone number." CMSParagraphComponent.SaleParagraphComponent.content="Sale" CMSParagraphComponent.ContactUsParagraphComponent.content="Contact" -CMSParagraphComponent.PageNotFoundParagraphComponent.content="

Oops!

We couldn't find the page you are looking for.

Here are some useful links instead:

" \ No newline at end of file +CMSParagraphComponent.PageNotFoundParagraphComponent.content="

Oops!

We couldn't find the page you are looking for.

Here are some useful links instead:

" diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/apparel-uk/consents.vt b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/apparel-uk/consents.vt new file mode 100644 index 0000000..5100238 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/apparel-uk/consents.vt @@ -0,0 +1,18 @@ +# ----------------------------------------------------------------------- +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# ----------------------------------------------------------------------- +# +# ImpEx for Consents for Apparel Store +# + +# Language +\$lang=$lang.toLowerCase() + +\$siteUid=apparel-uk-spa + +#set( $consents = $query.load('consents') ) +UPDATE ConsentTemplate;id[unique=true];name[lang=\$lang];description[lang=\$lang];version[unique=true];baseSite(uid)[unique=true,default=\$siteUid];exposed +#foreach( $consent in $consents ) +;$consent.key;"$consent.values.name";"$consent.values.description";0;;$consent.values.exposed +#end + diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/apparel-uk/consents_de.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/apparel-uk/consents_de.properties new file mode 100644 index 0000000..b0408a8 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/apparel-uk/consents_de.properties @@ -0,0 +1,12 @@ +# ----------------------------------------------------------------------- +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# ----------------------------------------------------------------------- +Consent.PROFILE.name=Ermöglichen Sie die kontextgesteuerte Verfolgung von SAP Commerce Cloud-Diensten +Consent.PROFILE.description=Wir möchten Ihr Surfverhalten so speichern, dass unsere Website Ihnen dynamisch ein personalisiertes Surferlebnis bietet und unsere Kundenbetreuer Ihnen kontextbezogenen Kundensupport bieten können. +Consent.PROFILE.exposed=true +Consent.MARKETING_NEWSLETTER.name=Ich stimme dieser Einwilligung zum Muster-MARKETING zu +Consent.MARKETING_NEWSLETTER.description=Dies ist eine beispielhafte Beschreibung der Marketing-Einwilligung, die basierend auf der erforderlichen gültigen Registrierungs-Einwilligung aktualisiert oder ersetzt werden muss. +Consent.MARKETING_NEWSLETTER.exposed=true +Consent.STORE_USER_INFORMATION.name=Ich stimme diesem Beispiel zu. STORE USER INFORMATION Zustimmung +Consent.STORE_USER_INFORMATION.description=Dies ist ein Beispiel für eine Beschreibung der Einwilligung zum Speichern von Benutzerinformationen, die aktualisiert oder ersetzt werden muss. +Consent.STORE_USER_INFORMATION.exposed=true diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/apparel-uk/consents_en.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/apparel-uk/consents_en.properties new file mode 100644 index 0000000..531b225 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/apparel-uk/consents_en.properties @@ -0,0 +1,12 @@ +# ----------------------------------------------------------------------- +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# ----------------------------------------------------------------------- +Consent.PROFILE.name=Allow SAP Commerce Cloud, Context-Driven Services tracking +Consent.PROFILE.description=We would like to store your browsing behaviour so that our website can dynamically present you with a personalised browsing experience and our customer support agents can provide you with contextual customer support. +Consent.PROFILE.exposed=true +Consent.MARKETING_NEWSLETTER.name=I approve to this sample MARKETING consent +Consent.MARKETING_NEWSLETTER.description=This is a sample marketing consent description that will need to be updated or replaced, based on the valid registration consent required. +Consent.MARKETING_NEWSLETTER.exposed=true +Consent.STORE_USER_INFORMATION.name=I approve to this sample STORE USER INFORMATION consent +Consent.STORE_USER_INFORMATION.description=This is a sample store user information consent description that will need to be updated or replaced. +Consent.STORE_USER_INFORMATION.exposed=true diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/electronics/consents.vt b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/electronics/consents.vt old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/electronics/consents_de.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/electronics/consents_de.properties old mode 100755 new mode 100644 index e763830..b0408a8 --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/electronics/consents_de.properties +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/electronics/consents_de.properties @@ -1,9 +1,9 @@ # ----------------------------------------------------------------------- # Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. # ----------------------------------------------------------------------- -Consent.PERSONALIZATION.name=Ich stimme dieser PERSONALISIERUNGS-Einwilligung zu -Consent.PERSONALIZATION.description=Dies ist ein Beispiel für eine Persionalisierungszustimmungsbeschreibung, die aktualisiert oder ersetzt werden muss. -Consent.PERSONALIZATION.exposed=true +Consent.PROFILE.name=Ermöglichen Sie die kontextgesteuerte Verfolgung von SAP Commerce Cloud-Diensten +Consent.PROFILE.description=Wir möchten Ihr Surfverhalten so speichern, dass unsere Website Ihnen dynamisch ein personalisiertes Surferlebnis bietet und unsere Kundenbetreuer Ihnen kontextbezogenen Kundensupport bieten können. +Consent.PROFILE.exposed=true Consent.MARKETING_NEWSLETTER.name=Ich stimme dieser Einwilligung zum Muster-MARKETING zu Consent.MARKETING_NEWSLETTER.description=Dies ist eine beispielhafte Beschreibung der Marketing-Einwilligung, die basierend auf der erforderlichen gültigen Registrierungs-Einwilligung aktualisiert oder ersetzt werden muss. Consent.MARKETING_NEWSLETTER.exposed=true diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/electronics/consents_en.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/electronics/consents_en.properties old mode 100755 new mode 100644 index ab0cb06..531b225 --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/electronics/consents_en.properties +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources-lang/spartacussampledataaddon/import/stores/electronics/consents_en.properties @@ -1,9 +1,9 @@ # ----------------------------------------------------------------------- # Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. # ----------------------------------------------------------------------- -Consent.PERSONALIZATION.name=I approve to this sample PERSONALIZATION consent -Consent.PERSONALIZATION.description=This is a sample persionalization consent description that will need to be updated or replaced. -Consent.PERSONALIZATION.exposed=true +Consent.PROFILE.name=Allow SAP Commerce Cloud, Context-Driven Services tracking +Consent.PROFILE.description=We would like to store your browsing behaviour so that our website can dynamically present you with a personalised browsing experience and our customer support agents can provide you with contextual customer support. +Consent.PROFILE.exposed=true Consent.MARKETING_NEWSLETTER.name=I approve to this sample MARKETING consent Consent.MARKETING_NEWSLETTER.description=This is a sample marketing consent description that will need to be updated or replaced, based on the valid registration consent required. Consent.MARKETING_NEWSLETTER.exposed=true diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/installer/customconfig/custom.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/installer/customconfig/custom.properties new file mode 100644 index 0000000..146a2dd --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/installer/customconfig/custom.properties @@ -0,0 +1,38 @@ +# Sample custom.properites file +# To get Spartacus working with local SAP Commerce Cloud +# Not to be used with production +# Please review settings with experienced SAP Commerce Cloud implementers +# Last updated May 29, 2020 + +initialpassword.admin=nimda +sop.post.url=https://localhost:9002/acceleratorservices/sop-mock/process +occ.rewrite.overlapping.paths.enabled=true + +corsfilter.default.allowedOrigins=* +corsfilter.acceleratorservices.allowedOrigins=* +corsfilter.permissionswebservices.allowedOrigins=* + +corsfilter.ycommercewebservices.allowedOrigins=* +corsfilter.ycommercewebservices.allowedHeaders=origin content-type accept authorization cache-control x-anonymous-consents x-profile-tag-debug x-consent-reference +corsfilter.ycommercewebservices.exposedHeaders=x-anonymous-consents + +corsfilter.commercewebservices.allowedOrigins=* +corsfilter.commercewebservices.allowedHeaders=origin content-type accept authorization cache-control x-anonymous-consents x-profile-tag-debug x-consent-reference +corsfilter.commercewebservices.exposedHeaders=x-anonymous-consents + +corsfilter.assistedservicewebservices.allowedOrigins=* +corsfilter.assistedservicewebservices.allowedHeaders=origin content-type accept authorization cache-control x-anonymous-consents x-profile-tag-debug x-consent-reference +corsfilter.assistedservicewebservices.exposedHeaders=x-anonymous-consents + +mockup.payment.label.billTo.region=billTo_state +mockup.payment.label.billTo.phoneNumber=billTo_phoneNumber + +yacceleratorordermanagement.fraud.scoreLimit=500000 +yacceleratorordermanagement.fraud.scoreTolerance=500000 +yacceleratorordermanagement.fraud.scoreLimitExternal=500000 +yacceleratorordermanagement.fraud.scoreToleranceExternal=500000 +task.polling.interval.min=0 + +smarteditaddon.dynamicattribute.enabled=true + +build.parallel=true diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_cs.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_cs.properties old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_de.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_de.properties old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_en.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_en.properties old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_es.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_es.properties old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_es_CO.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_es_CO.properties old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_fr.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_fr.properties old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_hi.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_hi.properties old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_id.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_id.properties old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_it.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_it.properties old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_ja.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_ja.properties old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_ko.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_ko.properties old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_pl.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_pl.properties old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_pt.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_pt.properties old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_ru.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_ru.properties old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_zh.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_zh.properties old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_zh_TW.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/localization/spartacussampledataaddon-locales_zh_TW.properties old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon-beans.xml b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon-beans.xml old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon-items.xml b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon-items.xml old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon-spring.xml b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon-spring.xml old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/common/user-groups.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/common/user-groups.impex deleted file mode 100755 index 5d52e69..0000000 --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/common/user-groups.impex +++ /dev/null @@ -1,29 +0,0 @@ -# Access rights for asagentgroup -# - These are needed for rendering (cmsoccaddon). - -$START_USERRIGHTS;;;;;;;;; -Type;UID;MemberOfGroups;Password;Target;read;change;create;remove;change_perm -UserGroup;asagentgroup;;;;;;;; - -# general -;;;;Item;+;;;;; -;;;;Type;+;;;;; - -# access rights for Products, Store, Site and Catalogs -;;;;Product;+;;;;; -;;;;Category;+;;;;; -;;;;VariantType;+;;;;; -;;;;BaseSite;+;;;;; -;;;;BaseStore;+;;;;; -;;;;Catalog;+;;;;; -;;;;CatalogVersion;+;;;;; -;;;;ContentCatalog;+;;;;; -;;;;MediaContainer;+;-;-;-;-; -;;;;MediaContext;+;-;-;-;-; -;;;;MediaFormat;+;-;-;-;-; -;;;;MediaFormatMapping;+;-;-;-;-; - -# cms2 items -;;;;CMSItem;+;-;-;-;-; - -$END_USERRIGHTS;;;;; diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-deContentCatalog/cms-responsive-content.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-deContentCatalog/cms-responsive-content.impex old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/catalog.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/catalog.impex new file mode 100644 index 0000000..cbdddb6 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/catalog.impex @@ -0,0 +1,36 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# The files in this addon are licensed under the Apache Software License, v. 2 +# except as noted otherwise in the LICENSE file. +# ----------------------------------------------------------------------- +# +$contentCatalog=apparel-ukContentCatalog +$spaContentCatalog=apparel-uk-spaContentCatalog +$language=en +$languages=ja,en,de,zh + + +###### Content catalog for spartacus ###### +INSERT_UPDATE ContentCatalog;id[unique=true];name[lang=$language] +;$spaContentCatalog;"SPA Apparel UK Content Catalog" + +###### CatalogVersion for spartacus ###### +INSERT_UPDATE CatalogVersion;catalog(id)[unique=true];version[unique=true];active;languages(isoCode);writePrincipals(usergroup.uid)[mode=append];readPrincipals(usergroup.uid)[mode=append] +;$spaContentCatalog;Staged;false;$languages;cmsmanagergroup; +;$spaContentCatalog;Online;true;$languages;;cmsmanagergroup; + +###### Sync apparelUKContentCatalog:staged to spaContentCatalog:staged ###### +$syncJob=sync $contentCatalog:Staged->$spaContentCatalog:Staged +$sourceContentCV=sourceVersion(catalog(id[default=$contentCatalog]),version[default='Staged'])[unique=true,default='$contentCatalog:Staged'] +$targetContentCV=targetVersion(catalog(id[default=$spaContentCatalog]),version[default='Staged'])[unique=true,default='$spaContentCatalog:Staged'] + +INSERT_UPDATE CatalogVersionSyncJob;code[unique=true];$sourceContentCV;$targetContentCV;syncPrincipals(uid)[mode=append];syncPrincipalsOnly[default=false];removeMissingItems;createNewItems;rootTypes(code)[mode=append] +;$syncJob;;;cmsmanagergroup;;true;true;CMSItem,CMSRelation,Media,MediaContainer + + +###### Site Context ###### +INSERT_UPDATE CmsSiteContext;code[unique=true];name[lang=$language] +;LANGUAGE;"language" +;CURRENCY;"currency" diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/cleaning.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/cleaning.impex new file mode 100644 index 0000000..aed2844 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/cleaning.impex @@ -0,0 +1,281 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# The files in this addon are licensed under the Apache Software License, v. 2 +# except as noted otherwise in the LICENSE file. +# ----------------------------------------------------------------------- +# +###### Remove unused pages ###### +$contentCatalog=apparel-uk-spaContentCatalog +$contentCV=catalogVersion(CatalogVersion.catalog(Catalog.id[default=$contentCatalog]),CatalogVersion.version[default=Staged])[default=$contentCatalog:Staged] + +# Quick order +REMOVE CMSParagraphComponent;$contentCV[unique=true];uid[unique=true] +;;QuickOrderInfoParagraphComponent + +REMOVE ContentSlotForPage;$contentCV[unique=true];uid[unique=true] +;;TopContent-quickOrderPage + +REMOVE ContentSlot;$contentCV[unique=true];uid[unique=true] +;;TopContent-quickOrderPage + +REMOVE ContentPage;$contentCV[unique=true];uid[unique=true] +;;quickOrderPage + +# Order expired +REMOVE CMSParagraphComponent;$contentCV[unique=true];uid[unique=true] +;;orderExpiredMenuParagraph +;;orderExpiredTextParagraph + +REMOVE ContentSlotForPage;$contentCV[unique=true];uid[unique=true] +;;Section2A-OrderExpired +;;Section2B-OrderExpired + +REMOVE ContentSlot;$contentCV[unique=true];uid[unique=true] +;;Section2ASlot-OrderExpired +;;Section2BSlot-OrderExpired + +REMOVE ContentPage;$contentCV[unique=true];uid[unique=true] +;;orderExpired + +# Import CSV as Saved Cart Page +REMOVE ContentSlotForPage;$contentCV[unique=true];uid[unique=true] +;;SideContent-importCSVSavedCartPage +;;BodyContent-importCSVSavedCartPage + +REMOVE ContentSlot;$contentCV[unique=true];uid[unique=true] +;;SideContent-importCSVSavedCartPage +;;BodyContent-importCSVSavedCartPage + +REMOVE ContentPage;$contentCV[unique=true];uid[unique=true] +;;importCSVSavedCartPage + +# Saved Cart Details Page +REMOVE ContentSlotForPage;$contentCV[unique=true];uid[unique=true] +;;SideContent-savedCartDetailsPage +;;BodyContent-savedCartDetailsPage + +REMOVE ContentSlot;$contentCV[unique=true];uid[unique=true] +;;SideContent-savedCartDetailsPage +;;BodyContent-savedCartDetailsPage + +REMOVE ContentPage;$contentCV[unique=true];uid[unique=true] +;;savedCartDetailsPage + +# Account Saved Carts Page +REMOVE ContentSlotForPage;$contentCV[unique=true];uid[unique=true] +;;SideContent-saved-carts +;;BodyContent-saved-carts + +REMOVE ContentSlot;$contentCV[unique=true];uid[unique=true] +;;SideContent-saved-carts +;;BodyContent-saved-carts + +REMOVE ContentPage;$contentCV[unique=true];uid[unique=true] +;;saved-carts + +# Add-Edit address +REMOVE ContentSlotForPage;$contentCV[unique=true];uid[unique=true] +;;SideContent-add-edit-address +;;BodyContent-add-edit-address + +REMOVE ContentSlot;$contentCV[unique=true];uid[unique=true] +;;SideContent-add-edit-address +;;BodyContent-add-edit-address + +REMOVE ContentPage;$contentCV[unique=true];uid[unique=true] +;;add-edit-address + +# Add to cart +REMOVE ContentSlotForTemplate;$contentCV[unique=true];uid[unique=true] +;;AddToCart-ProductDetails +# ;;VariantSelector-ProductDetails + +REMOVE ContentSlot;$contentCV[unique=true];uid[unique=true] +;;AddToCartSlot +# ;;VariantSelectorSlot + +REMOVE ContentSlotName;name[unique=true];template(uid,$contentCV)[unique=true];validComponentTypes(code);compTypeGroup(code) +;AddToCart;ProductDetailsPageTemplate;;; +# ;VariantSelector;ProductDetailsPageTemplate;;; + + +###### Remove unused navigation nodes ###### +# Account navigation nodes +REMOVE CMSNavigationNode;uid[unique=true];$contentCV[unique=true] +;SavedCartsNavNode; + +REMOVE CMSNavigationEntry;uid[unique=true];$contentCV[unique=true]; +;SavedCartsNavNodeEntry; + +REMOVE CMSLinkComponent;$contentCV[unique=true];uid[unique=true] +;;SavedCartsLink + +# Order Navigation nodes +# component contains the OrderNavNode +REMOVE NavigationComponent;$contentCV[unique=true];uid[unique=true] +;;OrderComponent + +REMOVE CMSNavigationNode;$contentCV[unique=true];uid[unique=true] +# This is the parent of quickOrder and importSavedCart +;;OrderNavNode +;;QuickOrderNavNode +;;ImportSavedCartNavNode + +REMOVE CMSNavigationEntry;$contentCV[unique=true];uid[unique=true] +;;QuickOrderNavNodeEntry +;;ImportSavedCartNavNodeEntry + +REMOVE CMSLinkComponent;$contentCV[unique=true];uid[unique=true] +;;QuickOrderLink +;;ImportSavedCartLink + +# Add all brands category url +UPDATE CMSLinkComponent;$contentCV[unique=true];uid[unique=true];url +;;AllBrandsLink;/Brands/all/c/brands + +# Update brands sublinks +INSERT_UPDATE CMSLinkComponent;$contentCV[unique=true];uid[unique=true];url +;;667Link;/Brands/667/c/667 +;;686Link;/Brands/686/c/686 +;;69SlamLink;/Brands/69 Slam/c/69 Slam +;;adidasOriginalsLink;/Brands/adidas Originals/c/adidas Originals +;;AlMerrickLink;/Brands/Al Merrick/c/Al Merrick +;;AlienWorkshopLink;/Brands/Al MerricAlien Workshopk/c/Alien Workshop +;;AnalogLink;/Brands/Analog/c/Analog +;;AnonLink;/Brands/Anon/c/Anon +;;ArmadaLink;/Brands/Armada/c/Armada +;;BenchLink;/Brands/Bench/c/Bench +;;BillabongLink;/Brands/Billabong/c/Billabong +;;BlueTomatoLink;/Brands/Blue Tomato/c/Blue Tomato +;;BurtonLink;/Brands/Burton/c/Burton +;;CarharttLink;/Brands/Carhartt/c/Carhartt +;;DCLink;/Brands/DC/c/DC +;;DaineseLink;/Brands/Dainese/c/Dainese +;;DakineLink;/Brands/Dakine/c/Dakine +;;DalbelloLink;/Brands/Dalbello/c/Dalbello +;;droidLink;/Brands/droid/c/droid +;;ElementLink;/Brands/Element/c/Element +;;ElmLink;/Brands/Elm/c/Elm +;;F2-FTWOLink;/Brands/F2-FTWO/c/F2-FTWO +;;FemipleasureLink;/Brands/Femipleasure/c/Femipleasure +;;FoursquareLink;/Brands/Foursquare/c/Foursquare +;;FoxLink;/Brands/Fox/c/Fox +;;HorsefeathersLink;/Brands/Horsefeathers/c/Horsefeathers +;;HurleyLink;/Brands/Hurley/c/Hurley +;;NikeLink;/Brands/Nike/c/Nike +;;Nike6.0Link;/Brands/Nike 6.0/c/Nike 6.0 +;;NixonLink;/Brands/Nixon/c/Nixon +;;OakleyLink;/Brands/Oakley/c/Oakley +;;OrageLink;/Brands/Orage/c/Orage +;;PYUALink;/Brands/PYUA/c/PYUA +;;PlayboardLink;/Brands/Playboard/c/Playboard +;;ProTecLink;/Brands/Pro Tec/c/Pro Tec +;;QuiksilverLink;/Brands/Quiksilver/c/Quiksilver +;;RedLink;/Brands/Red/c/Red +;;ReefLink;/Brands/Reef/c/Reef +;;RipCurlLink;/Brands/Rip Curl/c/Rip Curl +;;RoxyLink;/Brands/Roxy/c/Roxy +;;SessionsLink;/Brands/Sessions/c/Sessions +;;SpecialBlendLink;/Brands/Special Blend/c/Special Blend +;;TokoLink;/Brands/Toko/c/Toko +;;VIVOLink;/Brands/VIVO/c/VIVO +;;VansLink;/Brands/Vans/c/Vans +;;VolcomLink;/Brands/Volcom/c/Volcom +;;VonZipperLink;/Brands/Von Zipper/c/Von Zipper +;;WLDLink;/Brands/WLD/c/WLD +;;ZimtsternLink;/Brands/Zimtstern/c/Zimtstern + +# temporary fix for broken links in header navigation +# (see https://github.com/SAP/cloud-commerce-spartacus-storefront/issues/5237) +INSERT_UPDATE CMSLinkComponent;$contentCV[unique=true];uid[unique=true];url +;;StreetwearMensBeltsLink;/Collections/Streetwear/c/251100 +;;StreetwearYouthBoardshortsBillabongLink;/Categories/Streetwear-youth/Boardshorts-youth/c/270600 +;;StreetwearYouthBoardshorts69SlamLink;/Categories/Streetwear-youth/Boardshorts-youth/c/270600 +;;StreetwearYouthBoardshortsQuiksilverLink;/Categories/Streetwear-youth/Boardshorts-youth/c/270600 +;;StreetwearYouthBoardshortsVolcomLink;/Categories/Streetwear-youth/Boardshorts-youth/c/270600 +;;StreetwearYouthTShirtsBillabongLink;/Categories/Streetwear-youth/T-Shirts-youth/c/270100 +;;StreetwearYouthTShirtsBlueTomatoLink;/Categories/Streetwear-youth/T-Shirts-youth/c/270100 +;;StreetwearYouthTShirtsBurtonLink;/Categories/Streetwear-youth/T-Shirts-youth/c/270100 +;;StreetwearYouthTShirtsDCLink;/Categories/Streetwear-youth/T-Shirts-youth/c/270100 +;;StreetwearYouthTShirtsQuiksilverLink;/Categories/Streetwear-youth/T-Shirts-youth/c/270100 + +###### Replace JspIncludeComponent to CMSFlexComponent ###### +# Remove JspIncludeComponent +REMOVE JspIncludeComponent[batchmode=true];$contentCV[unique=true];itemtype(code)[unique=true] +;;JspIncludeComponent + +# Create CMSFlexComponent +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;AccountAddEditAddressComponent;Account Add Edit Address Component;AccountAddEditAddressComponent;AccountAddEditAddressComponent +;;AccountAddressBookComponent;Account Address Book Component;AccountAddressBookComponent;AccountAddressBookComponent +;;AccountOrderDetailsActionsComponent;Account Order Details Actions Component;AccountOrderDetailsActionsComponent;AccountOrderDetailsActionsComponent +;;AccountOrderDetailsHeadlineComponent;Account Order Details Headline Component;AccountOrderDetailsHeadlineComponent;AccountOrderDetailsHeadlineComponent +;;AccountOrderDetailsItemsComponent;Account Order Details Items Info Component;AccountOrderDetailsItemsComponent;AccountOrderDetailsItemsComponent +;;AccountOrderDetailsOverviewComponent;Account Order Details Overview Info Component;AccountOrderDetailsOverviewComponent;AccountOrderDetailsOverviewComponent +;;AccountOrderDetailsShippingComponent;Account Order Details Shipping Info Component;AccountOrderDetailsShippingComponent;AccountOrderDetailsShippingComponent +;;AccountOrderDetailsTotalsComponent;Account Order Details Order Totals Component;AccountOrderDetailsTotalsComponent;AccountOrderDetailsTotalsComponent +;;AccountOrderHistoryComponent;Account History Component;AccountOrderHistoryComponent;AccountOrderHistoryComponent +;;AccountPaymentDetailsComponent;Account Payment Details Component;AccountPaymentDetailsComponent;AccountPaymentDetailsComponent +;;CartComponent;Cart Display Component;CartComponent;CartComponent +;;CartTotalsComponent;Cart Totals Display Component;CartTotalsComponent;CartTotalsComponent +;;CheckoutComponent;Checkout Display Component;CheckoutComponent;CheckoutComponent +;;CloseAccountComponent;Close Account Component;CloseAccountComponent;CloseAccountComponent +;;ConsentManagementComponent;Consent Management Component;ConsentManagementComponent;ConsentManagementComponent +;;GuestCheckoutLoginComponent;Guest Checkout Login Component;GuestCheckoutLoginComponent;GuestCheckoutLoginComponent +;;OrderConfirmationContinueButtonComponent;Order Confirmation Continue Button Component;OrderConfirmationContinueButtonComponent;OrderConfirmationContinueButtonComponent +;;OrderConfirmationItemsComponent;Order Confirmation Items Info Component;OrderConfirmationItemsComponent;OrderConfirmationItemsComponent +;;OrderConfirmationOverviewComponent;Order Confirmation Overview Info Component;OrderConfirmationOverviewComponent;OrderConfirmationOverviewComponent +;;OrderConfirmationShippingComponent;Order Confirmation Shipping Info Component;OrderConfirmationShippingComponent;OrderConfirmationShippingComponent +;;OrderConfirmationThankMessageComponent;Order Confirmation Thank You Message Component;OrderConfirmationThankMessageComponent;OrderConfirmationThankMessageComponent +;;OrderConfirmationTotalsComponent;Order Confirmation Totals Component;OrderConfirmationTotalsComponent;OrderConfirmationTotalsComponent +;;PotentialPromotionsComponent;Potential Promotions Component;PotentialPromotionsComponent;PotentialPromotionsComponent +;;ProductDetailsTabComponent;Product Details Tab;ProductDetailsTabComponent;ProductDetailsTabComponent +;;ProductReviewsTabComponent;Product Reviews Tab;ProductReviewsTabComponent;ProductReviewsTabComponent +;;ProductSpecsTabComponent;Product Specification Tab;ProductSpecsTabComponent;ProductSpecsTabComponent +;;PromotionsComponent;Promotions Component;PromotionsComponent;PromotionsComponent +;;ReturningCustomerCheckoutLoginComponent;Returning Customer Checkout Login Component;ReturningCustomerCheckoutLoginComponent;ReturningCustomerCheckoutLoginComponent +;;ReturningCustomerLoginComponent;Returning Customer Login Component;ReturningCustomerLoginComponent;ReturningCustomerLoginComponent +;;StoreFinderComponent;Store Finder Component;StoreFinderComponent;StoreFinderComponent +;;UpdateEmailComponent;Update Email Component;UpdateEmailComponent;UpdateEmailComponent +;;UpdatePasswordComponent;Update Password Component;UpdatePasswordComponent;UpdatePasswordComponent +;;UpdateProfileComponent;Update Profile Component;UpdateProfileComponent;UpdateProfileComponent +;;CartApplyCouponComponent;Cart Apply Coupon Component;CartApplyCouponComponent;CartApplyCouponComponent +;;SaveForLaterComponent;SaveForLater Component;SaveForLaterComponent;SaveForLaterComponent + +# Update slots +UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid, $contentCV) +;;BodyContentSlot-address-book;AccountAddressBookComponent +;;BodyContentSlot-orderdetail;AccountOrderDetailsHeadlineComponent,AccountOrderDetailsOverviewComponent,AccountOrderDetailsItemsComponent,AccountOrderDetailsShippingComponent,AccountOrderDetailsTotalsComponent,AccountOrderDetailsActionsComponent +;;BodyContentSlot-orders;AccountOrderHistoryComponent +;;BodyContentSlot-payment-details;AccountPaymentDetailsComponent +;;BodyContentSlot-close-account;CloseAccountComponent +;;BodyContentSlot-consents;ConsentManagementComponent +;;BodyContentSlot-update-email;UpdateEmailComponent +;;BodyContentSlot-updatePassword;UpdatePasswordComponent +;;BodyContentSlot-update-profile;UpdateProfileComponent +;;BodyContent-orderConfirmation;OrderConfirmationThankMessageComponent,OrderConfirmationOverviewComponent,OrderConfirmationItemsComponent,OrderConfirmationShippingComponent,OrderConfirmationTotalsComponent,OrderConfirmationContinueButtonComponent +;;TopContentSlot-cartPage;CartComponent,SaveForLaterComponent +;;CenterLeftContentSlot-cartPage;PromotionsComponent,PotentialPromotionsComponent +;;CenterRightContentSlot-cartPage;CartTotalsComponent,CartApplyCouponComponent +;;BottomContentSlot-cartPage;CheckoutComponent,CartSuggestions +;;RightContentSlot-checkout-login;GuestCheckoutLoginComponent +;;LeftContentSlot-checkout-login;ReturningCustomerCheckoutLoginComponent +;;RightContentSlot-login; +;;LeftContentSlot-login;ReturningCustomerLoginComponent +;;MiddleContentSlot-StoreFinder;StoreFinderComponent + +UPDATE CMSTabParagraphContainer;$contentCV[unique=true];uid[unique=true];simpleCMSComponents(uid, $contentCV);&componentRef +;;TabPanelContainer;ProductDetailsTabComponent,ProductSpecsTabComponent,ProductReviewsTabComponent,deliveryTab;TabPanelContainer + +# CMS Assisted Service Components and Sub-Components + +REMOVE AssistedServiceComponent;$contentCV[unique=true];uid[unique=true] +;;AssistedServiceComponent + +REMOVE ASMDevicesUsedComponent;$contentCV[unique=true];uid[unique=true] +;;ASMDevicesUsedComponent + +REMOVE ASMFavoriteColorsComponent;$contentCV[unique=true];uid[unique=true] +;;ASMFavoriteColorsComponent diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-responsive-content.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-responsive-content.impex old mode 100755 new mode 100644 index 062f77b..f6d20da --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-responsive-content.impex +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-responsive-content.impex @@ -6,65 +6,516 @@ # except as noted otherwise in the LICENSE file. # ----------------------------------------------------------------------- # -$contentCatalog=apparel-ukContentCatalog +$contentCatalog=apparel-uk-spaContentCatalog $contentCV=catalogVersion(CatalogVersion.catalog(Catalog.id[default=$contentCatalog]),CatalogVersion.version[default=Staged])[default=$contentCatalog:Staged] +$siteResource=jar:de.hybris.platform.spartacussampledataaddon.constants.SpartacussampledataaddonConstants&/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog -# Update MiniCartSlot +###### Update homepage preview image ###### +INSERT_UPDATE Media;$contentCV[unique=true];code[unique=true];mime;realfilename;@media[translator=de.hybris.platform.impex.jalo.media.MediaDataTranslator][forceWrite=true];folder(qualifier)[default='images'];; +;;homepagePreview-spa;image/png;Homepage.png;$siteResource/images/Homepage.png;;; + +UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];previewImage(code, $contentCV) +;;homepage;homepagePreview-spa + + +####### Update MiniCartSlot ###### UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid, $contentCV) ;;MiniCartSlot;MiniCart -###### StoreFinder ###### -# Create ContentSlots + +### Update Search Resulst Page template to have list template +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];masterTemplate(uid,$contentCV) +;;search;SearchResultsListPageTemplate + + +###### SiteContext Slot and Components ###### +INSERT_UPDATE CMSSiteContextComponent;$contentCV[unique=true];uid[unique=true];name;context(code);&componentRef +;;LanguageComponent;Site Languages;LANGUAGE;LanguageComponent +;;CurrencyComponent;Site Currencies;CURRENCY;CurrencyComponent + INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(uid,$contentCV) -;;StoreFinderSlot;Find a Store Link;true;StoreFinderLink +;;SiteContextSlot;Site Context Slot;true;LanguageComponent,CurrencyComponent -# Create ContentSlotName for each page template INSERT_UPDATE ContentSlotName;name[unique=true];template(uid,$contentCV)[unique=true];validComponentTypes(code);compTypeGroup(code) -;StoreFinder;ProductDetailsPageTemplate;CMSLinkComponent;; -;StoreFinder;ErrorPageTemplate;CMSLinkComponent;; -;StoreFinder;ProductListPageTemplate;CMSLinkComponent;; -;StoreFinder;ProductGridPageTemplate;CMSLinkComponent;; -;StoreFinder;SearchResultsListPageTemplate;CMSLinkComponent;; -;StoreFinder;SearchResultsGridPageTemplate;CMSLinkComponent;; -;StoreFinder;SearchResultsEmptyPageTemplate;CMSLinkComponent;; -;StoreFinder;CategoryPageTemplate;CMSLinkComponent;; -;StoreFinder;LandingPage2Template;CMSLinkComponent;; -;StoreFinder;ContentPage1Template;CMSLinkComponent;; -;StoreFinder;CartPageTemplate;CMSLinkComponent;; -;StoreFinder;LoginPageTemplate;CMSLinkComponent;; -;StoreFinder;CheckoutLoginPageTemplate;CMSLinkComponent;; -;StoreFinder;MultiStepCheckoutSummaryPageTemplate;CMSLinkComponent;; -;StoreFinder;OrderConfirmationPageTemplate;CMSLinkComponent;; -;StoreFinder;AccountPageTemplate;CMSLinkComponent;; -;StoreFinder;StoreFinderPageTemplate;CMSLinkComponent;; - -# Bind Content Slots to Page Templates +;SiteContext;ProductDetailsPageTemplate;CMSSiteContextComponent;; +;SiteContext;ErrorPageTemplate;CMSSiteContextComponent;; +;SiteContext;ProductListPageTemplate;CMSSiteContextComponent;; +;SiteContext;ProductGridPageTemplate;CMSSiteContextComponent;; +;SiteContext;SearchResultsListPageTemplate;CMSSiteContextComponent;; +;SiteContext;SearchResultsGridPageTemplate;CMSSiteContextComponent;; +;SiteContext;SearchResultsEmptyPageTemplate;CMSSiteContextComponent;; +;SiteContext;CategoryPageTemplate;CMSSiteContextComponent;; +;SiteContext;LandingPage2Template;CMSSiteContextComponent;; +;SiteContext;ContentPage1Template;CMSSiteContextComponent;; +;SiteContext;CartPageTemplate;CMSSiteContextComponent;; +;SiteContext;LoginPageTemplate;CMSSiteContextComponent;; +;SiteContext;CheckoutLoginPageTemplate;CMSSiteContextComponent;; +;SiteContext;MultiStepCheckoutSummaryPageTemplate;CMSSiteContextComponent;; +;SiteContext;OrderConfirmationPageTemplate;CMSSiteContextComponent;; +;SiteContext;AccountPageTemplate;CMSSiteContextComponent;; +;SiteContext;StoreFinderPageTemplate;CMSSiteContextComponent;; + INSERT_UPDATE ContentSlotForTemplate;$contentCV[unique=true];uid[unique=true];position[unique=true];pageTemplate(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true];allowOverwrite -;;StoreFinderSlot-ProductDetailsPage;StoreFinder;ProductDetailsPageTemplate;StoreFinderSlot;true -;;StoreFinderSlot-ErrorPage;StoreFinder;ErrorPageTemplate;StoreFinderSlot;true -;;StoreFinderSlot-ProductListPage;StoreFinder;ProductListPageTemplate;StoreFinderSlot;true -;;StoreFinderSlot-ProductGridPage;StoreFinder;ProductGridPageTemplate;StoreFinderSlot;true -;;StoreFinderSlot-SearchResultsListPage;StoreFinder;SearchResultsListPageTemplate;StoreFinderSlot;true -;;StoreFinderSlot-SearchResultsGridPage;StoreFinder;SearchResultsGridPageTemplate;StoreFinderSlot;true -;;StoreFinderSlot-SearchResultsEmpytPage;StoreFinder;SearchResultsEmptyPageTemplate;StoreFinderSlot;true -;;StoreFinderSlot-CategoryPage;StoreFinder;CategoryPageTemplate;StoreFinderSlot;true -;;StoreFinderSlot-LandingPage2;StoreFinder;LandingPage2Template;StoreFinderSlot;true -;;StoreFinderSlot-ContentPage1;StoreFinder;ContentPage1Template;StoreFinderSlot;true -;;StoreFinderSlot-CartPage;StoreFinder;CartPageTemplate;StoreFinderSlot;true -;;StoreFinderSlot-LoginPage;StoreFinder;LoginPageTemplate;StoreFinderSlot;true -;;StoreFinderSlot-CheckoutLoginPage;StoreFinder;CheckoutLoginPageTemplate;StoreFinderSlot;true -;;StoreFinderSlot-MultiStepCheckoutSummaryPage;StoreFinder;MultiStepCheckoutSummaryPageTemplate;StoreFinderSlot;true -;;StoreFinderSlot-OrderConfirmationPage;StoreFinder;OrderConfirmationPageTemplate;StoreFinderSlot;true -;;StoreFinderSlot-AccountPage;StoreFinder;AccountPageTemplate;StoreFinderSlot;true -;;StoreFinderSlot-StoreFinderPage;StoreFinder;StoreFinderPageTemplate;StoreFinderSlot;true - -###### Sign out ###### +;;SiteContextSlot-ProductDetailsPage;SiteContext;ProductDetailsPageTemplate;SiteContextSlot;true +;;SiteContextSlot-ErrorPage;SiteContext;ErrorPageTemplate;SiteContextSlot;true +;;SiteContextSlot-ProductListPage;SiteContext;ProductListPageTemplate;SiteContextSlot;true +;;SiteContextSlot-ProductGridPage;SiteContext;ProductGridPageTemplate;SiteContextSlot;true +;;SiteContextSlot-SearchResultsListPage;SiteContext;SearchResultsListPageTemplate;SiteContextSlot;true +;;SiteContextSlot-SearchResultsGridPage;SiteContext;SearchResultsGridPageTemplate;SiteContextSlot;true +;;SiteContextSlot-SearchResultsEmpytPage;SiteContext;SearchResultsEmptyPageTemplate;SiteContextSlot;true +;;SiteContextSlot-CategoryPage;SiteContext;CategoryPageTemplate;SiteContextSlot;true +;;SiteContextSlot-LandingPage2;SiteContext;LandingPage2Template;SiteContextSlot;true +;;SiteContextSlot-ContentPage1;SiteContext;ContentPage1Template;SiteContextSlot;true +;;SiteContextSlot-CartPage;SiteContext;CartPageTemplate;SiteContextSlot;true +;;SiteContextSlot-LoginPage;SiteContext;LoginPageTemplate;SiteContextSlot;true +;;SiteContextSlot-CheckoutLoginPage;SiteContext;CheckoutLoginPageTemplate;SiteContextSlot;true +;;SiteContextSlot-MultiStepCheckoutSummaryPage;SiteContext;MultiStepCheckoutSummaryPageTemplate;SiteContextSlot;true +;;SiteContextSlot-OrderConfirmationPage;SiteContext;OrderConfirmationPageTemplate;SiteContextSlot;true +;;SiteContextSlot-AccountPage;SiteContext;AccountPageTemplate;SiteContextSlot;true +;;SiteContextSlot-StoreFinderPage;SiteContext;StoreFinderPageTemplate;SiteContextSlot;true + + +###### SiteLinks Slot and Components ###### +# Create the missing pages +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;sale;Sale Information Page;ContentPage1Template;/sale +;;help;Order Help Page;ContentPage1Template;/help +;;contactUs;Contact Us Page;ContentPage1Template;/contact + +INSERT_UPDATE CMSParagraphComponent;$contentCV[unique=true];uid[unique=true];name;content +;;SaleParagraphComponent;Sale Paragraph Component;"Sale" +;;ContactUsParagraphComponent;Contact Us Paragraph Component;"Contact" +;;CloseAccountParagraphComponent;Close Account Paragraph Component;"When you close your account, your profile information will be kept for the retention period mandated by the laws and regulations of your country. Customer Support will be able to assist you with any order history or proof of purchase needs during this time.

At the end of the retention period, the following profile information will be deleted and will no longer be accessible to you or anyone else:

  • email addresses
  • contact information
  • shipping details
  • delivery preferences
  • consent management settings
  • account history
  • payment details
  • order history
" + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(uid,$contentCV) +;;Section2A-Sale;Section 2A Slot for Sales Page;true;SaleParagraphComponent +;;Section2A-ContactUs;Section 2A Slot for Contact Us Page;true;ContactUsParagraphComponent +;;BodyContentSlot-close-account;Body content Slot for Close Account;true;CloseAccountParagraphComponent,CloseAccountComponent + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;Section2A-Sale;Section2A;sale;Section2A-Sale +;;Section2A-ContactUs;Section2A;contactUs;Section2A-ContactUs +;;BodyContent-close-account;BodyContent;close-account;BodyContentSlot-close-account + +INSERT_UPDATE CMSLinkComponent;$contentCV[unique=true];uid[unique=true];name;url;&linkRef;&componentRef;target(code)[default='sameWindow'];restrictions(uid,$contentCV) +;;HelpLink;Help Link;/faq;HelpLink;HelpLink; +;;ContactUsLink;Contact Us Link;/contact;ContactUsLink;ContactUsLink +;;WishListLink;Wish List Link;/my-account/wishlist;WishListLink;WishListLink;;loggedInUser +;;OrdersLink;Orders Link;/my-account/orders;OrdersLink;OrdersLink;;loggedInUser + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(uid,$contentCV) +;;SiteLinksSlot;Slot contains some links;true;OrdersLink,WishListLink,StoreFinderLink,ContactUsLink,HelpLink + +INSERT_UPDATE ContentSlotName;name[unique=true];template(uid,$contentCV)[unique=true];validComponentTypes(code);compTypeGroup(code) +;SiteLinks;ProductDetailsPageTemplate;CMSLinkComponent;; +;SiteLinks;ErrorPageTemplate;CMSLinkComponent;; +;SiteLinks;ProductListPageTemplate;CMSLinkComponent;; +;SiteLinks;ProductGridPageTemplate;CMSLinkComponent;; +;SiteLinks;SearchResultsListPageTemplate;CMSLinkComponent;; +;SiteLinks;SearchResultsGridPageTemplate;CMSLinkComponent;; +;SiteLinks;SearchResultsEmptyPageTemplate;CMSLinkComponent;; +;SiteLinks;CategoryPageTemplate;CMSLinkComponent;; +;SiteLinks;LandingPage2Template;CMSLinkComponent;; +;SiteLinks;ContentPage1Template;CMSLinkComponent;; +;SiteLinks;CartPageTemplate;CMSLinkComponent;; +;SiteLinks;LoginPageTemplate;CMSLinkComponent;; +;SiteLinks;CheckoutLoginPageTemplate;CMSLinkComponent;; +;SiteLinks;MultiStepCheckoutSummaryPageTemplate;CMSLinkComponent;; +;SiteLinks;OrderConfirmationPageTemplate;CMSLinkComponent;; +;SiteLinks;AccountPageTemplate;CMSLinkComponent;; +;SiteLinks;StoreFinderPageTemplate;CMSLinkComponent;; + +INSERT_UPDATE ContentSlotForTemplate;$contentCV[unique=true];uid[unique=true];position[unique=true];pageTemplate(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true];allowOverwrite +;;SiteLinksSlot-ProductDetailsPage;SiteLinks;ProductDetailsPageTemplate;SiteLinksSlot;true +;;SiteLinksSlot-ErrorPage;SiteLinks;ErrorPageTemplate;SiteLinksSlot;true +;;SiteLinksSlot-ProductListPage;SiteLinks;ProductListPageTemplate;SiteLinksSlot;true +;;SiteLinksSlot-ProductGridPage;SiteLinks;ProductGridPageTemplate;SiteLinksSlot;true +;;SiteLinksSlot-SearchResultsListPage;SiteLinks;SearchResultsListPageTemplate;SiteLinksSlot;true +;;SiteLinksSlot-SearchResultsGridPage;SiteLinks;SearchResultsGridPageTemplate;SiteLinksSlot;true +;;SiteLinksSlot-SearchResultsEmpytPage;SiteLinks;SearchResultsEmptyPageTemplate;SiteLinksSlot;true +;;SiteLinksSlot-CategoryPage;SiteLinks;CategoryPageTemplate;SiteLinksSlot;true +;;SiteLinksSlot-LandingPage2;SiteLinks;LandingPage2Template;SiteLinksSlot;true +;;SiteLinksSlot-ContentPage1;SiteLinks;ContentPage1Template;SiteLinksSlot;true +;;SiteLinksSlot-CartPage;SiteLinks;CartPageTemplate;SiteLinksSlot;true +;;SiteLinksSlot-LoginPage;SiteLinks;LoginPageTemplate;SiteLinksSlot;true +;;SiteLinksSlot-CheckoutLoginPage;SiteLinks;CheckoutLoginPageTemplate;SiteLinksSlot;true +;;SiteLinksSlot-MultiStepCheckoutSummaryPage;SiteLinks;MultiStepCheckoutSummaryPageTemplate;SiteLinksSlot;true +;;SiteLinksSlot-OrderConfirmationPage;SiteLinks;OrderConfirmationPageTemplate;SiteLinksSlot;true +;;SiteLinksSlot-AccountPage;SiteLinks;AccountPageTemplate;SiteLinksSlot;true +;;SiteLinksSlot-StoreFinderPage;SiteLinks;StoreFinderPageTemplate;SiteLinksSlot;true + + +###### Error Page Section ###### +# Create components using existing for error page +INSERT_UPDATE ContentSlotName;name[unique=true];template(uid,$contentCV)[unique=true];validComponentTypes(code);compTypeGroup(code) +;TopContent;ErrorPageTemplate;;wide + +INSERT_UPDATE CMSParagraphComponent;$contentCV[unique=true];uid[unique=true];name;content +;;PageNotFoundParagraphComponent;Page Not Found Paragraph Component;"

Oops!

We couldn't find the page you are looking for.

Here are some useful links instead:

" + +INSERT_UPDATE CMSLinkComponent;$contentCV[unique=true];uid[unique=true];name;url;&linkRef;&componentRef;target(code)[default='sameWindow'] +;;CartLink;Contact Us Link;/cart;CartLink;CartLink + +UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid,$contentCV) +;;ApparelUK-MiddleContent-Errorpage;PageNotFoundParagraphComponent + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(uid,$contentCV) +;;TopContent-Errorpage;Top Content Slot for Error Page;true;ApparelUKErrorpageBannerComponent; +;;BottomContent-Errorpage;Bottom Content Slot for Error Page;true;FAQLink,CartLink + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;TopContent-Errorpage;TopContent;notFound;TopContent-Errorpage +;;BottomContent-Errorpage;BottomContent;notFound;BottomContent-Errorpage + + +###### My Account Navigation Section ###### +# Create additional links INSERT_UPDATE CMSLinkComponent;$contentCV[unique=true];uid[unique=true];name;url;&linkRef;target(code)[default='sameWindow'] -;;SignOutLink;SignOutLink;;SignOutLink; +;;SignOutLink;SignOutLink;/logout;SignOutLink; +;;MyCouponsLink;My Coupons Link;/my-account/coupons;MyCouponsLink; +# Create additional Navigation Nodes INSERT_UPDATE CMSNavigationNode;uid[unique=true];$contentCV[unique=true];name;parent(uid, $contentCV);links(&linkRef);&nodeRef ;SignOutNavNode;;Sign Out;MyAccountNavNode;;SignOutNavNode +;WishListNavNode;;Wish List;MyAccountNavNode;;WishListNavNode +;MyCouponsNavNode;;Coupons Navigation Node;MyAccountNavNode;;MyCouponsNavNode -# create cms navigation entry for nvaigation child nodes +# Create additional cms navigation entries INSERT_UPDATE CMSNavigationEntry;uid[unique=true];$contentCV[unique=true];name;navigationNode(&nodeRef);item(&linkRef); ;SignOutNavNodeEntry;;SignOutNavNodeEntry;SignOutNavNode;SignOutLink; +;WishListNavNodeEntry;;WishListNavNodeEntry;WishListNavNode;WishListLink; +;MyCouponsNavNodeEntry;;My Coupons Navigation Node Entry;MyCouponsNavNode;MyCouponsLink; + +# Set the order or the items in the My Account Menu +UPDATE CMSNavigationNode;uid[unique=true];$contentCV[unique=true];children(uid,$contentCV) +;MyAccountNavNode;;OrderHistoryNavNode,WishListNavNode,AddressBookNavNode,PaymentDetailsNavNode,PersonalDetailsNavNode,ChangePasswordNavNode,UpdateEmailNavNode,ConsentManagementNavNode,CloseAccountNavNode,MyCouponsNavNode,SignOutNavNode + + +###### Create Forgot/Reset Password Pages and Components ###### +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;forgotPassword;Forgot Password Page;LoginPageTemplate;/login/forgot-password +;;resetPassword;Reset Forgotten Password Page;LoginPageTemplate;/login/pw/change + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(&componentRef) +;;LeftContentSlot-forgotPassword;Left Content Slot for Forgot Password;true;ForgotPasswordComponent +;;LeftContentSlot-resetPassword;Left Content Slot for Reset Password;true;ResetPasswordComponent + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;LeftContent-forgotPassword;LeftContentSlot;forgotPassword;LeftContentSlot-forgotPassword +;;LeftContent-resetPassword;LeftContentSlot;resetPassword;LeftContentSlot-resetPassword + +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;ForgotPasswordComponent;Forgot Password Component;ForgotPasswordComponent;ForgotPasswordComponent +;;ResetPasswordComponent;Reset New Password Component;ResetPasswordComponent;ResetPasswordComponent + +UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name +;;updatePassword;My Account Update Password Page + + +###### Breadcrumb in SPA ###### +# remove breadcrumb from NavigationBar +UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid, $contentCV) +;;NavigationBarSlot;ApparelUKCategoryNavComponent + +# add breadcrumb to BottomHeaderSlot +UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid, $contentCV) +;;BottomHeaderSlot;breadcrumbComponent + +# clear BottomHeaderSlot for home page (replaced by an empty slot) +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;cmsComponents(uid, $contentCV) +;;HomepageBottomHeaderSlot;Homepage Bottom Header Slot; + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV);contentSlot(uid,$contentCV)[unique=true] +;;BottomHeaderSlot-homepage;BottomHeaderSlot;homepage;HomepageBottomHeaderSlot + + +###### Create Register Page ###### +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;register;Register Page;AccountPageTemplate;/login/register + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(&componentRef) +;;BodyContentSlot-register;Body Content Slot for Register;true;RegisterCustomerComponent + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;BodyContent-register;BodyContent;register;BodyContentSlot-register + +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;RegisterCustomerComponent;Register Customer Component;RegisterCustomerComponent;RegisterCustomerComponent + + +###### Override page urls ###### +UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];label +;;login;/login +;;notFound;/not-found +;;storefinderPage;/store-finder +;;update-email;/my-account/update-email +;;updatePassword;/my-account/update-password +;;update-profile;/my-account/update-profile +;;close-account;/my-account/close-account +;;consents;/my-account/consents +;;address-book;/my-account/address-book +;;orders;/my-account/orders +;;payment-details;/my-account/payment-details +;;cartPage;/cart +;;orderConfirmationPage;/order-confirmation +;;order;/my-account/order +;;termsAndConditions;/terms-and-conditions + + +###### Reconfig searchbox component config ###### +# UI requirements +INSERT_UPDATE SearchBoxComponent;uid;minCharactersBeforeRequest;maxProducts;maxSuggestions;waitTimeBeforeRequest;$contentCV[unique=true] +;SearchBox;0;5;5;0 + + +###### Pages related to checkout ###### +# add some ContentSlotName into MultiStepCheckoutSummaryPageTemplate +INSERT_UPDATE ContentSlotName;name[unique=true];template(uid,$contentCV)[unique=true][default='MultiStepCheckoutSummaryPageTemplate'];validComponentTypes(code);compTypeGroup(code) +;BodyContent;;;wide +;TopContent;;; +;BottomContent;;; + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;cmsComponents(uid, $contentCV) +;;CheckoutHeaderSlot;Checkout Header Slot +;;CheckoutFooterSlot;Checkout Footer Slot;HelpParagraphComponent + +INSERT_UPDATE ContentSlotForTemplate;$contentCV[unique=true];uid[unique=true];position[unique=true];pageTemplate(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true];allowOverwrite +;;CheckoutHeader-MultiStepCheckoutSummaryPageTemplate;TopContent;MultiStepCheckoutSummaryPageTemplate;CheckoutHeaderSlot;true +;;CheckoutFooter-MultiStepCheckoutSummaryPageTemplate;BottomContent;MultiStepCheckoutSummaryPageTemplate;CheckoutFooterSlot;true + +# component shared by all checkout pages +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType +;;CheckoutOrderSummaryComponent;Checkout OrderSummary Component;CheckoutOrderSummary + + +###### Checkout page (/checkout) ###### +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;Checkout;Checkout Page;MultiStepCheckoutSummaryPageTemplate;/checkout + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;cmsComponents(uid, $contentCV) +;;BodyContentSlot-checkout;Checkout Orchestrator Slot;CheckoutOrchestratorComponent +;;SideContentSlot-checkout;Order Summary Slot;CheckoutOrderSummaryComponent + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;BodyContent-checkout;BodyContent;Checkout;BodyContentSlot-checkout +;;SideContent-checkout;SideContent;Checkout;SideContentSlot-checkout + +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType +;;CheckoutOrchestratorComponent;Checkout Orchestrator Component;CheckoutOrchestrator + +## Shipping address page (/checkout/shipping-address) +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;CheckoutShippingAddress;Checkout Shipping Address Page;MultiStepCheckoutSummaryPageTemplate;/checkout/shipping-address + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;cmsComponents(uid, $contentCV) +;;BodyContentSlot-checkoutShippingAddress;Checkout Shipping Address Slot;CheckoutProgressComponent,CheckoutProgressMobileTopComponent,CheckoutShippingAddressComponent,CheckoutProgressMobileBottomComponent +;;SideContentSlot-checkoutShippingAddress;Order Summary Slot;CheckoutOrderSummaryComponent + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;BodyContent-checkoutShippingAddress;BodyContent;CheckoutShippingAddress;BodyContentSlot-checkoutShippingAddress +;;SideContent-checkoutShippingAddress;SideContent;CheckoutShippingAddress;SideContentSlot-checkoutShippingAddress + +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType +;;CheckoutProgressComponent;Checkout Progress Component;CheckoutProgress +;;CheckoutProgressMobileTopComponent;Checkout Progress Mobile Top Component;CheckoutProgressMobileTop +;;CheckoutShippingAddressComponent;Checkout Shipping Address Component;CheckoutShippingAddress +;;CheckoutProgressMobileBottomComponent;Checkout Progress Mobile Bottom Component;CheckoutProgressMobileBottom + +## Delivery mode page (/checkout/delivery-mode) +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;CheckoutDeliveryMode;Checkout Delivery Mode Page;MultiStepCheckoutSummaryPageTemplate;/checkout/delivery-mode + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;cmsComponents(uid, $contentCV) +;;BodyContentSlot-checkoutDeliveryMode;Checkout Delivery Mode Slot;CheckoutProgressComponent,CheckoutProgressMobileTopComponent,CheckoutDeliveryModeComponent,CheckoutProgressMobileBottomComponent +;;SideContentSlot-checkoutDeliveryMode;Order Summary Slot;CheckoutOrderSummaryComponent + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;BodyContent-checkoutDeliveryMode;BodyContent;CheckoutDeliveryMode;BodyContentSlot-checkoutDeliveryMode +;;SideContent-checkoutDeliveryMode;SideContent;CheckoutDeliveryMode;SideContentSlot-checkoutDeliveryMode + +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType +;;CheckoutDeliveryModeComponent;CheckoutDeliveryModeComponent;CheckoutDeliveryMode + +## Payment details page (/checkout/payment-details) +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;CheckoutPaymentDetails;Checkout Payment Details Page;MultiStepCheckoutSummaryPageTemplate;/checkout/payment-details + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;cmsComponents(uid, $contentCV) +;;BodyContentSlot-checkoutPaymentDetails;Checkout Payment Details Slot;CheckoutProgressComponent,CheckoutProgressMobileTopComponent,CheckoutPaymentDetailsComponent,CheckoutProgressMobileBottomComponent +;;SideContentSlot-checkoutPaymentDetails;Order Summary Slot;CheckoutOrderSummaryComponent + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;BodyContent-checkoutPaymentDetails;BodyContent;CheckoutPaymentDetails;BodyContentSlot-checkoutPaymentDetails +;;SideContent-checkoutPaymentDetails;SideContent;CheckoutPaymentDetails;SideContentSlot-checkoutPaymentDetails + +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType +;;CheckoutPaymentDetailsComponent;CheckoutPaymentDetailsComponent;CheckoutPaymentDetails + +## Review order page (/checkout/review-order) +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;CheckoutReviewOrder;Checkout Review Order Page;MultiStepCheckoutSummaryPageTemplate;/checkout/review-order + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;cmsComponents(uid, $contentCV) +;;BodyContentSlot-checkoutReviewOrder;Checkout Review Order Slot;CheckoutProgressComponent,CheckoutProgressMobileTopComponent,CheckoutReviewOrderComponent,CheckoutProgressMobileBottomComponent +;;SideContentSlot-checkoutReviewOrder;Checkout Place Order Slot;CheckoutOrderSummaryComponent,CheckoutPlaceOrderComponent + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;BodyContent-checkoutReviewOrder;BodyContent;CheckoutReviewOrder;BodyContentSlot-checkoutReviewOrder +;;SideContent-checkoutReviewOrder;SideContent;CheckoutReviewOrder;SideContentSlot-checkoutReviewOrder + +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType +;;CheckoutPlaceOrderComponent;CheckoutPlaceOrderComponent;CheckoutPlaceOrder +;;CheckoutReviewOrderComponent;CheckoutReviewOrderComponent;CheckoutReviewOrder + + +###### MY-ACCOUNT ###### +## Wish List page (/my-account/wishlist) +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;WishListPage;Wish List Page;AccountPageTemplate;/my-account/wishlist + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(&componentRef) +;;BodyContentSlot-wishList;Body Content Slot for Wish List;true;WishListComponent + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;BodyContent-wishList;BodyContent;WishListPage;BodyContentSlot-wishList + +# Wish List rendering component +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;WishListComponent;WishListComponent;WishListComponent;WishListComponent + +## Cancel Order Page ## +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;CancelOrderPage;Cancel Order Page;AccountPageTemplate;/my-account/order/cancel + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(&componentRef) +;;BodyContentSlot-cancelOrder;Body Content Slot for Cancel Order;true;CancelOrderComponent + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;BodyContent-cancelOrder;BodyContent;CancelOrderPage;BodyContentSlot-cancelOrder + +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;CancelOrderComponent;Cancel Order Component;CancelOrderComponent;CancelOrderComponent + +## Return Order Page ## +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;ReturnOrderPage;Return Order Page;AccountPageTemplate;/my-account/order/return + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(&componentRef) +;;BodyContentSlot-returnOrder;Body Content Slot for Return Order;true;ReturnOrderComponent + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;BodyContent-returnOrder;BodyContent;ReturnOrderPage;BodyContentSlot-returnOrder + +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;ReturnOrderComponent;Return Order Component;ReturnOrderComponent;ReturnOrderComponent + +## Amend Order Content ## +INSERT_UPDATE CMSParagraphComponent;$contentCV[unique=true];uid[unique=true];name;content +;;CancelOrderConfirmationIntro;CancelOrderConfirmationIntro;"

The following items will be included in the cancellation request.

" +;;ReturnOrderConfirmationIntro;ReturnOrderConfirmationIntro;"

The following items will be included in the return request.

" +;;AmendOrderConfirmationOutro;AmendOrderConfirmationOutro;"

Please note that it may take a few moments for your order to reflect the request.

"; + +## Cancel Order Confirmation Page ## +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;ConfirmCancelOrderPage;Cancel Order Confirmation Page;AccountPageTemplate;/my-account/order/cancel/confirmation + +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;CancelOrderConfirmationComponent;Cancel Order Confirmation Component;CancelOrderConfirmationComponent;CancelOrderConfirmationComponent + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(uid,$contentCV) +;;BodyContentSlot-confirmCancelOrder;Body Content Slot for Cancel Order Confirmation;true;CancelOrderConfirmationIntro,CancelOrderConfirmationComponent,AmendOrderConfirmationOutro + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;BodyContent-confirmCancelOrder;BodyContent;ConfirmCancelOrderPage;BodyContentSlot-confirmCancelOrder + +## Return Order Confirmation Page ## +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;ConfirmReturnOrderPage;Return Order Confirmation Page;AccountPageTemplate;/my-account/order/return/confirmation + +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;ReturnOrderConfirmationComponent;Return Order Confirmation Component;ReturnOrderConfirmationComponent;ReturnOrderConfirmationComponent + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(uid,$contentCV) +;;BodyContentSlot-confirmReturnOrder;Body Content Slot for Return Order Confirmation;true;ReturnOrderConfirmationIntro,ReturnOrderConfirmationComponent,AmendOrderConfirmationOutro + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;BodyContent-confirmReturnOrder;BodyContent;ConfirmReturnOrderPage;BodyContentSlot-confirmReturnOrder + +## Return Request Details page ## +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;ReturnRequestDetailsPage;Return Request Details Page;AccountPageTemplate;/my-account/return-request + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(&componentRef) +;;BodyContentSlot-returnRequestDetails;Body Content Slot for Return Request Details;true;ReturnRequestOverviewComponent,ReturnRequestItemsComponent,ReturnRequestTotalsComponent + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;BodyContent-returnRequestDetails;BodyContent;ReturnRequestDetailsPage;BodyContentSlot-returnRequestDetails + +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;ReturnRequestOverviewComponent;Return Request Details Overview Component;ReturnRequestOverviewComponent;ReturnRequestOverviewComponent +;;ReturnRequestItemsComponent;Return Request Details Items Component;ReturnRequestItemsComponent;ReturnRequestItemsComponent +;;ReturnRequestTotalsComponent;Return Request Details Totals Component;ReturnRequestTotalsComponent;ReturnRequestTotalsComponent + +## OrderHistory Tab ## +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;OrderReturnRequestListComponent;Order Return Request List Component;OrderReturnRequestListComponent;OrderReturnRequestListComponent + +INSERT_UPDATE CMSTabParagraphContainer;$contentCV[unique=true];uid[unique=true];simpleCMSComponents(uid, $contentCV);&componentRef +;;AccountOrderHistoryTabContainer;AccountOrderHistoryComponent,OrderReturnRequestListComponent;AccountOrderHistoryTabContainer + +# Make AccountOrderDetailsActionsComponent invisible +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];visible +;;AccountOrderDetailsActionsComponent;true + +# Make the order history page contain tabs +UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid, $contentCV) +;;BodyContent-orders;AccountOrderHistoryTabContainer + +## customer Coupon ## +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;MyCouponsComponent;Customer Coupon List Component;MyCouponsComponent;MyCouponsComponent +;;CouponClaimComponent;Customer Coupon List Component;CouponClaimComponent;CouponClaimComponent + +INSERT_UPDATE ContentPage;uid[unique=true];masterTemplate(uid,$contentCV);label;name;title[lang=en];defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'];$contentCV[unique=true] +;coupons;AccountPageTemplate;/my-account/coupons;My Coupons Page;My Coupons;; +;couponClaim;AccountPageTemplate;/my-account/coupon/claim;My Coupon Claim Page;; + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(&componentRef) +;;BodyContent-My-Coupons;Body Content Slot for My Coupons;true;MyCouponsComponent; +;;BodyContent-My-Coupon-Claim;Body Content Slot for My Coupons Claim;true;CouponClaimComponent; + +INSERT_UPDATE ContentSlotForPage;uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true];$contentCV[unique=true] +;BodyContent-My-Coupons;BodyContent;coupons;BodyContent-My-Coupons; +;BodyContent-My-Coupon-Claim;BodyContent;couponClaim;BodyContent-My-Coupon-Claim; + + +###### Product Details ###### +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;cmsComponents(uid, $contentCV) +;;ProductSummarySlot;Summary for product details;ProductImagesComponent,ProductIntroComponent,ProductSummaryComponent,VariantSelector,AddToCart,AddToWishListComponent + +INSERT_UPDATE ContentSlotForTemplate;$contentCV[unique=true];uid[unique=true];position[unique=true];pageTemplate(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true];allowOverwrite +;;Summary-ProductDetails;Summary;ProductDetailsPageTemplate;ProductSummarySlot;true + +INSERT_UPDATE ContentSlotName;name[unique=true];template(uid,$contentCV)[unique=true];validComponentTypes(code);compTypeGroup(code) +;Summary;ProductDetailsPageTemplate;CMSFlexComponent,ProductVariantSelectorComponent,ProductAddToCartComponent;; + +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType +;;ProductImagesComponent;ProductImagesComponent;ProductImagesComponent +;;ProductIntroComponent;ProductIntroComponent;ProductIntroComponent +;;ProductSummaryComponent;ProductSummaryComponent;ProductSummaryComponent +;;AddToWishListComponent;AddToWishListComponent;AddToWishListComponent + + +###### Anonymous Consents ###### +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef;restrictions(uid,$contentCV) +;;AnonymousConsentManagementBannerComponent;Anonymous Consent Management Banner Component;AnonymousConsentManagementBannerComponent;AnonymousConsentManagementBannerComponent;anonymousUserRestriction +;;AnonymousConsentOpenDialogComponent;Anonymous Consent Open Dialog Component;AnonymousConsentOpenDialogComponent;AnonymousConsentOpenDialogComponent;anonymousUserRestriction + + +###### Footer ###### +# Footer notice +INSERT_UPDATE CMSParagraphComponent;$contentCV[unique=true];uid[unique=true];name;&componentRef; +;;NoticeTextParagraph;Notice Text Paragraph;NoticeTextParagraph; + +UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid, $contentCV) +;;FooterSlot;FooterNavigationComponent,AnonymousConsentOpenDialogComponent,NoticeTextParagraph,AnonymousConsentManagementBannerComponent \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/email-content.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/email-content.impex new file mode 100644 index 0000000..f763d9e --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/email-content.impex @@ -0,0 +1,91 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# The files in this addon are licensed under the Apache Software License, v. 2 +# except as noted otherwise in the LICENSE file. +# ----------------------------------------------------------------------- +# +# Import the CMS content for the Apparel site emails +# +$contentCatalog=apparel-uk-spaContentCatalog +$contentCV=catalogVersion(CatalogVersion.catalog(Catalog.id[default=$contentCatalog]),CatalogVersion.version[default=Staged])[default=$contentCatalog:Staged] +$lang=en +$wideContent=CMSImageComponent,BannerComponent + +UPDATE GenericItem[processor=de.hybris.platform.commerceservices.impex.impl.ConfigPropertyImportProcessor];pk[unique=true] +$emailResource=$config-emailResourceValue + +###### CMS components velocity templates ###### +INSERT_UPDATE RendererTemplate;code[unique=true];contextClass;rendererType(code)[default='velocity'] +;apparel-uk-spa-CMSImageComponent-template;java.util.Map +;apparel-uk-spa-BannerComponent-template;java.util.Map +;apparel-uk-spa-SimpleBannerComponent-template;java.util.Map +;apparel-uk-spa-CMSLinkComponent-template;java.util.Map +;apparel-uk-spa-CMSParagraphComponent-template;java.util.Map + + +###### CMS components and Email velocity templates ###### +UPDATE RendererTemplate;code[unique=true];description[lang=$lang];templateScript[lang=$lang,translator=de.hybris.platform.commerceservices.impex.impl.FileLoaderValueTranslator] +;apparel-uk-spa-BannerComponent-template;"CMSBannerComponent Template";$emailResource/email-bannerComponentTemplate.vm +;apparel-uk-spa-CMSImageComponent-template;"CMSImageComponent Template";$emailResource/email-cmsImageComponentTemplate.vm +;apparel-uk-spa-CMSLinkComponent-template;"CMSLinkComponent Template";$emailResource/email-cmsLinkComponentTemplate.vm +;apparel-uk-spa-CMSParagraphComponent-template;"CMSParagraphComponent Template";$emailResource/email-cmsParagraphComponentTemplate.vm +;apparel-uk-spa-SimpleBannerComponent-template;"CMSSimpleBannerComponent Template";$emailResource/email-bannerComponentTemplate.vm + + +###### Email CMS data for stock notification ###### +$emailPackageName=de.hybris.platform.stocknotificationfacades.process.email.context + +# Email page Template +INSERT_UPDATE EmailPageTemplate;$contentCV[unique=true];uid[unique=true];name;active;frontendTemplateName;subject(code);htmlTemplate(code);restrictedPageTypes(code) +;;ProductBackInStockNotificationEmailTemplate;Product Back In Stock Email Template;true;productBackInStockNotificationEmailTemplate;apparel-uk_Email_Product_Back_In_Stock_Subject;apparel-uk_Email_Product_Back_In_Stock_Body;EmailPage + +INSERT_UPDATE ContentSlotName;name[unique=true];template(uid,$contentCV)[unique=true][default='ProductBackInStockNotificationEmailTemplate'];validComponentTypes(code) +;SiteLogo;;;$wideContent; +;TopContent;;$wideContent; +;BottomContent;;$wideContent; + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(uid,$contentCV) +;;ProductBackInStockNotificationEmailTopSlot;Default ProductBackInStockNotification Email Top Slot;true;EmailBannerSaleNowOnImage + +# Bind Content Slots to Email Page Templates +INSERT_UPDATE ContentSlotForTemplate;$contentCV[unique=true];uid[unique=true];position[unique=true];pageTemplate(uid,$contentCV)[unique=true][default='ProductBackInStockNotificationEmailTemplate'];contentSlot(uid,$contentCV)[unique=true];allowOverwrite +;;SiteLogo-ProductBackInStockNotificationEmail;SiteLogo;;EmailSiteLogoSlot;true +;;TopContent-ProductBackInStockNotificationEmail;TopContent;;ProductBackInStockNotificationEmailTopSlot;true +;;BottomContent-ProductBackInStockNotificationEmail;BottomContent;;EmailBottomSlot;true + +# Email Pages +INSERT_UPDATE EmailPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);defaultPage;approvalStatus(code)[default='approved'];previewImage(code, $contentCV)[default='EmailPageModel_preview'] +;;ProductBackInStockNotificationEmail;Product Back In Stock Notification Email;ProductBackInStockNotificationEmailTemplate;true + +# Email velocity templates +INSERT_UPDATE RendererTemplate;code[unique=true];contextClass;rendererType(code)[default='velocity'] +;apparel-uk_Email_Product_Back_In_Stock_Body;$emailPackageName.BackInStockNotificationEmailContext +;apparel-uk_Email_Product_Back_In_Stock_Subject;$emailPackageName.BackInStockNotificationEmailContext + + +###### Email CMS data for customer coupon ###### +$emailPackageName-mycoupons=de.hybris.platform.customercouponfacades.process.email.context + +# Email page Template +INSERT_UPDATE EmailPageTemplate;$contentCV[unique=true];uid[unique=true];name;active;frontendTemplateName;subject(code);htmlTemplate(code);restrictedPageTypes(code) +;;CustomerCouponEmailTemplate;Customer Coupon Alert Template;true;customerCounponEmail;apparel-uk_Email_Customer_Customer_Coupon_Subject;apparel-uk_Email_Customer_Customer_Coupon_Body;EmailPage + +INSERT_UPDATE ContentSlotName;name[unique=true];template(uid,$contentCV)[unique=true][default='CustomerCouponEmailTemplate'];validComponentTypes(code) +;SiteLogo;;logo +;TopContent;;$wideContent +;BottomContent;;$wideContent + +# Bind Content Slots to Email Page Templates +INSERT_UPDATE ContentSlotForTemplate;$contentCV[unique=true];uid[unique=true];position[unique=true];pageTemplate(uid,$contentCV)[unique=true][default='CustomerCouponEmailTemplate'];contentSlot(uid,$contentCV)[unique=true];allowOverwrite +;;SiteLogo-CustomerCouponEmailTemplate;SiteLogo;;EmailSiteLogoSlot;true + +# Email Pages +INSERT_UPDATE EmailPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);defaultPage;approvalStatus(code)[default='approved'] +;;CustomerCouponEmail;Customer Coupon Email;CustomerCouponEmailTemplate;true; + +# Email velocity templates +INSERT_UPDATE RendererTemplate;code[unique=true];contextClass;rendererType(code)[default='velocity'] +;apparel-uk_Email_Customer_Customer_Coupon_Subject;$emailPackageName-mycoupons.CouponNotificationEmailContext +;apparel-uk_Email_Customer_Customer_Coupon_Body;$emailPackageName-mycoupons.CouponNotificationEmailContext \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/images/Homepage.png b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/images/Homepage.png new file mode 100644 index 0000000000000000000000000000000000000000..a8fee02bbfdbc1d275e412efe73893d83dd774ea GIT binary patch literal 1084285 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%0Atd=3wS>r8=k4mj-+d~vM*`XYWq}+#E}@eL+E#h zwa}Z*VHpln7LdaO@^V7u#+0Abea3e>xCTH~#ZLw*ko+))a#km_l-(om1d-u9p5XYU z-SUS;V%qi>+gFM>u26Nx!X&#O)$+5IBDlHiNV$No_9Xu_F&`{RFbr!oQMAXS1 ztIzF8`}@WgJ^A!TnytA{C8ajCx6juD9+tt!?x*N9ACfu=#q&vRe4e2rI9J1P(&{9# zT#Hnq*e-%pm$iyrw2wFInoeN?ig^Vm;=M|m@oK8V*UXs~r1xAUS5}gzzDS`iWHimF z|)b!?)Jqb~A-KRJD{doZf0dnrol+2;j-^7>}0 zj|M)|<+(&mpqOU-5uPLI->%;G*2QC)higOdYdbnYZ8j`;luv-kBRZHRH&T98XNwH3 zMD~U8t_h22oeW(wJGdL12QABBuZ4Po%pevor|4W>oVPoz`hCCWIH_a~ zUv+GK; zVM40d;DE_GL`;~6g5)L{142MUv$K>PUY7*Lj#y3JC>5kNvNaoXS=lNX4>_8#^5-KZ z$$$#0ZhltcN+jbyKPKd<(7#xJe-$w|a_Dy<&EGfIyjz|ld|>=Y)^*~vkNo_t0@~bZ z_U54MxQje_4Qsy%o$NZeceJQ1JZ>V~kDt+0Rx(9KQjDQDV^zwXCt3tBWjy!FqlqO9TaA|NtUyD$Zfdb3nF<#Z$lyg0Jg>HTa~++7Y=~&u_KA=FfI%FfIDeT*rgy(DF6snF2@`D+$$(?p?G@sobjk3= zzPuE2Q4I+Z za?Zp5nl9~i5K>gCYJTmGRcQ&KP1j(ti1-N#ozXK){^q(II9_Df`Z-iFBZe1wP`MIU=ojaoWi}{zq4^t+SeSkxcQleyF!NOOIpS)Y+a? z@o0AW0R`6wU8c-{w|xrp9v}*j_@ao*lvcg-PX6!M?c}^ExnAKSQ)K^zBZH2W{YC?RGG8Tr|dN?Cn5bXqV z!TT5b`o*9nuQ?P_hh>TO7I1ZEWPppvK!5JyP?cVatKFW}@>J_M)l+FY53_gb*HAIOi3r%g5EH5lddPdAcx;V#?SAiGF zb;0GDt4a$er_thm*4ck?qZ3EdtT$v07x7w}@H~Y9cGNNAgLCL}E5&LcbMIXU@=n*4 zg}MmR>q6bHy${$9#lwgOtt_wQT02GpFBb&Q`;*L^ z0xeh}1`KDDN9OzC5q7hZIny!P@b?*m|3;F0!@S3s&P3Ivew*$8H20(EKQV!SAfEr7{X>=iZ_t5O z?wukm#lzfeaMaSuD`S`fc@aiI#vF)4RssO%NRi3VVa>6rP#}l==5jEc4Hmlp**Mor z%-7DH+J|u*su531c(>$qofO-xOEQquM?9ZVaH3<{{jyY#{f1BU5XOc9;Y1wLw#-!q z`@{#x{NnZTTdo?zOGt!T(%e;YzEK>{dF+b}F3JJYD-UNO;mBubXWz$x6php};wu>^ z_an3A;IMFdNp)j>axHzLtqXBK6`{Qlr+ZW>v-M93-y2C{N>@jLL2C ziI<-4r-AZ~HDcA{vJA0p-3~+BtQm!ST*-Rq+!Wr3N0z`6?wglk3!Ba~1o+J$ltVcey`nr{b`4iTI;q z7w6jbt7=rUXH0I1F;XkSlPEU!emlr(B0Q>&a~?(c7i^ID@xXf0Qzah`_U!U;T>Ae{D@r&nNOQUESwY8*i&H8n|E#N$%&g zG}{=GBz<1G%Z(ktFTUt0;Nw^TA%-cp__d?=^00Q7_g%%_;FyG*qcgkBsZMTj$G<9n zt=Dz9x-58T-*1UeZ?2&CA8@C7m{z)f2k(Pkaa>JG;}4qxx_v70fdQj~?k-NwBC0Lo zEqAO(K%jqC`#Y0Lr4dvMILi29qH%zBXHm+{LvZ9eXW9o@ludV@mYtZa-t&LB-UoU~ z^tY3pab6gQr%wS$ZZGE$M#y!v?}%={oi;Ac2vZ_>==KT)-s`Fsbcc|kQ{|vb$tl(y zcn${R6SU6Ja2C0DKecXtQq5!F1Qw<5aRFY)IPC4F+9)z)Pl_-;CRji2A)#fMQU1ne zCJ;k89qW-t+P%qLeaN;8TfTqcW|Rpl&Hh#peR#C9iQTA{-bj;2&aL>{HW>V_jRf?M zqNe8%q7Tw+0WSli%wK;;6?>Ssq@xL11G-TnKCBzwDur=+lYrz`^{D&&Mn+JB&a*}f*|9r^NQ1<-wsg0f9!ax?Yf*=hU{41bAW zt(Yv3y0-V7n1rODp9778-J^fUO@xAQzCo^^tmnG(Ng{A_Zxg$TqnO0ZX6H^AE@Gn1 zOVcwAx4MwCZPeS*HIH9aUG*!y(xSWT@TVR-_()=@wD0H0rB@sUy=Om1`YX8xgOfam zTzX$(52H$iX4_EhofTyzjPTE|(7yolukOavS@b#szHzyUtB^;Il96a;R0yD0JLt*e z`GRrCWkWJ({xH(pb`;)X_?myr%PPC_#Lm2`vxbhjUR|GCYU4Vcq-7DK2?k@=oj(P0 zyf)-TdDIzRY2k5?Mxxo_+9l6XkTbDat4yp6eqmN+8ETMuk%eeR-9J?xe1yP=;Y8i7 zq|kI`c$qv;C#I2^+iMX}Y$$dO6vSW8U~)#R2t_XiKHBogd&Z&Z%Po)?3y8ewj09wnW= zlKMHfB?|%oopC`9+6bjXOZ83Vshr~=Ioi;xj|f{|O-h2l<4|9a2M7&dzo$LRZ?PvK ziFB*x37qi}(`h>H;u|bIh679O3*bdW` zD+l$_UF|U4+w_&Tj476EeBgx*>GjDJo{@sC7h`|Eo|^D85{*PE&s(e)b(ibfmIirH z<%uqPTv_w9vddg`?)X0`H;3X^h2p1QU#8+)rYJ270$RRB@h8YrHavZn|3Ja4DGiAD z(vc3BMYzPbQB6lhCEgaD2n!8?4eiRozNk`!i$)xswy^|KZVlS6cwcNI74vYjCslnl9JfMOh7#bRE0eU(MZ$!%NK>lplg38Kd_+bZgoGp7eoU8VU`ouJz>2A z1qnREw{Y4`;ZUY-1(LRuJ^>HlY!BlusJFks+QF}1BZ}U@>0`*~YzDoV~VolKuAIR8j9DB9~`PIc%k_G{gC_ys! zq|o4jy+D+N^?E{ED_&bpq#M)SeaTlVe*`;$>FXK7`Du|_K=4ze)Os8=?(m0?r@?HN z!cXKtxSe4AE>|UT840Y}sKw3()RDrR8Q@6iR}vJPS^2*826vD7h`X`z#i8-7<1PC; z0K9srS z0*feizMf#X?YuB!BC^@YNSS$e?0}?W$Ixn$xM5|F${u=MaUF%8l##|!=NK;@N8@Ct_eI#Z(CM@k5e+XbdePI;=8eOIwbig~4A~b0 z-+6pu3{dSBJ~b#oU`8+mK(ESWyf~6mP6dHEs!4oPziYVBS1SlI1N71X0Pim^p8A75 z0SB6G1H9;=`T%HitOCsVJg{UiHZHrZE1b8nd>EWw+S3A&Q~B zRj-Yr?`k8hMzJdw-J!}wVtzf6VW^+feOPCQKMHjlF!B4j&%#^c%Mx-7$ncLL@>%Z3 zO0wAR{nNJSSdenMhoMWD;(8LD>T9nK>3wd$_|QSK_Dw_x{5n(KzPiFe zzXXHaSQy%E4JT0KrmR&TmXl8Vb!jPByME^T7Qm3kmYl?CCB2@XR^h^LbEVOiZ}Y5o zTQ6r-VbfLAe{}8BtjT;zfd@0}Vk5)r=Gdf<=Z3p~u%}eBZP`-$^$)e)>tK)Vr?|@k zXZmo|WcT%9yPNQZJNsBT#tp~wHHu6Tn_Th1_Je2c^A9%qeqm<)^wyutc9*^(+d-4~ zrhQlVOpm@Bhc>JFbpzEcDDVTA3OjUqlfKi=&hbM=nT|~PS0{0E8JLfN%Jp8hB!ffV z)A{a(`EFo)s<0Rs!+D^xis~6v%wugb*HVm zvs#!WRpe6;XQ#)WyImsz`RiU;jqye(TN?pm_E@Sv550VlWw)1QZH=fXU_=IbWXw_Y zkKk92YWSuD?Efk23TBS_MmgqJ=vae{LGBXs#+o4+y8tFT^S0#T$?8Ecex0tK4QBG@ z7e|t8E;GMM+qbp(Y|QVmUh+cv<(g`=GE^g}&BkHSNfh`#J=8?uT;^yB zr+2Q>d@z`EpIam;$uZk^{XO}S*1@PzcVFa{lZ736fbC@95r??jOjaRdI|X?w>K~!% z&G#l$L-fi_@)G*N4Lt0x6=Oe*@LeQR;BJY@-ASb{L{AH=p3w2@jBllifSD;7H3+H?Ka}R|MM?zm_2$M@82l;NFGF~1`#>z!zMUD^x#)7_Lnd)(q{Bm z?%GuFRKWg5laXDN9a;-b(%_eKMXA>)2fM?PM==lDmWRy*wqdST2OqdutMd_kPwJ=eEP5tqz)RH_j2fO6tj^Wd{~Sauo6rs#D=bDJq!xJ!CBv zj&`5#Emjy9}{ODpQ-OcwIQWD$*Q`6dnbr^7BbK394*VdgWk0pvmiQ#Fc-7qqij8=(^cP0ySz42XQNI#3bC8FEo%m8yL4x zGuiPx`vazEV{S(a$QayIwJ&_u8p50F=|8Bq+gXhi>!l4`&tw!c@Ki@5UmL?OuI%3{ z$yXc}wUc44DvcVy>FV4%ytnBlM-Rh`39x0Z2GR$=EMWUei;Y4`a4232<%r#G%6R9y zPC8WbjwEm(ioN4-xaCYcp^{18qiixkYMCfh)%Fro0OiI2C)vIL|ItsJqj>6YY)v25 zpAu2&qizRlF5+M^0!8SyjM5d6Lo%3XFg-{6&*r5@`WD~w((pyIcnxg=TBj4)SG1R^ zY2J9C+8(qb?UY$iIBEq>(dC!gE*gAfg*Qk71_l%qhH@oH*nNJ*36tJ-&I!Xo$CmPHhNX+;VApCS zr?fD#yQ$7i9CK%A;k3~+%Czvf`Sx&UDH>!KbotBv7UxG6Px7LDe%MfEmY7s{PiLne z@C*0Duf3h-D9eVHO&d}jeDV5o!#^IQyT-MsASx*h1!}U5rh6oFIqkSA8olRu3LV*! z%@MWA>++6PVU7+v5@HhdC=Qx})AB-}eYeKtehHiNajQ4&1xZScxP!QyZRDdiD%IEM zxUjv4vK&gI$GR(H5?N5Yye3LX$=kGF9GAZEZF@^3f0GL+6kl#SEcO4+F{JY?i{_>D zw(e``>tf(0X4p65$A`ui&HC9bvVcz{r$6q#jka-pD+=unfWJ5k4L;kHE`@;|?HR9b zm;xpZx`kz3p&jB~e0mx{svr1nT|P>*_ygg*M}#32n3$;A_IDYYTU%sHHS>sH;siP`gODQ< zGX4|MKVm3Zbn-z`Y{nvm{EBx}X1*mzhggfo_6=t#>b z>Gc7lF06gdp1^(%x}_R==N9erhZ08qJm{`Vq;ve5&*@`|0^O8&;RLV;(a+oy2Vne9 z*o+Ox!1z>p<2Ma*>7>C288&SfA{pjDy7Ms4?6pigC<#wCrD*Ncv#}DJ^&Ln_nsJZD z2gti8+qCY;wXC{)!a++gRK4NltPsOD!^i}t_V{Qclktt z^@t{p!2GrT2LFW(>Wa46SIlbA)Ag?gN2yJR#YOUW`?AfVWxQ9XjOOaS(`_I zl-@-CR`y3kJSSXE%#eofDE~}rQ57C8>TIM+kn_k1C~;&X^Vp+F0sZ;qm5q1S@(~YG zr7A7e^k_K#8w=2}kqH|bfE|HU(wsnH!;S9cKJD8rowRX1e{o*S$Y?}-nHM*a()xOU z*2;KnR?t*6NL>`Y-W1?Jj3sxujgBj-IYi@tax@w?$6K1hWp=Rx`9gdg25h)=9Z@99 zQ(&EK+|^YKxwRyoLI+4YyLDCDSwkym|K2|o2Wb72F9i~8cjpCmJ_UZ9S@K>WZ>Ep< zxTfHsvanX%&_qdAVm{CGdS=?*3O7{v=8rHOUyu7@XJax_LP=|**H8zYRSh>mNj}N59K0POw3{sbDA@7Nz6d5x?<6!}JkQ{ae9a*9NqQ~6O zO=*a<5ew7o45Uo%pME>dRj_oXs2a+!^IK!@5cd;bie#9Sg8g}SuvUuh-U=G& zD;cS)n`>M~ZUhfLjJsg0hwJbTxq~+bX?qQ4G@Vi&W}r195m_>}Gd2Qse7{5}rW{*U zBXsR1DSIzA{2A|j@O>=@YrUHtP~gaO*1#l?q1tq`tXdvUrMpy8is5_11f$FsCDoVM z=B%oxqai)CFDw57d6Mm6c=8Y9P?O+21j{bMlF(H94w_DMg=_K3WP z1-Lulia2O_FEpY=cqT4#G)!nGD`tTmHkrxhVX~BiI0~YJ;kT*FcBC8NIx}hpI{V)& z(*Y*MAXt;0B=u+`K5w*hLAZMCn5Mh6O-UN`83ru^7Mib~Yzgv%xvc7(&%D?Xtg&FQ zE1zBz%rQp@JiFq`p2#qj)F|qu@bfc(52%lUq|9j&am?vnwvf9)_&SAiswPeU@R4Fi zmIt|yHB0EH33;hfd}|96AFTk!2w8q3H9y_HAE|gFUHvZ2s|xnN0)wvS?T;;lsQ&2a zZ|R5lSkPY(2?{C^(dU0>-)QoGPlqt0Z#aLBY`$i+KAJ}#HKBKVFI|&+85_Axu4MX< zf1v*$Y@cduf`cF8_7j7N!F?>0=n8X3aZfoUT+ScZ-5cm^>}*V>;P_b(+TY5ixTFdA z(6T~M5M;SJ4PfN~Uxp%o9x~GQ7 zjl7k=q0upf}`rKtF4 zyTXw?>*@P7cxKsCQY z`NbZhLoOuo^oIfdBmfdfe6;&PJoQ`h@STMaNC+eV07?1C z?Ir<`^4=lD`R1j!F8|`+!(=cGv#k-EltxrgjYg-I8W&$UwR-FXacYxuhFQvBY`{Dp#KCTIeShoX%dfupo!1zHLIMuC z1X&VJFTMAHZ##>NU8I96*FMgoqTOy|j5jtmq?C8=+}XUdec{EIJkQ(Q+{75Wu4|em zl1SGzgg}-jS(c1O16|W9Zlx#+&P5!?x~4mha} z-hB7+*6tv!+W6SoT#%-doV8YtzkZ_PBUIHj-*Il;-MMt<&I>PGoUhbf%g}V|*B{>c zxBuZ6|Mcq*HcqdhtsS2YZ9tcL!HD zdvo2TH@|z{;$eR<_~_1bx!Zs|i<8){)OY*i?Ja)(!tylQOET8$rK9O|bz@c2bT%GT z2(P%>$@3?>Ys*dXZ{J+&wi;D`I*o!tZtV?S z+ig~zsK|E)la1x}*~Q92MYd|KNus^=!M5LQo>_HSyz?&~jEQ7_@#brjVgL5c8wlZX z1U84U(2S+|TFr!IPE!h7RjpO^YMzNWpGF}eI+6@Pke0kRO7}-0Hl3WxR0^9TO*7xW zd5Zx!?=>hWs}6c~qr2Mn(z3WUO>PVWLqG`#6@nIpV<4MAogl~cxP+51<`5T@_lM)Q z->TP)YEApgzxk_I-}o!d>;h~8_%N=x7iP$B(vv?a<=3ZPflqFm5P&^eWk@LxiQ=UE z;_F>;gL{P5*1mJl|slvuMH`sl#+8Uga8l%2pDIS zbIK^=TuMm+1X9e70!B!~kRU=Jo^3vY5J3O{c=zgU)xi8Zz<>Yuf3J?hmsGe#<7WlI zk0lg7vGkbLG~kE{g`*aX&l#7)hyVR@nmnH}p#Z;t4S|oo{uJ$*XV$onzt`+5h!A|j zb2Y&}ee>g!59Sd=hodGGKEoM=ho-fj{@brv^IRnqKKq6Fc^@KpwC~ABqCNPvyRiPq zK0Hj0prdWJJnGIt_*lL0Nc}LY)*u8BVI6@y7^K073Yk!_+aFJ-qm7lh^QYIB7w2uq zVF2WL!f2VMDWzqW<(%_8F9w65ZP||F+qU1Rx4NAr-NbkI4*u_d_fJ3l*;^QaR=riR zYZ)tDx9V7)?RpSMM)NQjZr-?B_58J^1;fCj$uP}R*Yk@rbAey$?l!4 z@g%ynGx^oKSFdl6qC!#$->r3wu3&ncDrUEKW*98zPoE% zhGXlLF%E!XV4~|`Qud}9L-vVq;W!rPzd5H{! ziDBBK(Kwt=0vfY2kCR}Mjw#D(o^@iW-F6L@hmxRFz`ao*1T0I=CE#38S~|8lKi9D> zlTw=H1?2)jBq72?YgDTcQr9!S^WE=t7d9la0K^X}`G;X4P_@A4Rhml)#M9yT)0M~< zf5hdH_uwecROAzz4G)ba?$=rn-hV1}=)ON5;yxNo-LE}31OQ42C6s~-&ZJ@Zk90DzQ|NioYW2qA=&5Te=EA_y@;7(omXMhM=|CLjn9 zg8#$+_&=#j{p&#WP*9XFF{$*&Ti{ZHr*h|q*E@%GQTW>KplTI=0U13-`3j@-PcDDp zqh*!6S2_p|ZNIg&dLkO$9fVQIOHCJZEoXgozTT)H4MHpsWKyy$qj_FfmRXi`G70lM z!$i{!%P?(ChZ?aU#92Nlnb_Z*#Hm>9o;-f`g27;GV7<(j5 z8%~p-|K@j==lts*e3vEBXgnH?!tp30quwMDYd++5ZS6g+jSu?qW z83n1(_ePUR6wvv+Qftlm{`}lx$;@B8e``1lHkQA8;e|8lq&Kx86N2WYiEZ6TeOIgd z-ldPPLmFNS(%VIiq0w(T%&=%Cej@i)dn7Zc@-R&ZC>8KvVm6%sPW z9k;SD*R)NdWl5`A*L4DJWkQJ48}0K8otkIg*uJwp8X0a?N+OD!QkE6j>(>SV5I_PT z#q2ed0!RU*kb(=rDP?8Jijs0Jq@4AdfKT_IeIlCx01#4eAUWq;2rh(p&<7Ym1R#Qt zU^Gh~JjfR>wqE!QPt=dAji3uubX$mfYKv0HBQkJyQXjc4snx;Vzaw!nj zC>025rfG8lVF?kCYm3X>`S~*^&k?9GBy`Pm8~^|koF+*y=xu8dE-kNO1bT!1?tU*T zctJ&xj?SMy&pF@O+3`HDC<@bZX8mual(ucx>-9#X!D-Gol|Tr=qc9O1(30hO5hVvi zGl_1cd3n$uFi})I+jp%&Z?buJe}5bi20hI>vAPgvWs;?J-J;dH@3mgOc?!eAY*s-2Su97GAr}cHjQNm264$s?fA-k)p=Eb z^4Ma7vbp*Bg_}2TUJtHgtQ|W>0FVd>mM5J?C5|SD=%!^ukqcyIVY#zExVtmdEbqNu zm;(9c$!;x4|MJz-Ud8)g|M!14*YpUYnt{El7e)zVB9fCqe?qwR!`Hrd>&~s+!L&VE zT4@;wYn+u)5C|z7^?Ie&+TTrky=Ftj1rtC(P%s!IMVzFzW#t7expZvT zfzZkI^_6O6cV~OG={GFcZaBH@9)w|5GRLbHG^8+Rc}ckhQsyNMlSD%{gizBoDu4h$ z2vL?y0;n0F)oIu3b5a@-z}bCt?^(kArk83keU72i6Wu*jbM&wh{(cevX!Asfd!@e= zKyn}ikP>hq#VnP;1ZSKvE&=5{FUpcJE~Nkn0w@oQP9LNa9=zs)b1AqKT*~`H3IT)& z132rOfY2dVxVLrlx-N_JCs(j2cD8%9T1yCF zn6_!?MILAIq|Cy0YmsPH7{vu;0&B$dfByDcZ+`cbrfC@C@p!zowY9RcQg5_swHkyl zP19LI0RVsykdl=pJ=pI9fbzVgCGYn}AAEF4v%FfPla>7T*4;@cmb%Sw+V2fU`{OKO z*4fp$bIWkCTh|OMdFdO+8@?}0JI?~g1cIj!qJ@sX&_4CoZ@jR(w}%PA7|%89MAx+i z{*V9R|M|tQ-d-%?rPLXYUx;uXJ#ii4$ z|NX&a8bu>rC#G#OF5@7AB)_wD*EAZHid8JNe)ZdHA6z+bNlQ1hG>-BttyWyevEn>; zU0c`nFd9pWSCl8zcZjg@;)$h>Z|&{v?hYn{phOt2EYC|Q8XB>6 z5|tumMb&9EYu0o!6q(l0dSTF&V-PPM*hRvZWr z)b-=b6@wrIM3Q8CgHaq#7!jRj&9<$QiQyy|1u>+WaH?{|%-~|U*Hw;V4g2r)(I7=PF(UGocmSu^eEDDzAWt`@gq4`8xUS4+Vi$G{X zln|k3#SF^lSa3aj{;h(RXCxG!y!@oNml=>82q7hxTmT`2;6iZ07-N)|1?RjhX_n_D z<3hk^O@sABDnZJ7{T!r}T!`5u5VOG;2;5I1AOxYr5F#KELKuNrLP4EAl~7QWZ)rB+ zxkH3QrYeL$JT>eMeU&?$hk{xT=@SzQPfklIC6JQMiZ3aI6cR`YMG%g* z%Xq94(x^5Zv%1(>(lvoJ4ImwB(sg_wc^rpf7@4M-7X@cP3h27NVS9O=U<3())3Cq4 zx06o$u8v-L@npAd4EAqjC9hRlmgx|TrQp-?Fban{k%SNi2m>&sOknMu4?mcuqF%3a z&KYA6Len%`tyZhmB!ukk?WJitH#b+QRI)7V4~C{`#c>)0Q%%#>*Ef!BoRFLj$LYsc zZ|)Bg0ri9axXkGC#gqDi-yhUJzS+BUCzRMsfd28#%~so6>NNbC$BN>&@7_G<9dx^M z8|$lg&o)lY{Wl+e_)(GPwOY-!ohS-QiIDI7!%u&i z=i%waMt!~-bA)VnKkStnHwL4t)d&4kD{A$%PE!QML7>knX#GOu(65_R`ISg3cw@+-$ z{o_Br_1oWn?9?iIS=bni))p2m9S;Ww^=3`iOv|z3a6B3&Ud@qZ^x?agCpj#+c71Ep zC1I;s*ELwLRGOVOhhQ?vI8W!gtt=y~AXtj?C+5;H|IN+*=Kd%R(@C7oFV>r;OeP0G zl(w*InmkXg-Q3#?_6h(N8?{cS!J=WDh#(9A z!V*FW00k%$NcS75%!g411T3XS(t+vOhM@_<+cg(}IY$?Zi}RRR+k1nX+j~h-N{QlF zq)jK#s!bUdQ#n2@5(reW-8P$z^C4VA3O z^EAmB7Yu_&vopW62ql(K2Y^bzfyAoss`8b_BKLE_k3}XN2mpWpQcA&qkV0_41?OCF z#yRJdF~+jI$cv&VN-nsNv!M&}+1Y0K@cku_Qu4<qe-(ephpPrx;9-55!+N6Z!BmaNS`FEeZ2jR2stoy$x z?ybim7!X1V4uyn30?ueMF4Nf1E!%VQEY~egG(9Tc~b$@MRtzK`JG!Me5Vf%j7rKJEs2MUpnXVfw z9M$U8KY!!JIF2>l@~d?SSyHAKzI*!2iFOi(?V2eB=fnjXzjEyl{KmBxUwFA*?W9E} z^1!i7({h(OEoZq!WO3@$$^Y%&|73Uj_SuWC%-3r$&o#?P^AKXY$jj+;lIMA);_HZI zS-N)+0*RLvn(eybaMBxsI7*zVo5sO-9E#<+KYQWW#(($Y|LZ^g=J)Siy0TrhJ+0dr zwH>|fo7GB%(-a}Y_goH)N)-c8m~Q3L)qTrj02U(2q9nI14FN^86j}U8hi4o;bG6n4t|DP@P3yuaK8uw@{6x9;5To6{%0O> z_zAHBe6qFt^lWGHVdGiek39}Q&rd&D6^At#j*?J-pZy>_?Ntz2SXf)gFr(OudXm@X`;ddmKB~7zDm55kQiwR8gaWK5AVLTd+ zTea#N-#Lb%$tW{)du3%UNkYy=$%;J7Y|E+oH7G%mCTTL=+U?i;d}VQQuG8)|nyzgH zqtVVm@57th5Q-nJ&3lCSx*Vpo;@31}}=Co0Mtl3co12?yoTXvn>Vm=|&B_lxyySYd<+Tl9u&6%}fDJ~YG^Z=8$D54?qnWMa zH!mEUPB@~Ry#N3p07*naR07J8=6FD$itp1xUb=Moz29G6T#Q}UxOwa9G^SCQpV(Ns zcy7fadEH<9uYUYy(?w^`ojJC;lud`0t!I)(VHgA<=OT(?)3j}^5E5R#GuYajoL6{3&(}hH7lI8&4=ubyMu{75Pvc!-hSV4fVcI`Ny zkE7VqNM6#bJLBC!BB)$xRt!^{MhO9IeX(;8PIm`UkkS{H=92y0-M(}i^{_xCg_htp zhebiNVbo{>+qPHdJLB;(nOiKVhHY`oGjy`=O>agt3v$~6cPuCFu9;Mm=-?&F3Pvp+j<)?h% zcdr!p8{6{UGkN8Sa9%DjN%rTm#rIVIrK^Z~_6-8DQxo#SaF$9qWJc@!S zj*5bI8?BA?_4!WIHZ%f&6!c&^e)sy;mCZin#rMudwT)*&Egy+l$?~GbffCHP^QdsA)oSY!E|el+v}OrHbQz^wFhT*RB#>8^=+} z@i>U?{`&2VXQz%Y9rUlaJM%yI!S^A;5DLq441+*njI;4{5=(^hToffh*xDWR#$m2m z-tD`6gA}KaEl7Yg!xR#5iMRy&2ZJk3BZlnk%EFJndkjhWfBf{VE0_1ru2m4FQ4knd zCS|#`-}8(KHkY7IwztNcH+B}gwWWoQYuo+7(6Al9-W(40dgCC=nQ0gZL7ixvGe#++ zE`qXAv5zg)Ov`H593t~!kR?S~a7ZCx0{3DnXn`~`iIO0Uu&(>InU(w?;7dyu6qALP zd1|$;NtR6WJk6spkpj?~r$b=qBu|oxXKgGk0s!+kw5+vSt95&SisA$SVQ4yr$TZ!O z#Yqundp+B6YPDLm(GJ59X6anb>rEmWCDSA?n8pc0fCYJx6s%Qcj$s~OTnzF)=Ykbw z8m6q|w&PMv!ys^~bp#-Q0BNM43?bNQ&uQ2IKmy2x5E!YLT=@z-nEUg7PwH8R1umrk zLINoz6yjc&1P%mej7!NmXS6J6Q7}r2f~G}24Wlqh%92tpIAc;g9G&~bBx3g$c(}J< zNYKw7tDGnM^Fpa$GMA<2<99Zgtvqz>7&RP1D$~_^nn$2$rYe z)vK5H_I6L7^-rBxweqkMC~;kgu`G%*%W{mgAAJAyX1z*T z$yr(CNw2qeb8kPEnq6&w@VmF)|M2n)XVwIg>-9N|SSd@tUY(ooz;WKGc{)ff+wqSr z^aq2@ySp4=$1^d;Jfnn=dd&@jFpj4c&$B!`%gbXMOINSo==TolO{dkU)#~+^&c9SL z^xL=I{ZBvr>FwJ$UVZt(e7kD9M#*{7&*vI$RwjgK^`?38<+Z&%3jpZ(bqTRV#+9qr zclQoFx4u{fqj9ffd^no4TAiiEg`5c>Bm~5;-2MGN6F`r0zyaZGZNA}ETSXQ|gF9P@ z3GDC^=(z+C6WyAQhrhVI`Qlo;Y2kU_dGqDfT(GM1{(t*-|GH*^LBHpEPFR!-0?S2~ ztxcnBYinoo&bE$3xY9NZT>#V@g$x;`#1aw+xe$UuZmKN;g<&}T_^?P>*5kQa@QLEmVq&a|?=vtaHj98JUj7!%>4Lx=}w^>1gNl{8m zH!79ta1@Ti$g)Yj=ERUr$Nh$Drk)iB;d}4@;n?cx#ag3exd0p^GM$7VPdR6CR-|ca zL@^c8Fbt&WMp2TIcRbf`*Y@^y`e7C$NJR+{)-@CGaK1^p)%rq{O(s(UEWlV&P%I&k zD9Xe{-4XRQpg}k?v!)yfyAt02JbIzIM zLI^H6lY((d%OWewf)+)bW&UGe!hYbt6|kb@6?qw*4P(FCDR~!XJ6J!&V9Y z#zi%=G!{ZgWwn$q=ZbrHo5*kac;_!J#YYh00AnD4kPJdW87+&bC`yEgWjeOw>DZO9 z1fYZv=mxeO3n4@>MhHWIp+rE+qDX_V-)wZH6kISVB_a6asT1Aq8|`-E{rBEQ*qG}q z7=~G?HKNIWmZe#i)*Dq#BSA3T-M)R})}8*esCHw7giYYJ%h#=%fAZvM(=>~`s8s5X z@$Ve>mN_yMMPAeedGAm4(iDJgK#t zP;w{*lRStc&RG;r<1|k^rx)~+tbj-hGkNECm*?u<#>R$iTR;jzNFK*w9Q22Bd3gyU zIKNP>)XoBk>VCy_Eg`sR>ZViMX#Z8s(=Xq?*=jZFbze8hG>mTCx_$SSbY0K$JjMeA zAt9b=!kPyi$I6nT^YXdhye)5id`mm&TZU;{b}$}YyLR(?ufB2O#0E_Q%Q8Ei&dz@C z)}5_FfYlS7vuksmMiyt~+PM?szS|oO?~ZbUOv+K57I9MK1?%m^prG@vWoepi#oxbp z{Nf8|)>r0&(ZO~!m`sDXqzJ%HyB$YizaMJEobN8y8{_ydY`F68iF?Gwq znl3qyDH<&lUY(|2uTS`0jQ8AD={LDZRB}rNo??fh=OxNV&Gvmx7@B) zT+YSj=H6(WQjBfOVzfjMq)8k{kzwdqz&y{Z75~LkYsVK`?_9Zky+7nkrWxHIOqpZW zJkK@RO1tJ6D9+2O=Z1MvG7bSp2r(`ogr(p?k|k6$8ns%jiJ%6ckfMN40|2XnL;3R4 z2oI-G0JDJ)Vz!h6=S(stq>z$wKAUNg3C;zlf-y$RvM91VOXFlTp7sahQIN!0Sunu` z5I{&FpLpWJo3PbCzTKcTSt@#d&% z$URq+h-#&<1~wGO9Mc1PO~DAFed~{DHx+SZd@Dm2WQWoSzPMG zad_$SC5+Aag+8xxmV_?i{+oc`odqn{))*G zonVY@#03+)pha)gKjk_ zaba6lkr$R}`M%%lPy54Bwd#7D1(UI7`>(umuDjf-xJJYGG@TflS!DD#zr8dWZ=0rx zv1VE}EoniM6DQ`^mfC4Ja&3RUTboP+*R6J1O;gvUL>YxwZf+4>Uu>9|=q4fEh3?gx zw+mXBjs-{w2u$vdHB3*QI_CB3xBHjkI00HY4dQ8#msDg?aWfkJ-mUtz`l8N#LgyQG z2r|bp{EEMKun!?|G(#iCXcDDKp=svaoV&PGbsWYD(QLKJ_Hb`F^{ftnlxDGQnivz; zbr-tbW}~j@BrB6>oJUc{As1$F z=$S^VYHKk-NLsELXGIuA5aO~dp{_F_qBO&fU2jwj!@}5*P%>UJ9|TeN zrd^ama3*J21i=NTvxOXHsRYiLU{p|A6lIdclW8y*jRvF9Budkgl}s?s?+s=E^3l~g zpI9(b+)pYzn%8)kPyiewh#|xfV1&?Y?Z}6z1PP&9fk`D4ls~D0NUG(0zwAr|e7q+3 z)*tx?i>H92uQZ`3pUZs+?@vyvVw=a04iNYHaLio*u)pvFn$BWC$uUx!9sTHS_qM%Zy0AL`6X_x>2 zDFh*?EDMaVW@+PbFqmwPr%9ag{v>i9YVNt#wD%X|Y>Jx5Tqu+Yu3q_?*-Ni%~Ob+6+3^;>uMe)-F{ z7dmsTcB7X~E=27Ut*XQpR<|a4b0L?NqHb$uP@Br_uS|Yu@|szYioJ zM1u(Td;RNo2D?)-n1W7C5Q{-m5?A*6<8Eip(2YjDIiJdZ`uT6lJaJz>hBTuTu)8p~ zwz0+m0+vT~X6RYM%B_RGU2hS`w;g9ZI;b=ot#&6a<5-jn*goh7KY!;I!~BOYEvz^O zX4LMqxS(_0ZWzVWX*}OP^xKVyK|Nt+s^j#zh&%DJU}{dBxE6xmuoQJVl;m zIu#O>XcV&Dtv#W!wxi36j}dCM+Kf0Yk1WkuwT4SDc6HN4gq1SL%C|3F+Z|8bT15v% z-L(wEx-(9r47q8qUa@rqk}|7Ss}-jeC+U974TL;LkH$Si<_#CGx2lsU^Xm1iTIu!n zMp3MrnuAK+upAQ?97(KMjtQjD34stIj1ke86t3%?K6BdfD-d7_sFWN+1SEXM5=)Bm zrG@mfDRu8H-GNQJQD8DAFvOPNTtiynoOi3P}2=ZQP&!E11T5I8)v zW&YH6#9_hf(;tDJntNP6V`7C_H2euIF$f>s>{+%DqNldx(RE@zbJGrjryl0Rum1Es z+`Gqz3_O_I=CRGZH}%Z@*AFA^C(p%Ur~VlS#Mo(WM@JP!@9Cc!d`LJqrjKkY&f-~6%Dk51$wr363tha5&g^-Ks{+yvPZ*8ADkfa}nwqOcR*}!=3(380>dy8~^7o zw-R{m$8Vf(R+i43Xib8El_iiO3?`H&QbOOUTUrHBpko1w5J$nWI$UVC&U9L`AV%FH zx)_ZIEP-`~DGV$(E(>G;3?tF=FW^EJED zrL@%CdG6$!cdofC%0;lV8*J}}fV+SDpZ)d8W9?Sm0Nkd`AB~552m47D*Q$Oofdq(l zwP8T<@kbwC_|A7a?YXK`TdL1(-`$o1mYf~z4C64}OW0diM&+;XT-fOTo7c~`d=#b8 z#~)l16m6`nPKMh;6u#yC)$7MGhPtj1qQ~*dAO7&+!C+L;?M`L2YSlCiO`PGs{n^bu z?k(5lk}H}fI<>NTZF6E)qtokdGCk-5er}~T9)~hz*alQ`!)b19Pd#hjckmA{9{boR z8otq}HS|2*@1Y79pSiG{lxVyg{<^qZyto#E$)YAO&?`=TdFj~x;17F~iEdVORMFAc zB(ZB(338L790!}jaZsyPTBh_hfednWKbLsAYS_fk!!(G~Q4~buUd{++pqvb+y9e1o zdTFpr0B|G71{Q)2OEioT5|$<$5dY2V=Z`ObN9F<=6ak_WOGpZ!L|^-`{IRMELMg<9cHk^N{K9kk zhpc@o0OUv6@&_CL=oWs#PaqC0-oHkx0-@P4l>h>MZ(%Wkgy0BB0R)hYahlOG&qGer zl4hK;JS|v~(~OS7=wLM6?T>roAkNB3E;;8VEjeRSN&xWvZ2QB^vXqhvE`VfE@_SP? zNDhGnfMAHEM1T6rkPgAOxi-PMZw-rqg6+ zf2T2DHFaW{`tHsy;`GJy$8>|NA76KLM2n)?sv3H~VtKEB_nd8*m#<#Cy1oCi_qM84 z`)@CxmBocH2`t-bwyN8^d!P_mmY5bfapE}V^2(JfbL|cnl9p*W%{q%MVwk$FZ5&(W zLMBNhSTT`2&r``I6V4=!vMi62G@6cjVN$hm&2v0kLWD-s;?CXyEECymHFVU#C@4ji zgj^a;!>=;3+^D^I_T&dwZfsw^xwy2{Xj+h9LSU~S^$y14Q5+HE5Y({DEC-ml-NnU< zZ*PwxB4OS2ZPVNv9E`?+z$la};*Wp)W5@TT#GGM?2mlZfj3D~P zRZ{Trb-uo=O6pTKBmXq((9e5@V0k|_ebAWza4r}x$}&yUJSpNh&7v#`)81%22%<@x zM`@83lyk^AKYAqmbczQ;gzk6KfdI_baX=73I7?IkgdmJl~7PVW2^NGYO||( z>^|RA&f%x;(d@&+ZUzsZ?!hD0n@7kC$irq^gwMZI_h;)-jjylfqEh3Dly6K}d#|(5 z{p(h6L36-!05|}QajI!R)9`3CXtfr+N)x~`Ehe%k5JIMD?d|Ps-rjlnJKt|MJEq|x zr0w^HTU(ocrP4XJWC}AGi%F1=gW(%5ubEKshSglp-t!h;_EQxTEOf(Io*?2ez2EFL&$9J!rt@Q5RE6W|7@@wyZBpjO| zS?K_o9(=gl{H}8fSY*%5W;!B}HO%ufY?R%HkSAxZsU#r$l%L=n7pA0uPHkxyO zv(wsG?7sQJy6)-)2IGNK z*Ca+dMvL={oUy@hIydLJ6&DF6C39?TWue)yXwAd2h^sd8UFU<{==$wm7f8#l=s1Uj zEiZL2!M(kaWg6{v!>@R8l-{_0%P{Opqq#g66EtqO8YLG8`#quoLpOL1C}p&uQ5X}= z9B0$ragSiwwEX!_6FNrIb&jtsHEO1gp#bRPtDD=q<2WzJrHr$pU@$H6q;yT)#Ll#W zSjz+#))s#C{%yfXlGB6X7(f6aLBxz{mX*};3}RT(a1u~zS|+5lTd{$FzV9$0v!a-W zagdh)PHofI5Y`N%V0;vm(lHuK@?a7rS)uE?l(HzxdcFRmAN^=~d07A9E-a}W9^d`a!+ z&zxU4w5!55rJViJ;*Z%32b^=p%CacqC>ajNlW`CPNf>59lud##%8Hzcv}9RHkwi~V zviRr$e~>|VWYx&oIgkKAj35ROLoiz^5@Uqm{bd~>L=fTo%RN8<&|%$|6_rp>aoE?T zMEm1af_%Dw_?F+z&-Lj3$-WHtx_>=dMarX9l<+8Z%%Lkp9=gWPk@i4k6qG-$GFC+* zUvS|F0GG4`oC3fQ6c7nb$DFfXZ_sH^YxNA_62KAwsB4Cy8c;hQS%j z3z`ezVWekqI3A2QcScE3{Oylk^L%)F^EQILxw)lky=fW-fMPg2AXp-VbWLN7O{c-$ z{@v+tV0zW}HV5YJcFV63QKrE1Jey#{wkn?IOCZ89NaBQ1HknKaA-?bHx=v}hGf8tU zR@#2mF?xI3m-YdNihs4e!rhyZHV`SKog3gLs6^`GxuUdDEKPyuJO;|MIid_4cXbOEyN6 zNwB@MzqGPct$8I)+ok-Q@4u4faylN(HH>&NPUE~#Qs<%xRux9EPC-CASTeKuLv`N$` z5ds)a85t3R5J8O*LJ&Zx5r9a;<9E%*YX&IH?2L~)>6remaD%v z$7uxs09wn_!~L{t2_gA;uX*gL8YMrP$o&rm~1xY>-8?sIL~tkWxd{vlOAI{3~R0C0@T)UFoDpl zg$5?D*{Fp<$e5&6^5Ef4FB3Oj|G`|#i<5~^8UgOPexu$oOkB}4P9`S70N^RW+HSWs z;I8le?b~;L{lWb|{o|`YdilELG!Cmg%hOumICcOuk&*(S$K#O{$~4Vxw~Y`Q4u|*e z-~T`V=GUgCMOw_)1J|;B-;Lt&VJ|C+IEtdGQUv)~J}DpGx$?6&L|Nr=-e}e+t7^90 zz{a%;tBdQ)1VJ5B)%B#D%jqzqbA0PBcH)?RM7JuV9FiBzymZ_uu;D zw?BXLjSHPFQZi^Zw)Xo=?T%4aagrDY`SEL)Zfvd~;SrgM(tHmoBX@Tv+L3(J+ce1*Ml3 z7db1_bkDXh0-}G|i<9yETo^@ZIVmYE&2CdkWg!TlyR|!}8m?_#S)XeKNc2bXKiwPN zeYjJr88+esm7a%#z`NVuE2?C1amh4ILd>1L{f1zn36|UL?j+qErT~*hP%jHH8YP%m z-MNOuGL4cXFXEC3O(q4a*+fAdSNyFHK8~{asCbvsFwL#l?iVRl-SDMdt84wOS0frqg*o@7N?dI1tbQL1uCAtIwm(woGgi&~bO zGnS2$dQ%w4FfsPr!1t`S@2jdJNIOKeo9#Dly>#dPmTMXYfl3jYm4hfg?2UTkxL}BD zfFX1Pv&<09`6Mk7jv8TrFjiV|N(0BSZEG|f{r%tl-PX=_w>7u0u+o`d#$FvES2CqE zMEDO$ITC(Rq3cRg!iWbDrUgmYLGo^Pr=XEm5Uca|I< z%p+!p8K&@E_=l70e-fl;q>NuzDmmj&_-3x~ap9FxfK`%HgoJ`Z@T#f`0O9=H@?2-5 zGq)}T&&$j-u@o{*^C*f5f$erX@H;|E+j7gQD9X(9-A1#iB-q-!x4pM>Z@`?e)zl+_ ztht3%-?D=s02(nSx!^(I#go|gL)Uc)A*SIaiMcn34|e;@q4nzZ>rOat6K4gpUYt=% zt+s=ZAuH}Uwv=LLXLsY`n&UYAet&QG@b|xeZ!iHOFP1ytkAC{bLZ?=%g~P$&y*on; ztXE%tlU6*>3aI)2yt$wy84psw-l;@2-wbcu*er|mum9$+7nfI7FI{9(ZSQZrajOBK z%ya74?o!wJAO8FQdh5ZxRx?;zTlZX_QU)RV$q!%sU;dxJN(V^Wsn?sK-(ob&M!by1rfFKH`DefUF{P9k0Ak1}$}9B2hj%~vXlFQ<*@DNS)G^>v zP;(7q?dpY>ezNGBSkRj zo135B+dk+ITFdo?`Ia=Q-Ejr6sijfmh3kY~7%(Y^<>nKK9b`FYrx`vU^_VoV13hcqvrk>dxV&yQF8a*?q~OQ-@mu5A<~KiMNJH|BvDGZzH8g= z;=#^bGnZOitqU%7GR(v^01!3yh+@7h>L(dh7CFUyN|r^^NZ^v-?PC4p~i ztxem32CfCcLaS3T*&hsT(*ha_skl^2-P*=V+d$y%gWbD(lLv!%lvPE}@|@a^Ynd2o zfh+_7;!K)`i69_|cwXR!PP-m*0g_UUlcFdKDqul*tzI__Yc!dR;+RTR6e8zBYMd8U znx=VKJRBtBsHjTL1uTWiDxM3KFfh#I{vaAp#uhOeer-9lfB4FE&a13o1lud!+QwYi zs0Ea(-Z1Ko#z~q0q#WC|4FhVB71Z&3&$ED(2%D8)X;CN*EZda|?4?ywQpJU9T6x6> z8BGN)vqVa10Op%eYY=7CIHzgB0l*kw(?9?!0QJGRh~u$i+nsisbD8B78YTc5NEv$0 z^3r0b-O7@9_b^G~m=!UG6@kLGU1B==c-Q90wZGuKhSOVq8i1ZGw*3}@`{|SeKHu8= zobY<~fWP@muAk4Zo?%cr$uG|=&%q-q?$ZgUK9w$>PWK(jc$~Frt)vt}Ny)3M zEQ@FojYd(HGNF)El1na?ga{&xHPA{*c(!lnw4U9x14?VAq&n(%&;URLk17-}g46PZ z>Eokkj`SU-wF*z>(hz`u_ZR=uEW>#bY*wN0UHaj#Qh$ZcO8uQi2%cEaKlVlE=^9QK zmJn;8!ITf>+y;DrPh%ADNw4;eVTF$=&wil}J^f7wi1UKdDc^lo-0`%)+T(9McS`7E z4bCUUHO^5Ld~&$p)1(+56^)(Gl>0=iK2m>#CzKf)9C7G8YoN}ZBH#IK_hq5E7Xn9^ zfe2s0VWRVr(icO`3!V%6q8ERzo}QTyLZzVw3PT9A(!Aob(wYMRX_*&A%4wwlv29OC ztyHNLHw^;aD>r`SHtFZf>p*hNBNY{^<7IJ8Ksma}U^2VFDE~VprtZTLt&@5My`;Gcr z@4j0PYU^`dOY47p`_rs~#J~iJW~W&X!iPJ=jugF`F0aPit^z1z9{+1=q}^4hJ} zyY)tYF!|jFpC!fUpSJct+#1}xF!!@puZJ$%-Q6!4TUuK;2sQ~>nsb`|r6Qjn=5Td& zZFP0cG)xYVW7tTEs!WT#Acp(do!h24xO8DnYC+443hlW5I3EiI7}vnoi=9Rq$CD(h z)k51wuU)TsVe8Ib|3AF_A>*20Tu?rkl$@!osMN<>Tr6y?w17$lBVn!Uc_ytQPF39t z5G~VEK72SxaynNFh@|(&69ABDyR;bPWmQQSrIl@w_3m7y@%~{iE2-@S>rI3ER#nn8 znJ7j5z@cJjL3J3(D6N{UW~0$E^%wwcntWq5r1$wS&bp0;;~TUP<0uk+Qc&0AU0$L>NH`pk@T)jagx8E=LO^9_6N8B@%Qik`Jewq%MUHfGEKr5V^roDrId&D zU~ax^*;Y|xQJin@4K%PD&1P28Pu{xixZclx{;#kiSw=aP4zcfka(A+GaA9$w%rn!# zN(iW7==;6iL0VLucC%9t1g#Llox1nOKYZO|qkq`y|N7pf9!5X7deL%dlAf zSJ&28uWW9b7(-+Kqa{>!|}Fs#dH1%U}K*$8jj7d6pA{0BC3>l~Pj5 zD2n1Z=A5suuix0*JlNkS5S69)?Cx${iF`?wp;c=%!!X=>xC=4nTX`7EBxr$DwC?PE9L(c-V7Y)ogZ)oX3-xat(nHG_M8L<&CxE z_JhGV+V4xD0VW0)KvaCK+h}y>AhGUw(17}tmv7u$Z`#Bdj*@#19*(2fvJKlZCxh~n z-3O!5pj5=QrwnoD2{~gjmC<98QunFF03=a~*D?4?evQh)wLE z;wmo+CV@sqUQs^?F1l`-WoZ-(A)UIn&}v;-nR5^nq8#MO@Ni2tx|W1Yg~$mo*CLDa zB4t8qgaH606QfCFR+WL=g?868@NhJ$q*RE25?ThfEw@s55a*L5+8xFa8oA_qeF=z+ zD@qLCvb*gi7Xn)Wh#=Nd0gT}+Z2faJc$VVoai#X7r14qAXZop6er^dQJZZZGm=M!2 zeBW=>Yr|1iu~GmjlrimYlhe9~bCn%ViKCzJCY)@AX${bkD&!O*PzWFdH9V@-)(Aof z0frFHL>*>;!py#JIqtWYrQO<0)>L;oPp8k38sDj~p zbh)1vi@tBO>uJc;tf=A1^}2ov;`ZVK3NPpgp6Eqtpn#HEDk-^;oDitBLI^mHqa;U& zKmddgQc9_qRHfj|a#0kG(loBsnv5x}C6`r2D=8JmLHP8+e{$#E zy}IKs&Mg1{Akld14>9o*j?-?(-$=^vVX5Qa4=G{MeipWby`r_pLzj(hjP zPP^5yOxyLtdcFB?e{$>Pm8NT3wR+ukoMv|+Y;-?(|Mo{8emEE&UbwJ&>y?|AuiRja znWl*`GE7_)xe&~COerM*psFg*^IX?8O%pKD2!lAzxX=n1<0uodS2e5^KmY(0t+Jvj zx%%xV4{g)NP;P8o_@f`a(X{mb{(;19QHgP!Hf!EocW(FLC#mBu%>`AN0FZaO9fU!e zXJx?=CaY`92=7)^wz@L^=Cw<2zx%;%k^sl&1(lThZcz8EZs=IH?SL*qup63?CMI^5 zI-yNgC(*>PNEn3C9PhI-?|QFXSqVJV^wI4*hk_6}uokkqQ6)HF%xyX~4kUk?J`(@HB!A*-B5c>VgO>AS!A;C7iM z+6^X2Hb_bg@Fb^74Kfw-u zD$X7MryuV~{rs4B)M|hb!3H6wYuh#73p^()I8_`YgaK5KR{BtZ$7mN%Kc1>T=rbE# zM-&MNK&TKx5KY@3z_bqnLV(e-0zP%fC#6$BFmOj>{9L`TWqsa|YU{ zz8%7oU~-I7!!wP1&wuhS4u^t1Z)9Gq`1HJ_n_ryLbp|MWxlHoAIF9pvUc9+_>Sogb zKn*m|3IU}B6|`h!f)L=m0!knucXrmXy3K5+O=VKoXBf;~`_raa_~1Aizp< z#!7?`##jg;1cg}IelY0ej%}Ehda%7e9L1LHtgT(}gIZaXWmyQxiy{|72A*vh#I}Rc zq&nzLHs%|D_KTmsbom+-vKa)+?RMPnGo=i}fDkZ7i?WEKs5j_0>a}jGAsH{Z7^Q4~ zkiPTjA<+EV=Gu>6zwzd+Yk-%%gPww@(`vP9LBkIm!`4D!0<{v3Y1Bi%UJn=MI_*{+ zBVFbNfB<0vA<$Cf8X(Eny5U08o{R^nkcE)ZB;DR0+JyY@<;_3->FaB2%dJ|wcQEmR>yLJ!(Lx2 zVOgeSkdktNjB!>S?Dt#EI?{Y?p|d(ybFfrWe6~BRDn=lv1@^{jmp~rJ*}=g`aoOqA z!_X-TIvAvrOmHci&ARWoQ5->_=Nq9$`Y_6Nhsl0_La9U;hpt5kMnIVaDWwj3y`ACY z!NK^!;dqi(RD&o@5Bfbnur74xfBMQx%j?ZJA0e(XL83|QTUJr#3aXXGd6SrTc1D9J z>rdh|Nf*1Vnr||RO2(yB1RIuRYpuuQkx)u0g%RSM#c@&;r9%i%au`jbEW?IrJC1MJ zoo3_0>OxgzoH5Q7=PJpov?zrJ5<+6yreSFbG{S^nr9@84l5zzRCKzfhn9Q=gV0;+G zX;B59?YbUDgi$HE5WLh-%+1f$=T?BgS|fxY01`qx^UTkIy27t9=Dr{t3IL!dW72f5 z=L~iL&lI}C$B^^s-V)Mh&lkZ{j9EwZ4iEyUGyobXrIgf4Nx=l8f^t@}A}?u0D=wH+ zN-3?>Nt&+C@Q$Cr9O?*AP)ciYytRb@LNJarBDHK% ztB1riAcR5S7aUHKa&M4;aj5^<#s!xlC!^`gGsjC>o-ZrdF0yQ`sPx@ zw{6!(fwV2pvFlk{tgI|I+g_vY3oZ@QPjdFjr*|FG0G?e`MO5U&q~KC>Ej6#IGSfge zo3&=E-E4P>ZBoH7##$>Ogpdp&z*w0k6UhXnwBPS*tzFkGieeBYN(!N+kg`^<7nE0J z(x-T7VSdWLo)CHlw*Rxb0q*# zoIe;w7?WmD>(u<3YdD5*Z6gc_&82Tc8v{nn913EqNs<+L)onGAYhnZ^<7ARm{Yes~ zx$ihqas;$%8;AWI6VtX_lVA(uXpD1C0k)WsWksVXwk(@b(QY*;wgz!ls8PFCTbWzN zh&!&u3se+^k^mzD0W3NzRzmKq}1@ zNJ{Ovpy3)c(X`})F?Sw5e7ODT%ErrxbhJhgX(`pLKH=L>&R!UV`@F#LMOq$Cb9U+D zU6yBW%RvaWKH^(H{(%@{!!S)k9LucxUTo({#Y~|D7Yb{rj^KC>Gc*K_p zl#gQy-qgh>&W+h{qej1^ucd$-MC&0T+g;4(FhWy z80Rd@lPr%pr|TEiI_Z)W_TBd`IwIxlwMzhJQTnNb}thoBgm9=Z@^LKRFANI9UNx`=F z4@)L5U);bz=SfeqJgAX&J6v9ww}?lGS?1+rl;ycN9Hv~P%}yBdPy$Fy$MFm(N!|D7 zJM#$}O!ACNZjFkp;=ZZfw4y@BdHFCds-o-!dDikq`q5^E8f;h6d6E>Z(Ypiq{*>wWWoA z5+h;)WaLa&+Ta3NRA45?IZZRB5hJ=VIU;c4*`3wpg(QiytZ3Gn^_qJyO0uGaTnH*^ zjxUO8n8g|fj$;~zfizTH@v=k~MgSuSv{D3P1Ywdx$4o-Qu?fmEm6zruN)GoQX7RYz z?jnc*ka`xgzFHFXcvABRcQN6ah6p`=pMN3UgtMex*k7bEGfl__1F zI{owA?6X43*WksUk>8(Bc=PD1Pt~D4@s1TpJyPRd#0ktZy)uzxD-0~ z?t5`kpJ%-Cb3vt9Yr~hl$G=j>`L$m5^ST?L{*owz{@SPdnSv>;r4)!58ek- zYj+kqjaFY6TLa^h4?p_t?;re^fAWhTyn3_d+t_RZHjL9z!r9$^(tEi5`mLK6mu*w) zam*;N8v*>`t(99hFTMNOgTMNx-)vsH@#EKC&c}OL&kwF+xfKselH8YAp#=TxkVLARrcXl3rP! zhZnE+lTkm5sN_11SC>|RPWDGT8LLvpC<89eI>E@+)kZUn!>+c%Rs+_k?j24Bz477U zURbl&7MCoIv`BNxWRXXmX0X1xFpkFuqmhyT zXwdF9t12&ZdTaA?z1~QQ!N>RdJBN60H0iX7C(SV*GK48L@{%8RB`{^%l)>c=W zA8d_39vE+b*8iiM^N2>Bx--ejXw);b(h60EdHXQ&4Z2dvesAA%i4X!I2Nd~Q0Nl$h zP$j>MV{F!AL3jouEe*tSR`kack+X}d^H)|@h%VY5c=^gk=v%iB*kWtWwe8)4W?7bw zdRGH;{nizM@;Hs7xIE~^6+;LjExBtrp@Y}jHIPr(pkK2j@&cNQ!KfFhQLE-(Y&QTV zhUJP@z~X2@U4s zJA(n#5V;Cgnd8~SCA~@6bOIM!8lo(V(mZ8caH*wP=A~B^E|QX~RLM%qdT;+>o^98f z7a(z@t}wP=IPCD5?U~=oqFsExxBSLk^tW@Z<+1GJW9s8aZ4T26Qy+l^5KOfm)KM)0 zf=3H@t$~`pUP1@}!~ji26(E2Bsx#f7(^PEwaR@++kirBzoN#EHz$JFw31izU%A^vS zAPouUTq!N3JU#jdApn4sQfV!<5=uy*HG%*_tToU817JXapwdbL4KbPaJ|K9c009Y5 zKm&AKDgh7xP(!HCoq;o(0SYtw&ccB{gKd1tOjVyq*Mf6a{xdrh(mprheqCG%;PJkO z)2P97Mg0>H;T!3Im~FhwY-WF`LF8P7;i$Y8Dgc4jT1XB6#~9b^b+ED)hBbsR06++y zqzNIU)9z@6880X;Tdl^;n=iSpU6#4hU~B7vWjkRQR#k~Gsmj7M&8t^7S5{ZTI@#av ztttHN2X2I7h6EEX1!Lg*Br-! zz}3*nv+Dlc2ZKp2g$`V|DvEns+dI8%XMbe5bDwPuhX*|)Xy3cN{nvl>_wWDo2fz5q z8=;NLBump2V}uDpK$S&l*8%_lAp{{LggDKNGc7SYc_4%YKtqHCml^`YuxZIZ{ct;I zxBBDc(~sX?T3aoZ>=nJxF|uSrIW4KUyWOjp{8vAIbz?59C^H~YywIg?hD6PaZ5;)dzB z2a}{f?l~IQU7ORY+3>Di*j%dHmoKch!mvojt(v{m3Wf*!yFIn+yklURYUZVS617aAM7`kGVS5ipExo4WTpO^J=4q)ssI35 zt79sKN4rx>DR64HOrOJld|WG`r|bz3o_Zclzx^yP_|ciovd0;qFtZm7R5)US{d(4l zGyc`*#SxxZF5)*KrmX7a)XLmTHJ3fSw<;+ik-zBv(+YMx$Yw z9t03VVp~3fNC;ZdGRx8|OHGTQ3Jiy%rTHbK%t~_XggcXbe^UJH=IT#hySlizI2?{b z-(g%DCd5e5k|Ssid(o$NAKbjMQ4c(%rB>>}_Wp0*+lIt=<)uqq*9n~9zxvZZ+uc9> z^uza9LTk;%y{)}?61%pmrBGVCj;EBu7(cOFJEb%~aoSUpQXX{!Ypt|~2q9<)&eBOG zD%?NFKK}5Z4xwIOnQH}>|uH}&= zN%jZK58DU;$8qMnbByye%?w-&hJDXI5%uN8)juvUAfp@Tdd#T9e;FZ z_rv=;41l1~-W_HYWd*RuIi)OX`!o+&Nvq`FH<0u?>ea6v<-r=eK;6w z?e2||f@;EnT~f&yZFgIpx;GgWJNtbGjGAw{er?pxN0YQajw`98l1ND|z$D4dg2q)~ zA|0oRLTG8ZQ}BXIUQz+Iu7G@SFt82Ot+|e8*=2FiKLCbl`{BaUa+Fs|k_-m@g0qa9 zu0Wit!1J4S$+aeg*ro+B26?G8U_xo8xsU~;wq*i@k(2!W7JwJeU!o>2$TkB3M;^8v}Fb!gw#30xp5F-Gg z(ppZL8;?ESk($E^Z-P=!pwI{c1R#O{00khx2qB0Nf(Swk;Z)q=QM(0%=Pq8pVm>^x z8K5w;nSD<%g(nu&XG;f<9(*%I2G4fHpGz3|Rlof!^)k$CW;6RPbJz23R&@NN22cad z87nv~Ae2f9PB}&dBLhOscvY4e=TvJYgyLK($;%?E%Dmfcmt|QN8D-oHYOe1~DS_5X zNYA#qoz5QL2LQT`Ki65R)$6n>vMkPvL@KT|M#yM3n!Z=lG)FRRSo+5=tu;LRr>|YT zxVB&#cB>vr4H@S(!{kC#lzC3zSUxN1LZ{Pe)RAO??>AfR?i{`UaJSi>|H;obuxVq% z`SF`KdaqxzFdPj=gTqN#lol~;*L6*&Dodr5VHjF#A%tNV2%)JiBRJJ%CZ$wTLja^w zQYwUy){65|X=&Pk@*G37wm5GSW70dsLMZ`-avmHMTf2j1;QhD%=8vvjTqjUNjN|>@ z?>~LN{OJ9k{^X~a#L;JwZQB*4qfx4qVFEGV2w%DR5`ai3$!Lx-*x7wZE3P%*TpEVG zy)!b9EQ?iI#(A0;hSBac9oHF-Cc{x;I_@YgMro!Bxwzc;;p^ApUICftww>UO&ASgL zceX~`JNs+PjZVWqd~o>5&g9`BIT%gmI<3{ErE+{Q$yEvEBoh=dC^<46*LBvH%}(8c zx{TvgLu)Y3Im_Ij7G-&_cd*!=TL>F#jrN7LdZW=E45Q2ku4mWl4g?kBAS?5vEF0KJ zB|4a-tSql=Uar*}f|gNQ(jred;=mYlyI+b?T8*;_gy`04>*CsCnZ;5{iOr9<4z8|s z48y8uWI1-b-H}R^B}jTamWD}$)B+%E*$^2(K>!p`63hUFnLQV#a7rXnYpvz$~7VcG@3RU5kvqWpb3NoBLoqG zfMA5+6m9?rKEg9*gF6EhW;U~#ovfhGU(!FZu>X8P$1emcoY(9Co)6r8#JTWA=n}rb zk_4O~+L(!B&1`0Wp#DsQsl>xH&ykfBWBmV-VwC{_;;2mY0RpQn0e3LRMu}2A=!!OV=-5 zSW!ZzaYoB(ZE1dIoZFW2%tDzu3@xpd63NDe`ToJ-2OoZP_s(`LaKpeiFji8S#Dqj( zjHQ&*tvRKXl=6w~wdwN+q3K2*LJ(+x2r>zVRFqZDnKBG}ZK+Y~I6`RK^8s-Ockg3E zzxmqL*RQU*o}E{M1KgfpT3WyOw}1ER|L`B*_k26cva+fIufa9`^zJ=WP5zrd{Uaf0 zmgf?nGK-6%Fbrd1eklwaMPA-{uzNU+J=aoNXe|xfHcd+bbubuy`q_hu%6f|=SxU9) z?e|)D+@Jq&vvaAQ#zj_DVIz>+Kr?ma;^OPCt}Qm3`v3(a22oB33~gwLa-3$9s2Ubx zI38c<2JMv<#|zA)vaq=@SL0Q-wf$iKFu|6O2`PD2r0Ip_xutHq%7?9mRws0&l*7TW ztg5BOE51X9sl2znd*{wJMn-Ev@%~`H*I($g78e#q<9IZRdc!zNGlne%&E11IE4hN0 zRt!P0xpKW#5ATkLgE${1G^zM{*RKaY2D;{YmgN8hT$=!z592}!!5LSK$7bHF)$)8? zMDgbOa?NwAl2Xoh3b|iqf=LYtlaO-B0UX6?$+*xkNmA2snvLeTs%S+sgRnZ#0N4&O zBrfu*s3t;AS9S0R#a;5CIJlz(-vd@QK8AW-~xxW-nASs2^Lnej!rEvx((#>(ir+ z=h3j);ITiy&|n>RE1dnn$903gvr>hb&1`0WfOZBA)EFKW(P{vc z5R?n*J0@pkRh3zq`d)|;MFc2N3dxj~Wm%SGX%LsQN=jC%HEC63Suz~$-+vLWre8gcxDHvAl}<<1rU3tN6hv zX*HW}STjv4FwHoQs44*DQ8X&6yx9nB8|7KfnD%{tn2rLAU3qDRq>KD>Z#mDg^*U=*R;L z4mbl!Aq338B>*BJn4zes1ZNPNbfZar{-f)g>kE6kd-IFS8X25d1cINvdS$M*_}1J1 zu-IyBy!py#7{CAi$DeKO^(SJvUhB*)U8E!!^yI;ci2zj@%nP> z+U1L3U}ey@u_rX_Pln@3{&0Wb2JPfG^Ux7%)iQV|E6fwQpGZnf(5 zFsKD~o=-4go2yH1cX9o~n#E&Bl`HK=C9?g&4wmBb`qHhd8%a@2#^cF&*lC!xS{R14 zolkb4sR(YdVzNBfy|%fAk$SjWVTVYKCRy1V7m%14MOl%3^4V5diC1sDy1cYltJy^{ zZr-|Vnf{>H|MdR$;V=={A(q>+P03k6pywH$XTP+v?z^OJ>E8a%Fe-XcImwFU)eDW# z4;^>0+oT7R;laT2Y|{;Effu-b;MbxwCm3_iBCf_7x@C3|utr$Np_!(cKmfKHNt#BJ z-1F@uEt#}5v9!=8A@zDgYAt0M7!K5`qCC#Bz%wnP9ml2;uq@YF8-^j3GEI}^1u&u1 zpyb@POv5lZXN^{;+3IKw5QIudG%HV-*>j)>;G~6FAN^BGfGKOE(pnv{CTOJ~)JMe( zPpMEiswOxhbUg9+S_3_0UZjjwlu}AL=UfP>z+S@0IHLP`J*NJiC*l9eC+d4*q-~f zPkH><-KZZGp-*pZaGJF7StoT0K7gmb;xtP6UEcHOU-K{b#xK?5|7iWMpBw@WPY?4W zN*eg+o8S}52Vdird^#}kXrjWSZ`98k{!@RP`p7TI*Kqc^=Tm*)B;o#InWS6Qk4`bg%vy4-Qir4j zS;cF$KnhukVoF9Jl!97Ul&Ls!92+BOT6NFD3X(>*n@cr1+*!SN>GI9j5Jrw|3Bk0M zd6rV0v#cCV(#a?aY97$av`h@~IFCNQcfS;nOAtlr-~Vp6KcKH(zY z!ufU!NI{Mi0HtXd5Rs}XF~JBErRA~OJ5Wkb;rnTFj)_6bLIVI1o|21UWJm!K1eS?} zlv-)QgapuWJjpc8;zq+*4IQY|JNNgN)AHiVB2s)j=v#(yab*#!%R$Y(baAy&Yy9h< zzxEHmx&7Dw`9n>MtdxaNw(DX59W!tob3E>84G;VAyYGHx8szHbl};mo2mplRw20E| z?$*APN@}1XI_wXFnsf2us*9X=-umS4ezo`NYnPQIf$1{}{lFvvR$NZT#W0S0y~Dvk zWx%L6YIB{Xwr68RoOzP6D)7vk*Df$#4tu?#ETWwBQG@5k)VIgEcp<9O;F>OE|xF+AcwAN|1gD_N*bC#P>ny%F!rGvq^sMOZpFrmP! zw}%G3vNr$9)wO7n48|iDyO)+1votEXOo18DpGMt`LDtN&_m_^`#b;Ypz|qV*6b{@sY9; zeo?vs&-Gnj_olJ_4nprYz5%Ac;-Q_Sgpd9__0jOiO)CgA&}#alr8?TDQfi7OKmZ_6 z5aQ#Wwdt}#Dga$p1jhvt(>=^7hr)4rf(8fyG?jAzQy~a|5ClLS=b-wynBquu?0JfLXEp;AzW;#2 zDX{IFbs{|JgVLwn>Dhbcxn#gjK3Qx1)ca0r010^f{`}%TRzHS{{By2Rc%q=-NlfAR zB^n*$#1H^^eC-i9!@_vZ=bwF2spmSL#|HgTj5?W<)87a_Ds=;As2ol&_m9u(>6q8K z$OU|^tU-UxD{6S=v-PRF=>$;IGk%AEzW46)`Be?nGyMFQNpYU%EnhnEh0iyI_2b~$ z(S4!Ld)?VxQ>cIhN@1jd6q;2;NzMhA+OXZa=MX|Dt&rxd%F8S_h><6Ws^>+@X^}}G z#^ZRd(>1#Xpv+i2xOjTJG(ok>Ds0ZK~5dw zI7Dj5Ikp{#Ai#==5KJr4@NM7sHI!1&s^V0X2&keIamqLqo^4BjD5HvsorA%>{diE4 zg9z0PMU2MVzx`-;`{AuCn>0xk<@I)GAg;KwEe`-q46L;v*hCNup#TyPAvL8>S9;2o zfDpnMDW#hU7KK#iKzH@71HJcY% zGK*(LR+;H$Zo^01uZmi1k{L?2- zw2*i1+`4sRm2+0sHksFtpB`p;d3>n75PJQt=lP~o(2^~W#h%%^72ki5eEKBcUTgOw zPhwT%<>6#HPs_BlN$HXtpFAH)u=sVd2Mw4Y`le){}imaPrLFb=nd-5_v=(x-dlB+az8 zLEsl@emu(Z+GaJ>mS>eRxeEJX-05>PmQ)EM8CC6p0>S5%&SuGK?BCqz3Q<~!irP(* zWRhnk;z5$Ptnkp!rt?N1X2l0v1(SXbFPt1b6DM@j_TqAiN_ z{qMg2{rCSGsADYvSSF;UT7dk^26XYyKkR=)@Z6Vt@YIogkr$lRqMrVp9DoCINX}V9 z)*_zNUY&$EjIjn&AiFSkKtyJp21KAHo9AbD!%+hgkagr70D(1NwKK|CTN|j1wcs2u zXOV~jS%!^0WkXbGjJnAo*o9mJBVd3Gm;hpk3{JEc8AHYZ5jZ16KmufdjF`JPE#V0k za^6N~8MG_`g}+ch;q)EAi^};I`R7*+DY%5Zle-5f3LvNh!n0C2{uy6SXWZ@zi2-SHh!S?M|} zoS{LtvpYF{G9Fd!;HN+Q&X3>ziPJ?nPmcDEydV^wC#7ua8jwL#>7cBF1wogH7-s?* zAf5M4BO;|$Qxl=JW{jOUJ)8q^kTDKeE6q7)45bu75R68nDoJ?U`{a50@uPqG=?6d9 z>PnRqtQb#n_3?uzW%;|i+iU;nN8jD(an9_`J2yUj^w0n8m%n@K=GrjyhBxMM*ea58 zG)_jx+3Rn;zH@tZT4w3dE7|f-LaMJLb=+xH+H&jy*YHIzW;Fd(X+|FJt+n)mZp`os!+5$ zR*#Ny>$eV*>hS0YWXmAi-Wb0BgEv|&wtqC8%=4phF`kt{5LRYCOS1p^x9`7m?~ZU) znNB`@xS!+|mr^O0WrgSYc~L6uw1cv?g|b>{sZ}d#g+9yksdffAI;Hb`POef#+KKsa zZ9wFT!W`*&TB>KG(KxG1#8j)%(Sdck*9rz`W38oSocPUQYiFys(eGBt%qmqQ&$7yb zpVu{)VXM>IJKC$Pjb*?&_oPr&%>g@cJM?*(m)2S-rIfNPOU4)%zVC%7K=?dh!W3Cm z+c0G0s&=;%`eJwQ`I~Rt{ky;WFWWa>v$Z1f1V;cQcg@A4f5*)&Cyr|k!j8Z-wvm8< z*4fKOGYe8IQB(17ZKT6l>zs4eE%ap3U1catxHvQ-G9&=kkY5=hGT@Cv zB)F3ej4>jBhFGzTc9wv`vR%~}ovRMO3!o+9c|OzE@CuzbkXe?^|LIA?7t0nd=-FOL zOnBL!uG-j8YCk`pSwP)?q5;pjLWyPPS+-@n_)>gZAfXGIDz6sLH9?^@#%gV?@r1Ah zbxk4=oJ;3&1V#XiAz3@mGR|1H(?)gjAMkC+%$+~X4v$C?* zYITS(o6l=iGKN)M1S0gMc>T`JC~A!+2c}jeK?e2C%_vyC*WX&1OlIGI>$Nx6);Bjd zA3k{a|Ni4Id?^|87-vEVM6}j2Kw~sxOmL5JMgZ11L==JpKm$6QD(^Pi-N_CD5w&g{ z0vTh-xgc=hoO3SlJf)P?I`sW?KJT{MKYQl~yGLm@Q8~GffAjIPZn!oajGsQs4bDwq zx%lYe?tF6eqqnvl+y|xB;#~L%9%(5&MoVN$VV5X{PbL2tL zZFfEI&TE~OL1b!J+uZu?gV`jj0^t=|)e*sXls-ACtni23czqyStQE8eS(e_~Tpe^f zWm#xr%SzpU_;@ra?!JEa&erD6d%d^cxT*8vkAHYL8mDvC{_TUux-55gZcgXr-r@5w zZdFwY0AUn&`zu~hTI&JN+nt3A&P15ayB&L}OBgVMG#${|N7THUUxv(WeRY&Jg5*Voto zr~mnX`49i`=aP9^li-Yi5V;iIGNE3!YhZ9*W}g56AOJ~3K~%vfg1D!$h}LN$a^z0* z3XoA#Pe8QLNqB`&zX?v8`Uh3lRb5+aX`ummqPcK!${;%P10o^@&=fcT0OyT+1PElD zHO>yK@sZ%?=aZ|rt#}TCT@n&e`>w zeX)e_BFb?6YUnGVjhAHtaHTxtt970wlJMtGQ0Xd=Xo&zWQHC$&)Xo^RgbOD~_u_j^ zaCyxX!2vQdj;uARR#nLb7*myH%9)cKfs8e^QKb}YI2;sNo=j)6$(SKpCkT9{`0=CN zBuQ8Lu_r}sc%Bsp2M5pglkM$oDT6whNgI6n(bH;HN3rO1L$7V;MOmt{H0mFI@y{sX z@BjYqHrvtB!GSR*oh2WA_~9FGywScHX;V!md0ytzWTLHVwc;=cIg?Tf--mWPG+KF4 z*lVrnboTIHKPr;>=Gss&Z)4C-$H#yC==Wr4(C=xjfh-Ym&WW7h91%F@KnwtkvkhM0 zoNJ2Ln#XO7an2cInD9@i4Twr9YpviM7(ZF`a|8s8v8t{BK}wE5aU5=LZkA=a|M>Ac zEB@-RHBt80d(&Th{Cp+iMXgJ1?%vt?;X5DrCcQoE4%*#6jz0bL)5j%`9v)AgW!Zb3 zRUAqY;?DM<-3vbY-Lqf*(aVOl+nYapv}bME@ApYmaok>CUwgbion_Oy(4iWv`E?k00^(k0Woxzk{u?`Q-`NP5 zEfmG6?l^tB>;CS8x7vZ16jd@6_jU%7MTKMY*?2yizJ6!@2k-aWarg8Ckc!va-I?AFd7w{Jo=NPr7cm--_Epi0KrR(yN`w)wNQN(5vdw>52i~ z+S&HPU|!bqOclB=l~uLVrS5p`00YLw-QmVj=eSU+9fe+iR+o>SkDP^R98}7n*K0?u zque}te$*MP24LzcYuRoX_?$o+$ABS{@5_EWjsn?l2ZCG_MXIia5P|QLbDT5DJ%OAt zLQ-W}*Tvj0(ThXI*v*~0fAv>?{hxpS^VeU$=lNZ-TuKiBt+5Q4u_VRUFd}_p1}<7w z99}1eb#B1|c+s+voFjGuBQOARMCb^Z17gm(Yi13uv2Y+FBCWMn>H_!S#7n{vu|>(l z>C`|B93nLy5exwcIC4bb>_ml;F~$)YL)KVP5HLiJ=*V5!BQ9VK%iggB6#gFjSJDT*DTwzeX*dN zu1#Y4^M~&*j2^F`=IERSasXtEwg8Tl)_I!O#^%=ACdWe}jx3HNhM3OhyU%uw^SO-k z5~{)-Rik`7+E`z4Wo?XQ+8sUHpB+wmy}r=(R=-{NQfRG{Dk<}J6>y^1l8|2R+~jDw z`{2>qyKgvcRaHNJ^vL6K(CrsRB79G9NnrQ)4|n$tZr!@=-IPHP>w81IC&30>+rC4K1{F8)Hav z7U=>GNJMpApEvqpj0q_Tz?c(qa`SP{8AG&)Wl^+REe7!D;eB6Hw;NcUOBrTmRVvF` zvCm95!h5U1-~RX=4^1bIt+7AjyiocV|KEed$qdtUCc5S*m%pz#TC2d5qAKS~ljp|< zkb43c7F9V(lvZW8>kryqyW<(s^K3q0L8s+=J|9oV&kskB_otnX>@a_pWOb!|2CUA6 zR#Fmk+Jf}GI4$z^F2--K{NSA%JN+(mHflwFH`+ZM{owA+o5RjzI!$JiI0{=~P$^s0 zs@rL=tn~XUJpek~Kiu2jE3BQ@W}JeQ6tz3+9Pj?%&DEBFxW7jnzw`Q59N@6;cRJlP zE0THUp;_Np*<4*^mb8YfFj;P?R!NfgA~Bt1_aE=4H6G9NLe(DQNYIYLRuo9a;wake zMA{l{%62zcTVFjq96fu!J4)1(=TowLeYICsxpR3dUb(Zr9eQ#ytHy_Wu_py{;GC)| z1~eS>`rWwK@{435IkOBog77_t5O^LV5{}jeZD-1&uD}1?H{bi~kKuAE%iY-{S95$EjbElQY)e#VZ7Qf<&_W}SAp>xC2#LW~WFfQ%t$jd}tyqy|A?C({n$%jUaVBulr7s5Q1}Z$ z7VrWo=yPL4T2wk+TtNPk849m-O3U_@^%Zy3gT-q-db(nxr7!pNPCMulQ}~L9j%EAz z6b^o4p6sb$4=hws=$hBiKnaX7#u_;=XKlqe5vj7$+Nk+F0bRADfH6$xnbD@Ms^ih| z;Y3umwT^Y$?UjzV()IcQg_42CH^QMcP}eF9!&b)=B5=0Pm^4NkQ*);!iYo97$<>|c zz>j!R93C7hrSd!{=YXgxOBAl{wU0;RG^^scEBXBJU`9H>adXG_rL`t6>NskLQI88K zbunCRE1~nMUR&=C);qh0W9=~XLuU$b1{rT;&WOku%NRBUgyyz!&N=7W8fz^FYyg5& z_<*cqj2UBu5OEwk=Zv++SO5@0fIX39kD@TobIy4bM`@NK!!Y3SN=qYJZ}7+GhmUrT zWOt?A?%aLr)~$gTva&^m7X;ErgY}&o;s3hwllQl__7A81wf2X{v%}|44-bnc(Y)6R ztj$+eC9i^mqe3_)rJtl_QB=maa*)DErHTIpQKn3(5b-BE^y{Y^qsff7_>tqUDUIkHQ2dvZ>7@#LsmO*e~qDb=LV z;J3%65q{339jvqkvU;9QN0YzP##cIqq zTAXv0mNNk1KpwwlbSR+L4n4+;JUuu#-krOszZrMBWm%7=quK+ih32SYgWUVOf_TzMxWuyJgmiOb=ZvEBWyT3mye)ZwUb(+Q-?X9iuutn=zT~7qV zLAS`NGMfjU7xiKAA?)tsdCthEb0PVStmi_)^<_1ACz_0N77_gA-H zdt>X)n{m(rV2pc23{Zk21nHb@q`47+oMVjtWv5Mam4*T?`H)v8@n?fE5iZ(k;S~^_ znz5bg8(#AW?4(8k8akCR##u*h;pWhYC@|*i6(`4Vp(2TdNP;s4aAM_v*wi~Lo+~12 zd@UV0T0Z0@ps;M8lM~R3U>hx5TpEG>D*$O+*bAN+K3w7gApp2b>*`mfo>%?c3@HNN1uyEd@3tKLZ7Yio*X)k+$z#Q4mWZ6=QfRH6b7YATfUyh+z;P}ZL+2c4fWVM@d7cX) zgb-y}5)l`|E#6;-6iBYM)=Hxz-G9mU-BHRh1ngKURb3)62Fw`C z8B?lGXoS2|8#bNh!(Pu1+MI$I$eHjDPwKtntSDR{j9*tBZaO__l{Kp77;J594pze9 z`buqelGlZ?B*UU~OgKeif0RFZvZw0$N8f!r^37zNSX~Z$ygBR*SBFZZRaPd)+0)0z zqtrUTlhi#`PtwV#8-+J+-%?Sxs`Vf=P*0tdwck4!XOoHuaB4%3%e`4SpU-!;cfugp zozw2K*>qg2uMJk$y#3>&!xRz~q9-zjIVpyy(n2Za^;qeU#R5^JX;C;aQ#O_|(ft4Z z@cErv^!~l=pS;t*xAuCLrJGw@mC^@JZ}bNb4vyxvGR!k%g=0bJ)yylvN*@9N0<=+7 z8*ti2ajcx3<+;<=V?uxjp2_O*`p(bZ{odb3t2d0ZKpYXtHrbZr005euo9GefTRW(` zbJYsh7nWpS5IeXsuDk4q_3bO>WhWyz5zwM%Adz#ph#bigB4><%95Mrd9KZn@5JuKSMPihBIB7A-=F=i{+Xu=eCgvtxMm9e!fiOW zrhih#a^Vno`I*vZ_ND9Q6wR?-T`A$E{Q=LNDqV?re?cEcyxx0s-CXR-E5?gQ!Efo% zg6FB!&2s2+#QmzD!YfG_!a2GbeUrH-)L4sOJj2U~rnByh^v{I=;Hs{*syx9s7uG1F zmC4ky0SMiGuifoP&&!K4FEaIp+Y-EL;PC6r%ZoAp(Hl+?PSk8jp4oj4^OZ`< zvDtM+a!{7)$+ZiNAdTBpYo4rpL3H3fQm{44yxIKCkLzHtoj#|L~uGw%+dsfmEg_@;pzg zqOkL_=#giwHO5IEatzaQ?yrc$!^4Bo^msfos_J!GwkjS!Dr>FcRvCI?9t&onanm;vth6O>u1Mc>Yu*-|DYpb1Zx7BLddD?1q_YOysBu(a(b>MlvHabaD=S6u@2BvWbEbzNJdOjYq91ben7fiEsk;8!*uou50tNC5B^ zjI3Y%C%-{S!-=mfo*R2#6g-%b*i#VO*M=OqE2Xgwk})ex7H6nDjJg#V5n@Dfm1wl5f$UAc(* zir?@VL;ux{+eT!p`3nZYWGxN84 zM))S5?Prhhcp@ear(Ve9+;lQQvMYm*5F!f0eh}=I$?id6$Zibez4cC~EjxX$({2w} z2SMl|0_TWK0P+Q6_k>Q1HEGnon-*2kRon%!XVU+tg%RLWiWXDbe99`xBCwsJaEnhaU_Ijv=xDn3x>!5 zoG})NzzM+_=dxh}H)es2k04{G00=vsorMt2xyCk92tfeIn6>DfWsF&CIcES)NZ#-l znhTYH4%nx&(Wm31x9+@t^TzgZGUCi~KX`sLIi73FqksGTov>DJJR7G)F`3P^<6h7qM_w2>0HfSwnvRd>aolm%&PGR(^xu2?^&49ovCoeV zkG1o?h=>CTZ&DOxRqA>9=;`tOr{hw);jp*9;xnjL`n{daAtLVX?&hT;=9RS*5|{{) z=`5S3S=w&3O;rS(z4_YRAdVU5S(dG>4TO+Ym1miDh{}*ML{62;DaV2+?6h00P#(|n z!_ib56NY78lzCY??n}r^)^#^mrhdB{uA}JkQih8|35JJe}8dZG;RwKd$P! z&h%t5O_HSTfi^43xiYV+szyX2FxEN(#(;A{h}t-Y?YnRM%QLF1fPm=^I^aJmL9UAO4IU_ zPaZt{^yzoM`(BwU!Pw0kHwG)K&ZumjG9($ZTHD`#bYD9L%$sKgxgeX3dl7r*_F8|? z&1$`WIBvy(WNbd46Tx^o>-1M0275DATsN}0(lQQAs@ z)|Q1b?M_Dqt%GSsOfrrh16^zD969T8){eqN%&Q_Vh#X-Yw}A1#hs*3WmUCD z^DvOJte{(4o|Khx)3h4Rt9e=@;|?vj8W<8VrH$Ym(4|EYL}6`ck`&VSiMX*25FMd1 z#@ec?6`R?^!;#WO9Q4S33Du>`wrm%Iud@|IcRBuN1neB9Ko=@P5Eg8LmrM^9z#)Pq zsJGcIl5W|SfWor< zxiaUAKVK^%yn>-{34nM>LVmrvbUJ0je)hS2WA5gcJ#2kdH5W@vVcD(&CjQ0QzJAN0 zhwF2@t|=69iMQ(Q&B1G1U2tRPO7i269#5a_ zkAMDG-=8Mgv)$v`aL=dx@w3-%uf2KqW;vebCD)8q$`wUnjB(b)VW1hTwfenIJnVUc zj`V!gWqCZBR`cZT*KU62jXRN#S&=81I+&IYyh-ki^$w252Zx7$^Rpk8wcg!-GCmsX zy1sY!=ABy`-4^G*|M1E4N4rPuc3V}Y@3Hjgu&7*R`Qfs_%eh~O!?0`>_a`*YcJj+T|x7*#}`Ud9=$rVNBg;A|-T9lI{ zi98H^xwXCFhw%UY46xYcR}TstT#WeKxd`_5U$ zvZ}NM0v&1ce9{(@q_}_o{`Y?H^j5UW@UlSAvMt-67>gnxEX)^PWGFBIMhgY6#?Fz! z`9cH4mrH9qLu8$^+Sp2KWt_3ppb5^M#QyYx&f}t@p*bi+#u`9@b3n%scw_W{fPdN? zwQNg3VcEWT&hW)z(9=wV$h{aH;-7kMpBr(01-IpzANZ0-@UNF5@lBl4z8#6&x8ZzW z?V^^tjNh*3^#yRBD_E@8>*v??etdcVIUQ+Ve%eGQ>fFv)O z{ZSeadv|N_+Il~ZLK&`T!H7$aj7blH3vj?3fnyFAYx_Xx1oz>^EZsWi068+onv7o? z#u*VIV}t+>i6J=fWMGV92%g~9=pqWM%B1roYR8PR`RJ(5d}Y-v%Rc(uAK&|)+}|JP zY2o{kF)9drAlJNGN~xv{q0vU*4cTv@t?Zm@loU>N6B-N2(;MV@Uh_kPCP*oz;LaK( z;*0@+kkS~#nXuM!&XIE=1S0-n@8BOFJTtX0SN-2B(y{{F#(Pq61U z*H=eJiPh3*(7L{{-v9AiJI|l(Wx4)`-yQ@4K6vl#*N43-;KSkI{{D!IlB^-CR=TZr z6yM%-At9feLZ+X|w2?uuD*Yo&c_*e|A|=Sf;xm}J$*kDhbp*A-NyIzAo;QNRIr zcaMU=Ti;sSTwm??x=L01&vt7?X=$Dvk2<{-WX$P$ZO|%f_webH(M+Wk74z9^>%sTm z{_Fm*|M=nkKR!NuHYP)&v(Xy#dItyllUc@PR8;lz{c&EIFz)n+VbqGP)6-QdLUlrP0zvz-pz^ybw|fUos(t=MkcH7>C;E+oA=^)Wf?d8g#;d7$qm5M%&6xisEqhQF9 zi3NuXPs|;#sUJgdFL9h$#xqMmVcA|GLWB$YCwSc`^SZ(4OLXl{#Q@I>{hj^sDuISq zk9zUcW#Td|;7SKvdWAz=@j3ijMxSdw2)cB6moDKYC6##jBVRZWAw2UI`TQPp5jUo* z1wOBN@n0;#d4*Ky3%?^5cXO|Df%uj8wa@ZNSrQYz(sBD*TdxexPRFY=sp_i`fJ>X) zRsG@8A}6^&q4Qp0A9H3_L6<&!Zf%P*AVPcMQEsi$rDI6w$Qh%ns;Z4+(~>JI-rO48 z8Lo80Ncb%)0_jQ47-I;?34n2q&AL4_G};qQ27nVvZ6hVd5RplTCmQA_@`n*J0HqWe z!#HP*Nye)OqF*b*VSjwvWg2PaZz$cKU?C7?)f) zUGXORCqr_H&By#NfIBXY)BXRQ-LAcAv*2%IxyNbXFI zzCkOb47IL2hG2oXJV^8V2O~d@Z>(s52&nU$4+A9)WRKdY;}FZxpni#o3FiAIsfVI{_U;xPPZ+nPG<9X5KU+EB+UXpNas~vDPY#~J!4g+ zG%^Bkk~4Z7 zLvu3ZE@T(ZjJnPph=`!6V6y-~)@fs_s;;V98?ufZxJD)69Fff}gdGWqfCx|Y5gGxU zMt`x9U}XFRb)XmXp!4(0XZ*TsOF&`S&XR#Exv5v>3|F&EFY#utSV6j~#^IbE?BWM| z3Mir@B6wNq`1!hz=MF@To7cjAhFvcKyUYS~@R`;>XC^b(z58F}fi*$v=kIgnU(TEq zU$A~W74da1ehFUwTEv&nDA!G(W&4T%03ZNKL_t(9&yC27PI%$dcusS==?`$Jp5+{| z1+NFM{3(+FUFUgT#*(hgsxEsUoV!csQ#k(31Qg(UkAB(y?DrflcO>_+SMw64cN(!R z@Ybt92fSBocSV0csH1l4QggfpY|e4ACKD+#18sagGep6MWH0m^GRl z5H*&xma!9V1!JsHe;`DM1VBwSG50(NTnO~Y_(JA9`1R=Ed0OrCdaEmO93a%mcosYj zrJif3i#s>BA3Q&Pe0cc&yE~qqX>ZW(h{JKu9S;bmKVaUNn9`AK~_a7FI_9lnP48W$d zdArrUedAWIw{~qVE>t5R#^ZUI7h~mPVl0z0O*hz zqm-%%oHN2H75aYQ`BhPovqFY(1V$SGV9ps;J5Pq5$9*sKQ3$~Wv$nF#=i-E9&H#z< zYNzjS4Yo=z3~_KCVYt@3e$C~XZ%%dXmz&_Sm!b)$5(7jRT!EUOk%4otC_f-N6-307 zcm^2(BgPzKjn9H$9FZ~P&0Fdc zz+LlQu?0K_9l!~v?FDbxW}>j*G>`%7 z&}rr@8LiWKKAY*hOw!`f?)3hn!`U?7Zil^I&ksZ9`yeHv9x@Kc`2)IeWn{6#$x|gVVYLYb_u-XN@sJ2qA>EmWaTZ#<Xc)Ut)k;c^$gHuhaerh0XtdEv=|)}w z5gMrlYwd|oBxA-J*RU`c=YlsIIVuZ|nD4yS?;h;_KfnAfMPb`APxDz>|Nh~_U;O6D zYj(%O`@$tt-2==nHFiF=lr!{cc=fA+)gzV)3q-jWPA(sE^`_u%ofn_Ini zU%w@tDyupQyc;{)VXHHmWaC*j&&&P8Q`Ul0==;(SfblFZJSk^Hj!0>fj7uwBB z#ktU+^Sl5cDKJpBRwfXl>4eUhd6ouYD1ARKa*s(%F3acrZnxDAIj@Z|02ZJGU_=~| zBXS}@hF`wM)3SZbL#|iZ?ZVEC@e>vH6S-J+>T!O~r~IXn-V0ltBS+3!V~sh{nq80> zK08U_h~h+u5gXkE!38>p3$XZP2Bf73)Dlowwl4$Tq*GA$G;?3T3ZJcX_yQ$iA(3$I zZFCo`5Y7x>FS8^Z0WQ3-;UY`obYbdBRj^Cj9Gr1v7nlWIy=Hs`Qoyb_0ABtS`+R6( z*_LhDmhBtX@LU}P(#wV~x~g>HDu%+9br#oxeP0|`5#ThwdkIc)I{eZLvjYMF8E^(1 zF|r(;RaG^c6|;Gk=0~IKXj)m`VpyyU`h(Rz_XU%Zc>$7Rj5TNiW6Ud-J za}H;vW{Yb>JdtlCA^>tEI0qtzC|S)ssZk!}_5b!SzucQtJ%;;x&&G#)99dD;RqcNN zaQx){AHRF=7ILaklv!~&o$jpnLZK>;fpd=^KU=R{UYol+15)Mw(fGmMbexte>!o0D zZ#{}*FO(#?Mdr44wqz&XJsyq5(=dvAZT^$@USC}q^mJBe|k916$wAAYxQ3~*!lT?{4sOt@xzC)47dBzv%Qs$)ajA2kSo_} zbyTh!Syy>Vk@wSPQKpFBP6t!%Wr0|(Q5mZVk9n3l$5dG4HxL(dbusCDE? zjwl!!a^rD27%%{)m1QUxV~7sWNKY`%XR~=SpLBL^L2Us5fj1G7HM(&b{qv4L%UZdA zkFdf*gt5ujd@z}FjuC4V85#?TMx{)H;v$?^^ba5Y;i$B)-5Iuh*<$v_`s%IiZ9j-cv+TFO z|7300bIw?!$qNJDpUtLqwH|l9xD~bH&cWeWDYdq?vKsoI?oDP{ZbdXMvg3#Qok-ps zY)io;x2-tvy;>7YN<2u4s2$w8vC;`d90b-FV{K6zhw{^>qsPzpxfjVeIw4&<^d(kB z1ssmB^Mv4n0XPCKyu8+rpC815 z(6!l}QWc;VJB>P?R0!R zpVSkk0}$lASz7y%>2y0l`_t)oV|_i(^QN0Ar8r|j5E!E^VQr~WS{s9iQgTGholWyh zN@>Z}T5&0S&Kbiv4w2!bhtL1-9u?&69105(pXR$eYrkWm~p$a|&ImO8tz~ z`rL%TP%Oj=8lnK6LYe35qhA&&&;_{QWOy}NYpqX(X6cfb#Q9Mg7jQ40WI2EctSQMu zyjW@B8kI(PiTwPx$w+PqC@kC8m6M%iv+F_DV&G#7NqpE%KL^XaJJxs zCz4mNpouo`x4Xo;J9iFr1)6XLLjkWkw<`u6yrR_i5@uoXDhPmG5k}(|(`Zp?ju*oEnZv7^iNPc#jAtYtKVok8!iwojonOG?jdpp0LVcG zhOjb*5dFyS8EDUq-5(2ZtAkz~hbTC3j>s7hasohis^WWseK%RQTZEo?TE5pH1pvVL zNnHb-YmI(bQ_f(mZAu;*H--jfXs8NKDQM~oIB)j%{n(SfR+Vv8x5a<@oi}a{`oDkt zXf(^p%8_H%C|_bAg�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�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⁣focIE2o=GHbMAu)S({?fHCKK<m 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

C0`8{c{S2e03&df61=kKXvLzZdDNMfk$ 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 literal 0 HcmV?d00001 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/images/banners/site/Elec_ErrorPage.svg b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/images/banners/site/Elec_ErrorPage.svg new file mode 100755 index 0000000..94e7b48 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/images/banners/site/Elec_ErrorPage.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/sync.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/sync.impex new file mode 100644 index 0000000..e683c0f --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/apparel-ukContentCatalog/sync.impex @@ -0,0 +1,13 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# The files in this addon are licensed under the Apache Software License, v. 2 +# except as noted otherwise in the LICENSE file. +# ----------------------------------------------------------------------- +# +$contentCatalog=apparel-uk-spaContentCatalog +$syncJob=sync $contentCatalog:Staged->Online + +UPDATE CatalogVersionSyncJob; code[unique=true]; syncPrincipals(uid)[mode=append]; syncPrincipalsOnly[default=false]; +;$syncJob;cmsmanagergroup;true \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/catalog.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/catalog.impex old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cleaning.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cleaning.impex old mode 100755 new mode 100644 index 5389142..b3be233 --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cleaning.impex +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cleaning.impex @@ -148,51 +148,8 @@ UPDATE CMSNavigationNode;uid[unique=true];title;$contentCV[unique=true,virtual=t ###### Replace JspIncludeComponent to CMSFlexComponent ###### # Remove JspIncludeComponent -REMOVE JspIncludeComponent;$contentCV[unique=true];uid[unique=true] -;;AccountAddEditAddressComponent -;;AccountAddressBookComponent -;;AccountOrderDetailsActionsComponent -;;AccountOrderDetailsHeadlineComponent -;;AccountOrderDetailsItemsComponent -;;AccountOrderDetailsOverviewComponent -;;AccountOrderDetailsShippingComponent -;;AccountOrderDetailsTotalsComponent -;;AccountOrderHistoryComponent -;;AccountPaymentDetailsComponent -;;AccountProfileComponent -;;AccountSavedCartDetailsActionComponent -;;AccountSavedCartDetailsHeadlineComponent -;;AccountSavedCartDetailsItemsComponent -;;AccountSavedCartDetailsOverviewComponent -;;AnonymousConsentManagementComponent -;;CartComponent -;;CartTotalsComponent -;;CheckoutComponent -;;CloseAccountComponent -;;ConsentManagementComponent -;;CookieNotificationComponent -;;GuestCheckoutLoginComponent -;;ImportCSVSavedCartComponent -;;NewCustomerCheckoutLoginComponent -;;NewCustomerLoginComponent -;;OrderConfirmationContinueButtonComponent -;;OrderConfirmationItemsComponent -;;OrderConfirmationOverviewComponent -;;OrderConfirmationShippingComponent -;;OrderConfirmationThankMessageComponent -;;OrderConfirmationTotalsComponent -;;PotentialPromotionsComponent -;;ProductDetailsTabComponent -;;ProductReviewsTabComponent -;;ProductSpecsTabComponent -;;PromotionsComponent -;;ReturningCustomerCheckoutLoginComponent -;;ReturningCustomerLoginComponent -;;SavedCartsComponent -;;StoreFinderComponent -;;UpdateEmailComponent -;;UpdatePasswordComponent -;;UpdateProfileComponent +REMOVE JspIncludeComponent[batchmode=true];$contentCV[unique=true];itemtype(code)[unique=true] +;;JspIncludeComponent # Create CMSFlexComponent INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef @@ -206,13 +163,11 @@ INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;fle ;;AccountOrderDetailsTotalsComponent;Account Order Details Order Totals Component;AccountOrderDetailsTotalsComponent;AccountOrderDetailsTotalsComponent ;;AccountOrderHistoryComponent;Account History Component;AccountOrderHistoryComponent;AccountOrderHistoryComponent ;;AccountPaymentDetailsComponent;Account Payment Details Component;AccountPaymentDetailsComponent;AccountPaymentDetailsComponent -;;AnonymousConsentManagementBannerComponent;Anonymous Consent Management Banner Component;AnonymousConsentManagementBannerComponent;AnonymousConsentManagementBannerComponent ;;CartComponent;Cart Display Component;CartComponent;CartComponent ;;CartTotalsComponent;Cart Totals Display Component;CartTotalsComponent;CartTotalsComponent ;;CheckoutComponent;Checkout Display Component;CheckoutComponent;CheckoutComponent ;;CloseAccountComponent;Close Account Component;CloseAccountComponent;CloseAccountComponent ;;ConsentManagementComponent;Consent Management Component;ConsentManagementComponent;ConsentManagementComponent -;;CookieNotificationComponent;Cookie Notification Component;CookieNotificationComponent;CookieNotificationComponent ;;GuestCheckoutLoginComponent;Guest Checkout Login Component;GuestCheckoutLoginComponent;GuestCheckoutLoginComponent ;;OrderConfirmationContinueButtonComponent;Order Confirmation Continue Button Component;OrderConfirmationContinueButtonComponent;OrderConfirmationContinueButtonComponent ;;OrderConfirmationItemsComponent;Order Confirmation Items Info Component;OrderConfirmationItemsComponent;OrderConfirmationItemsComponent @@ -231,11 +186,14 @@ INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;fle ;;UpdateEmailComponent;Update Email Component;UpdateEmailComponent;UpdateEmailComponent ;;UpdatePasswordComponent;Update Password Component;UpdatePasswordComponent;UpdatePasswordComponent ;;UpdateProfileComponent;Update Profile Component;UpdateProfileComponent;UpdateProfileComponent +;;CartApplyCouponComponent;Cart Apply Coupon Component;CartApplyCouponComponent;CartApplyCouponComponent +;;SaveForLaterComponent;SaveForLater Component;SaveForLaterComponent;SaveForLaterComponent + # Update slots UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid, $contentCV) ;;BodyContent-address-book;AccountAddressBookComponent -;;BodyContent-orderdetail;AccountOrderDetailsHeadlineComponent,AccountOrderDetailsOverviewComponent,AccountOrderDetailsItemsComponent,AccountOrderDetailsShippingComponent,AccountOrderDetailsTotalsComponent,AccountOrderDetailsActionsComponent +;;BodyContent-orderdetail;AccountOrderDetailsHeadlineComponent,AccountOrderDetailsOverviewComponent,AccountOrderDetailsItemsComponent,AccountOrderDetailsTotalsComponent,AccountOrderDetailsShippingComponent,AccountOrderDetailsActionsComponent ;;BodyContent-orders;AccountOrderHistoryComponent ;;BodyContent-payment-details;AccountPaymentDetailsComponent ;;BodyContentSlot-close-account;CloseAccountComponent @@ -244,17 +202,26 @@ UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid, $ ;;BodyContent-updatePassword;UpdatePasswordComponent ;;BodyContent-update-profile;UpdateProfileComponent ;;BodyContent-orderConfirmation;OrderConfirmationThankMessageComponent,OrderConfirmationOverviewComponent,OrderConfirmationItemsComponent,OrderConfirmationShippingComponent,OrderConfirmationTotalsComponent,OrderConfirmationContinueButtonComponent -;;TopContent-cartPage;CartComponent +;;TopContent-cartPage;CartComponent,SaveForLaterComponent ;;CenterLeftContentSlot-cartPage;PromotionsComponent,PotentialPromotionsComponent -;;CenterRightContentSlot-cartPage;CartTotalsComponent +;;CenterRightContentSlot-cartPage;CartTotalsComponent,CartApplyCouponComponent ;;BottomContentSlot-cartPage;CheckoutComponent,CartSuggestions ;;RightContentSlot-checkout-login;GuestCheckoutLoginComponent ;;LeftContentSlot-checkout-login;ReturningCustomerCheckoutLoginComponent ;;RightContentSlot-login; ;;LeftContentSlot-login;ReturningCustomerLoginComponent ;;MiddleContent-StoreFinderPage;StoreFinderComponent -;;FooterSlot;FooterNavigationComponent,AnonymousConsentManagementBannerComponent UPDATE CMSTabParagraphContainer;$contentCV[unique=true];uid[unique=true];simpleCMSComponents(uid, $contentCV);&componentRef ;;TabPanelContainer;ProductDetailsTabComponent,ProductSpecsTabComponent,ProductReviewsTabComponent,deliveryTab;TabPanelContainer +# CMS Assisted Service Components and Sub-Components + +REMOVE AssistedServiceComponent;$contentCV[unique=true];uid[unique=true] +;;AssistedServiceComponent + +REMOVE ASMDevicesUsedComponent;$contentCV[unique=true];uid[unique=true] +;;ASMDevicesUsedComponent + +REMOVE ASMFavoriteColorsComponent;$contentCV[unique=true];uid[unique=true] +;;ASMFavoriteColorsComponent diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content.impex old mode 100755 new mode 100644 index 4398406..98a28e9 --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content.impex +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/cms-responsive-content.impex @@ -17,10 +17,12 @@ INSERT_UPDATE Media;$contentCV[unique=true];code[unique=true];mime;realfilename; UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];previewImage(code, $contentCV) ;;homepage;homepagePreview-spa + ####### Update MiniCartSlot ###### UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid, $contentCV) ;;MiniCartSlot;MiniCart + ###### SiteContext Slot and Components ###### INSERT_UPDATE CMSSiteContextComponent;$contentCV[unique=true];uid[unique=true];name;context(code);&componentRef ;;LanguageComponent;Site Languages;LANGUAGE;LanguageComponent @@ -90,6 +92,7 @@ INSERT_UPDATE CMSParagraphComponent;$contentCV[unique=true];uid[unique=true];nam ;;ContactUsParagraphComponent;Contact Us Paragraph Component;"Contact" ;;CloseAccountParagraphComponent;Close Account Paragraph Component;"When you close your account, your profile information will be kept for the retention period mandated by the laws and regulations of your country. Customer Support will be able to assist you with any order history or proof of purchase needs during this time.

At the end of the retention period, the following profile information will be deleted and will no longer be accessible to you or anyone else:

" + INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(uid,$contentCV) ;;Section2A-Sale;Section 2A Slot for Sales Page;true;SaleParagraphComponent ;;Section2A-ContactUs;Section 2A Slot for Contact Us Page;true;ContactUsParagraphComponent @@ -100,13 +103,14 @@ INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];positi ;;Section2A-ContactUs;Section2A;contactUs;Section2A-ContactUs ;;BodyContent-close-account;BodyContent;close-account;BodyContentSlot-close-account -INSERT_UPDATE CMSLinkComponent;$contentCV[unique=true];uid[unique=true];name;url;&linkRef;&componentRef;target(code)[default='sameWindow'] +INSERT_UPDATE CMSLinkComponent;$contentCV[unique=true];uid[unique=true];name;url;&linkRef;&componentRef;target(code)[default='sameWindow'];restrictions(uid,$contentCV) ;;HelpLink;Help Link;/faq;HelpLink;HelpLink; ;;ContactUsLink;Contact Us Link;/contact;ContactUsLink;ContactUsLink -;;SaleLink;Sale Link;/sale;SaleLink;SaleLink +;;WishListLink;Wish List Link;/my-account/wishlist;WishListLink;WishListLink;;loggedInUser +;;OrdersLink;Orders Link;/my-account/orders;OrdersLink;OrdersLink;;loggedInUser INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(uid,$contentCV) -;;SiteLinksSlot;Slot contains some links;true;StoreFinderLink,SaleLink,ContactUsLink,HelpLink +;;SiteLinksSlot;Slot contains some links;true;OrdersLink,WishListLink,StoreFinderLink,ContactUsLink,HelpLink INSERT_UPDATE ContentSlotName;name[unique=true];template(uid,$contentCV)[unique=true];validComponentTypes(code);compTypeGroup(code) ;SiteLinks;ProductDetailsPageTemplate;CMSLinkComponent;; @@ -180,22 +184,34 @@ INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];positi ;;BottomContent-Errorpage;BottomContent;notFound;BottomContent-Errorpage -###### My Account Section ###### +###### My Account Navigation Section ###### # Create additional links INSERT_UPDATE CMSLinkComponent;$contentCV[unique=true];uid[unique=true];name;url;&linkRef;target(code)[default='sameWindow'] ;;SignOutLink;SignOutLink;/logout;SignOutLink; +;;NotificationPreferenceLink;Notification Preference Link;/my-account/notification-preference;NotificationPreferenceLink; +;;MyInterestsLink;My Interests Link;/my-account/my-interests;MyInterestsLink; +;;MyCouponsLink;My Coupons Link;/my-account/coupons;MyCouponsLink; + -# Create additional Navvigation Nodes +# Create additional Navigation Nodes INSERT_UPDATE CMSNavigationNode;uid[unique=true];$contentCV[unique=true];name;parent(uid, $contentCV);links(&linkRef);&nodeRef ;SignOutNavNode;;Sign Out;MyAccountNavNode;;SignOutNavNode +;WishListNavNode;;Wish List;MyAccountNavNode;;WishListNavNode +;NotificationPreferenceNavNode;;Notification Preference Nav Node;MyAccountNavNode;;NotificationPreferenceNavNode +;MyInterestsNavNode;;My Interests Nav Node;MyAccountNavNode;;MyInterestsNavNode +;MyCouponsNavNode;;Coupons Navigation Node;MyAccountNavNode;;MyCouponsNavNode # Create additional cms navigation entries INSERT_UPDATE CMSNavigationEntry;uid[unique=true];$contentCV[unique=true];name;navigationNode(&nodeRef);item(&linkRef); ;SignOutNavNodeEntry;;SignOutNavNodeEntry;SignOutNavNode;SignOutLink; +;WishListNavNodeEntry;;WishListNavNodeEntry;WishListNavNode;WishListLink; +;NotificationPreferenceNavNodeEntry;;Notification Preference Nav Node Entry;NotificationPreferenceNavNode;NotificationPreferenceLink +;MyInterestsNavNodeEntry;;MyInterests Nav Node Entry;MyInterestsNavNode;MyInterestsLink +;MyCouponsNavNodeEntry;;My Coupons Navigation Node Entry;MyCouponsNavNode;MyCouponsLink; # Set the order or the items in the My Account Menu UPDATE CMSNavigationNode;uid[unique=true];$contentCV[unique=true];children(uid,$contentCV) -;MyAccountNavNode;;OrderHistoryNavNode,AddressBookNavNode,PaymentDetailsNavNode,PersonalDetailsNavNode,ChangePasswordNavNode,UpdateEmailNavNode,ConsentManagementNavNode,CloseAccountNavNode,SignOutNavNode +;MyAccountNavNode;;OrderHistoryNavNode,WishListNavNode,AddressBookNavNode,PaymentDetailsNavNode,PersonalDetailsNavNode,ChangePasswordNavNode,UpdateEmailNavNode,ConsentManagementNavNode,CloseAccountNavNode,MyInterestsNavNode,NotificationPreferenceNavNode,MyCouponsNavNode,SignOutNavNode ###### Create Forgot/Reset Password Pages and Components ###### @@ -218,6 +234,7 @@ INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;fle UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name ;;updatePassword;My Account Update Password Page + ###### Breadcrumb in SPA ###### # remove breadcrumb from NavigationBar UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid, $contentCV) @@ -285,7 +302,6 @@ INSERT_UPDATE SearchBoxComponent;uid;minCharactersBeforeRequest;maxProducts;maxS ###### Pages related to checkout ###### - # add some ContentSlotName into MultiStepCheckoutSummaryPageTemplate INSERT_UPDATE ContentSlotName;name[unique=true];template(uid,$contentCV)[unique=true][default='MultiStepCheckoutSummaryPageTemplate'];validComponentTypes(code);compTypeGroup(code) ;BodyContent;;;wide @@ -384,9 +400,149 @@ INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;fle ;;CheckoutReviewOrderComponent;CheckoutReviewOrderComponent;CheckoutReviewOrder +###### MY-ACCOUNT ###### +## Wish List page (/my-account/wishlist) +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;WishListPage;Wish List Page;AccountPageTemplate;/my-account/wishlist + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(&componentRef) +;;BodyContentSlot-wishList;Body Content Slot for Wish List;true;WishListComponent + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;BodyContent-wishList;BodyContent;WishListPage;BodyContentSlot-wishList + +# Wish List rendering component +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;WishListComponent;WishListComponent;WishListComponent;WishListComponent + +## Notification Preference Page (/my-account/notification-preference) and My Interests Page (/my-account/my-interests) +INSERT_UPDATE ContentPage;uid[unique=true];masterTemplate(uid,$contentCV);label;name;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'];$contentCV[unique=true] +;notification-preference;AccountPageTemplate;/my-account/notification-preference;Notification Preference Page;;;; +;my-interests;AccountPageTemplate;/my-account/my-interests;My Interests Page;;;; + +INSERT_UPDATE ContentSlot;uid[unique=true];name;active;cmsComponents(uid,$contentCV);$contentCV[unique=true] +;BodyContent-Notification-Preference;Body Content Slot for Notification Preference Page;true;NotificationPreferenceComponent; +;BodyContent-My-Interests;Body Content Slot for My Interests;true;MyInterestsComponent; + +INSERT_UPDATE ContentSlotForPage;uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true];$contentCV[unique=true] +;BodyContent-Notification-Preference;BodyContent;notification-preference;BodyContent-Notification-Preference; +;BodyContent-My-Interests;BodyContent;my-interests;BodyContent-My-Interests; + +# Notification Preference & My Interests rendering components +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;NotificationPreferenceComponent;Notification Preference Component;NotificationPreferenceComponent;NotificationPreferenceComponent +;;MyInterestsComponent;Account My Interests Component;MyInterestsComponent;MyInterestsComponent + +#customer coupon +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;MyCouponsComponent;Customer Coupon List Component;MyCouponsComponent;MyCouponsComponent +;;CouponClaimComponent;Customer Coupon List Component;CouponClaimComponent;CouponClaimComponent + +INSERT_UPDATE ContentPage;uid[unique=true];masterTemplate(uid,$contentCV);label;name;title[lang=en];defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'];$contentCV[unique=true] +;coupons;AccountPageTemplate;/my-account/coupons;My Coupons Page;My Coupons;; +;couponClaim;AccountPageTemplate;/my-account/coupon/claim;My Coupon Claim Page;; + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(&componentRef) +;;BodyContent-My-Coupons;Body Content Slot for My Coupons;true;MyCouponsComponent; +;;BodyContent-My-Coupon-Claim;Body Content Slot for My Coupons Claim;true;CouponClaimComponent; + +INSERT_UPDATE ContentSlotForPage;uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true];$contentCV[unique=true] +;BodyContent-My-Coupons;BodyContent;coupons;BodyContent-My-Coupons; +;BodyContent-My-Coupon-Claim;BodyContent;couponClaim;BodyContent-My-Coupon-Claim; + +## Cancel Order Page ## +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;CancelOrderPage;Cancel Order Page;AccountPageTemplate;/my-account/order/cancel + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(&componentRef) +;;BodyContentSlot-cancelOrder;Body Content Slot for Cancel Order;true;CancelOrderComponent + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;BodyContent-cancelOrder;BodyContent;CancelOrderPage;BodyContentSlot-cancelOrder + +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;CancelOrderComponent;Cancel Order Component;CancelOrderComponent;CancelOrderComponent + +## Return Order Page ## +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;ReturnOrderPage;Return Order Page;AccountPageTemplate;/my-account/order/return + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(&componentRef) +;;BodyContentSlot-returnOrder;Body Content Slot for Return Order;true;ReturnOrderComponent + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;BodyContent-returnOrder;BodyContent;ReturnOrderPage;BodyContentSlot-returnOrder + +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;ReturnOrderComponent;Return Order Component;ReturnOrderComponent;ReturnOrderComponent + + +## Amend Order Content ## +INSERT_UPDATE CMSParagraphComponent;$contentCV[unique=true];uid[unique=true];name;content +;;CancelOrderConfirmationIntro;CancelOrderConfirmationIntro;"

The following items will be included in the cancellation request.

" +;;ReturnOrderConfirmationIntro;ReturnOrderConfirmationIntro;"

The following items will be included in the return request.

" +;;AmendOrderConfirmationOutro;AmendOrderConfirmationOutro;"

Please note that it may take a few moments for your order to reflect the request.

"; + +## Cancel Order Confirmation Page ## +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;ConfirmCancelOrderPage;Cancel Order Confirmation Page;AccountPageTemplate;/my-account/order/cancel/confirmation + +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;CancelOrderConfirmationComponent;Cancel Order Confirmation Component;CancelOrderConfirmationComponent;CancelOrderConfirmationComponent + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(uid,$contentCV) +;;BodyContentSlot-confirmCancelOrder;Body Content Slot for Cancel Order Confirmation;true;CancelOrderConfirmationIntro,CancelOrderConfirmationComponent,AmendOrderConfirmationOutro + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;BodyContent-confirmCancelOrder;BodyContent;ConfirmCancelOrderPage;BodyContentSlot-confirmCancelOrder + +## Return Order Confirmation Page ## +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;ConfirmReturnOrderPage;Return Order Confirmation Page;AccountPageTemplate;/my-account/order/return/confirmation + +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;ReturnOrderConfirmationComponent;Return Order Confirmation Component;ReturnOrderConfirmationComponent;ReturnOrderConfirmationComponent + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(uid,$contentCV) +;;BodyContentSlot-confirmReturnOrder;Body Content Slot for Return Order Confirmation;true;ReturnOrderConfirmationIntro,ReturnOrderConfirmationComponent,AmendOrderConfirmationOutro + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;BodyContent-confirmReturnOrder;BodyContent;ConfirmReturnOrderPage;BodyContentSlot-confirmReturnOrder + +## Return Request Details page ## +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;ReturnRequestDetailsPage;Return Request Details Page;AccountPageTemplate;/my-account/return-request + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(&componentRef) +;;BodyContentSlot-returnRequestDetails;Body Content Slot for Return Request Details;true;ReturnRequestOverviewComponent,ReturnRequestItemsComponent,ReturnRequestTotalsComponent + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;BodyContent-returnRequestDetails;BodyContent;ReturnRequestDetailsPage;BodyContentSlot-returnRequestDetails + +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;ReturnRequestOverviewComponent;Return Request Details Overview Component;ReturnRequestOverviewComponent;ReturnRequestOverviewComponent +;;ReturnRequestItemsComponent;Return Request Details Items Component;ReturnRequestItemsComponent;ReturnRequestItemsComponent +;;ReturnRequestTotalsComponent;Return Request Details Totals Component;ReturnRequestTotalsComponent;ReturnRequestTotalsComponent + +## OrderHistory Tab ## +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;OrderReturnRequestListComponent;Order Return Request List Component;OrderReturnRequestListComponent;OrderReturnRequestListComponent + +INSERT_UPDATE CMSTabParagraphContainer;$contentCV[unique=true];uid[unique=true];simpleCMSComponents(uid, $contentCV);&componentRef +;;AccountOrderHistoryTabContainer;AccountOrderHistoryComponent,OrderReturnRequestListComponent;AccountOrderHistoryTabContainer + +# Make AccountOrderDetailsActionsComponent invisible +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];visible +;;AccountOrderDetailsActionsComponent;true + +# Make the order history page contain tabs +UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid, $contentCV) +;;BodyContent-orders;AccountOrderHistoryTabContainer + + ###### Product Details ###### INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;cmsComponents(uid, $contentCV) -;;ProductSummarySlot;Summary for product details;ProductIntroComponent,ProductImagesComponent,ProductSummaryComponent,VariantSelector,AddToCart +;;ProductSummarySlot;Summary for product details;ProductImagesComponent,ProductIntroComponent,ProductSummaryComponent,VariantSelector,AddToCart,AddToWishListComponent,StockNotificationComponent INSERT_UPDATE ContentSlotForTemplate;$contentCV[unique=true];uid[unique=true];position[unique=true];pageTemplate(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true];allowOverwrite ;;Summary-ProductDetails;Summary;ProductDetailsPageTemplate;ProductSummarySlot;true @@ -398,17 +554,20 @@ INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;fle ;;ProductImagesComponent;ProductImagesComponent;ProductImagesComponent ;;ProductIntroComponent;ProductIntroComponent;ProductIntroComponent ;;ProductSummaryComponent;ProductSummaryComponent;ProductSummaryComponent - - -###### ASM ###### -INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef -;;AsmComponent;asm flex component;AsmComponent;AsmComponent - -INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];active;cmsComponents(&componentRef)[mode=append] -;;TopHeaderSlot;true;AsmComponent +;;AddToWishListComponent;AddToWishListComponent;AddToWishListComponent +;;StockNotificationComponent;StockNotificationComponent;StockNotificationComponent ###### Anonymous Consents ###### - INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef;restrictions(uid,$contentCV) ;;AnonymousConsentManagementBannerComponent;Anonymous Consent Management Banner Component;AnonymousConsentManagementBannerComponent;AnonymousConsentManagementBannerComponent;anonymousUserRestriction +;;AnonymousConsentOpenDialogComponent;Anonymous Consent Open Dialog Component;AnonymousConsentOpenDialogComponent;AnonymousConsentOpenDialogComponent;anonymousUserRestriction + + +###### Footer ###### +# Footer notice +INSERT_UPDATE CMSParagraphComponent;$contentCV[unique=true];uid[unique=true];name;&componentRef; +;;NoticeTextParagraph;Notice Text Paragraph;NoticeTextParagraph; + +UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid, $contentCV) +;;FooterSlot;FooterNavigationComponent,AnonymousConsentOpenDialogComponent,NoticeTextParagraph,AnonymousConsentManagementBannerComponent diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content.impex old mode 100755 new mode 100644 index 39f1c2e..1446c5f --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content.impex +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/email-content.impex @@ -8,7 +8,15 @@ # # Import the CMS content for the Electronics site emails # -# CMS components velocity templates +$contentCatalog=electronics-spaContentCatalog +$contentCV=catalogVersion(CatalogVersion.catalog(Catalog.id[default=$contentCatalog]),CatalogVersion.version[default=Staged])[default=$contentCatalog:Staged] +$lang=en +$wideContent=CMSImageComponent,BannerComponent + +UPDATE GenericItem[processor=de.hybris.platform.commerceservices.impex.impl.ConfigPropertyImportProcessor];pk[unique=true] +$emailResource=$config-emailResourceValue + +###### CMS components velocity templates ###### INSERT_UPDATE RendererTemplate;code[unique=true];contextClass;rendererType(code)[default='velocity'] ;electronics-spa-CMSImageComponent-template;java.util.Map ;electronics-spa-BannerComponent-template;java.util.Map @@ -16,16 +24,68 @@ INSERT_UPDATE RendererTemplate;code[unique=true];contextClass;rendererType(code) ;electronics-spa-CMSLinkComponent-template;java.util.Map ;electronics-spa-CMSParagraphComponent-template;java.util.Map -UPDATE GenericItem[processor=de.hybris.platform.commerceservices.impex.impl.ConfigPropertyImportProcessor];pk[unique=true] -$emailResource=$config-emailResourceValue -# Language -$lang=en - -# CMS components and Email velocity templates +###### CMS components and Email velocity templates ###### UPDATE RendererTemplate;code[unique=true];description[lang=$lang];templateScript[lang=$lang,translator=de.hybris.platform.commerceservices.impex.impl.FileLoaderValueTranslator] - ;electronics-spa-BannerComponent-template;"CMSBannerComponent Template";$emailResource/email-bannerComponentTemplate.vm - ;electronics-spa-CMSImageComponent-template;"CMSImageComponent Template";$emailResource/email-cmsImageComponentTemplate.vm - ;electronics-spa-CMSLinkComponent-template;"CMSLinkComponent Template";$emailResource/email-cmsLinkComponentTemplate.vm - ;electronics-spa-CMSParagraphComponent-template;"CMSParagraphComponent Template";$emailResource/email-cmsParagraphComponentTemplate.vm - ;electronics-spa-SimpleBannerComponent-template;"CMSSimpleBannerComponent Template";$emailResource/email-bannerComponentTemplate.vm \ No newline at end of file +;electronics-spa-BannerComponent-template;"CMSBannerComponent Template";$emailResource/email-bannerComponentTemplate.vm +;electronics-spa-CMSImageComponent-template;"CMSImageComponent Template";$emailResource/email-cmsImageComponentTemplate.vm +;electronics-spa-CMSLinkComponent-template;"CMSLinkComponent Template";$emailResource/email-cmsLinkComponentTemplate.vm +;electronics-spa-CMSParagraphComponent-template;"CMSParagraphComponent Template";$emailResource/email-cmsParagraphComponentTemplate.vm +;electronics-spa-SimpleBannerComponent-template;"CMSSimpleBannerComponent Template";$emailResource/email-bannerComponentTemplate.vm + + +###### Email CMS data for stock notification ###### +$emailPackageName=de.hybris.platform.stocknotificationfacades.process.email.context + +# Email page Template +INSERT_UPDATE EmailPageTemplate;$contentCV[unique=true];uid[unique=true];name;active;frontendTemplateName;subject(code);htmlTemplate(code);restrictedPageTypes(code) +;;ProductBackInStockNotificationEmailTemplate;Product Back In Stock Email Template;true;productBackInStockNotificationEmailTemplate;electronics_Email_Product_Back_In_Stock_Subject;electronics_Email_Product_Back_In_Stock_Body;EmailPage + +INSERT_UPDATE ContentSlotName;name[unique=true];template(uid,$contentCV)[unique=true][default='ProductBackInStockNotificationEmailTemplate'];validComponentTypes(code) +;SiteLogo;;;$wideContent; +;TopContent;;$wideContent; +;BottomContent;;$wideContent; + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(uid,$contentCV) +;;ProductBackInStockNotificationEmailTopSlot;Default ProductBackInStockNotification Email Top Slot;true;EmailBannerSaleNowOnImage + +# Bind Content Slots to Email Page Templates +INSERT_UPDATE ContentSlotForTemplate;$contentCV[unique=true];uid[unique=true];position[unique=true];pageTemplate(uid,$contentCV)[unique=true][default='ProductBackInStockNotificationEmailTemplate'];contentSlot(uid,$contentCV)[unique=true];allowOverwrite +;;SiteLogo-ProductBackInStockNotificationEmail;SiteLogo;;EmailSiteLogoSlot;true +;;TopContent-ProductBackInStockNotificationEmail;TopContent;;ProductBackInStockNotificationEmailTopSlot;true +;;BottomContent-ProductBackInStockNotificationEmail;BottomContent;;EmailBottomSlot;true + +# Email Pages +INSERT_UPDATE EmailPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);defaultPage;approvalStatus(code)[default='approved'];previewImage(code, $contentCV)[default='EmailPageModel_preview'] +;;ProductBackInStockNotificationEmail;Product Back In Stock Notification Email;ProductBackInStockNotificationEmailTemplate;true + +# Email velocity templates +INSERT_UPDATE RendererTemplate;code[unique=true];contextClass;rendererType(code)[default='velocity'] +;electronics_Email_Product_Back_In_Stock_Body;$emailPackageName.BackInStockNotificationEmailContext +;electronics_Email_Product_Back_In_Stock_Subject;$emailPackageName.BackInStockNotificationEmailContext + + +###### Email CMS data for customer coupon ###### +$emailPackageName-mycoupons=de.hybris.platform.customercouponfacades.process.email.context + +# Email page Template +INSERT_UPDATE EmailPageTemplate;$contentCV[unique=true];uid[unique=true];name;active;frontendTemplateName;subject(code);htmlTemplate(code);restrictedPageTypes(code) +;;CustomerCouponEmailTemplate;Customer Coupon Alert Template;true;customerCounponEmail;electronics_Email_Customer_Customer_Coupon_Subject;electronics_Email_Customer_Customer_Coupon_Body;EmailPage + +INSERT_UPDATE ContentSlotName;name[unique=true];template(uid,$contentCV)[unique=true][default='CustomerCouponEmailTemplate'];validComponentTypes(code) +;SiteLogo;;logo +;TopContent;;$wideContent +;BottomContent;;$wideContent + +# Bind Content Slots to Email Page Templates +INSERT_UPDATE ContentSlotForTemplate;$contentCV[unique=true];uid[unique=true];position[unique=true];pageTemplate(uid,$contentCV)[unique=true][default='CustomerCouponEmailTemplate'];contentSlot(uid,$contentCV)[unique=true];allowOverwrite +;;SiteLogo-CustomerCouponEmailTemplate;SiteLogo;;EmailSiteLogoSlot;true + +# Email Pages +INSERT_UPDATE EmailPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);defaultPage;approvalStatus(code)[default='approved'] +;;CustomerCouponEmail;Customer Coupon Email;CustomerCouponEmailTemplate;true; + +# Email velocity templates +INSERT_UPDATE RendererTemplate;code[unique=true];contextClass;rendererType(code)[default='velocity'] +;electronics_Email_Customer_Customer_Coupon_Subject;$emailPackageName-mycoupons.CouponNotificationEmailContext +;electronics_Email_Customer_Customer_Coupon_Body;$emailPackageName-mycoupons.CouponNotificationEmailContext diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/images/Homepage.png b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/images/Homepage.png old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/solr.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/solr.impex new file mode 100644 index 0000000..6df1bc0 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/solr.impex @@ -0,0 +1,11 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# The files in this addon are licensed under the Apache Software License, v. 2 +# except as noted otherwise in the LICENSE file. +# ----------------------------------------------------------------------- + +## add the right display provider for allCategory index property +UPDATE SolrIndexedProperty;name[unique=true];solrIndexedType(identifier)[unique=true];facetDisplayNameProvider(code) +;allCategories;electronicsProductType;categoryFacetDisplayNameProvider diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/sync.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/sync.impex old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/test-data.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/test-data.impex deleted file mode 100755 index 1a4ca3f..0000000 --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/electronicsContentCatalog/test-data.impex +++ /dev/null @@ -1,29 +0,0 @@ -INSERT_UPDATE Customer;groups(uid);uid[unique=true];name;password[default='Password123.'];customerId -;customergroup;test-user-with-orders@ydev.hybris.com;Test User;;test-user-with-orders@ydev.hybris.com; - -INSERT_UPDATE Address;owner(Customer.uid)[unique=true];streetname[unique=true];postalcode;town[default='Washington'];region(isocode)[default='US-WA'];country(isocode)[default='US'];shippingAddress[default=true];firstname;lastname;title(code)[default='mr'] -;test-user-with-orders@ydev.hybris.com;Address line0;100000;;;;;User;Test; - - -INSERT_UPDATE Order;code[unique=true];user(uid);date[dateformat=dd.MM.yyyy HH:mm];currency(isocode)[default='USD'];net[default=false];deliveryMode(code)[default='standard-gross'];Discounts(code);calculated[default=false];store(uid);site(uid);deliveryCost;totalPrice -;100000;test-user-with-orders@ydev.hybris.com;10.01.2019 10:40;;;;;;electronics;;5.26;754.66 -;100001;test-user-with-orders@ydev.hybris.com;10.01.2019 10:40;;;;;;electronics;;7.9;655.55 - -INSERT_UPDATE OrderEntry;order(code)[unique=true];product(code,catalogVersion(catalog(id),version))[unique=true];quantity[default=1];calculated[default=true];unit(code)[default='pieces'];entryNumber;basePrice;totalPrice -;100000;300938:electronicsProductCatalog:Online;;;;0;114.12;114.12 -;100000;1992693:electronicsProductCatalog:Online;;;;1;541.34;541.43 -;100000;1377492:electronicsProductCatalog:Online;;;;2;79.11;79.11 -;100001;300938:electronicsProductCatalog:Online;;;;0;114.12;114.12 -;100001;1992693:electronicsProductCatalog:Online;;;;1;541.34;541.43 - - -INSERT_UPDATE Consignment;code[unique=true];status(code)[default='SHIPPED'];order(code);shippingAddress(owner(Customer.uid));warehouse(code);trackingID;carrierDetails(code)[default='MockCarrier'] -;100000a;;100000;test-user-with-orders@ydev.hybris.com;warehouse_e;2019031500001; -;100000b;;100000;test-user-with-orders@ydev.hybris.com;warehouse_s;;; -;100000c;WAITING;100000;test-user-with-orders@ydev.hybris.com;warehouse_n;;; - - -INSERT_UPDATE ConsignmentEntry;consignment(code)[unique=true];orderEntry(order(code),entryNumber);quantity[default=1];shippedQuantity[default=1] -;100000a;100000:0 -;100000b;100000:1 -;100000c;100000:2 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/catalog.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/catalog.impex old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cleaning.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cleaning.impex old mode 100755 new mode 100644 index 4dd5a72..7e21883 --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cleaning.impex +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cleaning.impex @@ -136,44 +136,8 @@ REMOVE CMSLinkComponent;$contentCV[unique=true];uid[unique=true] ###### Replace JspIncludeComponent to CMSFlexComponent ###### # Remove JspIncludeComponent -REMOVE JspIncludeComponent;$contentCV[unique=true];uid[unique=true] -;;AccountAddEditAddressComponent -;;AccountAddressBookComponent -;;AccountOrderDetailsHeadlineComponent -;;AccountOrderDetailsItemsComponent -;;AccountOrderDetailsOverviewComponent -;;AccountOrderDetailsShippingComponent -;;AccountOrderDetailsTotalsComponent -;;AccountOrderDetailsReorderComponent -;;AccountOrderDetailsApprovalDetailsComponent -;;AccountOrderHistoryComponent -;;AccountPaymentDetailsComponent -;;AccountSavedCartDetailsActionComponent -;;AccountSavedCartDetailsHeadlineComponent -;;AccountSavedCartDetailsItemsComponent -;;AccountSavedCartDetailsOverviewComponent -;;CartComponent -;;CartTotalsComponent -;;CheckoutComponent -;;ImportCSVSavedCartComponent -;;OrderConfirmationContinueButtonComponent -;;OrderConfirmationItemsComponent -;;OrderConfirmationOverviewComponent -;;OrderConfirmationShippingComponent -;;OrderConfirmationThankMessageComponent -;;OrderConfirmationTotalsComponent -;;PotentialPromotionsComponent -;;ProductDetailsTabComponent -;;ProductReviewsTabComponent -;;ProductSpecsTabComponent -;;PromotionsComponent -;;ReturningCustomerCheckoutLoginComponent -;;ReturningCustomerLoginComponent -;;SavedCartsComponent -;;StoreFinderComponent -;;UpdateEmailComponent -;;UpdatePasswordComponent -;;UpdateProfileComponent +REMOVE JspIncludeComponent[batchmode=true];$contentCV[unique=true];itemtype(code)[unique=true] +;;JspIncludeComponent # Create CMSFlexComponent INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef @@ -208,6 +172,7 @@ INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;fle ;;UpdateEmailComponent;Update Email Component;UpdateEmailComponent;UpdateEmailComponent ;;UpdatePasswordComponent;Update Password Component;UpdatePasswordComponent;UpdatePasswordComponent ;;UpdateProfileComponent;Update Profile Component;UpdateProfileComponent;UpdateProfileComponent +;;CartApplyCouponComponent;Cart Apply Coupon Component;CartApplyCouponComponent;CartApplyCouponComponent # Update slots UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid, $contentCV) @@ -221,7 +186,7 @@ UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid, $ ;;BodyContent-orderConfirmation;OrderConfirmationThankMessageComponent,OrderConfirmationOverviewComponent,OrderConfirmationItemsComponent,OrderConfirmationShippingComponent,OrderConfirmationTotalsComponent,OrderConfirmationContinueButtonComponent ;;TopContent-cartPage;CartComponent ;;CenterLeftContentSlot-cartPage;PromotionsComponent,PotentialPromotionsComponent -;;CenterRightContentSlot-cartPage;CartTotalsComponent +;;CenterRightContentSlot-cartPage;CartTotalsComponent,CartApplyCouponComponent ;;BottomContentSlot-cartPage;CheckoutComponent,CartSuggestions ;;LeftContentSlot-checkout-login;ReturningCustomerCheckoutLoginComponent ;;LeftContentSlot-login;ReturningCustomerLoginComponent @@ -230,3 +195,13 @@ UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid, $ UPDATE CMSTabParagraphContainer;$contentCV[unique=true];uid[unique=true];simpleCMSComponents(uid, $contentCV);&componentRef ;;TabPanelContainer;ProductDetailsTabComponent,ProductSpecsTabComponent,ProductReviewsTabComponent,deliveryTab;TabPanelContainer +# CMS Assisted Service Components and Sub-Components + +REMOVE AssistedServiceComponent;$contentCV[unique=true];uid[unique=true] +;;AssistedServiceComponent + +REMOVE ASMDevicesUsedComponent;$contentCV[unique=true];uid[unique=true] +;;ASMDevicesUsedComponent + +REMOVE ASMFavoriteColorsComponent;$contentCV[unique=true];uid[unique=true] +;;ASMFavoriteColorsComponent diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content.impex old mode 100755 new mode 100644 index b7f5f52..6deffc8 --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content.impex +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/cms-responsive-content.impex @@ -17,10 +17,12 @@ INSERT_UPDATE Media;$contentCV[unique=true];code[unique=true];mime;realfilename; UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];previewImage(code, $contentCV) ;;homepage;homepagePreview-spa + ####### Update MiniCartSlot ###### UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid, $contentCV) ;;MiniCartSlot;MiniCart + ###### SiteContext Slot and Components ###### INSERT_UPDATE CMSSiteContextComponent;$contentCV[unique=true];uid[unique=true];name;context(code);&componentRef ;;LanguageComponent;Site Languages;LANGUAGE;LanguageComponent @@ -97,13 +99,14 @@ INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];positi ;;Section2A-Sale;Section2A;sale;Section2A-Sale ;;Section2A-ContactUs;Section2A;contactUs;Section2A-ContactUs -INSERT_UPDATE CMSLinkComponent;$contentCV[unique=true];uid[unique=true];name;url;&linkRef;&componentRef;target(code)[default='sameWindow'] +INSERT_UPDATE CMSLinkComponent;$contentCV[unique=true];uid[unique=true];name;url;&linkRef;&componentRef;target(code)[default='sameWindow'];restrictions(uid,$contentCV) ;;HelpLink;Help Link;/faq;HelpLink;HelpLink; ;;ContactUsLink;Contact Us Link;/contact;ContactUsLink;ContactUsLink -;;SaleLink;Sale Link;/sale;SaleLink;SaleLink +;;WishListLink;Wish List Link;/my-account/wishlist;WishListLink;WishListLink;;loggedInUser +;;OrdersLink;Orders Link;/my-account/orders;OrdersLink;OrdersLink;;loggedInUser INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(uid,$contentCV) -;;SiteLinksSlot;Slot contains some links;true;StoreFinderLink,SaleLink,ContactUsLink,HelpLink +;;SiteLinksSlot;Slot contains some links;true;OrdersLink,WishListLink,StoreFinderLink,ContactUsLink,HelpLink INSERT_UPDATE ContentSlotName;name[unique=true];template(uid,$contentCV)[unique=true];validComponentTypes(code);compTypeGroup(code) ;SiteLinks;ProductDetailsPageTemplate;CMSLinkComponent;; @@ -177,25 +180,27 @@ INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];positi ;;BottomContent-Errorpage;BottomContent;notFound;BottomContent-Errorpage -###### My Account Section ###### +###### My Account Navigation Section ###### # Create additional links INSERT_UPDATE CMSLinkComponent;$contentCV[unique=true];uid[unique=true];name;url;&linkRef;target(code)[default='sameWindow'] ;;SignOutLink;SignOutLink;/logout;SignOutLink; -# Create additional Navvigation Nodes +# Create additional Navigation Nodes INSERT_UPDATE CMSNavigationNode;uid[unique=true];$contentCV[unique=true];name;parent(uid, $contentCV);links(&linkRef);&nodeRef ;SignOutNavNode;;Sign Out;MyAccountNavNode;;SignOutNavNode +;WishListNavNode;;Wish List;MyAccountNavNode;;WishListNavNode # Create additional cms navigation entries INSERT_UPDATE CMSNavigationEntry;uid[unique=true];$contentCV[unique=true];name;navigationNode(&nodeRef);item(&linkRef); ;SignOutNavNodeEntry;;SignOutNavNodeEntry;SignOutNavNode;SignOutLink; +;WishListNavNodeEntry;;WishListNavNodeEntry;WishListNavNode;WishListLink; # Set the order or the items in the My Account Menu #UPDATE CMSNavigationNode;uid[unique=true];$contentCV[unique=true];children(uid,$contentCV) -#;MyAccountNavNode;;PersonalDetailsNavNode,UpdateEmailNavNode,PaymentDetailsNavNode,UpdatePasswordNavNode,OrderHistoryNavNode,AddressBookNavNode,MyQuotesNavNode,ApprovalDashboardNavNode,MyReplenishmentOrdersNavNode,SignOutNavNode +#;MyAccountNavNode;;PersonalDetailsNavNode,UpdateEmailNavNode,PaymentDetailsNavNode,UpdatePasswordNavNode,OrderHistoryNavNode,AddressBookNavNode,MyQuotesNavNode,ApprovalDashboardNavNode,MyReplenishmentOrdersNavNode,WishListNavNode,SignOutNavNode -###### make Product grid, Search grid page default ######## +###### Make Product grid, Search grid page default ######## UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];defaultPage ;;search;true ;;searchGrid;false @@ -225,6 +230,7 @@ INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;fle UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name ;;updatePassword;My Account Update Password Page + ###### Breadcrumb in SPA ###### # remove breadcrumb from NavigationBar UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid, $contentCV) @@ -241,6 +247,7 @@ INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;cmsCompo INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV);contentSlot(uid,$contentCV)[unique=true] ;;BottomHeaderSlot-homepage;BottomHeaderSlot;homepage;HomepageBottomHeaderSlot + ###### Create Register Page ###### INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] ;;register;Register Page;AccountPageTemplate;/login/register @@ -279,7 +286,6 @@ INSERT_UPDATE SearchBoxComponent;uid;minCharactersBeforeRequest;maxProducts;maxS ###### Pages related to checkout ###### - # add some ContentSlotName into MultiStepCheckoutSummaryPageTemplate INSERT_UPDATE ContentSlotName;name[unique=true];template(uid,$contentCV)[unique=true][default='MultiStepCheckoutSummaryPageTemplate'];validComponentTypes(code);compTypeGroup(code) ;BodyContent;;;wide @@ -378,9 +384,103 @@ INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;fle ;;CheckoutReviewOrderComponent;CheckoutReviewOrderComponent;CheckoutReviewOrder +###### MY-ACCOUNT ###### +## Wish List page (/my-account/wishlist) +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;WishListPage;Wish List Page;AccountPageTemplate;/my-account/wishlist + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(&componentRef) +;;BodyContentSlot-wishList;Body Content Slot for Wish List;true;WishListComponent + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;BodyContent-wishList;BodyContent;WishListPage;BodyContentSlot-wishList + +# Wish List rendering component +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;WishListComponent;WishListComponent;WishListComponent;WishListComponent + +## Cancel Order Page ## +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;CancelOrderPage;Cancel Order Page;AccountPageTemplate;/my-account/order/cancel + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(&componentRef) +;;BodyContentSlot-cancelOrder;Body Content Slot for Cancel Order;true;CancelOrderComponent + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;BodyContent-cancelOrder;BodyContent;CancelOrderPage;BodyContentSlot-cancelOrder + +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;CancelOrderComponent;Cancel Order Component;CancelOrderComponent;CancelOrderComponent + +## Return Order Page ## +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;ReturnOrderPage;Return Order Page;AccountPageTemplate;/my-account/order/return + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(&componentRef) +;;BodyContentSlot-returnOrder;Body Content Slot for Return Order;true;ReturnOrderComponent + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;BodyContent-returnOrder;BodyContent;ReturnOrderPage;BodyContentSlot-returnOrder + +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;ReturnOrderComponent;Return Order Component;ReturnOrderComponent;ReturnOrderComponent + +## Cancel Order Confirmation Page ## +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;ConfirmCancelOrderPage;Cancel Order Confirmation Page;AccountPageTemplate;/my-account/order/cancel/confirmation + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(&componentRef) +;;BodyContentSlot-confirmCancelOrder;Body Content Slot for Cancel Order Confirmation;true;CancelOrderConfirmationComponent + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;BodyContent-confirmCancelOrder;BodyContent;ConfirmCancelOrderPage;BodyContentSlot-confirmCancelOrder + +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;CancelOrderConfirmationComponent;Cancel Order Confirmation Component;CancelOrderConfirmationComponent;CancelOrderConfirmationComponent + +## Return Order Confirmation Page ## +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;ConfirmReturnOrderPage;Return Order Confirmation Page;AccountPageTemplate;/my-account/order/return/confirmation + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(&componentRef) +;;BodyContentSlot-confirmReturnOrder;Body Content Slot for Return Order Confirmation;true;ReturnOrderConfirmationComponent + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;BodyContent-confirmReturnOrder;BodyContent;ConfirmReturnOrderPage;BodyContentSlot-confirmReturnOrder + +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;ReturnOrderConfirmationComponent;Return Order Confirmation Component;ReturnOrderConfirmationComponent;ReturnOrderConfirmationComponent + +## Return Request Details page ## +INSERT_UPDATE ContentPage;$contentCV[unique=true];uid[unique=true];name;masterTemplate(uid,$contentCV);label;defaultPage[default='true'];approvalStatus(code)[default='approved'];homepage[default='false'] +;;ReturnRequestDetailsPage;Return Request Details Page;AccountPageTemplate;/my-account/return-request + +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;active;cmsComponents(&componentRef) +;;BodyContentSlot-returnRequestDetails;Body Content Slot for Return Request Details;true;ReturnRequestOverviewComponent,ReturnRequestItemsComponent,ReturnRequestTotalsComponent + +INSERT_UPDATE ContentSlotForPage;$contentCV[unique=true];uid[unique=true];position[unique=true];page(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true] +;;BodyContent-returnRequestDetails;BodyContent;ReturnRequestDetailsPage;BodyContentSlot-returnRequestDetails + +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;ReturnRequestOverviewComponent;Return Request Details Overview Component;ReturnRequestOverviewComponent;ReturnRequestOverviewComponent +;;ReturnRequestItemsComponent;Return Request Details Items Component;ReturnRequestItemsComponent;ReturnRequestItemsComponent +;;ReturnRequestTotalsComponent;Return Request Details Totals Component;ReturnRequestTotalsComponent;ReturnRequestTotalsComponent + +## OrderHistory Tab ## +INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef +;;OrderReturnRequestListComponent;Order Return Request List Component;OrderReturnRequestListComponent;OrderReturnRequestListComponent + +INSERT_UPDATE CMSTabParagraphContainer;$contentCV[unique=true];uid[unique=true];simpleCMSComponents(uid, $contentCV);&componentRef +;;AccountOrderHistoryTabContainer;AccountOrderHistoryComponent,OrderReturnRequestListComponent;AccountOrderHistoryTabContainer + +# Make the order history page contain tabs +UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid, $contentCV) +;;BodyContent-orders;AccountOrderHistoryTabContainer + + ###### Product Details ###### INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];name;cmsComponents(uid, $contentCV) -;;ProductSummarySlot;Summary for product details;ProductIntroComponent,ProductImagesComponent,ProductSummaryComponent,VariantSelector,AddToCart +;;ProductSummarySlot;Summary for product details;ProductImagesComponent,ProductIntroComponent,ProductSummaryComponent,VariantSelector,AddToCart,AddToWishListComponent INSERT_UPDATE ContentSlotForTemplate;$contentCV[unique=true];uid[unique=true];position[unique=true];pageTemplate(uid,$contentCV)[unique=true];contentSlot(uid,$contentCV)[unique=true];allowOverwrite ;;Summary-ProductDetails;Summary;ProductDetailsPageTemplate;ProductSummarySlot;true @@ -392,11 +492,4 @@ INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;fle ;;ProductImagesComponent;ProductImagesComponent;ProductImagesComponent ;;ProductIntroComponent;ProductIntroComponent;ProductIntroComponent ;;ProductSummaryComponent;ProductSummaryComponent;ProductSummaryComponent - -###### ASM ###### -INSERT_UPDATE CMSFlexComponent;$contentCV[unique=true];uid[unique=true];name;flexType;&componentRef -;;AsmComponent;asm flex component;AsmComponent;AsmComponent - -INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];active;cmsComponents(&componentRef)[mode=append] -;;TopHeaderSlot;true;AsmComponent - +;;AddToWishListComponent;AddToWishListComponent;AddToWishListComponent diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/email-content.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/email-content.impex old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/images/Homepage.png b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/images/Homepage.png old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/sync.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/contentCatalogs/powertoolsContentCatalog/sync.impex old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/emails/email-customerCouponBody.vm b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/emails/email-customerCouponBody.vm new file mode 100644 index 0000000..0c04d68 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/emails/email-customerCouponBody.vm @@ -0,0 +1,98 @@ +## messageSource=classpath:/spartacussampledataaddon/messages/email-customerCoupon_$lang.properties +#macro(genHtmlLinkStartTag $url) +
+#end +#macro(genHtmlLinkEndTag) + +#end +#macro(genHtmlLink $url $textColor $bodyContent) +$bodyContent +#end +#macro( genHtmlBoldFont $text ) +$text +#end + + + + +   + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ ${ctx.cmsSlotContents.SiteLogo} + +
+ ${ctx.messages.myAccount} | ${ctx.messages.storeFinder}    +
 
+ #set ($spaceHolderPosition = "") + #set ($secureAccountUrl = "${ctx.secureBaseUrl}/my-account") + #set ($securePswdResetUrl = "${ctx.secureBaseUrl}/login/pw/request/external") + #set ($mailToUrl = "mailto:${ctx.messages.contactUsEmailAddress}") + #if(${ctx.baseSite.Uid} == "electronics") + #set ($instructionsContactUs = ${ctx.messages.getMessage('instructionsContactUs_electronics', "#genHtmlLinkStartTag(${ctx.messages.contactUsPage})", "#genHtmlLinkEndTag()", "#genHtmlLink($mailToUrl '#666666' ${ctx.messages.contactUsEmailAddress})")} ) + #else + #set ($faqPage = "${ctx.baseUrl}/faq") + #set ( $instructionsContactUs = ${ctx.messages.getMessage('instructionsContactUs', "#genHtmlLinkStartTag($faqPage)", "#genHtmlLinkEndTag()", "#genHtmlLinkStartTag(${ctx.messages.contactUsPage})", "#genHtmlLinkEndTag()", "#genHtmlLink($mailToUrl '#666666' ${ctx.messages.contactUsEmailAddress})")} ) + #end +

${ctx.messages.getMessage('salutation',$ctx.title,$ctx.displayName)},

+

${ctx.messages.getMessage(${ctx.couponNotificationType})}!

+

${ctx.messages.getMessage('validityDate')}
+ #if (${ctx.startDateYear} == "1970" && ${ctx.endDateYear} != "9999") + ${ctx.messages.getMessage('validityDateTo')} ${ctx.endDate} + #end + #if (${ctx.startDateYear} != "1970" && ${ctx.endDateYear} == "9999") + ${ctx.messages.getMessage('validityDateFrom')} ${ctx.startDate} + #end + #if (${ctx.startDateYear} != "1970" && ${ctx.endDateYear} != "9999") + ${ctx.validityDate} + #end +

+

${ctx.messages.couponLable}
${ctx.couponTitle}

+

${ctx.messages.summary}
${ctx.couponSummary}

+

${ctx.messages.complimentaryClosing}

+

${ctx.messages.signature}

+
 
+ ${ctx.messages.help} | ${ctx.messages.contactUs} | ${ctx.messages.termsAndCondition}    +
 
+
+ + + +   + + + + \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/emails/email-customerCouponSubject.vm b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/emails/email-customerCouponSubject.vm new file mode 100644 index 0000000..ea3e128 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/emails/email-customerCouponSubject.vm @@ -0,0 +1 @@ +${ctx.messages.getMessage(${ctx.couponNotificationType})} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/emails/email-productBackInStockBody.vm b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/emails/email-productBackInStockBody.vm new file mode 100644 index 0000000..8127469 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/emails/email-productBackInStockBody.vm @@ -0,0 +1,168 @@ +## messageSource=classpath:/spartacussampledataaddon/messages/email-productBackInStock_$lang.properties +#macro( genHtmlBoldFont $text ) +$text +#end +#macro(genHtmlLinkStartTag $url) + +#end +#macro(genHtmlLinkEndTag) + +#end +#macro(genHtmlLink $url $textColor $bodyContent) +$bodyContent +#end + + + + + +   + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ #if (! $ctx.order.guestCustomer ) + + #end ${ctx.messages.storeFinder}    +
+ + ${ctx.cmsSlotContents.TopContent} + +
 
+#set ($spaceHolderPosition = "") + +

${ctx.messages.emailSubject}

+
+

${ctx.messages.getMessage('salutation', ${ctx.title},${ctx.displayName})},

+
+#if($isForceInStock) +

${ctx.messages.getMessage('productForceInStockAvaiable', "#genHtmlLinkStartTag($productUrl)", "#genHtmlBoldFont(${ctx.productData.name})", "#genHtmlLinkEndTag()")}

+#else +

${ctx.messages.getMessage('productAvaiable', "#genHtmlLinkStartTag($productUrl)", "#genHtmlBoldFont(${ctx.productData.name})", "#genHtmlLinkEndTag()", "${ctx.productData.stock.stockLevel}")}

+#end + +
+ + + + + + + + + +
+ + #foreach($image in $ctx.productData.images) #if($image.imageType == "PRIMARY" && $image.format == "thumbnail" ) + + #end #end + +   + +

+ ${ctx.productData.name} +

+
+

+ ${ctx.messages.shopNow} +

+
+
+
+#if(!$ctx.productReferences.isEmpty()) +

${ctx.messages.getMessage('product_recommendation_title')}

+#end + + +#foreach($reference in $ctx.productReferences) + +#end + + +#foreach($reference in $ctx.productReferences) + +#end + + +#foreach($reference in $ctx.productReferences) + +#end + +
+ + #foreach($image in $reference.images) #if($image.imageType == "PRIMARY" && $image.format == "thumbnail" ) + + #end #end + +   +
+ ${reference.name} +

+
+

+ ${ctx.messages.shopNow} +

+
+
+

${ctx.messages.getMessage('manageNotification', "#genHtmlLinkStartTag($myinterestUrl)", "#genHtmlBoldFont(${ctx.messages.myInterests})", "#genHtmlLinkEndTag()")}

+ +

${ctx.messages.getMessage('paragraphContactUs', "#genHtmlLinkStartTag(${ctx.messages.contactUsPage})", "#genHtmlLinkEndTag()")}

+ +

${ctx.messages.complimentaryClosing}

+ +

${ctx.messages.signature}

+
 
+ ${ctx.cmsSlotContents.BottomContent} +
+ ${ctx.messages.help} | ${ctx.messages.contactUs} | ${ctx.messages.termsAndCondition}    +
 
+
+ + + +   + + + + diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/emails/email-productBackInStockSubject.vm b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/emails/email-productBackInStockSubject.vm new file mode 100644 index 0000000..1aad729 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/emails/email-productBackInStockSubject.vm @@ -0,0 +1 @@ +${ctx.messages.emailSubject} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/productCatalogs/apparel-deProductCatalog/solr.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/productCatalogs/apparel-deProductCatalog/solr.impex new file mode 100644 index 0000000..5bbc931 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/productCatalogs/apparel-deProductCatalog/solr.impex @@ -0,0 +1,11 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# The files in this addon are licensed under the Apache Software License, v. 2 +# except as noted otherwise in the LICENSE file. +# ----------------------------------------------------------------------- + +## add the right display provider for allCategory index property +UPDATE SolrIndexedProperty;name[unique=true];solrIndexedType(identifier)[unique=true];facetDisplayNameProvider(code) +;allCategories;apparel-deProductType;categoryFacetDisplayNameProvider diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/productCatalogs/apparel-ukProductCatalog/solr.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/productCatalogs/apparel-ukProductCatalog/solr.impex new file mode 100644 index 0000000..86a97da --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/productCatalogs/apparel-ukProductCatalog/solr.impex @@ -0,0 +1,11 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# The files in this addon are licensed under the Apache Software License, v. 2 +# except as noted otherwise in the LICENSE file. +# ----------------------------------------------------------------------- + +## add the right display provider for allCategory index property +UPDATE SolrIndexedProperty;name[unique=true];solrIndexedType(identifier)[unique=true];facetDisplayNameProvider(code) +;allCategories;apparel-ukProductType;categoryFacetDisplayNameProvider diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/productCatalogs/apparelProductCatalog/reviews.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/productCatalogs/apparelProductCatalog/reviews.impex new file mode 100644 index 0000000..d8491a9 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/productCatalogs/apparelProductCatalog/reviews.impex @@ -0,0 +1,258 @@ +# ----------------------------------------------------------------------- +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# ----------------------------------------------------------------------- +# ImpEx for Importing Product Reviews + +# Macros / Replacement Parameter definitions +$catalog-Online=Online +$product-catalog=apparelProductCatalog +$productCV=catalogVersion(CatalogVersion.catalog(Catalog.id[default=$product-catalog]),CatalogVersion.version[default=$catalog-Online])[default=$product-catalog:$catalog-Online] + +$catalogVersion=catalogversion(catalog(id[default=$productCatalog]),version[default='Online'])[unique=true,default=$productCatalog:Online] + +# Reviews from Customers + +INSERT_UPDATE Customer;groups(uid);uid[unique=true];name;customerId +"#% beforeEach: +import java.util.UUID; +line.put(Integer.valueOf(5), UUID.randomUUID().toString()); +" +;"customergroup";"reviewer1@hybris.com";"Kenneth Reviewer";; +;"customergroup";"reviewer2@hybris.com";"Ken Reviewer";; +;"customergroup";"reviewer3@hybris.com";"John Reviewer";; +;"customergroup";"reviewer4@hybris.com";"Steve Reviewer";; +;"customergroup";"reviewer5@hybris.com";"Adam Reviewer";; +;"customergroup";"reviewer6@hybris.com";"Honda Reviewer";; +;"customergroup";"reviewer7@hybris.com";"Roger Reviewer";; +;"customergroup";"reviewer8@hybris.com";"Ronald Reviewer";; +;"customergroup";"reviewer9@hybris.com";"Klaus Reviewer";; +;"customergroup";"reviewer10@hybris.com";"Stefan Reviewer";; +;"customergroup";"reviewer11@hybris.com";"Rick Reviewer";; +;"customergroup";"reviewer12@hybris.com";"Richard Reviewer";; +;"customergroup";"reviewer13@hybris.com";"Aseem Reviewer";; +;"customergroup";"reviewer14@hybris.com";"Toby Reviewer";; +;"customergroup";"reviewer15@hybris.com";"Brendan Reviewer";; +;"customergroup";"reviewer16@hybris.com";"Katie Reviewer";; +;"customergroup";"reviewer17@hybris.com";"Flavia Reviewer";; +;"customergroup";"reviewer18@hybris.com";"Thomas Reviewer";; +;"customergroup";"reviewer19@hybris.com";"Axel Reviewer";; +;"customergroup";"reviewer20@hybris.com";"Moritz Reviewer";; +;"customergroup";"reviewer21@hybris.com";"Alistair Reviewer";; +;"customergroup";"reviewer22@hybris.com";"Nicko Reviewer";; +;"customergroup";"reviewer23@hybris.com";"Claudius Reviewer";; +;"customergroup";"reviewer24@hybris.com";"Doris Reviewer";; +;"customergroup";"reviewer25@hybris.com";"George Reviewer";; +;"customergroup";"reviewer26@hybris.com";"Henry Reviewer";; +;"customergroup";"reviewer27@hybris.com";"Frederick Reviewer";; +;"customergroup";"reviewer28@hybris.com";"Deepak Reviewer";; +;"customergroup";"reviewer29@hybris.com";"Elizabeth Reviewer";; +;"customergroup";"reviewer30@hybris.com";"Dorothy Reviewer";; + +INSERT_UPDATE CustomerReview;product(code, $productCV)[unique=true]; rating; user(uid)[unique=true];headline;comment;approvalStatus(code)[default='approved'];language(isocode)[default='en'] +;29533;5;reviewer1@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29533;4;reviewer2@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29533;5;reviewer3@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29533;5;reviewer4@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29533;5;reviewer5@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29533;5;reviewer6@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29533;4;reviewer7@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29533;5;reviewer8@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29533;5;reviewer9@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29533;4;reviewer10@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29533;5;reviewer11@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29533;5;reviewer12@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29533;5;reviewer13@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29533;5;reviewer14@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29533;4;reviewer15@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29533;4;reviewer16@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29533;5;reviewer17@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29533;4;reviewer18@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29533;5;reviewer19@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29533;4;reviewer20@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29533;4;reviewer21@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29533;4;reviewer22@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29533;5;reviewer23@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29533;5;reviewer24@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;45572;4;reviewer1@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;45572;5;reviewer2@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;45572;4;reviewer3@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;45572;5;reviewer4@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;45572;4;reviewer5@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;M33477_B;5;reviewer1@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;M33477_B;5;reviewer2@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;M33477_B;5;reviewer3@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300310300;5;reviewer1@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300310300;5;reviewer2@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300310300;5;reviewer3@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300045375;5;reviewer1@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300045375;4;reviewer2@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300045375;4;reviewer3@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300045375;5;reviewer4@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300045375;4;reviewer5@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300045375;5;reviewer6@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300045375;4;reviewer7@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300045375;4;reviewer8@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300045375;4;reviewer9@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300045375;4;reviewer10@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300045375;4;reviewer11@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300045375;4;reviewer12@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300045375;5;reviewer13@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300045375;5;reviewer14@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300045375;5;reviewer15@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300045375;4;reviewer16@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300045375;5;reviewer17@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300022356;5;reviewer1@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300022356;4;reviewer2@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300022356;5;reviewer3@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300022356;4;reviewer4@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300022356;4;reviewer5@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300022356;5;reviewer6@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300022356;4;reviewer7@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300022356;4;reviewer8@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300022356;5;reviewer9@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300022356;5;reviewer10@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300022356;5;reviewer11@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300022356;5;reviewer12@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300022356;5;reviewer13@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300047513;5;reviewer1@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300047513;5;reviewer2@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300047513;5;reviewer3@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300047513;4;reviewer4@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300047513;4;reviewer5@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300047513;5;reviewer6@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300047513;4;reviewer7@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300047513;4;reviewer8@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300047513;5;reviewer9@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300047513;4;reviewer10@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300047513;5;reviewer11@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300047513;5;reviewer12@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300047513;4;reviewer13@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300047513;5;reviewer14@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300047513;5;reviewer15@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300047513;4;reviewer16@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300047513;4;reviewer17@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29531;5;reviewer1@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29531;5;reviewer2@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29531;5;reviewer3@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29531;5;reviewer4@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29531;4;reviewer5@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29531;5;reviewer6@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29531;5;reviewer7@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29531;5;reviewer8@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29531;5;reviewer9@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29531;5;reviewer10@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29531;4;reviewer11@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29531;4;reviewer12@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29531;5;reviewer13@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29531;5;reviewer14@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29531;5;reviewer15@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29531;5;reviewer16@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;29531;4;reviewer17@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300046592;4;reviewer1@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300046592;4;reviewer2@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300046592;4;reviewer3@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300046592;4;reviewer4@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300046592;5;reviewer5@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300046592;5;reviewer6@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300046592;4;reviewer7@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300046592;4;reviewer8@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300046592;4;reviewer9@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300046592;5;reviewer10@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300046592;5;reviewer11@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300046592;5;reviewer12@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300046592;5;reviewer13@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300046592;5;reviewer14@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300040462;4;reviewer1@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300040462;5;reviewer2@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300040462;4;reviewer3@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300040462;5;reviewer4@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300040462;4;reviewer5@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300040462;5;reviewer6@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300040462;4;reviewer7@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300040462;5;reviewer8@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300040462;5;reviewer9@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300040462;5;reviewer10@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300040462;5;reviewer11@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300040462;4;reviewer12@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300040462;5;reviewer13@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300040462;5;reviewer14@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300040462;5;reviewer15@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300040462;5;reviewer16@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300040462;4;reviewer17@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300040462;5;reviewer18@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300040462;4;reviewer19@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300040462;4;reviewer20@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300040462;4;reviewer21@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300040462;4;reviewer22@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300040462;4;reviewer23@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300040462;5;reviewer24@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300618506;4;reviewer1@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300618506;5;reviewer2@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300618506;4;reviewer3@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300618506;5;reviewer4@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300618506;4;reviewer5@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300618506;4;reviewer6@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300618506;5;reviewer7@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300618506;5;reviewer8@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300618506;4;reviewer9@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300618506;4;reviewer10@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;5;reviewer1@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;5;reviewer2@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;4;reviewer3@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;4;reviewer4@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;5;reviewer5@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;4;reviewer6@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;5;reviewer7@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;4;reviewer8@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;5;reviewer9@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;5;reviewer10@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;5;reviewer11@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;5;reviewer12@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;5;reviewer13@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;4;reviewer14@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;4;reviewer15@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;4;reviewer16@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;5;reviewer17@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;5;reviewer18@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;4;reviewer19@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;5;reviewer20@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;5;reviewer21@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;4;reviewer22@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;5;reviewer23@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;4;reviewer24@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;5;reviewer25@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300785814;4;reviewer26@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300398794;4;reviewer1@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300398794;5;reviewer2@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300398794;4;reviewer3@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300398794;5;reviewer4@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300398794;5;reviewer5@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300398794;4;reviewer6@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300398794;5;reviewer7@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300398794;4;reviewer8@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300398794;4;reviewer9@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300398794;4;reviewer10@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300398794;4;reviewer11@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300398794;5;reviewer12@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300398794;5;reviewer13@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300044599;4;reviewer1@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300044599;4;reviewer2@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300044599;5;reviewer3@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300044599;5;reviewer4@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300044599;5;reviewer5@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300044599;5;reviewer6@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300044599;5;reviewer7@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300044599;4;reviewer8@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300044599;4;reviewer9@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300044599;4;reviewer10@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300044599;5;reviewer11@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300044599;5;reviewer12@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300044599;4;reviewer13@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300044599;4;reviewer14@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300044599;5;reviewer15@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300044599;5;reviewer16@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300044599;5;reviewer17@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300044599;5;reviewer18@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300044599;5;reviewer19@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300044599;5;reviewer20@hybris.com;This is a fantastic product, did everything I wanted it to do.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; +;300044599;4;reviewer21@hybris.com;A good solid product, worthy of a purchase.;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas ut est. Donec suscipit. Donec eget diam vitae purus condentum adipiscing. Suspendisse lorem diam, cursus non,aliquam et, blandit ac, orci. Phasellus malesuada orci sit amet lorem. Sed egestas tortor eget ipsum. Cras mattis,lorem sit amet congue condimentum, nibh tellus sodales augue, ac euismod lectus arcu eu purus. Mauris tellus ligula,molestie vel, cursus at, eleifend ut, diam. Integer felis. Morbi sapien massa, iaculis id, convallis in, laoreet id, leo.Nullam id metus. Suspendisse turpis tellus, fermentum mollis, scelerisque fermentum, hendrerit sed, mi. Pellentesque bibendum.Mauris sit amet dolor. Praesent ullamcorper accumsan purus. Aliquam erat volutpat. Vivamus a sapien sed dui faucibus porttito.; diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/productCatalogs/electronicsProductCatalog/products-stocklevels.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/productCatalogs/electronicsProductCatalog/products-stocklevels.impex new file mode 100755 index 0000000..85b3675 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/productCatalogs/electronicsProductCatalog/products-stocklevels.impex @@ -0,0 +1,12 @@ +# ----------------------------------------------------------------------- +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# ----------------------------------------------------------------------- +# ImpEx for update products stock levels into Electronics Store +$productCatalog=electronicsProductCatalog +$productCatalogName=Electronics Product Catalog +$catalogVersion=catalogversion(catalog(id[default=$productCatalog]),version[default='Staged'])[unique=true,default=$productCatalog:Staged] + +# Remove not purchasable base products in electronics +REMOVE Product[batchmode=true];code[unique=true]; +;1978440; +;1978440_md; \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/productCatalogs/electronicsProductCatalog/solr.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/productCatalogs/electronicsProductCatalog/solr.impex new file mode 100644 index 0000000..cfa960d --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/productCatalogs/electronicsProductCatalog/solr.impex @@ -0,0 +1,31 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# The files in this addon are licensed under the Apache Software License, v. 2 +# except as noted otherwise in the LICENSE file. +# ----------------------------------------------------------------------- + +# DEMO keyword redirect for category pages + +$productCatalog=electronicsProductCatalog +$productCatalogVersion=catalogVersion(CatalogVersion.catalog(Catalog.id[default=$productCatalog]),CatalogVersion.version[default='Online'])[default=$productCatalog:Online] +$facetSearchConfigName=electronicsIndex + +# Language +$lang=en + + +## add the right display provider for allCategory index property +UPDATE SolrIndexedProperty;name[unique=true];solrIndexedType(identifier)[unique=true];facetDisplayNameProvider(code) +;allCategories;electronicsProductType;categoryFacetDisplayNameProvider + +# Category Redirect examples (Must use INSERT_UPDATE here) +INSERT_UPDATE SolrCategoryRedirect;redirectItem(code,$productCatalogVersion)[unique=true];&redirectRefID +;brand_5;$productCatalog-redirectRefID-sony +;578;$productCatalog-redirectRefID-slr + +INSERT_UPDATE SolrFacetSearchKeywordRedirect;facetSearchConfig(name)[unique=true,default=$facetSearchConfigName];language(isocode)[unique=true,default=$lang];keyword[unique=true];matchType(code)[unique=true];redirect(&redirectRefID);ignoreCase[default=true] + ;;;"sony";EXACT;$productCatalog-redirectRefID-sony; + ;;;"slr";EXACT;$productCatalog-redirectRefID-slr; + diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/apparel-uk/consents.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/apparel-uk/consents.impex new file mode 100644 index 0000000..c1b9b50 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/apparel-uk/consents.impex @@ -0,0 +1,16 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# The files in this addon are licensed under the Apache Software License, v. 2 +# except as noted otherwise in the LICENSE file. +# ----------------------------------------------------------------------- +# ImpEx for Consents for Apparel UK Store +#% impex.setLocale( Locale.GERMAN ); + +$siteUid=apparel-uk-spa + +INSERT_UPDATE ConsentTemplate;id[unique=true];name;description;version[unique=true];baseSite(uid)[unique=true,default=$siteUid];exposed +;PROFILE;"Allow SAP Commerce Cloud, Context-Driven Services tracking";"We would like to store your browsing behaviour so that our website can dynamically present you with a personalised browsing experience and our customer support agents can provide you with contextual customer support.";0;;true +;MARKETING_NEWSLETTER;"I approve to this sample MARKETING consent";"This is a sample marketing consent description that will need to be updated or replaced, based on the valid registration consent required.";0;;true +;STORE_USER_INFORMATION;"I approve to this sample STORE USER INFORMATION consent";"This is a sample store user information consent description that will need to be updated or replaced.";0;;true \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/apparel-uk/points-of-service.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/apparel-uk/points-of-service.impex new file mode 100755 index 0000000..1045adc --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/apparel-uk/points-of-service.impex @@ -0,0 +1,144 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# The files in this addon are licensed under the Apache Software License, v. 2 +# except as noted otherwise in the LICENSE file. +# ----------------------------------------------------------------------- +# + +# SPA Storefinder locations +$storeUid=apparel-uk +$productCatalog=apparelProductCatalog +$catalogVersion=catalogversion(catalog(id[default=$productCatalog]),version[default='Staged'])[unique=true,default=$productCatalog:Staged] +$storeImage=storeImage(qualifier, $catalogVersion) + +# Remove old PointOfServices (temporarily keep old stores because of e2e failing #4705) +# REMOVE PointOfService[batchmode=true];basestore(uid)[unique=true] +# ;$storeUid + +$standardHours=sap-office-standard-hours +$weekendHours=sap-office-weekend-hours + +INSERT_UPDATE OpeningSchedule;code[unique=true]; +;$standardHours; +;$weekendHours; + +INSERT_UPDATE WeekdayOpeningDay;openingSchedule(code)[unique=true];dayOfWeek(code)[unique=true];openingTime[dateformat=hh:mm];closingTime[dateformat=hh:mm]; +;$standardHours;MONDAY ; 09:00; 20:00 +;$standardHours;TUESDAY ; 09:00; 20:00 +;$standardHours;WEDNESDAY; 09:00; 20:00 +;$standardHours;THURSDAY ; 09:00; 20:00 +;$standardHours;FRIDAY ; 09:00; 20:00 +;$standardHours;SATURDAY ; 10:00; 20:00 + +;$weekendHours;MONDAY ; 09:00; 20:00 +;$weekendHours;TUESDAY ; 09:00; 20:00 +;$weekendHours;WEDNESDAY; 09:00; 20:00 +;$weekendHours;THURSDAY ; 09:00; 20:00 +;$weekendHours;FRIDAY ; 09:00; 20:00 +;$weekendHours;SATURDAY ; 10:00; 20:00 +;$weekendHours;SUNDAY ; 10:00; 16:00 + +INSERT_UPDATE SpecialOpeningDay;openingSchedule(code)[unique=true];date[unique=true,dateformat=dd.MM.yyyy];closed;openingTime[dateformat=hh:mm];closingTime[dateformat=hh:mm] +;$standardHours; 01.01.2014 ;true +;$standardHours; 29.03.2014 ;true +;$standardHours; 01.04.2014 ;true +;$standardHours; 01.05.2014 ;true +;$standardHours; 09.05.2014 ;true +;$standardHours; 20.05.2014 ;true +;$standardHours; 03.10.2014 ;true +;$standardHours; 25.12.2014 ;true +;$standardHours; 26.12.2014 ;true + +;$weekendHours; 01.01.2014 ;true +;$weekendHours; 29.03.2014 ;true +;$weekendHours; 01.04.2014 ;true +;$weekendHours; 01.05.2014 ;true +;$weekendHours; 09.05.2014 ;true +;$weekendHours; 20.05.2014 ;true +;$weekendHours; 03.10.2014 ;true +;$weekendHours; 25.12.2014 ;true +;$weekendHours; 26.12.2014 ;true + +INSERT_UPDATE PointOfService;name[unique=true];displayName;type(code);address(&addrID);latitude;longitude;geocodeTimestamp[dateformat=dd.MM.yyyy];$storeImage;features(code);basestore(uid)[default=$storeUid];openingSchedule(code) +;sap-uk-feltham-office;SAP (UK) Ltd;STORE;addr1001;51.449216;-0.445058;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-uk-maidenhead-office;SAP Maidenhead Office;STORE;addr1002;51.511560;-0.747654;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-uk-knutsford-office;SAP Knutsford Office;STORE;addr1003;53.303179;-2.371401;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-de-walldorf-office;SAP SE - Walldorf;STORE;addr1004;49.293401;8.641979;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-de-berlin-office;SAP Berlin Office;STORE;addr1005;52.526066;13.403466;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-de-dusseldorf-office;SAP Düsseldorf Office;STORE;addr1006;51.291054;6.867271;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-de-dresden-office;SAP Dresden Office;STORE;addr1007;51.033425;13.710494;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-de-dresden-se-office;SAP SE - Dresden;STORE;addr1008;51.046318;13.756872;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-de-frankfurt-office;SAP Frankfurt Office;STORE;addr1009;50.132645;8.564958;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-osterreich-gmbh-office;SAP Österreich GmbH;STORE;addr1010;48.223325;16.397626;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-osterreich-gmbh-2-office;SAP Österreich GmbH 2;STORE;addr1011;48.298983;14.291374;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-belgium-nv-sa-office;SAP Belgium NV/SA;STORE;addr1012;50.870507;4.406359;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-brussels-education-center-office;SAP Brussels Education Center;STORE;addr1013;50.870507;4.406359;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-bulgaria-ltd-office;SAP Bulgaria Ltd.;STORE;addr1014;42.669243;23.266235;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-labs-czech-republic-office;SAP Labs Czech Republic;STORE;addr1016;49.180484;16.605760;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-cr-spol-s-r-o-office;SAP ČR, spol. s.r.o.;STORE;addr1017;50.047841;14.456082;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-services-s-r-o-office;SAP Services s.r.o.;STORE;addr1018;50.051302;14.350062;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-danmark-a-s-office;SAP Danmark A/S;STORE;addr1019;55.710814;12.589327;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-estonia-ou-office;SAP Estonia OÜ ;STORE;addr1020;59.406605;24.732628;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-finland-oy-office;SAP Finland Oy ;STORE;addr1021;60.173525;24.829702;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-latvia-s-i-a-office;SAP Latvia S.I.A.;STORE;addr1022;56.957075;24.113771;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-uab-office;SAP UAB ;STORE;addr1023;54.694115;25.264868;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-nederland-b-v-office;SAP Nederland B.V. ;STORE;addr1024;51.712889;5.339575;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-norge-as-office;SAP Norge AS;STORE;addr1025;59.912568;10.637349;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-portugal-lda-office;SAP Portugal, Lda.;STORE;addr1026;38.712429;-9.311245;29.05.2025;;creche,sundayWorkshops;;$standardHours +;centro-servicos-sap-office;Centro Serviços SAP;STORE;addr1027;38.712312;-9.311175;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-romania-srl-office;SAP România SRL ;STORE;addr1028;44.484282;26.072080;29.05.2025;;creche,sundayWorkshops;;$standardHours +;llc-sap-c-i-s-office;LLC SAP C.I.S.;STORE;addr1030;55.732800;37.644331;29.05.2025;;creche,sundayWorkshops;;$standardHours +;llc-sap-c-i-s-service-center-office;LLC SAP C.I.S. Service Center;STORE;addr1031;55.732800;37.644331;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-se-representative-office-russia-office;SAP SE, Representative Office - Russia;STORE;addr1032;59.934645;30.309009;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-west-balkans-d-o-o-office;SAP West Balkans D.O.O.;STORE;addr1033;44.812501;20.396858;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-slovensko-s-r-o-office;SAP Slovensko s.r.o. ;STORE;addr1034;48.146128;17.127078;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-d-o-o-office;SAP d.o.o.;STORE;addr1035;46.082837;14.512761;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-espana-s-a-1-office;SAP España, S.A. 1;STORE;addr1036;41.407822;2.218073;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-espana-s-a-2-office;SAP España, S.A. 2;STORE;addr1037;40.447234;-3.656515;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-svenska-ab-office;SAP Svenska AB;STORE;addr1038;59.337266;18.062394;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-turkey-office;SAP Turkey;STORE;addr1039;41.004224;29.072027;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-poland-warsaw-office;SAP Polska Sp. z o.o.;STORE;addr1040;52.180762;21.000317;29.05.2025;;creche,sundayWorkshops;;$standardHours +;sap-poland-labs-polska-gliwice-office;SAP Labs Polska;STORE;addr1041;50.296528;18.670372;29.05.2025;;creche,sundayWorkshops;;$standardHours + +INSERT_UPDATE Address;&addrID;streetname;streetnumber;postalcode;town;country(isocode);phone1;owner(PointOfService.name)[unique=true]; +;addr1001;Clockhouse Place Bedfont Road;;TW14 8HD;Feltham;GB;+44 870 608 4000;sap-uk-feltham-office; +;addr1002;Vanwall Business Park Vanwall Road;;SL6 4UB;Maidenhead;GB;+44 1628 764600;sap-uk-maidenhead-office; +;addr1003;25 King Street;;WA16 6DW;Knutsford;GB;+44 156 568 7000;sap-uk-knutsford-office; +;addr1004;Dietmar-Hopp-Allee 16;;69190;Walldorf;DE;+49 (0)6227 / 7-47474;sap-de-walldorf-office; +;addr1005;Rosenthaler Str. 30;;10178;Berlin;DE;+49 (0)6227 / 7-47474;sap-de-berlin-office; +;addr1006;SAP-Platz 1;;40882;Ratingen;DE;+49 (0)2102 / 864-5005;sap-de-dusseldorf-office; +;addr1007;Chemnitzer Str. 48;;01187;Dresden;DE;+49 (0)6227 / 7-47474;sap-de-dresden-office; +;addr1008;Straßburger Platz 1;;01307;Dresden;DE;+49 (0)6227 / 7-47474;sap-de-dresden-se-office; +;addr1009;Frankfurter Straße 1;;65760;Eschborn;DE;+49 (0)6196 / 8872-870;sap-de-frankfurt-office; +;addr1010;Lassallestraße 7b;;1021;Wien;AT;+43/1/288 22-0;sap-osterreich-gmbh-office; +;addr1011;Langgasse 7;;4020;Linz;AT;+43/1/28822-0;sap-osterreich-gmbh-2-office; +;addr1012;Avenue des Olympiades 2 Olympiadenlaan;;B-1140;Brussels;BE;+32(0)26746511;sap-belgium-nv-sa-office; +;addr1013;Avenue des Olympiades 2 Olympiadenlaan;;B-1140;Brussels;BE;+32(0)26746511;sap-brussels-education-center-office; +;addr1014;136A, Tzar Boris III Blvd.;;1618;Sofia;BG;+359 2 9157 100;sap-bulgaria-ltd-office; +;addr1016;Holandská 2/4;;639 00;Brno;CZ;+420 54354-2400;sap-labs-czech-republic-office; +;addr1017;Vyskočilova 1481/4;;140 00;Praha;CZ;+420 257-114-111;sap-cr-spol-s-r-o-office; +;addr1018;Bucharova 2817/11;;158 00;Praha;CZ;+420 257 118 111;sap-services-s-r-o-office; +;addr1019;Lautrupsgade 11;;DK-2100;København Ø;DK;+45 3913 3000;sap-danmark-a-s-office; +;addr1020;Pärnu mnt 15 ;;10141;Talinn;EE;+372 50 87 172 ;sap-estonia-ou-office; +;addr1021;Keilasatama 5 ;;02150;Espoo;FI;+358 10 430 4400;sap-finland-oy-office; +;addr1022;21 Kr.Valdemara ;;LV-1010;Riga;LV;+371 6 7035 227;sap-latvia-s-i-a-office; +;addr1023;Gyneju 16 ;;01109;Vilnius ;LT;+370 5 204 72 30 ;sap-uab-office; +;addr1024;Amerikastraat 10 ;;5232 BE 's;Hertogenbosch ;NL;+31 (0)73 645 75 00 ;sap-nederland-b-v-office; +;addr1025;Lysaker Torg 5 ;;1324;Lysaker ;NO;+47/67/52-9400;sap-norge-as-office; +;addr1026;Lagoas Park, Edifício 14, Piso 0;;2740-262;Porto Salvo ;PT;+351 214465500 ;sap-portugal-lda-office; +;addr1027; Lagoas Park, Edifício 14, Piso 3 ;;2740-262;Porto Salvo ;PT;+351 214465500 ;centro-servicos-sap-office; +;addr1028;Calea Tipografilor 11-15 Clădirea A1 / LA, Etajul 2;;013714;Bucuresti;RO;+40/312252800;sap-romania-srl-office; +;addr1030;Kosmodamianskaya nab. 52/4 ;;115054 ;Moscow;RU; +7 (495) /755-9800 ;llc-sap-c-i-s-office; +;addr1031;Kosmodamianskaya nab. 52/4 ;;115054 ;Moscow;RU;+7 (495) /797-2720;llc-sap-c-i-s-service-center-office; +;addr1032;23, Malaya Morskaya ;;190000;St. Petersburg;RU;+7 (812) /718-3771 ;sap-se-representative-office-russia-office; +;addr1033;88, Omladinskih Brigada Airport City Belgrade, zgrada 1500;;11070;Novi Beograd;RS;+381 (11) 35 36 900;sap-west-balkans-d-o-o-office; +;addr1034;Twin city C Mlynské nivy 16;;82109;Bratislava ;SK; +421/2/582-56111 ;sap-slovensko-s-r-o-office; +;addr1035;(Poslovna stavba Rotonda) Dunajska cesta 165/4;;SI-1000;Lubljana;SI;+386/1/307 2000;sap-d-o-o-office; +;addr1036;Edificio Torre Diagonal Mar - Planta 13 c/. Josep Pla, 2 ;;E-08019;Barcelona;ES;+34/93/4833500;sap-espana-s-a-1-office; +;addr1037;Torrelaguna, 77 Bloque SAP ;;28043;Madrid;ES;+34/91/456-7200 ;sap-espana-s-a-2-office; +;addr1038;Sveavägen 44;;S - 111 34;Stockholm;SE; +46/8/587 700 00;sap-svenska-ab-office; +;addr1039;Emaar Square Ofis Ünalan mah. Libadiye cad. no:82 F K 17-18 Üsküdar;;34700;Istanbul;TR;+90 216 633 03 00;sap-turkey-office; +;addr1040;ul. Wołoska 5;;02-675;Warsaw;PL;+48 22 541 66 06;sap-poland-warsaw-office; +;addr1041;ul. Zwycięstwa 23;;44-100;Gliwice;PL;+48 32 440 08 00;sap-poland-labs-polska-gliwice-office; \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/apparel-uk/site.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/apparel-uk/site.impex new file mode 100644 index 0000000..460208b --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/apparel-uk/site.impex @@ -0,0 +1,44 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# The files in this addon are licensed under the Apache Software License, v. 2 +# except as noted otherwise in the LICENSE file. +# ----------------------------------------------------------------------- +# +$spaSiteUid=apparel-uk-spa +$spaContentCatalog=apparel-uk-spaContentCatalog +$spaContentCV=catalogVersion(CatalogVersion.catalog(Catalog.id[default=$spaContentCatalog]),CatalogVersion.version[default=Staged])[default=$spaContentCatalog:Staged] + +$productCatalog=apparelProductCatalog +$productCV=catalogVersion(catalog(id[default=$productCatalog]),version[default='Staged'])[unique=true,default=$productCatalog:Staged] + +$storeUid=apparel-uk +$siteMapLangCur=jaJpy,jaUsd,enJpy,enUsd,deJpy,deUsd,zhJpy,zhUsd +$siteMapPage=Homepage,Product,CategoryLanding,Category,Store,Content,Custom +$customSiteMapUrls=/Open-Catalogue/c/1?q=%3AtopRated%3AallPromotions%3ABOGOFElectronics%3AallPromotions%3A10DiscountCanonEOS450D%3AallPromotions%3AMultiBuyElectronics%3AallPromotions%3APerfectPartnerElectronics%3AallPromotions%3AProductBundleElectronics,/Brands/c/brands?q=%3Arelevance%3Abrand%3Abrand_5%3Acategory%3A575,/Open-Catalogue/Cameras/Hand-held-Camcorders/c/584?q=%3Arelevance%3Abrand%3Abrand_2,/Open-Catalogue/Components/Power-Supplies/c/816?q=%3Arelevance%3Abrand%3Abrand_5,/Open-Catalogue/Data-storage/Flash-Memory/c/902?q=%3Arelevance%3Abrand%3Abrand_18 + +$fullPathApparel=https://localhost:4200 +$language=en +$currency=GBP + +$urlPatterns=(?i)^https?://[^/]+(/[^?]*)?\?(.*\&)?(site=$spaSiteUid)(|\&.*)$,(?i)^https?://$spaSiteUid\.[^/]+(|/.*|\?.*)$,(?i)^https?://api\.hybrisdev\.com(:[\d]+)?/rest/.*$,(?i)^https?://localhost(:[\d]+)?/rest/.*$ +$urlEncodingAttributes=language,currency + +### Site for spartacus +INSERT_UPDATE CMSSite;uid[unique=true];theme(code);channel(code);stores(uid);contentCatalogs(id);defaultCatalog(id);defaultLanguage(isoCode);siteMapConfig(configId);urlPatterns;active;previewURL;startingPage(uid,$spaContentCV);urlEncodingAttributes;defaultPromotionGroup(Identifier)[default=apparelUKPromoGrp] +;$spaSiteUid;;B2C;$storeUid;$spaContentCatalog;$productCatalog;$language;apparel-ukSiteMapConfig;$urlPatterns;true;$fullPathApparel/$spaSiteUid/$language/$currency;homepage;$urlEncodingAttributes + +UPDATE CMSSite;uid[unique=true];name[lang=$language] +;$spaSiteUid;"Spartacus Apparel UK Site" + +UPDATE CMSSite;uid[unique=true];defaultPreviewCategory(code, $productCV);defaultPreviewProduct(code, $productCV);defaultPreviewCatalog(id) +;$spaSiteUid;caps;300441142;$productCatalog + +### Put spartacus into smart edit whitelist +INSERT_UPDATE SmartEditConfiguration;key[unique=true];value +;whiteListedStorefronts;"[""$fullPathApparel""]" + +### Kyma OAuth client +INSERT_UPDATE OpenIDClientDetails;clientId[unique=true] ;resourceIds ;scope ;autoApprove ;authorizedGrantTypes ;authorities ;clientSecret ;registeredRedirectUri ;externalScopeClaimName ;issuer + ;client4kyma ;hybris ;openid ;openid ;password,client_credentials ;ROLE_CLIENT ;secret ;http://MY_APPLICATION/ ;scope ;ec diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/apparel-uk/solr.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/apparel-uk/solr.impex new file mode 100644 index 0000000..d2000ea --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/apparel-uk/solr.impex @@ -0,0 +1,14 @@ +# --------------------------------------------------------------------------- +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# --------------------------------------------------------------------------- + +$solrIndexedType=apparel-ukProductType + + +# Non-facet properties +INSERT_UPDATE SolrIndexedProperty;solrIndexedType(identifier)[unique=true];name[unique=true];type(code);multiValue[default=true];facet[default=true];facetType(code);facetSort(code);priority;visible;categoryField[default=true];fieldValueProvider;facetDisplayNameProvider;topValuesProvider +;$solrIndexedType;customerCouponCode;string;;;Refine;Alpha;5000;false;;customerCouponCodeValueResolver;customerCouponFacetDisplayNameProvider;defaultTopValuesProvider + +# Category search query facets +INSERT_UPDATE SolrSearchQueryProperty;indexedProperty(name, solrIndexedType(identifier))[unique=true];searchQueryTemplate(name, indexedType(identifier))[unique=true][default=DEFAULT:$solrIndexedType];facet[default=true];facetType(code);includeInResponse[default=true];facetDisplayNameProvider;facetSortProvider;facetTopValuesProvider +;customerCouponCode:$solrIndexedType;;;Refine;;customerCouponFacetDisplayNameProvider; \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/apparel-uk/solr_en.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/apparel-uk/solr_en.impex new file mode 100644 index 0000000..b9a01da --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/apparel-uk/solr_en.impex @@ -0,0 +1,13 @@ +# --------------------------------------------------------------------------- +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# --------------------------------------------------------------------------- + +# Index Type +$solrIndexedType=apparel-ukProductType + +# Language +$lang=en + +# Solr Indexed Property +UPDATE SolrIndexedProperty;solrIndexedType(identifier)[unique=true];name[unique=true];displayName[lang=$lang] +;$solrIndexedType;customerCouponCode;"Customer coupon code" \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/apparel-uk/test-data.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/apparel-uk/test-data.impex new file mode 100644 index 0000000..2e72dbb --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/apparel-uk/test-data.impex @@ -0,0 +1,193 @@ +# --------------------------------------------------------------------------- +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# --------------------------------------------------------------------------- + +## variables for consignment tracking e2e and coupon e2e test data +$defaultPromoGrp=apparelUKPromoGrp +$storeUid=apparel-uk +$lang=en +$promotionsModule="promotions-module" +$previewModule="promotions-preview-module" +$defaultRuleGroup=couponPromotionRuleGroup +$productCatalog=apparelProductCatalog +$spaSiteUid=apparel-uk-spa + +## ConsignmentTracking E2E test data +INSERT_UPDATE Customer;groups(uid);uid[unique=true];name;password[default='Password123.'];customerId +;customergroup;appareluk-test-user-with-orders@ydev.hybris.com;Test User;;appareluk-test-user-with-orders@ydev.hybris.com; + +INSERT_UPDATE Address;owner(Customer.uid)[unique=true];streetname[unique=true];postalcode;town[default='Douglas'];country(isocode)[default='IM'];shippingAddress[default=true];firstname;lastname;title(code)[default='mr'] +;appareluk-test-user-with-orders@ydev.hybris.com;Address line0;100000;;;;User;Test; + +INSERT_UPDATE Order;code[unique=true];user(uid);date[dateformat=dd.MM.yyyy HH:mm];currency(isocode)[default='GBP'];net[default=false];deliveryMode(code)[default='standard-gross'];Discounts(code);calculated[default=false];store(uid);site(uid);deliveryCost;totalPrice +;200000;appareluk-test-user-with-orders@ydev.hybris.com;10.01.2019 10:40;;;;;;$storeUid;;5.26;754.66 +;200001;appareluk-test-user-with-orders@ydev.hybris.com;10.01.2019 10:40;;;;;;$storeUid;;7.9;655.55 + +INSERT_UPDATE OrderEntry;order(code)[unique=true];product(code,catalogVersion(catalog(id),version))[unique=true];quantity[default=1];calculated[default=true];unit(code)[default='pieces'];entryNumber;basePrice;totalPrice +;200000;29533:$productCatalog:Online;;;;0;50.96;50.96 +;200000;300062456:$productCatalog:Online;;;;1;67.96;67.96 +;200000;45572:$productCatalog:Online;;;;2;12.86;12.86 +;200001;29533:$productCatalog:Online;;;;0;50.96;50.96 +;200001;300062456:$productCatalog:Online;;;;1;67.96;67.96 + +INSERT_UPDATE Consignment;code[unique=true];status(code)[default='SHIPPED'];order(code);shippingAddress(owner(Customer.uid));warehouse(code);trackingID;carrierDetails(code)[default='MockCarrier'] +;100000a;;100000;appareluk-test-user-with-orders@ydev.hybris.com;warehouse_e;2019031500001; +;100000b;;100000;appareluk-test-user-with-orders@ydev.hybris.com;warehouse_s;;; +;100000c;WAITING;100000;appareluk-test-user-with-orders@ydev.hybris.com;warehouse_n;;; + + +INSERT_UPDATE ConsignmentEntry;consignment(code)[unique=true];orderEntry(order(code),entryNumber);quantity[default=1];shippedQuantity[default=1] +;100000a;100000:0 +;100000b;100000:1 +;100000c;100000:2 + + +## Coupon E2E test data +INSERT_UPDATE SingleCodeCoupon;couponId(id)[unique=true];maxRedemptionsPerCustomer;maxTotalRedemptions;active[default=true] +;CouponForProduct;;; +;CouponForCart;;; +;FreeGiftCoupon;;; + +INSERT_UPDATE PromotionSourceRule[$ruleImportProcessor];code[unique=true];name[lang=en];description[lang=en];messageFired[lang=en]; +;CouponForProductProm;Coupon For Product Promotion;Coupon For Product Promotion description;Coupon For Product Promotion message +;CouponForCartProm;Coupon For Cart Promotion;Coupon For Cart Promotion description;Coupon For Cart Promotion message +;FreeGiftCouponProm;Free Gift Coupon Promotion;Free Gift Coupon Promotion description;Free Gift Coupon Promotion message + +INSERT_UPDATE PromotionSourceRule;code[unique=true];priority;maxAllowedRuns;ruleGroup(code);conditions;actions;website(Identifier)[default=$defaultPromoGrp];excludeFromStorefrontDisplay[default=false];status(code)[unique=true,default=UNPUBLISHED] +"#% afterEach: de.hybris.platform.core.Registry.getApplicationContext().getBean(""ruleEngineSystemSetup"").registerSourceRuleForDeployment(impex.getLastImportedItem(), new String[]{$promotionsModule,$previewModule});" +;CouponForCartProm;25;1;couponPromotionRuleGroup;"[{""definitionId"":""y_qualifying_coupons"",""parameters"":{""coupons"":{""uuid"":""9644b8a6-ad94-4990-afca-2a132e1bd171"",""type"":""List(ItemType(AbstractCoupon))"",""value"":[""CouponForCart""]}},""children"":[]}]";"[{""definitionId"":""y_order_fixed_discount"",""parameters"":{""value"":{""uuid"":""b4dfe431-e526-42e2-bb08-0dea08f310db"",""type"":""Map(ItemType(Currency),java.math.BigDecimal)"",""value"":{""GBP"":10}}}}]";; + +INSERT_UPDATE PromotionSourceRule;code[unique=true];priority;maxAllowedRuns;ruleGroup(code);conditions;actions;website(Identifier)[default=$defaultPromoGrp];excludeFromStorefrontDisplay[default=false];status(code)[unique=true,default=UNPUBLISHED] +"#% afterEach: de.hybris.platform.core.Registry.getApplicationContext().getBean(""ruleEngineSystemSetup"").registerSourceRuleForDeployment(impex.getLastImportedItem(), new String[]{$promotionsModule,$previewModule});" +;FreeGiftCouponProm;160;1;couponPromotionRuleGroup;"[{""definitionId"":""y_qualifying_coupons"",""parameters"":{""coupons"":{""uuid"":""ff7280f8-3272-4ddb-9e92-d26a083ec234"",""type"":""List(ItemType(AbstractCoupon))"",""value"":[""FreeGiftCoupon""]}},""children"":[]},{""definitionId"":""y_cart_total"",""parameters"":{""value"":{""uuid"":""b4959112-d22e-4bc3-a87c-80c4116ba887"",""type"":""Map(ItemType(Currency),java.math.BigDecimal)"",""value"":{""GBP"":200}},""operator"":{""uuid"":""677a62d0-c8cd-4c47-af0b-91d19b6daa9d"",""type"":""Enum(de.hybris.platform.ruledefinitions.AmountOperator)"",""value"":""GREATER_THAN_OR_EQUAL""}},""children"":[]}]";"[{""definitionId"":""y_free_gift"",""parameters"":{""product"":{""uuid"":""5c9f025c-b351-46ee-bc49-662d8746ce56"",""type"":""ItemType(Product)"",""value"":""443175""},""quantity"":{""uuid"":""395a45d1-6f14-4ddd-ae48-d6ef8dc9c468"",""type"":""java.lang.Integer"",""value"":1}}}]";; + +INSERT_UPDATE PromotionSourceRule;code[unique=true];priority;maxAllowedRuns;ruleGroup(code);conditions;actions;website(Identifier)[default=$defaultPromoGrp];excludeFromStorefrontDisplay[default=false];status(code)[unique=true,default=UNPUBLISHED] +"#% afterEach: de.hybris.platform.core.Registry.getApplicationContext().getBean(""ruleEngineSystemSetup"").registerSourceRuleForDeployment(impex.getLastImportedItem(), new String[]{$promotionsModule,$previewModule});" +;CouponForProductProm;155;1;couponPromotionRuleGroup;"[{""definitionId"":""y_qualifying_coupons"",""parameters"":{""coupons"":{""uuid"":""baa9d67e-66ec-4989-b3c4-7589346db224"",""type"":""List(ItemType(AbstractCoupon))"",""value"":[""CouponForProduct""]}},""children"":[]},{""definitionId"":""y_qualifying_categories"",""parameters"":{""quantity"":{""uuid"":""20fd1aab-396d-4f36-a397-7d11d4549012"",""type"":""java.lang.Integer"",""value"":1},""categories_operator"":{""uuid"":""504c05f5-9092-4827-9950-29b60dd30d3d"",""type"":""Enum(de.hybris.platform.ruledefinitions.CollectionOperator)"",""value"":""CONTAINS_ANY""},""excluded_categories"":{""uuid"":""671ae763-e0c7-4fb9-bb34-c6367f684622"",""type"":""List(ItemType(Category))""},""excluded_products"":{""uuid"":""7f1a0063-0625-437c-90c4-ec00b5e6a3d4"",""type"":""List(ItemType(Product))""},""categories"":{""uuid"":""fe873025-b08c-452c-a649-906cde3fab06"",""type"":""List(ItemType(Category))"",""value"":[""588""]},""operator"":{""uuid"":""6a1f11ef-8bc0-490d-aa69-6e9b70d37e4c"",""type"":""Enum(de.hybris.platform.ruledefinitions.AmountOperator)"",""value"":""GREATER_THAN_OR_EQUAL""}},""children"":[]}]";"[{""definitionId"":""y_order_entry_percentage_discount"",""parameters"":{""value"":{""uuid"":""7850ea3a-cd43-4a94-b12d-c2ef6b81937a"",""type"":""java.math.BigDecimal"",""value"":25}}}]";; + + +################Notification feature E2E test data################################################################### +UPDATE CronJob;code[unique=true];active[default=false] +;stockLevelStatusCronJob +;expiredInterestsCleanUpJob + +UPDATE StockLevel;productCode[unique=true];warehouse(code)[unique=true];inStockStatus(code) +;1978440_green;warehouse_e;forceOutOfStock + +INSERT_UPDATE ProductInterest;customer(originalUid)[unique=true, default='appareluk-test-user-with-orders@ydev.hybris.com'];product(code,catalogVersion(catalog(id),version))[unique=true];baseStore(uid)[unique=true,default=$storeUid];notificationType(code)[unique=true, default='BACK_IN_STOCK'];notificationChannels(code)[default='EMAIL'];baseSite(uid)[default=$spaSiteUid];language(isocode)[default=$lang] +;;29532:$productCatalog:Staged;;;;; +;;300046592:$productCatalog:Staged;;;;; +;;300015407:$productCatalog:Staged;;;;; +;;300044624:$productCatalog:Staged;;;;; +;;300020465:$productCatalog:Staged;;;;; +;;300310300:$productCatalog:Staged;;;;; +;;300044599:$productCatalog:Staged;;;;; +;;300005449:$productCatalog:Staged;;;;; +;;300441924:$productCatalog:Staged;;;;; +;;300737581:$productCatalog:Staged;;;;; +;;300737513:$productCatalog:Staged;;;;; + +#test data for customer coupon +INSERT_UPDATE CustomerCoupon;couponId(id)[unique=true];startDate[default=01-05-2017,dateformat=dd-MM-yyyy];endDate[default=01-05-9999,dateformat=dd-MM-yyyy];active[default=true];assignable[default=true] +;customerCoupon1;01-05-2000;01-05-9000 +;customerCoupon2 +;customerCoupon3 +;customerCoupon4 +;customerCoupon5 +;customerCoupon6 +;customerCoupon7 +;customerCoupon8 +;customerCoupon9 +;customerCoupon10 +;customerCoupon11;01-05-2019;01-06-9999 + +INSERT_UPDATE Customer;groups(uid);uid[unique=true];name;password[default='Password123.'];customerId +;customergroup;appareluk-test-user-with-coupons@ydev.hybris.com;Test User;;appareluk-test-user-with-coupons@ydev.hybris.com; + +INSERT_UPDATE Address;owner(Customer.uid)[unique=true];streetname[unique=true];postalcode;town[default='Washington'];region(isocode)[default='US-WA'];country(isocode)[default='US'];shippingAddress[default=true];firstname;lastname;title(code)[default='mr'] +;appareluk-test-user-with-coupons@ydev.hybris.com;Address line0;100000;;;;;User;Test; +INSERT_UPDATE CustomerCoupon2Customer;source(CustomerCoupon.couponId)[unique=true];target(Customer.uid)[unique=true] +;customerCoupon1;appareluk-test-user-with-coupons@ydev.hybris.com; +;customerCoupon2;appareluk-test-user-with-coupons@ydev.hybris.com; +;customerCoupon3;appareluk-test-user-with-coupons@ydev.hybris.com; +;customerCoupon4;appareluk-test-user-with-coupons@ydev.hybris.com; +;customerCoupon5;appareluk-test-user-with-coupons@ydev.hybris.com; +;customerCoupon6;appareluk-test-user-with-coupons@ydev.hybris.com; +;customerCoupon7;appareluk-test-user-with-coupons@ydev.hybris.com; +;customerCoupon8;appareluk-test-user-with-coupons@ydev.hybris.com; +;customerCoupon9;appareluk-test-user-with-coupons@ydev.hybris.com; +;customerCoupon10;appareluk-test-user-with-coupons@ydev.hybris.com; +;customerCoupon11;appareluk-test-user-with-coupons@ydev.hybris.com; + +INSERT_UPDATE CustomerCoupon;couponId(id)[unique=true];startDate[default=01-05-2017,dateformat=dd-MM-yyyy];active[default=true];assignable[default=true] +;midautumn +;dragonboat +;springfestival + +INSERT_UPDATE PromotionSourceRule;code[unique=true];priority;maxAllowedRuns;stackable[default=false];ruleGroup(code)[default=$defaultRuleGroup];conditions;actions;website(Identifier)[default=$defaultPromoGrp];excludeFromStorefrontDisplay[default=false];startDate[default=01-05-2017,dateformat=dd-MM-yyyy] +"#% afterEach: de.hybris.platform.core.Registry.getApplicationContext().getBean(""ruleEngineSystemSetup"").registerSourceRuleForDeployment(impex.getLastImportedItem(), new String[]{$promotionsModule,$previewModule});" +;midautumncouponbasedpromotion;180;1;;;"[{""definitionId"":""y_qualifying_coupons"",""parameters"":{""coupons"":{""uuid"":""228f0f4f-d24f-4325-b1a7-ef9b47c69f21"",""type"":""List(ItemType(AbstractCoupon))"",""value"":[""midautumn""]}},""children"":[]},{""definitionId"":""y_qualifying_products"",""parameters"":{""catalog"":{""uuid"":""bc350ff4-a10e-45e5-91ee-0bbed6d4b63a"",""type"":""ItemType(Catalog)"",""value"":""$productCatalog""},""products_operator"":{""uuid"":""d8d6576e-a579-49bd-a36e-3e8abc0a93ce"",""type"":""Enum(de.hybris.platform.ruledefinitions.CollectionOperator)"",""value"":""CONTAINS_ANY""},""quantity"":{""uuid"":""8b8fae6d-183a-4118-9ea3-af21a27a84d2"",""type"":""java.lang.Integer"",""value"":1},""operator"":{""uuid"":""58143771-ab68-450a-8e92-5b46891a3f0a"",""type"":""Enum(de.hybris.platform.ruledefinitions.AmountOperator)"",""value"":""GREATER_THAN_OR_EQUAL""},""products"":{""uuid"":""2a1d0128-529d-4f42-8239-8a7f78369991"",""type"":""List(ItemType(Product))"",""value"":[""300046592""]}},""children"":[]}]";"[{""definitionId"":""y_order_entry_fixed_discount"",""parameters"":{""value"":{""uuid"":""1d8bf69f-f897-4d3b-bed9-70ab11c3b6b9"",""type"":""Map(ItemType(Currency),java.math.BigDecimal)"",""value"":{""GBP"":20}}}}]" + +INSERT_UPDATE PromotionSourceRule;code[unique=true];priority;maxAllowedRuns;stackable[default=false];ruleGroup(code)[default=$defaultRuleGroup];conditions;actions;website(Identifier)[default=$defaultPromoGrp];excludeFromStorefrontDisplay[default=false];startDate[default=01-05-2017,dateformat=dd-MM-yyyy] +"#% afterEach: de.hybris.platform.core.Registry.getApplicationContext().getBean(""ruleEngineSystemSetup"").registerSourceRuleForDeployment(impex.getLastImportedItem(), new String[]{$promotionsModule,$previewModule});" +;dragonboatcouponbasedpromotion;180;1;;;"[{""definitionId"":""y_qualifying_coupons"",""parameters"":{""coupons"":{""uuid"":""228f0f4f-d24f-4325-b1a7-ef9b47c69f21"",""type"":""List(ItemType(AbstractCoupon))"",""value"":[""dragonboat""]}},""children"":[]},{""definitionId"":""y_cart_total"",""parameters"":{""value"":{""uuid"":""f44d5ee7-1f6b-43b1-8542-4bc084c70bfc"",""type"":""Map(ItemType(Currency),java.math.BigDecimal)"",""value"":{""GBP"":1000}},""operator"":{""uuid"":""af9f4980-c5a8-40bd-8f1f-151e4e6d7506"",""type"":""Enum(de.hybris.platform.ruledefinitions.AmountOperator)"",""value"":""GREATER_THAN_OR_EQUAL""}},""children"":[]}]";"[{""definitionId"":""y_order_percentage_discount"",""parameters"":{""value"":{""uuid"":""3ae37229-4a94-4aba-821b-aaf640c19423"",""type"":""java.math.BigDecimal"",""value"":20}}}]" + +INSERT_UPDATE PromotionSourceRule;code[unique=true];priority;maxAllowedRuns;stackable[default=false];ruleGroup(code)[default=$defaultRuleGroup];conditions;actions;website(Identifier)[default=$defaultPromoGrp];excludeFromStorefrontDisplay[default=false];startDate[default=01-05-2017,dateformat=dd-MM-yyyy] +"#% afterEach: de.hybris.platform.core.Registry.getApplicationContext().getBean(""ruleEngineSystemSetup"").registerSourceRuleForDeployment(impex.getLastImportedItem(), new String[]{$promotionsModule,$previewModule});" +;springfestivalcouponbasedpromotion;180;1;;;"[{""definitionId"":""y_qualifying_coupons"",""parameters"":{""coupons"":{""uuid"":""b2538f8a-f1e4-445e-8ab8-9224092901e9"",""type"":""List(ItemType(AbstractCoupon))"",""value"":[""springfestival""]}},""children"":[]},{""definitionId"":""y_qualifying_categories"",""parameters"":{""quantity"":{""uuid"":""f65892a0-e6f9-4fba-9987-1f55436b5715"",""type"":""java.lang.Integer"",""value"":1},""categories_operator"":{""uuid"":""ed1266e8-960f-4a41-a44a-5623e825bf6d"",""type"":""Enum(de.hybris.platform.ruledefinitions.CollectionOperator)"",""value"":""CONTAINS_ANY""},""excluded_categories"":{""uuid"":""7a87900e-1a2d-497e-9bb9-f63fcfa05cc2"",""type"":""List(ItemType(Category))""},""categories"":{""uuid"":""0e3f1f97-88e8-4081-b121-18244da432e7"",""type"":""List(ItemType(Category))"",""value"":[""577""]},""excluded_products"":{""uuid"":""d04460f6-8580-40a3-a22a-7fbe62dae09a"",""type"":""List(ItemType(Product))""},""operator"":{""uuid"":""00ea6501-ca9a-4ded-b833-6bde17855eba"",""type"":""Enum(de.hybris.platform.ruledefinitions.AmountOperator)"",""value"":""GREATER_THAN_OR_EQUAL""}},""children"":[]}]";"[{""definitionId"":""y_order_fixed_discount"",""parameters"":{""value"":{""uuid"":""9fe191b0-996a-4f3b-91d8-248f64cff2d6"",""type"":""Map(ItemType(Currency),java.math.BigDecimal)"",""value"":{""GBP"":5}}}}]" + +INSERT_UPDATE PromotionSourceRuleTemplate;code[unique=true];maxAllowedRuns;ruleGroup(code)[default=$defaultRuleGroup];conditions;actions +;coupon_order_threshold_percentage_discount;1;;"[{""definitionId"":""y_qualifying_coupons"",""parameters"":{""coupons"":{""uuid"":""bc31e8c0-b7b5-47ec-b129-6ed062b73bd4"",""type"":""List(ItemType(AbstractCoupon))""}},""children"":[]},{""definitionId"":""y_cart_total"",""parameters"":{""value"":{""uuid"":""fd76d28e-66ad-4daa-aa6e-0e0f07a6d5e6"",""type"":""Map(ItemType(Currency),java.math.BigDecimal)""},""operator"":{""uuid"":""1451f6d0-d31a-4fd6-a15d-8fde3778e3f5"",""type"":""Enum(de.hybris.platform.ruledefinitions.AmountOperator)"",""value"":""GREATER_THAN_OR_EQUAL""}},""children"":[]}]";"[{""definitionId"":""y_order_percentage_discount"",""parameters"":{""value"":{""uuid"":""f2de1179-37b3-4646-8c2a-d4f77d5e64b5"",""type"":""java.math.BigDecimal""}}}]" + +INSERT_UPDATE PromotionSourceRule;code[unique=true];name[lang=$lang];description[lang=$lang];messageFired[lang=$lang];status(code)[unique=true,default=UNPUBLISHED] +;midautumncouponbasedpromotion;Buy PowerShot A480 and get $20 off;;Buy product {2a1d0128-529d-4f42-8239-8a7f78369991} and get {1d8bf69f-f897-4d3b-bed9-70ab11c3b6b9} off +;dragonboatcouponbasedpromotion;Buy over $1000 get 20% off on cart;A percentage discount is applied to the cart when the order threshold value is reached;Buy over {f44d5ee7-1f6b-43b1-8542-4bc084c70bfc} get {3ae37229-4a94-4aba-821b-aaf640c19423}% off on cart +;springfestivalcouponbasedpromotion;Buy any item in the webcam category get $5 on cart;A fixed discount is applied to the cart when an item in the webcam category is purchased;Buy any webcam get {9fe191b0-996a-4f3b-91d8-248f64cff2d6} discount on cart + +INSERT_UPDATE CustomerCoupon;couponId(id)[unique=true];name[lang=$lang];description[lang=$lang] +;midautumn;Buy PowerShot A480 and get $20 off;Buy PowerShot A480 and get $20 off +;dragonboat;Buy over $1000 get 20% off on cart;Buy over $1000 get 20% off on cart +;springfestival;Buy any item in the webcam category get $5 on cart + +INSERT_UPDATE PromotionSourceRuleTemplate;code[unique=true];name[lang=$lang];description[lang=$lang];messageFired[lang=$lang] +;coupon_order_threshold_percentage_discount;Coupon order threshold percentage discount;A percentage discount is applied to the cart when the order threshold value is reached;Buy over {fd76d28e-66ad-4daa-aa6e-0e0f07a6d5e6} get {f2de1179-37b3-4646-8c2a-d4f77d5e64b5}% off on cart +## Save for later E2E test data +INSERT_UPDATE PromotionSourceRule[$ruleImportProcessor];code[unique=true];name[lang=en];description[lang=en];messageFired[lang=en]; +;GiftProductProm;Gift Product Promotion;Gift Product Promotion description;Gift Product Promotion message + +INSERT_UPDATE PromotionSourceRule;code[unique=true];priority;maxAllowedRuns;ruleGroup(code);conditions;actions;website(Identifier)[default=$defaultPromoGrp];excludeFromStorefrontDisplay[default=false];status(code)[unique=true,default=UNPUBLISHED] +"#% afterEach: de.hybris.platform.core.Registry.getApplicationContext().getBean(""ruleEngineSystemSetup"").registerSourceRuleForDeployment(impex.getLastImportedItem(), new String[]{$promotionsModule,$previewModule});" +;GiftProductProm;160;1;;"[{""definitionId"":""y_qualifying_products"",""parameters"":{""products_operator"":{""uuid"":""c23447d8-17a1-4b86-b58c-d0a68086165f"",""type"":""Enum(de.hybris.platform.ruledefinitions.CollectionOperator)"",""value"":""CONTAINS_ANY""},""quantity"":{""uuid"":""dd642a57-e1f9-43db-a8bd-5c6f7c8af9a3"",""type"":""java.lang.Integer"",""value"":1},""catalog"":{""uuid"":""3d31d041-c05e-4dc4-9c1d-daad97da911c"",""type"":""ItemType(Catalog)"",""value"":""$productCatalog""},""operator"":{""uuid"":""eb27416c-323f-44e5-8fdfb7cfaea996e2"",""type"":""Enum(de.hybris.platform.ruledefinitions.AmountOperator)"",""value"":""GREATER_THAN_OR_EQUAL""},""products"":{""uuid"":""c7301cd8-bc26-457c-ae7a-d8275c855764"",""type"":""List(ItemType(Product))"",""value"":[""1934796""]}},""children"":[]}]";"[{""definitionId"":""y_free_gift"",""parameters"":{""product"":{""uuid"":""f50646d8-fc86-4c60-9b74-e5dc8643cc52"",""type"":""ItemType(Product)"",""value"":""137220""},""quantity"":{""uuid"":""aabb2475-66e1-4e6e-aa47-72b02b10c0e6"",""type"":""java.lang.Integer"",""value"":1}}}]";; + + +############# CDS (Merchandising carousel) E2E test data ################### +$contentCatalog=apparel-uk-spaContentCatalog +$contentCV=catalogVersion(CatalogVersion.catalog(Catalog.id[default=$contentCatalog]),CatalogVersion.version[default=Online])[default=$contentCatalog:Online] + +# Homepage carousel +# Create the CMS Component +INSERT_UPDATE MerchandisingCarouselComponent;$contentCV[unique=true];uid[unique=true];name;title;numberToDisplay;strategy;&componentRef +;;HomepageE2EMerchandisingCarousel;Homepage E2E Merchandising Carousel;Homepage E2E Merchandising Carousel;10;00000000-0000-0000-0000-000000000000;HomepageE2EMerchandisingCarousel + +# Add the component to the slot +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid,$contentCV) +;;Section2CSlot-Homepage;HomepageE2EMerchandisingCarousel + +# Category Page carousel +# Create the CMS Component +INSERT_UPDATE MerchandisingCarouselComponent;$contentCV[unique=true];uid[unique=true];name;title;numberToDisplay;strategy;&componentRef +;;CategoryPageE2EMerchandisingCarousel;Category Page E2E Merchandising Carousel;Category Page E2E Merchandising Carousel;10;00000000-0000-0000-0000-000000000000;CategoryPageE2EMerchandisingCarousel + +# Add the component to the slot +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid,$contentCV) +;;BottomHeaderSlot;CategoryPageE2EMerchandisingCarousel + +# SLR Page carousel +# Create the CMS Component +INSERT_UPDATE MerchandisingCarouselComponent;$contentCV[unique=true];uid[unique=true];name;title;numberToDisplay;strategy;&componentRef +;;SLRCategoryPageE2EMerchandisingCarousel;SLR Category Page E2E Merchandising Carousel;SLR Category Page E2E Merchandising Carousel;10;00000000-0000-0000-0000-000000000000;SLRCategoryPageE2EMerchandisingCarousel + +# Add the component to the slot +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid,$contentCV) +;;SLRCamerasBottomHeaderSlot;SLRCategoryPageE2EMerchandisingCarousel +############################################################################ \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/electronics/consents.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/electronics/consents.impex old mode 100755 new mode 100644 index c62debf..ff22fc5 --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/electronics/consents.impex +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/electronics/consents.impex @@ -11,6 +11,6 @@ $siteUid=electronics-spa INSERT_UPDATE ConsentTemplate;id[unique=true];name;description;version[unique=true];baseSite(uid)[unique=true,default=$siteUid];exposed -;PERSONALIZATION;"I approve to this sample PERSONALIZATION consent";"This is a sample personalization consent description that will need to be updated or replaced.";0;;true +;PROFILE;"Allow SAP Commerce Cloud, Context-Driven Services tracking";"We would like to store your browsing behaviour so that our website can dynamically present you with a personalised browsing experience and our customer support agents can provide you with contextual customer support.";0;;true ;MARKETING_NEWSLETTER;"I approve to this sample MARKETING consent";"This is a sample marketing consent description that will need to be updated or replaced, based on the valid registration consent required.";0;;true ;STORE_USER_INFORMATION;"I approve to this sample STORE USER INFORMATION consent";"This is a sample store user information consent description that will need to be updated or replaced.";0;;true diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/electronics/site.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/electronics/site.impex old mode 100755 new mode 100644 index 8d0ff4c..f1283f0 --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/electronics/site.impex +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/electronics/site.impex @@ -20,10 +20,15 @@ $customSiteMapUrls=/Open-Catalogue/c/1?q=%3AtopRated%3AallPromotions%3ABOGOFElec $fullPathElectronics=https://localhost:4200 $language=en +$currency=USD + +### The last url pattern below is a wildcard for http(s)://localhost.* and should not be used in other sites than `electronics-spa` +$urlPatterns=(?i)^https?://[^/]+(/[^?]*)?\?(.*\&)?(site=$spaSiteUid)(|\&.*)$,(?i)^https?://$spaSiteUid\.[^/]+(|/.*|\?.*)$,(?i)^https?://api\.hybrisdev\.com(:[\d]+)?/rest/.*$,(?i)^https?://localhost(:[\d]+)?/rest/.*$,(?i)^https?://localhost(:[\d]+)?(|/.*|\?.*)$ +$urlEncodingAttributes=language,currency ### Site for spartacus INSERT_UPDATE CMSSite;uid[unique=true];theme(code);channel(code);stores(uid);contentCatalogs(id);defaultCatalog(id);defaultLanguage(isoCode);siteMapConfig(configId);urlPatterns;active;previewURL;startingPage(uid,$spaContentCV);urlEncodingAttributes;defaultPromotionGroup(Identifier)[default=electronicsPromoGrp] -;$spaSiteUid;;B2C;$storeUid;$spaContentCatalog;$productCatalog;$language;electronicsSiteMapConfig;;true;$fullPathElectronics;homepage +;$spaSiteUid;;B2C;$storeUid;$spaContentCatalog;$productCatalog;$language;electronicsSiteMapConfig;$urlPatterns;true;$fullPathElectronics/$spaSiteUid/$language/$currency;homepage;$urlEncodingAttributes UPDATE CMSSite;uid[unique=true];name[lang=$language] ;$spaSiteUid;"Spartacus Electronics Site" diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/electronics/solr.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/electronics/solr.impex new file mode 100644 index 0000000..11a519f --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/electronics/solr.impex @@ -0,0 +1,14 @@ +# --------------------------------------------------------------------------- +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# --------------------------------------------------------------------------- + +$solrIndexedType=electronicsProductType + + +# Non-facet properties +INSERT_UPDATE SolrIndexedProperty;solrIndexedType(identifier)[unique=true];name[unique=true];type(code);multiValue[default=true];facet[default=true];facetType(code);facetSort(code);priority;visible;categoryField[default=true];fieldValueProvider;facetDisplayNameProvider;topValuesProvider +;$solrIndexedType;customerCouponCode;string;;;Refine;Alpha;5000;false;;customerCouponCodeValueResolver;customerCouponFacetDisplayNameProvider;defaultTopValuesProvider + +# Category search query facets +INSERT_UPDATE SolrSearchQueryProperty;indexedProperty(name, solrIndexedType(identifier))[unique=true];searchQueryTemplate(name, indexedType(identifier))[unique=true][default=DEFAULT:$solrIndexedType];facet[default=true];facetType(code);includeInResponse[default=true];facetDisplayNameProvider;facetSortProvider;facetTopValuesProvider +;customerCouponCode:$solrIndexedType;;;Refine;;customerCouponFacetDisplayNameProvider; \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/electronics/solr_en.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/electronics/solr_en.impex new file mode 100644 index 0000000..a778a60 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/electronics/solr_en.impex @@ -0,0 +1,13 @@ +# --------------------------------------------------------------------------- +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# --------------------------------------------------------------------------- + +# Index Type +$solrIndexedType=electronicsProductType + +# Language +$lang=en + +# Solr Indexed Property +UPDATE SolrIndexedProperty;solrIndexedType(identifier)[unique=true];name[unique=true];displayName[lang=$lang] +;$solrIndexedType;customerCouponCode;"Customer coupon code" \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/electronics/test-data.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/electronics/test-data.impex new file mode 100644 index 0000000..a96ed61 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/electronics/test-data.impex @@ -0,0 +1,230 @@ +# --------------------------------------------------------------------------- +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# --------------------------------------------------------------------------- + +$defaultPromoGrp=electronicsPromoGrp +$promotionsModule="promotions-module" +$previewModule="promotions-preview-module" +$defaultRuleGroup=couponPromotionRuleGroup + +## ConsignmentTracking E2E test data +INSERT_UPDATE Customer;groups(uid);uid[unique=true];name;customerId +;customergroup;test-user-with-orders@ydev.hybris.com;Test User;test-user-with-orders@ydev.hybris.com; + +INSERT_UPDATE Address;owner(Customer.uid)[unique=true];streetname[unique=true];postalcode;town[default='Washington'];region(isocode)[default='US-WA'];country(isocode)[default='US'];shippingAddress[default=true];firstname;lastname;title(code)[default='mr'] +;test-user-with-orders@ydev.hybris.com;Address line0;100000;;;;;User;Test; + + +INSERT_UPDATE Order;code[unique=true];user(uid);date[dateformat=dd.MM.yyyy HH:mm];currency(isocode)[default='USD'];net[default=false];deliveryMode(code)[default='standard-gross'];Discounts(code);calculated[default=false];store(uid);site(uid);deliveryCost;totalPrice +;100000;test-user-with-orders@ydev.hybris.com;10.01.2019 10:40;;;;;;electronics;;5.26;754.66 +;100001;test-user-with-orders@ydev.hybris.com;10.01.2019 10:40;;;;;;electronics;;7.9;655.55 + +INSERT_UPDATE OrderEntry;order(code)[unique=true];product(code,catalogVersion(catalog(id),version))[unique=true];quantity[default=1];calculated[default=true];unit(code)[default='pieces'];entryNumber;basePrice;totalPrice +;100000;300938:electronicsProductCatalog:Online;;;;0;114.12;114.12 +;100000;1992693:electronicsProductCatalog:Online;;;;1;541.34;541.43 +;100000;1377492:electronicsProductCatalog:Online;;;;2;79.11;79.11 +;100001;300938:electronicsProductCatalog:Online;;;;0;114.12;114.12 +;100001;1992693:electronicsProductCatalog:Online;;;;1;541.34;541.43 + + +INSERT_UPDATE Consignment;code[unique=true];status(code)[default='SHIPPED'];order(code);shippingAddress(owner(Customer.uid));warehouse(code);trackingID;carrierDetails(code)[default='MockCarrier'] +;100000a;;100000;test-user-with-orders@ydev.hybris.com;warehouse_e;2019031500001; +;100000b;;100000;test-user-with-orders@ydev.hybris.com;warehouse_s;;; +;100000c;WAITING;100000;test-user-with-orders@ydev.hybris.com;warehouse_n;;; + + +INSERT_UPDATE ConsignmentEntry;consignment(code)[unique=true];orderEntry(order(code),entryNumber);quantity[default=1];shippedQuantity[default=1] +;100000a;100000:0 +;100000b;100000:1 +;100000c;100000:2 + +######## OMS/STOCK test data ########## + +# Updates the OMS ATP default formula for stock calculation to avoid products with placed orders to go out of stock +INSERT_UPDATE AtpFormula;code[unique=true];availability;allocation;cancellation;increase;reserved;shrinkage;wastage;returned +;Default_Formula;true;false;false;true;false;true;true;true + +# OMS sets electronics store tax group to Japan taxes. This fixes it. +INSERT_UPDATE BaseStore;uid[unique=true];taxGroup(code); +;electronics;us-taxes; + +## Out of stock product for E2E tests +UPDATE StockLevel;productCode[unique=true];warehouse(code)[default='warehouse_e',unique=true];inStockStatus(code) +;872912;Misato;forceOutOfStock +;872912;Yokosuka;forceOutOfStock +;872912;Shinbashi;forceOutOfStock +;872912;Nakano;forceOutOfStock +;872912;Tokio Flexstay Nippori Inn;forceOutOfStock +;872912;Tokio Hotel Metropolitan Tokyo;forceOutOfStock +;872912;Tokio Dormy Inn Tokyo Hatchobori;forceOutOfStock +;872912;Tokio Park Hotel Tokyo;forceOutOfStock +;872912;Yokohama Sakuragicho Washington Hotel;forceOutOfStock +;872912;Yokohama Comfort Hotel Yokohama Kannai;forceOutOfStock +;872912;Yokohama Hotel New Grand;forceOutOfStock +;872912;Matsudo;forceOutOfStock +;872912;Yokohama Hotel JAL City Kannai Yokohama;forceOutOfStock +;872912;Osaka Crowne Plaza Hotel Ana Osaka;forceOutOfStock +;872912;Osaka Ramada Osaka;forceOutOfStock +;872912;Osaka Cross Hotel Osaka;forceOutOfStock +;872912;Nagoya Hilton Nagoya Hotel;forceOutOfStock +;872912;Nagoya Marriott Nagoya;forceOutOfStock +;872912;Nagoya Crowne Plaza Ana Grand Court Nagoya;forceOutOfStock +;872912;Nagoya The Westin Nagoya Castle;forceOutOfStock +;872912;Sapporo Ana Hotel Sapporo;forceOutOfStock +;872912;Ichikawa;forceOutOfStock +;872912;Sapporo Best Western Hotel Sapporo Nakajima Koen;forceOutOfStock +;872912;Kobe Hotel Monterey Amalie;forceOutOfStock +;872912;Kobe Hotel Monterey Kobe;forceOutOfStock +;872912;Kobe Sannomiya Terminal Hotel;forceOutOfStock +;872912;Kobe the b;forceOutOfStock +;872912;Fukuoka Hotel Monterey La Soeur Fukuoka;forceOutOfStock +;872912;Fukuoka Hilton Fukuoka Sea Hawk;forceOutOfStock +;872912;Fukuoka Hotel Nikko Fukuoka;forceOutOfStock +;872912;Kawasaki Mets Kawasaki Hotel;forceOutOfStock +;872912;Kawasaki Mets Mizonokuchi Hotel;forceOutOfStock +;872912;Kawasaki Hotel Sunroute Kawasaki;forceOutOfStock +;872912;Kawasaki Pearl Hotel Kawasaki;forceOutOfStock +;872912;warehouse_e;forceOutOfStock + + +######## COUPONS test data ########## + +## Coupon E2E test data +INSERT_UPDATE SingleCodeCoupon;couponId(id)[unique=true];maxRedemptionsPerCustomer;maxTotalRedemptions;active[default=true] +;CouponForProduct;;; +;CouponForCart;;; +;FreeGiftCoupon;;; + +INSERT_UPDATE PromotionSourceRule[$ruleImportProcessor];code[unique=true];name[lang=en];description[lang=en];messageFired[lang=en]; +;CouponForProductProm;Coupon For Product Promotion;Coupon For Product Promotion description;Coupon For Product Promotion message +;CouponForCartProm;Coupon For Cart Promotion;Coupon For Cart Promotion description;Coupon For Cart Promotion message +;FreeGiftCouponProm;Free Gift Coupon Promotion;Free Gift Coupon Promotion description;Free Gift Coupon Promotion message + +INSERT_UPDATE PromotionSourceRule;code[unique=true];priority;maxAllowedRuns;ruleGroup(code);conditions;actions;website(Identifier)[default=$defaultPromoGrp];excludeFromStorefrontDisplay[default=false];status(code)[unique=true,default=UNPUBLISHED] +"#% afterEach: de.hybris.platform.core.Registry.getApplicationContext().getBean(""ruleEngineSystemSetup"").registerSourceRuleForDeployment(impex.getLastImportedItem(), new String[]{$promotionsModule,$previewModule});" +;CouponForCartProm;25;1;couponPromotionRuleGroup;"[{""definitionId"":""y_qualifying_coupons"",""parameters"":{""coupons"":{""uuid"":""9644b8a6-ad94-4990-afca-2a132e1bd171"",""type"":""List(ItemType(AbstractCoupon))"",""value"":[""CouponForCart""]}},""children"":[]}]";"[{""definitionId"":""y_order_fixed_discount"",""parameters"":{""value"":{""uuid"":""b4dfe431-e526-42e2-bb08-0dea08f310db"",""type"":""Map(ItemType(Currency),java.math.BigDecimal)"",""value"":{""USD"":10}}}}]";; + +INSERT_UPDATE PromotionSourceRule;code[unique=true];priority;maxAllowedRuns;ruleGroup(code);conditions;actions;website(Identifier)[default=$defaultPromoGrp];excludeFromStorefrontDisplay[default=false];status(code)[unique=true,default=UNPUBLISHED] +"#% afterEach: de.hybris.platform.core.Registry.getApplicationContext().getBean(""ruleEngineSystemSetup"").registerSourceRuleForDeployment(impex.getLastImportedItem(), new String[]{$promotionsModule,$previewModule});" +;FreeGiftCouponProm;160;1;couponPromotionRuleGroup;"[{""definitionId"":""y_qualifying_coupons"",""parameters"":{""coupons"":{""uuid"":""ff7280f8-3272-4ddb-9e92-d26a083ec234"",""type"":""List(ItemType(AbstractCoupon))"",""value"":[""FreeGiftCoupon""]}},""children"":[]},{""definitionId"":""y_cart_total"",""parameters"":{""value"":{""uuid"":""b4959112-d22e-4bc3-a87c-80c4116ba887"",""type"":""Map(ItemType(Currency),java.math.BigDecimal)"",""value"":{""USD"":200}},""operator"":{""uuid"":""677a62d0-c8cd-4c47-af0b-91d19b6daa9d"",""type"":""Enum(de.hybris.platform.ruledefinitions.AmountOperator)"",""value"":""GREATER_THAN_OR_EQUAL""}},""children"":[]}]";"[{""definitionId"":""y_free_gift"",""parameters"":{""product"":{""uuid"":""5c9f025c-b351-46ee-bc49-662d8746ce56"",""type"":""ItemType(Product)"",""value"":""443175""},""quantity"":{""uuid"":""395a45d1-6f14-4ddd-ae48-d6ef8dc9c468"",""type"":""java.lang.Integer"",""value"":1}}}]";; + +INSERT_UPDATE PromotionSourceRule;code[unique=true];priority;maxAllowedRuns;ruleGroup(code);conditions;actions;website(Identifier)[default=$defaultPromoGrp];excludeFromStorefrontDisplay[default=false];status(code)[unique=true,default=UNPUBLISHED] +"#% afterEach: de.hybris.platform.core.Registry.getApplicationContext().getBean(""ruleEngineSystemSetup"").registerSourceRuleForDeployment(impex.getLastImportedItem(), new String[]{$promotionsModule,$previewModule});" +;CouponForProductProm;155;1;couponPromotionRuleGroup;"[{""definitionId"":""y_qualifying_coupons"",""parameters"":{""coupons"":{""uuid"":""baa9d67e-66ec-4989-b3c4-7589346db224"",""type"":""List(ItemType(AbstractCoupon))"",""value"":[""CouponForProduct""]}},""children"":[]},{""definitionId"":""y_qualifying_categories"",""parameters"":{""quantity"":{""uuid"":""20fd1aab-396d-4f36-a397-7d11d4549012"",""type"":""java.lang.Integer"",""value"":1},""categories_operator"":{""uuid"":""504c05f5-9092-4827-9950-29b60dd30d3d"",""type"":""Enum(de.hybris.platform.ruledefinitions.CollectionOperator)"",""value"":""CONTAINS_ANY""},""excluded_categories"":{""uuid"":""671ae763-e0c7-4fb9-bb34-c6367f684622"",""type"":""List(ItemType(Category))""},""excluded_products"":{""uuid"":""7f1a0063-0625-437c-90c4-ec00b5e6a3d4"",""type"":""List(ItemType(Product))""},""categories"":{""uuid"":""fe873025-b08c-452c-a649-906cde3fab06"",""type"":""List(ItemType(Category))"",""value"":[""588""]},""operator"":{""uuid"":""6a1f11ef-8bc0-490d-aa69-6e9b70d37e4c"",""type"":""Enum(de.hybris.platform.ruledefinitions.AmountOperator)"",""value"":""GREATER_THAN_OR_EQUAL""}},""children"":[]}]";"[{""definitionId"":""y_order_entry_percentage_discount"",""parameters"":{""value"":{""uuid"":""7850ea3a-cd43-4a94-b12d-c2ef6b81937a"",""type"":""java.math.BigDecimal"",""value"":25}}}]";; + + +################Notification feature E2E test data################################################################### +UPDATE CronJob;code[unique=true];active[default=false] +;stockLevelStatusCronJob +;expiredInterestsCleanUpJob + +#test data for customer coupon +INSERT_UPDATE CustomerCoupon;couponId(id)[unique=true];startDate[default=01-05-2017,dateformat=dd-MM-yyyy];endDate[default=01-05-9999,dateformat=dd-MM-yyyy];active[default=true];assignable[default=true] +;customerCoupon1;01-05-2000;01-05-9000 +;customerCoupon2 +;customerCoupon3 +;customerCoupon4 +;customerCoupon5 +;customerCoupon6 +;customerCoupon7 +;customerCoupon8 +;customerCoupon9 +;customerCoupon10 +;customerCoupon11;01-05-2019;01-06-9999 + +INSERT_UPDATE Customer;groups(uid);uid[unique=true];name;customerId +;customergroup;test-user-with-coupons@ydev.hybris.com;Test User;test-user-with-coupons@ydev.hybris.com; + +INSERT_UPDATE Address;owner(Customer.uid)[unique=true];streetname[unique=true];postalcode;town[default='Washington'];region(isocode)[default='US-WA'];country(isocode)[default='US'];shippingAddress[default=true];firstname;lastname;title(code)[default='mr'] +;test-user-with-coupons@ydev.hybris.com;Address line0;100000;;;;;User;Test; +INSERT_UPDATE CustomerCoupon2Customer;source(CustomerCoupon.couponId)[unique=true];target(Customer.uid)[unique=true] +;customerCoupon1;test-user-with-coupons@ydev.hybris.com; +;customerCoupon2;test-user-with-coupons@ydev.hybris.com; +;customerCoupon3;test-user-with-coupons@ydev.hybris.com; +;customerCoupon4;test-user-with-coupons@ydev.hybris.com; +;customerCoupon5;test-user-with-coupons@ydev.hybris.com; +;customerCoupon6;test-user-with-coupons@ydev.hybris.com; +;customerCoupon7;test-user-with-coupons@ydev.hybris.com; +;customerCoupon8;test-user-with-coupons@ydev.hybris.com; +;customerCoupon9;test-user-with-coupons@ydev.hybris.com; +;customerCoupon10;test-user-with-coupons@ydev.hybris.com; +;customerCoupon11;test-user-with-coupons@ydev.hybris.com; + +$defaultPromoGrp=electronicsPromoGrp +$defaultRuleGroup=couponPromotionRuleGroup +$promotionsModule="promotions-module" +$previewModule="promotions-preview-module" +$lang=en + +INSERT_UPDATE CustomerCoupon;couponId(id)[unique=true];startDate[default=01-05-2017,dateformat=dd-MM-yyyy];active[default=true];assignable[default=true] +;midautumn +;dragonboat +;springfestival + +INSERT_UPDATE PromotionSourceRule;code[unique=true];priority;maxAllowedRuns;stackable[default=false];ruleGroup(code)[default=$defaultRuleGroup];conditions;actions;website(Identifier)[default=$defaultPromoGrp];excludeFromStorefrontDisplay[default=false];startDate[default=01-05-2017,dateformat=dd-MM-yyyy] +"#% afterEach: de.hybris.platform.core.Registry.getApplicationContext().getBean(""ruleEngineSystemSetup"").registerSourceRuleForDeployment(impex.getLastImportedItem(), new String[]{$promotionsModule,$previewModule});" +;midautumncouponbasedpromotion;180;1;;;"[{""definitionId"":""y_qualifying_coupons"",""parameters"":{""coupons"":{""uuid"":""228f0f4f-d24f-4325-b1a7-ef9b47c69f21"",""type"":""List(ItemType(AbstractCoupon))"",""value"":[""midautumn""]}},""children"":[]},{""definitionId"":""y_qualifying_products"",""parameters"":{""catalog"":{""uuid"":""bc350ff4-a10e-45e5-91ee-0bbed6d4b63a"",""type"":""ItemType(Catalog)"",""value"":""electronicsProductCatalog""},""products_operator"":{""uuid"":""d8d6576e-a579-49bd-a36e-3e8abc0a93ce"",""type"":""Enum(de.hybris.platform.ruledefinitions.CollectionOperator)"",""value"":""CONTAINS_ANY""},""quantity"":{""uuid"":""8b8fae6d-183a-4118-9ea3-af21a27a84d2"",""type"":""java.lang.Integer"",""value"":1},""operator"":{""uuid"":""58143771-ab68-450a-8e92-5b46891a3f0a"",""type"":""Enum(de.hybris.platform.ruledefinitions.AmountOperator)"",""value"":""GREATER_THAN_OR_EQUAL""},""products"":{""uuid"":""2a1d0128-529d-4f42-8239-8a7f78369991"",""type"":""List(ItemType(Product))"",""value"":[""1934793""]}},""children"":[]}]";"[{""definitionId"":""y_order_entry_fixed_discount"",""parameters"":{""value"":{""uuid"":""1d8bf69f-f897-4d3b-bed9-70ab11c3b6b9"",""type"":""Map(ItemType(Currency),java.math.BigDecimal)"",""value"":{""USD"":20}}}}]" + +INSERT_UPDATE PromotionSourceRule;code[unique=true];priority;maxAllowedRuns;stackable[default=false];ruleGroup(code)[default=$defaultRuleGroup];conditions;actions;website(Identifier)[default=$defaultPromoGrp];excludeFromStorefrontDisplay[default=false];startDate[default=01-05-2017,dateformat=dd-MM-yyyy] +"#% afterEach: de.hybris.platform.core.Registry.getApplicationContext().getBean(""ruleEngineSystemSetup"").registerSourceRuleForDeployment(impex.getLastImportedItem(), new String[]{$promotionsModule,$previewModule});" +;dragonboatcouponbasedpromotion;180;1;;;"[{""definitionId"":""y_qualifying_coupons"",""parameters"":{""coupons"":{""uuid"":""228f0f4f-d24f-4325-b1a7-ef9b47c69f21"",""type"":""List(ItemType(AbstractCoupon))"",""value"":[""dragonboat""]}},""children"":[]},{""definitionId"":""y_cart_total"",""parameters"":{""value"":{""uuid"":""f44d5ee7-1f6b-43b1-8542-4bc084c70bfc"",""type"":""Map(ItemType(Currency),java.math.BigDecimal)"",""value"":{""USD"":1000}},""operator"":{""uuid"":""af9f4980-c5a8-40bd-8f1f-151e4e6d7506"",""type"":""Enum(de.hybris.platform.ruledefinitions.AmountOperator)"",""value"":""GREATER_THAN_OR_EQUAL""}},""children"":[]}]";"[{""definitionId"":""y_order_percentage_discount"",""parameters"":{""value"":{""uuid"":""3ae37229-4a94-4aba-821b-aaf640c19423"",""type"":""java.math.BigDecimal"",""value"":20}}}]" + +INSERT_UPDATE PromotionSourceRule;code[unique=true];priority;maxAllowedRuns;stackable[default=false];ruleGroup(code)[default=$defaultRuleGroup];conditions;actions;website(Identifier)[default=$defaultPromoGrp];excludeFromStorefrontDisplay[default=false];startDate[default=01-05-2017,dateformat=dd-MM-yyyy] +"#% afterEach: de.hybris.platform.core.Registry.getApplicationContext().getBean(""ruleEngineSystemSetup"").registerSourceRuleForDeployment(impex.getLastImportedItem(), new String[]{$promotionsModule,$previewModule});" +;springfestivalcouponbasedpromotion;180;1;;;"[{""definitionId"":""y_qualifying_coupons"",""parameters"":{""coupons"":{""uuid"":""b2538f8a-f1e4-445e-8ab8-9224092901e9"",""type"":""List(ItemType(AbstractCoupon))"",""value"":[""springfestival""]}},""children"":[]},{""definitionId"":""y_qualifying_categories"",""parameters"":{""quantity"":{""uuid"":""f65892a0-e6f9-4fba-9987-1f55436b5715"",""type"":""java.lang.Integer"",""value"":1},""categories_operator"":{""uuid"":""ed1266e8-960f-4a41-a44a-5623e825bf6d"",""type"":""Enum(de.hybris.platform.ruledefinitions.CollectionOperator)"",""value"":""CONTAINS_ANY""},""excluded_categories"":{""uuid"":""7a87900e-1a2d-497e-9bb9-f63fcfa05cc2"",""type"":""List(ItemType(Category))""},""categories"":{""uuid"":""0e3f1f97-88e8-4081-b121-18244da432e7"",""type"":""List(ItemType(Category))"",""value"":[""577""]},""excluded_products"":{""uuid"":""d04460f6-8580-40a3-a22a-7fbe62dae09a"",""type"":""List(ItemType(Product))""},""operator"":{""uuid"":""00ea6501-ca9a-4ded-b833-6bde17855eba"",""type"":""Enum(de.hybris.platform.ruledefinitions.AmountOperator)"",""value"":""GREATER_THAN_OR_EQUAL""}},""children"":[]}]";"[{""definitionId"":""y_order_fixed_discount"",""parameters"":{""value"":{""uuid"":""9fe191b0-996a-4f3b-91d8-248f64cff2d6"",""type"":""Map(ItemType(Currency),java.math.BigDecimal)"",""value"":{""USD"":5}}}}]" + +INSERT_UPDATE PromotionSourceRuleTemplate;code[unique=true];maxAllowedRuns;ruleGroup(code)[default=$defaultRuleGroup];conditions;actions +;coupon_order_threshold_percentage_discount;1;;"[{""definitionId"":""y_qualifying_coupons"",""parameters"":{""coupons"":{""uuid"":""bc31e8c0-b7b5-47ec-b129-6ed062b73bd4"",""type"":""List(ItemType(AbstractCoupon))""}},""children"":[]},{""definitionId"":""y_cart_total"",""parameters"":{""value"":{""uuid"":""fd76d28e-66ad-4daa-aa6e-0e0f07a6d5e6"",""type"":""Map(ItemType(Currency),java.math.BigDecimal)""},""operator"":{""uuid"":""1451f6d0-d31a-4fd6-a15d-8fde3778e3f5"",""type"":""Enum(de.hybris.platform.ruledefinitions.AmountOperator)"",""value"":""GREATER_THAN_OR_EQUAL""}},""children"":[]}]";"[{""definitionId"":""y_order_percentage_discount"",""parameters"":{""value"":{""uuid"":""f2de1179-37b3-4646-8c2a-d4f77d5e64b5"",""type"":""java.math.BigDecimal""}}}]" + +INSERT_UPDATE PromotionSourceRule;code[unique=true];name[lang=$lang];description[lang=$lang];messageFired[lang=$lang];status(code)[unique=true,default=UNPUBLISHED] +;midautumncouponbasedpromotion;Buy PowerShot A480 and get $20 off;;Buy product {2a1d0128-529d-4f42-8239-8a7f78369991} and get {1d8bf69f-f897-4d3b-bed9-70ab11c3b6b9} off +;dragonboatcouponbasedpromotion;Buy over $1000 get 20% off on cart;A percentage discount is applied to the cart when the order threshold value is reached;Buy over {f44d5ee7-1f6b-43b1-8542-4bc084c70bfc} get {3ae37229-4a94-4aba-821b-aaf640c19423}% off on cart +;springfestivalcouponbasedpromotion;Buy any item in the webcam category get $5 on cart;A fixed discount is applied to the cart when an item in the webcam category is purchased;Buy any webcam get {9fe191b0-996a-4f3b-91d8-248f64cff2d6} discount on cart + +INSERT_UPDATE CustomerCoupon;couponId(id)[unique=true];name[lang=$lang];description[lang=$lang] +;midautumn;Buy PowerShot A480 and get $20 off;Buy PowerShot A480 and get $20 off +;dragonboat;Buy over $1000 get 20% off on cart;Buy over $1000 get 20% off on cart +;springfestival;Buy any item in the webcam category get $5 on cart + +INSERT_UPDATE PromotionSourceRuleTemplate;code[unique=true];name[lang=$lang];description[lang=$lang];messageFired[lang=$lang] +;coupon_order_threshold_percentage_discount;Coupon order threshold percentage discount;A percentage discount is applied to the cart when the order threshold value is reached;Buy over {fd76d28e-66ad-4daa-aa6e-0e0f07a6d5e6} get {f2de1179-37b3-4646-8c2a-d4f77d5e64b5}% off on cart + +## Save for later E2E test data +INSERT_UPDATE PromotionSourceRule[$ruleImportProcessor];code[unique=true];name[lang=en];description[lang=en];messageFired[lang=en]; +;GiftProductProm;Gift Product Promotion;Gift Product Promotion description;Gift Product Promotion message + +INSERT_UPDATE PromotionSourceRule;code[unique=true];priority;maxAllowedRuns;ruleGroup(code);conditions;actions;website(Identifier)[default=$defaultPromoGrp];excludeFromStorefrontDisplay[default=false];status(code)[unique=true,default=UNPUBLISHED] +"#% afterEach: de.hybris.platform.core.Registry.getApplicationContext().getBean(""ruleEngineSystemSetup"").registerSourceRuleForDeployment(impex.getLastImportedItem(), new String[]{$promotionsModule,$previewModule});" +;GiftProductProm;160;1;;"[{""definitionId"":""y_qualifying_products"",""parameters"":{""products_operator"":{""uuid"":""c23447d8-17a1-4b86-b58c-d0a68086165f"",""type"":""Enum(de.hybris.platform.ruledefinitions.CollectionOperator)"",""value"":""CONTAINS_ANY""},""quantity"":{""uuid"":""dd642a57-e1f9-43db-a8bd-5c6f7c8af9a3"",""type"":""java.lang.Integer"",""value"":1},""catalog"":{""uuid"":""3d31d041-c05e-4dc4-9c1d-daad97da911c"",""type"":""ItemType(Catalog)"",""value"":""electronicsProductCatalog""},""operator"":{""uuid"":""eb27416c-323f-44e5-8fdfb7cfaea996e2"",""type"":""Enum(de.hybris.platform.ruledefinitions.AmountOperator)"",""value"":""GREATER_THAN_OR_EQUAL""},""products"":{""uuid"":""c7301cd8-bc26-457c-ae7a-d8275c855764"",""type"":""List(ItemType(Product))"",""value"":[""1934796""]}},""children"":[]}]";"[{""definitionId"":""y_free_gift"",""parameters"":{""product"":{""uuid"":""f50646d8-fc86-4c60-9b74-e5dc8643cc52"",""type"":""ItemType(Product)"",""value"":""137220""},""quantity"":{""uuid"":""aabb2475-66e1-4e6e-aa47-72b02b10c0e6"",""type"":""java.lang.Integer"",""value"":1}}}]";; + +############# CDS (Merchandising carousel) E2E test data ################### +$contentCatalog=electronics-spaContentCatalog +$contentCV=catalogVersion(CatalogVersion.catalog(Catalog.id[default=$contentCatalog]),CatalogVersion.version[default=Online])[default=$contentCatalog:Online] + +# Homepage carousel +# Create the CMS Component +INSERT_UPDATE MerchandisingCarouselComponent;$contentCV[unique=true];uid[unique=true];name;title;numberToDisplay;strategy;&componentRef +;;HomepageE2EMerchandisingCarousel;Homepage E2E Merchandising Carousel;Homepage E2E Merchandising Carousel;10;00000000-0000-0000-0000-000000000000;HomepageE2EMerchandisingCarousel + +# Add the component to the slot +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid,$contentCV) +;;Section2CSlot-Homepage;HomepageE2EMerchandisingCarousel + +# Category Page carousel +# Create the CMS Component +INSERT_UPDATE MerchandisingCarouselComponent;$contentCV[unique=true];uid[unique=true];name;title;numberToDisplay;strategy;&componentRef +;;CategoryPageE2EMerchandisingCarousel;Category Page E2E Merchandising Carousel;Category Page E2E Merchandising Carousel;10;00000000-0000-0000-0000-000000000000;CategoryPageE2EMerchandisingCarousel + +# Add the component to the slot +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid,$contentCV)[mode=append] +;;BottomHeaderSlot;CategoryPageE2EMerchandisingCarousel + +# SLR Page carousel +# Create the CMS Component +INSERT_UPDATE MerchandisingCarouselComponent;$contentCV[unique=true];uid[unique=true];name;title;numberToDisplay;strategy;&componentRef +;;SLRCategoryPageE2EMerchandisingCarousel;SLR Category Page E2E Merchandising Carousel;SLR Category Page E2E Merchandising Carousel;10;00000000-0000-0000-0000-000000000000;SLRCategoryPageE2EMerchandisingCarousel + +# Add the component to the slot +INSERT_UPDATE ContentSlot;$contentCV[unique=true];uid[unique=true];cmsComponents(uid,$contentCV) +;;SLRCamerasBottomHeaderSlot;SLRCategoryPageE2EMerchandisingCarousel + diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/powertools/site.impex b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/powertools/site.impex old mode 100755 new mode 100644 index ca9c2c4..22d741c --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/powertools/site.impex +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/import/stores/powertools/site.impex @@ -21,9 +21,12 @@ $customSiteMapUrls=/Open-Catalogue/c/1?q=%3AtopRated%3AallPromotions%3ABOGOFpowe $fullPathpowertools=https://localhost:4200 $language=en +$urlPatterns=(?i)^https?://[^/]+(/[^?]*)?\?(.*\&)?(site=$spaSiteUid)(|\&.*)$,(?i)^https?://$spaSiteUid\.[^/]+(|/.*|\?.*)$,(?i)^https?://api\.hybrisdev\.com(:[\d]+)?/rest/.*$,(?i)^https?://localhost(:[\d]+)?/rest/.*$ +$urlEncodingAttributes=language,currency + ### Site for spartacus INSERT_UPDATE CMSSite;uid[unique=true];theme(code);channel(code);stores(uid);contentCatalogs(id);defaultCatalog(id);defaultLanguage(isoCode);siteMapConfig(configId);urlPatterns;active;previewURL;startingPage(uid,$spaContentCV);urlEncodingAttributes;defaultPromotionGroup(Identifier)[default=powertoolsPromoGrp] -;$spaSiteUid;;B2B;$storeUid;$spaContentCatalog;$productCatalog;$language;powertoolsSiteMapConfig;;true;$fullPathpowertools;homepage +;$spaSiteUid;;B2B;$storeUid;$spaContentCatalog;$productCatalog;$language;powertoolsSiteMapConfig;$urlPatterns;true;$fullPathpowertools/$spaSiteUid;homepage;$urlEncodingAttributes UPDATE CMSSite;uid[unique=true];name[lang=$language] ;$spaSiteUid;"Spartacus powertools Site" diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-customerCoupon_de.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-customerCoupon_de.properties new file mode 100644 index 0000000..64d1697 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-customerCoupon_de.properties @@ -0,0 +1,25 @@ +# --------------------------------------------------------------------------- +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# --------------------------------------------------------------------------- + +effective=Ihr Coupon ist bald gültig +expire=Ihr Coupon läuft bald ab +couponLable=Couponname +couponName={0} +name=Ihr Coupon +validityDate=Gültigkeitsdatum +summary=Couponzusammenfassung +condition=Couponbedingung +emailCouponSubject=Couponbenachrichtigung +myAccount=Mein Konto +storeFinder=Händlersuche +salutation=Sehr geehrte(r) {0} {1} +complimentaryClosing=Vielen Dank! +signature=Kundendienst +help=Hilfe +contactUs=Kontakt +contactUsPage=http://www.hybris.com/en/contact +contactUsEmailAddress=customerservices@hybris.com +termsAndCondition=Allgemeine Geschäftsbedingungen +validityDateFrom=Von +validityDateTo=Bis diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-customerCoupon_en.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-customerCoupon_en.properties new file mode 100644 index 0000000..c16c363 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-customerCoupon_en.properties @@ -0,0 +1,25 @@ +# --------------------------------------------------------------------------- +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# --------------------------------------------------------------------------- + +effective=Your coupon will take effect soon +expire=Your coupon will expire soon +couponLable=Coupon name +couponName={0} +name=Your coupon +validityDate=Validity date +summary=Coupon summary +condition=Coupon condition +emailCouponSubject=Coupon notification +myAccount=My Account +storeFinder=Store Finder +salutation=Dear {0} {1} +complimentaryClosing=Thank you. +signature=Customer Services +help=Help +contactUs=Contact Us +contactUsPage=http://www.hybris.com/en/contact +contactUsEmailAddress=customerservices@hybris.com +termsAndCondition=Terms & Conditions +validityDateFrom=From +validityDateTo=To \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-customerCoupon_ja.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-customerCoupon_ja.properties new file mode 100644 index 0000000..886ebdb --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-customerCoupon_ja.properties @@ -0,0 +1,25 @@ +# --------------------------------------------------------------------------- +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# --------------------------------------------------------------------------- + +effective=クーポンはすぐに有効になります +expire=クーポンはすぐに有効期限切れになります +couponLable=クーポン名 +couponName={0} +name=クーポン +validityDate=有効日付 +summary=クーポン概要 +condition=クーポン条件 +emailCouponSubject=クーポン通知 +myAccount=マイアカウント +storeFinder=店舗検索 +salutation={0} {1} 様 +complimentaryClosing=ありがとうございます。 +signature=カスタマー サービス +help=ヘルプ +contactUs=連絡先 +contactUsPage=http://www.hybris.com/en/contact +contactUsEmailAddress=customerservices@hybris.com +termsAndCondition=利用条件 +validityDateFrom=から +validityDateTo=まで diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-customerCoupon_zh.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-customerCoupon_zh.properties new file mode 100644 index 0000000..aa6278f --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-customerCoupon_zh.properties @@ -0,0 +1,25 @@ +# --------------------------------------------------------------------------- +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# --------------------------------------------------------------------------- + +effective=您的优惠券即将生效 +expire=您的优惠券即将过期 +couponLable=优惠券名称 +couponName={0} +name=您的优惠券 +validityDate=有效日期 +summary=优惠券汇总 +condition=优惠券条件 +emailCouponSubject=优惠券通知 +myAccount=我的帐户 +storeFinder=店铺搜索器 +salutation=尊敬的 {0} {1} +complimentaryClosing=谢谢. +signature=客户服务 +help=帮助 +contactUs=联系我们 +contactUsPage=http://www.hybris.com/en/contact +contactUsEmailAddress=customerservices@hybris.com +termsAndCondition=条款和条件 +validityDateFrom=从 +validityDateTo=至 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-productBackInStock_de.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-productBackInStock_de.properties new file mode 100644 index 0000000..a3c0010 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-productBackInStock_de.properties @@ -0,0 +1,24 @@ +# --------------------------------------------------------------------------- +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# --------------------------------------------------------------------------- + +emailSubject=Wieder auf Lager! + + +myAccount=Mein Konto +storeFinder=Händlersuche +salutation=Sehr geehrte(r) {0} {1} +productAvaiable=Das Warten hat sich gelohnt. {0}{1}{2} ist jetzt zum Kauf verfügbar. +shopNow=JETZT KAUFEN +product_recommendation_title=Empfehlungen +manageNotification=Um Ihre Benachrichtigung zu verwalten, navigieren Sie unter "Meine Konten" zu {0}{1}{2}. + +paragraphContactUs=Wenn Sie Fragen haben, nutzen Sie entweder unsere {0}Kontakt{1}-Seite, oder wenden Sie sich telefonisch unter +44 (0)20 / 7429 4175 oder per E-Mail an customerservices@hybris.com direkt an unseren Kundendienst. +complimentaryClosing=Vielen Dank! +signature=Kundendienst +help=Hilfe +contactUs=Kontakt +contactUsPage=http://www.hybris.com/en/contact +contactUsEmailAddress=customerservices@hybris.com +termsAndCondition=Allgemeine Geschäftsbedingungen +myInterests=Meine Interessen diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-productBackInStock_en.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-productBackInStock_en.properties new file mode 100644 index 0000000..5b0f0a6 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-productBackInStock_en.properties @@ -0,0 +1,24 @@ +# --------------------------------------------------------------------------- +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# --------------------------------------------------------------------------- + +emailSubject=Back In Stock! + + +storeFinder=Store Finder +salutation=Dear {0} {1} +productAvaiable=The wait is over. {0}{1}{2} is now available for purchase. The current stock is {3}. +productForceInStockAvaiable=The wait is over. {0}{1}{2} is now available for purchase. +shopNow=SHOP NOW +product_recommendation_title = Recommendations +manageNotification=To manage your notification. go to {0}{1}{2} under My Accounts + +paragraphContactUs=If we can help you with any inquiry, please use our {0}Contact Us{1} page, or contact our customer services team directly via phone +44 (0)20 / 7429 4175 or email customerservices@hybris.com. +complimentaryClosing=Thank you. +signature=Customer Services +help=Help +contactUs=Contact Us +contactUsPage=http://www.hybris.com/en/contact +contactUsEmailAddress=customerservices@hybris.com +termsAndCondition=Terms & Conditions +myInterests=My Interests \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-productBackInStock_ja.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-productBackInStock_ja.properties new file mode 100644 index 0000000..c429223 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-productBackInStock_ja.properties @@ -0,0 +1,24 @@ +# --------------------------------------------------------------------------- +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# --------------------------------------------------------------------------- + +emailSubject=在庫に戻す + + +myAccount=マイアカウント +storeFinder=店舗検索 +salutation={0} {1} 様 +productAvaiable=待機は終了しました。{0}{1}{2} は購買に利用できます。 +shopNow=今すぐショッピング +product_recommendation_title=推奨 +manageNotification=通知を管理するには、マイアカウントの {0}{1}{2} に移動します。 + +paragraphContactUs=ご不明な点がある場合は、{0}連絡先{1}ページからご連絡いただくか、電話 +44 (0)20 / 7429 4175 または電子メール customerservices@hybris.com でカスタマー サービスまで直接ご連絡ください。 +complimentaryClosing=ありがとうございます。 +signature=カスタマー サービス +help=ヘルプ +contactUs=連絡先 +contactUsPage=http://www.hybris.com/en/contact +contactUsEmailAddress=customerservices@hybris.com +termsAndCondition=利用条件 +myInterests=関心事 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-productBackInStock_zh.properties b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-productBackInStock_zh.properties new file mode 100644 index 0000000..bb4a400 --- /dev/null +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/messages/email-productBackInStock_zh.properties @@ -0,0 +1,24 @@ +# --------------------------------------------------------------------------- +# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +# --------------------------------------------------------------------------- + +emailSubject=重新到货! + + +myAccount=我的帐户 +storeFinder=店铺搜索器 +salutation=尊敬的 {0} {1} +productAvaiable=等待已结束。{0}{1}{2} 现可进行购买. +shopNow=立即购买 +product_recommendation_title=建议 +manageNotification=要管理您的通知,请转到“我的帐户”下的 {0}{1}{2} + +paragraphContactUs=如需任何查询帮助,请使用我们的{0}联系我们{1}页面,也可以直接致电 +44 (0)20 / 7429 4175 联系客服团队或发送电子邮件至 customerservices@hybris.com. +complimentaryClosing=谢谢. +signature=客户服务 +help=帮助 +contactUs=联系我们 +contactUsPage=http://www.hybris.com/zh/contact +contactUsEmailAddress=customerservices@hybris.com +termsAndCondition=条款和细则 +myInterests=我的关注对象 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/web/spring/spartacussampledataaddon-web-spring.xml b/core-customize/hybris/bin/custom/spartacussampledataaddon/resources/spartacussampledataaddon/web/spring/spartacussampledataaddon-web-spring.xml old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/src/de/hybris/platform/spartacussampledataaddon/constants/SpartacussampledataaddonConstants.java b/core-customize/hybris/bin/custom/spartacussampledataaddon/src/de/hybris/platform/spartacussampledataaddon/constants/SpartacussampledataaddonConstants.java old mode 100755 new mode 100644 diff --git a/core-customize/hybris/bin/custom/spartacussampledataaddon/src/de/hybris/platform/spartacussampledataaddon/setup/impl/SpaSampleAddOnSampleDataImportService.java b/core-customize/hybris/bin/custom/spartacussampledataaddon/src/de/hybris/platform/spartacussampledataaddon/setup/impl/SpaSampleAddOnSampleDataImportService.java old mode 100755 new mode 100644 index 4a3f70e..b1a4485 --- a/core-customize/hybris/bin/custom/spartacussampledataaddon/src/de/hybris/platform/spartacussampledataaddon/setup/impl/SpaSampleAddOnSampleDataImportService.java +++ b/core-customize/hybris/bin/custom/spartacussampledataaddon/src/de/hybris/platform/spartacussampledataaddon/setup/impl/SpaSampleAddOnSampleDataImportService.java @@ -1,10 +1,14 @@ /* * Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. - * The files in this addon are licensed under the Apache Software License, v. 2 + * The files in this addon are licensed under the Apache Software License, v. 2 * except as noted otherwise in the LICENSE file. */ package de.hybris.platform.spartacussampledataaddon.setup.impl; +import java.util.List; + +import org.springframework.beans.factory.annotation.Required; + import de.hybris.platform.addonsupport.setup.impl.DefaultAddonSampleDataImportService; import de.hybris.platform.catalog.jalo.SyncItemCronJob; import de.hybris.platform.catalog.jalo.SyncItemJob; @@ -16,10 +20,6 @@ import de.hybris.platform.servicelayer.cronjob.PerformResult; import de.hybris.platform.servicelayer.model.ModelService; -import java.util.List; - -import org.springframework.beans.factory.annotation.Required; - /** * This class extends {@link DefaultAddonSampleDataImportService} and specifies how to import sample data spartacus @@ -28,47 +28,60 @@ public class SpaSampleAddOnSampleDataImportService extends DefaultAddonSampleDataImportService { private static final String SYNC_CONTENT_CATALOG = "electronics->spa"; + private static final String STORES_URL = "/stores/"; private ModelService modelService; @Override protected void importContentCatalog(final SystemSetupContext context, final String importRoot, final String catalogName) { - // 1- create new catalog - importImpexFile(context, importRoot + "/contentCatalogs/" + catalogName + "ContentCatalog/catalog.impex", false); - - // 2- sync xxxContentCatalog:Staged->xxx-spaContentCatalog:Staged - final CatalogVersionModel catalog = getCatalogVersionService().getCatalogVersion(catalogName + "-spaContentCatalog", "Staged"); - List synItemsJobs = catalog.getIncomingSynchronizations(); - if (synItemsJobs.size() > 0) + if (catalogName.equals("electronics") || catalogName.equals("powertools") || catalogName.equals("apparel-uk")) { - SyncItemJobModel job = synItemsJobs.get(0); - final SyncItemJob jobItem = getModelService().getSource(job); - synchronizeSpaContentCatalog(context, jobItem); + // 1- create new catalog + importImpexFile(context, importRoot + "/contentCatalogs/" + catalogName + "ContentCatalog/catalog.impex", false); + + // 2- sync xxxContentCatalog:Staged->xxx-spaContentCatalog:Staged + final CatalogVersionModel catalog = getCatalogVersionService().getCatalogVersion(catalogName + "-spaContentCatalog", "Staged"); + List synItemsJobs = catalog.getIncomingSynchronizations(); + if (synItemsJobs.size() > 0) + { + SyncItemJobModel job = synItemsJobs.get(0); + final SyncItemJob jobItem = getModelService().getSource(job); + synchronizeSpaContentCatalog(context, jobItem); + } + + // 3- perform some cleaning + importImpexFile(context, importRoot + "/contentCatalogs/" + catalogName + "ContentCatalog/cleaning.impex", false); + + // 4- solr ammendments + importImpexFile(context, importRoot + "/productCatalogs/" + catalogName + "ProductCatalog/solr.impex", false); } - // 3- perform some cleaning - importImpexFile(context, importRoot + "/contentCatalogs/" + catalogName + "ContentCatalog/cleaning.impex", false); - - // 4- import content catalog from impex super.importContentCatalog(context, importRoot, catalogName); - // 5- synchronize spaContentCatalog:staged->online - synchronizeContentCatalog(context, catalogName + "-spa", true); + if (catalogName.equals("electronics") || catalogName.equals("powertools") || catalogName.equals("apparel-uk")) + { + // 5- synchronize spaContentCatalog:staged->online + synchronizeContentCatalog(context, catalogName + "-spa", true); - // 6- give permission to cmsmanager to do the sync - importImpexFile(context, importRoot + "/contentCatalogs/" + catalogName + "ContentCatalog/sync.impex", false); + // 6- give permission to cmsmanager to do the sync + importImpexFile(context, importRoot + "/contentCatalogs/" + catalogName + "ContentCatalog/sync.impex", false); - // 7- import email data - importImpexFile(context, importRoot + "/contentCatalogs/" + catalogName + "ContentCatalog/email-content.impex", false); - - // 8- import sample data for testing - importImpexFile(context, importRoot + "/contentCatalogs/" + catalogName + "ContentCatalog/test-data.impex", false); - + // 7- import email data + importImpexFile(context, importRoot + "/contentCatalogs/" + catalogName + "ContentCatalog/email-content.impex", false); + } } - private void synchronizeSpaContentCatalog(final SystemSetupContext context, SyncItemJob syncJobItem) + + @Override + protected void importStoreLocations(final SystemSetupContext context, final String importRoot, final String storeName) + { + super.importStoreLocations(context, importRoot, storeName); + } + + + private void synchronizeSpaContentCatalog(final SystemSetupContext context, final SyncItemJob syncJobItem) { logInfo(context, "Begin synchronizing Content Catalog [" + SYNC_CONTENT_CATALOG + "] - synchronizing"); @@ -85,7 +98,7 @@ private void synchronizeSpaContentCatalog(final SystemSetupContext context, Sync final CronJobResult result = modelService.get(syncCronJob.getResult()); final CronJobStatus status = modelService.get(syncCronJob.getStatus()); - PerformResult syncCronJobResult = new PerformResult(result, status); + final PerformResult syncCronJobResult = new PerformResult(result, status); if (isSyncRerunNeeded(syncCronJobResult)) { logInfo(context, "Catalog catalog [" + SYNC_CONTENT_CATALOG + "] sync has issues."); @@ -100,7 +113,7 @@ protected ModelService getModelService() } @Required - public void setModelService(ModelService modelService) + public void setModelService(final ModelService modelService) { this.modelService = modelService; } From 28bafcf80fa5a661f45a6c6eaa3371980a1382a5 Mon Sep 17 00:00:00 2001 From: Guillaume LASNIER Date: Tue, 8 Dec 2020 17:54:56 +0100 Subject: [PATCH 04/24] Feature #8 Upgrade project template to SAP Commerce 201 * Update manifest with 2011 extensions * Generate OCC, OCC Test and Order Management extensions * Update documentation --- README.md | 4 +- core-customize/build.gradle.kts | 43 ++++++++++++- core-customize/manifest-generator.jsonnet | 74 +++++++++++------------ 3 files changed, 82 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index 9a4e2d7..b2a5638 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ # CCv2 Template Repository - Best-practice setup -- Based on `b2c_acc_plus` recipe +- Based on SAP Commerce 2011 +- Based on `cx` recipe +- Generates Demo B2C accelerator modules, OCC, OCC Tests and Order Management extensions - Includes Spartacus storefront - Fully automated setup for local development - [docker-compose](https://docs.docker.com/compose/)-based setup for: diff --git a/core-customize/build.gradle.kts b/core-customize/build.gradle.kts index c0210dc..daf8931 100644 --- a/core-customize/build.gradle.kts +++ b/core-customize/build.gradle.kts @@ -102,6 +102,47 @@ tasks.register("generateDemoStorefront") { antProperty("input.package", "com.demo.shop") } +// ant extgen -Dinput.template=yacceleratorordermanagement -Dinput.name=demoshopordermanagement -Dinput.package=com.demo.shop.ordermanagement +tasks.register("generateDemoOrderManagment") { + dependsOn("bootstrapPlatform", "createDefaultConfig") + + args("extgen") + antProperty("input.template", "yacceleratorordermanagement") + antProperty("input.name", "demoshopordermanagement") + antProperty("input.package", "com.demo.shop.ordermanagement") +} + +// ant extgen -Dinput.template=yocc -Dinput.name=demoshopocc -Dinput.package=com.demo.shop.occ +tasks.register("generateDemoOcc") { + dependsOn("bootstrapPlatform", "createDefaultConfig") + + args("extgen") + antProperty("input.template", "yocc") + antProperty("input.name", "demoshopocc") + antProperty("input.package", "com.demo.shop.occ") +} + +// ant extgen -Dinput.template=yocc -Dinput.name=demoshopocc -Dinput.package=com.demo.shop.occ.tests +tasks.register("generateDemoOccTests") { + dependsOn("bootstrapPlatform", "createDefaultConfig") + + args("extgen") + antProperty("input.template", "yocctests") + antProperty("input.name", "demoshopocctests") + antProperty("input.package", "com.demo.shop.occ.tests") +} + tasks.register("generateProprietaryCode") { - dependsOn("generateDemoStorefront") + dependsOn("generateDemoStorefront", "generateDemoOrderManagment", "generateDemoOcc", "generateDemoOccTests") + doLast { + ant.withGroovyBuilder { + "move"("file" to "hybris/bin/custom/demoshopordermanagement", "todir" to "hybris/bin/custom/demoshop") + } + ant.withGroovyBuilder { + "move"("file" to "hybris/bin/custom/demoshopocc", "todir" to "hybris/bin/custom/demoshop") + } + ant.withGroovyBuilder { + "move"("file" to "hybris/bin/custom/demoshopocctests", "todir" to "hybris/bin/custom/demoshop") + } + } } diff --git a/core-customize/manifest-generator.jsonnet b/core-customize/manifest-generator.jsonnet index 28aaffb..00ee05a 100644 --- a/core-customize/manifest-generator.jsonnet +++ b/core-customize/manifest-generator.jsonnet @@ -6,8 +6,8 @@ local nonstandard_context_paths = { testweb: '/test', oauth2: '/authorizationserver', maintenanceweb: '/maintenance', + commercewebservices: '/occ', ycommercewebservices: '/rest', - scimwebservices: '/scim', orbeonweb: '/web-orbeon', }; @@ -26,44 +26,40 @@ local webapp(extension, path=null) = { local storefrontExtension = 'demoshopstorefront'; local storefrontContextRoot = ''; local storefrontAddons = [ - 'captchaaddon', - 'commerceorgsamplesaddon', - 'promotionenginesamplesaddon', - 'assistedservicestorefront', + 'adaptivesearchsamplesaddon', 'assistedservicecustomerinterestsaddon', - 'assistedserviceyprofileaddon', 'assistedservicepromotionaddon', - 'customerticketingaddon', - 'textfieldconfiguratortemplateaddon', - 'smarteditaddon', + 'assistedservicestorefront', + 'assistedserviceyprofileaddon', + 'captchaaddon', + 'configurablebundleaddon', 'consignmenttrackingaddon', - 'notificationaddon', + 'customercouponaddon', + 'customercouponsamplesaddon', 'customerinterestsaddon', - 'stocknotificationaddon', + 'customerticketingaddon', + 'eventtrackingwsaddon', + 'merchandisingaddon', + 'merchandisingstorefrontsampledataaddon', + 'multicountrysampledataaddon', + 'notificationaddon', + 'ordermanagementaddon', 'orderselfserviceaddon', - 'adaptivesearchsamplesaddon', - 'configurablebundleaddon', 'pcmbackofficesamplesaddon', - 'xyformssamples', - 'xyformsstorefrontcommons', - 'personalizationsearchsamplesaddon', - 'personalizationyprofilesampledataaddon', 'personalizationaddon', + 'personalizationsampledataaddon', + 'personalizationyprofilesampledataaddon', 'profiletagaddon', - 'merchandisingaddon', - 'merchandisingstorefrontsampledataaddon', - 'spartacussampledataaddon', -]; - -local occExtension = 'ycommercewebservices'; -local occWebroot = '/rest'; -local occAddons = [ - 'cmsoccaddon', - 'acceleratorwebservicesaddon', - - 'consignmenttrackingoccaddon', - 'customerinterestsoccaddon', - 'notificationoccaddon', + 'selectivecartsplitlistaddon', + 'smarteditaddon', + 'stocknotificationaddon', + 'textfieldconfiguratortemplateaddon', + 'timedaccesspromotionengineaddon', + 'timedaccesspromotionenginesamplesaddon', + 'xyformssamples', + 'xyformsstorefrontcommons', + 'ysapproductconfigaddon', + 'spartacussampledataaddon' ]; local smartEditWebapps = [ @@ -83,6 +79,13 @@ local smartEditWebapps = [ webapp('personalizationwebservices'), webapp('personalizationsearchsmartedit'), webapp('personalizationpromotionssmartedit'), + // Smartedit personalization promotion + webapp('personalizationpromotionssmartedit'), + // Smartedit personalization search + webapp('personalizationsearchsmartedit'), + // Smartedit promotion + webapp('merchandisingsmartedit'), + webapp('merchandisingcmswebservices'), // https://help.sap.com/viewer/50c996852b32456c96d3161a95544cdb/1905/en-US/b21fa18f635d49eaa4d9ce5997a6a814.html webapp('merchandisingsmartedit'), @@ -90,8 +93,8 @@ local smartEditWebapps = [ // ------------ MANIFEST ------------ { - commerceSuiteVersion: '1905', - useCloudExtensionPack: true, + commerceSuiteVersion: '2011', + useCloudExtensionPack: false, extensions: [ // modeltacceleratorservices is only available in CCv2 (not part of the cloud extension pack) // -> configure it in manifest.json @@ -128,9 +131,6 @@ local smartEditWebapps = [ storefrontAddons: [ { addon: addon, storefront: storefrontExtension, template: 'yacceleratorstorefront' } for addon in storefrontAddons - ] + [ - { addon: addon, storefront: occExtension, template: 'ycommercewebservices' } - for addon in occAddons ], aspects: [ { @@ -165,7 +165,7 @@ local smartEditWebapps = [ name: 'api', properties: [], webapps: [ - webapp(occExtension, occWebroot), + webapp('commercewebservices'), // only necessary for checkout/payment mocks // https://help.sap.com/viewer/4c33bf189ab9409e84e589295c36d96e/1905/en-US/8abddeed86691014be559318fab13d44.html?q=acceleratorservices webapp('acceleratorservices'), From 26856d43e95dcfcded983ff7bf585b2e63aef3e1 Mon Sep 17 00:00:00 2001 From: Markus Perndorfer Date: Wed, 9 Dec 2020 12:13:44 +0100 Subject: [PATCH 05/24] update gitignore --- core-customize/.gitignore | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/core-customize/.gitignore b/core-customize/.gitignore index eb9f97b..32edeee 100644 --- a/core-customize/.gitignore +++ b/core-customize/.gitignore @@ -1,7 +1,8 @@ # Folders to ignore, whatever the place they are - +.DS_Store .metadata classes +testclasses eclipsebin gensrc @@ -52,11 +53,15 @@ base.properties **/tld/addons **/tags/addons **/messages/addons +**/lib/addons **/web/addonsrc **/_ui-src/addons **/web/addontestsrc **/web/commonwebsrc/*/ +**/web/webroot/WEB-INF/lib/addon-* +wro_addons.xml +# Backoffice artifacts *_bof.jar # project ignore From 47480d96a8135dce9978657eb00fc9d7e4c2d9f5 Mon Sep 17 00:00:00 2001 From: Markus Perndorfer Date: Wed, 9 Dec 2020 12:16:48 +0100 Subject: [PATCH 06/24] fix bootstrap --- core-customize/build.gradle.kts | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/core-customize/build.gradle.kts b/core-customize/build.gradle.kts index f21298e..a412aba 100644 --- a/core-customize/build.gradle.kts +++ b/core-customize/build.gradle.kts @@ -1,6 +1,6 @@ plugins { - id("mpern.sap.commerce.build") version("2.0.0") - id("mpern.sap.commerce.build.ccv2") version("2.0.0") + id("sap.commerce.build") version("3.0.0") + id("sap.commerce.build.ccv2") version("3.0.0") } import mpern.sap.commerce.build.tasks.HybrisAntTask import org.apache.tools.ant.taskdefs.condition.Os @@ -26,10 +26,8 @@ tasks.register("setupLocalDevelopment") { } // --------------------------------------------------- - // Helper tasks to boostrap the project from scratch. // *Those are only necessary because I don't want to add any properietary files owned by SAP to Github.* -// For a regular project, just commit the config folder and your custom extensions (hybris/bin/custom) as usual! // ant modulegen -Dinput.module=accelerator -Dinput.name=demoshop -Dinput.package=com.demo.shop tasks.register("generateDemoStorefront") { @@ -43,7 +41,7 @@ tasks.register("generateDemoStorefront") { // setup hybris/config folder tasks.register("mergeConfigFolder") { - dependsOn("generateDemoStorefront") + mustRunAfter("generateDemoStorefront") from("hybris/config-template") into("hybris/config") @@ -51,7 +49,7 @@ tasks.register("mergeConfigFolder") { tasks.register("symlinkCommonProperties") { dependsOn("mergeConfigFolder") if (Os.isFamily(Os.FAMILY_UNIX)) { - commandLine("sh", "-c", "ln -s ../environments/common.properties 10-local.properties") + commandLine("sh", "-c", "ln -sfn ../environments/common.properties 10-local.properties") } else { // https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/ commandLine("cmd", "/c", """mklink /d "10-local.properties" "..\\environments\\common.properties" """) @@ -61,7 +59,7 @@ tasks.register("symlinkCommonProperties") { tasks.register("symlinkLocalDevProperties") { dependsOn("mergeConfigFolder") if (Os.isFamily(Os.FAMILY_UNIX)) { - commandLine("sh", "-c", "ln -s ../environments/local-dev.properties 50-local.properties") + commandLine("sh", "-c", "ln -sfn ../environments/local-dev.properties 50-local.properties") } else { // https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/ commandLine("cmd", "/c", """mklink /d "50-local.properties" "..\\environments\\local-dev.properties" """) @@ -105,5 +103,5 @@ tasks.register("symlinkSolrConfigForLocalDevelopment") { } tasks.register("generateProprietaryCode") { - dependsOn("symlinkSolrConfigForLocalDevelopment") + dependsOn("generateDemoStorefront", "symlinkSolrConfigForLocalDevelopment") } From 8863925855686e0304df8ea5cabdec6927c6c62f Mon Sep 17 00:00:00 2001 From: Markus Perndorfer Date: Wed, 9 Dec 2020 14:21:45 +0100 Subject: [PATCH 07/24] update configuration template --- core-customize/build.gradle.kts | 126 +++--- .../environments/accstorefront.properties | 1 - .../environments/admin.properties | 4 + .../environments/api.properties | 2 +- .../backgroundprocessing.properties | 2 + .../environments/common.properties | 101 +++-- .../environments/local-dev.properties | 73 ++- .../config-template/localextensions.xml | 427 ++++++++++++++---- 8 files changed, 541 insertions(+), 195 deletions(-) create mode 100644 core-customize/hybris/config-template/environments/admin.properties create mode 100644 core-customize/hybris/config-template/environments/backgroundprocessing.properties diff --git a/core-customize/build.gradle.kts b/core-customize/build.gradle.kts index a40c7fb..35e066f 100644 --- a/core-customize/build.gradle.kts +++ b/core-customize/build.gradle.kts @@ -29,10 +29,65 @@ tasks.register("setupLocalDevelopment") { // Helper tasks to boostrap the project from scratch. // *Those are only necessary because I don't want to add any properietary files owned by SAP to Github.* -// setup hybris/config folder -tasks.register("mergeConfigFolder") { - mustRunAfter("generateDemoStorefront") +//** generate code +// ant modulegen -Dinput.module=accelerator -Dinput.name=demoshop -Dinput.package=com.demo.shop +tasks.register("generateDemoStorefront") { + dependsOn("bootstrapPlatform", "createDefaultConfig") + + args("modulegen") + antProperty("input.module", "accelerator") + antProperty("input.name", "demoshop") + antProperty("input.package", "com.demo.shop") +} + +// ant extgen -Dinput.template=yacceleratorordermanagement -Dinput.name=demoshopordermanagement -Dinput.package=com.demo.shop.ordermanagement +tasks.register("generateDemoOrderManagment") { + dependsOn("bootstrapPlatform", "createDefaultConfig") + + args("extgen") + antProperty("input.template", "yacceleratorordermanagement") + antProperty("input.name", "demoshopordermanagement") + antProperty("input.package", "com.demo.shop.ordermanagement") +} + +// ant extgen -Dinput.template=yocc -Dinput.name=demoshopocc -Dinput.package=com.demo.shop.occ +tasks.register("generateDemoOcc") { + dependsOn("bootstrapPlatform", "createDefaultConfig") + + args("extgen") + antProperty("input.template", "yocc") + antProperty("input.name", "demoshopocc") + antProperty("input.package", "com.demo.shop.occ") +} + +// ant extgen -Dinput.template=yocc -Dinput.name=demoshopocc -Dinput.package=com.demo.shop.occ.tests +tasks.register("generateDemoOccTests") { + dependsOn("bootstrapPlatform", "createDefaultConfig") + args("extgen") + antProperty("input.template", "yocctests") + antProperty("input.name", "demoshopocctests") + antProperty("input.package", "com.demo.shop.occ.tests") +} + +tasks.register("generateCode") { + dependsOn("generateDemoStorefront", "generateDemoOrderManagment", "generateDemoOcc", "generateDemoOccTests") + doLast { + ant.withGroovyBuilder { + "move"("file" to "hybris/bin/custom/demoshopordermanagement", "todir" to "hybris/bin/custom/demoshop") + } + ant.withGroovyBuilder { + "move"("file" to "hybris/bin/custom/demoshopocc", "todir" to "hybris/bin/custom/demoshop") + } + ant.withGroovyBuilder { + "move"("file" to "hybris/bin/custom/demoshopocctests", "todir" to "hybris/bin/custom/demoshop") + } + } +} + +//** setup hybris/config folder +tasks.register("mergeConfigFolder") { + mustRunAfter("generateCode") from("hybris/config-template") into("hybris/config") } @@ -58,10 +113,13 @@ tasks.register("symlinkLocalDevProperties") { } tasks.named("generateLocalProperties") { mustRunAfter("mergeConfigFolder") - dependsOn("symlinkCommonProperties", "symlinkLocalDevProperties") } -// starting and stopping solr generates the default solr configuration +tasks.register("setupConfigFolder") { + dependsOn("symlinkCommonProperties", "symlinkLocalDevProperties", "generateLocalProperties") +} + +//** bootstrap Solr configuration tasks.register("startSolr") { dependsOn("mergeConfigFolder", "generateLocalProperties") args("startSolrServers") @@ -81,10 +139,10 @@ tasks.register("moveSolrConfig") { } } } -tasks.register("symlinkSolrConfigForLocalDevelopment") { +tasks.register("setupSolrConfigForLocalDevelopment") { dependsOn("moveSolrConfig") if (Os.isFamily(Os.FAMILY_UNIX)) { - commandLine("sh", "-c", "ln -s ../../../../../solr/server/solr/configsets configsets") + commandLine("sh", "-c", "ln -sfn ../../../../../solr/server/solr/configsets configsets") } else { // https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/ commandLine("cmd", "/c", """mklink /d "configsets" "..\\..\\..\\..\\..\\solr\\server\\solr\\configsets" """) @@ -92,57 +150,7 @@ tasks.register("symlinkSolrConfigForLocalDevelopment") { workingDir("hybris/config/solr/instances/cloud") } -// ant modulegen -Dinput.module=accelerator -Dinput.name=demoshop -Dinput.package=com.demo.shop -tasks.register("generateDemoStorefront") { - dependsOn("bootstrapPlatform", "createDefaultConfig") - - args("modulegen") - antProperty("input.module", "accelerator") - antProperty("input.name", "demoshop") - antProperty("input.package", "com.demo.shop") -} - -// ant extgen -Dinput.template=yacceleratorordermanagement -Dinput.name=demoshopordermanagement -Dinput.package=com.demo.shop.ordermanagement -tasks.register("generateDemoOrderManagment") { - dependsOn("bootstrapPlatform", "createDefaultConfig") - - args("extgen") - antProperty("input.template", "yacceleratorordermanagement") - antProperty("input.name", "demoshopordermanagement") - antProperty("input.package", "com.demo.shop.ordermanagement") -} - -// ant extgen -Dinput.template=yocc -Dinput.name=demoshopocc -Dinput.package=com.demo.shop.occ -tasks.register("generateDemoOcc") { - dependsOn("bootstrapPlatform", "createDefaultConfig") - - args("extgen") - antProperty("input.template", "yocc") - antProperty("input.name", "demoshopocc") - antProperty("input.package", "com.demo.shop.occ") -} - -// ant extgen -Dinput.template=yocc -Dinput.name=demoshopocc -Dinput.package=com.demo.shop.occ.tests -tasks.register("generateDemoOccTests") { - dependsOn("bootstrapPlatform", "createDefaultConfig") - - args("extgen") - antProperty("input.template", "yocctests") - antProperty("input.name", "demoshopocctests") - antProperty("input.package", "com.demo.shop.occ.tests") -} - +//** combine all of the above tasks.register("generateProprietaryCode") { - dependsOn("generateDemoStorefront", "generateDemoOrderManagment", "generateDemoOcc", "generateDemoOccTests") - doLast { - ant.withGroovyBuilder { - "move"("file" to "hybris/bin/custom/demoshopordermanagement", "todir" to "hybris/bin/custom/demoshop") - } - ant.withGroovyBuilder { - "move"("file" to "hybris/bin/custom/demoshopocc", "todir" to "hybris/bin/custom/demoshop") - } - ant.withGroovyBuilder { - "move"("file" to "hybris/bin/custom/demoshopocctests", "todir" to "hybris/bin/custom/demoshop") - } - } + dependsOn("generateCode", "setupConfigFolder", "setupSolrConfigForLocalDevelopment") } diff --git a/core-customize/hybris/config-template/environments/accstorefront.properties b/core-customize/hybris/config-template/environments/accstorefront.properties index 478f59c..003c2ac 100644 --- a/core-customize/hybris/config-template/environments/accstorefront.properties +++ b/core-customize/hybris/config-template/environments/accstorefront.properties @@ -1,4 +1,3 @@ - # accstorefront.properties spring.session.enabled=false xss.filter.header.X-Frame-Options= diff --git a/core-customize/hybris/config-template/environments/admin.properties b/core-customize/hybris/config-template/environments/admin.properties new file mode 100644 index 0000000..c1a9814 --- /dev/null +++ b/core-customize/hybris/config-template/environments/admin.properties @@ -0,0 +1,4 @@ +# admin.properties + +backoffice.fill.typefacade.cache.on.startup=false +backoffice.solr.search.index.autoinit=false diff --git a/core-customize/hybris/config-template/environments/api.properties b/core-customize/hybris/config-template/environments/api.properties index c037597..dccfe74 100644 --- a/core-customize/hybris/config-template/environments/api.properties +++ b/core-customize/hybris/config-template/environments/api.properties @@ -1,2 +1,2 @@ # api.properties -xss.filter.header.X-Frame-Options= \ No newline at end of file +xss.filter.header.X-Frame-Options= diff --git a/core-customize/hybris/config-template/environments/backgroundprocessing.properties b/core-customize/hybris/config-template/environments/backgroundprocessing.properties new file mode 100644 index 0000000..2b19366 --- /dev/null +++ b/core-customize/hybris/config-template/environments/backgroundprocessing.properties @@ -0,0 +1,2 @@ +# backgroundprocessing.properties +cluster.node.groups=integration,yHotfolderCandidate diff --git a/core-customize/hybris/config-template/environments/common.properties b/core-customize/hybris/config-template/environments/common.properties index a5697fe..79c71ae 100644 --- a/core-customize/hybris/config-template/environments/common.properties +++ b/core-customize/hybris/config-template/environments/common.properties @@ -1,51 +1,94 @@ # common.properties -lang.packs=de,en +#*****************************************************************************# +# Sane Defaults -csrf.allowed.url.patterns=/[^/]+(/[^?]*)+(sop/response)$,/[^/]+(/[^?]*)+(merchant_callback)$,/[^/]+(/[^?]*)+(hop/response)$,/[^/]+(/[^?]*)+(language)$,/[^/]+(/[^?]*)+(currency)$,/(events)$ +sqlserver.enableLimitSupportForSQLServer2012=true -# faster startup / update system etc -backoffice.fill.typefacade.cache.on.startup=false +# TODO: adapt this to your requirements +lang.packs=en -# double check if this is OK regarding GDPR compliance... -auditing.enabled=false +hac.webroot=/hac -recaptcha.publickey= -recaptcha.privatekey= -googleApiKey= +log4j2.logger.nosolr.name=de.hybris.platform.solrfacetsearch.indexer.cron.SolrIndexerJob +log4j2.logger.nosolr.level=WARN -orbeonweb.orbeon.persistence.uri=https://localhost:${tomcat.ssl.port}/xyformsweb/fr/service/hybris -xyformsservices.orbeon.url.address=http://localhost:${tomcat.http.port}/web-orbeon -xyformsstorefrontcommons.orbeon.keystoreFile=${platformhome}/tomcat/lib/keystore +# Disable audit, decrease session timeout +# https://help.sap.com/viewer/1be46286b36a4aa48205be5a96240672/SHIP/en-US/d6794b766aea4783b829988dc587f978.html +# TODO: adapt this your project requirements +auditing.enabled=false +default.session.timeout=360 -sqlserver.enableLimitSupportForSQLServer2012=true +addonfilter.active=false -# https://sap.github.io/cloud-commerce-spartacus-storefront-docs/personalization-setup-instructions-for-spartacus/ -# https://help.sap.com/viewer/86dd1373053a4c2da8f9885cc9fbe55d/latest/en-US/e970070f997041c7b3f3e77fcb762744.html -corsfilter.ycommercewebservices.allowedOrigins=${ccv2.services.jsapps.url.0} ${ccv2.services.accstorefront.url.0} -corsfilter.ycommercewebservices.allowedHeaders=origin content-type accept authorization cache-control occ-personalization-id occ-personalization-time -corsfilter.ycommercewebservices.exposedHeaders=occ-personalization-id occ-personalization-time +csrf.allowed.url.patterns=/[^/]+(/[^?]*)+(sop/response)$,/[^/]+(/[^?]*)+(merchant_callback)$,/[^/]+(/[^?]*)+(hop/response)$,/[^/]+(/[^?]*)+(language)$,/[^/]+(/[^?]*)+(currency)$,/(events)$ +occ.rewrite.overlapping.paths.enabled=true + +#*****************************************************************************# +# Accelerator B2C -hac.webroot=/hac demoshopstorefront.webroot= storefrontContextRoot= -log4j2.logger.nosolr.name=de.hybris.platform.solrfacetsearch.indexer.cron.SolrIndexerJob -log4j2.logger.nosolr.level=WARN +recaptcha.publickey=TBD +recaptcha.privatekey=TBD +googleApiKey=TBD + +website.electronics.http=${ccv2.services.accstorefront.url.0} + +# Mock Payment provider +sop.post.url=${ccv2.services.api.url.0}/acceleratorservices/sop-mock/process +# Anybody should be able to access mock payment provider +corsfilter.acceleratorservices.allowedOrigins=* + + +#*****************************************************************************# +# Spartacus B2C + +# make sure spartacussampledataaddon imports execute +# (even if no ant addoninstall) +spartacussampledataaddon.application-context=spartacussampledataaddon-spring.xml -# ccv2.services... properties contain the urls for the default endpoints of a CCv2 environment website.electronics-spa.http=${ccv2.services.jsapps.url.0} website.electronics-spa.https=${ccv2.services.jsapps.url.0} -website.electronics.http=${ccv2.services.accstorefront.url.0} -website.electronics.https=${ccv2.services.accstorefront.url.0} +# ref. commercewebservices/project.properties +webroot.commercewebservices.http=${ccv2.services.api.url.0}/occ +webroot.commercewebservices.https=${ccv2.services.api.url.0}/occ +commercewebservices.oauth2.tokenUrl=${ccv2.services.api.url.0}/authorizationserver/oauth/token # Whitelisting SmartEdit for your Storefront # https://help.sap.com/viewer/86dd1373053a4c2da8f9885cc9fbe55d/latest/en-US/fb742b29cf3c4e81aac7c131c0441172.html smarteditaddon.javascript.paths.responsive=/shared/common/js/webApplicationInjector.js?allow-origin=localhost:9002,*.*.model-t.cc.commerce.ondemand.com:443;/shared/common/js/reprocessPage.js;/shared/common/js/adjustComponentRenderingToSE.js;/responsive/common/js/smarteditaddon.js -# Disable audit, decrease session timeout -# https://help.sap.com/viewer/1be46286b36a4aa48205be5a96240672/SHIP/en-US/d6794b766aea4783b829988dc587f978.html -# Adapt this your project requirements! -auditing.enabled=false -default.session.timeout=360 +# https://sap.github.io/spartacus-docs/cors/ +corsfilter.commercewebservices.allowedOrigins=${ccv2.services.jsapps.url.0} ${ccv2.services.accstorefront.url.0} ${ccv2.services.backoffice.url.0} ${ccv2.services.api.url.0} +corsfilter.commercewebservices.allowedMethods=GET HEAD OPTIONS PATCH PUT POST DELETE +corsfilter.commercewebservices.allowedHeaders=origin content-type accept authorization cache-control x-anonymous-consents x-profile-tag-debug x-consent-reference occ-personalization-id occ-personalization-time +corsfilter.commercewebservices.exposedHeaders=x-anonymous-consents occ-personalization-id occ-personalization-time +corsfilter.commercewebservices.allowCredentials=true + +corsfilter.assistedservicewebservices.allowedOrigins=${ccv2.services.jsapps.url.0} ${ccv2.services.accstorefront.url.0} ${ccv2.services.backoffice.url.0} ${ccv2.services.api.url.0} +corsfilter.assistedservicewebservices.allowedMethods=GET HEAD OPTIONS PATCH PUT POST DELETE +corsfilter.assistedservicewebservices.allowedHeaders=origin content-type accept authorization cache-control x-anonymous-consents x-profile-tag-debug x-consent-reference occ-personalization-id occ-personalization-time +corsfilter.assistedservicewebservices.exposedHeaders=x-anonymous-consents occ-personalization-id occ-personalization-time +corsfilter.assistedservicewebservices.allowCredentials=true + +corsfilter.personalizationwebservices.allowedOrigins=${ccv2.services.jsapps.url.0} ${ccv2.services.accstorefront.url.0} ${ccv2.services.backoffice.url.0} ${ccv2.services.api.url.0} +corsfilter.permissionswebservices.allowedOrigins=${ccv2.services.jsapps.url.0} ${ccv2.services.accstorefront.url.0} ${ccv2.services.backoffice.url.0} ${ccv2.services.api.url.0} + +#*****************************************************************************# +# Update System Configuration + +# for more fine-grained control, use "Configuring Commerce Update Parameters" +# https://help.sap.com/viewer/0fa6bcf4736c46f78c248512391eb467/SHIP/en-US/75132dba6afc47dba8ba59dbd899e075.html + +# Configuration for Update process type which is used for ant updatesystem script - default value is true +# update.updateRunningSystem.enabled=true +# update.clearHmcConfiguration.enabled=true +# update.importEssentialData.enabled=true +# update.localizeTypes.enabled=true +update.rebuildLucenesearchIndexes.enabled=false + +# Import project data of these extensions (comma-separated list) +# update.executeProjectData.extensionName.list= diff --git a/core-customize/hybris/config-template/environments/local-dev.properties b/core-customize/hybris/config-template/environments/local-dev.properties index c3b511f..52ebf91 100644 --- a/core-customize/hybris/config-template/environments/local-dev.properties +++ b/core-customize/hybris/config-template/environments/local-dev.properties @@ -1,31 +1,92 @@ # local-dev.properties + +#*****************************************************************************# +# Local Database + db.url=jdbc:sqlserver://localhost:1433;databaseName=localdev;responseBuffering=adaptive;loginTimeout=10;disableStatementPooling=false;statementPoolingCacheSize=1000 db.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver db.username=localdev db.password=localdev1! db.tableprefix= -installed.tenants= +#*****************************************************************************# +# Sane Defaults +installed.tenants= initialpassword.admin=nimda +tomcat.mem=-Xms4G -Xmx4G + +tomcat.generaloptions=${tomcat.jdkmodules.config} \ + -Djava.locale.providers=COMPAT,CLDR \ + ${tomcat.mem} \ + -XX:+UseStringDeduplication \ + -ea \ + -Dcatalina.base=%CATALINA_BASE% \ + -Dcatalina.home=%CATALINA_HOME% \ + -Dfile.encoding=UTF-8 \ + -Djava.util.logging.config.file=jdk_logging.properties \ + -Djava.io.tmpdir="${HYBRIS_TEMP_DIR}" + +ribbon.environment.code=local +ribbon.environment.type=development + +# faster startup / update system etc +backoffice.fill.typefacade.cache.on.startup=false +backoffice.solr.search.index.autoinit=false + +#*****************************************************************************# +# Endpoints for local development + ccv2.services.api.url.0=https://localhost:${tomcat.ssl.port} -ccv2.services.accstorefront.url.0=https://localhost:${tomcat.ssl.port} -ccv2.services.jsapps.url.0=https://localhost:4200 +ccv2.services.accstorefront.url.0=https://electronics.test:${tomcat.ssl.port} +ccv2.services.backoffice.url.0=https://localhost:${tomcat.ssl.port} +ccv2.services.jsapps.url.0=http://localhost:4200 + +#*****************************************************************************# +# Local Cloud Hotfolder -# Activate local cloud hofolder development with Azurite cluster.node.groups=integration,yHotfolderCandidate azure.hotfolder.storage.account.connection-string=UseDevelopmentStorage=true azure.hotfolder.storage.account.name=devstoreaccount1 cloud.hotfolder.default.images.root.url=http://127.0.0.1:10000/${azure.hotfolder.storage.account.name}/${azure.hotfolder.storage.container.name}/${tenantId}/images cloud.hotfolder.default.images.media.folder.qualifier=azureimages -sop.post.url=${ccv2.services.api.url.0}/acceleratorservices/sop-mock/process +#*****************************************************************************# +# Local Solr Cloud -# Use Solr Cloud for local development solrserver.instances.default.autostart=false solrserver.instances.cloud.autostart=true # Force the Default configuration to use cloud mode + default zookeeper endpoint solr.config.Default.mode=CLOUD solr.config.Default.urls=localhost:9983 + +#*****************************************************************************# +# Development Mode + +addonfilter.active=true +ansi.colors=true +build.development.mode=true +development.mode=true +tomcat.development.mode=true + +# Backoffice Dev Settings +# https://help.sap.com/viewer/5c9ea0c629214e42b727bf08800d8dfa/latest/en-US/8b48115b86691014991ad2131153834f.html +backoffice.cockpitng.development.mode=true +# disable all caching for development +backoffice.cockpitng.additionalResourceLoader.enabled=true +backoffice.cockpitng.uifactory.cache.enabled=false +backoffice.cockpitng.widgetclassloader.resourcecache.enabled=false +backoffice.cockpitng.resourceloader.resourcecache.enabled=false +cockpitng.widgetclassloader.resourcecache.enabled=false + +backoffice.sass.source.map.enabled=true + +# backoffice hot deployment +backoffice.cockpitng.hotDeployment.enabled=true + +#reset backoffice config every login +# https://help.sap.com/viewer/5c9ea0c629214e42b727bf08800d8dfa/latest/en-US/8b7db2c286691014af65a6a21e6d5933.html +# backoffice.cockpitng.reset.triggers=login +# backoffice.cockpitng.reset.scope=widgets,cockpitConfig diff --git a/core-customize/hybris/config-template/localextensions.xml b/core-customize/hybris/config-template/localextensions.xml index 47c85c8..4956f8b 100644 --- a/core-customize/hybris/config-template/localextensions.xml +++ b/core-customize/hybris/config-template/localextensions.xml @@ -1,111 +1,340 @@ - + + - - - - - - - - - + + + - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 70f91ffe31f92c3d7d7701994c61474cbfecdba2 Mon Sep 17 00:00:00 2001 From: Markus Perndorfer Date: Wed, 9 Dec 2020 14:41:36 +0100 Subject: [PATCH 08/24] update js-storefront --- js-storefront/demoshop/.editorconfig | 3 + js-storefront/demoshop/.gitignore | 2 - js-storefront/demoshop/README.md | 7 +- js-storefront/demoshop/angular.json | 74 +- js-storefront/demoshop/e2e/protractor.conf.js | 2 +- .../demoshop/e2e/src/app.e2e-spec.ts | 15 +- js-storefront/demoshop/e2e/src/app.po.ts | 6 +- js-storefront/demoshop/ngsw-config.json | 29 + js-storefront/demoshop/package.json | 98 +- js-storefront/demoshop/server.ts | 75 + .../demoshop/src/app/app.component.html | 2 +- .../demoshop/src/app/app.component.spec.ts | 12 +- .../demoshop/src/app/app.component.ts | 2 +- js-storefront/demoshop/src/app/app.module.ts | 41 +- .../demoshop/src/app/app.server.module.ts | 15 + .../src/assets/icons/icon-128x128.png | Bin 0 -> 1253 bytes .../src/assets/icons/icon-144x144.png | Bin 0 -> 1394 bytes .../src/assets/icons/icon-152x152.png | Bin 0 -> 1427 bytes .../src/assets/icons/icon-192x192.png | Bin 0 -> 1790 bytes .../src/assets/icons/icon-384x384.png | Bin 0 -> 3557 bytes .../src/assets/icons/icon-512x512.png | Bin 0 -> 5008 bytes .../demoshop/src/assets/icons/icon-72x72.png | Bin 0 -> 792 bytes .../demoshop/src/assets/icons/icon-96x96.png | Bin 0 -> 958 bytes js-storefront/demoshop/src/index.html | 37 +- js-storefront/demoshop/src/main.server.ts | 15 + js-storefront/demoshop/src/main.ts | 6 +- .../demoshop/src/manifest.webmanifest | 59 + js-storefront/demoshop/src/polyfills.ts | 9 +- js-storefront/demoshop/src/styles.scss | 1 + js-storefront/demoshop/src/test.ts | 19 +- js-storefront/demoshop/tsconfig.app.json | 6 +- js-storefront/demoshop/tsconfig.json | 7 +- js-storefront/demoshop/tsconfig.server.json | 17 + js-storefront/demoshop/tslint.json | 80 +- js-storefront/demoshop/yarn.lock | 7313 +++++++++++------ js-storefront/generate-storefront.sh | 9 + 36 files changed, 5081 insertions(+), 2880 deletions(-) create mode 100644 js-storefront/demoshop/ngsw-config.json create mode 100644 js-storefront/demoshop/server.ts create mode 100644 js-storefront/demoshop/src/app/app.server.module.ts create mode 100644 js-storefront/demoshop/src/assets/icons/icon-128x128.png create mode 100644 js-storefront/demoshop/src/assets/icons/icon-144x144.png create mode 100644 js-storefront/demoshop/src/assets/icons/icon-152x152.png create mode 100644 js-storefront/demoshop/src/assets/icons/icon-192x192.png create mode 100644 js-storefront/demoshop/src/assets/icons/icon-384x384.png create mode 100644 js-storefront/demoshop/src/assets/icons/icon-512x512.png create mode 100644 js-storefront/demoshop/src/assets/icons/icon-72x72.png create mode 100644 js-storefront/demoshop/src/assets/icons/icon-96x96.png create mode 100644 js-storefront/demoshop/src/main.server.ts create mode 100644 js-storefront/demoshop/src/manifest.webmanifest create mode 100644 js-storefront/demoshop/tsconfig.server.json create mode 100755 js-storefront/generate-storefront.sh diff --git a/js-storefront/demoshop/.editorconfig b/js-storefront/demoshop/.editorconfig index e89330a..59d9a3a 100644 --- a/js-storefront/demoshop/.editorconfig +++ b/js-storefront/demoshop/.editorconfig @@ -8,6 +8,9 @@ indent_size = 2 insert_final_newline = true trim_trailing_whitespace = true +[*.ts] +quote_type = single + [*.md] max_line_length = off trim_trailing_whitespace = false diff --git a/js-storefront/demoshop/.gitignore b/js-storefront/demoshop/.gitignore index 2e789dc..86d943a 100644 --- a/js-storefront/demoshop/.gitignore +++ b/js-storefront/demoshop/.gitignore @@ -44,5 +44,3 @@ testem.log # System Files .DS_Store Thumbs.db - -package-lock.json diff --git a/js-storefront/demoshop/README.md b/js-storefront/demoshop/README.md index fb83aff..4c11159 100644 --- a/js-storefront/demoshop/README.md +++ b/js-storefront/demoshop/README.md @@ -4,10 +4,9 @@ A [Spartacus][spartacus]-based demo storefront ([built from libraries][libraries - Configuration for "SAP Commerce in the Public Cloud" (aka CCv2) (including the [Smartedit setup][smartedit]) - [Recommended developer settings][developer] for [VS Code][code] -- Streamlined OCC settings (check [`src/environments`](src/environments) and [`app.module.ts`](src/app/app.module.ts#L11-L16)) -- Minor tweaks to package.json: +- Streamlined OCC settings (check [`src/environments`](src/environments) and [`app.module.ts`](src/app/app.module.ts#L11-L16)) and SAP/spartacus/issues#5886 +- Minor tweaks to `package.json`: - run production build on `yarn build` (see [Updating the Code Repository for JavaScript Storefronts][build]) - - Start http*s* development server on `yarn start`, to avoid any insecure/mixed content errors in the browsers [spartacus]: https://github.com/SAP/cloud-commerce-spartacus-storefront [libraries]: https://sap.github.io/cloud-commerce-spartacus-storefront-docs/building-the-spartacus-storefront-from-libraries/ @@ -21,7 +20,7 @@ A [Spartacus][spartacus]-based demo storefront ([built from libraries][libraries - You have to copy the `webApplicationInjector.js` from SAP Commerce and add it to the project (I want to avoid any copyright troubles). Assuming the default project layout for CCv2, this should do the trick: ```bash - cp ../../core-customize/hybris/bin/modules/smartedit/smarteditaddon/acceleratoraddon/web/webroot/_ui/shared/common/js/webApplicationInjector.js src/ + cp ../../core-customize/hybris/bin/modules/smartedit/smarteditaddon/acceleratoraddon/web/webroot/_ui/shared/common/js/webApplicationInjector.js src/assets ``` - \[optional\] Restrict Smartedit to your CCv2 subscription by changing the value of `data-smartedit-allow-origin` in [`src/index.html`](src/index.html#L13). \ diff --git a/js-storefront/demoshop/angular.json b/js-storefront/demoshop/angular.json index ebbb4e0..7b903c9 100644 --- a/js-storefront/demoshop/angular.json +++ b/js-storefront/demoshop/angular.json @@ -1,6 +1,9 @@ { "$schema": "./node_modules/@angular/cli/lib/config/schema.json", "version": 1, + "cli": { + "packageManager": "yarn" + }, "newProjectRoot": "projects", "projects": { "demoshop": { @@ -17,16 +20,16 @@ "build": { "builder": "@angular-devkit/build-angular:browser", "options": { - "outputPath": "dist/demoshop", + "outputPath": "dist/demoshop/browser", "index": "src/index.html", "main": "src/main.ts", "polyfills": "src/polyfills.ts", "tsConfig": "tsconfig.app.json", - "aot": false, + "aot": true, "assets": [ "src/favicon.ico", "src/assets", - "src/webApplicationInjector.js" + "src/manifest.webmanifest" ], "styles": [ "src/styles.scss" @@ -46,7 +49,6 @@ "sourceMap": false, "extractCss": true, "namedChunks": false, - "aot": true, "extractLicenses": true, "vendorChunk": false, "buildOptimizer": true, @@ -61,7 +63,9 @@ "maximumWarning": "6kb", "maximumError": "10kb" } - ] + ], + "serviceWorker": true, + "ngswConfigPath": "ngsw-config.json" } } }, @@ -91,7 +95,8 @@ "karmaConfig": "karma.conf.js", "assets": [ "src/favicon.ico", - "src/assets" + "src/assets", + "src/manifest.webmanifest" ], "styles": [ "src/styles.scss" @@ -123,12 +128,55 @@ "devServerTarget": "demoshop:serve:production" } } + }, + "server": { + "builder": "@angular-devkit/build-angular:server", + "options": { + "outputPath": "dist/demoshop/server", + "main": "server.ts", + "tsConfig": "tsconfig.server.json" + }, + "configurations": { + "production": { + "outputHashing": "media", + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "sourceMap": false, + "optimization": true + } + } + }, + "serve-ssr": { + "builder": "@nguniversal/builders:ssr-dev-server", + "options": { + "browserTarget": "demoshop:build", + "serverTarget": "demoshop:server" + }, + "configurations": { + "production": { + "browserTarget": "demoshop:build:production", + "serverTarget": "demoshop:server:production" + } + } + }, + "prerender": { + "builder": "@nguniversal/builders:prerender", + "options": { + "browserTarget": "demoshop:build:production", + "serverTarget": "demoshop:server:production", + "routes": [ + "/" + ] + }, + "configurations": { + "production": {} + } } } - } - }, - "defaultProject": "demoshop", - "cli": { - "packageManager": "yarn" - } -} \ No newline at end of file + }}, + "defaultProject": "demoshop" +} diff --git a/js-storefront/demoshop/e2e/protractor.conf.js b/js-storefront/demoshop/e2e/protractor.conf.js index 6a6e057..7c798cf 100644 --- a/js-storefront/demoshop/e2e/protractor.conf.js +++ b/js-storefront/demoshop/e2e/protractor.conf.js @@ -21,7 +21,7 @@ exports.config = { jasmineNodeOpts: { showColors: true, defaultTimeoutInterval: 30000, - print: function () { } + print: function() {} }, onPrepare() { require('ts-node').register({ diff --git a/js-storefront/demoshop/e2e/src/app.e2e-spec.ts b/js-storefront/demoshop/e2e/src/app.e2e-spec.ts index 2a46f4e..9614caf 100644 --- a/js-storefront/demoshop/e2e/src/app.e2e-spec.ts +++ b/js-storefront/demoshop/e2e/src/app.e2e-spec.ts @@ -1,5 +1,5 @@ -import { browser, logging } from 'protractor'; import { AppPage } from './app.po'; +import { browser, logging } from 'protractor'; describe('workspace-project App', () => { let page: AppPage; @@ -15,14 +15,9 @@ describe('workspace-project App', () => { afterEach(async () => { // Assert that there are no errors emitted from the browser - const logs = await browser - .manage() - .logs() - .get(logging.Type.BROWSER); - expect(logs).not.toContain( - jasmine.objectContaining({ - level: logging.Level.SEVERE, - } as logging.Entry) - ); + const logs = await browser.manage().logs().get(logging.Type.BROWSER); + expect(logs).not.toContain(jasmine.objectContaining({ + level: logging.Level.SEVERE, + } as logging.Entry)); }); }); diff --git a/js-storefront/demoshop/e2e/src/app.po.ts b/js-storefront/demoshop/e2e/src/app.po.ts index b8498c2..b68475e 100644 --- a/js-storefront/demoshop/e2e/src/app.po.ts +++ b/js-storefront/demoshop/e2e/src/app.po.ts @@ -1,11 +1,11 @@ import { browser, by, element } from 'protractor'; export class AppPage { - navigateTo() { - return browser.get(browser.baseUrl) as Promise; + navigateTo(): Promise { + return browser.get(browser.baseUrl) as Promise; } - getTitleText() { + getTitleText(): Promise { return element(by.css('app-root .content span')).getText() as Promise; } } diff --git a/js-storefront/demoshop/ngsw-config.json b/js-storefront/demoshop/ngsw-config.json new file mode 100644 index 0000000..4ddf1a7 --- /dev/null +++ b/js-storefront/demoshop/ngsw-config.json @@ -0,0 +1,29 @@ +{ + "$schema": "./node_modules/@angular/service-worker/config/schema.json", + "index": "/index.html", + "assetGroups": [ + { + "name": "app", + "installMode": "prefetch", + "resources": { + "files": [ + "/favicon.ico", + "/index.html", + "/manifest.webmanifest", + "/*.css", + "/*.js" + ] + } + }, { + "name": "assets", + "installMode": "lazy", + "updateMode": "prefetch", + "resources": { + "files": [ + "/assets/**", + "/*.(eot|svg|cur|jpg|png|webp|gif|otf|ttf|woff|woff2|ani)" + ] + } + } + ] +} diff --git a/js-storefront/demoshop/package.json b/js-storefront/demoshop/package.json index 6bd2e68..298c02e 100644 --- a/js-storefront/demoshop/package.json +++ b/js-storefront/demoshop/package.json @@ -3,61 +3,71 @@ "version": "0.0.0", "scripts": { "ng": "ng", - "start": "ng serve --ssl", + "start": "ng serve", "build": "ng build --prod", "test": "ng test", "lint": "ng lint", - "e2e": "ng e2e" + "e2e": "ng e2e", + "dev:ssr": "ng run demoshop:serve-ssr", + "serve:ssr": "node dist/demoshop/server/main.js", + "build:ssr": "ng build --prod && ng run demoshop:server:production", + "prerender": "ng run demoshop:prerender" }, "private": true, "dependencies": { - "@angular/animations": "~8.2.11", - "@angular/common": "~8.2.11", - "@angular/compiler": "~8.2.11", - "@angular/core": "~8.2.11", - "@angular/forms": "~8.2.11", - "@angular/platform-browser": "~8.2.11", - "@angular/platform-browser-dynamic": "~8.2.11", - "@angular/router": "~8.2.11", - "@angular/service-worker": "~8.2.11", - "@ng-bootstrap/ng-bootstrap": "^4.1.0", - "@ng-select/ng-select": "^2.13.2", - "@ngrx/effects": "^8.3.0", - "@ngrx/router-store": "^8.3.0", - "@ngrx/store": "^8.3.0", - "@spartacus/assets": "^1.1.0", - "@spartacus/core": "^1.1.0", - "@spartacus/schematics": "^0.1.2-beta.1", - "@spartacus/storefront": "^1.1.0", - "@spartacus/styles": "^1.1.0", - "bootstrap": "^4.2.1", - "i18next": "^15.0.6", - "i18next-xhr-backend": "^2.0.1", + "@angular/animations": "~9.1.12", + "@angular/common": "~9.1.12", + "@angular/compiler": "~9.1.12", + "@angular/core": "~9.1.12", + "@angular/forms": "~9.1.12", + "@angular/localize": "~9.1.12", + "@angular/platform-browser": "~9.1.12", + "@angular/platform-browser-dynamic": "~9.1.12", + "@angular/platform-server": "~9.1.12", + "@angular/router": "~9.1.12", + "@angular/service-worker": "~9.1.12", + "@ng-bootstrap/ng-bootstrap": "^6.0.0", + "@ng-select/ng-select": "^4.0.0", + "@ngrx/effects": "~9.1.0", + "@ngrx/router-store": "~9.1.0", + "@ngrx/store": "~9.1.0", + "@nguniversal/express-engine": "^9.1.1", + "@spartacus/assets": "^2.1.4", + "@spartacus/core": "^2.1.4", + "@spartacus/storefront": "^2.1.4", + "@spartacus/styles": "^2.1.4", + "bootstrap": "4.2.1", + "express": "^4.15.2", + "i18next": "^19.3.4", + "i18next-xhr-backend": "^3.2.2", "ngx-infinite-scroll": "^8.0.0", - "rxjs": "~6.4.0", + "rxjs": "~6.5.4", "tslib": "^1.10.0", - "zone.js": "~0.9.1" + "zone.js": "~0.10.2" }, "devDependencies": { - "@angular-devkit/build-angular": "~0.803.14", - "@angular/cli": "~8.3.14", - "@angular/compiler-cli": "~8.2.11", - "@angular/language-service": "~8.2.11", - "@types/jasmine": "~3.3.8", + "@angular-devkit/build-angular": "~0.901.12", + "@angular/cli": "~9.1.12", + "@angular/compiler-cli": "~9.1.12", + "@nguniversal/builders": "^9.1.1", + "@spartacus/schematics": "^2.1.4", + "@types/express": "^4.17.0", + "@types/jasmine": "~3.5.0", "@types/jasminewd2": "~2.0.3", - "@types/node": "~8.9.4", - "codelyzer": "^5.0.0", - "jasmine-core": "~3.4.0", + "@types/node": "^12.11.1", + "codelyzer": "^5.1.2", + "jasmine-core": "~3.5.0", "jasmine-spec-reporter": "~4.2.1", - "karma": "~4.1.0", - "karma-chrome-launcher": "~2.2.0", - "karma-coverage-istanbul-reporter": "~2.0.1", - "karma-jasmine": "~2.0.1", - "karma-jasmine-html-reporter": "^1.4.0", - "prettier": "^1.18.2", - "protractor": "~5.4.0", - "ts-node": "~7.0.0", - "tslint": "~5.15.0", - "typescript": "~3.5.3" + "karma": "~5.0.0", + "karma-chrome-launcher": "~3.1.0", + "karma-coverage-istanbul-reporter": "~2.1.0", + "karma-jasmine": "~3.0.1", + "karma-jasmine-html-reporter": "^1.4.2", + "prettier": "^2.2.1", + "protractor": "~7.0.0", + "ts-loader": "^6.0.4", + "ts-node": "~8.3.0", + "tslint": "~6.1.0", + "typescript": "~3.8.3" } } diff --git a/js-storefront/demoshop/server.ts b/js-storefront/demoshop/server.ts new file mode 100644 index 0000000..bf88a87 --- /dev/null +++ b/js-storefront/demoshop/server.ts @@ -0,0 +1,75 @@ +/*************************************************************************************************** + * Load `$localize` onto the global scope - used if i18n tags appear in Angular templates. + */ +import '@angular/localize/init'; +import 'zone.js/dist/zone-node'; + +import { ngExpressEngine as engine } from '@nguniversal/express-engine'; +import { NgExpressEngineDecorator } from '@spartacus/core'; +import * as express from 'express'; +import { join } from 'path'; + +import { AppServerModule } from './src/main.server'; +import { APP_BASE_HREF } from '@angular/common'; +import { existsSync } from 'fs'; + +const ngExpressEngine = NgExpressEngineDecorator.get(engine); + +// The Express app is exported so that it can be used by serverless Functions. +export function app() { + const server = express(); + const distFolder = join(process.cwd(), 'dist/demoshop/browser'); + const indexHtml = existsSync(join(distFolder, 'index.original.html')) + ? 'index.original.html' + : 'index'; + + server.engine( + 'html', + ngExpressEngine({ + bootstrap: AppServerModule, + }) + ); + + server.set('view engine', 'html'); + server.set('views', distFolder); + + // Serve static files from /browser + server.get( + '*.*', + express.static(distFolder, { + maxAge: '1y', + }) + ); + + // All regular routes use the Universal engine + server.get('*', (req, res) => { + res.render(indexHtml, { + req, + providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }], + }); + }); + + return server; +} + +function run() { + const port = process.env.PORT || 4000; + + // Start up the Node server + const server = app(); + server.listen(port, () => { + console.log(`Node Express server listening on http://localhost:${port}`); + }); +} + +// Webpack will replace 'require' with '__webpack_require__' +// '__non_webpack_require__' is a proxy to Node 'require' +// The below code is to ensure that the server is run only when not requiring the bundle. +declare const __non_webpack_require__: NodeRequire; +const mainModule = __non_webpack_require__.main; +const moduleFilename = (mainModule && mainModule.filename) || ''; +if (moduleFilename === __filename || moduleFilename.includes('iisnode')) { + run(); +} + +export * from './src/main.server'; diff --git a/js-storefront/demoshop/src/app/app.component.html b/js-storefront/demoshop/src/app/app.component.html index 218ae0e..1832abc 100644 --- a/js-storefront/demoshop/src/app/app.component.html +++ b/js-storefront/demoshop/src/app/app.component.html @@ -1 +1 @@ -Loading... + diff --git a/js-storefront/demoshop/src/app/app.component.spec.ts b/js-storefront/demoshop/src/app/app.component.spec.ts index 9f401cb..d18dafb 100644 --- a/js-storefront/demoshop/src/app/app.component.spec.ts +++ b/js-storefront/demoshop/src/app/app.component.spec.ts @@ -1,29 +1,31 @@ -import { async, TestBed } from '@angular/core/testing'; +import { TestBed, async } from '@angular/core/testing'; import { AppComponent } from './app.component'; describe('AppComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [AppComponent], + declarations: [ + AppComponent + ], }).compileComponents(); })); it('should create the app', () => { const fixture = TestBed.createComponent(AppComponent); - const app = fixture.debugElement.componentInstance; + const app = fixture.componentInstance; expect(app).toBeTruthy(); }); it(`should have as title 'demoshop'`, () => { const fixture = TestBed.createComponent(AppComponent); - const app = fixture.debugElement.componentInstance; + const app = fixture.componentInstance; expect(app.title).toEqual('demoshop'); }); it('should render title', () => { const fixture = TestBed.createComponent(AppComponent); fixture.detectChanges(); - const compiled = fixture.debugElement.nativeElement; + const compiled = fixture.nativeElement; expect(compiled.querySelector('.content span').textContent).toContain('demoshop app is running!'); }); }); diff --git a/js-storefront/demoshop/src/app/app.component.ts b/js-storefront/demoshop/src/app/app.component.ts index 89d9edf..c1464c8 100644 --- a/js-storefront/demoshop/src/app/app.component.ts +++ b/js-storefront/demoshop/src/app/app.component.ts @@ -3,7 +3,7 @@ import { Component } from '@angular/core'; @Component({ selector: 'app-root', templateUrl: './app.component.html', - styleUrls: ['./app.component.scss'], + styleUrls: ['./app.component.scss'] }) export class AppComponent { title = 'demoshop'; diff --git a/js-storefront/demoshop/src/app/app.module.ts b/js-storefront/demoshop/src/app/app.module.ts index d8c0b0e..55eb74d 100644 --- a/js-storefront/demoshop/src/app/app.module.ts +++ b/js-storefront/demoshop/src/app/app.module.ts @@ -1,47 +1,44 @@ +import { BrowserModule, BrowserTransferStateModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; -import { BrowserModule } from '@angular/platform-browser'; -import { translationChunksConfig, translations } from '@spartacus/assets'; -import { OccConfig } from '@spartacus/core'; -import { B2cStorefrontModule } from '@spartacus/storefront'; -import { environment } from '../environments/environment'; + import { AppComponent } from './app.component'; +import { translations, translationChunksConfig } from '@spartacus/assets'; +import { B2cStorefrontModule } from '@spartacus/storefront'; +import { OccConfig } from '@spartacus/core'; +import { environment } from 'src/environments/environment'; const occConfig: OccConfig = { backend: { occ: {} } }; - // only provide the `occ.baseUrl` key if it is explicitly configured, otherwise the value of // is ignored. // This in turn breaks the deployment in CCv2 +occConfig.backend.occ.prefix = '/occ/v2/' if (environment.occBaseUrl) { occConfig.backend.occ.baseUrl = environment.occBaseUrl; } - @NgModule({ - declarations: [AppComponent], + declarations: [ + AppComponent + ], imports: [ - BrowserModule, + BrowserModule.withServerTransition({ appId: 'serverApp' }), B2cStorefrontModule.withConfig({ backend: occConfig.backend, - authentication: { - client_id: 'mobile_android', - client_secret: 'secret', - }, context: { - baseSite: ['electronics-spa'], + currency: ['USD'], + language: ['en'], }, i18n: { resources: translations, chunks: translationChunksConfig, - fallbackLang: 'en', + fallbackLang: 'en' }, features: { - level: '1.2', - }, - personalization: { - enabled: true, - }, + level: '2.1' + } }), + BrowserTransferStateModule, ], providers: [], - bootstrap: [AppComponent], + bootstrap: [AppComponent] }) -export class AppModule {} +export class AppModule { } diff --git a/js-storefront/demoshop/src/app/app.server.module.ts b/js-storefront/demoshop/src/app/app.server.module.ts new file mode 100644 index 0000000..502232c --- /dev/null +++ b/js-storefront/demoshop/src/app/app.server.module.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; +import { ServerModule, ServerTransferStateModule } from '@angular/platform-server'; + +import { AppModule } from './app.module'; +import { AppComponent } from './app.component'; + +@NgModule({ + imports: [ + AppModule, + ServerModule, + ServerTransferStateModule, + ], + bootstrap: [AppComponent], +}) +export class AppServerModule {} diff --git a/js-storefront/demoshop/src/assets/icons/icon-128x128.png b/js-storefront/demoshop/src/assets/icons/icon-128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..9f9241f0be40661db1eed29384231e76d33b6e7c GIT binary patch literal 1253 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 A1ONa4 literal 0 HcmV?d00001 diff --git a/js-storefront/demoshop/src/assets/icons/icon-152x152.png b/js-storefront/demoshop/src/assets/icons/icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..34a1a8d645872c776c9425de45c3fcfba12c271e GIT binary patch literal 1427 zcmV;E1#J3>P)0{{R3FC5Sl00004XF*Lt006O% z3;baP00001b5ch_0Itp)=>Px#S5Qn;MNDaN)BrNc058)3FxCJt%K$IW1~u3KFxCJt z*8nrs05IMFFxCJu+yF7w05QV=FWmq!|NsBlCs6RIx%%hq)l6;YNo@Dg+Uk;~=yZ

X{-?>fGCXfYNSFwSa_5FdK zVWbmbiyjU>K0ZD^K0ZD^KL2TsQY8DMN~18(vn<;gTO#sXvhT>_UZ`aLlk6vfOgE>x z$T-hm!ES8PrsW=;^Kr6C!eqm8&oyA1v_kq*?gp^0oQ|86yBTb~R+yAK1#Fd8crAA# znB!KMDR(-UvsRcdcL>ZyD=d{e3TC$zlI3!r%+{YP;V#uJdT7g#Xqm;#0N{kF{1!}pE)7`+j3=Yr=A6bs)`+*fjoG~J)&x^s8 z_jj;s0P7~D{|#2dlPq?GcR}Ua z{+_|MsARG8yA+k{=P%eNDp~OG4wS2UoLa{Ulq`6lc*f+~J&)5nP_iJHz$Vx7307j0 zYyg5u$Q8r*0%Cw98-idFB-dsPRzs2%AXtJtFg3lhQHW%vZLn_oGdTw95XqufBuC^} zpqzrm$Z^33dMyITwR*jMs{qNumm@L#fi)2U)kti#;?W8&*b#JvZYHF1{36S zl>T3^PqJhK7)+ASQD$y?}F88 z9_@nlYJR5FA|6=i{)<^n7pz4J@Fer8w` zTCgqu^~JOcHmrGl7ucESt>yX3@;t&!4|~X?3%0KL#V*(z)}ssdQ1i3H+8(jKyI?0Z h@8jd+Hf^L(!7eV+I8=gXo5oJ1=hR0aT`iN0Qe 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 literal 0 HcmV?d00001 diff --git a/js-storefront/demoshop/src/assets/icons/icon-512x512.png b/js-storefront/demoshop/src/assets/icons/icon-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..51ee297df1cbeb0354814ffe95afa6e4bc86ea23 GIT binary patch literal 5008 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 g0#)SEkt6>uKVW + - - - - Demo Shop - - - - - - - - + + + Demoshop + + + + + + + + + + + + diff --git a/js-storefront/demoshop/src/main.server.ts b/js-storefront/demoshop/src/main.server.ts new file mode 100644 index 0000000..6dc2696 --- /dev/null +++ b/js-storefront/demoshop/src/main.server.ts @@ -0,0 +1,15 @@ +/*************************************************************************************************** + * Load `$localize` onto the global scope - used if i18n tags appear in Angular templates. +*/ +import '@angular/localize/init'; + +import { enableProdMode } from '@angular/core'; + +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +export { AppServerModule } from './app/app.server.module'; +export { renderModule, renderModuleFactory } from '@angular/platform-server'; diff --git a/js-storefront/demoshop/src/main.ts b/js-storefront/demoshop/src/main.ts index 59758a9..ebf5fc9 100644 --- a/js-storefront/demoshop/src/main.ts +++ b/js-storefront/demoshop/src/main.ts @@ -1,5 +1,6 @@ import { enableProdMode } from '@angular/core'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + import { AppModule } from './app/app.module'; import { environment } from './environments/environment'; @@ -7,6 +8,7 @@ if (environment.production) { enableProdMode(); } -platformBrowserDynamic() - .bootstrapModule(AppModule) +document.addEventListener('DOMContentLoaded', () => { + platformBrowserDynamic().bootstrapModule(AppModule) .catch(err => console.error(err)); +}); diff --git a/js-storefront/demoshop/src/manifest.webmanifest b/js-storefront/demoshop/src/manifest.webmanifest new file mode 100644 index 0000000..b01a52c --- /dev/null +++ b/js-storefront/demoshop/src/manifest.webmanifest @@ -0,0 +1,59 @@ +{ + "name": "demoshop", + "short_name": "demoshop", + "theme_color": "#1976d2", + "background_color": "#fafafa", + "display": "standalone", + "scope": "./", + "start_url": "./", + "icons": [ + { + "src": "assets/icons/icon-72x72.png", + "sizes": "72x72", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-96x96.png", + "sizes": "96x96", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-128x128.png", + "sizes": "128x128", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-144x144.png", + "sizes": "144x144", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-152x152.png", + "sizes": "152x152", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-384x384.png", + "sizes": "384x384", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable any" + } + ] +} diff --git a/js-storefront/demoshop/src/polyfills.ts b/js-storefront/demoshop/src/polyfills.ts index 2f258e5..01e24d6 100644 --- a/js-storefront/demoshop/src/polyfills.ts +++ b/js-storefront/demoshop/src/polyfills.ts @@ -1,3 +1,7 @@ +/*************************************************************************************************** + * Load `$localize` onto the global scope - used if i18n tags appear in Angular templates. + */ +import '@angular/localize/init'; /** * This file includes polyfills needed by Angular and is loaded before the app. * You can add your own extra polyfills to this file. @@ -35,7 +39,7 @@ * will put import in the top of bundle, so user need to create a separate file * in this directory (for example: zone-flags.ts), and put the following flags * into that file, and then add the following code before importing zone.js. - * import './zone-flags.ts'; + * import './zone-flags'; * * The flags allowed in zone-flags.ts are listed here. * @@ -55,7 +59,8 @@ /*************************************************************************************************** * Zone JS is required by default for Angular itself. */ -import 'zone.js/dist/zone'; // Included with Angular CLI. +import 'zone.js/dist/zone'; // Included with Angular CLI. + /*************************************************************************************************** * APPLICATION IMPORTS diff --git a/js-storefront/demoshop/src/styles.scss b/js-storefront/demoshop/src/styles.scss index cd7bb9b..90a9595 100644 --- a/js-storefront/demoshop/src/styles.scss +++ b/js-storefront/demoshop/src/styles.scss @@ -1,3 +1,4 @@ /* You can add global styles to this file, and also import other style files */ +$styleVersion: 2.1; @import '~@spartacus/styles/index'; diff --git a/js-storefront/demoshop/src/test.ts b/js-storefront/demoshop/src/test.ts index 4b3f470..50193eb 100644 --- a/js-storefront/demoshop/src/test.ts +++ b/js-storefront/demoshop/src/test.ts @@ -1,13 +1,24 @@ // This file is required by karma.conf.js and loads recursively all the .spec and framework files -import { getTestBed } from '@angular/core/testing'; -import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing'; import 'zone.js/dist/zone-testing'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; -declare const require: any; +declare const require: { + context(path: string, deep?: boolean, filter?: RegExp): { + keys(): string[]; + (id: string): T; + }; +}; // First, initialize the Angular testing environment. -getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting()); +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting() +); // Then we find all the tests. const context = require.context('./', true, /\.spec\.ts$/); // And load the modules. diff --git a/js-storefront/demoshop/tsconfig.app.json b/js-storefront/demoshop/tsconfig.app.json index 565a11a..f758d98 100644 --- a/js-storefront/demoshop/tsconfig.app.json +++ b/js-storefront/demoshop/tsconfig.app.json @@ -9,10 +9,6 @@ "src/polyfills.ts" ], "include": [ - "src/**/*.ts" - ], - "exclude": [ - "src/test.ts", - "src/**/*.spec.ts" + "src/**/*.d.ts" ] } diff --git a/js-storefront/demoshop/tsconfig.json b/js-storefront/demoshop/tsconfig.json index 2247754..8c4ef3b 100644 --- a/js-storefront/demoshop/tsconfig.json +++ b/js-storefront/demoshop/tsconfig.json @@ -11,9 +11,6 @@ "moduleResolution": "node", "importHelpers": true, "target": "es2015", - "typeRoots": [ - "node_modules/@types" - ], "lib": [ "es2018", "dom" @@ -22,7 +19,5 @@ "angularCompilerOptions": { "fullTemplateTypeCheck": true, "strictInjectionParameters": true - }, - "noUnusedLocals": true, - "noUnusedParameters": true + } } diff --git a/js-storefront/demoshop/tsconfig.server.json b/js-storefront/demoshop/tsconfig.server.json new file mode 100644 index 0000000..61aa6e8 --- /dev/null +++ b/js-storefront/demoshop/tsconfig.server.json @@ -0,0 +1,17 @@ +{ + "extends": "./tsconfig.app.json", + "compilerOptions": { + "outDir": "./out-tsc/app-server", + "module": "commonjs", + "types": [ + "node" + ] + }, + "files": [ + "src/main.server.ts", + "server.ts" + ], + "angularCompilerOptions": { + "entryModule": "./src/app/app.server.module#AppServerModule" + } +} diff --git a/js-storefront/demoshop/tslint.json b/js-storefront/demoshop/tslint.json index 2658324..d92ff5d 100644 --- a/js-storefront/demoshop/tslint.json +++ b/js-storefront/demoshop/tslint.json @@ -1,9 +1,15 @@ { "extends": "tslint:recommended", "rules": { - "quotemark": false, + "align": { + "options": [ + "parameters", + "statements" + ] + }, "array-type": false, - "arrow-parens": false, + "arrow-return-shorthand": true, + "curly": true, "deprecation": { "severity": "warning" }, @@ -22,13 +28,22 @@ "app", "kebab-case" ], + "eofline": true, "import-blacklist": [ true, "rxjs/Rx" ], - "interface-name": false, + "import-spacing": true, + "indent": { + "options": [ + "spaces" + ] + }, "max-classes-per-file": false, - "member-access": false, + "max-line-length": [ + true, + 140 + ], "member-ordering": [ true, { @@ -40,7 +55,6 @@ ] } ], - "no-consecutive-blank-lines": false, "no-console": [ true, "debug", @@ -62,9 +76,59 @@ true, "as-needed" ], - "object-literal-sort-keys": false, - "ordered-imports": false, - "trailing-comma": false, + "quotemark": [ + true, + "single" + ], + "semicolon": { + "options": [ + "always" + ] + }, + "space-before-function-paren": { + "options": { + "anonymous": "never", + "asyncArrow": "always", + "constructor": "never", + "method": "never", + "named": "never" + } + }, + "typedef-whitespace": { + "options": [ + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + }, + { + "call-signature": "onespace", + "index-signature": "onespace", + "parameter": "onespace", + "property-declaration": "onespace", + "variable-declaration": "onespace" + } + ] + }, + "variable-name": { + "options": [ + "ban-keywords", + "check-format", + "allow-pascal-case" + ] + }, + "whitespace": { + "options": [ + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type", + "check-typecast" + ] + }, "no-conflicting-lifecycle": true, "no-host-metadata-property": true, "no-input-rename": true, diff --git a/js-storefront/demoshop/yarn.lock b/js-storefront/demoshop/yarn.lock index ed82844..e971060 100644 --- a/js-storefront/demoshop/yarn.lock +++ b/js-storefront/demoshop/yarn.lock @@ -2,1020 +2,1276 @@ # yarn lockfile v1 -"@angular-devkit/architect@0.803.14": - version "0.803.14" - resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.803.14.tgz#548d0a2e4e0052162c53ab75c50171e6496d4c0c" - integrity sha512-CPDDNTpM/9XWCFxCRL1/mYB54ivZcmWaVSjUgN2zcHWBc0gW3lrJrmmb+cJ1KSlOI7hoZaMTV1gWoX2QXd4JrA== - dependencies: - "@angular-devkit/core" "8.3.14" - rxjs "6.4.0" - -"@angular-devkit/build-angular@~0.803.14": - version "0.803.14" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-0.803.14.tgz#4c2cfc7266b711485b0f9f91abd61532aa0b71bc" - integrity sha512-AtrhLDcy5DHi5zWiahEmvbD6THkJkWv27TySTfpZlmMjpRJHNqK7uQiKR1iWSqo4VNpimFle3fwkfjQYHlEKqA== - dependencies: - "@angular-devkit/architect" "0.803.14" - "@angular-devkit/build-optimizer" "0.803.14" - "@angular-devkit/build-webpack" "0.803.14" - "@angular-devkit/core" "8.3.14" - "@babel/core" "7.5.5" - "@babel/preset-env" "7.5.5" - "@ngtools/webpack" "8.3.14" - ajv "6.10.2" - autoprefixer "9.6.1" - browserslist "4.6.6" - cacache "12.0.2" - caniuse-lite "1.0.30000989" +"@angular-devkit/architect@0.901.12", "@angular-devkit/architect@^0.901.0": + version "0.901.12" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.901.12.tgz#e0f78b7282f851d27af6802dc7a261022421b2d5" + integrity sha512-gLlsxa+3JPV1m1gRvRMujOs4xKox6I5BkYmOD1zfu+dB6y3LuBAvHfXA6FaTDVOMBrmSlWnE4PmOmB6xd7wxMA== + dependencies: + "@angular-devkit/core" "9.1.12" + rxjs "6.5.4" + +"@angular-devkit/build-angular@~0.901.12": + version "0.901.12" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-0.901.12.tgz#5b588e530be01502e350ceae17b21b4fc6676650" + integrity sha512-enK+u1Lg1a/KWUs3r8Tc7Igduu5ph9fgziV8bjQeVrswrqFb0m0eEhxe/zV8rvE92H3NBZp5Z+uzOYIcg4eirw== + dependencies: + "@angular-devkit/architect" "0.901.12" + "@angular-devkit/build-optimizer" "0.901.12" + "@angular-devkit/build-webpack" "0.901.12" + "@angular-devkit/core" "9.1.12" + "@babel/core" "7.9.0" + "@babel/generator" "7.9.3" + "@babel/preset-env" "7.9.0" + "@babel/template" "7.8.6" + "@jsdevtools/coverage-istanbul-loader" "3.0.3" + "@ngtools/webpack" "9.1.12" + ajv "6.12.3" + autoprefixer "9.7.4" + babel-loader "8.0.6" + browserslist "^4.9.1" + cacache "15.0.0" + caniuse-lite "^1.0.30001032" circular-dependency-plugin "5.2.0" - clean-css "4.2.1" - copy-webpack-plugin "5.0.4" - core-js "3.2.1" - file-loader "4.2.0" - find-cache-dir "3.0.0" - glob "7.1.4" - istanbul-instrumenter-loader "3.0.1" - jest-worker "24.9.0" + copy-webpack-plugin "6.0.3" + core-js "3.6.4" + css-loader "3.5.1" + cssnano "4.1.10" + file-loader "6.0.0" + find-cache-dir "3.3.1" + glob "7.1.6" + jest-worker "25.1.0" karma-source-map-support "1.4.0" - less "3.9.0" + less "3.11.3" less-loader "5.0.0" - license-webpack-plugin "2.1.2" - loader-utils "1.2.3" - mini-css-extract-plugin "0.8.0" + license-webpack-plugin "2.1.4" + loader-utils "2.0.0" + mini-css-extract-plugin "0.9.0" minimatch "3.0.4" - open "6.4.0" + open "7.0.3" parse5 "4.0.0" - postcss "7.0.17" + postcss "7.0.27" postcss-import "12.0.1" postcss-loader "3.0.0" - raw-loader "3.1.0" - regenerator-runtime "0.13.3" - rxjs "6.4.0" - sass "1.22.9" - sass-loader "7.2.0" - semver "6.3.0" + raw-loader "4.0.0" + regenerator-runtime "0.13.5" + rimraf "3.0.2" + rollup "2.1.0" + rxjs "6.5.4" + sass "1.26.3" + sass-loader "8.0.2" + semver "7.1.3" source-map "0.7.3" source-map-loader "0.2.4" - source-map-support "0.5.13" speed-measure-webpack-plugin "1.3.1" - style-loader "1.0.0" - stylus "0.54.5" + style-loader "1.1.3" + stylus "0.54.7" stylus-loader "3.0.2" - terser "4.3.8" - terser-webpack-plugin "1.4.1" - tree-kill "1.2.1" - webpack "4.39.2" - webpack-dev-middleware "3.7.0" - webpack-dev-server "3.8.0" - webpack-merge "4.2.1" + terser "4.6.10" + terser-webpack-plugin "3.0.3" + tree-kill "1.2.2" + webpack "4.42.0" + webpack-dev-middleware "3.7.2" + webpack-dev-server "3.11.0" + webpack-merge "4.2.2" webpack-sources "1.4.3" - webpack-subresource-integrity "1.1.0-rc.6" - worker-plugin "3.2.0" + webpack-subresource-integrity "1.4.0" + worker-plugin "4.0.3" -"@angular-devkit/build-optimizer@0.803.14": - version "0.803.14" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.803.14.tgz#ca76c25e730c9181649fdde16a49062a4b2d1605" - integrity sha512-f1RYhO0swLfoLvCj/fUrDWm4vzVSnffcCc4C4PHnqoOGBRQpmIzG7G54Pm8YK677slioToYZQ68s3/zVtsQNWg== +"@angular-devkit/build-optimizer@0.901.12": + version "0.901.12" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.901.12.tgz#327066ba0d7f2f4fc82960618906e4f916f7bf7c" + integrity sha512-XuXA+6y9QkIAwSVZhWmne4r7qugUUWaXobgRefbn9heiRlY8/7XkZmmvbSrxc1fgQfQar52W9fAa19fAIeNvnw== dependencies: - loader-utils "1.2.3" + loader-utils "2.0.0" source-map "0.7.3" - tslib "1.10.0" - typescript "3.5.3" + tslib "1.11.1" + typescript "3.6.5" webpack-sources "1.4.3" -"@angular-devkit/build-webpack@0.803.14": - version "0.803.14" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.803.14.tgz#8c9d443260e07ed2ea13bd3ac2c04c2c8cc47be5" - integrity sha512-hvxAyJzDCaIISATHcu0+rAAj7ZcmX7VREX6J3FUMYDxhdjKqe45Q5J6Oy/Df2ZSV3YxwySZVcIhrBstm+0LC7Q== +"@angular-devkit/build-webpack@0.901.12": + version "0.901.12" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.901.12.tgz#fcbe22d6c41f3f626342c3bd8f734104d4a65a8c" + integrity sha512-zrhZV2LhQ4uFl9at9i2jiedIu932HsaFN4OMMsTFlV+6CZxtEUBI85hhnPa5KQtIYQr2OMQSQf/FyhnBGs0riQ== dependencies: - "@angular-devkit/architect" "0.803.14" - "@angular-devkit/core" "8.3.14" - rxjs "6.4.0" + "@angular-devkit/architect" "0.901.12" + "@angular-devkit/core" "9.1.12" + rxjs "6.5.4" -"@angular-devkit/core@8.3.14", "@angular-devkit/core@^8.3.5": - version "8.3.14" - resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-8.3.14.tgz#b42716a0de44c8f2785a18ae5562ec2f76543c9b" - integrity sha512-+IYLbtCxwIpaieRj0wurEXBzZ/fDSdWbyrCfajzDerzsxqghNcafAXSazHXWwISqtbr/pAOuqUNR+mEk2XBz3Q== +"@angular-devkit/core@9.1.12", "@angular-devkit/core@^9.1.0", "@angular-devkit/core@^9.1.7": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-9.1.12.tgz#7cebce51918fe7f3462d8c58c9fbd5a3e2c3b3e7" + integrity sha512-D/GnBeSlmdgGn7EhuE32HuPuRAjvUuxi7Q6WywBI8PSsXKAGnrypghBwMATNnOA24//CgbW2533Y9VWHaeXdeA== dependencies: - ajv "6.10.2" - fast-json-stable-stringify "2.0.0" - magic-string "0.25.3" - rxjs "6.4.0" + ajv "6.12.3" + fast-json-stable-stringify "2.1.0" + magic-string "0.25.7" + rxjs "6.5.4" source-map "0.7.3" -"@angular-devkit/schematics@8.3.14", "@angular-devkit/schematics@^8.3.5": - version "8.3.14" - resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-8.3.14.tgz#844573822805c2f50f513418e4850a4c28bcb91a" - integrity sha512-5gPmTBN85a2gTxz/FsM5fO9Bxw4KG6uJNLMDAWfPG8vvSQEl7J64ujyqxPz39TernQTEKeuhRC4I5H1aaW9I/Q== +"@angular-devkit/schematics@9.1.12", "@angular-devkit/schematics@^9.1.7": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-9.1.12.tgz#bbf457f1b35941fddeeb1ee77336dd04ca60b8ba" + integrity sha512-+GYnUzmIy1/QpYitCC8mI7jcrViGHTtOKvvDPEFjU2nggjNEQaMmsHcdIsjrqggEc23ZZyebNAIewT8CMkJyrQ== dependencies: - "@angular-devkit/core" "8.3.14" - rxjs "6.4.0" + "@angular-devkit/core" "9.1.12" + ora "4.0.3" + rxjs "6.5.4" -"@angular/animations@~8.2.11": - version "8.2.12" - resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-8.2.12.tgz#5bb2431b9efd80f1c34d3389aee7943cd1b01eb8" - integrity sha512-QVtZUw5J9c0RcDaJntIoeWVk/q9dhjDFxh+yw/uPl9Z4upWASdsOpZU2lfjqyU0myfg8dnQyZa1+Ce7n/DaClQ== - dependencies: - tslib "^1.9.0" +"@angular/animations@~9.1.12": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-9.1.12.tgz#1c9c1a792be4b52b196cab1e5c88bd319b60716d" + integrity sha512-tphpf9QHnOPoL2Jl7KpR+R5aHNW3oifLEmRUTajJYJGvo1uzdUDE82+V9OGOinxJsYseCth9gYJhN24aYTB9NA== -"@angular/cdk@^8.2.1": - version "8.2.3" - resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-8.2.3.tgz#16b96ffa935cbf5a646757ecaf2b19c434678f72" - integrity sha512-ZwO5Sn720RA2YvBqud0JAHkZXjmjxM0yNzCO8RVtRE9i8Gl26Wk0j0nQeJkVm4zwv2QO8MwbKUKGTMt8evsokA== - dependencies: - tslib "^1.7.1" +"@angular/cdk@^9.2.4": + version "9.2.4" + resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-9.2.4.tgz#8413958bd275e4c34be3b96f56444671dd30ba93" + integrity sha512-iw2+qHMXHYVC6K/fttHeNHIieSKiTEodVutZoOEcBu9rmRTGbLB26V/CRsfIRmA1RBk+uFYWc6UQZnMC3RdnJQ== optionalDependencies: parse5 "^5.0.0" -"@angular/cli@~8.3.14": - version "8.3.14" - resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-8.3.14.tgz#ce1df037d0c6a2e3c84fb1796c4b679e253a7cca" - integrity sha512-cOP2UvnnYocx1U1aiNkuLCcBxSktIXkadzrY7UlWJtQiCPGWm3Y87BfrQXub9Nsh79iyV8k8uKZKEax2ayESSg== +"@angular/cli@~9.1.12": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-9.1.12.tgz#c6e41c80c387200766fc52a6b42fde869dcc0cef" + integrity sha512-B0yOab5WbD84bIRRUKOPAJnpka8Qj+CRt61wJfjsqpd/Rj7pD/3ubmdCNoBH7Xa6UlOb0tdYqRPsqfK7uEL0sw== dependencies: - "@angular-devkit/architect" "0.803.14" - "@angular-devkit/core" "8.3.14" - "@angular-devkit/schematics" "8.3.14" - "@schematics/angular" "8.3.14" - "@schematics/update" "0.803.14" + "@angular-devkit/architect" "0.901.12" + "@angular-devkit/core" "9.1.12" + "@angular-devkit/schematics" "9.1.12" + "@schematics/angular" "9.1.12" + "@schematics/update" "0.901.12" "@yarnpkg/lockfile" "1.1.0" ansi-colors "4.1.1" - debug "^4.1.1" + debug "4.1.1" ini "1.3.5" - inquirer "6.5.1" - npm-package-arg "6.1.0" - npm-pick-manifest "3.0.2" - open "6.4.0" - pacote "9.5.5" + inquirer "7.1.0" + npm-package-arg "8.0.1" + npm-pick-manifest "6.0.0" + open "7.0.3" + pacote "9.5.12" read-package-tree "5.3.1" - rimraf "3.0.0" - semver "6.3.0" + rimraf "3.0.2" + semver "7.1.3" symbol-observable "1.2.0" - universal-analytics "^0.4.20" - uuid "^3.3.2" + universal-analytics "0.4.20" + uuid "7.0.2" -"@angular/common@~8.2.11": - version "8.2.12" - resolved "https://registry.yarnpkg.com/@angular/common/-/common-8.2.12.tgz#9ec0ed1cc68128013f65167e175b9101b1c2bd9f" - integrity sha512-BNz1lo+PP+lwIX3sErRGBRnkMzT5yT8CJ5o/M29AanCdcx9dpoJG2WKgpIgw8UBcj9QlP0CkSmzPtUNtcNMthA== - dependencies: - tslib "^1.9.0" +"@angular/common@~9.1.12": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/common/-/common-9.1.12.tgz#731701fae63ae8e2ee2ce00e7d51f458ecd00c7c" + integrity sha512-XSIqkbM6VV1yixF9zuzeE5eqN1VsiXS517K2VU0XgCRSAzhVhLOeKsdYjeLf7PdSu/HgW/Tr81H+isi9A9I0YA== -"@angular/compiler-cli@~8.2.11": - version "8.2.12" - resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-8.2.12.tgz#4949d9252b5fc2fe93426b5f3e208203c4d5a1f7" - integrity sha512-OrNnkJ7OrpbcOtB4TWFBF6D3dtEfUuOQgfc3HBjizZuL8EuX0pU5dv4VTvLTRkmyUT/7fmmWdkEXJL+UQtXqPg== +"@angular/compiler-cli@~9.1.12": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-9.1.12.tgz#37ba1a8b483ab1382414d0a13a35a1fd2020abd1" + integrity sha512-bbqJ+fbY+aQejSYuHUjE1qYJCXkZBM5Hru9eN7m/j376u83MQ5jWdC290uYx+ipsXcPTa/YRZ44jpL+5cCzIrg== dependencies: canonical-path "1.0.0" - chokidar "^2.1.1" + chokidar "^3.0.0" convert-source-map "^1.5.1" dependency-graph "^0.7.2" + fs-extra "4.0.2" magic-string "^0.25.0" minimist "^1.2.0" reflect-metadata "^0.1.2" + semver "^6.3.0" source-map "^0.6.1" - tslib "^1.9.0" - yargs "13.1.0" - -"@angular/compiler@~8.2.11": - version "8.2.12" - resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-8.2.12.tgz#da843cd0d1ff79ec8a8ad007f2c374102840decf" - integrity sha512-V5mDWioGmSZ4cJJ2THo8qHYKwj3sUI7dpJ0oab2Al0FQAN8JCimWO6AQKRtjmnr78ZkMy9Xe/KK6ebl40ewL5Q== - dependencies: - tslib "^1.9.0" - -"@angular/core@~8.2.11": - version "8.2.12" - resolved "https://registry.yarnpkg.com/@angular/core/-/core-8.2.12.tgz#faef656cfa3b0bf4c1579d1498034045981c791a" - integrity sha512-wEFwhHCuuXynXAMeA1G+0KIYY0jqXYs7I8p+GO+ufKoUmzWHFTvtMJ6nvKgy+LmZTByO2gf9oVAAlRodNb8ttQ== - dependencies: - tslib "^1.9.0" - -"@angular/forms@~8.2.11": - version "8.2.12" - resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-8.2.12.tgz#0a113034075c64311b4c7294b6b51a07b8359e64" - integrity sha512-y1UObndCGbTYwLSzUWzCiX7th+mb4n712asApooGmfmIQmgTyHbKxYUJ9Ep1pgd0pqLBBnK249MQLH15NDpbyQ== - dependencies: - tslib "^1.9.0" - -"@angular/language-service@~8.2.11": - version "8.2.12" - resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-8.2.12.tgz#30f36fa763a5d1736ed5825243237469e9fb9aa8" - integrity sha512-uXGVSC4ugkyBt7pYdI8qaKNV0TIxfjSWb3dWNuhD6b9riPtaa+xJFQrfMu7OX/tVX642aFxca4jkUHBLCyWptA== - -"@angular/platform-browser-dynamic@~8.2.11": - version "8.2.12" - resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-8.2.12.tgz#b1b5f7cd1832686ece45692b094d9d1386bd2313" - integrity sha512-O4krb+9tj028JOQHPgLk/87lyUlHt8dpNxzuYCT0G6kEmknjpyZBaxhvDPygGjGHXV3LDqlYVH+bh8ygJUhwmw== - dependencies: - tslib "^1.9.0" - -"@angular/platform-browser@~8.2.11": - version "8.2.12" - resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-8.2.12.tgz#884c37bcc5b84778096cb30fab576549ef695dc5" - integrity sha512-VBvMjmFJapZ2pFlmxZiHtfPwbHp79RRi5mrdMhETjKMaLaC2tAR/99ijCpx2urDMqb/VDm7YHOtoLEpBFVDulg== - dependencies: - tslib "^1.9.0" - -"@angular/pwa@^0.803.5": - version "0.803.14" - resolved "https://registry.yarnpkg.com/@angular/pwa/-/pwa-0.803.14.tgz#f6c582497bbf572348e442e808908e008e25b94a" - integrity sha512-2QzbsWmS28vXPOQNFaTldl9WUuQW6QmY2v+ftSEsUGrUyoM6zzQjiYoJUKK5J+8I7M8CL6yaODhkZKOAs0Rpdg== - dependencies: - "@angular-devkit/core" "8.3.14" - "@angular-devkit/schematics" "8.3.14" - "@schematics/angular" "8.3.14" - parse5-html-rewriting-stream "5.1.0" - -"@angular/router@~8.2.11": - version "8.2.12" - resolved "https://registry.yarnpkg.com/@angular/router/-/router-8.2.12.tgz#292866fa8094b110f0c077d7d2974d4ba958dfcb" - integrity sha512-mq1FethFpYosSVzChstMpxZlL+oUFeaA+FrzZQL7zJP/mm61yFkkhoYGVG6pG0NWSzpJE4NY6YvGCvHgN4ZECw== - dependencies: - tslib "^1.9.0" - -"@angular/service-worker@~8.2.11": - version "8.2.12" - resolved "https://registry.yarnpkg.com/@angular/service-worker/-/service-worker-8.2.12.tgz#700ba622ad86222d2f5dcdcd5fb2bf761585ee0b" - integrity sha512-HsBJZmgTt4g/gyFKTXkVzr1VFl8fOgnRqsGO2BZ2CN6JfUDYPDF54hjrOfPOSN/PmMt9Hos0ECf30WKayl7keA== - dependencies: - tslib "^1.9.0" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" - integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== - dependencies: - "@babel/highlight" "^7.0.0" - -"@babel/core@7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.5.tgz#17b2686ef0d6bc58f963dddd68ab669755582c30" - integrity sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.5.5" - "@babel/helpers" "^7.5.5" - "@babel/parser" "^7.5.5" - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.5.5" - "@babel/types" "^7.5.5" - convert-source-map "^1.1.0" + sourcemap-codec "^1.4.8" + yargs "15.3.0" + +"@angular/compiler@~9.1.12": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-9.1.12.tgz#3066a637bfe09642dd5c4a4dd029e7a771988311" + integrity sha512-suefk0OFkaJpUUKnV+phbL4T8fmVGHvzkereY5eqybQlumOez8NPL1PJcygAylh/E6OIAYm8SWookYwM6ZY9dg== + +"@angular/core@~9.1.12": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-9.1.12.tgz#e7e10f72f84f0787551424ad86279436e0b5edbe" + integrity sha512-WVA/eh3fzjx0apOzkKot4YRRUsGkHj50zFQWrAOMgivGaj1YVrvhf+m3hpglj5fn/BkLiFDl8RT0wAE8z9X+gQ== + +"@angular/forms@~9.1.12": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-9.1.12.tgz#8ae7ac480031e1e4097eeff9b45f5e6d2cce6b7c" + integrity sha512-LhjnZlC4WEsEsAJfOZLte+Lks3WBAFVeRv2lzoQNFVr/IMzBNDVfjEaaSqKF1cei3cjY39Df2nYDMJM7HfqbJA== + +"@angular/localize@^9.1.9", "@angular/localize@~9.1.12": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-9.1.12.tgz#60377a644c620be4ac408b77db9c547f44ac1514" + integrity sha512-31OalfES+dLrxN0VXCxxtT5dWoOSlQ40KYmzMS8X+mQ20gy9eFiZK4qf3DEq3JPqRltBMdEDnwR38uGIMAu2gQ== + dependencies: + "@babel/core" "7.8.3" + glob "7.1.2" + yargs "15.3.0" + +"@angular/platform-browser-dynamic@~9.1.12": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-9.1.12.tgz#332935d5ec4b44daaad1beae496dd994e2847a03" + integrity sha512-NmwUZaQeMnA6f+vP9Fp9P+qjL72H8dKlxLS76ujlKHVf75pP5oahWS8wfl7KXel1tKW3FQWMMffmKf5/NHRiSw== + +"@angular/platform-browser@~9.1.12": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-9.1.12.tgz#f99fc360c40efd013677cc9ef4ead13425084a91" + integrity sha512-rPa/hJcLfdId6bYB0b6pFUo3QIgjZlvUlmtKMGdrLNLYR8XQxPa2Y/UdN/5YeZ12htGw6GXrX9U8U7nTbUSpkw== + +"@angular/platform-server@~9.1.12": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/platform-server/-/platform-server-9.1.12.tgz#cd7f92f0e44d90cb82b653a841a7cd16727d07ed" + integrity sha512-pNczGCl8Cux1jGyW/dvzzru4QsObWCN46Y7s5Giq7waXlHr3gP2vx+tlYzk2LcjDzfgsl53i5fXk2yS6S+90Og== + dependencies: + domino "^2.1.2" + xhr2 "^0.2.0" + +"@angular/pwa@^0.901.7": + version "0.901.12" + resolved "https://registry.yarnpkg.com/@angular/pwa/-/pwa-0.901.12.tgz#86c8bc89e718db220e8ca624f1665495198662b2" + integrity sha512-EXiZfH6zac+EIfJ2o8f3+W0Vy30F1qtr1gl9omVw5tWRiOx9zrFAX9nuo9Cz31xBR+XkyQtcy/1iBMRP1a3fxg== + dependencies: + "@angular-devkit/core" "9.1.12" + "@angular-devkit/schematics" "9.1.12" + "@schematics/angular" "9.1.12" + parse5-html-rewriting-stream "5.1.1" + +"@angular/router@~9.1.12": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/router/-/router-9.1.12.tgz#4f7fc170e1e7ef72ca1714dbc7a3888aedc33f2d" + integrity sha512-+qCaXa9y0nsRhzjAYBqmGoQ2YkrdXgftZwuFDf6t4qEi30EXa0oS97KrlFq0M5GKdLIDGrbUm9PcdHSTOI+ZhA== + +"@angular/service-worker@~9.1.12": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/service-worker/-/service-worker-9.1.12.tgz#2e339ec95012ebec668b40d54319344afa5e50f2" + integrity sha512-UsmhPfhIYq9LanuFT6V7Kmkr5Vjl2CMjKkL1gqhChkywNW4vavAYsBkuVji8P76ZKliq41TCG01z6xIAWji8QA== + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/compat-data@^7.12.5", "@babel/compat-data@^7.9.0": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.7.tgz#9329b4782a7d6bbd7eef57e11addf91ee3ef1e41" + integrity sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw== + +"@babel/core@7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.3.tgz#30b0ebb4dd1585de6923a0b4d179e0b9f5d82941" + integrity sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.8.3" + "@babel/helpers" "^7.8.3" + "@babel/parser" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + convert-source-map "^1.7.0" debug "^4.1.0" + gensync "^1.0.0-beta.1" json5 "^2.1.0" lodash "^4.17.13" resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.4.0", "@babel/generator@^7.5.5", "@babel/generator@^7.6.3": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.4.tgz#a4f8437287bf9671b07f483b76e3bb731bc97671" - integrity sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w== - dependencies: - "@babel/types" "^7.6.3" - jsesc "^2.5.1" +"@babel/core@7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" + integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.9.0" + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helpers" "^7.9.0" + "@babel/parser" "^7.9.0" + "@babel/template" "^7.8.6" + "@babel/traverse" "^7.9.0" + "@babel/types" "^7.9.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" - integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q== - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" - integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-call-delegate@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43" - integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ== - dependencies: - "@babel/helper-hoist-variables" "^7.4.4" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" +"@babel/core@^7.7.5": + version "7.12.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" + integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.7" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.9" + "@babel/types" "^7.12.7" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" -"@babel/helper-define-map@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz#3dec32c2046f37e09b28c93eb0b103fd2a25d369" - integrity sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg== +"@babel/generator@7.9.3": + version "7.9.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.3.tgz#7c8b2956c6f68b3ab732bd16305916fbba521d94" + integrity sha512-RpxM252EYsz9qLUIq6F7YJyK1sv0wWDBFuztfDGWaQKzHjqDHysxSiRUpA/X9jmfqo+WzkAVKFaUily5h+gDCQ== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/types" "^7.5.5" + "@babel/types" "^7.9.0" + jsesc "^2.5.1" lodash "^4.17.13" + source-map "^0.5.0" -"@babel/helper-explode-assignable-expression@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" - integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA== - dependencies: - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-function-name@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" - integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== +"@babel/generator@^7.12.5", "@babel/generator@^7.4.0", "@babel/generator@^7.8.3", "@babel/generator@^7.9.0": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.5.tgz#a2c50de5c8b6d708ab95be5e6053936c1884a4de" + integrity sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A== dependencies: - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/types" "^7.12.5" + jsesc "^2.5.1" + source-map "^0.5.0" -"@babel/helper-get-function-arity@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" - integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== +"@babel/helper-annotate-as-pure@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" + integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.10.4" -"@babel/helper-hoist-variables@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" - integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" + integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== dependencies: - "@babel/types" "^7.4.4" + "@babel/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" -"@babel/helper-member-expression-to-functions@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz#1fb5b8ec4453a93c439ee9fe3aeea4a84b76b590" - integrity sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA== +"@babel/helper-compilation-targets@^7.8.7": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz#cb470c76198db6a24e9dbc8987275631e5d29831" + integrity sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw== dependencies: - "@babel/types" "^7.5.5" + "@babel/compat-data" "^7.12.5" + "@babel/helper-validator-option" "^7.12.1" + browserslist "^4.14.5" + semver "^5.5.0" -"@babel/helper-module-imports@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" - integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A== +"@babel/helper-create-regexp-features-plugin@^7.12.1": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz#2084172e95443fa0a09214ba1bb328f9aea1278f" + integrity sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + regexpu-core "^4.7.1" + +"@babel/helper-define-map@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" + integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/types" "^7.10.5" + lodash "^4.17.19" + +"@babel/helper-explode-assignable-expression@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz#8006a466695c4ad86a2a5f2fb15b5f2c31ad5633" + integrity sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA== dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a" - integrity sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw== + "@babel/types" "^7.12.1" + +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/template" "^7.4.4" - "@babel/types" "^7.5.5" - lodash "^4.17.13" + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" -"@babel/helper-optimise-call-expression@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" - integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.10.4" + +"@babel/helper-hoist-variables@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" + integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.12.1": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" + integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== + dependencies: + "@babel/types" "^7.12.7" + +"@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.8.3": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" + integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== + dependencies: + "@babel/types" "^7.12.5" + +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.9.0": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" + integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-simple-access" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/helper-validator-identifier" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + lodash "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz#7f94ae5e08721a49467346aa04fd22f750033b9c" + integrity sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw== + dependencies: + "@babel/types" "^7.12.7" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-remap-async-to-generator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz#8c4dbbf916314f6047dc05e6a2217074238347fd" + integrity sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/types" "^7.12.1" + +"@babel/helper-replace-supers@^7.12.1": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz#f009a17543bbbbce16b06206ae73b63d3fca68d9" + integrity sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.12.1" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + +"@babel/helper-simple-access@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" + integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" + integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" + integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/helper-validator-option@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9" + integrity sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A== + +"@babel/helper-wrap-function@^7.10.4": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz#3332339fc4d1fbbf1c27d7958c27d34708e990d9" + integrity sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helpers@^7.12.5", "@babel/helpers@^7.8.3", "@babel/helpers@^7.9.0": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" + integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" -"@babel/helper-plugin-utils@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" - integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== +"@babel/parser@^7.12.7", "@babel/parser@^7.4.3", "@babel/parser@^7.8.3", "@babel/parser@^7.8.6", "@babel/parser@^7.9.0": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.7.tgz#fee7b39fe809d0e73e5b25eecaf5780ef3d73056" + integrity sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg== -"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351" - integrity sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw== +"@babel/plugin-proposal-async-generator-functions@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz#dc6c1170e27d8aca99ff65f4925bd06b1c90550e" + integrity sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A== dependencies: - lodash "^4.17.13" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" -"@babel/helper-remap-async-to-generator@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" - integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-wrap-function" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-replace-supers@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz#f84ce43df031222d2bad068d2626cb5799c34bc2" - integrity sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.5.5" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.5.5" - "@babel/types" "^7.5.5" - -"@babel/helper-simple-access@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" - integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w== +"@babel/plugin-proposal-dynamic-import@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz#43eb5c2a3487ecd98c5c8ea8b5fdb69a2749b2dc" + integrity sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ== dependencies: - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" -"@babel/helper-split-export-declaration@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" - integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== +"@babel/plugin-proposal-json-strings@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz#d45423b517714eedd5621a9dfdc03fa9f4eb241c" + integrity sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw== dependencies: - "@babel/types" "^7.4.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.0" -"@babel/helper-wrap-function@^7.1.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" - integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" + integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.2.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@babel/helpers@^7.5.5": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.2.tgz#681ffe489ea4dcc55f23ce469e58e59c1c045153" - integrity sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA== +"@babel/plugin-proposal-numeric-separator@^7.8.3": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz#8bf253de8139099fea193b297d23a9d406ef056b" + integrity sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ== dependencies: - "@babel/template" "^7.6.0" - "@babel/traverse" "^7.6.2" - "@babel/types" "^7.6.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/highlight@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" - integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== +"@babel/plugin-proposal-object-rest-spread@^7.9.0": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" + integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^4.0.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.12.1" -"@babel/parser@^7.4.3", "@babel/parser@^7.5.5", "@babel/parser@^7.6.0", "@babel/parser@^7.6.3": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.4.tgz#cb9b36a7482110282d5cb6dd424ec9262b473d81" - integrity sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A== +"@babel/plugin-proposal-optional-catch-binding@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942" + integrity sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-async-generator-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" - integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ== +"@babel/plugin-proposal-optional-chaining@^7.9.0": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz#e02f0ea1b5dc59d401ec16fb824679f683d3303c" + integrity sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-proposal-dynamic-import@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz#e532202db4838723691b10a67b8ce509e397c506" - integrity sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw== +"@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz#2a183958d417765b9eae334f47758e5d6a82e072" + integrity sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" - integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg== +"@babel/plugin-syntax-async-generators@^7.8.0": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-proposal-object-rest-spread@^7.5.5": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz#8ffccc8f3a6545e9f78988b6bf4fe881b88e8096" - integrity sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw== +"@babel/plugin-syntax-dynamic-import@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-proposal-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" - integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g== +"@babel/plugin-syntax-json-strings@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.6.2.tgz#05413762894f41bfe42b9a5e80919bd575dcc802" - integrity sha512-NxHETdmpeSCtiatMRYWVJo7266rrvAC3DTeG5exQBIH/fMIUK7ejDNznBbn3HQl/o9peymRRg7Yqkx6PdUXmMw== +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.6.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-async-generators@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" - integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg== +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.0": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-dynamic-import@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" - integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== +"@babel/plugin-syntax-object-rest-spread@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" - integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg== +"@babel/plugin-syntax-optional-catch-binding@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-object-rest-spread@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" - integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== +"@babel/plugin-syntax-optional-chaining@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" - integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w== +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" + integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-arrow-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" - integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== +"@babel/plugin-transform-arrow-functions@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz#8083ffc86ac8e777fbe24b5967c4b2521f3cb2b3" + integrity sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-async-to-generator@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz#89a3848a0166623b5bc481164b5936ab947e887e" - integrity sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg== +"@babel/plugin-transform-async-to-generator@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz#3849a49cc2a22e9743cbd6b52926d30337229af1" + integrity sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A== dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" -"@babel/plugin-transform-block-scoped-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" - integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w== +"@babel/plugin-transform-block-scoped-functions@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz#f2a1a365bde2b7112e0a6ded9067fdd7c07905d9" + integrity sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-block-scoping@^7.5.5": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.3.tgz#6e854e51fbbaa84351b15d4ddafe342f3a5d542a" - integrity sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw== +"@babel/plugin-transform-block-scoping@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz#f0ee727874b42a208a48a586b84c3d222c2bbef1" + integrity sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - lodash "^4.17.13" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-classes@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz#d094299d9bd680a14a2a0edae38305ad60fb4de9" - integrity sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg== +"@babel/plugin-transform-classes@^7.9.0": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz#65e650fcaddd3d88ddce67c0f834a3d436a32db6" + integrity sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.5.5" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" - "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-define-map" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.10.4" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" - integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== +"@babel/plugin-transform-computed-properties@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz#d68cf6c9b7f838a8a4144badbe97541ea0904852" + integrity sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-destructuring@^7.5.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6" - integrity sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ== +"@babel/plugin-transform-destructuring@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz#b9a570fe0d0a8d460116413cb4f97e8e08b2f847" + integrity sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.6.2.tgz#44abb948b88f0199a627024e1508acaf8dc9b2f9" - integrity sha512-KGKT9aqKV+9YMZSkowzYoYEiHqgaDhGmPNZlZxX6UeHC4z30nC1J9IrZuGqbYFB1jaIGdv91ujpze0exiVK8bA== +"@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz#a1d16c14862817b6409c0a678d6f9373ca9cd975" + integrity sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.6.0" + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-duplicate-keys@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz#c5dbf5106bf84cdf691222c0974c12b1df931853" - integrity sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ== +"@babel/plugin-transform-duplicate-keys@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz#745661baba295ac06e686822797a69fbaa2ca228" + integrity sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-exponentiation-operator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" - integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A== +"@babel/plugin-transform-exponentiation-operator@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz#b0f2ed356ba1be1428ecaf128ff8a24f02830ae0" + integrity sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-for-of@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" - integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== +"@babel/plugin-transform-for-of@^7.9.0": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz#07640f28867ed16f9511c99c888291f560921cfa" + integrity sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-function-name@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad" - integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA== +"@babel/plugin-transform-function-name@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz#2ec76258c70fe08c6d7da154003a480620eba667" + integrity sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" - integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== +"@babel/plugin-transform-literals@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz#d73b803a26b37017ddf9d3bb8f4dc58bfb806f57" + integrity sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d" - integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA== +"@babel/plugin-transform-member-expression-literals@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz#496038602daf1514a64d43d8e17cbb2755e0c3ad" + integrity sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-modules-amd@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz#ef00435d46da0a5961aa728a1d2ecff063e4fb91" - integrity sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg== +"@babel/plugin-transform-modules-amd@^7.9.0": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz#3154300b026185666eebb0c0ed7f8415fefcf6f9" + integrity sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ== dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.5.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz#39dfe957de4420445f1fcf88b68a2e4aa4515486" - integrity sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g== +"@babel/plugin-transform-modules-commonjs@^7.9.0": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz#fa403124542636c786cf9b460a0ffbb48a86e648" + integrity sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag== dependencies: - "@babel/helper-module-transforms" "^7.4.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.12.1" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz#e75266a13ef94202db2a0620977756f51d52d249" - integrity sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg== +"@babel/plugin-transform-modules-systemjs@^7.9.0": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz#663fea620d593c93f214a464cd399bf6dc683086" + integrity sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q== dependencies: - "@babel/helper-hoist-variables" "^7.4.4" - "@babel/helper-plugin-utils" "^7.0.0" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-identifier" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" - integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw== +"@babel/plugin-transform-modules-umd@^7.9.0": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz#eb5a218d6b1c68f3d6217b8fa2cc82fec6547902" + integrity sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q== dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-named-capturing-groups-regex@^7.4.5": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.3.tgz#aaa6e409dd4fb2e50b6e2a91f7e3a3149dbce0cf" - integrity sha512-jTkk7/uE6H2s5w6VlMHeWuH+Pcy2lmdwFoeWCVnvIrDUnB5gQqTVI8WfmEAhF2CDEarGrknZcmSFg1+bkfCoSw== +"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz#b407f5c96be0d9f5f88467497fa82b30ac3e8753" + integrity sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q== dependencies: - regexpu-core "^4.6.0" + "@babel/helper-create-regexp-features-plugin" "^7.12.1" -"@babel/plugin-transform-new-target@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5" - integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-new-target@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz#80073f02ee1bb2d365c3416490e085c95759dec0" + integrity sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-object-super@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz#4ea08696b8d2e65841d0c7706482b048bed1066e" + integrity sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.8.7": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d" + integrity sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-property-literals@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd" + integrity sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-regenerator@^7.8.7": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz#5f0a28d842f6462281f06a964e88ba8d7ab49753" + integrity sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz#6fdfc8cc7edcc42b36a7c12188c6787c873adcd8" + integrity sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-shorthand-properties@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz#0bf9cac5550fce0cfdf043420f661d645fdc75e3" + integrity sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-spread@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz#527f9f311be4ec7fdc2b79bb89f7bf884b3e1e1e" + integrity sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + +"@babel/plugin-transform-sticky-regex@^7.8.3": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz#560224613ab23987453948ed21d0b0b193fa7fad" + integrity sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-template-literals@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz#b43ece6ed9a79c0c71119f576d299ef09d942843" + integrity sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typeof-symbol@^7.8.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz#9ca6be343d42512fbc2e68236a82ae64bc7af78a" + integrity sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz#cc9661f61390db5c65e3febaccefd5c6ac3faecb" + integrity sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/preset-env@7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.0.tgz#a5fc42480e950ae8f5d9f8f2bbc03f52722df3a8" + integrity sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ== + dependencies: + "@babel/compat-data" "^7.9.0" + "@babel/helper-compilation-targets" "^7.8.7" + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-proposal-async-generator-functions" "^7.8.3" + "@babel/plugin-proposal-dynamic-import" "^7.8.3" + "@babel/plugin-proposal-json-strings" "^7.8.3" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-proposal-numeric-separator" "^7.8.3" + "@babel/plugin-proposal-object-rest-spread" "^7.9.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" + "@babel/plugin-proposal-optional-chaining" "^7.9.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.8.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + "@babel/plugin-transform-arrow-functions" "^7.8.3" + "@babel/plugin-transform-async-to-generator" "^7.8.3" + "@babel/plugin-transform-block-scoped-functions" "^7.8.3" + "@babel/plugin-transform-block-scoping" "^7.8.3" + "@babel/plugin-transform-classes" "^7.9.0" + "@babel/plugin-transform-computed-properties" "^7.8.3" + "@babel/plugin-transform-destructuring" "^7.8.3" + "@babel/plugin-transform-dotall-regex" "^7.8.3" + "@babel/plugin-transform-duplicate-keys" "^7.8.3" + "@babel/plugin-transform-exponentiation-operator" "^7.8.3" + "@babel/plugin-transform-for-of" "^7.9.0" + "@babel/plugin-transform-function-name" "^7.8.3" + "@babel/plugin-transform-literals" "^7.8.3" + "@babel/plugin-transform-member-expression-literals" "^7.8.3" + "@babel/plugin-transform-modules-amd" "^7.9.0" + "@babel/plugin-transform-modules-commonjs" "^7.9.0" + "@babel/plugin-transform-modules-systemjs" "^7.9.0" + "@babel/plugin-transform-modules-umd" "^7.9.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" + "@babel/plugin-transform-new-target" "^7.8.3" + "@babel/plugin-transform-object-super" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.8.7" + "@babel/plugin-transform-property-literals" "^7.8.3" + "@babel/plugin-transform-regenerator" "^7.8.7" + "@babel/plugin-transform-reserved-words" "^7.8.3" + "@babel/plugin-transform-shorthand-properties" "^7.8.3" + "@babel/plugin-transform-spread" "^7.8.3" + "@babel/plugin-transform-sticky-regex" "^7.8.3" + "@babel/plugin-transform-template-literals" "^7.8.3" + "@babel/plugin-transform-typeof-symbol" "^7.8.4" + "@babel/plugin-transform-unicode-regex" "^7.8.3" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.9.0" + browserslist "^4.9.1" + core-js-compat "^3.6.2" + invariant "^2.2.2" + levenary "^1.1.1" + semver "^5.5.0" -"@babel/plugin-transform-object-super@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz#c70021df834073c65eb613b8679cc4a381d1a9f9" - integrity sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ== +"@babel/preset-modules@^0.1.3": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" -"@babel/plugin-transform-parameters@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" - integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== - dependencies: - "@babel/helper-call-delegate" "^7.4.4" - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" +"@babel/runtime@^7.12.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" + integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" + integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/parser" "^7.8.6" + "@babel/types" "^7.8.6" + +"@babel/template@^7.10.4", "@babel/template@^7.12.7", "@babel/template@^7.4.0", "@babel/template@^7.8.3", "@babel/template@^7.8.6": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" + integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.12.7" + "@babel/types" "^7.12.7" + +"@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.9", "@babel/traverse@^7.4.3", "@babel/traverse@^7.8.3", "@babel/traverse@^7.9.0": + version "7.12.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.9.tgz#fad26c972eabbc11350e0b695978de6cc8e8596f" + integrity sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.12.7" + "@babel/types" "^7.12.7" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" -"@babel/plugin-transform-property-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905" - integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ== +"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.7.tgz#6039ff1e242640a29452c9ae572162ec9a8f5d13" + integrity sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" -"@babel/plugin-transform-regenerator@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f" - integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA== - dependencies: - regenerator-transform "^0.14.0" +"@istanbuljs/schema@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" + integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== -"@babel/plugin-transform-reserved-words@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634" - integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw== +"@jsdevtools/coverage-istanbul-loader@3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.3.tgz#102e414b02ae2f0b3c7fd45a705601e1fd4867c5" + integrity sha512-TAdNkeGB5Fe4Og+ZkAr1Kvn9by2sfL44IAHFtxlh1BA1XJ5cLpO9iSNki5opWESv3l3vSHsZ9BNKuqFKbEbFaA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + convert-source-map "^1.7.0" + istanbul-lib-instrument "^4.0.1" + loader-utils "^1.4.0" + merge-source-map "^1.1.0" + schema-utils "^2.6.4" -"@babel/plugin-transform-shorthand-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" - integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" +"@ng-bootstrap/ng-bootstrap@^6.0.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-6.2.0.tgz#0506d612ca6002bd8fa398d006fa2641013e11d4" + integrity sha512-wqwhnJFyEwvzWQJjXrEt+7oBTSvu2qPbdYvUFYhDVzOJLWB5M7YEhDAkMrfHQJ0pZNBMGr580FqYue+XiURY0Q== -"@babel/plugin-transform-spread@^7.2.0": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz#fc77cf798b24b10c46e1b51b1b88c2bf661bb8dd" - integrity sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" +"@ng-select/ng-select@^4.0.0": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@ng-select/ng-select/-/ng-select-4.0.4.tgz#fe4ba82f4ab6110627fefb072e81bfb3eb79fafb" + integrity sha512-KaVlVdt7DWZBfmL6nc16i80l1dDx0cO3eGjW+grQPnhZ9KurapioQUYVf6dSmYyWyBXihvt4I3SWkCzqSWFJbQ== + dependencies: + tslib "^1.10.0" + +"@ngrx/effects@~9.1.0": + version "9.1.2" + resolved "https://registry.yarnpkg.com/@ngrx/effects/-/effects-9.1.2.tgz#9d81f05b6ba3eb42a911d20f35d2112af3adbfd8" + integrity sha512-H9jbGUzP5izk9Ap8BQJicO1+xheyDyHBbvv6b1NkaRHpDizhPOSBjoFWExFfsejXo0dafaIsu6aI+y+Fp+LSsg== + +"@ngrx/router-store@~9.1.0": + version "9.1.2" + resolved "https://registry.yarnpkg.com/@ngrx/router-store/-/router-store-9.1.2.tgz#4433c951c7090fa0705e6b69a5d1d25a04134508" + integrity sha512-zqAm7fOdJ34dY2Tlts2YV9MDcDP2CqB+hLEytjo/bOIkUo/lQA1R5VAUI+Z8+tUlmPqSVIJkzsGuCxO6XnLEjQ== + +"@ngrx/store@~9.1.0": + version "9.1.2" + resolved "https://registry.yarnpkg.com/@ngrx/store/-/store-9.1.2.tgz#cc443d08d53440cafd669048a974b05456e95070" + integrity sha512-FQXFonF8hSGJDqgLaoWHy2mkeJwVdoa3jLoT1YpkJWxsFMG4U0T6JYG4VrtuymDgo9XwWBBJqIiNpdTgHhofSQ== + +"@ngtools/webpack@9.1.12": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-9.1.12.tgz#a6e2feb40db442335a1c79af4044d399767b5e81" + integrity sha512-lypMXIq5oxBMsoDu/VOa1yUmmXthhxkCJa8LG0ZohfnbwhmZvz3SAW7omBGuVrb5cVIfLCkaRCSnQ1MNc6ULXw== + dependencies: + "@angular-devkit/core" "9.1.12" + enhanced-resolve "4.1.1" + rxjs "6.5.4" + webpack-sources "1.4.3" -"@babel/plugin-transform-sticky-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" - integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw== +"@nguniversal/builders@^9.1.1": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@nguniversal/builders/-/builders-9.1.1.tgz#5f741bf6b9922e13495d3c8c4f1846c24452f7cf" + integrity sha512-vQ52GDdu1P1miHUCYikkWh4Q6Pu/l/l5OgyGIMBrJLxEv920RN/Vn0HK5rR0QrE3EGoNun/y+g/TUevZoBlOUA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" + "@angular-devkit/architect" "^0.901.0" + "@angular-devkit/core" "^9.1.0" + browser-sync "^2.26.7" + guess-parser "^0.4.12" + http-proxy-middleware "^1.0.0" + rxjs "^6.5.3" + tree-kill "^1.2.1" -"@babel/plugin-transform-template-literals@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" - integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" +"@nguniversal/common@9.1.1": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@nguniversal/common/-/common-9.1.1.tgz#d745856e680ebce0da460edbafe0b11e305785a2" + integrity sha512-stYQzea9jhbs8XJDZEGcdHRVBrUp4wE3KMVufQNnQMbW/R+JpakGP6XBfPY3NLmqs/xJpVUIcIl3/6l5XxpR5A== -"@babel/plugin-transform-typeof-symbol@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" - integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw== +"@nguniversal/express-engine@^9.1.1": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@nguniversal/express-engine/-/express-engine-9.1.1.tgz#63444e7e13a136a76a73bffa8d746361155c749f" + integrity sha512-K/4cY+mJgJu65HYyFz5L4wrUqtkYqsg/itXOWhPCeuzhBCVpJQntXq2z07sxM+Jl5EIbCi3jGa5wnm/17uti4w== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@nguniversal/common" "9.1.1" -"@babel/plugin-transform-unicode-regex@^7.4.4": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.6.2.tgz#b692aad888a7e8d8b1b214be6b9dc03d5031f698" - integrity sha512-orZI6cWlR3nk2YmYdb0gImrgCUwb5cBUwjf6Ks6dvNVvXERkwtJWOQaEOjPiu0Gu1Tq6Yq/hruCZZOOi9F34Dw== +"@nodelib/fs.scandir@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" + integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.6.0" + "@nodelib/fs.stat" "2.0.3" + run-parallel "^1.1.9" -"@babel/preset-env@7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.5.5.tgz#bc470b53acaa48df4b8db24a570d6da1fef53c9a" - integrity sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.2.0" - "@babel/plugin-proposal-dynamic-import" "^7.5.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.5.5" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.5.0" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.5.5" - "@babel/plugin-transform-classes" "^7.5.5" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.5.0" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/plugin-transform-duplicate-keys" "^7.5.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.4.4" - "@babel/plugin-transform-function-name" "^7.4.4" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-member-expression-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.5.0" - "@babel/plugin-transform-modules-commonjs" "^7.5.0" - "@babel/plugin-transform-modules-systemjs" "^7.5.0" - "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.5" - "@babel/plugin-transform-new-target" "^7.4.4" - "@babel/plugin-transform-object-super" "^7.5.5" - "@babel/plugin-transform-parameters" "^7.4.4" - "@babel/plugin-transform-property-literals" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.4.5" - "@babel/plugin-transform-reserved-words" "^7.2.0" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.2.0" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.4.4" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.4.4" - "@babel/types" "^7.5.5" - browserslist "^4.6.0" - core-js-compat "^3.1.1" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.5.0" +"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" + integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== -"@babel/runtime@^7.3.1": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.3.tgz#935122c74c73d2240cafd32ddb5fc2a6cd35cf1f" - integrity sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA== +"@nodelib/fs.walk@^1.2.3": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" + integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== dependencies: - regenerator-runtime "^0.13.2" + "@nodelib/fs.scandir" "2.1.3" + fastq "^1.6.0" -"@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6" - integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ== +"@npmcli/move-file@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.0.1.tgz#de103070dac0f48ce49cf6693c23af59c0f70464" + integrity sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw== dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.6.0" - "@babel/types" "^7.6.0" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.2": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.3.tgz#66d7dba146b086703c0fb10dd588b7364cec47f9" - integrity sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.6.3" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.6.3" - "@babel/types" "^7.6.3" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" + mkdirp "^1.0.4" -"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0", "@babel/types@^7.6.3": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.3.tgz#3f07d96f854f98e2fbd45c64b0cb942d11e8ba09" - integrity sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA== - dependencies: - esutils "^2.0.2" - lodash "^4.17.13" - to-fast-properties "^2.0.0" +"@scarf/scarf@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@scarf/scarf/-/scarf-0.1.5.tgz#fc4cc88294eca336eed9a91549180346de5e6946" + integrity sha512-Fx6atDc7JM1r0WkPCDhNetVZNp+DO21q/HGlomAKBG+k8vb1B8fg8Yige4oCf1P9OWTZWm5tM5i3jlXhrSbNOg== -"@ng-bootstrap/ng-bootstrap@^4.1.0": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-4.2.2.tgz#a1c3a9576656cb4f793bbc3df56dfbdeb098f2fb" - integrity sha512-v8QmC17bv9he5Ep6zutaI9aQ2w/2NqySP0fejOKe7cacKpGUqsLIakpyd2FD7mfZu7pSCCtHYpRWR+h6yq+Ngg== +"@schematics/angular@9.1.12", "@schematics/angular@^9.1.7": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-9.1.12.tgz#608e25dbd517d867002781f695336b51f05417a2" + integrity sha512-r4+aPAGhstsKFMwW/kOen1ACnzuLpz+vMxEpndXOqqVXLkAMsuAbQUFYjIlMy6fH4zdhpI90EJZ1PbOrAXvKxA== dependencies: - tslib "^1.9.0" + "@angular-devkit/core" "9.1.12" + "@angular-devkit/schematics" "9.1.12" -"@ng-select/ng-select@^2.13.2": - version "2.20.5" - resolved "https://registry.yarnpkg.com/@ng-select/ng-select/-/ng-select-2.20.5.tgz#bbf1b26b34bca576b13241453bdf92aa16de37a5" - integrity sha512-S9R3op3kd8XmAI99exPOTXwDcYOsDngIhkdsQuV1jq/rSVKdJZ6gQY1VWS5REjVnqbKbxbWAx4JA38bum/8Z7g== +"@schematics/update@0.901.12", "@schematics/update@^0.901.7": + version "0.901.12" + resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.901.12.tgz#7e410ac7a163b71e30d8cc56d7959adf9225078c" + integrity sha512-SxGVYLTHhBC0rSF0OWSWPuJUB1Jhfqkl3o5bBgCC9//DutWiN6WoCCBTrCxR7F5vR2iiD7WqOe9CuvWYfvV8oQ== dependencies: - tslib "^1.9.0" - -"@ngrx/effects@^8.3.0": - version "8.4.0" - resolved "https://registry.yarnpkg.com/@ngrx/effects/-/effects-8.4.0.tgz#1904795c344e24682983cd3e65a636c43f8aba60" - integrity sha512-LQv+NIYkFehXMSBMT9xL04RvmDmbzSbCbSCXbNSH2hN216TqX83L29u5T4I06oGhzQ3xN+SSQXGWQiZYJvKuEA== - -"@ngrx/router-store@^8.3.0": - version "8.4.0" - resolved "https://registry.yarnpkg.com/@ngrx/router-store/-/router-store-8.4.0.tgz#59e5295eadaabfdabe11e201de3c0405434783bc" - integrity sha512-VTs8O4mAzxbZDtPYaiBG7FV+k4UY5iaIRK7RMvaeBrWMMqD1St63qX1oF6s79R1qAV/fQ1svJNytsArLAI2sXw== - -"@ngrx/store@^8.3.0": - version "8.4.0" - resolved "https://registry.yarnpkg.com/@ngrx/store/-/store-8.4.0.tgz#b4ab3bf81c6ab7bc0904886aa2b40be98fae8db5" - integrity sha512-Z8+2hfGcynGrzJuU7ixxYxOI6M2E0H8Omni1u01h55vvaZeoTO8bRt6OWqbjxxEsSKQmBBZ1XyOuuZXSWjxvYw== - -"@ngtools/webpack@8.3.14": - version "8.3.14" - resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-8.3.14.tgz#ecac2651d2da7407f60acfb24ba03c460a79af1d" - integrity sha512-eIU3W3T4YxiExkS/c09FkqQpnKeIuUFFnxyfdG40zospt28B6V5ZaEVw2z5+2CjxJlDUTUYZlhPiV9Rwadp3jg== - dependencies: - "@angular-devkit/core" "8.3.14" - enhanced-resolve "4.1.0" - rxjs "6.4.0" - tree-kill "1.2.1" - webpack-sources "1.4.3" + "@angular-devkit/core" "9.1.12" + "@angular-devkit/schematics" "9.1.12" + "@yarnpkg/lockfile" "1.1.0" + ini "1.3.5" + npm-package-arg "^8.0.0" + pacote "9.5.12" + rxjs "6.5.4" + semver "7.1.3" + semver-intersect "1.4.0" -"@nguniversal/express-engine@^8.1.1": - version "8.1.1" - resolved "https://registry.yarnpkg.com/@nguniversal/express-engine/-/express-engine-8.1.1.tgz#253f2a484764cf183a679847a0c25c52d5b25ab9" - integrity sha512-LKfNnKb1BU1IyI/U7LcDgU744ptrn7fTYb3QqHAlGaozHUNRjXpNuBdkrcAS5+8UAhRlTllpSt1c+TmY2/tomA== +"@spartacus/assets@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@spartacus/assets/-/assets-2.1.4.tgz#73e37f561f9f8e86c161c860a67e938d8ea8363e" + integrity sha512-L8h0BKv9sgrLIkAa/WPRc2m7BxEje4l7y4Rdbvum/ZZ1t420k8Iiy7LZR3zEMR6mMLD5IBbDGyGQ8wJKdi4r3A== + dependencies: + tslib "^1.10.0" -"@schematics/angular@8.3.14", "@schematics/angular@^8.3.5": - version "8.3.14" - resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-8.3.14.tgz#de47af1bb38cdc25d1bb9d36c5f1caf19e4e2882" - integrity sha512-1XXBh9+lowvltRlcCjDJa4GEr5Xq+uNJcxULHBaNY7YfQSwZ5KuyhTBWjCdKmMaTOV3pEcIHwyuNh26mpn98Bw== +"@spartacus/core@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@spartacus/core/-/core-2.1.4.tgz#431d9ff01ed9613823393e2f1f1822bdffa80465" + integrity sha512-ruB2e4Pt1F32C0/qYo8fVgrYjNlHiZeMPudw1PXiIl5hcxF/AcbinQLWEe48JTsCTYuUZD+khNwsQsUfWpuQeg== dependencies: - "@angular-devkit/core" "8.3.14" - "@angular-devkit/schematics" "8.3.14" + tslib "^1.10.0" -"@schematics/update@0.803.14": - version "0.803.14" - resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.803.14.tgz#831c7f816f75d98aeec370cdfa490c7431130af8" - integrity sha512-1erj7oaR2vKXo1DLE0s4BbbouBmgeAHEkPHQM7FPtyroZ18kytlT+qjTbsSnlRCwcFsjxmRkbRjXaXDz7ttsYQ== +"@spartacus/schematics@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@spartacus/schematics/-/schematics-2.1.4.tgz#fad6b24c91df0d00e0b3adaa08292f1cbebc4d3e" + integrity sha512-Ddr5JV0AAOFNDvJ+fxKUaEEPsS0bU4PiMOE1bGtNOkEu7TArpsW7wc1YHpUdmUCMrvDYDyAIBKn8vEcgSFc+1w== + dependencies: + "@angular-devkit/core" "^9.1.7" + "@angular-devkit/schematics" "^9.1.7" + "@angular/cdk" "^9.2.4" + "@angular/localize" "^9.1.9" + "@angular/pwa" "^0.901.7" + "@nguniversal/express-engine" "^9.1.1" + "@schematics/angular" "^9.1.7" + "@schematics/update" "^0.901.7" + +"@spartacus/storefront@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@spartacus/storefront/-/storefront-2.1.4.tgz#7697cc3e3e99b49f9c1ecd2a2d91d8bbe5a81571" + integrity sha512-CdLrPmcO7pFkWAQwlQItmRct/X3eNQeF/RFaFR4WDn+EK0aDKXr8KlAeyJ0SaOeplF+eq91Hy4CsJRoxCC6dEA== dependencies: - "@angular-devkit/core" "8.3.14" - "@angular-devkit/schematics" "8.3.14" - "@yarnpkg/lockfile" "1.1.0" - ini "1.3.5" - pacote "9.5.5" - rxjs "6.4.0" - semver "6.3.0" - semver-intersect "1.4.0" + tslib "^1.10.0" -"@spartacus/assets@^1.1.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@spartacus/assets/-/assets-1.2.2.tgz#a3e1219ba167f3241509b11cf1810b10cc62cfc5" - integrity sha512-PMjdz1LkVOW6sgu6fgRftdoZo0JMr/7ZKE1hgJk9iqSdo0Rs0k7z8GL4UL57mAEOD2bR7B6Ma8Wz1f1UB0iiTQ== +"@spartacus/styles@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@spartacus/styles/-/styles-2.1.4.tgz#e76076327e747bb9005485e16298ba9de4c6940d" + integrity sha512-UemR+JwCtJ8crAssajZdrOluV2teIs2ePc7ZE8JP6kabf6ucViimftXACNNqInkCqHQL6uuqZuvUEi3LvPtRwg== dependencies: - tslib "^1.9.0" + hamburgers "^1.1.3" -"@spartacus/core@^1.1.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@spartacus/core/-/core-1.2.2.tgz#ae71df56549b2091ec13a0d97d3025b584afd642" - integrity sha512-M6ejVQ2Ueu89cLEpdOob1iXtLvtIBZ3v9HHgQghTq0ckBIYW0trt0rLMz88ttBmESG33o/Ywg6xEa5LhKwuaiQ== +"@types/body-parser@*": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" + integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ== dependencies: - tslib "^1.9.0" + "@types/connect" "*" + "@types/node" "*" -"@spartacus/schematics@^0.1.2-beta.1": - version "0.1.2-beta.1" - resolved "https://registry.yarnpkg.com/@spartacus/schematics/-/schematics-0.1.2-beta.1.tgz#79b5a33bd469f658c2d9fe994e0096c8f946ecd3" - integrity sha512-LRQiOJy3GHCnhjAYba95Gscbz0JdkoS1q6B1TMwHKi5PhtdbuEKYDO0VOKP+NIiD1sXjAfTQff5s11ZtmmkQpA== - dependencies: - "@angular-devkit/core" "^8.3.5" - "@angular-devkit/schematics" "^8.3.5" - "@angular/cdk" "^8.2.1" - "@angular/pwa" "^0.803.5" - "@nguniversal/express-engine" "^8.1.1" - "@schematics/angular" "^8.3.5" - "@types/jasmine" "^3.4.0" - "@types/node" "^10.14.19" - jasmine "^3.5.0" - typescript "3.5.3" - -"@spartacus/storefront@^1.1.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@spartacus/storefront/-/storefront-1.2.2.tgz#df06e15873f3ef5864cf3f8a5471bbbdca91a512" - integrity sha512-b0dnCgK5MyrZX58agzFCD7QYkhMpqZsXF16+WQntOaWvhhio9bV/DTmJIELsTPN2DxlPXkWnpsIvL87Q6J1Ckg== +"@types/connect@*": + version "3.4.34" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.34.tgz#170a40223a6d666006d93ca128af2beb1d9b1901" + integrity sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ== dependencies: - tslib "^1.9.0" + "@types/node" "*" -"@spartacus/styles@^1.1.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@spartacus/styles/-/styles-1.2.2.tgz#28530569d2bbf0e1cf28985661831794e23dcc15" - integrity sha512-I4EJ9nXqijOzDz3+G8QN+/azn5XUPVn6sYdtb8frdqxFe4lUuq+jqhyhdhXaPxp5AXIAQ9eTLE2JHQ+gCf+ciQ== +"@types/express-serve-static-core@*": + version "4.17.15" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.15.tgz#7c3d37829a991da9a507c1efd44d97532e8909e3" + integrity sha512-pb71P0BrBAx7cQE+/7QnA1HTQUkdBKMlkPY7lHUMn0YvPJkL2UA+KW3BdWQ309IT+i9En/qm45ZxpjIcpgEhNQ== dependencies: - hamburgers "^1.1.3" + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" -"@types/events@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== +"@types/express@^4.17.0": + version "4.17.9" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.9.tgz#f5f2df6add703ff28428add52bdec8a1091b0a78" + integrity sha512-SDzEIZInC4sivGIFY4Sz1GG6J9UObPwCInYJjko2jzOf/Imx/dlpume6Xxwj1ORL82tBbmN4cPDIDkLbWHk9hw== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "*" + "@types/qs" "*" + "@types/serve-static" "*" "@types/glob@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" - integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== dependencies: - "@types/events" "*" "@types/minimatch" "*" "@types/node" "*" -"@types/jasmine@*", "@types/jasmine@^3.4.0": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.4.4.tgz#be3fbd73e72725edb44e6f7f509cd52912d1550c" - integrity sha512-+/sHcTPyDS1JQacDRRRWb+vNrjBwnD+cKvTaWlxlJ/uOOFvzCkjOwNaqVjYMLfsjzNi0WtDH9RyReDXPG1Cdug== +"@types/http-proxy@^1.17.4": + version "1.17.4" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.4.tgz#e7c92e3dbe3e13aa799440ff42e6d3a17a9d045b" + integrity sha512-IrSHl2u6AWXduUaDLqYpt45tLVCtYv7o4Z0s1KghBCDgIIS9oW5K1H8mZG/A2CfeLdEa7rTd1ACOiHBc1EMT2Q== + dependencies: + "@types/node" "*" -"@types/jasmine@~3.3.8": - version "3.3.16" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.3.16.tgz#7c84074f5d7f84da9a14f816ccfb9aeb4da13f27" - integrity sha512-Nveep4zKGby8uIvG2AEUyYOwZS8uVeHK9TgbuWYSawUDDdIgfhCKz28QzamTo//Jk7Ztt9PO3f+vzlB6a4GV1Q== +"@types/jasmine@*": + version "3.6.2" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.6.2.tgz#02f64450016f7de70f145d698be311136d7c6374" + integrity sha512-AzfesNFLvOs6Q1mHzIsVJXSeUnqVh4ZHG8ngygKJfbkcSLwzrBVm/LKa+mR8KrOfnWtUL47112gde1MC0IXqpQ== + +"@types/jasmine@~3.5.0": + version "3.5.14" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.5.14.tgz#f41a14e8ffa939062a71cf9722e5ee7d4e1f94af" + integrity sha512-Fkgk536sHPqcOtd+Ow+WiUNuk0TSo/BntKkF8wSvcd6M2FvPjeXcUE6Oz/bwDZiUZEaXLslAgw00Q94Pnx6T4w== "@types/jasminewd2@~2.0.3": version "2.0.8" @@ -1024,35 +1280,63 @@ dependencies: "@types/jasmine" "*" +"@types/json-schema@^7.0.5": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" + integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== + +"@types/mime@*": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.3.tgz#c893b73721db73699943bfc3653b1deb7faa4a3a" + integrity sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q== + "@types/minimatch@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*": - version "12.11.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.11.7.tgz#57682a9771a3f7b09c2497f28129a0462966524a" - integrity sha512-JNbGaHFCLwgHn/iCckiGSOZ1XYHsKFwREtzPwSGCVld1SGhOlmZw2D4ZI94HQCrBHbADzW9m4LER/8olJTRGHA== - -"@types/node@^10.14.19": - version "10.17.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.0.tgz#537c61a1df699a8331c79dab2ccc2c8799873c66" - integrity sha512-wuJwN2KV4tIRz1bu9vq5kSPasJ8IsEjZaP1ZR7KlmdUZvGF/rXy8DmXOVwUD0kAtvtJ7aqMKPqUXC0NUTDbrDg== + version "14.14.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.11.tgz#fc25a4248a5e8d0837019b1d170146d07334abe0" + integrity sha512-BJ97wAUuU3NUiUCp44xzUFquQEvnk1wu7q4CMEUYKJWjdkr0YWYDsm4RFtAvxYsNjLsKcrFt6RvK8r+mnzMbEQ== -"@types/node@~8.9.4": - version "8.9.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.9.5.tgz#162b864bc70be077e6db212b322754917929e976" - integrity sha512-jRHfWsvyMtXdbhnz5CVHxaBgnV6duZnPlQuRSo/dm/GnmikNcmZhxIES4E9OZjUmQ8C+HCl4KJux+cXN/ErGDQ== +"@types/node@^12.11.1": + version "12.19.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.8.tgz#efd6d1a90525519fc608c9db16c8a78f7693a978" + integrity sha512-D4k2kNi0URNBxIRCb1khTnkWNHv8KSL1owPmS/K5e5t8B2GzMReY7AsJIY1BnP5KdlgC4rj9jk2IkDMasIE7xg== "@types/q@^0.0.32": version "0.0.32" resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5" integrity sha1-vShOV8hPEyXacCur/IKlMoGQwMU= +"@types/q@^1.5.1": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" + integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== + +"@types/qs@*": + version "6.9.5" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.5.tgz#434711bdd49eb5ee69d90c1d67c354a9a8ecb18b" + integrity sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ== + +"@types/range-parser@*": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" + integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== + "@types/selenium-webdriver@^3.0.0": - version "3.0.16" - resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-3.0.16.tgz#50a4755f8e33edacd9c406729e9b930d2451902a" - integrity sha512-lMC2G0ItF2xv4UCiwbJGbnJlIuUixHrioOhNGHSCsYCJ8l4t9hMCUimCytvFv7qy6AfSzRxhRHoGa+UqaqwyeA== + version "3.0.17" + resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-3.0.17.tgz#50bea0c3c2acc31c959c5b1e747798b3b3d06d4b" + integrity sha512-tGomyEuzSC1H28y2zlW6XPCaDaXFaD6soTdb4GNdmte2qfHtrKqhy0ZFs4r/1hpazCfEZqeTSRLvSasmEx89uw== + +"@types/serve-static@*": + version "1.13.8" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.8.tgz#851129d434433c7082148574ffec263d58309c46" + integrity sha512-MoJhSQreaVoL+/hurAZzIm8wafFR6ajiTM1m4A0kv6AGeVBl4r4pOV8bGFrjjq1sGxDTnCoF8i22o0/aE5XCyA== + dependencies: + "@types/mime" "*" + "@types/node" "*" "@types/source-list-map@*": version "0.1.2" @@ -1060,9 +1344,9 @@ integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== "@types/webpack-sources@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.5.tgz#be47c10f783d3d6efe1471ff7f042611bd464a92" - integrity sha512-zfvjpp7jiafSmrzJ2/i3LqOyTYTuJ7u1KOXlKgDlvsj9Rr0x7ZiYu5lZbXwobL7lmsRNtPXlBfmaUD8eU2Hu8w== + version "0.1.8" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.8.tgz#078d75410435993ec8a0a2855e88706f3f751f81" + integrity sha512-JHB2/xZlXOjzjBB6fMOpH1eQAfsrpqVVIbneE0Rok16WXwFaznaI5vfg75U5WgGJm7V9W1c4xeRQDjX/zwvghA== dependencies: "@types/node" "*" "@types/source-list-map" "*" @@ -1214,6 +1498,16 @@ "@webassemblyjs/wast-parser" "1.8.5" "@xtuc/long" "4.2.2" +"@wessberg/ts-evaluator@0.0.27": + version "0.0.27" + resolved "https://registry.yarnpkg.com/@wessberg/ts-evaluator/-/ts-evaluator-0.0.27.tgz#06e8b901d5e84f11199b9f84577c6426ae761767" + integrity sha512-7gOpVm3yYojUp/Yn7F4ZybJRxyqfMNf0LXK5KJiawbPfL0XTsJV+0mgrEDjOIR6Bi0OYk2Cyg4tjFu1r8MCZaA== + dependencies: + chalk "^4.1.0" + jsdom "^16.4.0" + object-path "^0.11.5" + tslib "^2.0.3" + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -1237,10 +1531,10 @@ JSONStream@^1.3.4: jsonparse "^1.2.0" through ">=2.2.7 <3" -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +abab@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" @@ -1250,15 +1544,33 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + acorn@^6.2.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" - integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + +acorn@^7.1.1: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== adm-zip@^0.4.9: - version "0.4.13" - resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.13.tgz#597e2f8cc3672151e1307d3e95cddbc75672314a" - integrity sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw== + version "0.4.16" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== after@0.8.2: version "0.8.2" @@ -1286,40 +1598,48 @@ agentkeepalive@^3.4.1: dependencies: humanize-ms "^1.2.1" +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" - integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@6.10.2, ajv@^6.1.0, ajv@^6.10.2, ajv@^6.5.5: - version "6.10.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" - integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== +ajv@6.12.3: + version "6.12.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" + integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== dependencies: - fast-deep-equal "^2.0.1" + fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^5.0.0: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= +ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" + fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= +alphanum-sort@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= ansi-colors@4.1.1: version "4.1.1" @@ -1332,11 +1652,11 @@ ansi-colors@^3.0.0: integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== ansi-escapes@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.2.1.tgz#4dccdb846c3eee10f6d64dea66273eab90c37228" - integrity sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q== + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== dependencies: - type-fest "^0.5.2" + type-fest "^0.11.0" ansi-html@0.0.7: version "0.0.7" @@ -1348,28 +1668,35 @@ ansi-regex@^2.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - ansi-regex@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= -ansi-styles@^3.2.1: +ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -1398,18 +1725,15 @@ append-transform@^1.0.0: dependencies: default-require-extensions "^2.0.0" -aproba@^1.0.3, aproba@^1.1.1: +aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== argparse@^1.0.7: version "1.0.10" @@ -1458,6 +1782,11 @@ array-union@^1.0.1: dependencies: array-uniq "^1.0.1" +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" @@ -1483,14 +1812,15 @@ asap@^2.0.0, asap@~2.0.3: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== dependencies: bn.js "^4.0.0" inherits "^2.0.1" minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" asn1@~0.2.3: version "0.2.4" @@ -1522,6 +1852,11 @@ ast-types-flow@0.0.7: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= +async-each-series@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/async-each-series/-/async-each-series-0.1.1.tgz#7617c1917401fd8ca4a28aadce3dbae98afeb432" + integrity sha1-dhfBkXQB/Yykooqtzj266Yr+tDI= + async-each@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" @@ -1532,6 +1867,11 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== +async@1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + async@^2.5.0, async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -1544,23 +1884,23 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -atob@^2.1.1: +atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -autoprefixer@9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.6.1.tgz#51967a02d2d2300bb01866c1611ec8348d355a47" - integrity sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw== +autoprefixer@9.7.4: + version "9.7.4" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.4.tgz#f8bf3e06707d047f0641d87aee8cfb174b2a5378" + integrity sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g== dependencies: - browserslist "^4.6.3" - caniuse-lite "^1.0.30000980" + browserslist "^4.8.3" + caniuse-lite "^1.0.30001020" chalk "^2.4.2" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^7.0.17" - postcss-value-parser "^4.0.0" + postcss "^7.0.26" + postcss-value-parser "^4.0.2" aws-sign2@~0.7.0: version "0.7.0" @@ -1568,103 +1908,42 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + +axios@0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.0.tgz#8e09bff3d9122e133f7b8101c8fbdd00ed3d2ab8" + integrity sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ== + dependencies: + follow-redirects "1.5.10" + is-buffer "^2.0.2" -axobject-query@^2.0.2: +axobject-query@2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9" integrity sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww== dependencies: ast-types-flow "0.0.7" -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-generator@^6.18.0: - version "6.26.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" - integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.17.4" - source-map "^0.5.7" - trim-right "^1.0.1" - -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= +babel-loader@8.0.6: + version "8.0.6" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" + integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== dependencies: - babel-runtime "^6.22.0" + find-cache-dir "^2.0.0" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + pify "^4.0.1" -babel-plugin-dynamic-import-node@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" - integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== dependencies: object.assign "^4.1.0" -babel-runtime@^6.22.0, babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babel-template@^6.16.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - -babel-traverse@^6.18.0, babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" - -babel-types@^6.18.0, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== - backo2@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" @@ -1675,21 +1954,31 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +base64-arraybuffer@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz#9818c79e059b1355f97e0428a017c838e90ba812" + integrity sha1-mBjHngWbE1X5fgQooBfIOOkLqBI= + base64-arraybuffer@0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= base64-js@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== base64id@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY= +base64id@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" + integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== + base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -1733,9 +2022,16 @@ binary-extensions@^1.0.0: integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== binary-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" - integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" blob@0.0.5: version "0.0.5" @@ -1749,17 +2045,22 @@ blocking-proxy@^1.0.0: dependencies: minimist "^1.2.0" -bluebird@^3.3.0, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: - version "3.7.1" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de" - integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== +bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" + integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== -body-parser@1.19.0, body-parser@^1.16.1: +body-parser@1.19.0, body-parser@^1.19.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== @@ -1787,10 +2088,15 @@ bonjour@^3.5.0: multicast-dns "^6.0.1" multicast-dns-service-types "^1.1.0" -bootstrap@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.3.1.tgz#280ca8f610504d99d7b6b4bfc4b68cec601704ac" - integrity sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag== +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +bootstrap@4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.2.1.tgz#8f8bdca024dbf0e8644da32e918c8a03a90a5757" + integrity sha512-tt/7vIv3Gm2mnd/WeDx36nfGGHleil0Wg8IeB7eMrVkY0fZ5iTaBisSh8oNANc2IBsCc6vCgCNTIM/IEN0+50Q== brace-expansion@^1.1.7: version "1.1.11" @@ -1816,7 +2122,7 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@~3.0.2: +braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -1828,6 +2134,69 @@ brorand@^1.0.1: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browser-sync-client@^2.26.13: + version "2.26.13" + resolved "https://registry.yarnpkg.com/browser-sync-client/-/browser-sync-client-2.26.13.tgz#ee5fa3ec36fe2a03f9887553cac6846751c8232d" + integrity sha512-p2VbZoYrpuDhkreq+/Sv1MkToHklh7T1OaIntDwpG6Iy2q/XkBcgwPcWjX+WwRNiZjN8MEehxIjEUh12LweLmQ== + dependencies: + etag "1.8.1" + fresh "0.5.2" + mitt "^1.1.3" + rxjs "^5.5.6" + +browser-sync-ui@^2.26.13: + version "2.26.13" + resolved "https://registry.yarnpkg.com/browser-sync-ui/-/browser-sync-ui-2.26.13.tgz#7a0622df2c1cc4fb0dd8edd511f90737f84239b4" + integrity sha512-6NJ/pCnhCnBMzaty1opWo7ipDmFAIk8U71JMQGKJxblCUaGfdsbF2shf6XNZSkXYia1yS0vwKu9LIOzpXqQZCA== + dependencies: + async-each-series "0.1.1" + connect-history-api-fallback "^1" + immutable "^3" + server-destroy "1.0.1" + socket.io-client "^2.0.4" + stream-throttle "^0.1.3" + +browser-sync@^2.26.7: + version "2.26.13" + resolved "https://registry.yarnpkg.com/browser-sync/-/browser-sync-2.26.13.tgz#a74541c104aec7eda318a5d8abdb3317ae9eda3d" + integrity sha512-JPYLTngIzI+Dzx+StSSlMtF+Q9yjdh58HW6bMFqkFXuzQkJL8FCvp4lozlS6BbECZcsM2Gmlgp0uhEjvl18X4w== + dependencies: + browser-sync-client "^2.26.13" + browser-sync-ui "^2.26.13" + bs-recipes "1.3.4" + bs-snippet-injector "^2.0.1" + chokidar "^3.4.1" + connect "3.6.6" + connect-history-api-fallback "^1" + dev-ip "^1.0.1" + easy-extender "^2.3.4" + eazy-logger "3.1.0" + etag "^1.8.1" + fresh "^0.5.2" + fs-extra "3.0.1" + http-proxy "^1.18.1" + immutable "^3" + localtunnel "^2.0.0" + micromatch "^4.0.2" + opn "5.3.0" + portscanner "2.1.1" + qs "6.2.3" + raw-body "^2.3.2" + resp-modifier "6.0.2" + rx "4.1.0" + send "0.16.2" + serve-index "1.9.1" + serve-static "1.13.2" + server-destroy "1.0.1" + socket.io "2.1.1" + ua-parser-js "^0.7.18" + yargs "^15.4.1" + browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" @@ -1859,26 +2228,28 @@ browserify-des@^1.0.0: inherits "^2.0.1" safe-buffer "^5.1.2" -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== dependencies: - bn.js "^4.1.0" + bn.js "^5.0.0" randombytes "^2.0.1" browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= - dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" browserify-zlib@^0.2.0: version "0.2.0" @@ -1887,50 +2258,35 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@4.6.6: - version "4.6.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.6.6.tgz#6e4bf467cde520bc9dbdf3747dafa03531cec453" - integrity sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA== - dependencies: - caniuse-lite "^1.0.30000984" - electron-to-chromium "^1.3.191" - node-releases "^1.1.25" - -browserslist@^4.6.0, browserslist@^4.6.3, browserslist@^4.7.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.2.tgz#1bb984531a476b5d389cedecb195b2cd69fb1348" - integrity sha512-uZavT/gZXJd2UTi9Ov7/Z340WOSQ3+m1iBVRUknf+okKxonL9P83S3ctiBDtuRmRu8PiCHjqyueqQ9HYlJhxiw== +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.15.0, browserslist@^4.8.3, browserslist@^4.9.1: + version "4.15.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.15.0.tgz#3d48bbca6a3f378e86102ffd017d9a03f122bdb0" + integrity sha512-IJ1iysdMkGmjjYeRlDU8PQejVwxvVO5QOfXH7ylW31GO6LwNRSmm/SgRXtNsEXqMLl2e+2H5eEJ7sfynF8TCaQ== dependencies: - caniuse-lite "^1.0.30001004" - electron-to-chromium "^1.3.295" - node-releases "^1.1.38" + caniuse-lite "^1.0.30001164" + colorette "^1.2.1" + electron-to-chromium "^1.3.612" + escalade "^3.1.1" + node-releases "^1.1.67" browserstack@^1.5.1: - version "1.5.3" - resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.5.3.tgz#93ab48799a12ef99dbd074dd595410ddb196a7ac" - integrity sha512-AO+mECXsW4QcqC9bxwM29O7qWa7bJT94uBFzeb5brylIQwawuEziwq20dPYbins95GlWzOawgyDNdjYAo32EKg== + version "1.6.0" + resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.6.0.tgz#5a56ab90987605d9c138d7a8b88128370297f9bf" + integrity sha512-HJDJ0TSlmkwnt9RZ+v5gFpa1XZTBYTj0ywvLwJ3241J7vMw2jAsGNVhKHtmCOyg+VxeLZyaibO9UL71AsUeDIw== dependencies: https-proxy-agent "^2.2.1" -buffer-alloc-unsafe@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" - integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== - -buffer-alloc@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" - integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== - dependencies: - buffer-alloc-unsafe "^1.1.0" - buffer-fill "^1.0.0" +bs-recipes@1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/bs-recipes/-/bs-recipes-1.3.4.tgz#0d2d4d48a718c8c044769fdc4f89592dc8b69585" + integrity sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU= -buffer-fill@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" - integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= +bs-snippet-injector@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz#61b5393f11f52559ed120693100343b6edb04dd5" + integrity sha1-YbU5PxH1JVntEgaTEANDtu2wTdU= -buffer-from@^1.0.0, buffer-from@^1.1.0: +buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== @@ -1946,9 +2302,9 @@ buffer-xor@^1.0.3: integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= buffer@^4.3.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" - integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" @@ -1979,37 +2335,40 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cacache@12.0.2: - version "12.0.2" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.2.tgz#8db03205e36089a3df6954c66ce92541441ac46c" - integrity sha512-ifKgxH2CKhJEg6tNdAwziu6Q33EvuG26tYcda6PT3WKisZcYDXsnEdnRv67Po3yCzFfaSoMjGZzJyD2c3DT1dg== +cacache@15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.0.tgz#133b59edbd2a37ea8ef2d54964c6f247e47e5059" + integrity sha512-L0JpXHhplbJSiDGzyJJnJCTL7er7NzbBgxzVqLswEb4bO91Zbv17OUMuUeu/q0ZwKn3V+1HM4wb9tO4eVE/K8g== dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" + chownr "^1.1.2" + fs-minipass "^2.0.0" glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" + infer-owner "^1.0.4" lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" move-concurrently "^1.0.1" + p-map "^3.0.0" promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" + rimraf "^2.7.1" + ssri "^8.0.0" + tar "^6.0.1" unique-filename "^1.1.1" - y18n "^4.0.0" -cacache@^11.3.3: - version "11.3.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.3.tgz#8bd29df8c6a718a6ebd2d010da4d7972ae3bbadc" - integrity sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA== +cacache@^12.0.0, cacache@^12.0.2: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== dependencies: bluebird "^3.5.5" chownr "^1.1.1" figgy-pudding "^3.5.1" glob "^7.1.4" graceful-fs "^4.1.15" + infer-owner "^1.0.3" lru-cache "^5.1.1" mississippi "^3.0.0" mkdirp "^0.5.1" @@ -2020,26 +2379,28 @@ cacache@^11.3.3: unique-filename "^1.1.1" y18n "^4.0.0" -cacache@^12.0.0, cacache@^12.0.2: - version "12.0.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" - integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== +cacache@^15.0.4: + version "15.0.5" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" + integrity sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A== dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" + rimraf "^3.0.2" + ssri "^8.0.0" + tar "^6.0.2" unique-filename "^1.1.1" - y18n "^4.0.0" cache-base@^1.0.1: version "1.0.1" @@ -2056,6 +2417,14 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +call-bind@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" + integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.0" + caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -2080,20 +2449,25 @@ callsites@^2.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= -camelcase@^5.0.0: +camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@1.0.30000989: - version "1.0.30000989" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz#b9193e293ccf7e4426c5245134b8f2a56c0ac4b9" - integrity sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw== +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" -caniuse-lite@^1.0.30000980, caniuse-lite@^1.0.30000984, caniuse-lite@^1.0.30001004: - version "1.0.30001005" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001005.tgz#823054210be638c725521edcb869435dae46728d" - integrity sha512-g78miZm1Z5njjYR216a5812oPiLgV1ssndgGxITHWUopmjUrCswMisA0a2kSB7a0vZRox6JOKhM51+efmYN8Mg== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001032, caniuse-lite@^1.0.30001164: + version "1.0.30001165" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001165.tgz#32955490d2f60290bb186bb754f2981917fa744f" + integrity sha512-8cEsSMwXfx7lWSUMA2s08z9dIgsnR5NAqjXP23stdsU3AUWkCr/rr4s4OFtHXn5XXr6+7kam3QFVoYyXNPdJPA== canonical-path@1.0.0: version "1.0.0" @@ -2116,7 +2490,7 @@ chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2125,15 +2499,31 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -"chokidar@>=2.0.0 <4.0.0": - version "3.2.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.2.3.tgz#b9270a565d14f02f6bfdd537a6a2bbf5549b8c8c" - integrity sha512-GtrxGuRf6bzHQmXWRepvsGnXpkQkVU+D2/9a7dAe4a7v1NhrfZOZ2oKf76M3nOs46fFYL8D+Q8JYA4GYeJ8Cjw== +"chokidar@>=2.0.0 <4.0.0", chokidar@^3.0.0, chokidar@^3.4.1: + version "3.4.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" + integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -2141,11 +2531,11 @@ chardet@^0.7.0: is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.2.0" + readdirp "~3.5.0" optionalDependencies: - fsevents "~2.1.1" + fsevents "~2.1.2" -chokidar@^2.0.2, chokidar@^2.0.3, chokidar@^2.1.1, chokidar@^2.1.6: +chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== @@ -2164,10 +2554,15 @@ chokidar@^2.0.2, chokidar@^2.0.3, chokidar@^2.1.1, chokidar@^2.1.6: optionalDependencies: fsevents "^1.2.7" -chownr@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" - integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== +chownr@^1.1.1, chownr@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== chrome-trace-event@^1.0.2: version "1.0.2" @@ -2199,12 +2594,10 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -clean-css@4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" - integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g== - dependencies: - source-map "~0.6.0" +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== cli-cursor@^3.1.0: version "3.1.0" @@ -2213,19 +2606,33 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" +cli-spinners@^2.2.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.5.0.tgz#12763e47251bf951cb75c201dfa58ff1bcb2d047" + integrity sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ== + cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" clone-deep@^4.0.1: version "4.0.1" @@ -2236,29 +2643,33 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + clone@^2.1.1, clone@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" -codelyzer@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/codelyzer/-/codelyzer-5.2.0.tgz#b0ee573a12779c996090e596c5c1755479d83758" - integrity sha512-izfUfhEOOgAizszPlEDxo71DK/C4wprZw0vkY6UWcOSTQvN1JyfXf9DXwaV7WX+/JC+hH0ShXfdtGLA9Rca7LA== +codelyzer@^5.1.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/codelyzer/-/codelyzer-5.2.2.tgz#d0530a455784e6bea0b6d7e97166c73c30a5347f" + integrity sha512-jB4FZ1Sx7kZhvZVdf+N2BaKTdrrNZOL0Bj10RRfrhHrb3zEvXjJvvq298JPMJAiyiCS/v4zs1QlGU0ip7xGqeA== dependencies: app-root-path "^2.2.1" aria-query "^3.0.0" - axobject-query "^2.0.2" + axobject-query "2.0.2" css-selector-tokenizer "^0.7.1" cssauron "^1.4.0" damerau-levenshtein "^1.0.4" @@ -2274,24 +2685,57 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" -color-convert@^1.9.0: +color-convert@^1.9.0, color-convert@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.4.tgz#dd51cd25cfee953d138fe4002372cc3d0e504cb6" + integrity sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" + integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.4" + +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + colors@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= -colors@^1.1.0: +colors@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== @@ -2303,7 +2747,7 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.11.0, commander@^2.12.1, commander@^2.20.0, commander@~2.20.3: +commander@^2.11.0, commander@^2.12.1, commander@^2.2.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -2314,9 +2758,9 @@ commondir@^1.0.1: integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= compare-versions@^3.4.0: - version "3.5.1" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.5.1.tgz#26e1f5cf0d48a77eced5046b9f67b6b61075a393" - integrity sha512-9fGPIB7C6AyM18CJJBHt5EnCZDG3oiTJYy0NjfIAGjKpzv0tkxWko7TNQHF5ymqm7IH03tqmeuBxtvD+Izh6mg== + version "3.6.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" + integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== component-bind@1.0.0: version "1.0.0" @@ -2328,7 +2772,7 @@ component-emitter@1.2.1: resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= -component-emitter@^1.2.1: +component-emitter@^1.2.1, component-emitter@~1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== @@ -2339,11 +2783,11 @@ component-inherit@0.0.3: integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= compressible@~2.0.16: - version "2.0.17" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1" - integrity sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw== + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: - mime-db ">= 1.40.0 < 2" + mime-db ">= 1.43.0 < 2" compression@^1.7.4: version "1.7.4" @@ -2373,12 +2817,22 @@ concat-stream@^1.5.0: readable-stream "^2.2.2" typedarray "^0.0.6" -connect-history-api-fallback@^1.6.0: +connect-history-api-fallback@^1, connect-history-api-fallback@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== -connect@^3.6.0: +connect@3.6.6: + version "3.6.6" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524" + integrity sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ= + dependencies: + debug "2.6.9" + finalhandler "1.1.0" + parseurl "~1.3.2" + utils-merge "1.0.1" + +connect@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== @@ -2389,16 +2843,9 @@ connect@^3.6.0: utils-merge "1.0.1" console-browserify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" - integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= - dependencies: - date-now "^0.1.4" - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== constants-browserify@^1.0.0: version "1.0.0" @@ -2417,10 +2864,10 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -convert-source-map@^1.1.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" - integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== +convert-source-map@^1.5.1, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== dependencies: safe-buffer "~5.1.1" @@ -2456,41 +2903,35 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -copy-webpack-plugin@5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-5.0.4.tgz#c78126f604e24f194c6ec2f43a64e232b5d43655" - integrity sha512-YBuYGpSzoCHSSDGyHy6VJ7SHojKp6WHT4D7ItcQFNAYx2hrwkMe56e97xfVR0/ovDuMTrMffXUiltvQljtAGeg== - dependencies: - cacache "^11.3.3" - find-cache-dir "^2.1.0" - glob-parent "^3.1.0" - globby "^7.1.1" - is-glob "^4.0.1" - loader-utils "^1.2.3" - minimatch "^3.0.4" +copy-webpack-plugin@6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-6.0.3.tgz#2b3d2bfc6861b96432a65f0149720adbd902040b" + integrity sha512-q5m6Vz4elsuyVEIUXr7wJdIdePWTubsqVbEMvf1WQnHGv0Q+9yPRu7MtYFPt+GBOXRav9lvIINifTQ1vSCs+eA== + dependencies: + cacache "^15.0.4" + fast-glob "^3.2.4" + find-cache-dir "^3.3.1" + glob-parent "^5.1.1" + globby "^11.0.1" + loader-utils "^2.0.0" normalize-path "^3.0.0" - p-limit "^2.2.0" - schema-utils "^1.0.0" - serialize-javascript "^1.7.0" - webpack-log "^2.0.0" + p-limit "^3.0.1" + schema-utils "^2.7.0" + serialize-javascript "^4.0.0" + webpack-sources "^1.4.3" -core-js-compat@^3.1.1: - version "3.3.4" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.3.4.tgz#a151c6cd754edbfe6a4a2a66b9382df2ae74fbcd" - integrity sha512-7OK3/LPP8R3Ovasf3GilEOp+o1w0ZKJ75FMou2RDfTwIV69G5RkKCGFnqgBv/ZhR6xo9GCzlfVALyHmydbE7DA== +core-js-compat@^3.6.2: + version "3.8.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.1.tgz#8d1ddd341d660ba6194cbe0ce60f4c794c87a36e" + integrity sha512-a16TLmy9NVD1rkjUGbwuyWkiDoN0FDpAwrfLONvHFQx0D9k7J9y0srwMT8QP/Z6HE3MIFaVynEeYwZwPX1o5RQ== dependencies: - browserslist "^4.7.2" - semver "^6.3.0" - -core-js@3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.2.1.tgz#cd41f38534da6cc59f7db050fe67307de9868b09" - integrity sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw== + browserslist "^4.15.0" + semver "7.0.0" -core-js@^2.2.0, core-js@^2.4.0: - version "2.6.10" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.10.tgz#8a5b8391f8cc7013da703411ce5b585706300d7f" - integrity sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA== +core-js@3.6.4: + version "3.6.4" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.4.tgz#440a83536b458114b9cb2ac1580ba377dc470647" + integrity sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -2508,14 +2949,14 @@ cosmiconfig@^5.0.0: parse-json "^4.0.0" create-ecdh@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" - integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== dependencies: bn.js "^4.1.0" - elliptic "^6.0.0" + elliptic "^6.5.3" -create-hash@^1.1.0, create-hash@^1.1.2: +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== @@ -2526,7 +2967,7 @@ create-hash@^1.1.0, create-hash@^1.1.2: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== @@ -2566,19 +3007,98 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" -css-parse@1.7.x: - version "1.7.0" - resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b" - integrity sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs= +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-loader@3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.5.1.tgz#db2b2336f4169edb68e6a829ad4fd36552647b77" + integrity sha512-0G4CbcZzQ9D1Q6ndOfjFuMDo8uLYMu5vc9Abs5ztyHcKvmil6GJrMiNjzzi3tQvUF+mVRuDg7bE6Oc0Prolgig== + dependencies: + camelcase "^5.3.1" + cssesc "^3.0.0" + icss-utils "^4.1.1" + loader-utils "^1.2.3" + normalize-path "^3.0.0" + postcss "^7.0.27" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^3.0.2" + postcss-modules-scope "^2.2.0" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.0.3" + schema-utils "^2.6.5" + semver "^6.3.0" + +css-parse@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-2.0.0.tgz#a468ee667c16d81ccf05c58c38d2a97c780dbfd4" + integrity sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q= + dependencies: + css "^2.0.0" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" css-selector-tokenizer@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d" - integrity sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA== + version "0.7.3" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz#735f26186e67c749aaf275783405cf0661fae8f1" + integrity sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg== + dependencies: + cssesc "^3.0.0" + fastparse "^1.1.2" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.2.tgz#9ae393b5dafd7dae8a622475caec78d3d8fbd7b5" + integrity sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@^3.2.1: + version "3.4.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== + +css@^2.0.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" + integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" - regexpu-core "^1.0.0" + inherits "^2.0.3" + source-map "^0.6.1" + source-map-resolve "^0.5.2" + urix "^0.1.0" cssauron@^1.4.0: version "1.4.0" @@ -2587,10 +3107,102 @@ cssauron@^1.4.0: dependencies: through X.X.X -cssesc@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" - integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q= +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" + integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.2" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.2" + postcss-unique-selectors "^4.0.1" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + +cssnano@4.1.10: + version "4.1.10" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" + integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.7" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@^4.0.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" custom-event@~1.0.0: version "1.0.1" @@ -2603,9 +3215,9 @@ cyclist@^1.0.1: integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= damerau-levenshtein@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz#780cf7144eb2e8dbd1c3bb83ae31100ccc31a414" - integrity sha512-CBCRqFnpu715iPmw1KrdOrzRqbdFwQTwAWyyyYS42+iAgHCuXZ+/TdMgQkUENPomxEz9z1BEzuQU2Xw0kUuAgA== + version "1.0.6" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791" + integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug== dashdash@^1.12.0: version "1.14.1" @@ -2614,44 +3226,60 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -date-format@^2.0.0: +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +date-format@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.1.0.tgz#31d5b5ea211cf5fd764cd38baf9d033df7e125cf" integrity sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA== -date-now@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" - integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= +date-format@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-3.0.0.tgz#eb8780365c7d2b1511078fb491e6479780f3ad95" + integrity sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w== -debug@*, debug@^4.1.0, debug@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@3.1.0, debug@~3.1.0: +debug@3.1.0, debug@=3.1.0, debug@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== dependencies: ms "2.0.0" -debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== +debug@4.1.1, debug@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" +debug@^4.1.0, debug@^4.1.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -2662,15 +3290,20 @@ decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= +decimal.js@^10.2.0: + version "10.2.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" + integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== + decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= deep-equal@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.0.tgz#3103cdf8ab6d32cf4a8df7865458f2b8d33f3745" - integrity sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw== + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== dependencies: is-arguments "^1.0.4" is-date-object "^1.0.1" @@ -2679,10 +3312,10 @@ deep-equal@^1.0.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= default-gateway@^4.2.0: version "4.2.0" @@ -2699,7 +3332,14 @@ default-require-extensions@^2.0.0: dependencies: strip-bom "^3.0.0" -define-properties@^1.1.2, define-properties@^1.1.3: +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -2759,11 +3399,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -2775,9 +3410,9 @@ dependency-graph@^0.7.2: integrity sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ== des.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" - integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== dependencies: inherits "^2.0.1" minimalistic-assert "^1.0.0" @@ -2787,23 +3422,16 @@ destroy@~1.0.4: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= - dependencies: - repeating "^2.0.0" - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - detect-node@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== +dev-ip@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dev-ip/-/dev-ip-1.0.1.tgz#a76a3ed1855be7a012bb8ac16cb80f3c00dc28f0" + integrity sha1-p2o+0YVb56ASu4rBbLgPPADcKPA= + dezalgo@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" @@ -2817,10 +3445,10 @@ di@^0.0.1: resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= -diff@^3.1.0, diff@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== diffie-hellman@^5.0.0: version "5.0.3" @@ -2831,12 +3459,17 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" -dir-glob@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: - path-type "^3.0.0" + path-type "^4.0.0" + +dlv@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== dns-equal@^1.0.0: version "1.0.0" @@ -2858,7 +3491,7 @@ dns-txt@^2.0.2: dependencies: buffer-indexof "^1.0.0" -dom-serialize@^2.2.0: +dom-serialize@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs= @@ -2868,11 +3501,56 @@ dom-serialize@^2.2.0: extend "^3.0.0" void-elements "^2.0.0" +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== +domelementtype@1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e" + integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w== + +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + +domino@^2.1.2: + version "2.1.6" + resolved "https://registry.yarnpkg.com/domino/-/domino-2.1.6.tgz#fe4ace4310526e5e7b9d12c7de01b7f485a57ffe" + integrity sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ== + +domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" @@ -2883,6 +3561,20 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" +easy-extender@^2.3.4: + version "2.3.4" + resolved "https://registry.yarnpkg.com/easy-extender/-/easy-extender-2.3.4.tgz#298789b64f9aaba62169c77a2b3b64b4c9589b8f" + integrity sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q== + dependencies: + lodash "^4.17.10" + +eazy-logger@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eazy-logger/-/eazy-logger-3.1.0.tgz#b169eb56df714608fa114f164c8a2956bec9f0f3" + integrity sha512-/snsn2JqBtUSSstEl4R0RKjkisGHAhvYj89i7r3ytNUKW12y178KDZwXLXIgwDqLW6E/VRMT9qfld7wvFae8bQ== + dependencies: + tfunk "^4.0.0" + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -2896,15 +3588,15 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.191, electron-to-chromium@^1.3.295: - version "1.3.296" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.296.tgz#a1d4322d742317945285d3ba88966561b67f3ac8" - integrity sha512-s5hv+TSJSVRsxH190De66YHb50pBGTweT9XGWYu/LMR20KX6TsjFzObo36CjVAzM+PUeeKSBRtm/mISlCzeojQ== +electron-to-chromium@^1.3.612: + version "1.3.620" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.620.tgz#c6f36a7e398acc9d7d12743a6f58d536fbc58700" + integrity sha512-YbgWXUR2Mu+Fp6rm3GZ5YJdNo8SgZKLUTNSl2PNvdOcM8OIz07jRJnRkIaV9vdszFv9UUuGChh19w9qSuoLJgw== -elliptic@^6.0.0: - version "6.5.1" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.1.tgz#c380f5f909bf1b9b4428d028cd18d3b0efd6b52b" - integrity sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg== +elliptic@^6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -2924,22 +3616,22 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== -encodeurl@~1.0.2: +encodeurl@~1.0.1, encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= encoding@^0.1.11: - version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" - integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: - iconv-lite "~0.4.13" + iconv-lite "^0.6.2" end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" @@ -2965,6 +3657,23 @@ engine.io-client@~3.2.0: xmlhttprequest-ssl "~1.5.4" yeast "0.1.2" +engine.io-client@~3.4.0: + version "3.4.4" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.4.4.tgz#77d8003f502b0782dd792b073a4d2cf7ca5ab967" + integrity sha512-iU4CRr38Fecj8HoZEnFtm2EiKGbYZcPn3cHxqNGl/tmdWRf60KhK+9vE0JeSjgnlS/0oynEfLgKbT9ALpim0sQ== + dependencies: + component-emitter "~1.3.0" + component-inherit "0.0.3" + debug "~3.1.0" + engine.io-parser "~2.2.0" + has-cors "1.1.0" + indexof "0.0.1" + parseqs "0.0.6" + parseuri "0.0.6" + ws "~6.1.0" + xmlhttprequest-ssl "~1.5.4" + yeast "0.1.2" + engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6" @@ -2976,6 +3685,17 @@ engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: blob "0.0.5" has-binary2 "~1.0.2" +engine.io-parser@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.2.1.tgz#57ce5611d9370ee94f99641b589f94c97e4f5da7" + integrity sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg== + dependencies: + after "0.8.2" + arraybuffer.slice "~0.0.7" + base64-arraybuffer "0.1.4" + blob "0.0.5" + has-binary2 "~1.0.2" + engine.io@~3.2.0: version "3.2.1" resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.2.1.tgz#b60281c35484a70ee0351ea0ebff83ec8c9522a2" @@ -2988,16 +3708,19 @@ engine.io@~3.2.0: engine.io-parser "~2.1.0" ws "~3.3.1" -enhanced-resolve@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" - integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== +engine.io@~3.4.0: + version "3.4.2" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.4.2.tgz#8fc84ee00388e3e228645e0a7d3dfaeed5bd122c" + integrity sha512-b4Q85dFkGw+TqgytGPrGgACRUhsdKc9S9ErRAXpPGy/CXKs4tYoHDkvIRdsseAF7NjfVwjRFIn6KTnbw7LwJZg== dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.4.0" - tapable "^1.0.0" + accepts "~1.3.4" + base64id "2.0.0" + cookie "0.3.1" + debug "~4.1.0" + engine.io-parser "~2.2.0" + ws "^7.1.2" -enhanced-resolve@^4.1.0: +enhanced-resolve@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA== @@ -3006,11 +3729,25 @@ enhanced-resolve@^4.1.0: memory-fs "^0.5.0" tapable "^1.0.0" +enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" + integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + ent@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= +entities@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" + integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== + err-code@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" @@ -3030,26 +3767,45 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.5.1: - version "1.16.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.0.tgz#d3a26dc9c3283ac9750dca569586e976d9dcc06d" - integrity sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg== +es-abstract@^1.17.0-next.1, es-abstract@^1.17.2: + version "1.17.7" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" + integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g== dependencies: - es-to-primitive "^1.2.0" + es-to-primitive "^1.2.1" function-bind "^1.1.1" has "^1.0.3" - has-symbols "^1.0.0" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-inspect "^1.6.0" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-regex "^1.1.1" + object-inspect "^1.8.0" object-keys "^1.1.1" - string.prototype.trimleft "^2.1.0" - string.prototype.trimright "^2.1.0" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" -es-to-primitive@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== +es-abstract@^1.18.0-next.1: + version "1.18.0-next.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" + integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-negative-zero "^2.0.0" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" is-date-object "^1.0.1" @@ -3067,6 +3823,11 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -3077,6 +3838,18 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escodegen@^1.14.1: + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -3085,42 +3858,47 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -esprima@^4.0.0: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: - estraverse "^4.1.0" + estraverse "^5.2.0" -estraverse@^4.1.0, estraverse@^4.1.1: +estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== +estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -etag@~1.8.1: +etag@1.8.1, etag@^1.8.1, etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= eventemitter3@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" - integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== events@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" - integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== + version "3.2.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" + integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== eventsource@^1.0.7: version "1.0.7" @@ -3168,7 +3946,7 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -express@^4.17.1: +express@^4.15.2, express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== @@ -3257,26 +4035,45 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= -fast-deep-equal@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" - integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-glob@^3.1.1, fast-glob@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" + integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" -fast-json-stable-stringify@2.0.0, fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= +fast-json-stable-stringify@2.1.0, fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -fastparse@^1.1.1: +fastparse@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== +fastq@^1.6.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.9.0.tgz#e16a72f338eaca48e91b5c23593bcc2ef66b7947" + integrity sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w== + dependencies: + reusify "^1.0.4" + faye-websocket@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" @@ -3292,24 +4089,29 @@ faye-websocket@~0.11.1: websocket-driver ">=0.5.1" figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" - integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== figures@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec" - integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" -file-loader@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.2.0.tgz#5fb124d2369d7075d70a9a5abecd12e60a95215e" - integrity sha512-+xZnaK5R8kBJrHK0/6HRlrKNamvVS5rjyuju+rnyxRGuwUJwpAMsVzUl5dz6rK8brkzjV6JpcFNjp6NqV0g1OQ== +file-loader@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.0.0.tgz#97bbfaab7a2460c07bcbd72d3a6922407f67649f" + integrity sha512-/aMOAYEFXDdjG0wytpTL5YQLfZnnTmLNjn+AIrJ/6HVnTfDqLsVKUUwkDf4I4kgex36BvjuXEn/TX9B/1ESyqQ== dependencies: - loader-utils "^1.2.3" - schema-utils "^2.0.0" + loader-utils "^2.0.0" + schema-utils "^2.6.5" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== fileset@^2.0.3: version "2.0.3" @@ -3336,6 +4138,19 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +finalhandler@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" + integrity sha1-zgtoVbRYU+eRsvzGgARtiCU91/U= + dependencies: + debug "2.6.9" + encodeurl "~1.0.1" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.2" + statuses "~1.3.1" + unpipe "~1.0.0" + finalhandler@1.1.2, finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -3349,16 +4164,16 @@ finalhandler@1.1.2, finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -find-cache-dir@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.0.0.tgz#cd4b7dd97b7185b7e17dbfe2d6e4115ee3eeb8fc" - integrity sha512-t7ulV1fmbxh5G9l/492O1p5+EBbr3uwpt6odhFTMc+nWyhmbloe+ja9BZ8pIBtqFWhOmCWVjx+pTW4zDkFoclw== +find-cache-dir@3.3.1, find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== dependencies: commondir "^1.0.1" - make-dir "^3.0.0" + make-dir "^3.0.2" pkg-dir "^4.1.0" -find-cache-dir@^2.1.0: +find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== @@ -3374,7 +4189,7 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-up@^4.0.0: +find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -3382,10 +4197,10 @@ find-up@^4.0.0: locate-path "^5.0.0" path-exists "^4.0.0" -flatted@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" - integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== +flatted@^2.0.1, flatted@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== flush-write-stream@^1.0.0: version "1.1.1" @@ -3395,12 +4210,17 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -follow-redirects@^1.0.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.9.0.tgz#8d5bcdc65b7108fe1508649c79c12d732dcedb4f" - integrity sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A== +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== dependencies: - debug "^3.0.0" + debug "=3.1.0" + +follow-redirects@^1.0.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" + integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== for-in@^1.0.2: version "1.0.2" @@ -3433,7 +4253,7 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -fresh@0.5.2: +fresh@0.5.2, fresh@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= @@ -3446,22 +4266,33 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" -fs-access@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" - integrity sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o= +fs-extra@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" + integrity sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE= dependencies: - null-check "^1.0.0" + graceful-fs "^4.1.2" + jsonfile "^3.0.0" + universalify "^0.1.0" -fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== +fs-extra@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.2.tgz#f91704c53d1b461f893452b0c307d9997647ab6b" + integrity sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s= dependencies: graceful-fs "^4.1.2" jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-minipass@^1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" @@ -3469,6 +4300,13 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.6.0" +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" @@ -3485,52 +4323,47 @@ fs.realpath@^1.0.0: integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^1.2.7: - version "1.2.9" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" - integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== dependencies: + bindings "^1.5.0" nan "^2.12.1" - node-pre-gyp "^0.12.0" -fsevents@~2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.1.tgz#74c64e21df71721845d0c44fe54b7f56b82995a9" - integrity sha512-4FRPXWETxtigtJW/gxzEDsX1LVbPAM93VleB83kZB+ellqbHMkyt2aJfuzNLRvFPnGi6bcE5SvfxgbXPeKteJw== +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - genfun@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== +gensync@^1.0.0-beta.1: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-intrinsic@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.1.tgz#94a9768fcbdd0595a1c9273aacf4c89d075631be" + integrity sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -3558,29 +4391,17 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@~5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" - integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== +glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== dependencies: is-glob "^4.0.1" -glob@7.0.x: - version "7.0.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" - integrity sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo= - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@7.1.4: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== +glob@7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -3589,10 +4410,10 @@ glob@7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: - version "7.1.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.5.tgz#6714c69bee20f3c3e64c4dd905553e532b40cdc0" - integrity sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ== +glob@7.1.6, glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -3606,10 +4427,17 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== +globby@^11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" + integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" globby@^5.0.0: version "5.0.0" @@ -3634,22 +4462,17 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -globby@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" - integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= - dependencies: - array-union "^1.0.1" - dir-glob "^2.0.0" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" - integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== +guess-parser@^0.4.12: + version "0.4.22" + resolved "https://registry.yarnpkg.com/guess-parser/-/guess-parser-0.4.22.tgz#c26ab9e21b69bbc761960c5a1511476ae85428eb" + integrity sha512-KcUWZ5ACGaBM69SbqwVIuWGoSAgD+9iJnchR9j/IarVI1jHVeXv+bUXBIMeqVMSKt3zrn0Dgf9UpcOEpPBLbSg== + dependencies: + "@wessberg/ts-evaluator" "0.0.27" hamburgers@^1.1.3: version "1.1.3" @@ -3657,32 +4480,21 @@ hamburgers@^1.1.3: integrity sha512-qpfnJwZq6ATAGJEriwuyfVNgT++GG+o+3bBfPYF7F3WY452cYKbaYGUuqwhp+3kHLI6CL4VIBfj8bfbp90Lp1A== handle-thing@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" - integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ== - -handlebars@^4.1.2: - version "4.4.5" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.4.5.tgz#1b1f94f9bfe7379adda86a8b73fb570265a0dddd" - integrity sha512-0Ce31oWVB7YidkaTq33ZxEbN+UDxMMgThvCe8ptgQViymL5DPis9uLdTA13MiRPhgvqyxIegugrP97iK3JeBHg== - dependencies: - neo-async "^2.6.0" - optimist "^0.6.1" - source-map "^0.6.1" - optionalDependencies: - uglify-js "^3.1.4" + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= -har-validator@~5.1.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== dependencies: - ajv "^6.5.5" + ajv "^6.12.3" har-schema "^2.0.0" has-ansi@^2.0.0: @@ -3709,15 +4521,15 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= +has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== has-value@^0.3.1: version "0.3.1" @@ -3750,7 +4562,7 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.1, has@^1.0.3: +has@^1.0.0, has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== @@ -3758,12 +4570,13 @@ has@^1.0.1, has@^1.0.3: function-bind "^1.1.1" hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" @@ -3773,6 +4586,11 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -3782,10 +4600,17 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hosted-git-info@^2.1.4, hosted-git-info@^2.6.0, hosted-git-info@^2.7.1: - version "2.8.5" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" - integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== +hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +hosted-git-info@^3.0.2, hosted-git-info@^3.0.6: + version "3.0.7" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.7.tgz#a30727385ea85acfcee94e0aad9e368c792e036c" + integrity sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ== + dependencies: + lru-cache "^6.0.0" hpack.js@^2.1.6: version "2.1.6" @@ -3797,10 +4622,37 @@ hpack.js@^2.1.6: readable-stream "^2.0.1" wbuf "^1.1.0" -html-entities@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" - integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8= +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-comment-regex@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" + integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== + +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + +html-entities@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" + integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== http-cache-semantics@^3.8.1: version "3.8.1" @@ -3823,17 +4675,7 @@ http-errors@1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-errors@~1.7.2: +http-errors@1.7.3, http-errors@~1.7.2: version "1.7.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== @@ -3844,10 +4686,20 @@ http-errors@~1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -"http-parser-js@>=0.4.0 <0.4.11": - version "0.4.10" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" - integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" + integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== http-proxy-agent@^2.1.0: version "2.1.0" @@ -3857,7 +4709,7 @@ http-proxy-agent@^2.1.0: agent-base "4" debug "3.1.0" -http-proxy-middleware@^0.19.1: +http-proxy-middleware@0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== @@ -3867,10 +4719,21 @@ http-proxy-middleware@^0.19.1: lodash "^4.17.11" micromatch "^3.1.10" -http-proxy@^1.13.0, http-proxy@^1.17.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a" - integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ== +http-proxy-middleware@^1.0.0: + version "1.0.6" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-1.0.6.tgz#0618557722f450375d3796d701a8ac5407b3b94e" + integrity sha512-NyL6ZB6cVni7pl+/IT2W0ni5ME00xR0sN27AQZZrpKn1b+qRh+mLbBxIq9Cq1oGfmTc7BUq4HB77mxwCaxAYNg== + dependencies: + "@types/http-proxy" "^1.17.4" + http-proxy "^1.18.1" + is-glob "^4.0.1" + lodash "^4.17.20" + micromatch "^4.0.2" + +http-proxy@^1.17.0, http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: eventemitter3 "^4.0.0" follow-redirects "^1.0.0" @@ -3905,29 +4768,45 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -i18next-xhr-backend@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/i18next-xhr-backend/-/i18next-xhr-backend-2.0.1.tgz#7af735ee1b0c6d4ce49fa5756591040a0fba6db7" - integrity sha512-CP0XPjJsTE4hY1rM1KXFYo63Ib61EBLEcTvMDyJwr0vs9p/UTuA3ENCmzSs9+ghZgWSjdOigc0oUERHaxctbsQ== +i18next-xhr-backend@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/i18next-xhr-backend/-/i18next-xhr-backend-3.2.2.tgz#769124441461b085291f539d91864e3691199178" + integrity sha512-OtRf2Vo3IqAxsttQbpjYnmMML12IMB5e0fc5B7qKJFLScitYaXa1OhMX0n0X/3vrfFlpHL9Ro/H+ps4Ej2j7QQ== + dependencies: + "@babel/runtime" "^7.5.5" -i18next@^15.0.6: - version "15.1.3" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-15.1.3.tgz#f1984cbee0e3cb00cff9008b037264289ce8840a" - integrity sha512-hN2DZLoRSY2h/RYeNqth5XxV4N1ekKGSJDCGhFmmuXkOCAfK5CkUG4VBv9OBXrvf93xApv0KKBVrb0zJP31EKg== +i18next@^19.3.4: + version "19.8.4" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-19.8.4.tgz#447718f2a26319b8debdbcc6fbc1a9761be7316b" + integrity sha512-FfVPNWv+felJObeZ6DSXZkj9QM1Ivvh7NcFCgA8XPtJWHz0iXVa9BUy+QY8EPrCLE+vWgDfV/sc96BgXVo6HAA== dependencies: - "@babel/runtime" "^7.3.1" + "@babel/runtime" "^7.12.0" -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" + integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +icss-utils@^4.0.0, icss-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== + dependencies: + postcss "^7.0.14" + ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== iferr@^0.1.5: version "0.1.5" @@ -3941,10 +4820,10 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" -ignore@^3.3.5: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== image-size@~0.5.0: version "0.5.5" @@ -3956,6 +4835,11 @@ immediate@~3.0.5: resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= +immutable@^3: + version "3.8.2" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" + integrity sha1-wkOZUUVbs5kT2vKBN28VMOEErfM= + import-cwd@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" @@ -3991,6 +4875,16 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + indexof@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" @@ -4009,7 +4903,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -4024,28 +4918,33 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@1.3.5, ini@^1.3.4, ini@~1.3.0: +ini@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== -inquirer@6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.1.tgz#8bfb7a5ac02dac6ff641ac4c5ff17da112fcdb42" - integrity sha512-uxNHBeQhRXIoHWTSNYUFhQVrHYFThIt6IVo2fFmSe8aBwdR3/w6b58hJpiL/fMukFkvGzjg+hSxFtwvVmKZmXw== +ini@^1.3.4: + version "1.3.6" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.6.tgz#f1c46a2a93a253e7b3905115e74d527cd23061a1" + integrity sha512-IZUoxEjNjubzrmvzZU4lKP7OnYmX72XRl3sqkfJhBKweKi5rnGi5+IUdlj/H1M+Ip5JQ1WzaDMOBRY90Ajc5jg== + +inquirer@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" + integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg== dependencies: ansi-escapes "^4.2.1" - chalk "^2.4.2" + chalk "^3.0.0" cli-cursor "^3.1.0" cli-width "^2.0.0" external-editor "^3.0.3" figures "^3.0.0" lodash "^4.17.15" mute-stream "0.0.8" - run-async "^2.2.0" - rxjs "^6.4.0" + run-async "^2.4.0" + rxjs "^6.5.3" string-width "^4.1.0" - strip-ansi "^5.1.0" + strip-ansi "^6.0.0" through "^2.3.6" internal-ip@^4.3.0: @@ -4063,32 +4962,27 @@ invariant@^2.2.2: dependencies: loose-envify "^1.0.0" -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= -ip@^1.1.0, ip@^1.1.5: +ip@1.1.5, ip@^1.1.0, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= -ipaddr.js@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" - integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== - -ipaddr.js@^1.9.0: +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -is-absolute-url@^3.0.0: +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + +is-absolute-url@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== @@ -4108,15 +5002,22 @@ is-accessor-descriptor@^1.0.0: kind-of "^6.0.0" is-arguments@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" - integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" @@ -4136,10 +5037,34 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== +is-buffer@^2.0.2: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.1.4, is-callable@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" + integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== + +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + +is-core-module@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" is-data-descriptor@^0.1.4: version "0.1.4" @@ -4156,9 +5081,9 @@ is-data-descriptor@^1.0.0: kind-of "^6.0.0" is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== is-descriptor@^0.1.0: version "0.1.6" @@ -4183,6 +5108,11 @@ is-directory@^0.3.1: resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= +is-docker@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" + integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -4200,20 +5130,6 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" @@ -4238,6 +5154,23 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-negative-zero@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-number-like@^1.0.3: + version "1.0.8" + resolved "https://registry.yarnpkg.com/is-number-like/-/is-number-like-1.0.8.tgz#2e129620b50891042e44e9bbbb30593e75cfbbe3" + integrity sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA== + dependencies: + lodash.isfinite "^3.3.2" + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -4250,6 +5183,11 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" @@ -4300,29 +5238,41 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= +is-potential-custom-element-name@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" + integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= +is-regex@^1.0.4, is-regex@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== dependencies: - has "^1.0.1" + has-symbols "^1.0.1" + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-svg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" + integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== + dependencies: + html-comment-regex "^1.1.0" + is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== dependencies: - has-symbols "^1.0.0" + has-symbols "^1.0.1" is-typedarray@~1.0.0: version "1.0.0" @@ -4339,6 +5289,13 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= +is-wsl@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -4349,12 +5306,10 @@ isarray@2.0.1: resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= -isbinaryfile@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" - integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw== - dependencies: - buffer-alloc "^1.2.0" +isbinaryfile@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.6.tgz#edcb62b224e2b4710830b67498c8e4e5a4d2610b" + integrity sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg== isexe@^2.0.0: version "2.0.0" @@ -4379,9 +5334,9 @@ isstream@~0.1.2: integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= istanbul-api@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-2.1.6.tgz#d61702a9d1c66ad89d92e66d401e16b0bda4a35f" - integrity sha512-x0Eicp6KsShG1k1rMgBAi/1GgY7kFGEBwQpw3PXGEmu+rBcBNhqU8g2DgY9mlepAsLPzrzrbqSgCGANnki4POA== + version "2.1.7" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-2.1.7.tgz#82786b79f3b93d481349c7aa1e2c2b4eeb48c8a8" + integrity sha512-LYTOa2UrYFyJ/aSczZi/6lBykVMjCCvUmT64gOe+jPZFy4w6FYfPGqFT2IiQ2BxVHHDOvCD7qrIXb0EOh4uGWw== dependencies: async "^2.6.2" compare-versions "^3.4.0" @@ -4391,32 +5346,22 @@ istanbul-api@^2.1.6: istanbul-lib-instrument "^3.3.0" istanbul-lib-report "^2.0.8" istanbul-lib-source-maps "^3.0.6" - istanbul-reports "^2.2.4" + istanbul-reports "^2.2.5" js-yaml "^3.13.1" make-dir "^2.1.0" minimatch "^3.0.4" once "^1.4.0" -istanbul-instrumenter-loader@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.1.tgz#9957bd59252b373fae5c52b7b5188e6fde2a0949" - integrity sha512-a5SPObZgS0jB/ixaKSMdn6n/gXSrK2S6q/UfRJBT3e6gQmVjwZROTODQsYW5ZNwOu78hG62Y3fWlebaVOL0C+w== - dependencies: - convert-source-map "^1.5.0" - istanbul-lib-instrument "^1.7.3" - loader-utils "^1.1.0" - schema-utils "^0.3.0" - -istanbul-lib-coverage@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" - integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ== - istanbul-lib-coverage@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== +istanbul-lib-coverage@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== + istanbul-lib-hook@^2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz#c95695f383d4f8f60df1f04252a9550e15b5b133" @@ -4424,19 +5369,6 @@ istanbul-lib-hook@^2.0.7: dependencies: append-transform "^1.0.0" -istanbul-lib-instrument@^1.7.3: - version "1.10.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca" - integrity sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A== - dependencies: - babel-generator "^6.18.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - babylon "^6.18.0" - istanbul-lib-coverage "^1.2.1" - semver "^5.3.0" - istanbul-lib-instrument@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" @@ -4450,6 +5382,16 @@ istanbul-lib-instrument@^3.3.0: istanbul-lib-coverage "^2.0.5" semver "^6.0.0" +istanbul-lib-instrument@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + istanbul-lib-report@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" @@ -4470,27 +5412,27 @@ istanbul-lib-source-maps@^3.0.6: rimraf "^2.6.3" source-map "^0.6.1" -istanbul-reports@^2.2.4: - version "2.2.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af" - integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA== +istanbul-reports@^2.2.5: + version "2.2.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931" + integrity sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg== dependencies: - handlebars "^4.1.2" + html-escaper "^2.0.0" -jasmine-core@^3.3, jasmine-core@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.5.0.tgz#132c23e645af96d85c8bca13c8758b18429fc1e4" - integrity sha512-nCeAiw37MIMA9w9IXso7bRaLl+c/ef3wnxsoSAlYrzS+Ot0zTG6nU8G/cIfGkqpkjX2wNaIW9RFG0TwIFnG6bA== +jasmine-core@^3.5.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.6.0.tgz#491f3bb23941799c353ceb7a45b38a950ebc5a20" + integrity sha512-8uQYa7zJN8hq9z+g8z1bqCfdC8eoDAeVnM5sfqs7KHv9/ifoJ500m018fpFc7RDaO6SWCLCXwo/wPSNcdYTgcw== jasmine-core@~2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.8.0.tgz#bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e" integrity sha1-vMl5rh+f0FcB5F5S5l06XWPxok4= -jasmine-core@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.4.0.tgz#2a74618e966026530c3518f03e9f845d26473ce3" - integrity sha512-HU/YxV4i6GcmiH4duATwAbJQMlE0MsDIR5XmSVxURxKHn3aGAdbY1/ZJFmVRbKtnLwIxxMJD7gYaPsypcbYimg== +jasmine-core@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.5.0.tgz#132c23e645af96d85c8bca13c8758b18429fc1e4" + integrity sha512-nCeAiw37MIMA9w9IXso7bRaLl+c/ef3wnxsoSAlYrzS+Ot0zTG6nU8G/cIfGkqpkjX2wNaIW9RFG0TwIFnG6bA== jasmine-spec-reporter@~4.2.1: version "4.2.1" @@ -4508,46 +5450,37 @@ jasmine@2.8.0: glob "^7.0.6" jasmine-core "~2.8.0" -jasmine@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-3.5.0.tgz#7101eabfd043a1fc82ac24e0ab6ec56081357f9e" - integrity sha512-DYypSryORqzsGoMazemIHUfMkXM7I7easFaxAvNM3Mr6Xz3Fy36TupTrAOxZWN8MVKEU5xECv22J4tUQf3uBzQ== - dependencies: - glob "^7.1.4" - jasmine-core "~3.5.0" - jasminewd2@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.2.0.tgz#e37cf0b17f199cce23bea71b2039395246b4ec4e" integrity sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4= -jest-worker@24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" - integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== +jest-worker@25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.1.0.tgz#75d038bad6fdf58eba0d2ec1835856c497e3907a" + integrity sha512-ZHhHtlxOWSxCoNOKHGbiLzXnl42ga9CxDr27H36Qn+15pQZd3R/F24jrmjDelw9j/iHUIWMWs08/u2QN50HHOg== dependencies: merge-stream "^2.0.0" - supports-color "^6.1.0" + supports-color "^7.0.0" -js-levenshtein@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" - integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== +jest-worker@^26.0.0: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= - -js-yaml@^3.13.0, js-yaml@^3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -4557,10 +5490,37 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= +jsdom@^16.4.0: + version "16.4.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" + integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w== + dependencies: + abab "^2.0.3" + acorn "^7.1.1" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.2.0" + data-urls "^2.0.0" + decimal.js "^10.2.0" + domexception "^2.0.1" + escodegen "^1.14.1" + html-encoding-sniffer "^2.0.1" + is-potential-custom-element-name "^1.0.0" + nwsapi "^2.2.0" + parse5 "5.1.1" + request "^2.88.2" + request-promise-native "^1.0.8" + saxes "^5.0.0" + symbol-tree "^3.2.4" + tough-cookie "^3.0.1" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + ws "^7.2.3" + xml-name-validator "^3.0.0" jsesc@^2.5.1: version "2.5.2" @@ -4577,10 +5537,10 @@ json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-bet resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" @@ -4609,12 +5569,19 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" - integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== +json5@^2.1.0, json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== dependencies: - minimist "^1.2.0" + minimist "^1.2.5" + +jsonfile@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" + integrity sha1-pezG9l9T9mLEQVx2daAzHQmS7GY= + optionalDependencies: + graceful-fs "^4.1.6" jsonfile@^4.0.0: version "4.0.0" @@ -4639,42 +5606,41 @@ jsprim@^1.2.2: verror "1.10.0" jszip@^3.1.3: - version "3.2.2" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.2.2.tgz#b143816df7e106a9597a94c77493385adca5bd1d" - integrity sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA== + version "3.5.0" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.5.0.tgz#b4fd1f368245346658e781fec9675802489e15f6" + integrity sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA== dependencies: lie "~3.3.0" pako "~1.0.2" readable-stream "~2.3.6" set-immediate-shim "~1.0.1" -karma-chrome-launcher@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz#cf1b9d07136cc18fe239327d24654c3dbc368acf" - integrity sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w== +karma-chrome-launcher@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz#805a586799a4d05f4e54f72a204979f3f3066738" + integrity sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg== dependencies: - fs-access "^1.0.0" which "^1.2.1" -karma-coverage-istanbul-reporter@~2.0.1: - version "2.0.6" - resolved "https://registry.yarnpkg.com/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.0.6.tgz#7b6e9c88781447bb87aa6ac24bf74b93e558adc3" - integrity sha512-WFh77RI8bMIKdOvI/1/IBmgnM+Q7NOLhnwG91QJrM8lW+CIXCjTzhhUsT/svLvAkLmR10uWY4RyYbHMLkTglvg== +karma-coverage-istanbul-reporter@~2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.1.1.tgz#37a775fbfbb3cbe98cebf19605c94c6277c3b88a" + integrity sha512-CH8lTi8+kKXGvrhy94+EkEMldLCiUA0xMOiL31vvli9qK0T+qcXJAwWBRVJWnVWxYkTmyWar8lPz63dxX6/z1A== dependencies: istanbul-api "^2.1.6" minimatch "^3.0.4" -karma-jasmine-html-reporter@^1.4.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.4.2.tgz#16d100fd701271192d27fd28ddc90b710ad36fff" - integrity sha512-7g0gPj8+9JepCNJR9WjDyQ2RkZ375jpdurYQyAYv8PorUCadepl8vrD6LmMqOGcM17cnrynBawQYZHaumgDjBw== +karma-jasmine-html-reporter@^1.4.2: + version "1.5.4" + resolved "https://registry.yarnpkg.com/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.5.4.tgz#669f33d694d88fce1b0ccfda57111de716cb0192" + integrity sha512-PtilRLno5O6wH3lDihRnz0Ba8oSn0YUJqKjjux1peoYGwo0AQqrWRbdWk/RLzcGlb+onTyXAnHl6M+Hu3UxG/Q== -karma-jasmine@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-2.0.1.tgz#26e3e31f2faf272dd80ebb0e1898914cc3a19763" - integrity sha512-iuC0hmr9b+SNn1DaUD2QEYtUxkS1J+bSJSn7ejdEexs7P8EYvA1CWkEdrDQ+8jVH3AgWlCNwjYsT1chjcNW9lA== +karma-jasmine@~3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-3.0.3.tgz#751ae15d84d16e9148d0af42787fc12f5959f66d" + integrity sha512-80iBR8/hLFY2Uw3S2GG6EndWtMCGMJjrCYNwYROWsJFVTjWrRSsLqcA2ye+U3ygW5sjOQo8f+78L8cGUxjC/+A== dependencies: - jasmine-core "^3.3" + jasmine-core "^3.5.0" karma-source-map-support@1.4.0: version "1.4.0" @@ -4683,38 +5649,35 @@ karma-source-map-support@1.4.0: dependencies: source-map-support "^0.5.5" -karma@~4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/karma/-/karma-4.1.0.tgz#d07387c9743a575b40faf73e8a3eb5421c2193e1" - integrity sha512-xckiDqyNi512U4dXGOOSyLKPwek6X/vUizSy2f3geYevbLj+UIdvNwbn7IwfUIL2g1GXEPWt/87qFD1fBbl/Uw== +karma@~5.0.0: + version "5.0.9" + resolved "https://registry.yarnpkg.com/karma/-/karma-5.0.9.tgz#11a119b0c763a806fdc471b40c594a2240b5ca13" + integrity sha512-dUA5z7Lo7G4FRSe1ZAXqOINEEWxmCjDBbfRBmU/wYlSMwxUQJP/tEEP90yJt3Uqo03s9rCgVnxtlfq+uDhxSPg== dependencies: - bluebird "^3.3.0" - body-parser "^1.16.1" - braces "^2.3.2" - chokidar "^2.0.3" - colors "^1.1.0" - connect "^3.6.0" - core-js "^2.2.0" + body-parser "^1.19.0" + braces "^3.0.2" + chokidar "^3.0.0" + colors "^1.4.0" + connect "^3.7.0" di "^0.0.1" - dom-serialize "^2.2.0" - flatted "^2.0.0" - glob "^7.1.1" - graceful-fs "^4.1.2" - http-proxy "^1.13.0" - isbinaryfile "^3.0.0" - lodash "^4.17.11" - log4js "^4.0.0" - mime "^2.3.1" - minimatch "^3.0.2" - optimist "^0.6.1" - qjobs "^1.1.4" - range-parser "^1.2.0" - rimraf "^2.6.0" - safe-buffer "^5.0.1" - socket.io "2.1.1" + dom-serialize "^2.2.1" + flatted "^2.0.2" + glob "^7.1.6" + graceful-fs "^4.2.4" + http-proxy "^1.18.1" + isbinaryfile "^4.0.6" + lodash "^4.17.15" + log4js "^6.2.1" + mime "^2.4.5" + minimatch "^3.0.4" + qjobs "^1.2.0" + range-parser "^1.2.1" + rimraf "^3.0.2" + socket.io "^2.3.0" source-map "^0.6.1" - tmp "0.0.33" - useragent "2.3.0" + tmp "0.2.1" + ua-parser-js "0.7.21" + yargs "^15.3.1" killable@^1.0.1: version "1.0.1" @@ -4741,16 +5704,9 @@ kind-of@^5.0.0: integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== - -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.0.0" + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== less-loader@5.0.0: version "5.0.0" @@ -4761,26 +5717,47 @@ less-loader@5.0.0: loader-utils "^1.1.0" pify "^4.0.1" -less@3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/less/-/less-3.9.0.tgz#b7511c43f37cf57dc87dffd9883ec121289b1474" - integrity sha512-31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w== +less@3.11.3: + version "3.11.3" + resolved "https://registry.yarnpkg.com/less/-/less-3.11.3.tgz#2d853954fcfe0169a8af869620bcaa16563dcc1c" + integrity sha512-VkZiTDdtNEzXA3LgjQiC3D7/ejleBPFVvq+aRI9mIj+Zhmif5TvFPM244bT4rzkvOCvJ9q4zAztok1M7Nygagw== dependencies: clone "^2.1.2" + tslib "^1.10.0" optionalDependencies: errno "^0.1.1" graceful-fs "^4.1.2" image-size "~0.5.0" + make-dir "^2.1.0" mime "^1.4.1" - mkdirp "^0.5.0" promise "^7.1.1" request "^2.83.0" source-map "~0.6.0" -license-webpack-plugin@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/license-webpack-plugin/-/license-webpack-plugin-2.1.2.tgz#63f7c571537a450ec47dc98f5d5ffdbca7b3b14f" - integrity sha512-7poZHRla+ae0eEButlwMrPpkXyhNVBf2EHePYWT0jyLnI6311/OXJkTI2sOIRungRpQgU2oDMpro5bSFPT5F0A== +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levenary@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" + integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== + dependencies: + leven "^3.1.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +license-webpack-plugin@2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/license-webpack-plugin/-/license-webpack-plugin-2.1.4.tgz#c5529a4bb87cc9b4489b486d054ba7cae43a554e" + integrity sha512-1Xq72fmPbTg5KofXs+yI5L4QqPFjQ6mZxoeI6D7gfiEDOtaEIk6PGrdLaej90bpDqKNHNxlQ/MW4tMAL6xMPJQ== dependencies: "@types/webpack-sources" "^0.1.5" webpack-sources "^1.2.0" @@ -4792,20 +5769,44 @@ lie@~3.3.0: dependencies: immediate "~3.0.5" +limiter@^1.0.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/limiter/-/limiter-1.1.5.tgz#8f92a25b3b16c6131293a0cc834b4a838a2aa7c2" + integrity sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA== + loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@1.2.3, loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" - integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== +loader-utils@2.0.0, loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== dependencies: big.js "^5.2.2" - emojis-list "^2.0.0" + emojis-list "^3.0.0" + json5 "^2.1.2" + +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" json5 "^1.0.1" +localtunnel@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/localtunnel/-/localtunnel-2.0.0.tgz#2ea71174fa80e34cce91b2a7ce416e6a57d9ff7c" + integrity sha512-g6E0aLgYYDvQDxIjIXkgJo2+pHj3sGg4Wz/XP3h2KtZnRsWPbOQY+hw1H8Z91jep998fkcVE9l+kghO+97vllg== + dependencies: + axios "0.19.0" + debug "4.1.1" + openurl "1.1.1" + yargs "13.3.0" + locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -4826,26 +5827,53 @@ lodash.clonedeep@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= -lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +lodash.isfinite@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz#fb89b65a9a80281833f0b7478b3a5104f898ebb3" + integrity sha1-+4m2WpqAKBgz8LdHizpRBPiY67M= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= -log4js@^4.0.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-4.5.1.tgz#e543625e97d9e6f3e6e7c9fc196dd6ab2cae30b5" - integrity sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw== +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +log-symbols@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== dependencies: - date-format "^2.0.0" + chalk "^2.4.2" + +log4js@^6.2.1: + version "6.3.0" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.3.0.tgz#10dfafbb434351a3e30277a00b9879446f715bcb" + integrity sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw== + dependencies: + date-format "^3.0.0" debug "^4.1.1" - flatted "^2.0.0" + flatted "^2.0.1" rfdc "^1.1.4" - streamroller "^1.0.6" + streamroller "^2.2.4" -loglevel@^1.6.3: - version "1.6.4" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.4.tgz#f408f4f006db8354d0577dcf6d33485b3cb90d56" - integrity sha512-p0b6mOGKcGa+7nnmKbpzR6qloPbrgLcnio++E+14Vo/XffOGwZtRpUhr8dTH/x2oCMmEoIU0Zwm3ZauhvYD17g== +loglevel@^1.6.8: + version "1.7.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" + integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== loose-envify@^1.0.0: version "1.4.0" @@ -4854,14 +5882,6 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -lru-cache@4.1.x: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -4869,17 +5889,17 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -magic-string@0.25.3: - version "0.25.3" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.3.tgz#34b8d2a2c7fec9d9bdf9929a3fd81d271ef35be9" - integrity sha512-6QK0OpF/phMz0Q2AxILkX2mFhi7m+WMwTRg0LQKq/WBB0cDP4rYH3Wp4/d3OTXlrPLVJT/RFqj8tFeAR4nk8AA== +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: - sourcemap-codec "^1.4.4" + yallist "^4.0.0" -magic-string@^0.25.0: - version "0.25.4" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.4.tgz#325b8a0a79fc423db109b77fd5a19183b7ba5143" - integrity sha512-oycWO9nEVAP2RVPbIoDoA4Y7LFIJ3xRYov93gAyJhZkET1tNuB0u7uWkZS2LpBWTJUWnmau/To8ECWRC+jKNfw== +magic-string@0.25.7, magic-string@^0.25.0: + version "0.25.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== dependencies: sourcemap-codec "^1.4.4" @@ -4891,22 +5911,22 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -make-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.0.tgz#1b5f39f6b9270ed33f9f054c5c0f84304989f801" - integrity sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw== +make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" make-error@^1.1.1: - version "1.3.5" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" - integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== make-fetch-happen@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.1.tgz#fac65400ab5f7a9c001862a3e9b0f417f0840175" - integrity sha512-b4dfaMvUDR67zxUq1+GN7Ke9rH5WvGRmoHuMH7l+gmUCR2tCXFP6mpeJ9Dp+jB6z8mShRopSf1vLRBhRs8Cu5w== + version "5.0.2" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" + integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag== dependencies: agentkeepalive "^3.4.1" cacache "^12.0.0" @@ -4925,13 +5945,6 @@ mamacro@^0.0.3: resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -4953,21 +5966,22 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - -memory-fs@^0.4.0, memory-fs@^0.4.1: +memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= @@ -4988,11 +6002,23 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= +merge-source-map@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" + integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== + dependencies: + source-map "^0.6.1" + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -5017,6 +6043,14 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" +micromatch@^4.0.0, micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -5025,42 +6059,47 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.40.0: - version "1.40.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" - integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== -"mime-db@>= 1.40.0 < 2": - version "1.42.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac" - integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ== +"mime-db@>= 1.43.0 < 2": + version "1.45.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" + integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.24" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" - integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== dependencies: - mime-db "1.40.0" + mime-db "1.44.0" + +mime@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== mime@1.6.0, mime@^1.4.1: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.3.1, mime@^2.4.2, mime@^2.4.4: - version "2.4.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" - integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== +mime@^2.4.4, mime@^2.4.5: + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== -mimic-fn@^2.0.0, mimic-fn@^2.1.0: +mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mini-css-extract-plugin@0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.0.tgz#81d41ec4fe58c713a96ad7c723cdb2d0bd4d70e1" - integrity sha512-MNpRGbNA52q6U92i0qbVpQNsgk7LExy41MdAlG84FeytfDOtRIf/mCHdEgG8rpTKOaNKiqUnZdlptF469hxqOw== +mini-css-extract-plugin@0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz#47f2cf07aa165ab35733b1fc97d4c46c0564339e" + integrity sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A== dependencies: loader-utils "^1.1.0" normalize-url "1.9.1" @@ -5084,20 +6123,31 @@ minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= +minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= +minipass-pipeline@^1.2.2: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: version "2.9.0" @@ -5107,6 +6157,13 @@ minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: safe-buffer "^5.1.2" yallist "^3.0.0" +minipass@^3.0.0, minipass@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" + integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + dependencies: + yallist "^4.0.0" + minizlib@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" @@ -5114,6 +6171,14 @@ minizlib@^1.2.1: dependencies: minipass "^2.9.0" +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -5130,6 +6195,11 @@ mississippi@^3.0.0: stream-each "^1.1.0" through2 "^2.0.0" +mitt@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mitt/-/mitt-1.2.0.tgz#cb24e6569c806e31bd4e3995787fe38a04fdf90d" + integrity sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw== + mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" @@ -5138,12 +6208,17 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= +mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1, mkdirp@~0.5.x: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: - minimist "0.0.8" + minimist "^1.2.5" + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== move-concurrently@^1.0.1: version "1.0.1" @@ -5167,11 +6242,16 @@ ms@2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -ms@^2.0.0, ms@^2.1.1: +ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@^2.0.0, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + multicast-dns-service-types@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" @@ -5191,9 +6271,9 @@ mute-stream@0.0.8: integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== nan@^2.12.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== nanomatch@^1.2.9: version "1.2.13" @@ -5212,30 +6292,22 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -needle@^2.2.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" - integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== +neo-async@^2.5.0, neo-async@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== ngx-infinite-scroll@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ngx-infinite-scroll/-/ngx-infinite-scroll-8.0.1.tgz#95b9d7e51f8ed5ee6821889b4e4e3cfe8ddb5838" - integrity sha512-YpgkTPDNT7UCEp0GRX178V1nF+M2slCPJ2TX3CpvPZb5AR99JYwj/fNivcue5lN51oUaTySEG27qjVU73vKhjw== + version "8.0.2" + resolved "https://registry.yarnpkg.com/ngx-infinite-scroll/-/ngx-infinite-scroll-8.0.2.tgz#ab527962f179b00f7b57c37cc0c8aba1bf88b131" + integrity sha512-+r748h8CAs0AZQXQw4eIE0bBH2xF+kBcqhJ/q3VG4f6p0qH+4XyhUlPkm3UGMke2Xe00V+RuWbolqmP7DoOGdw== dependencies: + "@scarf/scarf" "0.1.5" opencollective-postinstall "^2.0.2" nice-try@^1.0.4: @@ -5244,18 +6316,18 @@ nice-try@^1.0.4: integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== node-fetch-npm@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" - integrity sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw== + version "2.0.4" + resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4" + integrity sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg== dependencies: encoding "^0.1.11" json-parse-better-errors "^1.0.0" safe-buffer "^5.1.1" -node-forge@0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" - integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== node-libs-browser@^2.2.1: version "2.2.1" @@ -5286,36 +6358,10 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" -node-pre-gyp@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" - integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -node-releases@^1.1.25, node-releases@^1.1.38: - version "1.1.39" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.39.tgz#c1011f30343aff5b633153b10ff691d278d08e8d" - integrity sha512-8MRC/ErwNCHOlAFycy9OPca46fQYUjbJRDcZTHVWIGXIjYLM73k70vv3WkYutVnM4cCo4hE0MqBVVZjP6vjISA== - dependencies: - semver "^6.3.0" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" +node-releases@^1.1.67: + version "1.1.67" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.67.tgz#28ebfcccd0baa6aad8e8d4d8fe4cbc49ae239c12" + integrity sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg== normalize-package-data@^2.0.0, normalize-package-data@^2.4.0: version "2.5.0" @@ -5354,19 +6400,37 @@ normalize-url@1.9.1: query-string "^4.1.0" sort-keys "^1.0.0" +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + npm-bundled@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" - integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== + version "1.1.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" -npm-package-arg@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.0.tgz#15ae1e2758a5027efb4c250554b85a737db7fcc1" - integrity sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA== +npm-install-checks@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-4.0.0.tgz#a37facc763a2fde0497ef2c6d0ac7c3fbe00d7b4" + integrity sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w== dependencies: - hosted-git-info "^2.6.0" - osenv "^0.1.5" - semver "^5.5.0" + semver "^7.1.1" + +npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-package-arg@8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.0.1.tgz#9d76f8d7667b2373ffda60bb801a27ef71e3e270" + integrity sha512-/h5Fm6a/exByzFSTm7jAyHbgOqErl9qSNJDQF32Si/ZzgwT2TERVxRxn3Jurw1wflgyVVAxnFR4fRHPM7y1ClQ== + dependencies: + hosted-git-info "^3.0.2" + semver "^7.0.0" validate-npm-package-name "^3.0.0" npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: @@ -5379,15 +6443,34 @@ npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: semver "^5.6.0" validate-npm-package-name "^3.0.0" -npm-packlist@^1.1.12, npm-packlist@^1.1.6: - version "1.4.6" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.6.tgz#53ba3ed11f8523079f1457376dd379ee4ea42ff4" - integrity sha512-u65uQdb+qwtGvEJh/DgQgW1Xg7sqeNbmxYyrvlNznaVTjV3E5P6F/EFjM+BVHXl7JJlsdG8A64M0XI8FI/IOlg== +npm-package-arg@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.0.tgz#b5f6319418c3246a1c38e1a8fbaa06231bc5308f" + integrity sha512-/ep6QDxBkm9HvOhOg0heitSd7JHA1U7y1qhhlRlteYYAi9Pdb/ZV7FW5aHpkrpM8+P+4p/jjR8zCyKPBMBjSig== + dependencies: + hosted-git-info "^3.0.6" + semver "^7.0.0" + validate-npm-package-name "^3.0.0" + +npm-packlist@^1.1.12: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + +npm-pick-manifest@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.0.0.tgz#bfde7abe95f2670aed1629a3c18245ccb3cc2eb8" + integrity sha512-PdJpXMvjqt4nftNEDpCgjBUF8yI3Q3MyuAmVB9nemnnCg32F4BPL/JFBfdj8DubgHCYUFQhtLWmBPvdsFtjWMg== + dependencies: + npm-install-checks "^4.0.0" + npm-package-arg "^8.0.0" + semver "^7.0.0" -npm-pick-manifest@3.0.2: +npm-pick-manifest@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== @@ -5396,19 +6479,10 @@ npm-pick-manifest@3.0.2: npm-package-arg "^6.0.0" semver "^5.4.1" -npm-pick-manifest@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-2.2.3.tgz#32111d2a9562638bb2c8f2bf27f7f3092c8fae40" - integrity sha512-+IluBC5K201+gRU85vFlUwX3PFShZAbAgDNp2ewJdWMVSppdo/Zih0ul2Ecky/X7b51J7LrrUAP+XOmOCvYZqA== - dependencies: - figgy-pudding "^3.5.1" - npm-package-arg "^6.0.0" - semver "^5.4.1" - npm-registry-fetch@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-4.0.2.tgz#2b1434f93ccbe6b6385f8e45f45db93e16921d7a" - integrity sha512-Z0IFtPEozNdeZRPh3aHHxdG+ZRpzcbQaJLthsm3VhNf6DScicTFRHZzK82u8RsJUsUHkX+QH/zcB/5pmd20H4A== + version "4.0.7" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-4.0.7.tgz#57951bf6541e0246b34c9f9a38ab73607c9449d7" + integrity sha512-cny9v0+Mq6Tjz+e0erFAB+RYJ/AVGzkjnISiobqP8OWj9c9FLoZZu8/SPSKJWE17F1tk4018wfjV+ZbIbqC7fQ== dependencies: JSONStream "^1.3.4" bluebird "^3.5.1" @@ -5425,30 +6499,22 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== +nth-check@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -null-check@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" - integrity sha1-l33/1xdgErnsMNKjnbXPcqBDnt0= + boolbase "~1.0.0" num2fraction@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== oauth-sign@~0.9.0: version "0.9.0" @@ -5474,21 +6540,29 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" - integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== +object-inspect@^1.8.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== object-is@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" - integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY= + version "1.1.4" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.4.tgz#63d6c83c00a43f4cbc9434eb9757c8a5b8565068" + integrity sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: +object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== +object-path@^0.11.5: + version "0.11.5" + resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.5.tgz#d4e3cf19601a5140a55a16ad712019a9c50b577a" + integrity sha512-jgSbThcoR/s+XumvGMTMf81QVBmah+/Q7K7YduKeKVWL7N111unR2d6pZZarSk6kY/caeNxUDyxOvMWyzoU2eg== + object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -5496,23 +6570,24 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== +object.assign@^4.1.0, object.assign@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" -object.getownpropertydescriptors@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" - integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz#0dfda8d108074d9c563e80490c883b6661091544" + integrity sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng== dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.1" + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" object.pick@^1.3.0: version "1.3.0" @@ -5521,6 +6596,16 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" +object.values@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.2.tgz#7a2015e06fcb0f546bd652486ce8583a4731c731" + integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + has "^1.0.3" + obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" @@ -5546,23 +6631,36 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: wrappy "1" onetime@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" - integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" -open@6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" - integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== +open@7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/open/-/open-7.0.3.tgz#db551a1af9c7ab4c7af664139930826138531c48" + integrity sha512-sP2ru2v0P290WFfv49Ap8MF6PkzGNnGlAwHweB4WR4mr5d2d0woiCluUeJ218w7/+PmoBy9JmYgD5A4mLcWOFA== dependencies: - is-wsl "^1.1.0" + is-docker "^2.0.0" + is-wsl "^2.1.1" opencollective-postinstall@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89" - integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" + integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== + +openurl@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/openurl/-/openurl-1.1.1.tgz#3875b4b0ef7a52c156f0db41d4609dbb0f94b387" + integrity sha1-OHW0sO96UsFW8NtB1GCduw+Us4c= + +opn@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c" + integrity sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g== + dependencies: + is-wsl "^1.1.0" opn@^5.5.0: version "5.5.0" @@ -5571,13 +6669,31 @@ opn@^5.5.0: dependencies: is-wsl "^1.1.0" -optimist@^0.6.1, optimist@~0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +ora@4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/ora/-/ora-4.0.3.tgz#752a1b7b4be4825546a7a3d59256fa523b6b6d05" + integrity sha512-fnDebVFyz309A73cqCipVL1fBZewq4vwgSHfxh43vVy31mbyoQ8sCH3Oeaog/owYOs/lLlGVPCISQonTneg6Pg== + dependencies: + chalk "^3.0.0" + cli-cursor "^3.1.0" + cli-spinners "^2.2.0" + is-interactive "^1.0.0" + log-symbols "^3.0.0" + mute-stream "0.0.8" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" original@^1.0.0: version "1.0.2" @@ -5596,21 +6712,12 @@ os-homedir@^1.0.0: resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= -os-locale@^3.0.0, os-locale@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@^0.1.4, osenv@^0.1.5: +osenv@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== @@ -5618,28 +6725,25 @@ osenv@^0.1.4, osenv@^0.1.5: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= - p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" - integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== +p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" +p-limit@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -5659,6 +6763,20 @@ p-map@^2.0.0: resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + p-retry@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" @@ -5671,13 +6789,14 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pacote@9.5.5: - version "9.5.5" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.5.5.tgz#63355a393614c3424e735820c3731e2cbbedaeeb" - integrity sha512-jAEP+Nqj4kyMWyNpfTU/Whx1jA7jEc5cCOlurm0/0oL+v8TAp1QSsK83N7bYe+2bEdFzMAtPG5TBebjzzGV0cA== +pacote@9.5.12: + version "9.5.12" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.5.12.tgz#1e11dd7a8d736bcc36b375a9804d41bb0377bf66" + integrity sha512-BUIj/4kKbwWg4RtnBncXPJd15piFSVNpTzY0rysSr3VnMowTYgkGKcaHrbReepAkjTr8lH2CVWRi58Spg2CicQ== dependencies: bluebird "^3.5.3" cacache "^12.0.2" + chownr "^1.1.2" figgy-pudding "^3.5.1" get-stream "^4.1.0" glob "^7.1.3" @@ -5689,9 +6808,10 @@ pacote@9.5.5: mississippi "^3.0.0" mkdirp "^0.5.1" normalize-package-data "^2.4.0" + npm-normalize-package-bin "^1.0.0" npm-package-arg "^6.1.0" npm-packlist "^1.1.12" - npm-pick-manifest "^2.2.3" + npm-pick-manifest "^3.0.0" npm-registry-fetch "^4.0.0" osenv "^0.1.5" promise-inflight "^1.0.1" @@ -5701,14 +6821,14 @@ pacote@9.5.5: safe-buffer "^5.1.2" semver "^5.6.0" ssri "^6.0.1" - tar "^4.4.8" + tar "^4.4.10" unique-filename "^1.1.1" which "^1.3.1" pako@~1.0.2, pako@~1.0.5: - version "1.0.10" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" - integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== parallel-transform@^1.1.0: version "1.2.0" @@ -5719,14 +6839,13 @@ parallel-transform@^1.1.0: inherits "^2.0.3" readable-stream "^2.1.5" -parse-asn1@^5.0.0: - version "5.1.5" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" - integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== dependencies: - asn1.js "^4.0.0" + asn1.js "^5.2.0" browserify-aes "^1.0.0" - create-hash "^1.1.0" evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" safe-buffer "^5.1.1" @@ -5739,30 +6858,30 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse5-html-rewriting-stream@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-5.1.0.tgz#63f92c958764aea8cbe3aa68f2e5895c32068ab8" - integrity sha512-hZlaOTHJs4dpC5yFHnOSEMh26ErsqTsLzxKqkuRcUqtiu0kMsBQ9pkgANkECDyoBUhJ3+hvb2DPLsyqbtcS61Q== +parse5-html-rewriting-stream@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-5.1.1.tgz#fc18570ba0d09b5091250956d1c3f716ef0a07b7" + integrity sha512-rbXBeMlJ3pk3tKxLKAUaqvQTZM5KTohXmZvYEv2gU9sQC70w65BxPsh3PVVnwiVNCnNYDtNZRqCKmiMlfdG07Q== dependencies: - parse5 "^5.1.0" - parse5-sax-parser "^5.1.0" + parse5 "^5.1.1" + parse5-sax-parser "^5.1.1" -parse5-sax-parser@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse5-sax-parser/-/parse5-sax-parser-5.1.0.tgz#ec234d23223a8054a74ff173aa3dc2da74c5bbd9" - integrity sha512-VEhdEDhBkoSILPmsZ96SoIIUow3hZbtgQsqXw7r8DxxnqsCIO0fwkT9mWgBcf9SPjVUh92liuEprHrrYzXBPWQ== +parse5-sax-parser@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5-sax-parser/-/parse5-sax-parser-5.1.1.tgz#02834a9d08b23ea2d99584841c38be09d5247a15" + integrity sha512-9HIh6zd7bF1NJe95LPCUC311CekdOi55R+HWXNCsGY6053DWaMijVKOv1oPvdvPTvFicifZyimBVJ6/qvG039Q== dependencies: - parse5 "^5.1.0" + parse5 "^5.1.1" parse5@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== -parse5@^5.0.0, parse5@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" - integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== +parse5@5.1.1, parse5@^5.0.0, parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== parseqs@0.0.5: version "0.0.5" @@ -5771,6 +6890,11 @@ parseqs@0.0.5: dependencies: better-assert "~1.0.0" +parseqs@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.6.tgz#8e4bb5a19d1cdc844a08ac974d34e273afa670d5" + integrity sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w== + parseuri@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" @@ -5778,6 +6902,11 @@ parseuri@0.0.5: dependencies: better-assert "~1.0.0" +parseuri@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.6.tgz#e1496e829e3ac2ff47f39a4dd044b32823c4a25a" + integrity sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow== + parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -5833,17 +6962,15 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== pbkdf2@^3.0.3: - version "3.0.17" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" - integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -5856,21 +6983,16 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4: - version "2.0.7" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6" - integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA== +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" @@ -5881,111 +7003,418 @@ pinkie-promise@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= dependencies: - pinkie "^2.0.0" + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +portfinder@^1.0.26: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + +portscanner@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/portscanner/-/portscanner-2.1.1.tgz#eabb409e4de24950f5a2a516d35ae769343fbb96" + integrity sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y= + dependencies: + async "1.5.2" + is-number-like "^1.0.3" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-calc@^7.0.1: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" + integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== + dependencies: + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== + dependencies: + postcss "^7.0.0" + +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== + dependencies: + postcss "^7.0.0" + +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + dependencies: + postcss "^7.0.0" + +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== + dependencies: + postcss "^7.0.0" + +postcss-import@12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-12.0.1.tgz#cf8c7ab0b5ccab5649024536e565f841928b7153" + integrity sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw== + dependencies: + postcss "^7.0.1" + postcss-value-parser "^3.2.3" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-load-config@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" + integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== + dependencies: + cosmiconfig "^5.0.0" + import-cwd "^2.0.0" + +postcss-loader@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" + integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== + dependencies: + loader-utils "^1.1.0" + postcss "^7.0.0" + postcss-load-config "^2.0.0" + schema-utils "^1.0.0" + +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== + dependencies: + postcss "^7.0.5" + +postcss-modules-local-by-default@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" + integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== + dependencies: + icss-utils "^4.1.1" + postcss "^7.0.32" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + dependencies: + icss-utils "^4.0.0" + postcss "^7.0.6" + +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== dependencies: - find-up "^3.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" -pkg-dir@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== dependencies: - find-up "^4.0.0" + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" -portfinder@^1.0.21: - version "1.0.25" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca" - integrity sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg== +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== dependencies: - async "^2.6.2" - debug "^3.1.1" - mkdirp "^0.5.1" + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +postcss-selector-parser@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" + integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== + dependencies: + dot-prop "^5.2.0" + indexes-of "^1.0.1" + uniq "^1.0.1" -postcss-import@12.0.1: - version "12.0.1" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-12.0.1.tgz#cf8c7ab0b5ccab5649024536e565f841928b7153" - integrity sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw== +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" + integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== dependencies: - postcss "^7.0.1" - postcss-value-parser "^3.2.3" - read-cache "^1.0.0" - resolve "^1.1.7" + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + util-deprecate "^1.0.2" -postcss-load-config@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003" - integrity sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q== +postcss-svgo@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" + integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== dependencies: - cosmiconfig "^5.0.0" - import-cwd "^2.0.0" + is-svg "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" -postcss-loader@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" - integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== dependencies: - loader-utils "^1.1.0" + alphanum-sort "^1.0.0" postcss "^7.0.0" - postcss-load-config "^2.0.0" - schema-utils "^1.0.0" + uniqs "^2.0.0" -postcss-value-parser@^3.2.3: +postcss-value-parser@^3.0.0, postcss-value-parser@^3.2.3: version "3.3.1" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss-value-parser@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9" - integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ== +postcss-value-parser@^4.0.2, postcss-value-parser@^4.0.3, postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss@7.0.17: - version "7.0.17" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.17.tgz#4da1bdff5322d4a0acaab4d87f3e782436bad31f" - integrity sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ== +postcss@7.0.27: + version "7.0.27" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.27.tgz#cc67cdc6b0daa375105b7c424a85567345fc54d9" + integrity sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ== dependencies: chalk "^2.4.2" source-map "^0.6.1" supports-color "^6.1.0" -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.17: - version "7.0.21" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.21.tgz#06bb07824c19c2021c5d056d5b10c35b989f7e17" - integrity sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ== +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" + integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== dependencies: chalk "^2.4.2" source-map "^0.6.1" supports-color "^6.1.0" +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + prepend-http@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= -prettier@^1.18.2: - version "1.18.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" - integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== - -private@^0.1.6: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== +prettier@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" + integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== process-nextick-args@~2.0.0: version "2.0.1" @@ -6024,10 +7453,10 @@ protoduck@^5.0.1: dependencies: genfun "^5.0.0" -protractor@~5.4.0: - version "5.4.2" - resolved "https://registry.yarnpkg.com/protractor/-/protractor-5.4.2.tgz#329efe37f48b2141ab9467799be2d4d12eb48c13" - integrity sha512-zlIj64Cr6IOWP7RwxVeD8O4UskLYPoyIcg0HboWJL9T79F1F0VWtKkGTr/9GN6BKL+/Q/GmM7C9kFVCfDbP5sA== +protractor@~7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/protractor/-/protractor-7.0.0.tgz#c3e263608bd72e2c2dc802b11a772711a4792d03" + integrity sha512-UqkFjivi4GcvUQYzqGYNe0mLzfn5jiLmO8w9nMhQoJRLhy2grJonpga2IWhI6yJO30LibWXJJtA4MOIZD2GgZw== dependencies: "@types/q" "^0.0.32" "@types/selenium-webdriver" "^3.0.0" @@ -6037,36 +7466,31 @@ protractor@~5.4.0: glob "^7.0.3" jasmine "2.8.0" jasminewd2 "^2.1.0" - optimist "~0.6.0" q "1.4.1" saucelabs "^1.5.0" selenium-webdriver "3.6.0" source-map-support "~0.4.0" webdriver-js-extender "2.1.0" - webdriver-manager "^12.0.6" + webdriver-manager "^12.1.7" + yargs "^15.3.1" proxy-addr@~2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" - integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== dependencies: forwarded "~0.1.2" - ipaddr.js "1.9.0" + ipaddr.js "1.9.1" prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -psl@^1.1.24: - version "1.4.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2" - integrity sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw== +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== public-encrypt@^4.0.0: version "4.0.3" @@ -6110,12 +7534,12 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@^1.2.4, punycode@^1.4.1: +punycode@^1.2.4: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= -punycode@^2.1.0: +punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== @@ -6125,16 +7549,21 @@ q@1.4.1: resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" integrity sha1-VXBbzZPF82c1MMLCy8DCs63cKG4= -q@^1.4.1: +q@^1.1.2, q@^1.4.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= -qjobs@^1.1.4: +qjobs@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== +qs@6.2.3: + version "6.2.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.3.tgz#1cfcb25c10a9b2b483053ff39f5dfc9233908cfe" + integrity sha1-HPyyXBCpsrSDBT/zn138kjOQjP4= + qs@6.7.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" @@ -6164,11 +7593,11 @@ querystring@0.2.0: integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= querystringify@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" - integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== @@ -6183,7 +7612,7 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" -range-parser@^1.2.0, range-parser@^1.2.1, range-parser@~1.2.1: +range-parser@^1.2.1, range-parser@~1.2.0, range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== @@ -6198,23 +7627,23 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -raw-loader@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-3.1.0.tgz#5e9d399a5a222cc0de18f42c3bc5e49677532b3f" - integrity sha512-lzUVMuJ06HF4rYveaz9Tv0WRlUMxJ0Y1hgSkkgg+50iEdaI0TthyEDe08KIHb0XsF6rn8WYTqPCaGTZg3sX+qA== +raw-body@^2.3.2: + version "2.4.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" + integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== dependencies: - loader-utils "^1.1.0" - schema-utils "^2.0.1" + bytes "3.1.0" + http-errors "1.7.3" + iconv-lite "0.4.24" + unpipe "1.0.0" -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== +raw-loader@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.0.tgz#d639c40fb9d72b5c7f8abc1fb2ddb25b29d3d540" + integrity sha512-iINUOYvl1cGEmfoaLjnZXt4bKfT2LJnZZib5N/LLyAphC+Dd11vNP9CNVb38j+SAJpFI1uo8j9frmih53ASy7Q== dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" + loader-utils "^1.2.3" + schema-utils "^2.5.0" read-cache@^1.0.0: version "1.0.0" @@ -6224,16 +7653,14 @@ read-cache@^1.0.0: pify "^2.3.0" read-package-json@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.0.tgz#e3d42e6c35ea5ae820d9a03ab0c7291217fc51d5" - integrity sha512-KLhu8M1ZZNkMcrq1+0UJbR8Dii8KZUqB0Sha4mOx/bknfKI/fyrQVrG/YIt2UOtG667sD8+ee4EXMM91W9dC+A== + version "2.1.2" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.2.tgz#6992b2b66c7177259feb8eaac73c3acd28b9222a" + integrity sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA== dependencies: glob "^7.1.1" - json-parse-better-errors "^1.0.1" + json-parse-even-better-errors "^2.3.0" normalize-package-data "^2.0.0" - slash "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.2" + npm-normalize-package-bin "^1.0.0" read-package-tree@5.3.1: version "5.3.1" @@ -6244,10 +7671,10 @@ read-package-tree@5.3.1: readdir-scoped-modules "^1.0.0" util-promisify "^2.1.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -6257,10 +7684,10 @@ read-package-tree@5.3.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" - integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== +readable-stream@^3.0.6, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -6285,46 +7712,46 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -readdirp@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" - integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== dependencies: - picomatch "^2.0.4" + picomatch "^2.2.1" reflect-metadata@^0.1.2: version "0.1.13" resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== -regenerate-unicode-properties@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" - integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== dependencies: regenerate "^1.4.0" -regenerate@^1.2.1, regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== +regenerate@^1.4.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@0.13.3, regenerator-runtime@^0.13.2: - version "0.13.3" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" - integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== +regenerator-runtime@0.13.5: + version "0.13.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" + integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== +regenerator-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== -regenerator-transform@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" - integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== dependencies: - private "^0.1.6" + "@babel/runtime" "^7.8.4" regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" @@ -6335,54 +7762,34 @@ regex-not@^1.0.0, regex-not@^1.0.2: safe-regex "^1.1.0" regexp.prototype.flags@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz#6b30724e306a27833eeb171b66ac8890ba37e41c" - integrity sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA== - dependencies: - define-properties "^1.1.2" - -regexpu-core@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" - integrity sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs= + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" -regexpu-core@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" - integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== +regexpu-core@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== dependencies: regenerate "^1.4.0" - regenerate-unicode-properties "^8.1.0" - regjsgen "^0.5.0" - regjsparser "^0.6.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.1.0" + unicode-match-property-value-ecmascript "^1.2.0" -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= - -regjsgen@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" - integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== - -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= - dependencies: - jsesc "~0.5.0" +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== -regjsparser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" - integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== dependencies: jsesc "~0.5.0" @@ -6401,17 +7808,26 @@ repeat-string@^1.6.1: resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= +request-promise-core@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" + integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== + dependencies: + lodash "^4.17.19" + +request-promise-native@^1.0.8: + version "1.0.9" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" + integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== dependencies: - is-finite "^1.0.0" + request-promise-core "1.1.4" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" -request@^2.83.0, request@^2.87.0, request@^2.88.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== +request@^2.83.0, request@^2.87.0, request@^2.88.0, request@^2.88.2: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== dependencies: aws-sign2 "~0.7.0" aws4 "^1.8.0" @@ -6420,7 +7836,7 @@ request@^2.83.0, request@^2.87.0, request@^2.88.0: extend "~3.0.2" forever-agent "~0.6.1" form-data "~2.3.2" - har-validator "~5.1.0" + har-validator "~5.1.3" http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" @@ -6430,7 +7846,7 @@ request@^2.83.0, request@^2.87.0, request@^2.88.0: performance-now "^2.1.0" qs "~6.5.2" safe-buffer "^5.1.2" - tough-cookie "~2.4.3" + tough-cookie "~2.5.0" tunnel-agent "^0.6.0" uuid "^3.3.2" @@ -6439,11 +7855,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= - require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" @@ -6472,12 +7883,21 @@ resolve-url@^0.2.1: integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2: - version "1.12.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" - integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== + version "1.19.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== dependencies: + is-core-module "^2.1.0" path-parse "^1.0.6" +resp-modifier@6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/resp-modifier/-/resp-modifier-6.0.2.tgz#b124de5c4fbafcba541f48ffa73970f4aa456b4f" + integrity sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08= + dependencies: + debug "^2.2.0" + minimatch "^3.0.2" + restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -6501,19 +7921,34 @@ retry@^0.12.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + rfdc@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.4.tgz#ba72cc1367a0ccd9cf81a870b3b58bd3ad07f8c2" integrity sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug== -rimraf@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.0.tgz#614176d4b3010b75e5c390eb0ee96f6dc0cebb9b" - integrity sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg== +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + +rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" -rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: +rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -6528,12 +7963,22 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= - dependencies: - is-promise "^2.1.0" +rollup@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.1.0.tgz#552e248e397a06b9c6db878c0564ca4ee06729c9" + integrity sha512-gfE1455AEazVVTJoeQtcOq/U6GSxwoj4XPSWVsuWmgIxj7sBQNLDOSA82PbdMe+cP8ql8fR1jogPFe8Wg8g4SQ== + optionalDependencies: + fsevents "~2.1.2" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" + integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw== run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" @@ -6542,17 +7987,36 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rxjs@6.4.0, rxjs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504" - integrity sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw== +rx@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" + integrity sha1-pfE/957zt0D+MKqAP7CfmIBdR4I= + +rxjs@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" + integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== dependencies: tslib "^1.9.0" -rxjs@^6.4.0: - version "6.5.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" - integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== +rxjs@^5.5.6: + version "5.5.12" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" + integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw== + dependencies: + symbol-observable "1.0.1" + +rxjs@^6.5.3: + version "6.6.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" + integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== + dependencies: + tslib "^1.9.0" + +rxjs@~6.5.4: + version "6.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" + integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== dependencies: tslib "^1.9.0" @@ -6562,9 +8026,9 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-regex@^1.1.0: version "1.1.0" @@ -6573,26 +8037,26 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sass-loader@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-7.2.0.tgz#e34115239309d15b2527cb62b5dfefb62a96ff7f" - integrity sha512-h8yUWaWtsbuIiOCgR9fd9c2lRXZ2uG+h8Dzg/AGNj+Hg/3TO8+BBAW9mEP+mh8ei+qBKqSJ0F1FLlYjNBc61OA== +sass-loader@8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-8.0.2.tgz#debecd8c3ce243c76454f2e8290482150380090d" + integrity sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ== dependencies: clone-deep "^4.0.1" - loader-utils "^1.0.1" - neo-async "^2.5.0" - pify "^4.0.1" - semver "^5.5.0" + loader-utils "^1.2.3" + neo-async "^2.6.1" + schema-utils "^2.6.1" + semver "^6.3.0" -sass@1.22.9: - version "1.22.9" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.22.9.tgz#41a2ed6038027f58be2bd5041293452a29c2cb84" - integrity sha512-FzU1X2V8DlnqabrL4u7OBwD2vcOzNMongEJEx3xMEhWY/v26FFR3aG0hyeu2T965sfR0E9ufJwmG+Qjz78vFPQ== +sass@1.26.3: + version "1.26.3" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.3.tgz#412df54486143b76b5a65cdf7569e86f44659f46" + integrity sha512-5NMHI1+YFYw4sN3yfKjpLuV9B5l7MqQ6FlkTcC4FT+oHbBRUZoSjHrrt/mE0nFXJyY2kQtU9ou9HxvFVjLFuuw== dependencies: chokidar ">=2.0.0 <4.0.0" @@ -6603,22 +8067,17 @@ saucelabs@^1.5.0: dependencies: https-proxy-agent "^2.2.1" -sax@0.5.x: - version "0.5.8" - resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1" - integrity sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE= - -sax@>=0.6.0, sax@^1.2.4: +sax@>=0.6.0, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -schema-utils@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" - integrity sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8= +saxes@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== dependencies: - ajv "^5.0.0" + xmlchars "^2.2.0" schema-utils@^1.0.0: version "1.0.0" @@ -6629,13 +8088,14 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.0.0, schema-utils@^2.0.1: - version "2.5.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.5.0.tgz#8f254f618d402cc80257486213c8970edfd7c22f" - integrity sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ== +schema-utils@^2.5.0, schema-utils@^2.6.1, schema-utils@^2.6.4, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== dependencies: - ajv "^6.10.2" - ajv-keywords "^3.4.1" + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" select-hose@^2.0.0: version "2.0.0" @@ -6652,12 +8112,12 @@ selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: tmp "0.0.30" xml2js "^0.4.17" -selfsigned@^1.10.4: - version "1.10.7" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" - integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA== +selfsigned@^1.10.7: + version "1.10.8" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" + integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== dependencies: - node-forge "0.9.0" + node-forge "^0.10.0" semver-dsl@^1.0.1: version "1.0.1" @@ -6678,11 +8138,47 @@ semver-intersect@1.4.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@6.3.0, semver@^6.0.0, semver@^6.3.0: +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.3.tgz#e4345ce73071c53f336445cfc19efb1c311df2a6" + integrity sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA== + +semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.0.0, semver@^7.1.1: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + +send@0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.6.2" + mime "1.4.1" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.4.0" + send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -6702,12 +8198,21 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" -serialize-javascript@^1.7.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" - integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== +serialize-javascript@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" + integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" -serve-index@^1.9.1: +serve-index@1.9.1, serve-index@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= @@ -6720,6 +8225,16 @@ serve-index@^1.9.1: mime-types "~2.1.17" parseurl "~1.3.2" +serve-static@1.13.2: + version "1.13.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" + integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.16.2" + serve-static@1.14.1: version "1.14.1" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" @@ -6730,7 +8245,12 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" -set-blocking@^2.0.0, set-blocking@~2.0.0: +server-destroy@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/server-destroy/-/server-destroy-1.0.1.tgz#f13bf928e42b9c3e79383e61cc3998b5d14e6cdd" + integrity sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0= + +set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= @@ -6793,19 +8313,26 @@ shebang-regex@^1.0.0: integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" -smart-buffer@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.0.2.tgz#5207858c3815cc69110703c6b94e46c15634395d" - integrity sha512-JDhEpTKzXusOqXZ0BUIdH+CjFdO/CR3tLlf5CN34IypI+xMmXW1uB16OOY8z3cICbJlDAVJzNbwBhNO0wt9OAw== +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +smart-buffer@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== snapdragon-node@^2.0.1: version "2.1.1" @@ -6838,9 +8365,9 @@ snapdragon@^0.8.1: use "^3.1.0" socket.io-adapter@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" - integrity sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs= + version "1.1.2" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" + integrity sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g== socket.io-client@2.1.1: version "2.1.1" @@ -6862,6 +8389,43 @@ socket.io-client@2.1.1: socket.io-parser "~3.2.0" to-array "0.1.4" +socket.io-client@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.3.0.tgz#14d5ba2e00b9bcd145ae443ab96b3f86cbcc1bb4" + integrity sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA== + dependencies: + backo2 "1.0.2" + base64-arraybuffer "0.1.5" + component-bind "1.0.0" + component-emitter "1.2.1" + debug "~4.1.0" + engine.io-client "~3.4.0" + has-binary2 "~1.0.2" + has-cors "1.1.0" + indexof "0.0.1" + object-component "0.0.3" + parseqs "0.0.5" + parseuri "0.0.5" + socket.io-parser "~3.3.0" + to-array "0.1.4" + +socket.io-client@^2.0.4: + version "2.3.1" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.3.1.tgz#91a4038ef4d03c19967bb3c646fec6e0eaa78cff" + integrity sha512-YXmXn3pA8abPOY//JtYxou95Ihvzmg8U6kQyolArkIyLd0pgVhrfor/iMsox8cn07WCOOvvuJ6XKegzIucPutQ== + dependencies: + backo2 "1.0.2" + component-bind "1.0.0" + component-emitter "~1.3.0" + debug "~3.1.0" + engine.io-client "~3.4.0" + has-binary2 "~1.0.2" + indexof "0.0.1" + parseqs "0.0.6" + parseuri "0.0.6" + socket.io-parser "~3.3.0" + to-array "0.1.4" + socket.io-parser@~3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.2.0.tgz#e7c6228b6aa1f814e6148aea325b51aa9499e077" @@ -6871,6 +8435,24 @@ socket.io-parser@~3.2.0: debug "~3.1.0" isarray "2.0.1" +socket.io-parser@~3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.1.tgz#f07d9c8cb3fb92633aa93e76d98fd3a334623199" + integrity sha512-1QLvVAe8dTz+mKmZ07Swxt+LAo4Y1ff50rlyoEx00TQmDFVQYPfcqGvIDJLGaBdhdNCecXtyKpD+EgKGcmmbuQ== + dependencies: + component-emitter "~1.3.0" + debug "~3.1.0" + isarray "2.0.1" + +socket.io-parser@~3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.4.1.tgz#b06af838302975837eab2dc980037da24054d64a" + integrity sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A== + dependencies: + component-emitter "1.2.1" + debug "~4.1.0" + isarray "2.0.1" + socket.io@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.1.1.tgz#a069c5feabee3e6b214a75b40ce0652e1cfb9980" @@ -6883,10 +8465,22 @@ socket.io@2.1.1: socket.io-client "2.1.1" socket.io-parser "~3.2.0" -sockjs-client@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.3.0.tgz#12fc9d6cb663da5739d3dc5fb6e8687da95cb177" - integrity sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg== +socket.io@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.3.0.tgz#cd762ed6a4faeca59bc1f3e243c0969311eb73fb" + integrity sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg== + dependencies: + debug "~4.1.0" + engine.io "~3.4.0" + has-binary2 "~1.0.2" + socket.io-adapter "~1.1.0" + socket.io-client "2.3.0" + socket.io-parser "~3.4.0" + +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== dependencies: debug "^3.2.5" eventsource "^1.0.7" @@ -6895,13 +8489,14 @@ sockjs-client@1.3.0: json3 "^3.3.2" url-parse "^1.4.3" -sockjs@0.3.19: - version "0.3.19" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" - integrity sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw== +sockjs@0.3.20: + version "0.3.20" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" + integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== dependencies: faye-websocket "^0.10.0" - uuid "^3.0.1" + uuid "^3.4.0" + websocket-driver "0.6.5" socks-proxy-agent@^4.0.0: version "4.0.2" @@ -6912,12 +8507,12 @@ socks-proxy-agent@^4.0.0: socks "~2.3.2" socks@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.2.tgz#ade388e9e6d87fdb11649c15746c578922a5883e" - integrity sha512-pCpjxQgOByDHLlNqlnh/mNSAxIUkyBBuwwhTcV+enZGbDaClPvHdvm6uvOwZfFJkam7cGhBNbb4JxiP8UZkRvQ== + version "2.3.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== dependencies: - ip "^1.1.5" - smart-buffer "4.0.2" + ip "1.1.5" + smart-buffer "^4.1.0" sort-keys@^1.0.0: version "1.1.2" @@ -6931,11 +8526,6 @@ source-list-map@^2.0.0: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -source-list-map@~0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" - integrity sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY= - source-map-loader@0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-0.2.4.tgz#c18b0dc6e23bf66f6792437557c569a11e072271" @@ -6944,21 +8534,21 @@ source-map-loader@0.2.4: async "^2.5.0" loader-utils "^1.1.0" -source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== +source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== dependencies: - atob "^2.1.1" + atob "^2.1.2" decode-uri-component "^0.2.0" resolve-url "^0.2.1" source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@0.5.13, source-map-support@^0.5.5, source-map-support@^0.5.6, source-map-support@~0.5.12: - version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== +source-map-support@^0.5.5, source-map-support@^0.5.6, source-map-support@~0.5.12: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -6975,14 +8565,7 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@0.1.x: - version "0.1.43" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" - integrity sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y= - dependencies: - amdefine ">=0.0.4" - -source-map@0.7.3: +source-map@0.7.3, source-map@^0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== @@ -6994,46 +8577,39 @@ source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@~0.4.1: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - integrity sha1-66T12pwNyZneaAMti092FzZSA2s= - dependencies: - amdefine ">=0.0.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -sourcemap-codec@^1.4.4: - version "1.4.6" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz#e30a74f0402bad09807640d39e971090a08ce1e9" - integrity sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg== +sourcemap-codec@^1.4.4, sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + version "3.0.7" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" + integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== spdy-transport@^3.0.0: version "3.0.0" @@ -7047,10 +8623,10 @@ spdy-transport@^3.0.0: readable-stream "^3.0.6" wbuf "^1.7.3" -spdy@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.1.tgz#6f12ed1c5db7ea4f24ebb8b89ba58c87c08257f2" - integrity sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA== +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== dependencies: debug "^4.1.0" handle-thing "^2.0.0" @@ -7104,6 +8680,18 @@ ssri@^6.0.0, ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" +ssri@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.0.tgz#79ca74e21f8ceaeddfcb4b90143c458b8d988808" + integrity sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA== + dependencies: + minipass "^3.1.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -7117,6 +8705,21 @@ static-extend@^0.1.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= +statuses@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + integrity sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4= + +statuses@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== + +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + stream-browserify@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" @@ -7145,44 +8748,33 @@ stream-http@^2.7.2: xtend "^4.0.0" stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== -streamroller@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-1.0.6.tgz#8167d8496ed9f19f05ee4b158d9611321b8cacd9" - integrity sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg== +stream-throttle@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/stream-throttle/-/stream-throttle-0.1.3.tgz#add57c8d7cc73a81630d31cd55d3961cfafba9c3" + integrity sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM= dependencies: - async "^2.6.2" - date-format "^2.0.0" - debug "^3.2.6" - fs-extra "^7.0.1" - lodash "^4.17.14" + commander "^2.2.0" + limiter "^1.0.5" + +streamroller@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-2.2.4.tgz#c198ced42db94086a6193608187ce80a5f2b0e53" + integrity sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ== + dependencies: + date-format "^2.1.0" + debug "^4.1.1" + fs-extra "^8.1.0" strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0: +string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== @@ -7191,30 +8783,30 @@ string-width@^3.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.1.0.tgz#ba846d1daa97c3c596155308063e075ed1c99aff" - integrity sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ== +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" - strip-ansi "^5.2.0" + strip-ansi "^6.0.0" -string.prototype.trimleft@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" - integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== +string.prototype.trimend@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" + integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - function-bind "^1.1.1" -string.prototype.trimright@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" - integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== +string.prototype.trimstart@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" + integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - function-bind "^1.1.1" string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" @@ -7237,20 +8829,20 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.1.0, strip-ansi@^5.2.0: +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -7261,18 +8853,22 @@ strip-eof@^1.0.0: resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -style-loader@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.0.0.tgz#1d5296f9165e8e2c85d24eee0b7caf9ec8ca1f82" - integrity sha512-B0dOCFwv7/eY31a5PCieNwMgMhVGFe9w+rh7s/Bx8kfFkrth9zfTZquoYvdw8URgiqxObQKcpW51Ugz1HjfdZw== +style-loader@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.1.3.tgz#9e826e69c683c4d9bf9db924f85e9abb30d5e200" + integrity sha512-rlkH7X/22yuwFYK357fMN/BxYOorfnfq0eD7+vqlemSK4wEcejFF1dg4zxP0euBW8NrYx2WZzZ8PPFevr7D+Kw== dependencies: loader-utils "^1.2.3" - schema-utils "^2.0.1" + schema-utils "^2.6.4" + +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" stylus-loader@3.0.2: version "3.0.2" @@ -7283,17 +8879,19 @@ stylus-loader@3.0.2: lodash.clonedeep "^4.5.0" when "~3.6.x" -stylus@0.54.5: - version "0.54.5" - resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.5.tgz#42b9560931ca7090ce8515a798ba9e6aa3d6dc79" - integrity sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk= +stylus@0.54.7: + version "0.54.7" + resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.7.tgz#c6ce4793965ee538bcebe50f31537bfc04d88cd2" + integrity sha512-Yw3WMTzVwevT6ZTrLCYNHAFmanMxdylelL3hkWNgPMeTCpMwpV3nXjpOHuBXtFv7aiO2xRuQS6OoAdgkNcSNug== dependencies: - css-parse "1.7.x" - debug "*" - glob "7.0.x" - mkdirp "0.5.x" - sax "0.5.x" - source-map "0.1.x" + css-parse "~2.0.0" + debug "~3.1.0" + glob "^7.1.3" + mkdirp "~0.5.x" + safer-buffer "^2.1.2" + sax "~1.2.4" + semver "^6.0.0" + source-map "^0.7.3" supports-color@^2.0.0: version "2.0.0" @@ -7314,17 +8912,53 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +svgo@^1.0.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +symbol-observable@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" + integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ= + symbol-observable@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar@^4, tar@^4.4.8: +tar@^4.4.10: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== @@ -7337,39 +8971,74 @@ tar@^4, tar@^4.4.8: safe-buffer "^5.1.2" yallist "^3.0.3" -terser-webpack-plugin@1.4.1, terser-webpack-plugin@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" - integrity sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg== +tar@^6.0.1, tar@^6.0.2: + version "6.0.5" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.5.tgz#bde815086e10b39f1dcd298e89d596e1535e200f" + integrity sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +terser-webpack-plugin@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-3.0.3.tgz#23bda2687b197f878a743373b9411d917adc2e45" + integrity sha512-bZFnotuIKq5Rqzrs+qIwFzGdKdffV9epG5vDSEbYzvKAhPeR5RbbrQysfPgbIIMhNAQtZD2hGwBfSKUXjXZZZw== + dependencies: + cacache "^15.0.4" + find-cache-dir "^3.3.1" + jest-worker "^26.0.0" + p-limit "^2.3.0" + schema-utils "^2.6.6" + serialize-javascript "^3.1.0" + source-map "^0.6.1" + terser "^4.6.13" + webpack-sources "^1.4.3" + +terser-webpack-plugin@^1.4.3: + version "1.4.5" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" + integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== dependencies: cacache "^12.0.2" find-cache-dir "^2.1.0" is-wsl "^1.1.0" schema-utils "^1.0.0" - serialize-javascript "^1.7.0" + serialize-javascript "^4.0.0" source-map "^0.6.1" terser "^4.1.2" webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser@4.3.8: - version "4.3.8" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.8.tgz#707f05f3f4c1c70c840e626addfdb1c158a17136" - integrity sha512-otmIRlRVmLChAWsnSFNO0Bfk6YySuBp6G9qrHiJwlLDd4mxe2ta4sjI7TzIR+W1nBMjilzrMcPOz9pSusgx3hQ== +terser@4.6.10: + version "4.6.10" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.10.tgz#90f5bd069ff456ddbc9503b18e52f9c493d3b7c2" + integrity sha512-qbF/3UOo11Hggsbsqm2hPa6+L4w7bkr+09FNseEe8xrcVD3APGLFqE+Oz1ZKAxjYnFsj80rLOfgAtJ0LNJjtTA== dependencies: commander "^2.20.0" source-map "~0.6.1" source-map-support "~0.5.12" -terser@^4.1.2: - version "4.3.9" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.9.tgz#e4be37f80553d02645668727777687dad26bbca8" - integrity sha512-NFGMpHjlzmyOtPL+fDw3G7+6Ueh/sz4mkaUYa4lJCxOPTNzd0Uj0aZJOmsDYoSQyfuVoWDMSWTPU3huyOm2zdA== +terser@^4.1.2, terser@^4.6.13: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== dependencies: commander "^2.20.0" source-map "~0.6.1" source-map-support "~0.5.12" +tfunk@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tfunk/-/tfunk-4.0.0.tgz#de9399feaf2060901d590b7faad80fcd5443077e" + integrity sha512-eJQ0dGfDIzWNiFNYFVjJ+Ezl/GmwHaFTBTjrtqNPW0S7cuVDBrZrmzUz6VkMeCR4DZFqhd4YtLwsw3i2wYHswQ== + dependencies: + chalk "^1.1.3" + dlv "^1.1.3" + through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -7389,12 +9058,17 @@ thunky@^1.0.2: integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== timers-browserify@^2.0.4: - version "2.0.11" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" - integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== dependencies: setimmediate "^1.0.4" +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + tmp@0.0.30: version "0.0.30" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed" @@ -7402,7 +9076,14 @@ tmp@0.0.30: dependencies: os-tmpdir "~1.0.1" -tmp@0.0.33, tmp@0.0.x, tmp@^0.0.33: +tmp@0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== @@ -7419,11 +9100,6 @@ to-arraybuffer@^1.0.0: resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -7466,60 +9142,89 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== +tough-cookie@^2.3.3, tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== dependencies: - psl "^1.1.24" - punycode "^1.4.1" + psl "^1.1.28" + punycode "^2.1.1" -tree-kill@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.1.tgz#5398f374e2f292b9dcc7b2e71e30a5c3bb6c743a" - integrity sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q== +tough-cookie@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" + integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== + dependencies: + ip-regex "^2.1.0" + psl "^1.1.28" + punycode "^2.1.1" -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= +tr46@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" + integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== + dependencies: + punycode "^2.1.1" -ts-node@~7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-7.0.1.tgz#9562dc2d1e6d248d24bc55f773e3f614337d9baf" - integrity sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw== +tree-kill@1.2.2, tree-kill@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + +ts-loader@^6.0.4: + version "6.2.2" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.2.2.tgz#dffa3879b01a1a1e0a4b85e2b8421dc0dfff1c58" + integrity sha512-HDo5kXZCBml3EUPcc7RlZOV/JGlLHwppTLEHb3SHnr5V7NXD4klMEkrhJe5wgRbaWsSXi+Y1SIBN/K9B6zWGWQ== dependencies: - arrify "^1.0.0" - buffer-from "^1.1.0" - diff "^3.1.0" + chalk "^2.3.0" + enhanced-resolve "^4.0.0" + loader-utils "^1.0.2" + micromatch "^4.0.0" + semver "^6.0.0" + +ts-node@~8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.3.0.tgz#e4059618411371924a1fb5f3b125915f324efb57" + integrity sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ== + dependencies: + arg "^4.1.0" + diff "^4.0.1" make-error "^1.1.1" - minimist "^1.2.0" - mkdirp "^0.5.1" source-map-support "^0.5.6" - yn "^2.0.0" + yn "^3.0.0" -tslib@1.10.0, tslib@^1.10.0, tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" - integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== +tslib@1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" + integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== + +tslib@^1.10.0, tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" + integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== -tslint@~5.15.0: - version "5.15.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.15.0.tgz#6ffb180986d63afa1e531feb2a134dbf961e27d3" - integrity sha512-6bIEujKR21/3nyeoX2uBnE8s+tMXCQXhqMmaIPJpHmXJoBJPTLcI7/VHRtUwMhnLVdwLqqY3zmd8Dxqa5CVdJA== +tslint@~6.1.0: + version "6.1.3" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.3.tgz#5c23b2eccc32487d5523bd3a470e9aa31789d904" + integrity sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg== dependencies: - babel-code-frame "^6.22.0" + "@babel/code-frame" "^7.0.0" builtin-modules "^1.1.1" chalk "^2.3.0" commander "^2.12.1" - diff "^3.2.0" + diff "^4.0.1" glob "^7.1.1" - js-yaml "^3.13.0" + js-yaml "^3.13.1" minimatch "^3.0.4" - mkdirp "^0.5.1" + mkdirp "^0.5.3" resolve "^1.3.2" semver "^5.3.0" - tslib "^1.8.0" + tslib "^1.13.0" tsutils "^2.29.0" tsutils@^2.29.0: @@ -7546,10 +9251,17 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= -type-fest@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.5.2.tgz#d6ef42a0356c6cd45f49485c3b6281fc148e48a2" - integrity sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw== +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" @@ -7564,18 +9276,25 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@3.5.3, typescript@~3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" - integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== +typescript@3.6.5: + version "3.6.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.5.tgz#dae20114a7b4ff4bd642db9c8c699f2953e8bbdb" + integrity sha512-BEjlc0Z06ORZKbtcxGrIvvwYs5hAnuo6TKdNFL55frVDlB+na3z5bsLhFaIxmT+dPWgBIjMo6aNnTOgHHmHgiQ== -uglify-js@^3.1.4: - version "3.6.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.4.tgz#88cc880c6ed5cf9868fdfa0760654e7bed463f1d" - integrity sha512-9Yc2i881pF4BPGhjteCXQNaXx1DCwm3dtOyBaG2hitHjLWOczw/ki8vD1bqyT3u6K0Ms/FpCShkmfg+FtlOfYA== - dependencies: - commander "~2.20.3" - source-map "~0.6.1" +typescript@~3.8.3: + version "3.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" + integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== + +ua-parser-js@0.7.21: + version "0.7.21" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.21.tgz#853cf9ce93f642f67174273cc34565ae6f308777" + integrity sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ== + +ua-parser-js@^0.7.18: + version "0.7.22" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.22.tgz#960df60a5f911ea8f1c818f3747b99c6e177eae3" + integrity sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q== ultron@~1.1.0: version "1.1.1" @@ -7595,15 +9314,15 @@ unicode-match-property-ecmascript@^1.0.4: unicode-canonical-property-names-ecmascript "^1.0.4" unicode-property-aliases-ecmascript "^1.0.4" -unicode-match-property-value-ecmascript@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" - integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" - integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== union-value@^1.0.0: version "1.0.1" @@ -7615,6 +9334,16 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" @@ -7629,7 +9358,7 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -universal-analytics@^0.4.20: +universal-analytics@0.4.20: version "0.4.20" resolved "https://registry.yarnpkg.com/universal-analytics/-/universal-analytics-0.4.20.tgz#d6b64e5312bf74f7c368e3024a922135dbf24b03" integrity sha512-gE91dtMvNkjO+kWsPstHRtSwHXz0l2axqptGYp5ceg4MsuurloM0PU3pdOfpb5zBXUvyjT4PwhWK2m39uczZuw== @@ -7648,6 +9377,11 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -7662,9 +9396,9 @@ upath@^1.1.1: integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + version "4.4.0" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" + integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== dependencies: punycode "^2.1.0" @@ -7694,15 +9428,7 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -useragent@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.3.0.tgz#217f943ad540cb2128658ab23fc960f6a88c9972" - integrity sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw== - dependencies: - lru-cache "4.1.x" - tmp "0.0.x" - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -7715,12 +9441,14 @@ util-promisify@^2.1.0: object.getownpropertydescriptors "^2.0.3" util.promisify@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" util@0.10.3: version "0.10.3" @@ -7741,10 +9469,15 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.0.0, uuid@^3.0.1, uuid@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" - integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== +uuid@7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.2.tgz#7ff5c203467e91f5e0d85cfcbaaf7d2ebbca9be6" + integrity sha512-vy9V/+pKG+5ZTYKf+VcphF5Oc6EFiu3W8Nv3P3zIh0EqVI80ZxOzuPfe9EHjkFNvf8+xuTHVeei4Drydlx4zjw== + +uuid@^3.0.0, uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== validate-npm-package-license@^3.0.1: version "3.0.4" @@ -7766,6 +9499,11 @@ vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= +vendors@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== + verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -7776,23 +9514,46 @@ verror@1.10.0: extsprintf "^1.2.0" vm-browserify@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" - integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw== + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== void-elements@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== + dependencies: + chokidar "^2.1.8" + watchpack@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" - integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== dependencies: - chokidar "^2.0.2" graceful-fs "^4.1.2" neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.1" wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" @@ -7801,6 +9562,13 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + webdriver-js-extender@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz#57d7a93c00db4cc8d556e4d3db4b5db0a80c3bb7" @@ -7809,7 +9577,7 @@ webdriver-js-extender@2.1.0: "@types/selenium-webdriver" "^3.0.0" selenium-webdriver "^3.0.1" -webdriver-manager@^12.0.6: +webdriver-manager@^12.1.7: version "12.1.7" resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.1.7.tgz#ed4eaee8f906b33c146e869b55e850553a1b1162" integrity sha512-XINj6b8CYuUYC93SG3xPkxlyUc3IJbD6Vvo75CVGuG9uzsefDzWQrhz0Lq8vbPxtb4d63CZdYophF8k8Or/YiA== @@ -7826,25 +9594,17 @@ webdriver-manager@^12.0.6: semver "^5.3.0" xml2js "^0.4.17" -webpack-core@^0.6.8: - version "0.6.9" - resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2" - integrity sha1-/FcViMhVjad76e+23r3Fo7FyvcI= - dependencies: - source-list-map "~0.1.7" - source-map "~0.4.1" +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== -webpack-dev-middleware@3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz#ef751d25f4e9a5c8a35da600c5fda3582b5c6cff" - integrity sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA== - dependencies: - memory-fs "^0.4.1" - mime "^2.4.2" - range-parser "^1.2.1" - webpack-log "^2.0.0" +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== -webpack-dev-middleware@^3.7.0: +webpack-dev-middleware@3.7.2, webpack-dev-middleware@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== @@ -7855,44 +9615,44 @@ webpack-dev-middleware@^3.7.0: range-parser "^1.2.1" webpack-log "^2.0.0" -webpack-dev-server@3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.8.0.tgz#06cc4fc2f440428508d0e9770da1fef10e5ef28d" - integrity sha512-Hs8K9yI6pyMvGkaPTeTonhD6JXVsigXDApYk9JLW4M7viVBspQvb1WdAcWxqtmttxNW4zf2UFLsLNe0y87pIGQ== +webpack-dev-server@3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" + integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== dependencies: ansi-html "0.0.7" bonjour "^3.5.0" - chokidar "^2.1.6" + chokidar "^2.1.8" compression "^1.7.4" connect-history-api-fallback "^1.6.0" debug "^4.1.1" del "^4.1.1" express "^4.17.1" - html-entities "^1.2.1" - http-proxy-middleware "^0.19.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" import-local "^2.0.0" internal-ip "^4.3.0" ip "^1.1.5" - is-absolute-url "^3.0.0" + is-absolute-url "^3.0.3" killable "^1.0.1" - loglevel "^1.6.3" + loglevel "^1.6.8" opn "^5.5.0" p-retry "^3.0.1" - portfinder "^1.0.21" + portfinder "^1.0.26" schema-utils "^1.0.0" - selfsigned "^1.10.4" + selfsigned "^1.10.7" semver "^6.3.0" serve-index "^1.9.1" - sockjs "0.3.19" - sockjs-client "1.3.0" - spdy "^4.0.1" + sockjs "0.3.20" + sockjs-client "1.4.0" + spdy "^4.0.2" strip-ansi "^3.0.1" supports-color "^6.1.0" url "^0.11.0" - webpack-dev-middleware "^3.7.0" + webpack-dev-middleware "^3.7.2" webpack-log "^2.0.0" ws "^6.2.1" - yargs "12.0.5" + yargs "^13.3.2" webpack-log@^2.0.0: version "2.0.0" @@ -7902,14 +9662,14 @@ webpack-log@^2.0.0: ansi-colors "^3.0.0" uuid "^3.3.2" -webpack-merge@4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.1.tgz#5e923cf802ea2ace4fd5af1d3247368a633489b4" - integrity sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw== +webpack-merge@4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" + integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== dependencies: - lodash "^4.17.5" + lodash "^4.17.15" -webpack-sources@1.4.3, webpack-sources@^1.1.0, webpack-sources@^1.2.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: +webpack-sources@1.4.3, webpack-sources@^1.1.0, webpack-sources@^1.2.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== @@ -7917,17 +9677,17 @@ webpack-sources@1.4.3, webpack-sources@^1.1.0, webpack-sources@^1.2.0, webpack-s source-list-map "^2.0.0" source-map "~0.6.1" -webpack-subresource-integrity@1.1.0-rc.6: - version "1.1.0-rc.6" - resolved "https://registry.yarnpkg.com/webpack-subresource-integrity/-/webpack-subresource-integrity-1.1.0-rc.6.tgz#37f6f1264e1eb378e41465a98da80fad76ab8886" - integrity sha512-Az7y8xTniNhaA0620AV1KPwWOqawurVVDzQSpPAeR5RwNbL91GoBSJAAo9cfd+GiFHwsS5bbHepBw1e6Hzxy4w== +webpack-subresource-integrity@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/webpack-subresource-integrity/-/webpack-subresource-integrity-1.4.0.tgz#44963a64c9a214ad729158e7f46d52c2525cc88a" + integrity sha512-GB1kB/LwAWC3CxwcedGhMkxGpNZxSheCe1q+KJP1bakuieAdX/rGHEcf5zsEzhKXpqsGqokgsDoD9dIkr61VDQ== dependencies: - webpack-core "^0.6.8" + webpack-sources "^1.3.0" -webpack@4.39.2: - version "4.39.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.39.2.tgz#c9aa5c1776d7c309d1b3911764f0288c8c2816aa" - integrity sha512-AKgTfz3xPSsEibH00JfZ9sHXGUwIQ6eZ9tLN8+VLzachk1Cw2LVmy+4R7ZiwTa9cZZ15tzySjeMui/UnSCAZhA== +webpack@4.42.0: + version "4.42.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.42.0.tgz#b901635dd6179391d90740a63c93f76f39883eb8" + integrity sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w== dependencies: "@webassemblyjs/ast" "1.8.5" "@webassemblyjs/helper-module-context" "1.8.5" @@ -7949,23 +9709,51 @@ webpack@4.39.2: node-libs-browser "^2.2.1" schema-utils "^1.0.0" tapable "^1.1.3" - terser-webpack-plugin "^1.4.1" + terser-webpack-plugin "^1.4.3" watchpack "^1.6.0" webpack-sources "^1.4.1" +websocket-driver@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= + dependencies: + websocket-extensions ">=0.1.1" + websocket-driver@>=0.5.1: - version "0.7.3" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" - integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg== + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== dependencies: - http-parser-js ">=0.4.0 <0.4.11" + http-parser-js ">=0.5.1" safe-buffer ">=5.1.0" websocket-extensions ">=0.1.1" websocket-extensions@>=0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" - integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^8.0.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837" + integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^2.0.2" + webidl-conversions "^6.1.0" when@~3.6.x: version "3.6.4" @@ -7984,17 +9772,10 @@ which@^1.2.1, which@^1.2.9, which@^1.3.1: dependencies: isexe "^2.0.0" -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== worker-farm@^1.7.0: version "1.7.0" @@ -8003,20 +9784,30 @@ worker-farm@^1.7.0: dependencies: errno "~0.1.7" -worker-plugin@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/worker-plugin/-/worker-plugin-3.2.0.tgz#ddae9f161b76fcbaacf8f54ecd037844584e43e7" - integrity sha512-W5nRkw7+HlbsEt3qRP6MczwDDISjiRj2GYt9+bpe8A2La00TmJdwzG5bpdMXhRt1qcWmwAvl1TiKaHRa+XDS9Q== +worker-plugin@4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/worker-plugin/-/worker-plugin-4.0.3.tgz#7c42e600d5931ad154d3d5f187a32446df64db0f" + integrity sha512-7hFDYWiKcE3yHZvemsoM9lZis/PzurHAEX1ej8PLCu818Rt6QqUAiDdxHPCKZctzmhqzPpcFSgvMCiPbtooqAg== dependencies: loader-utils "^1.1.0" -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" wrappy@1: version "1.0.2" @@ -8030,6 +9821,11 @@ ws@^6.2.1: dependencies: async-limiter "~1.0.0" +ws@^7.1.2, ws@^7.2.3: + version "7.4.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.1.tgz#a333be02696bd0e54cea0434e21dcc8a9ac294bb" + integrity sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ== + ws@~3.3.1: version "3.3.3" resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" @@ -8039,13 +9835,29 @@ ws@~3.3.1: safe-buffer "~5.1.0" ultron "~1.1.0" +ws@~6.1.0: + version "6.1.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9" + integrity sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA== + dependencies: + async-limiter "~1.0.0" + +xhr2@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/xhr2/-/xhr2-0.2.0.tgz#eddeff782f3b7551061b8d75645085269396e521" + integrity sha512-BDtiD0i2iKPK/S8OAZfpk6tyzEDnKKSjxWHcMBVmh+LuqJ8A32qXTyOx+TVOg2dKvq6zGBq2sgKPkEeRs1qTRA== + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + xml2js@^0.4.17: - version "0.4.22" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.22.tgz#4fa2d846ec803237de86f30aa9b5f70b6600de02" - integrity sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw== + version "0.4.23" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== dependencies: sax ">=0.6.0" - util.promisify "~1.0.0" xmlbuilder "~11.0.0" xmlbuilder@~11.0.0: @@ -8053,6 +9865,11 @@ xmlbuilder@~11.0.0: resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + xmlhttprequest-ssl@~1.5.4: version "1.5.5" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" @@ -8063,83 +9880,119 @@ xtend@^4.0.0, xtend@~4.0.1: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= +y18n@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" + integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yargs-parser@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" - integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^13.1.1, yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^13.0.0: - version "13.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" - integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== +yargs-parser@^18.1.0, yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@12.0.5: - version "12.0.5" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" - integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== +yargs@13.3.0: + version "13.3.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" + integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== dependencies: - cliui "^4.0.0" - decamelize "^1.2.0" + cliui "^5.0.0" find-up "^3.0.0" - get-caller-file "^1.0.1" - os-locale "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.1" + +yargs@15.3.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.0.tgz#403af6edc75b3ae04bf66c94202228ba119f0976" + integrity sha512-g/QCnmjgOl1YJjGsnUg2SatC7NUYEiLXJqxNOQU9qSpjzGtGXda9b+OKccr1kLTy8BN9yqEyqfq5lxlwdc13TA== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" require-directory "^2.1.1" - require-main-filename "^1.0.1" + require-main-filename "^2.0.0" set-blocking "^2.0.0" - string-width "^2.0.0" + string-width "^4.2.0" which-module "^2.0.0" - y18n "^3.2.1 || ^4.0.0" - yargs-parser "^11.1.1" + y18n "^4.0.0" + yargs-parser "^18.1.0" -yargs@13.1.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.1.0.tgz#b2729ce4bfc0c584939719514099d8a916ad2301" - integrity sha512-1UhJbXfzHiPqkfXNHYhiz79qM/kZqjTE8yGlEjZa85Q+3+OwcV6NRkV7XOV1W2Eom2bzILeUn55pQYffjVOLAg== +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== dependencies: - cliui "^4.0.0" + cliui "^5.0.0" find-up "^3.0.0" get-caller-file "^2.0.1" - os-locale "^3.1.0" require-directory "^2.1.1" require-main-filename "^2.0.0" set-blocking "^2.0.0" string-width "^3.0.0" which-module "^2.0.0" y18n "^4.0.0" - yargs-parser "^13.0.0" + yargs-parser "^13.1.2" + +yargs@^15.3.1, yargs@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= -yn@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" - integrity sha1-5a2ryKz0CPY4X8dklWhMiOavaJo= +yn@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -zone.js@~0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.9.1.tgz#e37c6e5c54c13fae4de26b5ffe8d8e9212da6d9b" - integrity sha512-GkPiJL8jifSrKReKaTZ5jkhrMEgXbXYC+IPo1iquBjayRa0q86w3Dipjn8b415jpitMExe9lV8iTsv8tk3DGag== +zone.js@~0.10.2: + version "0.10.3" + resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.10.3.tgz#3e5e4da03c607c9dcd92e37dd35687a14a140c16" + integrity sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg== diff --git a/js-storefront/generate-storefront.sh b/js-storefront/generate-storefront.sh new file mode 100755 index 0000000..72b97bf --- /dev/null +++ b/js-storefront/generate-storefront.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env sh + +# yarn global add @angular/cli@v9-lts +ng new demoshop --style=scss --routing=false --packageManager=yarn +( + cd demoshop || exit 1 + yarn ng add @spartacus/schematics --pwa --ssr + yarn install +) From 097c318b4963d844882e4ef68717aeb0ef829d1d Mon Sep 17 00:00:00 2001 From: Markus Perndorfer Date: Wed, 9 Dec 2020 14:50:54 +0100 Subject: [PATCH 09/24] add SSR workaround --- js-storefront/demoshop/README.md | 2 ++ js-storefront/demoshop/angular.json | 4 ++-- js-storefront/demoshop/package.json | 2 +- js-storefront/demoshop/server.ts | 10 +++++----- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/js-storefront/demoshop/README.md b/js-storefront/demoshop/README.md index 4c11159..d454867 100644 --- a/js-storefront/demoshop/README.md +++ b/js-storefront/demoshop/README.md @@ -7,6 +7,7 @@ A [Spartacus][spartacus]-based demo storefront ([built from libraries][libraries - Streamlined OCC settings (check [`src/environments`](src/environments) and [`app.module.ts`](src/app/app.module.ts#L11-L16)) and SAP/spartacus/issues#5886 - Minor tweaks to `package.json`: - run production build on `yarn build` (see [Updating the Code Repository for JavaScript Storefronts][build]) +- Includes the [SSR workaround][ssr] [spartacus]: https://github.com/SAP/cloud-commerce-spartacus-storefront [libraries]: https://sap.github.io/cloud-commerce-spartacus-storefront-docs/building-the-spartacus-storefront-from-libraries/ @@ -14,6 +15,7 @@ A [Spartacus][spartacus]-based demo storefront ([built from libraries][libraries [code]: https://code.visualstudio.com/ [build]: https://help.sap.com/viewer/1be46286b36a4aa48205be5a96240672/SHIP/en-US/63577f67a67347bf9f4765a5385ead33.html [smartedit]: https://sap.github.io/cloud-commerce-spartacus-storefront-docs/smartEdit-setup-instructions-for-spartacus/ +[ssr]: https://sap.github.io/spartacus-docs/ssr-ccv2-issue-spartacus-version-2/ ## Notes diff --git a/js-storefront/demoshop/angular.json b/js-storefront/demoshop/angular.json index 7b903c9..4559572 100644 --- a/js-storefront/demoshop/angular.json +++ b/js-storefront/demoshop/angular.json @@ -20,7 +20,7 @@ "build": { "builder": "@angular-devkit/build-angular:browser", "options": { - "outputPath": "dist/demoshop/browser", + "outputPath": "dist/demoshop", "index": "src/index.html", "main": "src/main.ts", "polyfills": "src/polyfills.ts", @@ -132,7 +132,7 @@ "server": { "builder": "@angular-devkit/build-angular:server", "options": { - "outputPath": "dist/demoshop/server", + "outputPath": "dist/demoshop-server", "main": "server.ts", "tsConfig": "tsconfig.server.json" }, diff --git a/js-storefront/demoshop/package.json b/js-storefront/demoshop/package.json index 298c02e..07e8e47 100644 --- a/js-storefront/demoshop/package.json +++ b/js-storefront/demoshop/package.json @@ -10,7 +10,7 @@ "e2e": "ng e2e", "dev:ssr": "ng run demoshop:serve-ssr", "serve:ssr": "node dist/demoshop/server/main.js", - "build:ssr": "ng build --prod && ng run demoshop:server:production", + "build:ssr": "ng build --prod && ng run demoshop:server:production && mv dist/demoshop-server/main.js dist/server.js || move dist\\demoshop-server\\main.js dist\\server.js", "prerender": "ng run demoshop:prerender" }, "private": true, diff --git a/js-storefront/demoshop/server.ts b/js-storefront/demoshop/server.ts index bf88a87..47b3dcc 100644 --- a/js-storefront/demoshop/server.ts +++ b/js-storefront/demoshop/server.ts @@ -1,7 +1,7 @@ -/*************************************************************************************************** - * Load `$localize` onto the global scope - used if i18n tags appear in Angular templates. - */ -import '@angular/localize/init'; +/*************************************************************************************************** + * Load `$localize` onto the global scope - used if i18n tags appear in Angular templates. + */ +import '@angular/localize/init'; import 'zone.js/dist/zone-node'; import { ngExpressEngine as engine } from '@nguniversal/express-engine'; @@ -18,7 +18,7 @@ const ngExpressEngine = NgExpressEngineDecorator.get(engine); // The Express app is exported so that it can be used by serverless Functions. export function app() { const server = express(); - const distFolder = join(process.cwd(), 'dist/demoshop/browser'); + const distFolder = join(process.cwd(), 'dist/demoshop'); const indexHtml = existsSync(join(distFolder, 'index.original.html')) ? 'index.original.html' : 'index'; From 144abca75beee8afac0bd51982342ee6c1a582e1 Mon Sep 17 00:00:00 2001 From: Markus Perndorfer Date: Wed, 9 Dec 2020 15:22:26 +0100 Subject: [PATCH 10/24] bump Gradle version --- .../gradle/wrapper/gradle-wrapper.jar | Bin 55616 -> 58910 bytes .../gradle/wrapper/gradle-wrapper.properties | 2 +- core-customize/gradlew | 31 ++++++++---------- core-customize/gradlew.bat | 4 +++ 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/core-customize/gradle/wrapper/gradle-wrapper.jar b/core-customize/gradle/wrapper/gradle-wrapper.jar index 5c2d1cf016b3885f6930543d57b744ea8c220a1a..62d4c053550b91381bbd28b1afc82d634bf73a8a 100644 GIT binary patch delta 23020 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 delta 19839 zcmV)EK)}DA%mcu(1F$Or4XW8@*aHOs0O|<<04pTwK!b{dHxe$1wboX!v`W1o0WAS+MB5I@A&gFD(#gb2?-zUh2fp^DPhG2h z3AC=-)z|)u{);|o_nFB+5`wEN)|oT=?A!P4efH${GOj3?!c~8qhJQJV!76V>q7E&2j*mCWsE53!n}+H1!u7+?OJcbtmfIb8SHXLDUxwa+WwFgGID~=>&Ja0gScW^n5K1H$8Kg*^Ve#2& zX_-6o`m#xqXvWU#=A!Nx;=L}E+*PB(kj&UlF#LGeRg zu}hT8?q*|#PXF|(?ojr5+j98>chb}=m5i+yI0@svg~i?U!d#}|NEnwWYfr?mry;f{ z5~0QU40nH5?E*tzgM!0XOrCes{uycZHWT--9FP}lb$f1Tg7kM0SNXd$df8Kxu|mNv zKFIU3YuHvrMvqELhn@0`Fb}h9wO4zj*=B9|+M6&UEOpP}ed#bLP*`k>t&7PKW1?>_mayR?1 z;__1SMGQQ&T6njZyVrGxTQoD0!ORFEZDW5W21i3{%&$6JCkl4utB!CKyvLft`cjd6 zg}ak&#zkM^1>rhP+SljB@x<0)wFO`uT2P)h+t@5^u}QvY&_oRDo_&|P`fQ^w|6Vlt zs*93aMO4(hxG@YzTLwxSL>_8tTyZX@WFonxnPfsZtBdK}%=N|u?{1ZmO-Xm@ijaTD zo_0LmB%mv{LrN_`+mO}<=tktW&KK#EJV4)O@fQLUBaqf(^p>V4qi1+%4eVFi?7(qa zBc5yn2;J0lWIs%62sHbPTDogPBWca`j1S|L|=qx;t%jg8Sj*W z4KzjfVQ1#vbIv_?ZsynT?>_hmdy5+gJs-ykbrMv z#l{_m@n>Ni>gNmzKflG0EX$f;xL65efAPA#yCc*az7tWztH>&kwzvw-xgSjGM%bd< zhLU^TwYF}EScg@vrDAYj#<5W4h__mTFvW^g^`NeJEfPUT@n%z~;DzkOk>s_dvjQcC zsk+b`MDIvd8_0z+W?1y|mG}Gu4`QK%;h>U@y9^8d$ik~7)3vo%WSBb#$lz?sf3~WM z_0aU5K28;k4;N`nlEyin7$zH9Hw#VE@7tD8HtxA7AfQY9n>gk&z$A+{R$ZFz15@Oo zjYkZH|GP|v?1`~ciJ6g2Gh}+ih{yF{v)j^Qmtn%pMM*;HF2k~48GvXN#`RMEY>45> z5a2&jGpA!@Ld$Z4t2L!KnMnHif9*0uZb*skvYGJoh&C}#uf~P>60po5K`($#0j)Fx zjIA8N`brxM8Tya+f*)}SW@3IG5I2mk;8K>#(jJe$A{005jF001GAkwF%dUe*qOommNd zT*q1ef70&0r`6Np^|`*XPV89LX*-S`%ZU?9zGTaitd-=-cH%rqPtw|}UFGdt+e%79 zN)4qYgrhXg(WF4zKq=s~^~#OfCIsq0fpSxz#F$;HTyXezZt}D;kONZK8PTG zCy3w0?*;J;eqS|zpm_dJHGdSu4*ao!FBtffAeQ4#g9zczf_NTZRMTHl&7Yh2iy+>Q zzf{d%8ThjL{&f(~;ctTYTYN<|e^*6me{bR+g7`=LlYxIW@p=%O@h^UVsDJfMeQ4*CbG$tTTQvml+C7WG39ns zwwltQHrQrJqajTKt1FRk+|Ib2N;xS(sLxGao;i^ACY^*A8@0WpE2tanIo{KIs^{F$ zq5f!BZx7kJ&)XO6wz!>`Xp4GoEHSZ9P}7-Aq&z#}4cYOuV@k7spti5S_elStX!Km? zQEnoTu1e)=L3PLA;lqde&qcdVAF2czND9Q06B7>Qt?N#@6KxZ&Jr;M`F1hyfwBxpQ z>q&|+IPS5h9Qv2NA;(R{k_kcmw40o8om8qjmhzm0+NY)5J_nPR67i%x*0+G2I|uHL zC1T!wK}W+98Z0({eKBR*kigfO9HWwT-LZtzlb#xJ+yQ$e?kMLaNA38K?Z(tNNA!7< zG5UYQQYur$I2E|kp_3Y6LC+z8*HRf1Otl*Z0 z?7j)dYa8tE%1MbO+YZO#j+S89V`EA+rb{U+vt-Okd9g%)PF8K{S|-4u%cIV;n&jg8 zyv(kI=eP+wPUX^We8H~WTvnS-Iqrc8Czq)V{78CyTxCqfnGWicNKf@UO7|MtPH%bL zPGZ8FWGwSJ)|pHzAvW${u$H-I!qG0$*=i=ubK%X2>0s zO`mtzso3bkcy22juEj>Ezy(JOV}@KgwJR~6B&LkmDQEYtLy1vc0k=1l$*gh!Qa|B% z*+uRN$D2&jmurjoTxUE^X>Hj#@>`B(&hr}Cp<4=nPrW1OxkyD_(eCVZ57}-!rnpuX zaTO9N&$y?EF`y&M&g!BS8Zx`}1f#M`u#81LnvUC^Gg$D%t>pt!YPR-VLL-_v%}p;Q zU0M?=*-mGxU`0dO9fFEBJD=FCY99-i@u+GZv*03S!NYkAY1LfBB@5q=$LPLE&zo+YR$!qtH{?!BcH<+0 z)+OL+^Wt-da%7JocUiJm+AY~9cUy9g?6>ePyu-pz<7X_nSMDP~Qu`lJO@}3&a?rwu@L>xtVU8|PinnNgpIdTB4qI|Wj`Cbu!T?LUq#5>s&Drl&n;%#eOdqB0;@Ua0WiLjDQD`7I-t>{O&^VXIP>%T)aj zS~4W340($s!*be^Gjdh{OYWBeOCC^Ru!HP}`I<%A+DOj|>qn z8ObAago`3av;!k!Jc!)bNLulFFeO7>kfLL;Q#w8#+17|-TZ|wFm+)p=BD(u^E3;|OKN|A6gcPac*`0V zUo^uFQ1VwHyUfelpyHVxa#HdqpVLG6>RjyN;rtjjdL+$b> z5Z@_YIz znoN1wULQd)*RxfqO!iKu9fiZHs1CdK#FW0sO~0vJSxo8r-j*qU8v^vH9ZxL?RqlGM zs;T8o-P3bNt-7~*g~LwSsZm9_blbvP^1f`wm%vVVF_<=IF;*;$rdwL%+9-AJ3F=ZMnyYa#+WVr+#u-Rn9{74sBdI zM+(TFeWo{bE)^?(m3{NilE8Sg`_PO7*oh9#bh15&E*wT5j?m#pF~rdrjRF_ zq8}e6=f^RCS8GMzKjR(6`Z4g7N_xb(%!&X5j-G%oRccpVqrw5z>iX! zTD*dH<3||Oop=_HGjR<{zQVaDm@W^p)_;tDRh0TR{5X3-%6tSrfuBS*b-axCuvbHC zUc*n(R-a0Yd`hvGODXoUDODlWcoOeJrKq&duJDVAr)ZO3C-!@x6t z2A(zWegn@Lc-}z2ffEoP<=kYAF2yC9>l^5}NlgQb83|E0X-&xt6kQB_;3f;Me$h<+ z9~s!(q&;Q#Eh-#S{kV~<(&O}^Dz8m**fHFg!A@aw2mf~Q?@s>h=HH%K+;z23w*kH2 zLJ#T%$*j8+tk*i0tA@3T-TaS9D^=5e~?Uo(TVAG$CX3)CgW69^ALTdeqeglLwAo~euVIq6(yYD2 z%abgteiqauOX*P-(_<_o<*&1U^uQW&`~u6jlH9j3Y9FN=_LBNb_+>_Ll0MGT9%Iz6 z;zjoQ2@)S;Phs}s1z$g|{mLr{<$oNXppMGJO{lm@@s&C^Sqj%wN=I+# zgagrGvne`UA82M{v_!96V{E<(vsLgs_51+TuazN|beOtFSbbYreag0@S%q@81qjHW z(vh(kh)-+VLIi-%XxqYs`j_<$A;Kzpg*`v_*^OUeFF?*$wd7yLguX^qU|j!SO%v+> zMNT64ZL@_Sq7@2oK;iXc2LJ#G5R)-BDSub_e;j2Ue%|ac)6ImYfd-eh5T($~mSlU- z)}{w7Nh^^}T9PKAp(vBx>1LYA%sM;U0}nj#RunG?rzb^4DcEdNs(_-XhziQD{vCck z0_yY5>~1!jZEXEv-}8Gs@B4ke-*@)4f4}e|fK7O785=`3M`e?f&7^Eh*&K^uGk>NO zSTU%WR$#{v!<3vja+Fu`5!t(Pr63zmHbvPSk0FB-F`UFH75B=OkII#gsra~5`9uu& z;gfRZQ_c7^J|hM0m($NS<1jwgjB$KkHeXQjMY;T?7`}|J#Bir{mcdtL^MHb{srb5z z2UUDS#W!Q<#JA+ex23i3#CU**6n{LdU`D|s08+&;EMDy{kWbo zos^vK5NMV%S+n5vnXbTZ!6g|_iM_j9_WE);;WT>A?E2LP)v5%U$qN__efzGt! z=2AIV&ss+6gsbQChMO7-`rcYm>c{Kd3{UEtwrm|PP7AaJ&Me)|rG_bB=YOaW^(M{2 z+6@A$8+qxs3!ZLSQf{Ydo8E4L`x8qEF1&AMnYINZ02m;E4p;IcdR!_ENpP zSm~|-p4hNcbTdY9S6Vq7-BOI<-e+elr$7=67~Z6lRq&*S@8WwJcH(-)aWer!u5Ah=nPvJDf+wDwgcv{Z);Kv$% zf}d)5Mm9f_Yd^=c3V+UMcn;4CM7s03>uLCf+&+t0daVSS#yh0Nl7e#@=5Sua3%H=* zml}SB7d5lCeQhwXSBMf+Ye-$CYdcn&+!Euan=dVj&Odua6yd7?M*Hw}N6 z{%@0aw0fy5q3!yR3#?f(=9Ng4D*>zELXI+r=NI}tgLS}hD<|{))ST>^i-RMTGOnR} zeqIS|Z&j1gStFRKu(48L4De&PmTHFDs9_L@vcOJDz<2;%sncq zo)atyT%TxEMSttdVY6B2tB}Ko%bF533jxmM#JP8(;8;b^IH-G*ycj)`F$%2v8(8_% zmtD~t9Ao~jRy8m-U+ffF=tf+V)i<&5LFlZ13!_=ddt)B$Mv1m@7%ONSzLjYwm-DZ6 zK^V&QX{j*8FKUc;Y&ne1%0_`5ork~bH7e7s^Sxw#cMD2bhr75FK>V-k$B(pPY`&|XV%@RP@ zOz|DxZw#o+ZM2{fM_NKz}`)Jd36hmR&&X@HsRGGp&S{wkz0_ zu>2f9s<;{|VZ{vAtS_N$2JKuBaxvJrat>FW2{hXtff7EAaA+6j;W?}vTs?!SCH=Hl z{q%(6;S#PMlh)_(p0a3LoB~}XTtlG}Rt1}@rTKXHJl2E|4+qw+9jm~a!*xCWE}!q7 zNPj$X9`6;H!7e#^pTNsdd!lttuBVfDlxGRhlpV#Rb67ie`ads~Ek{bYp~U#mAAj6j zSKep}+$K)ro}NgZ=_E}C2&M71^}#e$p5C;;VU1dsL_~+(Re^YrZ zs;$~htG3pvpSJxL{fegl^WMy4k_-a!Blo>`mvhhZKg+%I+!qHA5z!p}$W7aMxHKcA z87a*uX+~#%qsftGjC_uDQz7RnJkCb^>SJzlbDoTim&W7f2|Q7nNp7CZQ`~d|PnE{2 z@JVhO%hP23$qG+*alV@#;28?fbkhVbaMK1^9i!0>0SlC^EB4ekzDUX-B_%wMg%jQa6?&d14 zcH^x^;T3LLh`lg&x-=`LsTB%m2!%6UTqiyC3O6Xc%EhZ)e3o>qanmwxlxD4)UgLEN zuUB}3yq@i*T5fXFNMQwcF5V;`=Snk2;mvMp3o^n&KJmnZ-~4Xy6F?XNIox;w~NIz7b*NrCbc#k)}vKH zEf&*bOrGkR6_xAi)^4t@ZCtyicKN!swW}I`Hm|N+yOJrV?mTUqRvy&Ct>ukIG!SlG z%rv|z5{?;K*jTRx*E89xB7U7|WL+SvH^f8DdUUOZ zL9sx@rv=w*(SUp>I_*YV0G6ASac8kjFbMA5zNoGldUYUXFfGa`!3OIIgSG@(<5A5B zM8b;;Eu#k_<)RZYg)e=asqnZ-K_WkYwvPsyO8e|$_kq_%e`MNc=n39`5rLj$$ zGk-y2Jj66QD56)V4J!OCbk_~;W}0_QEl(e^3Og&Zb9Eq^Vya(e)!h7?K)ZZHm%xeM zF3VyH?|@k_=!*xT-ZX}%6%3?On8|x=ZF(mY2k=)5OSYKgvqEr*$=39k?u$o%14dVQ zJ+KHMRtH-3m?0}$#OS%HJ!-@4aRYR9Erd~q8l27XmKK3}*2d-Vw&pHaUo$kOY;0|qV`?ki!Zu1LnZ^vAAS3z!gs)1u-Qtv$%@ws_Y#EKWL$&Es+*Sx!83}>TaOD5n?*4$&$Iz}Mrr!`M#m7WN#bNUz0m&Iot z$Kn$WqFJ4D`*&G?AiFF+VRNUuO_J2Y6P8vMH=42Ag1(xVS0>X`dYYb5=^c7krCxei zrQg#ZRC=7AQ0Wr-mP!}XH&uF&9#ZLYz6u+kP^l@4zNgZ+=`xje5VG#~RsI2At@1T| zt-{yI$Mq`zkZ(}=M|=a)@zI5vK3j^wBg& z1qH~;xA3hh-^RDAdKq`Ck61H20~zo3B;*XY>YgLI27% z@vspH>8Y5_wB>YD4sUur;GLNto9XpO^q4msF}x^04J{D%YT+(Siz1;$B$}0ZYZBSj zYec*)2;^RWy%UKz*yWv_n%7l^QlfwVRn6z2Tjihg{i3G_RNlk)Fl{<26N$ZJ*dpQ$ zeKihL-pdcFbSvGa@n{_?xHMCH>q-}3Uz-TMW51R#fG~_kfGy{!)?wy&j+@9%ek4CW2=<-6-U9y)2 zu+jv;$`a!c+bcz@HxPqzq9P*<{3+K;Q`4{jIP@wZ>F_j(;VD4oma= z0HIRlnaVHlwaD+HLV^E_$!P=2ER|o9X;Z#`ywXzmWtD%;uc-X01iQSUks+aiqN+$d z=r^4hwJ4k;S&Vwy`>RoJOC(z1m8kI>g@3E^Yy1Eb@#>(i#RN`XIqZt-!M1R$K#K{r z4lQhm)5S4IV3u%Lk2{)5VYukqDbv_Y_2K}2*S1A}BOTTm5cRth%>}i!@|<~`HxytIN85q=7*$X> z_=;luph;rakNMtXS%PWviCoEirTdMXL2R3+nUr|_MsZ_a>Z)VMS1!K>YVEj% z%Ul;awZ!?VGUG|fL<^EL;E7|GQC;;8#{W5xB3^lJHhZ&KT{WmeW1+^Km2I*e;F=TMUssWhtkBem>%SY!H>?c5*_u4(68QRyM~X!MLG|D-2AyU8pkP zoi^mI^c#iM;HLjvJSIao)X^?qLAi?3I|HUcEd%4rjI!Bsk0V$#FH#DJ#JFLBSaq`a z0}GlTwmbRQS7g{?6lAK>!jUk_!k{J8xPlB93TCJSoTH{D(-ql&m7;WiXaNKHA7R-< ze_901OA7%5ZxP35KDo<&WBP{@S3=V362GW3?|qh>5N3wl9!U_YPhO~{nG!MHbiLsT zS5JNq47^tFV!6{v7A)rR@3>qdc`xNT>hWIgB_gd>AX%L#l$mB67yZRaaje8BaawN4 z)-|SnUr8HSYzB$CNC%>SB378L5t{Gx(-y_G>@)_er;G=L_egR zkZdC4ype9gtZ6ifevCIK-Hg?Cth@zlaQwC8;S12`#>l0AIpg<}r@ogaG!^&I#0J{} z`{+^hu&ct6YtOosCY5>|-85-|J=cCq-zOy=hb&yseqJIn|jDwq1YC< za$O$hp*v{SXzKGgb6s;U+)pP}WP7r^X`1~u8sDLY0uyR9m6~ZL`JgC2okFcpM}SVJ^Jooi#f%`nLUcYw zs0)1;QPfmn3j~zaw?j$UbOz0*JLo6m5}{LSy_D{RlHeLxbr;5k5FNgt)y{3 z!6Awt#b^n_$*qau(!s;F15}np3C!8kFxP>$6JmA&=U)fnE}$xSXuoeXq?FTOVu{VS zeNbY57FMpLZt8(@_M=xd6(>Ch&?9QdrmQ10U7>?h28h^84<|%?2|5%eYD%A`s-lt} zDzC7Yir>t-k>&zYvp3|-QA|mS8=LItnA_OoC~a(Vdh8-ug<~(x6GYCp@23TOQm`p9 zv3vkOx@ZY(3o&w)l2EVC)hM!z%dXp1z~9sKj1{J{hGU~_^dAQ7PDKpb(@S|x#W_oR=(Kun=%r;%&PS-S$(FMm z2Ff(WI7D^xv<+BdY)c@u`B3IdeQW%D=_zE`ZfBlhgn~y zS4=n`P66OBFev~SgPnh4!Z{az{QNcr=NfXk`mnDnX?gswRA`w(uPL-rp?abtGzEQq zl9$sb5iM7!@eGC54KD=Q*XfN!25-Zcc+G^IE&EB^OU>Qnt1Hg&caxrVCpql9ZM#z* zoMW>4Bv^ln#sOmE0WeXbp)h?T}8F z`Q~vwx(7mTLYj?&yC@mv(+!|Y1$P;$x64urYyj8@mT^Nhqo4|Z50o*T-iGqtp;IC0 zGI|e`-UqD@kh(tvr4NvmK14?P2=qQiEdK=5K8E5xLG|+wQ`u{vm+5pi{e}Jtjcr0< z@E-jQ79WMY_CEa`J40tFWnTk|RtCEUbOrQREP#-Mk7_<^wBr`=L*!U;?E0HN~ zMxVenf3zKCS3_|r%B`ja_M2!#NvT2*B(@sM^+_@vL0_-)R32@%~d(d;dno zi{wk6r$7m!DNW>K?mea^^67t|G0Ejq&7#Hz$mY@inuX4P{ics0ha>*)JwmzM&-5r4 zcKS5IbPZOCrj?>%0Z>Z=1d}e=8nbm) zoB|DRZW$4_0RRAC0{{RxlL1>Jlf&5#65H4Rn%86N+c0z#vKz0e2(%4H+bR(O+m%yxmJE*!Xg zuSDA;P;?6?+8Ln`?T+AHbKb$Cond+uPwFx16w63Z=1erkVu=r|XE?}uP=?j9p3z}g zSMg-R8uM+siqQ=USAS_do78r6Fm9NPCOmx*?A`}oJ^*&`%-ZLy8?2DH@|xd7e*jQR z0|W{H00;;G002P%9ZJ~Z76$+TTa*1-FMnxc8&?%QV@n!Y9>j zK->nrHBoEX!CP_C)*V|Dc@lY~jz){g;JbqVVi?~G z>MHMe8I67Te)AN&N$+6AVvVUV1ECpKHvJ877ua`G1`%v{;lMR#=YZBYl_5^#yx+FmOP8k%Vcs35$mmy8)*0vXQItS7eG zg#z8My_G6|aOF!^%%XzX_Xswb*>rVWfkGd<_E??TTr-M(d_pA`f(Y}DzIG#{ z7yUwMw~dX$O=D`)F|3js_JHL^OJQ`BG-K#jf)~Sn-xJGlQj2rxLw`ab;a#-zwW8kD zrtu=nK*bLfL}+)MNplm@e|UiE7a|}z=E3PsrN+%% z+H#DXQ2LW7jAC2pyr$q-gUl=FsqfB}Eyvt2_Wap9Q7GrLF{|Lj)>)`A(<+vom{%$z zV*Af@m%?B0x`sQbXsC+2cLXl>cJ3L9j=D3mtJjS+XW!PmU*h+_!~4s_@xg-ydh9^s8+U82 zGv2V!4=RiQBri}_R>AN)y7qpFNfUDlyFQ#g(32Y&TJr7?+nC4EUw9nG8g}dboxc&n z-Zwzo8yW>C|9?*_^4dh&ee%}G<;>xpAKJ^p(h$6M7Kjf@LkpFQS>2(zVEpR1FbZXT zv`{?l?R3S{4KtHy)Yt1f3+r~_mNY=u(N;e4B%d`lXRnFL2Hfd?OR2oN+eMGZ(~WVZ z=lfM)JYClFr33c7vK<|~vcGb-N{+GN1@W?7V5*$0Lw|@Y;S|4;&hm?_8QpjQ=b+$& zTs2{k>ksW&C;4L&q#WiRdm_h&xOzWlg>x`bh4PxKdVynvGth?s?!`waX`T{3iZRY& zVB9zGFf~OtA_fx4J7}s~IYL_CcU6EiThQ-XI__!vmP8U-LSh1wzRmvB6L2m19e&c3RlsxgUE6ftz2mpv_+3_=ninGpuLKY^TA!+qx*ED z`*dAtsD3E4gJa8y?qGMQiq7qtJ3R<-jMJ4tv?GBNjOql2u!&*UwM!o9nrpW)#qh9J z@C+_87fn2MlUnB(mJ_h}`kZ5ECK$>`7=j?}w144IN+D|UW%7ej7#9iEz zAz=5+5Yc*eaB?|7M!i+^bqrK+?{;PfvE}F~W~%>9*YYW*{5`Z+kKGu@akSFs4ko*w z$bYAaE&M(}|3m1-WqgeIt&Gnc=6UusCEpW1?z228HhUPS`!Yk4nty={eFPuc9_kA`Rl)sr^yBmx^f5^PGRiO(Ve!KW|UZ5EX++;F3SV7_? zgcGl$X*(HBx~mSk8_}V=7_MSuTe9buRW!wNa%<~-yO-k3n+J$LPS7Vv;z_1zg(5|y z@44NRHR6-V))GZ7N4ogG;TGvNrd-OD?jAshFa^jR*WQn8QQaknNQ?Rd8MExl!BHR zGuGE-eI={u>YQvARda~6hc#WZMi?eK-PQlqu-PkRdP7}{48AdAMP+CdjM>fgWz~Ex zFBgat&KinbSd>jooJ&lfaF^j?=9Q(IJ5Ftl1(eOVQGfWF~-p3(2gk*T7>noGrKCkkrM@3&nFfvQ`7T9 zm7Fej&nvLW2d`}AMdB*(=*tquTCT)9>DxOxB0#dDtj)+9_NU-@!mxHORp1_L z%B~d8+oV`hVo5VZs=3D?Ef|}oqK<2#d|E1WdPJ^&f(YY65Fs>iJPl$T6C9I4OyLqo4;wr8Q$7ZOIT@6eh1K)C-pu5Tfa|(!BtNbY3niWfq zq3=vRR!vNf#mts$s)u7bPLMu*(@^cZSJ8<@;3!d@$%>*Di;;mORcUV(jnU<_>87O> z64X_HqQed`sGakw#n4ecF>=eRs$%WkEoX7e(cC%|+PkA>%{jDV`OvAhd8ezId)1=- zI>X>Oxx!CUFO9(emAd$8P|-%e{6=~luuw=0G@`uli1`NkZPICy&R*Js(by+=qOtf6 zydUW7K{KrlLdGUg!zK}6Q)nSx3&}_ymv9Atuqm2M#ACQl)*RIL@WV%YCi)Sc&+x^+ zpvHsmsGaTpf$%Q)Qj8@2DBD5Z_AaC)p|^{`QY=oaVE3M|e%p3fxDpnCYz9qi7R@Y& z2%ERvi8_Y%-O1n<+Q|(;-6qOIK_?Nx9m44#t{?0-A{@0Lf!SGdI7d=}!|e>PgACM5 z3Me*SW{U5d;^-o9W>Zl+2ZD+rZs)k$#^}Li+DFN313kuCiF1SYn?4D51w_bCH&W<_ zc!i}fMDhUb4&6MBn6sVad28Ev?jgDLU9#rIU~zWUZIcBw@7E&At}?O|2osR z=-<9WJ3T8oU}A$zCNuq`-97v1oNqs!Jvx8>`|Aq;b9f+Q2#Y7^k&zL>B1cY!ge4hS zTn^$2u5x@N7Rwwf0``Bg3>nurt_N^~W6owHmsWBlMDC8uk^28sva*DPdS|*2=ndS1nh`63*8(wYs5NhFG_ZlAy~FS-hKCdy!mt1UbD{r_BY@B zIQz_;)lqd(K-?}?XXExQE^~<&eEyN?(QE^LRT00juzF)_Vviaw=W-%Ek!0gRYoHho z^)X}=J=@ZnziD??fWfUtl;|gpium$Y+fO?uC;TifvKWes!Y;R;g)Rx?cEsIr%>B?f zkgSnjOlJi1sIIE_p?FNjUE+d1m(FUpy1Wc9AiH|!{Or4y@fz#7RrbvU-JzqKXuwxe*`Tb zDB`x1%yz(k1|C*wb2+4zJ`5EB zZTkMuy>U9P-P6BBmcOSSDt9|XQ5ImcKp#Yxlv(@b%!O#0o;+{gLL+%oU6T>Ky}^#p zUg-vL!b&#vPFhbBKD#N5x42`1^0?D{O$M_~YFx;x&7|j+!9|+y7rx zqMf_a-rv;h5k<>5f~gQRT0ihfmZ-MHQpc)%rT06kc_Gq#3vj@vOh)V;xwyG1qGcYh zrJAH&A1>Au{`-~cSyFIRpUht|N`>xcRAXR1t&E=v?8AnIt9A zO-Jaua72Z&#CC-3SP0!P%3nMK`JA_xy9z(mb4oVEa^t`glO3xyA%Z44Yz*e3@O4i$ z*NjmAAk5L@xet}A;P-aThg)>Gk>GyNq9G(*?gXY!`mL#J%A?{ygGL?>G4f~YID7R3 zT2#XDdg(&f1y1F#W3P7i)vhGB0X&?a6uH@%t!oDYTrD{Q&VX3bl+C6;KSg+V(gmFG z)acrvU%N(V~+m>AfKh0UUxo5ki%Ywt*l?v`QO zdcPy>oklaHnFP+Nd7w$z6wu1+QY{BnvN(-sZsU$G zt?PRb6r7}vufVLuc@vwg21YB$6I=e!)F2GI_ltw&eR?B|YB@z%Lb-%?LW+%vr{OJS z?(6UdSAvctJC%o~k&tgHYz@k`UOl}Ku2EM11gkY6^42SMsDI;URDp(U0{hsY=JeMk zuq=i6o3t|3L(dhTdb-%SGpGg446611WR}sMaWDE6N+`NBU*YSg9`#zcQ)0u;y{|3} zWJ+aYrmJk5DBH%JRtB##v$5xn<^9%HY@bG!Ogm;e$GB2*iQYKRQ(=F6^LnXFuGDw8 zQNl(9AM)*@JRi5>E)xn&dqHPUhdX|~@=$|5<4uz7Bh=-Vs4geV0>bwaMqelwsMD-8 zgF$+4G1t@p;-itJvqD;_t)Ep{Of+<*F!>SJ{Med|-NQ z2$D_8lH62!kqG@)r(x{X$-AbC*>B|w*%q&2@P}MHyM+}u-~z!(zPzUK{N1_hCuMxj*9vs`@f&KD$d(m6=4-h}by9unzpV49=Vi?dU0C%xp%;M_ z7@zc#p{~aH%5)VcmewmeWfcZpPB@yBm5wAe#e7la?sI8Qm{+_lAu-SXr=pnzZq6TQ zK=}ne^rod++kY5N+pf1rL%mVm&3|k#xZ+fjcwX(;oR-kad}5-`Y)K+)wIEUFrWAR@ z(%A4x(CfJRv=f8x1m(8mcBJOtgls0=@V-CR(wX9uFT8VNM`Dg|U(q?CSDD?Z?ZPwF zBodFG{IjPYj~{yz>0xIT2`Ac~y#=kfWOJ!7J+HFH-muoH?>W%~_0&BgrqgS9MSLXJ z?O2fwtbC;WBqK{BSn@kGp3@@V(K7A2Q}ycOYf`!57cM9a#=fXR63W-s@ypLK*@x1U z&B&m!ubh$vam$3<6217F?8cZne`N*8C8cQIM}29(sUrB^v&nnA_u!XaE$C>P(C0wB z`mUwA5CNuj^P+~i$gBDF&htlIpE-Cmzbot;eRw60KYritlI_HJ>gGnpU^i~+^0gkh z64#rJK?i*`8jQo0A5*t}iKWGC{#%kG`1MBsezQHOr1@0=14 zz~k+PB=U>=zUfhg4Nf?Qr{DN472oNE>6uH|&udobf-IU#H#V9ZHD>Qpi7-x$_Sk<& zW5wia@vQ?=r?9$4&5<}C{yI8(G@j&dp>V&@Hn+V+zZM}aC#p3LG{R|i3k1)=YH0P+ zK9tkqnV00s#y1UXQf`hL!~hw4p}SHM=>gI9$mZwoRN2;h&BBc!}KGv>Aw#bMNrgb z=*}0azjA*QxbE*3O)v_2xlYyiJfN@ZK$|%0X(D7EUvuY9t60Yy&LoGDg-gFS1%55D zW3FX=QLi~%B{>j4+E@x#!+f{w>z@^&W(P6_4C@HLysvnW>Nk? z+(>AD(x^h6)QBc4&1{YFo!8MzdG&58x!5DFMpvI2@F8axj_%i}1HBLWa3Afy+TUj` zTlR3yVoklb8}-9#m+NqMhT7qs=ri=0bwWrqDgNlww$25xK^E$7k(=N{x{LR3dsuoQ zMD+HY^%ihgNx+uqpqf22s+FU5AUjj=fXl_45kVvb;wcM( z9A@^blC@y<7lc4=)A;WIzi+qcibF}RB=yasx4Hk$gfdivB zpiBr%5my1_#&AHj7*iwwdX4D=wNO@%-e4Y7EG96|Jf^N zx_}(sBj7h@3M4>T>T$sPkN*@xH3Y&gvEUF@9|*Mn8*+iiX==cTE9g!$2b76m6U`b3 zC4$IFO`w7ZnorsRCq0;h5a{491ujnFfKS&!pK2_qG^GoK`LN*Rq$pTDg#o5-vcio4 zUXV5c2RWuOfK(tTKCOY>vpun=P*@OCAPHtq>jU+nEXcTv1Y^hG*nj#gC7{ z0hd2n@FMdp12Z#r&+ERY!2BZSGm`-q=W)P#131tn1L`c`0FHLhW5EWH?E<%k@ZjbM t97HfMz;-t{JgmtI1DN4(FPO?W14#6Na}0%pN)RPT7Xkut?fZBBe*sCPA Date: Wed, 9 Dec 2020 16:06:07 +0100 Subject: [PATCH 11/24] update documentation --- core-customize/README.md | 75 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 73 insertions(+), 2 deletions(-) diff --git a/core-customize/README.md b/core-customize/README.md index 384ebf5..9fb4ba4 100644 --- a/core-customize/README.md +++ b/core-customize/README.md @@ -15,7 +15,78 @@ jsonnet --output-file manifest.json manifest-generator.jsonnet ## Demo Setup 1. Generate the sample `manifest.json` as described above -1. Download the latest Commerce platform 1905 zip file and save it as `platform/hybris-commerce-suite-1905.6.zip` -1. Download the latest loud extension pack 1905 zip file and save it as `platform/hybris-cloud-extension-pack-1905.5.zip` +1. Download the latest Commerce platform 2011 zip file and save it as `platform/hybris-commerce-suite-2011.0.zip` 1. Generate `demoshop` storefront and `hybris/config` folder: `./gradlew generateProprietaryCode` 1. Setup local development `./gradlew setupLocalDevelopment` + +## How does it work? + +We use Gradle + [commerce-gradle-plugin][plugin] to automate whole project setup. + +[plugin]: https://github.com/SAP/commerce-gradle-plugin + +By combining the [configuration reuse][reuse] mechanism of CCv2, the [optional configuration folder][folder] of Commerce and a bit of clever symlinking of files and folders, we can use the same configuration locally and in the cloud. + +This setup uses: + +- `hybris/config/localextensions.xml` to configure extensions +- `hybris/config/environments/*.properties` to configure properties per CCv2 aspect. + There is one file per aspect, plus the special file `local-dev.properties` that configures the local development environment +- `hybris/config/local-config` is configured as `hybris.optional.config.dir` and contains *symlinks* + to the relevant property files in `hybris/config/environments` (by default: `common.properties` and `local-dev.properties`).\ + **Important** Contrary to more default setups, `local.properties` must not be modified at all (that's why it is in `.gitignore`). + - If you have any configuration specific to your local machine, put it in `hybris/config/local-config/99-local.properties`. + - If the local setup changes for the whole project, update `hybris/config/environments/local-dev.properties` +- The default cloud solr configuration set is contained in the correct folder structure for CCv2 ([documentation][solr]). + A symlink in `hybris/config/solr` allows to use the same configuration locally. + +``` + core-customize + ├── ... + ├── hybris + ├── ... + │ ├── config + │ │ ├── environments + +--------------------> accstorefront.properties + |--------------------> admin.properties + |--------------------> api.properties + |--------------------> backgroundprocessing.properties + |--------------------> backoffice.properties + +--------------------> common.properties <---+ + | │ │ │ └── local-dev.properties <--+ | + | │ │ ├── ... | | symlinks + | │ │ ├── local-config | | +manifest.json | │ │ │ ├── 10-local.properties +-----+ + useConfig | │ │ │ ├── 50-local.properties +---+ + properties | │ │ │ └── 99-local.properties + ... +-------------+ │ │ ├── local.properties + extensions +--------------------------> localextensions.xml + solr +---------+ │ │ ├── readme.txt + | │ │ ├── solr + | │ │ │ └── instances + | │ │ │ └── cloud + | │ │ │ ├── configsets +-------+ + | │ │ │ ├── ... | + | │ │ │ └── zoo.cfg | + | │ │ └── ... | + | ├── ... | symlink + +----------------> solr | + │ └── server | + │ └── solr | + │ └── configsets <-------------+ + │ └── default + │ └── conf + │ ├── lang + │ ├── protwords.txt + │ ├── schema.xml + │ ├── solrconfig.xml + │ ├── stopwords.txt + │ └── synonyms.txt + └── ... + +``` + + +[reuse]: https://help.sap.com/viewer/1be46286b36a4aa48205be5a96240672/LATEST/en-US/2311d89eef9344fc81ef168ac9668307.html +[folder]: https://help.sap.com/viewer/b490bb4e85bc42a7aa09d513d0bcb18e/LATEST/en-US/8beb75da86691014a0229cf991cb67e4.html +[solr]: https://help.sap.com/viewer/b2f400d4c0414461a4bb7e115dccd779/LATEST/en-US/f7251d5a1d6848489b1ce7ba46300fe6.html From 9155212380e5b23fedd56ae8cfb039179cb41cd3 Mon Sep 17 00:00:00 2001 From: Markus Perndorfer Date: Thu, 10 Dec 2020 13:28:22 +0100 Subject: [PATCH 12/24] split bootstrap into dedicated build --- core-customize/README.md | 75 +- core-customize/bootstrap.gradle.kts | 190 +++++ .../environments/accstorefront.properties | 0 .../environments/admin.properties | 0 .../environments/api.properties | 0 .../backgroundprocessing.properties | 0 .../environments/backoffice.properties | 0 .../environments/common.properties | 31 +- .../environments/local-dev.properties | 4 +- .../local-config/99-local.properties | 0 .../config-template/localextensions.xml | 44 ++ .../manifest.jsonnet} | 82 +- core-customize/build.gradle.kts | 138 +--- core-customize/generate-manifest.gradle.kts | 27 - .../azurecloudhotfolder/.classpath | 14 + .../azurecloudhotfolder/buildcallbacks.xml | 103 +++ .../azurecloudhotfolder/extensioninfo.xml | 32 + .../external-dependencies.xml | 30 + .../azurecloudhotfolder/lib/.lastupdate | 0 .../lib/azure-storage-8.1.0.jar | Bin 0 -> 784615 bytes .../azurecloudhotfolder/project.properties | 43 ++ .../resources/azurecloudhotfolder-beans.xml | 17 + .../resources/azurecloudhotfolder-items.xml | 15 + .../resources/azurecloudhotfolder-spring.xml | 349 +++++++++ .../test/azurecloudhotfolder-test-spring.xml | 34 + .../azurecloudhotfolder/test/customer-00.csv | 1 + .../hotfolder/aop/BlobTransferredAspect.java | 90 +++ .../AzurecloudhotfolderConstants.java | 24 + .../jalo/AzurecloudhotfolderManager.java | 31 + .../remote/AzureBlobEntryFileTemplate.java | 28 + .../remote/file/RemoteFileHeaders.java | 27 + .../AzureBlobNameComparatorAdapter.java | 39 + .../AzureBlobTimestampComparatorAdapter.java | 39 + ...ureBlobPersistentAcceptOnceListFilter.java | 63 ++ .../AzureBlobRegexPatternFileListFilter.java | 42 ++ .../inbound/AzureBlobInboundSynchronizer.java | 704 ++++++++++++++++++ .../AzureBlobSynchronizingMessageSource.java | 193 +++++ .../outbound/AzureBlobMessageHandler.java | 145 ++++ .../AzureBlobRemoteMoveMessageHandler.java | 197 +++++ .../remote/session/AzureBlobFileInfo.java | 232 ++++++ .../remote/session/AzureBlobSession.java | 375 ++++++++++ .../session/AzureBlobSessionFactory.java | 36 + .../remote/session/ExtendedSession.java | 30 + .../tenant_junit.properties | 14 + .../aop/BlobTransferredAspectTest.java | 133 ++++ .../remote/session/TestBlobSession.java | 218 ++++++ ...hronizingMessageSourceIntegrationTest.java | 156 ++++ .../cloudcommons/.classpath | 13 + .../cloudcommons/buildcallbacks.xml | 103 +++ .../cloudcommons/extensioninfo.xml | 31 + .../cloudcommons/external-dependencies.xml | 21 + .../cloudcommons/project.properties | 29 + .../resources/bean-builder-template.vm | 97 +++ .../cloudcommons-backoffice-config.xml | 256 +++++++ .../resources/cloudcommons-beans.xml | 72 ++ .../resources/cloudcommons-items.xml | 227 ++++++ .../resources/cloudcommons-spring.xml | 75 ++ .../cloudcommons/cloudcommons-monitoring.xml | 165 ++++ .../test/cloudcommons-test-spring.xml | 25 + .../resources/impex/projectdata_jobs.impex | 24 + .../backoffice/cloudcommons-labels.properties | 16 + .../cloudcommons-labels_de.properties | 0 .../cloudcommons-locales_de.properties | 28 + .../cloudcommons-locales_en.properties | 96 +++ .../cloudcommons-locales_fr.properties | 28 + .../aop/exception/ActionException.java | 25 + .../commons/aop/exception/StepException.java | 24 + .../constants/CloudCommonsConstants.java | 30 + .../cloud/commons/core/StopStartListener.java | 25 + .../core/impl/HybrisGroupRoleController.java | 212 ++++++ .../commons/jalo/ApplicationResourceLock.java | 35 + .../commons/jalo/CloudCommonsManager.java | 75 ++ .../commons/jalo/MetadataStoreEntry.java | 35 + .../commons/jalo/MonitorHistoryData.java | 35 + .../jalo/MonitorHistoryEntryActionData.java | 35 + .../commons/jalo/MonitorHistoryEntryData.java | 35 + ...ybrisAwareScheduledThreadPoolExecutor.java | 135 ++++ .../HybrisAwareThreadPoolExecutor.java | 166 +++++ .../HybrisAwareThreadPoolTaskExecutor.java | 314 ++++++++ .../HybrisAwareThreadPoolTaskScheduler.java | 158 ++++ ...antAwareConfigPropertyImportProcessor.java | 54 ++ .../services/monitor/MonitorEntryFilter.java | 19 + .../services/monitor/MonitorHistory.java | 69 ++ .../monitor/MonitorHistoryFactory.java | 40 + .../monitor/MonitorHistoryRestorer.java | 19 + .../services/monitor/MonitorRecorder.java | 23 + .../services/monitor/MonitorService.java | 41 + .../DatabaseMonitorHistoryRestorer.java | 105 +++ .../database/DatabaseMonitorRecorder.java | 74 ++ .../database/MonitorHistoryEnumHelper.java | 48 ++ .../MonitorHistoryDataConverter.java | 86 +++ ...onitorHistoryEntryActionDataConverter.java | 54 ++ .../MonitorHistoryEntryDataConverter.java | 88 +++ .../MonitorHistoryReverseConverter.java | 68 ++ ...istoryReverseEntryActionDataConverter.java | 33 + .../MonitorHistoryReverseEntryConverter.java | 63 ++ .../database/dao/MonitorHistoryDataDao.java | 22 + .../impl/DefaultMonitorHistoryDataDao.java | 35 + .../AbstractConfigEnabledMonitorRecorder.java | 68 ++ .../monitor/impl/CompoundMonitorRecorder.java | 39 + .../monitor/impl/DefaultMonitorService.java | 191 +++++ .../impl/UnsavedEntryMonitorEntryFilter.java | 26 + ...itorHistoryMaintenanceCleanupStrategy.java | 140 ++++ .../logging/LoggingMonitorRecorder.java | 110 +++ .../converter/AbstractMonitorConverter.java | 45 ++ .../MonitorHistoryDataConverter.java | 54 ++ ...onitorHistoryEntryActionDataConverter.java | 26 + .../MonitorHistoryEntryDataConverter.java | 62 ++ .../metric/AbstractMetricRecorder.java | 105 +++ .../monitor/metric/CounterMetricRecorder.java | 60 ++ .../metric/HistogramMetricRecorder.java | 55 ++ .../monitor/metric/TimerMetricRecorder.java | 57 ++ .../SmartLifecycleRoleBeanPostProcessor.java | 82 ++ .../spring/context/SmartLifecycleRole.java | 22 + .../FileNameComparatorAdatper.java | 33 + .../FileTimestampComparatorAdapter.java | 33 + .../file/comparators/NameComparator.java | 52 ++ .../comparators/NamePrefixComparator.java | 55 ++ .../comparators/NameSequenceComparator.java | 97 +++ .../file/comparators/NamedObject.java | 19 + .../file/comparators/TimestampComparator.java | 25 + .../file/comparators/TimestampedObject.java | 19 + .../file/filters/ChainFileListFilter.java | 59 ++ .../metadata/ExpiringSimpleMetadataStore.java | 71 ++ .../metadata/HybrisMetadataStore.java | 249 +++++++ .../dao/impl/MetadataStoreEntryDao.java | 26 + .../leader/LockRegistryLeaderInitiator.java | 609 +++++++++++++++ .../RoleAwareLockRegistryLeaderInitiator.java | 120 +++ .../locks/database/HybrisLockRepository.java | 387 ++++++++++ .../dao/ApplicationResourceLockDao.java | 61 ++ .../DefaultApplicationResourceLockDao.java | 123 +++ .../PatternMatchingDestinationResolver.java | 64 ++ .../suspend/CloudSuspendResumeRegistry.java | 79 ++ .../suspend/CloudSuspendResumeService.java | 114 +++ .../suspend/SuspendResumeListener.java | 53 ++ .../cloud/commons/utils/EnumHelper.java | 58 ++ .../cloudcommons/tenant_junit.properties | 14 + ...HybrisAwareThreadPoolTaskExecutorTest.java | 402 ++++++++++ ...ybrisAwareThreadPoolTaskSchedulerTest.java | 293 ++++++++ ...IntegrationTestMonitorAssertionHelper.java | 166 +++++ .../DatabaseMonitorHistoryRestorerTest.java | 96 +++ .../database/DatabaseMonitorRecorderTest.java | 92 +++ .../MonitorHistoryDataConverterTest.java | 135 ++++ ...orHistoryEntryActionDataConverterTest.java | 100 +++ .../MonitorHistoryEntryDataConverterTest.java | 136 ++++ .../MonitorHistoryReverseConverterTest.java | 111 +++ ...ryReverseEntryActionDataConverterTest.java | 75 ++ ...nitorHistoryReverseEntryConverterTest.java | 138 ++++ .../DefaultMonitorHistoryDataDaoTest.java | 91 +++ .../impl/DefaultMonitorServiceTest.java | 377 ++++++++++ ...HistoryMaintenanceCleanupStrategyTest.java | 106 +++ ...HistoryMaintenanceJobsIntegrationTest.java | 149 ++++ .../logging/LoggingMonitorRecorderTest.java | 93 +++ .../MonitorHistoryDataConverterTest.java | 83 +++ ...orHistoryEntryActionDataConverterTest.java | 78 ++ .../MonitorHistoryEntryDataConverterTest.java | 98 +++ .../metric/CounterMetricRecorderTest.java | 164 ++++ .../metric/HistogramMetricRecorderTest.java | 172 +++++ .../metric/TimerMetricRecorderTest.java | 174 +++++ .../FileModifiedComparatorTest.java | 50 ++ .../comparators/FileNameComparatorTest.java | 51 ++ .../FileNamePrefixComparatorTest.java | 70 ++ .../FileNameSequenceComparatorTest.java | 51 ++ .../database/HybrisLockRepositoryTest.java | 208 ++++++ ...atternMatchingDestinationResolverTest.java | 69 ++ .../impl/HybrisMetadataStoreTest.java | 169 +++++ .../util/NeedsRunningSpringServices.java | 29 + ...sRunningSpringServicesTestRunListener.java | 110 +++ .../cloudhotfolder/.classpath | 14 + .../cloudhotfolder/buildcallbacks.xml | 103 +++ .../cloudhotfolder/extensioninfo.xml | 28 + .../cloudhotfolder/external-dependencies.xml | 46 ++ .../cloudhotfolder/lib/.lastupdate | 0 .../spring-integration-zip-1.0.2.RELEASE.jar | Bin 0 -> 23684 bytes .../cloudhotfolder/lib/zt-zip-1.13.jar | Bin 0 -> 110605 bytes .../cloudhotfolder/project.properties | 56 ++ .../resources/cloudhotfolder-beans.xml | 33 + .../resources/cloudhotfolder-items.xml | 38 + .../resources/cloudhotfolder-spring.xml | 74 ++ .../integration/hot-folder-aop.xml | 67 ++ .../hot-folder-default-mapping.xml | 94 +++ .../hot-folder-file-routing-spring.xml | 91 +++ .../integration/hot-folder-file-sorting.xml | 37 + .../integration/hot-folder-zip-mapping.xml | 234 ++++++ .../test/additionalTestData.csv | 37 + .../cloudhotfolder/test/cleanup.impex | 27 + .../cloudhotfolder/test/coredata.zip | Bin 0 -> 1127 bytes .../test/hotfolder/customer-00.csv | 1 + .../test/hotfolder/product-00.csv | 1 + .../test/hotfolder/unknownfile-00.csv | 1 + .../test/hotfolder/url_media-00.csv | 1 + .../cloudhotfolder/test/images/y_logo.png | Bin 0 -> 7971 bytes .../test/product-with-media.zip | Bin 0 -> 253677 bytes .../cloudhotfolder/test/rawimpex.zip | Bin 0 -> 1480 bytes .../cloudhotfolder/test/sampledata.zip | Bin 0 -> 1461 bytes .../cloudhotfolder-locales_de.properties | 28 + .../cloudhotfolder-locales_en.properties | 21 + .../cloudhotfolder-locales_fr.properties | 28 + .../aop/AbstractMonitoringAspect.java | 114 +++ .../hotfolder/aop/BatchHeaderAspect.java | 274 +++++++ .../hotfolder/aop/FileUnzippedAspect.java | 99 +++ .../hotfolder/aop/ImpexImportAspect.java | 138 ++++ .../aop/utils/ActionCodeGenerator.java | 38 + .../batch/task/CloudCleanupHelper.java | 58 ++ .../constants/CloudHotfolderConstants.java | 25 + .../dataimport/batch/zip/ZipBatchHeader.java | 138 ++++ .../dataimport/batch/zip/ZipHeaderTask.java | 25 + .../service/UnzippedFolderImportService.java | 24 + ...DataImportUnzippedFolderImportService.java | 129 ++++ .../impl/FileBasedSetupImpexService.java | 111 +++ .../service/impl/ImportZipSystemSetup.java | 46 ++ .../RawImpexUnzippedFolderImportService.java | 69 ++ .../batch/zip/task/ZipHeaderCleanUpTask.java | 60 ++ .../zip/task/ZipHeaderExecutionTask.java | 71 ++ .../batch/zip/task/ZipHeaderInitTask.java | 93 +++ .../batch/zip/task/ZipHeaderSetupTask.java | 86 +++ .../zip/task/ZipHeaderTransformerTask.java | 122 +++ .../HotFolderRouterChannelInterceptor.java | 87 +++ .../hotfolder/jalo/CloudHotfolderManager.java | 32 + .../integration/file/CloudFileHeaders.java | 30 + .../file/TimestampFileNameGenerator.java | 34 + .../zip/CloudUnZipTransformer.java | 283 +++++++ .../integration/zip/CloudZipHeaders.java | 27 + .../impl/UnmappedHotfolderChannel.java | 111 +++ .../cloudhotfolder/tenant_junit.properties | 20 + .../CloudHotFolderIntegrationTests.java | 440 +++++++++++ .../hotfolder/aop/BatchHeaderAspectTest.java | 334 +++++++++ .../hotfolder/aop/FileUnzippedAspectTest.java | 121 +++ .../hotfolder/aop/ImpexImportAspectTest.java | 189 +++++ .../batch/zip/ZipBatchHeaderTest.java | 37 + ...ImportUnzippedFolderImportServiceTest.java | 98 +++ ...wImpexUnzippedFolderImportServiceTest.java | 116 +++ .../zip/task/ZipHeaderExecutionTaskTest.java | 87 +++ .../zip/task/ZipHeaderSetupTaskTest.java | 114 +++ .../task/ZipHeaderTransformerTaskTest.java | 119 +++ .../config-template/localextensions.xml | 340 --------- core-customize/manifest.json | 3 + 237 files changed, 20144 insertions(+), 587 deletions(-) create mode 100644 core-customize/bootstrap.gradle.kts rename core-customize/{hybris => bootstrap}/config-template/environments/accstorefront.properties (100%) rename core-customize/{hybris => bootstrap}/config-template/environments/admin.properties (100%) rename core-customize/{hybris => bootstrap}/config-template/environments/api.properties (100%) rename core-customize/{hybris => bootstrap}/config-template/environments/backgroundprocessing.properties (100%) rename core-customize/{hybris => bootstrap}/config-template/environments/backoffice.properties (100%) rename core-customize/{hybris => bootstrap}/config-template/environments/common.properties (74%) rename core-customize/{hybris => bootstrap}/config-template/environments/local-dev.properties (96%) rename core-customize/{hybris => bootstrap}/config-template/local-config/99-local.properties (100%) create mode 100644 core-customize/bootstrap/config-template/localextensions.xml rename core-customize/{manifest-generator.jsonnet => bootstrap/manifest.jsonnet} (64%) delete mode 100644 core-customize/generate-manifest.gradle.kts create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/.classpath create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/buildcallbacks.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/extensioninfo.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/external-dependencies.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/lib/.lastupdate create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/lib/azure-storage-8.1.0.jar create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/project.properties create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/resources/azurecloudhotfolder-beans.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/resources/azurecloudhotfolder-items.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/resources/azurecloudhotfolder-spring.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/resources/azurecloudhotfolder/test/azurecloudhotfolder-test-spring.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/resources/azurecloudhotfolder/test/customer-00.csv create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/aop/BlobTransferredAspect.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/constants/AzurecloudhotfolderConstants.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/jalo/AzurecloudhotfolderManager.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/AzureBlobEntryFileTemplate.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/file/RemoteFileHeaders.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/file/comparators/AzureBlobNameComparatorAdapter.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/file/comparators/AzureBlobTimestampComparatorAdapter.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/file/filters/AzureBlobPersistentAcceptOnceListFilter.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/file/filters/AzureBlobRegexPatternFileListFilter.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/inbound/AzureBlobInboundSynchronizer.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/inbound/AzureBlobSynchronizingMessageSource.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/outbound/AzureBlobMessageHandler.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/outbound/AzureBlobRemoteMoveMessageHandler.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/session/AzureBlobFileInfo.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/session/AzureBlobSession.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/session/AzureBlobSessionFactory.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/session/ExtendedSession.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/tenant_junit.properties create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/testsrc/de/hybris/platform/cloud/azure/hotfolder/aop/BlobTransferredAspectTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/testsrc/de/hybris/platform/cloud/azure/hotfolder/remote/session/TestBlobSession.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/testsrc/de/hybris/platform/cloud/azure/hotfolder/remote/synchronizer/AzureBlobSynchronizingMessageSourceIntegrationTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/.classpath create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/buildcallbacks.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/extensioninfo.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/external-dependencies.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/project.properties create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/bean-builder-template.vm create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/cloudcommons-backoffice-config.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/cloudcommons-beans.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/cloudcommons-items.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/cloudcommons-spring.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/cloudcommons/cloudcommons-monitoring.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/cloudcommons/test/cloudcommons-test-spring.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/impex/projectdata_jobs.impex create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/localization/backoffice/cloudcommons-labels.properties create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/localization/backoffice/cloudcommons-labels_de.properties create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/localization/cloudcommons-locales_de.properties create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/localization/cloudcommons-locales_en.properties create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/localization/cloudcommons-locales_fr.properties create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/aop/exception/ActionException.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/aop/exception/StepException.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/constants/CloudCommonsConstants.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/core/StopStartListener.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/core/impl/HybrisGroupRoleController.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/jalo/ApplicationResourceLock.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/jalo/CloudCommonsManager.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/jalo/MetadataStoreEntry.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/jalo/MonitorHistoryData.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/jalo/MonitorHistoryEntryActionData.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/jalo/MonitorHistoryEntryData.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/scheduling/HybrisAwareScheduledThreadPoolExecutor.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/scheduling/HybrisAwareThreadPoolExecutor.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/scheduling/HybrisAwareThreadPoolTaskExecutor.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/scheduling/HybrisAwareThreadPoolTaskScheduler.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/impex/impl/TenantAwareConfigPropertyImportProcessor.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/MonitorEntryFilter.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/MonitorHistory.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/MonitorHistoryFactory.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/MonitorHistoryRestorer.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/MonitorRecorder.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/MonitorService.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/DatabaseMonitorHistoryRestorer.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/DatabaseMonitorRecorder.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/MonitorHistoryEnumHelper.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryDataConverter.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryEntryActionDataConverter.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryEntryDataConverter.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryReverseConverter.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryReverseEntryActionDataConverter.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryReverseEntryConverter.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/dao/MonitorHistoryDataDao.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/dao/impl/DefaultMonitorHistoryDataDao.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/impl/AbstractConfigEnabledMonitorRecorder.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/impl/CompoundMonitorRecorder.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/impl/DefaultMonitorService.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/impl/UnsavedEntryMonitorEntryFilter.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/job/MonitorHistoryMaintenanceCleanupStrategy.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/logging/LoggingMonitorRecorder.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/logging/converter/AbstractMonitorConverter.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/logging/converter/MonitorHistoryDataConverter.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/logging/converter/MonitorHistoryEntryActionDataConverter.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/logging/converter/MonitorHistoryEntryDataConverter.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/metric/AbstractMetricRecorder.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/metric/CounterMetricRecorder.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/metric/HistogramMetricRecorder.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/metric/TimerMetricRecorder.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/beans/factory/config/impl/SmartLifecycleRoleBeanPostProcessor.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/context/SmartLifecycleRole.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/FileNameComparatorAdatper.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/FileTimestampComparatorAdapter.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/NameComparator.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/NamePrefixComparator.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/NameSequenceComparator.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/NamedObject.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/TimestampComparator.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/TimestampedObject.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/filters/ChainFileListFilter.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/metadata/ExpiringSimpleMetadataStore.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/metadata/HybrisMetadataStore.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/metadata/dao/impl/MetadataStoreEntryDao.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/support/leader/LockRegistryLeaderInitiator.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/support/leader/RoleAwareLockRegistryLeaderInitiator.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/support/locks/database/HybrisLockRepository.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/support/locks/database/dao/ApplicationResourceLockDao.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/support/locks/database/dao/impl/DefaultApplicationResourceLockDao.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/messaging/core/impl/PatternMatchingDestinationResolver.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/suspend/CloudSuspendResumeRegistry.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/suspend/CloudSuspendResumeService.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/suspend/SuspendResumeListener.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/utils/EnumHelper.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/tenant_junit.properties create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/scheduling/HybrisAwareThreadPoolTaskExecutorTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/scheduling/HybrisAwareThreadPoolTaskSchedulerTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/IntegrationTestMonitorAssertionHelper.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/DatabaseMonitorHistoryRestorerTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/DatabaseMonitorRecorderTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryDataConverterTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryEntryActionDataConverterTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryEntryDataConverterTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryReverseConverterTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryReverseEntryActionDataConverterTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryReverseEntryConverterTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/dao/impl/DefaultMonitorHistoryDataDaoTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/impl/DefaultMonitorServiceTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/job/MonitorHistoryMaintenanceCleanupStrategyTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/job/MonitorHistoryMaintenanceJobsIntegrationTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/logging/LoggingMonitorRecorderTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/logging/converter/MonitorHistoryDataConverterTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/logging/converter/MonitorHistoryEntryActionDataConverterTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/logging/converter/MonitorHistoryEntryDataConverterTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/metric/CounterMetricRecorderTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/metric/HistogramMetricRecorderTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/metric/TimerMetricRecorderTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/integration/file/comparators/FileModifiedComparatorTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/integration/file/comparators/FileNameComparatorTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/integration/file/comparators/FileNamePrefixComparatorTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/integration/file/comparators/FileNameSequenceComparatorTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/integration/support/locks/database/HybrisLockRepositoryTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/messaging/core/impl/PatternMatchingDestinationResolverTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/metadata/impl/HybrisMetadataStoreTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/util/NeedsRunningSpringServices.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/util/NeedsRunningSpringServicesTestRunListener.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/.classpath create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/buildcallbacks.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/extensioninfo.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/external-dependencies.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/lib/.lastupdate create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/lib/spring-integration-zip-1.0.2.RELEASE.jar create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/lib/zt-zip-1.13.jar create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/project.properties create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder-beans.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder-items.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder-spring.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/integration/hot-folder-aop.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/integration/hot-folder-default-mapping.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/integration/hot-folder-file-routing-spring.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/integration/hot-folder-file-sorting.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/integration/hot-folder-zip-mapping.xml create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/additionalTestData.csv create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/cleanup.impex create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/coredata.zip create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/hotfolder/customer-00.csv create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/hotfolder/product-00.csv create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/hotfolder/unknownfile-00.csv create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/hotfolder/url_media-00.csv create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/images/y_logo.png create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/product-with-media.zip create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/rawimpex.zip create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/sampledata.zip create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/localization/cloudhotfolder-locales_de.properties create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/localization/cloudhotfolder-locales_en.properties create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/localization/cloudhotfolder-locales_fr.properties create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/aop/AbstractMonitoringAspect.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/aop/BatchHeaderAspect.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/aop/FileUnzippedAspect.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/aop/ImpexImportAspect.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/aop/utils/ActionCodeGenerator.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/batch/task/CloudCleanupHelper.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/constants/CloudHotfolderConstants.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/ZipBatchHeader.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/ZipHeaderTask.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/UnzippedFolderImportService.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/impl/DataImportUnzippedFolderImportService.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/impl/FileBasedSetupImpexService.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/impl/ImportZipSystemSetup.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/impl/RawImpexUnzippedFolderImportService.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderCleanUpTask.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderExecutionTask.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderInitTask.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderSetupTask.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderTransformerTask.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/interceptor/HotFolderRouterChannelInterceptor.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/jalo/CloudHotfolderManager.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/spring/integration/file/CloudFileHeaders.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/spring/integration/file/TimestampFileNameGenerator.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/spring/integration/zip/CloudUnZipTransformer.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/spring/integration/zip/CloudZipHeaders.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/spring/messaging/support/impl/UnmappedHotfolderChannel.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/tenant_junit.properties create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/CloudHotFolderIntegrationTests.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/aop/BatchHeaderAspectTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/aop/FileUnzippedAspectTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/aop/ImpexImportAspectTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/ZipBatchHeaderTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/impl/DataImportUnzippedFolderImportServiceTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/impl/RawImpexUnzippedFolderImportServiceTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderExecutionTaskTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderSetupTaskTest.java create mode 100644 core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderTransformerTaskTest.java delete mode 100644 core-customize/hybris/config-template/localextensions.xml create mode 100644 core-customize/manifest.json diff --git a/core-customize/README.md b/core-customize/README.md index 9fb4ba4..bac9eb2 100644 --- a/core-customize/README.md +++ b/core-customize/README.md @@ -1,24 +1,54 @@ # SAP Commerce Project Template for CCv2 -To generate the `manifest.json` with [Jsonnet](https://jsonnet.org/): - -```bash -jsonnet --output-file manifest.json manifest-generator.jsonnet +1. Download this repository +1. Download the latest SAP Commerce 2011 release zip file and put it into the `platform` folder using the correct file name, e.g. + + ```bash + cp ~/Downloads/CXCOMM201100P*.ZIP ./platform/hybris-commerce-suite-2011.0.zip + ``` + +1. Bootstrap the starting point for your Commerce project by running the following command: + + ```bash + ./gradlew -b bootstrap.gradle.kts \ + -PprojectName= \ + -ProotPackage= + ``` + + (N.B.: If you use a headless setup: You can delete the generated `storefront` extension afterwards. Don't forget to remove it from `localextensions.xml` / `manifest.json`) +1. Review the generated configuration in `hybris/config`, especially the `hybris/config/environment/*.properties` files and `localextensions.xml` (search for `TODO:` comments) +1. Update the `manifest.jsonnet` (again, search for `TODO:` comments).\ + You can use the jsonnet file to update the `manifest.json` for your project. +1. Delete all bootstrap files, you don't need them anymore: + + ```bash + rm -r bootstrap* + ``` + +1. Commit and push the changes to your project repository :) + +After the initial setup is done, you can use all the cool features of the `commerce-gradle-plugin`. + +## Setup local development environment after a fresh clone + +```sh +git clone +cd +docker-compose up +cd core-customize +./gradlew setupLocalDevelopment +./gradlew yclean yall +./gradlew yinitialize ``` -**Alternatively**, if you don't want to install Jsonnet, run +## How to use manifest.jsonnet + +To generate the `manifest.json` with [Jsonnet](https://jsonnet.org/): ```bash -./gradlew -b generate-manifest.gradle.kts +jsonnet --output-file manifest.json manifest.jsonnet ``` -## Demo Setup - -1. Generate the sample `manifest.json` as described above -1. Download the latest Commerce platform 2011 zip file and save it as `platform/hybris-commerce-suite-2011.0.zip` -1. Generate `demoshop` storefront and `hybris/config` folder: `./gradlew generateProprietaryCode` -1. Setup local development `./gradlew setupLocalDevelopment` - ## How does it work? We use Gradle + [commerce-gradle-plugin][plugin] to automate whole project setup. @@ -86,7 +116,24 @@ manifest.json | │ │ │ ├── 10-local.properties + ``` - [reuse]: https://help.sap.com/viewer/1be46286b36a4aa48205be5a96240672/LATEST/en-US/2311d89eef9344fc81ef168ac9668307.html [folder]: https://help.sap.com/viewer/b490bb4e85bc42a7aa09d513d0bcb18e/LATEST/en-US/8beb75da86691014a0229cf991cb67e4.html [solr]: https://help.sap.com/viewer/b2f400d4c0414461a4bb7e115dccd779/LATEST/en-US/f7251d5a1d6848489b1ce7ba46300fe6.html + +## FAQ + +### How do I add an addon to my storefront? + +1. Add the addon to the `manifest.json`, either by hand or via `manifest-generator.jsonnet` ([documentation][addon]) +1. Run `./gradlew installManifestAddon` +1. Reformat `/extensioninfo.xml` (unfortunately, the the platform build messes it up when adding addons) +1. Commit/push your changes + +[addon]: https://help.sap.com/viewer/1be46286b36a4aa48205be5a96240672/LATEST/en-US/9a3ab7d08c704fccb7fd899e876d41d6.html + +## Demo Setup + +1. Generate the sample `manifest.json` as described above +1. Download the latest Commerce platform 2011 zip file and save it as `platform/hybris-commerce-suite-2011.0.zip` +1. Generate `demoshop` storefront and `hybris/config` folder: `./gradlew generateProprietaryCode` +1. Setup local development `./gradlew setupLocalDevelopment` diff --git a/core-customize/bootstrap.gradle.kts b/core-customize/bootstrap.gradle.kts new file mode 100644 index 0000000..e1c0512 --- /dev/null +++ b/core-customize/bootstrap.gradle.kts @@ -0,0 +1,190 @@ +plugins { + id("sap.commerce.build") version("3.0.0") + id("sap.commerce.build.ccv2") version("3.0.0") +} + +buildscript { + repositories { + mavenCentral() + } + dependencies { + "classpath"(group = "com.lihaoyi", name = "sjsonnet_2.13", version = "0.1.6") + } +} + +import mpern.sap.commerce.build.tasks.HybrisAntTask +import org.apache.tools.ant.taskdefs.condition.Os + +repositories { + flatDir { dirs("platform") } + jcenter() +} + +if (!(project.hasProperty("projectName") && project.hasProperty("rootPackage"))) { + logger.error("Please provide the projectName and rootPacakge") + logger.error("e.g. ./gradlew -b bootstrap.gradle.kts -PprojectName=coolshop -ProotPackage=com.shop.cool") + throw InvalidUserDataException("Please provide projectName / rootPackage!") +} + +val inputName = project.property("projectName") as String +val inputPackage = project.property("rootPackage") as String + +//** generate code +// ant modulegen -Dinput.module=accelerator -Dinput.name=demoshop -Dinput.package=com.demo.shop +tasks.register("generateNewStorefront") { + dependsOn("bootstrapPlatform", "createDefaultConfig") + + args("modulegen") + antProperty("input.module", "accelerator") + antProperty("input.name", inputName) + antProperty("input.package", inputPackage) +} + +// ant extgen -Dinput.template=yocc -Dinput.name=demoshopocc -Dinput.package=com.demo.shop.occ +tasks.register("generateOcc") { + dependsOn("bootstrapPlatform", "createDefaultConfig") + + args("extgen") + antProperty("input.template", "yocc") + antProperty("input.name", "${inputName}occ") + antProperty("input.package", "${inputPackage}.occ.tests") +} + +// ant extgen -Dinput.template=yocc -Dinput.name=demoshopocc -Dinput.package=com.demo.shop.occ.tests +tasks.register("generateOccTests") { + dependsOn("bootstrapPlatform", "createDefaultConfig") + + args("extgen") + antProperty("input.template", "yocctests") + antProperty("input.name", "${inputName}occtests") + antProperty("input.package", "${inputPackage}.occ.tests") +} + +tasks.register("generateCode") { + dependsOn("generateNewStorefront", "generateOcc", "generateOccTests") + doLast { + ant.withGroovyBuilder { + "move"("file" to "hybris/bin/custom/${inputName}occ", "todir" to "hybris/bin/custom/${inputName}") + "move"("file" to "hybris/bin/custom/${inputName}occtests", "todir" to "hybris/bin/custom/${inputName}") + } + } +} + +//** setup hybris/config folder +tasks.register("mergeConfigFolder") { + mustRunAfter("generateCode") + from("bootstrap/config-template") + into("hybris/config") + filter(org.apache.tools.ant.filters.ReplaceTokens::class, "tokens" to mapOf("projectName" to inputName)) +} +tasks.register("filterJsonnet") { + from("bootstrap/manifest.jsonnet") + into("bootstrap") + rename(".*", "manifest.jsonnet.filtered") + filter(org.apache.tools.ant.filters.ReplaceTokens::class, "tokens" to mapOf("projectName" to inputName)) +} +tasks.register("moveJsonnet") { + dependsOn("filterJsonnet") + doLast { + ant.withGroovyBuilder { + "move"("file" to "bootstrap/manifest.jsonnet.filtered", "tofile" to file("manifest.jsonnet")) + } + } +} +tasks.register("generateManifest") { + dependsOn("moveJsonnet") + doLast { + sjsonnet.SjsonnetMain.main0( + arrayOf("--output-file", "manifest.json", "manifest.jsonnet"), + sjsonnet.SjsonnetMain.createParseCache(), + java.lang.System.`in`, + java.lang.System.`out`, + java.lang.System.err, + os.Path(project.rootDir.toPath()), + scala.`None$`.empty(), + scala.`None$`.empty() + ) + } +} + +tasks.register("symlinkCommonProperties") { + dependsOn("mergeConfigFolder") + if (Os.isFamily(Os.FAMILY_UNIX)) { + commandLine("sh", "-c", "ln -sfn ../environments/common.properties 10-local.properties") + } else { + // https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/ + commandLine("cmd", "/c", """mklink /d "10-local.properties" "..\\environments\\common.properties" """) + } + workingDir("hybris/config/local-config") +} +tasks.register("symlinkLocalDevProperties") { + dependsOn("mergeConfigFolder") + if (Os.isFamily(Os.FAMILY_UNIX)) { + commandLine("sh", "-c", "ln -sfn ../environments/local-dev.properties 50-local.properties") + } else { + // https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/ + commandLine("cmd", "/c", """mklink /d "50-local.properties" "..\\environments\\local-dev.properties" """) + } + workingDir("hybris/config/local-config") +} + +tasks.register("generateLocalProperties") { + mustRunAfter("mergeConfigFolder") + comment = "GENEREATED AT " + java.time.Instant.now() + outputFile = project.file("hybris/config/local.properties") + + property("hybris.optional.config.dir", project.file("hybris/config/local-config")) +} + +tasks.register("setupConfigFolder") { + dependsOn("symlinkCommonProperties", "symlinkLocalDevProperties", "generateLocalProperties", "generateManifest") +} + +//** bootstrap Solr configuration +tasks.register("startSolr") { + dependsOn("mergeConfigFolder", "generateLocalProperties") + args("startSolrServers") +} +tasks.register("stopSolr") { + args("stopSolrServers") + mustRunAfter("startSolr") +} +tasks.register("startStopSolr") { + dependsOn("startSolr", "stopSolr") +} +tasks.register("moveSolrConfig") { + dependsOn("startStopSolr") + doLast { + ant.withGroovyBuilder { + "move"("file" to "hybris/config/solr/instances/cloud/configsets", "todir" to "solr/server/solr") + } + } +} +tasks.register("setupSolrConfigForLocalDevelopment") { + dependsOn("moveSolrConfig") + if (Os.isFamily(Os.FAMILY_UNIX)) { + commandLine("sh", "-c", "ln -sfn ../../../../../solr/server/solr/configsets configsets") + } else { + // https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/ + commandLine("cmd", "/c", """mklink /d "configsets" "..\\..\\..\\..\\..\\solr\\server\\solr\\configsets" """) + } + workingDir("hybris/config/solr/instances/cloud") +} + +//** combine all of the above +tasks.register("bootstrapNewProject") { + dependsOn("generateCode", "setupConfigFolder", "setupSolrConfigForLocalDevelopment") + doLast { + println("==== Project generation finished! ====") + println("- Generated extensions:") + file("hybris/bin/custom/${inputName}").listFiles().forEach { + println("\t${it.name}") + } + println("- Generated new manifest.json (using manifest.jsonnet)") + println("") + println("To finish the setup, please execute:") + println("./gradlew setupLocalDevelopment") + } +} + +defaultTasks("bootstrapNewProject") \ No newline at end of file diff --git a/core-customize/hybris/config-template/environments/accstorefront.properties b/core-customize/bootstrap/config-template/environments/accstorefront.properties similarity index 100% rename from core-customize/hybris/config-template/environments/accstorefront.properties rename to core-customize/bootstrap/config-template/environments/accstorefront.properties diff --git a/core-customize/hybris/config-template/environments/admin.properties b/core-customize/bootstrap/config-template/environments/admin.properties similarity index 100% rename from core-customize/hybris/config-template/environments/admin.properties rename to core-customize/bootstrap/config-template/environments/admin.properties diff --git a/core-customize/hybris/config-template/environments/api.properties b/core-customize/bootstrap/config-template/environments/api.properties similarity index 100% rename from core-customize/hybris/config-template/environments/api.properties rename to core-customize/bootstrap/config-template/environments/api.properties diff --git a/core-customize/hybris/config-template/environments/backgroundprocessing.properties b/core-customize/bootstrap/config-template/environments/backgroundprocessing.properties similarity index 100% rename from core-customize/hybris/config-template/environments/backgroundprocessing.properties rename to core-customize/bootstrap/config-template/environments/backgroundprocessing.properties diff --git a/core-customize/hybris/config-template/environments/backoffice.properties b/core-customize/bootstrap/config-template/environments/backoffice.properties similarity index 100% rename from core-customize/hybris/config-template/environments/backoffice.properties rename to core-customize/bootstrap/config-template/environments/backoffice.properties diff --git a/core-customize/hybris/config-template/environments/common.properties b/core-customize/bootstrap/config-template/environments/common.properties similarity index 74% rename from core-customize/hybris/config-template/environments/common.properties rename to core-customize/bootstrap/config-template/environments/common.properties index 79c71ae..d192e4d 100644 --- a/core-customize/hybris/config-template/environments/common.properties +++ b/core-customize/bootstrap/config-template/environments/common.properties @@ -13,9 +13,9 @@ hac.webroot=/hac log4j2.logger.nosolr.name=de.hybris.platform.solrfacetsearch.indexer.cron.SolrIndexerJob log4j2.logger.nosolr.level=WARN +# TODO: adapt this your project requirements # Disable audit, decrease session timeout # https://help.sap.com/viewer/1be46286b36a4aa48205be5a96240672/SHIP/en-US/d6794b766aea4783b829988dc587f978.html -# TODO: adapt this your project requirements auditing.enabled=false default.session.timeout=360 @@ -25,16 +25,12 @@ csrf.allowed.url.patterns=/[^/]+(/[^?]*)+(sop/response)$,/[^/]+(/[^?]*)+(merchan occ.rewrite.overlapping.paths.enabled=true #*****************************************************************************# -# Accelerator B2C +# B2C -demoshopstorefront.webroot= +@projectName@storefront.webroot= storefrontContextRoot= -recaptcha.publickey=TBD -recaptcha.privatekey=TBD -googleApiKey=TBD - -website.electronics.http=${ccv2.services.accstorefront.url.0} +# website.@projectName@site.http=${ccv2.services.accstorefront.url.0} # Mock Payment provider sop.post.url=${ccv2.services.api.url.0}/acceleratorservices/sop-mock/process @@ -46,11 +42,11 @@ corsfilter.acceleratorservices.allowedOrigins=* # Spartacus B2C # make sure spartacussampledataaddon imports execute -# (even if no ant addoninstall) -spartacussampledataaddon.application-context=spartacussampledataaddon-spring.xml +# (useful if you have a headless setup without a storefront extension) +# spartacussampledataaddon.application-context=spartacussampledataaddon-spring.xml -website.electronics-spa.http=${ccv2.services.jsapps.url.0} -website.electronics-spa.https=${ccv2.services.jsapps.url.0} +# website.@projectName@site-spa.http=${ccv2.services.jsapps.url.0} +# website.@projectName@site-spa.https=${ccv2.services.jsapps.url.0} # ref. commercewebservices/project.properties webroot.commercewebservices.http=${ccv2.services.api.url.0}/occ @@ -58,24 +54,24 @@ webroot.commercewebservices.https=${ccv2.services.api.url.0}/occ commercewebservices.oauth2.tokenUrl=${ccv2.services.api.url.0}/authorizationserver/oauth/token # Whitelisting SmartEdit for your Storefront -# https://help.sap.com/viewer/86dd1373053a4c2da8f9885cc9fbe55d/latest/en-US/fb742b29cf3c4e81aac7c131c0441172.html +# https://help.sap.com/viewer/9d346683b0084da2938be8a285c0c27a/LATEST/en-US/fb742b29cf3c4e81aac7c131c0441172.html smarteditaddon.javascript.paths.responsive=/shared/common/js/webApplicationInjector.js?allow-origin=localhost:9002,*.*.model-t.cc.commerce.ondemand.com:443;/shared/common/js/reprocessPage.js;/shared/common/js/adjustComponentRenderingToSE.js;/responsive/common/js/smarteditaddon.js # https://sap.github.io/spartacus-docs/cors/ -corsfilter.commercewebservices.allowedOrigins=${ccv2.services.jsapps.url.0} ${ccv2.services.accstorefront.url.0} ${ccv2.services.backoffice.url.0} ${ccv2.services.api.url.0} +corsfilter.commercewebservices.allowedOrigins=* corsfilter.commercewebservices.allowedMethods=GET HEAD OPTIONS PATCH PUT POST DELETE corsfilter.commercewebservices.allowedHeaders=origin content-type accept authorization cache-control x-anonymous-consents x-profile-tag-debug x-consent-reference occ-personalization-id occ-personalization-time corsfilter.commercewebservices.exposedHeaders=x-anonymous-consents occ-personalization-id occ-personalization-time corsfilter.commercewebservices.allowCredentials=true -corsfilter.assistedservicewebservices.allowedOrigins=${ccv2.services.jsapps.url.0} ${ccv2.services.accstorefront.url.0} ${ccv2.services.backoffice.url.0} ${ccv2.services.api.url.0} +corsfilter.assistedservicewebservices.allowedOrigins=* corsfilter.assistedservicewebservices.allowedMethods=GET HEAD OPTIONS PATCH PUT POST DELETE corsfilter.assistedservicewebservices.allowedHeaders=origin content-type accept authorization cache-control x-anonymous-consents x-profile-tag-debug x-consent-reference occ-personalization-id occ-personalization-time corsfilter.assistedservicewebservices.exposedHeaders=x-anonymous-consents occ-personalization-id occ-personalization-time corsfilter.assistedservicewebservices.allowCredentials=true -corsfilter.personalizationwebservices.allowedOrigins=${ccv2.services.jsapps.url.0} ${ccv2.services.accstorefront.url.0} ${ccv2.services.backoffice.url.0} ${ccv2.services.api.url.0} -corsfilter.permissionswebservices.allowedOrigins=${ccv2.services.jsapps.url.0} ${ccv2.services.accstorefront.url.0} ${ccv2.services.backoffice.url.0} ${ccv2.services.api.url.0} +corsfilter.personalizationwebservices.allowedOrigins=* +corsfilter.permissionswebservices.allowedOrigins=* #*****************************************************************************# # Update System Configuration @@ -89,6 +85,5 @@ corsfilter.permissionswebservices.allowedOrigins=${ccv2.services.jsapps.url.0} $ # update.importEssentialData.enabled=true # update.localizeTypes.enabled=true update.rebuildLucenesearchIndexes.enabled=false - # Import project data of these extensions (comma-separated list) # update.executeProjectData.extensionName.list= diff --git a/core-customize/hybris/config-template/environments/local-dev.properties b/core-customize/bootstrap/config-template/environments/local-dev.properties similarity index 96% rename from core-customize/hybris/config-template/environments/local-dev.properties rename to core-customize/bootstrap/config-template/environments/local-dev.properties index 52ebf91..f0f7fcd 100644 --- a/core-customize/hybris/config-template/environments/local-dev.properties +++ b/core-customize/bootstrap/config-template/environments/local-dev.properties @@ -12,7 +12,7 @@ db.tableprefix= #*****************************************************************************# # Sane Defaults -installed.tenants= +installed.tenants=junit initialpassword.admin=nimda tomcat.mem=-Xms4G -Xmx4G @@ -39,7 +39,7 @@ backoffice.solr.search.index.autoinit=false # Endpoints for local development ccv2.services.api.url.0=https://localhost:${tomcat.ssl.port} -ccv2.services.accstorefront.url.0=https://electronics.test:${tomcat.ssl.port} +ccv2.services.accstorefront.url.0=https://@projectName@site.test:${tomcat.ssl.port} ccv2.services.backoffice.url.0=https://localhost:${tomcat.ssl.port} ccv2.services.jsapps.url.0=http://localhost:4200 diff --git a/core-customize/hybris/config-template/local-config/99-local.properties b/core-customize/bootstrap/config-template/local-config/99-local.properties similarity index 100% rename from core-customize/hybris/config-template/local-config/99-local.properties rename to core-customize/bootstrap/config-template/local-config/99-local.properties diff --git a/core-customize/bootstrap/config-template/localextensions.xml b/core-customize/bootstrap/config-template/localextensions.xml new file mode 100644 index 0000000..fbc8876 --- /dev/null +++ b/core-customize/bootstrap/config-template/localextensions.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core-customize/manifest-generator.jsonnet b/core-customize/bootstrap/manifest.jsonnet similarity index 64% rename from core-customize/manifest-generator.jsonnet rename to core-customize/bootstrap/manifest.jsonnet index 00ee05a..338a807 100644 --- a/core-customize/manifest-generator.jsonnet +++ b/core-customize/bootstrap/manifest.jsonnet @@ -23,46 +23,18 @@ local webapp(extension, path=null) = { }; // CONFIGURE YOUR MANIFEST HERE -local storefrontExtension = 'demoshopstorefront'; + +local storefrontExtension = '@projectName@storefront'; local storefrontContextRoot = ''; local storefrontAddons = [ - 'adaptivesearchsamplesaddon', - 'assistedservicecustomerinterestsaddon', - 'assistedservicepromotionaddon', - 'assistedservicestorefront', - 'assistedserviceyprofileaddon', - 'captchaaddon', - 'configurablebundleaddon', - 'consignmenttrackingaddon', - 'customercouponaddon', - 'customercouponsamplesaddon', - 'customerinterestsaddon', - 'customerticketingaddon', - 'eventtrackingwsaddon', - 'merchandisingaddon', - 'merchandisingstorefrontsampledataaddon', - 'multicountrysampledataaddon', - 'notificationaddon', - 'ordermanagementaddon', - 'orderselfserviceaddon', - 'pcmbackofficesamplesaddon', - 'personalizationaddon', - 'personalizationsampledataaddon', - 'personalizationyprofilesampledataaddon', - 'profiletagaddon', - 'selectivecartsplitlistaddon', 'smarteditaddon', - 'stocknotificationaddon', - 'textfieldconfiguratortemplateaddon', - 'timedaccesspromotionengineaddon', - 'timedaccesspromotionenginesamplesaddon', - 'xyformssamples', - 'xyformsstorefrontcommons', - 'ysapproductconfigaddon', - 'spartacussampledataaddon' + //TODO: add more addon names as required here + // don't forget to add them to localextensions.xml too! ]; local smartEditWebapps = [ + //TODO: add/remove smartedit features here + // don't forget to add the extensions to localextensions.xml too! // Activating SmartEdit for a Storefront // https://help.sap.com/viewer/1be46286b36a4aa48205be5a96240672/SHIP/en-US/7d3f83250d9846518f4154cfb18ae051.html // Default Smartedit webapps @@ -74,21 +46,20 @@ local smartEditWebapps = [ webapp('cmswebservices'), webapp('permissionswebservices'), webapp('previewwebservices'), - // Smartedit personalization - webapp('personalizationsmartedit'), - webapp('personalizationwebservices'), - webapp('personalizationsearchsmartedit'), - webapp('personalizationpromotionssmartedit'), - // Smartedit personalization promotion - webapp('personalizationpromotionssmartedit'), - // Smartedit personalization search - webapp('personalizationsearchsmartedit'), - // Smartedit promotion - webapp('merchandisingsmartedit'), - webapp('merchandisingcmswebservices'), - - // https://help.sap.com/viewer/50c996852b32456c96d3161a95544cdb/1905/en-US/b21fa18f635d49eaa4d9ce5997a6a814.html - webapp('merchandisingsmartedit'), + // // Smartedit personalization + // webapp('personalizationsmartedit'), + // webapp('personalizationwebservices'), + // webapp('personalizationsearchsmartedit'), + // webapp('personalizationpromotionssmartedit'), + // // Smartedit personalization promotion + // webapp('personalizationpromotionssmartedit'), + // // Smartedit personalization search + // webapp('personalizationsearchsmartedit'), + // // Smartedit promotion + // webapp('merchandisingsmartedit'), + // webapp('merchandisingcmswebservices'), + // // https://help.sap.com/viewer/50c996852b32456c96d3161a95544cdb/1905/en-US/b21fa18f635d49eaa4d9ce5997a6a814.html + // webapp('merchandisingsmartedit'), ]; // ------------ MANIFEST ------------ @@ -118,6 +89,14 @@ local smartEditWebapps = [ location: 'hybris/config/environments/backoffice.properties', aspect: 'backoffice', }, + { + location: 'hybris/config/environments/backgroundprocessing.properties', + aspect: 'backgroundProcessing', + }, + { + location: 'hybris/config/environments/admin.properties', + aspect: 'admin', + }, ], extensions: { location: 'hybris/config/localextensions.xml', @@ -148,9 +127,6 @@ local smartEditWebapps = [ webapps: [ webapp(storefrontExtension, storefrontContextRoot), webapp('mediaweb'), - - webapp('orbeonweb'), - webapp('xyformsweb'), ], }, { @@ -167,7 +143,7 @@ local smartEditWebapps = [ webapps: [ webapp('commercewebservices'), // only necessary for checkout/payment mocks - // https://help.sap.com/viewer/4c33bf189ab9409e84e589295c36d96e/1905/en-US/8abddeed86691014be559318fab13d44.html?q=acceleratorservices + // https://help.sap.com/viewer/4c33bf189ab9409e84e589295c36d96e/latest/en-US/8abddeed86691014be559318fab13d44.html webapp('acceleratorservices'), webapp('oauth2'), webapp('mediaweb'), diff --git a/core-customize/build.gradle.kts b/core-customize/build.gradle.kts index 35e066f..44f9e41 100644 --- a/core-customize/build.gradle.kts +++ b/core-customize/build.gradle.kts @@ -10,7 +10,7 @@ repositories { jcenter() } -val generateLocalProperties by tasks.registering(WriteProperties::class) { +tasks.register("generateLocalProperties") { comment = "GENEREATED AT " + java.time.Instant.now() outputFile = project.file("hybris/config/local.properties") @@ -18,139 +18,11 @@ val generateLocalProperties by tasks.registering(WriteProperties::class) { } tasks.named("installManifestAddons") { - mustRunAfter(generateLocalProperties) + mustRunAfter("generateLocalProperties") } tasks.register("setupLocalDevelopment") { - dependsOn("bootstrapPlatform", generateLocalProperties, "installManifestAddons") -} - -// --------------------------------------------------- -// Helper tasks to boostrap the project from scratch. -// *Those are only necessary because I don't want to add any properietary files owned by SAP to Github.* - -//** generate code -// ant modulegen -Dinput.module=accelerator -Dinput.name=demoshop -Dinput.package=com.demo.shop -tasks.register("generateDemoStorefront") { - dependsOn("bootstrapPlatform", "createDefaultConfig") - - args("modulegen") - antProperty("input.module", "accelerator") - antProperty("input.name", "demoshop") - antProperty("input.package", "com.demo.shop") -} - -// ant extgen -Dinput.template=yacceleratorordermanagement -Dinput.name=demoshopordermanagement -Dinput.package=com.demo.shop.ordermanagement -tasks.register("generateDemoOrderManagment") { - dependsOn("bootstrapPlatform", "createDefaultConfig") - - args("extgen") - antProperty("input.template", "yacceleratorordermanagement") - antProperty("input.name", "demoshopordermanagement") - antProperty("input.package", "com.demo.shop.ordermanagement") -} - -// ant extgen -Dinput.template=yocc -Dinput.name=demoshopocc -Dinput.package=com.demo.shop.occ -tasks.register("generateDemoOcc") { - dependsOn("bootstrapPlatform", "createDefaultConfig") - - args("extgen") - antProperty("input.template", "yocc") - antProperty("input.name", "demoshopocc") - antProperty("input.package", "com.demo.shop.occ") -} - -// ant extgen -Dinput.template=yocc -Dinput.name=demoshopocc -Dinput.package=com.demo.shop.occ.tests -tasks.register("generateDemoOccTests") { - dependsOn("bootstrapPlatform", "createDefaultConfig") - - args("extgen") - antProperty("input.template", "yocctests") - antProperty("input.name", "demoshopocctests") - antProperty("input.package", "com.demo.shop.occ.tests") -} - -tasks.register("generateCode") { - dependsOn("generateDemoStorefront", "generateDemoOrderManagment", "generateDemoOcc", "generateDemoOccTests") - doLast { - ant.withGroovyBuilder { - "move"("file" to "hybris/bin/custom/demoshopordermanagement", "todir" to "hybris/bin/custom/demoshop") - } - ant.withGroovyBuilder { - "move"("file" to "hybris/bin/custom/demoshopocc", "todir" to "hybris/bin/custom/demoshop") - } - ant.withGroovyBuilder { - "move"("file" to "hybris/bin/custom/demoshopocctests", "todir" to "hybris/bin/custom/demoshop") - } - } -} - -//** setup hybris/config folder -tasks.register("mergeConfigFolder") { - mustRunAfter("generateCode") - from("hybris/config-template") - into("hybris/config") -} -tasks.register("symlinkCommonProperties") { - dependsOn("mergeConfigFolder") - if (Os.isFamily(Os.FAMILY_UNIX)) { - commandLine("sh", "-c", "ln -sfn ../environments/common.properties 10-local.properties") - } else { - // https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/ - commandLine("cmd", "/c", """mklink /d "10-local.properties" "..\\environments\\common.properties" """) - } - workingDir("hybris/config/local-config") -} -tasks.register("symlinkLocalDevProperties") { - dependsOn("mergeConfigFolder") - if (Os.isFamily(Os.FAMILY_UNIX)) { - commandLine("sh", "-c", "ln -sfn ../environments/local-dev.properties 50-local.properties") - } else { - // https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/ - commandLine("cmd", "/c", """mklink /d "50-local.properties" "..\\environments\\local-dev.properties" """) - } - workingDir("hybris/config/local-config") -} -tasks.named("generateLocalProperties") { - mustRunAfter("mergeConfigFolder") -} - -tasks.register("setupConfigFolder") { - dependsOn("symlinkCommonProperties", "symlinkLocalDevProperties", "generateLocalProperties") -} - -//** bootstrap Solr configuration -tasks.register("startSolr") { - dependsOn("mergeConfigFolder", "generateLocalProperties") - args("startSolrServers") -} -tasks.register("stopSolr") { - args("stopSolrServers") - mustRunAfter("startSolr") -} -tasks.register("startStopSolr") { - dependsOn("startSolr", "stopSolr") -} -tasks.register("moveSolrConfig") { - dependsOn("startStopSolr") - doLast { - ant.withGroovyBuilder { - "move"("file" to "hybris/config/solr/instances/cloud/configsets", "todir" to "solr/server/solr") - } - } -} -tasks.register("setupSolrConfigForLocalDevelopment") { - dependsOn("moveSolrConfig") - if (Os.isFamily(Os.FAMILY_UNIX)) { - commandLine("sh", "-c", "ln -sfn ../../../../../solr/server/solr/configsets configsets") - } else { - // https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/ - commandLine("cmd", "/c", """mklink /d "configsets" "..\\..\\..\\..\\..\\solr\\server\\solr\\configsets" """) - } - workingDir("hybris/config/solr/instances/cloud") -} - -//** combine all of the above -tasks.register("generateProprietaryCode") { - dependsOn("generateCode", "setupConfigFolder", "setupSolrConfigForLocalDevelopment") + group = "SAP Commerce" + description = "Setup local development" + dependsOn("bootstrapPlatform", "generateLocalProperties", "installManifestAddons") } diff --git a/core-customize/generate-manifest.gradle.kts b/core-customize/generate-manifest.gradle.kts deleted file mode 100644 index bed0f23..0000000 --- a/core-customize/generate-manifest.gradle.kts +++ /dev/null @@ -1,27 +0,0 @@ -buildscript { - repositories { - mavenCentral() - } - dependencies { - "classpath"(group = "com.lihaoyi", name = "sjsonnet_2.13", version = "0.1.6") - } -} - -tasks.register("generateManifest") { - group = "Bootstrap" - description = "Generate manifest.json using manifest-generator.jsonnet" - doLast { - sjsonnet.SjsonnetMain.main0( - arrayOf("--output-file", "manifest.json", "manifest-generator.jsonnet"), - sjsonnet.SjsonnetMain.createParseCache(), - java.lang.System.`in`, - java.lang.System.`out`, - java.lang.System.err, - os.Path(project.rootDir.toPath()), - scala.`None$`.empty(), - scala.`None$`.empty() - ) - } -} - -defaultTasks("generateManifest") diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/.classpath b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/.classpath new file mode 100644 index 0000000..74337e2 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/.classpath @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/buildcallbacks.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/buildcallbacks.xml new file mode 100644 index 0000000..574e374 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/buildcallbacks.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/extensioninfo.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/extensioninfo.xml new file mode 100644 index 0000000..9059689 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/extensioninfo.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/external-dependencies.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/external-dependencies.xml new file mode 100644 index 0000000..850243c --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/external-dependencies.xml @@ -0,0 +1,30 @@ + + + + 4.0.0 + de.hybris.platform + azurecloudhotfolder + 6.6.0.0-RC24 + + jar + + + + com.microsoft.azure + azure-storage + 8.1.0 + + + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/lib/.lastupdate b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/lib/.lastupdate new file mode 100644 index 0000000..e69de29 diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/lib/azure-storage-8.1.0.jar b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/lib/azure-storage-8.1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..916ec6557c9863e00ac19d4b922ac5f1838ba139 GIT binary patch literal 784615 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%0Ax9SE$kUaT`@jH&pXr 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�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 Wi9%q2UB_MacKMnNyN5s|gYiE_t@on< literal 0 HcmV?d00001 diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/project.properties b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/project.properties new file mode 100644 index 0000000..4bc1764 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/project.properties @@ -0,0 +1,43 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2017 SAP SE or an SAP affiliate company. All rights reserved. +# +# This software is the confidential and proprietary information of SAP +# ("Confidential Information"). You shall not disclose such Confidential +# Information and shall use it only in accordance with the terms of the +# license agreement you entered into with SAP. +# ----------------------------------------------------------------------- +# you can put key/value pairs here. +# Use Config.getParameter(..) to retrieve the values during runtime. + +# azurecloudhotfolder.key=value + +# Specifies the location of the spring context file putted automatically to the global platform application context. +azurecloudhotfolder.application-context=azurecloudhotfolder-spring.xml + +azure.hotfolder.storage.account.connection-string=UseDevelopmentStorage=true +azure.hotfolder.storage.account.name=yourAccountName + +azure.hotfolder.storage.container.name=hybris +azure.hotfolder.storage.container.create=true +azure.hotfolder.storage.container.hotfolder=${tenantId}/hotfolder +azure.hotfolder.storage.container.match.pattern=^((?!ignore).)*$ + +azure.hotfolder.storage.polling.fetch.batch-size=1 +azure.hotfolder.storage.polling.core-pool-size=1 +azure.hotfolder.storage.polling.max-pool-size=1 +azure.hotfolder.storage.polling.fixed.rate=15000 +azure.hotfolder.storage.delete.remote.files=false + +azure.hotfolder.storage.metadatastore.region=yAzureHotfolders +azure.hotfolder.storage.metadatastore.prefix=duplicate-filter: + +azure.hotfolder.local.sync.basefolder=${HYBRIS_DATA_DIR}/azurecloudhotfolder/sync + +# This regex captures the 'error_' files produced by the platform ImpexTransformerTask +azure.hotfolder.local.sync.error.match.pattern=^error_.*$ + +# Specify what the root URL is for remote media when hotfolder is importing media, and the name of the media folder to use/create within platform +cloud.hotfolder.default.images.root.url=https://${azure.hotfolder.storage.account.name}.blob.core.windows.net/${azure.hotfolder.storage.container.name}/${tenantId}/images +cloud.hotfolder.default.images.media.folder.qualifier=azureimages diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/resources/azurecloudhotfolder-beans.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/resources/azurecloudhotfolder-beans.xml new file mode 100644 index 0000000..e0c52d7 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/resources/azurecloudhotfolder-beans.xml @@ -0,0 +1,17 @@ + + + + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/resources/azurecloudhotfolder-items.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/resources/azurecloudhotfolder-items.xml new file mode 100644 index 0000000..2f90f00 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/resources/azurecloudhotfolder-items.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/resources/azurecloudhotfolder-spring.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/resources/azurecloudhotfolder-spring.xml new file mode 100644 index 0000000..eeb888c --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/resources/azurecloudhotfolder-spring.xml @@ -0,0 +1,349 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/resources/azurecloudhotfolder/test/azurecloudhotfolder-test-spring.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/resources/azurecloudhotfolder/test/azurecloudhotfolder-test-spring.xml new file mode 100644 index 0000000..c3f311a --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/resources/azurecloudhotfolder/test/azurecloudhotfolder-test-spring.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/resources/azurecloudhotfolder/test/customer-00.csv b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/resources/azurecloudhotfolder/test/customer-00.csv new file mode 100644 index 0000000..1f532ce --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/resources/azurecloudhotfolder/test/customer-00.csv @@ -0,0 +1 @@ +azure.integrationtest@domain.com,Azure Test,dr \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/aop/BlobTransferredAspect.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/aop/BlobTransferredAspect.java new file mode 100644 index 0000000..df156f1 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/aop/BlobTransferredAspect.java @@ -0,0 +1,90 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.azure.hotfolder.aop; + +import com.microsoft.azure.storage.blob.CloudBlob; + +import de.hybris.platform.cloud.azure.hotfolder.remote.session.AzureBlobFileInfo; +import de.hybris.platform.cloud.azure.hotfolder.remote.session.ExtendedSession; +import de.hybris.platform.cloud.commons.aop.exception.StepException; +import de.hybris.platform.cloud.commons.services.monitor.Status; +import de.hybris.platform.cloud.commons.services.monitor.Step; +import de.hybris.platform.cloud.commons.services.monitor.SystemArea; +import de.hybris.platform.cloud.hotfolder.aop.AbstractMonitoringAspect; +import org.apache.commons.io.FileUtils; +import org.aspectj.lang.ProceedingJoinPoint; +import org.slf4j.Logger; +import org.springframework.util.Assert; + +import java.io.IOException; +import java.util.Date; + +import static org.slf4j.LoggerFactory.getLogger; + +/** + * AOP implementation to monitor the transfer of remote blobs to local disk + * + */ +// Suppress Sonar warnings - AOP aspects are supposed to throw Throwables. +@SuppressWarnings({"squid:S00112"}) +public class BlobTransferredAspect extends AbstractMonitoringAspect +{ + private static final Logger LOG = getLogger(BlobTransferredAspect.class); + + /** + * AOP Around implementation to capture the size of a file and the time taken to transfer it + * + * @param pjp Pointcut to be executed + * @param path the path being requested + * @return the value from the execution + * @throws Throwable any exception thrown by the method called + */ + public Object aroundRead(final ProceedingJoinPoint pjp, final String path) throws Throwable + { + if (LOG.isDebugEnabled()) + { + LOG.debug("about to run method [{}] on target [{}] with path [{}]", pjp.getSignature().getName(), pjp.getTarget(), + path); + } + + final CloudBlob blob = getTargetOfMonitoringAspect(pjp, path); + final String fileName = AzureBlobFileInfo.getFilename(blob); + final long modified = AzureBlobFileInfo.getModified(blob); + final long size = AzureBlobFileInfo.getSize(blob); + beginMonitor(SystemArea.HOT_FOLDER, fileName + modified); + + final Date started = new Date(); + try + { + final Object result = pjp.proceed(); + monitorSuccessfulStep(Step.DOWNLOADED, started, "Successfully read blob [{}] of size [{}]", path, + FileUtils.byteCountToDisplaySize(size)); + checkpointMonitor(); + return result; + } + catch (final Exception e) + { + monitorFailedStep(Step.DOWNLOADED, started, e, "Failed to read blob [{}]", path); + endMonitor(Status.FAILURE); + throw new StepException(Step.DOWNLOADED, e); + } + + } + + private CloudBlob getTargetOfMonitoringAspect(final ProceedingJoinPoint pjp, final String path) throws IOException + { + Assert.isTrue(pjp.getTarget() instanceof ExtendedSession, "pjp is not of type Extended Session"); + + @SuppressWarnings("unchecked") + final ExtendedSession session = (ExtendedSession) pjp.getTarget(); + return session.get(path); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/constants/AzurecloudhotfolderConstants.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/constants/AzurecloudhotfolderConstants.java new file mode 100644 index 0000000..68e1c70 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/constants/AzurecloudhotfolderConstants.java @@ -0,0 +1,24 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.azure.hotfolder.constants; + +/** + * Global class for all Azurecloudhotfolder constants. You can add global constants for your extension into this class. + */ +public final class AzurecloudhotfolderConstants extends GeneratedAzurecloudhotfolderConstants +{ + public static final String EXTENSIONNAME = "azurecloudhotfolder"; + + private AzurecloudhotfolderConstants() + { + //empty + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/jalo/AzurecloudhotfolderManager.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/jalo/AzurecloudhotfolderManager.java new file mode 100644 index 0000000..b729617 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/jalo/AzurecloudhotfolderManager.java @@ -0,0 +1,31 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.azure.hotfolder.jalo; + +import de.hybris.platform.cloud.azure.hotfolder.constants.AzurecloudhotfolderConstants; +import de.hybris.platform.core.Registry; + +/** + * This is the extension manager of the Azurecloudhotfolder extension. + */ +public class AzurecloudhotfolderManager extends GeneratedAzurecloudhotfolderManager +{ + /** + * Get the valid instance of this manager. + * + * @return the current instance of this manager + */ + public static AzurecloudhotfolderManager getInstance() + { + return (AzurecloudhotfolderManager) Registry.getCurrentTenant().getJaloConnection().getExtensionManager() + .getExtension(AzurecloudhotfolderConstants.EXTENSIONNAME); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/AzureBlobEntryFileTemplate.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/AzureBlobEntryFileTemplate.java new file mode 100644 index 0000000..7ca739b --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/AzureBlobEntryFileTemplate.java @@ -0,0 +1,28 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.azure.hotfolder.remote; + +import com.microsoft.azure.storage.blob.CloudBlob; +import org.springframework.integration.file.remote.RemoteFileTemplate; +import org.springframework.integration.file.remote.session.SessionFactory; + +/** + * Azure Blob Storage version of {@link RemoteFileTemplate} providing type-safe access to + * the underlying {@link CloudBlob}CloudBlob object. + * + */ +public class AzureBlobEntryFileTemplate extends RemoteFileTemplate +{ + public AzureBlobEntryFileTemplate(final SessionFactory sessionFactory) + { + super(sessionFactory); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/file/RemoteFileHeaders.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/file/RemoteFileHeaders.java new file mode 100644 index 0000000..0b1d31e --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/file/RemoteFileHeaders.java @@ -0,0 +1,27 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.azure.hotfolder.remote.file; + +import de.hybris.platform.cloud.hotfolder.spring.integration.file.CloudFileHeaders; + +/** + * Pre-defined remote header names to be used when storing or retrieving + * File-related values to/from integration Message Headers. + * + **/ +public class RemoteFileHeaders extends CloudFileHeaders +{ + + private static final String PREFIX = "file_"; + + public static final String REMOTE_FILE_DELETED = PREFIX + "remoteFileDeleted"; + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/file/comparators/AzureBlobNameComparatorAdapter.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/file/comparators/AzureBlobNameComparatorAdapter.java new file mode 100644 index 0000000..6d67744 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/file/comparators/AzureBlobNameComparatorAdapter.java @@ -0,0 +1,39 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.azure.hotfolder.remote.file.comparators; + +import com.microsoft.azure.storage.blob.CloudBlob; +import de.hybris.platform.cloud.azure.hotfolder.remote.session.AzureBlobFileInfo; +import de.hybris.platform.cloud.commons.spring.integration.file.comparators.NamedObject; + +import java.util.Comparator; + +/*** + * Adapts a {@link Comparator} of {@link NamedObject}s so that it can compare {@link CloudBlob} objects; + * + */ +public class AzureBlobNameComparatorAdapter implements Comparator +{ + private final Comparator comparator; + + public AzureBlobNameComparatorAdapter(final Comparator comparator) + { + this.comparator = comparator; + } + + public int compare(final CloudBlob o1, final CloudBlob o2) + { + return comparator.compare(() -> AzureBlobFileInfo.getFilename(o1), + () -> AzureBlobFileInfo.getFilename(o2)); + } + +} + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/file/comparators/AzureBlobTimestampComparatorAdapter.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/file/comparators/AzureBlobTimestampComparatorAdapter.java new file mode 100644 index 0000000..2bc86f6 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/file/comparators/AzureBlobTimestampComparatorAdapter.java @@ -0,0 +1,39 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.azure.hotfolder.remote.file.comparators; + +import com.microsoft.azure.storage.blob.CloudBlob; +import de.hybris.platform.cloud.azure.hotfolder.remote.session.AzureBlobFileInfo; +import de.hybris.platform.cloud.commons.spring.integration.file.comparators.TimestampedObject; + +import java.util.Comparator; + +/*** + * Adapts a {@link Comparator} of {@link TimestampedObject}s so that it can compare {@link CloudBlob} objects; + * + */ +public class AzureBlobTimestampComparatorAdapter implements Comparator +{ + private final Comparator comparator; + + public AzureBlobTimestampComparatorAdapter(final Comparator comparator) + { + this.comparator = comparator; + } + + public int compare(final CloudBlob o1, final CloudBlob o2) + { + return comparator.compare(() -> AzureBlobFileInfo.getModified(o1), + () -> AzureBlobFileInfo.getModified(o2)); + } + +} + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/file/filters/AzureBlobPersistentAcceptOnceListFilter.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/file/filters/AzureBlobPersistentAcceptOnceListFilter.java new file mode 100644 index 0000000..c4fabac --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/file/filters/AzureBlobPersistentAcceptOnceListFilter.java @@ -0,0 +1,63 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.azure.hotfolder.remote.file.filters; + +import com.microsoft.azure.storage.blob.CloudBlob; + +import de.hybris.platform.cloud.azure.hotfolder.remote.session.AzureBlobFileInfo; + +import org.slf4j.Logger; +import org.springframework.integration.file.filters.AbstractPersistentAcceptOnceFileListFilter; +import org.springframework.integration.metadata.ConcurrentMetadataStore; + +import static org.slf4j.LoggerFactory.getLogger; + +/** + * {@link AbstractPersistentAcceptOnceFileListFilter} implementation which filters for {@link CloudBlob} + * which are files and have not not already been accepted + * + */ +public class AzureBlobPersistentAcceptOnceListFilter extends AbstractPersistentAcceptOnceFileListFilter +{ + private static final Logger LOG = getLogger(AzureBlobPersistentAcceptOnceListFilter.class); + + public AzureBlobPersistentAcceptOnceListFilter(final ConcurrentMetadataStore store, final String prefix) + { + super(store, prefix); + } + + @Override + public boolean accept(final CloudBlob file) + { + try + { + return file != null && super.accept(file); + } + catch (final RuntimeException ex) + { + LOG.error("Exception whilst filtering for duplicate file.", ex); + return false; + } + } + + @Override + protected long modified(final CloudBlob entry) + { + return AzureBlobFileInfo.getModified(entry); + } + + @Override + protected String fileName(final CloudBlob entry) + { + return AzureBlobFileInfo.getRemotePath(entry); + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/file/filters/AzureBlobRegexPatternFileListFilter.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/file/filters/AzureBlobRegexPatternFileListFilter.java new file mode 100644 index 0000000..2d599a3 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/file/filters/AzureBlobRegexPatternFileListFilter.java @@ -0,0 +1,42 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.azure.hotfolder.remote.file.filters; + +import com.microsoft.azure.storage.blob.CloudBlob; + +import de.hybris.platform.cloud.azure.hotfolder.remote.session.AzureBlobFileInfo; + +import org.springframework.integration.file.filters.AbstractRegexPatternFileListFilter; + +/** + * {@link AbstractRegexPatternFileListFilter} implementation which filters for {@link CloudBlob} + * where file names match the given pattern + * + */ +public class AzureBlobRegexPatternFileListFilter extends AbstractRegexPatternFileListFilter +{ + public AzureBlobRegexPatternFileListFilter(final String pattern) + { + super(pattern); + } + + @Override + protected String getFilename(final CloudBlob entry) + { + return AzureBlobFileInfo.getFilename(entry); + } + + @Override + protected boolean isDirectory(final CloudBlob file) + { + return AzureBlobFileInfo.isDirectory(file); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/inbound/AzureBlobInboundSynchronizer.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/inbound/AzureBlobInboundSynchronizer.java new file mode 100644 index 0000000..a4a7ae9 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/inbound/AzureBlobInboundSynchronizer.java @@ -0,0 +1,704 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.azure.hotfolder.remote.inbound; + +import com.microsoft.azure.storage.blob.CloudBlob; +import com.microsoft.azure.storage.blob.CloudBlobClient; +import de.hybris.platform.cloud.azure.hotfolder.remote.session.AzureBlobFileInfo; +import org.assertj.core.util.Lists; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.BeanFactoryAware; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.Expression; +import org.springframework.expression.ExpressionParser; +import org.springframework.expression.common.LiteralExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.integration.expression.ExpressionUtils; +import org.springframework.integration.file.filters.FileListFilter; +import org.springframework.integration.file.filters.ResettableFileListFilter; +import org.springframework.integration.file.filters.ReversibleFileListFilter; +import org.springframework.integration.file.remote.RemoteFileTemplate; +import org.springframework.integration.file.remote.session.Session; +import org.springframework.integration.file.remote.session.SessionFactory; +import org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer; +import org.springframework.integration.file.remote.synchronizer.InboundFileSynchronizer; +import org.springframework.messaging.MessagingException; +import org.springframework.util.Assert; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; + +import java.io.*; +import java.lang.reflect.Array; +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; +import java.util.function.Predicate; +import java.util.regex.Matcher; + +/** + * {@link AbstractInboundFileSynchronizer} implementation to allow synchronizing files from a Blob Storage Account. + * Ensures Remote Directory Expression is set to use the Directory Delimiter of the Client + * + */ +@SuppressWarnings("unused") +public class AzureBlobInboundSynchronizer implements InboundFileSynchronizer, BeanFactoryAware, InitializingBean, Closeable +{ + private static final Logger LOG = LoggerFactory.getLogger(AzureBlobInboundSynchronizer.class); + + protected static final ExpressionParser EXPRESSION_PARSER = new SpelExpressionParser(); + + private final RemoteFileTemplate remoteFileTemplate; + + private EvaluationContext evaluationContext; + + private String remoteFileSeparator = "/"; + + /** + * Extension used when downloading files. We change it right after we know it's downloaded. + */ + private String temporaryFileSuffix = ".writing"; + + private Expression localFilenameGeneratorExpression; + + /** + * the path on the remote mount as a String. + */ + private Expression remoteDirectoryExpression; + + /** + * The current evaluation of the expression. + */ + private volatile String evaluatedRemoteDirectory; + + /** + * An {@link FileListFilter} that runs against the remote file system view. + */ + private FileListFilter filter; + + /** + * Should we delete the remote source files + * after copying to the local directory? By default this is false. + */ + private boolean deleteRemoteFiles = false; + + /** + * the path on the remote mount to move files to as a String. + */ + private Expression moveToRemoteDirectoryExpression; + + /** + * The current evaluation of the move-to expression. + */ + private volatile String evaluatedMoveToRemoteDirectory; + + /** + * Should we transfer the remote file timestamp + * to the local file? By default this is false. + */ + private boolean preserveTimestamp; + + private BeanFactory beanFactory; + + private Comparator comparator; + + public AzureBlobInboundSynchronizer(final SessionFactory sessionFactory) + { + Assert.notNull(sessionFactory, "sessionFactory must not be null"); + this.remoteFileTemplate = new RemoteFileTemplate<>(sessionFactory); + final CloudBlobClient client = (CloudBlobClient) sessionFactory.getSession().getClientInstance(); + setRemoteDirectoryExpression(new LiteralExpression(client.getDirectoryDelimiter())); + } + + protected Comparator getComparator() + { + return this.comparator; + } + + /** + * Set a comparator to sort the retrieved list of {@code CloudBlob} (the Type that represents + * the remote file) prior to applying filters and max fetch size. + * + * @param comparator the comparator. + * @since 5.1 + */ + public void setComparator(final Comparator comparator) + { + this.comparator = comparator; + } + + + /** + * @param remoteFileSeparator the remote file separator. + * @see RemoteFileTemplate#setRemoteFileSeparator(String) + */ + public void setRemoteFileSeparator(final String remoteFileSeparator) + { + Assert.notNull(remoteFileSeparator, "'remoteFileSeparator' must not be null"); + this.remoteFileSeparator = remoteFileSeparator; + } + + /** + * Set an expression used to determine the local file name. + * + * @param localFilenameGeneratorExpression the expression. + */ + public void setLocalFilenameGeneratorExpression(final Expression localFilenameGeneratorExpression) + { + Assert.notNull(localFilenameGeneratorExpression, "'localFilenameGeneratorExpression' must not be null"); + this.localFilenameGeneratorExpression = localFilenameGeneratorExpression; + } + + /** + * Set an expression used to determine the local file name. + * + * @param localFilenameGeneratorExpression the expression. + * @see #setRemoteDirectoryExpression(Expression) + * @since 4.3.13 + */ + public void setLocalFilenameGeneratorExpressionString(final String localFilenameGeneratorExpression) + { + setLocalFilenameGeneratorExpression(EXPRESSION_PARSER.parseExpression(localFilenameGeneratorExpression)); + } + + /** + * Set a temporary file suffix to be used while transferring files. Default ".writing". + * + * @param temporaryFileSuffix the file suffix. + */ + @SuppressWarnings("unused") + public void setTemporaryFileSuffix(final String temporaryFileSuffix) + { + this.temporaryFileSuffix = temporaryFileSuffix; + } + + /** + * Specify the full path to the remote directory. + * + * @param remoteDirectory The remote directory. + */ + public void setRemoteDirectory(final String remoteDirectory) + { + this.remoteDirectoryExpression = new LiteralExpression(remoteDirectory); + evaluateRemoteDirectory(); + } + + /** + * Specify an expression that evaluates to the full path to the remote directory. + * + * @param remoteDirectoryExpression The remote directory expression. + * @since 4.2 + */ + public void setRemoteDirectoryExpression(final Expression remoteDirectoryExpression) + { + doSetRemoteDirectoryExpression(remoteDirectoryExpression); + } + + /** + * Specify an expression that evaluates to the full path to the remote directory. + * + * @param remoteDirectoryExpression The remote directory expression. + * @see #setRemoteDirectoryExpression(Expression) + * @since 4.3.13 + */ + public void setRemoteDirectoryExpressionString(final String remoteDirectoryExpression) + { + doSetRemoteDirectoryExpression(EXPRESSION_PARSER.parseExpression(remoteDirectoryExpression)); + } + + + protected final void doSetRemoteDirectoryExpression(final Expression remoteDirectoryExpression) + { + Assert.notNull(remoteDirectoryExpression, "'remoteDirectoryExpression' must not be null"); + this.remoteDirectoryExpression = remoteDirectoryExpression; + evaluateRemoteDirectory(); + } + + /** + * Set the filter to be applied to the remote files before transferring. + * + * @param filter the file list filter. + */ + public void setFilter(final FileListFilter filter) + { + doSetFilter(filter); + } + + protected final void doSetFilter(final FileListFilter filter) + { + this.filter = filter; + } + + /** + * Set to true to enable deletion of remote files after successful transfer. + * + * @param deleteRemoteFiles true to delete. + */ + public void setDeleteRemoteFiles(final boolean deleteRemoteFiles) + { + this.deleteRemoteFiles = deleteRemoteFiles; + } + + /** + * Set to true to enable the preservation of the remote file timestamp when + * transferring. + * + * @param preserveTimestamp true to preserve. + */ + public void setPreserveTimestamp(final boolean preserveTimestamp) + { + this.preserveTimestamp = preserveTimestamp; + } + + @Override + public void setBeanFactory(final BeanFactory beanFactory) throws BeansException + { + this.beanFactory = beanFactory; + } + + /** + * Specify the full path to the move-to remote directory. + * + * @param moveToRemoteDirectory The remote directory. + */ + public void setMoveToRemoteDirectory(final String moveToRemoteDirectory) + { + this.moveToRemoteDirectoryExpression = new LiteralExpression(moveToRemoteDirectory); + evaluateMoveToRemoteDirectory(); + } + + /** + * Specify an expression that evaluates to the full path to the move-to remote directory. + * + * @param moveToRemoteDirectoryExpression The remote directory expression. + * @since 4.2 + */ + public void setMoveToRemoteDirectoryExpression(final Expression moveToRemoteDirectoryExpression) + { + doSetMoveToRemoteDirectoryExpression(moveToRemoteDirectoryExpression); + } + + /** + * Specify an expression that evaluates to the full path to the move-to remote directory. + * + * @param moveToRemoteDirectoryExpression The remote directory expression. + * @see #setRemoteDirectoryExpression(Expression) + * @since 4.3.13 + */ + public void setMoveToRemoteDirectoryExpressionString(final String moveToRemoteDirectoryExpression) + { + doSetMoveToRemoteDirectoryExpression(EXPRESSION_PARSER.parseExpression(moveToRemoteDirectoryExpression)); + } + + + protected final void doSetMoveToRemoteDirectoryExpression(final Expression moveToRemoteDirectoryExpression) + { + Assert.notNull(moveToRemoteDirectoryExpression, "'moveToRemoteDirectoryExpression' must not be null"); + this.moveToRemoteDirectoryExpression = remoteDirectoryExpression; + evaluateMoveToRemoteDirectory(); + } + + + @Override + public final void afterPropertiesSet() + { + Assert.state(this.remoteDirectoryExpression != null, "'remoteDirectoryExpression' must not be null"); + if (this.evaluationContext == null) + { + this.evaluationContext = ExpressionUtils.createStandardEvaluationContext(this.beanFactory); + } + evaluateRemoteDirectory(); + evaluateMoveToRemoteDirectory(); + if (deleteRemoteFiles) + { + Assert.state(!StringUtils.isEmpty(this.evaluatedRemoteDirectory), + "'moveToRemoteDirectory' and 'deleteRemoteFiles' are mutually exclusive."); + } + + } + + protected final List filterFiles(final CloudBlob[] files) + { + return (this.filter != null) ? this.filter.filterFiles(files) : Arrays.asList(files); + } + + @SuppressWarnings("unchecked") + public static F[] purgeUnwantedElements(final F[] fileArray, + final Predicate predicate, + final Comparator comparator) + { + if (ObjectUtils.isEmpty(fileArray)) + { + return fileArray; + } + else + { + if (comparator == null) + { + return Arrays.stream(fileArray) + .filter(predicate.negate()) + .toArray(size -> (F[]) Array.newInstance(fileArray[0].getClass(), size)); + } + else + { + return Arrays.stream(fileArray) + .filter(predicate.negate()) + .sorted(comparator) + .toArray(size -> (F[]) Array.newInstance(fileArray[0].getClass(), size)); + } + } + } + + protected String getTemporaryFileSuffix() + { + return this.temporaryFileSuffix; + } + + @Override + public void close() throws IOException + { + if (this.filter instanceof Closeable) + { + ((Closeable) this.filter).close(); + } + } + + @Override + public void synchronizeToLocalDirectory(final File localDirectory) + { + synchronizeToLocalDirectoryAndGetFileInfo(localDirectory, Integer.MIN_VALUE); + } + + @Override + public void synchronizeToLocalDirectory(final File localDirectory, final int maxFetchSize) + { + synchronizeToLocalDirectoryAndGetFileInfo(localDirectory, maxFetchSize); + } + + public List synchronizeToLocalDirectoryAndGetFileInfo(final File localDirectory, final int maxFetchSize) + { + if (maxFetchSize == 0) + { + if (LOG.isDebugEnabled()) + { + LOG.debug("Max Fetch Size is zero - fetch to " + localDirectory.getAbsolutePath() + " ignored"); + } + return Lists.emptyList(); + } + if (LOG.isTraceEnabled()) + { + LOG.trace("Synchronizing " + this.evaluatedRemoteDirectory + " to " + localDirectory); + } + try + { + final List azureBlobFileInfos = this.remoteFileTemplate.execute(session -> + transferFilesFromRemoteToLocal(localDirectory, maxFetchSize, session)); + if (LOG.isDebugEnabled()) + { + final int count = (azureBlobFileInfos == null) ? 0 : azureBlobFileInfos.size(); + LOG.debug(count + " files transferred from '" + this.evaluatedRemoteDirectory + "'"); + } + return azureBlobFileInfos; + } + catch (final Exception e) + { + throw new MessagingException("Problem occurred while synchronizing '" + + this.evaluatedRemoteDirectory + "' to local directory", e); + } + } + + // Suppress Sonar warnings - this is mostly spring code copied here to extend and fix bugs. + // I don't want to change it's structure as it will make it much more difficult to compare to the + // original in the future. + @SuppressWarnings({"squid:S3776", "squid:S134"}) + private List transferFilesFromRemoteToLocal(final File localDirectory, final int maxFetchSize, + final Session session) + throws IOException + { + + CloudBlob[] files = session.list(this.evaluatedRemoteDirectory); + if (!ObjectUtils.isEmpty(files)) + { + files = purgeUnwantedElements(files, e -> !isFile(e), this.comparator); + } + + if (!ObjectUtils.isEmpty(files)) + { + List filteredFiles = filterFiles(files); + if (maxFetchSize >= 0 && filteredFiles.size() > maxFetchSize) + { + rollbackFromFileToListEnd(filteredFiles, filteredFiles.get(maxFetchSize)); + final List newList = new ArrayList<>(maxFetchSize); + for (int i = 0; i < maxFetchSize; i++) + { + newList.add(filteredFiles.get(i)); + } + filteredFiles = newList; + } + + final List copiedFiles = new ArrayList<>(filteredFiles.size()); + for (final CloudBlob file : filteredFiles) + { + try + { + if (file != null) + { + final AzureBlobFileInfo azureBlobFileInfo = + copyFileToLocalDirectory(this.evaluatedRemoteDirectory, file, localDirectory, session); + if (azureBlobFileInfo != null) + { + copiedFiles.add(azureBlobFileInfo); + } + } + } + catch (final RuntimeException | IOException e1) + { + rollbackFromFileToListEnd(filteredFiles, file); + throw e1; + } + } + return copiedFiles; + } + else + { + return Lists.emptyList(); + } + } + + protected void rollbackFromFileToListEnd(final List filteredFiles, final CloudBlob file) + { + if (this.filter instanceof ReversibleFileListFilter) + { + ((ReversibleFileListFilter) this.filter) + .rollback(file, filteredFiles); + } + } + + // Suppress Sonar warnings - this is mostly spring code copied here to extend and fix bugs. + // I don't want to change it's structure as it will make it much more difficult to compare to the + // original in the future. + @SuppressWarnings({"squid:S134"}) + protected AzureBlobFileInfo copyFileToLocalDirectory(final String remoteDirectoryPath, final CloudBlob remoteFile,// NOSONAR + final File localDirectory, final Session session) + throws IOException + { + + final String remoteFileName = getFilename(remoteFile); + final String localFileName = generateLocalFileName(remoteFileName); + final String remoteFilePath = remoteDirectoryPath != null + ? (remoteDirectoryPath + this.remoteFileSeparator + remoteFileName) + : remoteFileName; + + if (!isFile(remoteFile)) + { + if (LOG.isDebugEnabled()) + { + LOG.debug("cannot copy, not a file: " + remoteFilePath); + } + return null; + } + + final long modified = getModified(remoteFile); + + final File localFile = new File(localDirectory, localFileName); + final boolean exists = localFile.exists(); + + final AzureBlobFileInfo azureBlobFileInfo = new AzureBlobFileInfo(remoteFile, localDirectory.getCanonicalPath()); + + if (!exists || (this.preserveTimestamp && modified != localFile.lastModified())) + { + if (!exists && + localFileName.replaceAll("/", Matcher.quoteReplacement(File.separator)).contains(File.separator)) + { + //noinspection ResultOfMethodCallIgnored + localFile.getParentFile().mkdirs(); //NOSONAR - will fail on the writing below + } + + boolean transfer = true; + + if (exists) + { + try + { + Files.delete(localFile.toPath()); + } + catch (final IOException ex) + { + transfer = false; + if (LOG.isInfoEnabled()) + { + LOG.info("Cannot delete local file '" + localFile + + "' in order to transfer modified remote file '" + remoteFile + "'. " + + "The local file may be busy in some other process.", ex); + } + } + } + + boolean renamed = false; + + if (transfer) + { + renamed = copyRemoteContentToLocalFile(session, remoteFilePath, localFile); + } + + if (renamed) + { + if (!StringUtils.isEmpty(this.evaluatedMoveToRemoteDirectory)) + { + azureBlobFileInfo.setRemoteDirectory(this.evaluatedMoveToRemoteDirectory); + final String moveToFilePath + = this.evaluatedMoveToRemoteDirectory + this.remoteFileSeparator + remoteFileName; + session.rename(remoteFilePath, moveToFilePath); + if (LOG.isDebugEnabled()) + { + LOG.debug("moved remote file: " + remoteFilePath + " to " + moveToFilePath); + } + } + else if (this.deleteRemoteFiles) + { + azureBlobFileInfo.setDeleted(true); + session.remove(remoteFilePath); + if (LOG.isDebugEnabled()) + { + LOG.debug("deleted remote file: " + remoteFilePath); + } + } + if (this.preserveTimestamp && !localFile.setLastModified(modified)) + { + throw new IllegalStateException("Could not sent last modified on file: " + localFile); + } + return azureBlobFileInfo; + } + else if (this.filter instanceof ResettableFileListFilter) + { + if (LOG.isInfoEnabled()) + { + LOG.info("Reverting the remote file '" + remoteFile + + "' from the filter for a subsequent transfer attempt"); + } + ((ResettableFileListFilter) this.filter).remove(remoteFile); + } + } + else if (LOG.isWarnEnabled()) + { + LOG.warn("The remote file '" + remoteFile + "' has not been transferred " + + "to the existing local file '" + localFile + "'. Consider removing the local file."); + } + + return null; + } + + // Suppress Sonar warnings - this is mostly spring code copied here to extend and fix bugs. + // I don't want to change it's structure as it will make it much more difficult to compare to the + // original in the future. + @SuppressWarnings({"squid:S2221"}) + private boolean copyRemoteContentToLocalFile(final Session session, final String remoteFilePath, + final File localFile) + { + boolean renamed; + final String tempFileName = localFile.getAbsolutePath() + this.temporaryFileSuffix; + final File tempFile = new File(tempFileName); + + try (final OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(tempFile))) + { + session.read(remoteFilePath, outputStream); + } + catch (final RuntimeException re) + { + throw re; + } + catch (final Exception e) + { + throw new MessagingException("Failure occurred while copying '" + remoteFilePath + + "' from the remote to the local directory", e); + } + + renamed = tempFile.renameTo(localFile); + + if (!renamed) + { + try + { + Files.delete(localFile.toPath()); + renamed = tempFile.renameTo(localFile); + if (!renamed && LOG.isInfoEnabled()) + { + LOG.info("Cannot rename '" + + tempFileName + + "' to local file '" + localFile + "' after deleting. " + + "The local file may be busy in some other process."); + } + } + catch (final IOException ex) + { + if (LOG.isInfoEnabled()) + { + LOG.info("Cannot delete local file '" + localFile + + "'. The local file may be busy in some other process.", ex); + } + } + } + return renamed; + } + + private String generateLocalFileName(final String remoteFileName) + { + if (this.localFilenameGeneratorExpression != null) + { + return this.localFilenameGeneratorExpression.getValue(this.evaluationContext, remoteFileName, + String.class); + } + return remoteFileName; + } + + protected void evaluateRemoteDirectory() + { + if (this.evaluationContext != null) + { + this.evaluatedRemoteDirectory = this.remoteDirectoryExpression.getValue(this.evaluationContext, + String.class); + this.evaluationContext.setVariable("remoteDirectory", this.evaluatedRemoteDirectory); + + } + } + + protected void evaluateMoveToRemoteDirectory() + { + if (this.evaluationContext != null) + { + this.evaluatedMoveToRemoteDirectory = this.moveToRemoteDirectoryExpression.getValue(this.evaluationContext, + String.class); + this.evaluationContext.setVariable("moveToRemoteDirectory", this.evaluatedMoveToRemoteDirectory); + } + } + + @SuppressWarnings("BooleanMethodIsAlwaysInverted") + private boolean isFile(final CloudBlob entry) + { + return entry != null; + } + + private String getFilename(final CloudBlob entry) + { + return AzureBlobFileInfo.getFilename(entry); + } + + private long getModified(final CloudBlob entry) + { + return AzureBlobFileInfo.getModified(entry); + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/inbound/AzureBlobSynchronizingMessageSource.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/inbound/AzureBlobSynchronizingMessageSource.java new file mode 100644 index 0000000..7cde17c --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/inbound/AzureBlobSynchronizingMessageSource.java @@ -0,0 +1,193 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.azure.hotfolder.remote.inbound; + +import de.hybris.platform.cloud.azure.hotfolder.remote.file.RemoteFileHeaders; +import de.hybris.platform.cloud.azure.hotfolder.remote.session.AzureBlobFileInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.BeanInitializationException; +import org.springframework.context.Lifecycle; +import org.springframework.integration.endpoint.AbstractMessageSource; +import org.springframework.messaging.Message; +import org.springframework.util.Assert; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.List; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * A {@link org.springframework.integration.core.MessageSource} implementation for Azure Blob Storage. + * + */ +public class AzureBlobSynchronizingMessageSource extends AbstractMessageSource implements Lifecycle +{ + private static final Logger LOG = LoggerFactory.getLogger(AzureBlobSynchronizingMessageSource.class); + + private volatile int maxFetchSize = Integer.MIN_VALUE; + + /** + * An implementation that will handle the chores of actually connecting to and synchronizing + * the remote file system with the local one, in an inbound direction. + */ + private final AzureBlobInboundSynchronizer synchronizer; + + private final BlockingQueue toBeReceived = new LinkedBlockingQueue<>(); + + /** + * Should the endpoint attempt to create the local directory? True by default. + */ + private boolean autoCreateLocalDirectory = true; + + /** + * Directory to which things should be synchronized locally. + */ + private File localDirectory; + + private final AtomicBoolean running = new AtomicBoolean(); + + public AzureBlobSynchronizingMessageSource(final AzureBlobInboundSynchronizer synchronizer) + { + Assert.notNull(synchronizer, "synchronizer must not be null"); + this.synchronizer = synchronizer; + } + + public void setMaxFetchSize(final int maxFetchSize) + { + this.maxFetchSize = maxFetchSize; + } + + public int getMaxFetchSize() + { + return this.maxFetchSize; + } + + public void setAutoCreateLocalDirectory(final boolean autoCreateLocalDirectory) + { + this.autoCreateLocalDirectory = autoCreateLocalDirectory; + } + + public void setLocalDirectory(final File localDirectory) + { + this.localDirectory = localDirectory; + try + { + LOG.debug("Using local directory [{}].", localDirectory.getCanonicalPath()); + } + catch (final IOException e) + { + LOG.debug("Unable to get path for local directory.", e); + } + } + + @Override + public String getComponentType() + { + return "azure:inbound-channel-adapter"; + } + + @Override + public void onInit() + { + Assert.notNull(this.localDirectory, "localDirectory must not be null"); + try + { + if (!this.localDirectory.exists()) + { + if (this.autoCreateLocalDirectory) + { + LOG.debug("The '" + this.localDirectory + "' directory doesn't exist; Will create."); + //noinspection ResultOfMethodCallIgnored + this.localDirectory.mkdirs(); //NOSONAR - result ignored. + } + else + { + throw new FileNotFoundException(this.localDirectory.getName()); + } + } + } + catch (final RuntimeException e) + { + throw e; + } + catch (final Exception e) + { + throw new BeanInitializationException("Failure during initialization for: " + this, e); + } + } + + @Override + public void start() + { + this.running.set(true); + } + + @Override + public void stop() + { + if (this.running.compareAndSet(true, false)) + { + try + { + this.synchronizer.close(); + } + catch (final IOException e) + { + LOG.error("Error closing synchronizer", e); + } + } + } + + @Override + public boolean isRunning() + { + return this.running.get(); + } + + @Override + protected Message doReceive() + { + Assert.state(this.running.get(), this.getComponentName() + " is not running"); + final AzureBlobFileInfo file = poll(); + if (file != null) + { + return getMessageBuilderFactory() + .withPayload(new File(file.getLocalDirectory(), file.getFilename())) + .setHeader(RemoteFileHeaders.REMOTE_DIRECTORY, file.getRemoteDirectory()) + .setHeader(RemoteFileHeaders.REMOTE_FILE, file.getFilename()) + .setHeader(RemoteFileHeaders.REMOTE_FILE_DELETED, file.isDeleted()) + .build(); + } + return null; + } + + + protected AzureBlobFileInfo poll() + { + if (this.toBeReceived.isEmpty()) + { + synchronizeFiles(); + } + return this.toBeReceived.poll(); + } + + protected void synchronizeFiles() + { + final List azureBlobFileInfos + = this.synchronizer.synchronizeToLocalDirectoryAndGetFileInfo(localDirectory, getMaxFetchSize()); + this.toBeReceived.addAll(azureBlobFileInfos); + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/outbound/AzureBlobMessageHandler.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/outbound/AzureBlobMessageHandler.java new file mode 100644 index 0000000..2b1ac64 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/outbound/AzureBlobMessageHandler.java @@ -0,0 +1,145 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.azure.hotfolder.remote.outbound; + +import de.hybris.platform.cloud.azure.hotfolder.remote.AzureBlobEntryFileTemplate; +import de.hybris.platform.cloud.azure.hotfolder.remote.file.RemoteFileHeaders; +import de.hybris.platform.cloud.azure.hotfolder.remote.session.AzureBlobSession; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.integration.file.remote.RemoteFileTemplate; +import org.springframework.integration.file.remote.handler.FileTransferringMessageHandler; +import org.springframework.integration.file.remote.session.SessionFactory; + +import com.microsoft.azure.storage.blob.CloudBlob; + +import org.springframework.messaging.Message; + +/** + * An Azure Blob Storage specific {@link FileTransferringMessageHandler} extension. + * Based on the {@link AzureBlobSession} and {@link AzureBlobEntryFileTemplate}. + * + * @author Tom Greasley (tgreasley@salmon.com) + * @see AzureBlobEntryFileTemplate + * @see AzureBlobSession + */ +public class AzureBlobMessageHandler extends FileTransferringMessageHandler +{ + private static final Logger LOG = LoggerFactory.getLogger(AzureBlobMessageHandler.class); + + private volatile boolean deleteSourceFiles; + + public AzureBlobMessageHandler(final SessionFactory sessionFactory) + { + this(new AzureBlobEntryFileTemplate(sessionFactory)); + } + + public AzureBlobMessageHandler(final AzureBlobEntryFileTemplate remoteFileTemplate) + { + super(remoteFileTemplate); + } + + public AzureBlobMessageHandler(final RemoteFileTemplate remoteFileTemplate) + { + super(remoteFileTemplate); + } + + /** + * Specify whether to delete source Files after writing to the destination + * directory. The default is false. When set to true, it + * will only have an effect if the inbound Message has a File payload or + * a {@link RemoteFileHeaders#ORIGINAL_FILE} header value containing either a + * File instance or a String representing the original file path. + * + * @param deleteSourceFiles true to delete the source files. + */ + public void setDeleteSourceFiles(final boolean deleteSourceFiles) + { + this.deleteSourceFiles = deleteSourceFiles; + } + + public void setRemoteDirectory(final String remoteDirectory) + { + this.setRemoteDirectoryExpression(EXPRESSION_PARSER.parseExpression("'" + remoteDirectory + "'")); + } + + @Override + protected void handleMessageInternal(final Message message) + { + final File file = retrieveFile(message); + if (file == null || !file.exists()) + { + LOG.info("File not found for message [{}]", message); + } + else + { + super.handleMessageInternal(message); + if (deleteSourceFiles) + { + cleanUpAfterCopy(file); + } + } + } + + protected void cleanUpAfterCopy(final File file) + { + if (file != null && file.exists()) + { + try + { + Files.delete(file.toPath()); + } + catch (final IOException ex) + { + LOG.info("Cannot delete local file '" + file + + "'. The local file may be busy in some other process.", ex); + } + } + } + + private File retrieveFile(final Message message) + { + final Object payload = message.getPayload(); + if (payload instanceof File) + { + return (File) payload; + } + else + { + return retrieveOriginalFileFromHeader(message); + } + } + + /** + * Retrieves the File instance from the {@link RemoteFileHeaders#ORIGINAL_FILE} + * header if available. If the value is not a File instance or a String + * representation of a file path, this will return null. + */ + private File retrieveOriginalFileFromHeader(final Message message) + { + final Object value = message.getHeaders().get(RemoteFileHeaders.ORIGINAL_FILE); + if (value instanceof File) + { + return (File) value; + } + if (value instanceof String) + { + return new File((String) value); + } + return null; + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/outbound/AzureBlobRemoteMoveMessageHandler.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/outbound/AzureBlobRemoteMoveMessageHandler.java new file mode 100644 index 0000000..adfbc3a --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/outbound/AzureBlobRemoteMoveMessageHandler.java @@ -0,0 +1,197 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.azure.hotfolder.remote.outbound; + +import com.microsoft.azure.storage.blob.CloudBlob; +import com.microsoft.azure.storage.blob.CloudBlobClient; +import de.hybris.platform.cloud.azure.hotfolder.remote.file.RemoteFileHeaders; +import de.hybris.platform.cloud.azure.hotfolder.remote.session.AzureBlobSession; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.expression.Expression; +import org.springframework.expression.common.LiteralExpression; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.integration.expression.ExpressionUtils; +import org.springframework.integration.file.FileNameGenerator; +import org.springframework.integration.file.remote.RemoteFileTemplate; +import org.springframework.integration.file.remote.session.SessionFactory; +import org.springframework.integration.handler.AbstractMessageHandler; +import org.springframework.messaging.Message; +import org.springframework.messaging.MessageHeaders; +import org.springframework.messaging.MessagingException; +import org.springframework.util.Assert; +import org.springframework.util.StringUtils; + + +/** + * An Azure Blob Storage specific {@link AbstractMessageHandler} extension + * that moves a remote file based on the headers in the message provided. + * Based on the {@link AzureBlobSession}. + * + * @see AzureBlobSession + */ +public class AzureBlobRemoteMoveMessageHandler extends AbstractMessageHandler +{ + private static final Logger LOG = LoggerFactory.getLogger(AzureBlobRemoteMoveMessageHandler.class); + + private final RemoteFileTemplate remoteFileTemplate; + + private final String clientDirectoryDelimiter; + + private StandardEvaluationContext evaluationContext; + + private FileNameGenerator fileNameGenerator; + + /** + * the path on the remote mount as a String. + */ + private Expression remoteDirectoryExpression; + + /** + * The current evaluation of the expression. + */ + private volatile String evaluatedRemoteDirectory; + + public AzureBlobRemoteMoveMessageHandler(final SessionFactory sessionFactory) + { + Assert.notNull(sessionFactory, "sessionFactory must not be null"); + this.remoteFileTemplate = new RemoteFileTemplate<>(sessionFactory); + final CloudBlobClient client = (CloudBlobClient) sessionFactory.getSession().getClientInstance(); + clientDirectoryDelimiter = client.getDirectoryDelimiter(); + setRemoteDirectoryExpression(new LiteralExpression(clientDirectoryDelimiter)); + } + + /** + * Specify the full path to the remote directory. + * + * @param remoteDirectory The remote directory. + */ + public void setRemoteDirectory(final String remoteDirectory) + { + this.remoteDirectoryExpression = new LiteralExpression(remoteDirectory); + evaluateRemoteDirectory(); + } + + /** + * Specify an expression that evaluates to the full path to the remote directory. + * + * @param remoteDirectoryExpression The remote directory expression. + */ + public void setRemoteDirectoryExpression(final Expression remoteDirectoryExpression) + { + doSetRemoteDirectoryExpression(remoteDirectoryExpression); + } + + /** + * Specify an expression that evaluates to the full path to the remote directory. + * + * @param remoteDirectoryExpression The remote directory expression. + * @see #setRemoteDirectoryExpression(Expression) + */ + public void setRemoteDirectoryExpressionString(final String remoteDirectoryExpression) + { + doSetRemoteDirectoryExpression(EXPRESSION_PARSER.parseExpression(remoteDirectoryExpression)); + } + + protected final void doSetRemoteDirectoryExpression(final Expression remoteDirectoryExpression) + { + Assert.notNull(remoteDirectoryExpression, "'remoteDirectoryExpression' must not be null"); + this.remoteDirectoryExpression = remoteDirectoryExpression; + } + + public void setFileNameGenerator(final FileNameGenerator fileNameGenerator) + { + this.fileNameGenerator = fileNameGenerator; + this.remoteFileTemplate.setFileNameGenerator(fileNameGenerator); + } + + @Override + protected void onInit() + + { + Assert.state(this.remoteDirectoryExpression != null, "'remoteDirectoryExpression' must not be null"); + if (this.evaluationContext == null) + { + this.evaluationContext = ExpressionUtils.createStandardEvaluationContext(this.getBeanFactory()); + } + evaluateRemoteDirectory(); + } + + @Override + protected void handleMessageInternal(final Message message) + { + if (shouldHandle(message)) + { + + final MessageHeaders headers = message.getHeaders(); + final String sourceDirectory = headers.get(RemoteFileHeaders.REMOTE_DIRECTORY).toString(); + final String sourceFilename = headers.get(RemoteFileHeaders.REMOTE_FILE).toString(); + + // If the remote directory and filename values look reasonable... + if (!(StringUtils.isEmpty(sourceDirectory) || StringUtils.isEmpty(sourceFilename))) + { + // Generate the remote target filename... + String targetFilename = sourceFilename; + if (this.fileNameGenerator != null) + { + targetFilename = this.fileNameGenerator.generateFileName(message); + } + + // Generate the complete source and target paths... + final String sourcePath = sourceDirectory + clientDirectoryDelimiter + sourceFilename; + final String targetPath = evaluatedRemoteDirectory + clientDirectoryDelimiter + targetFilename; + + moveFile(sourcePath, targetPath); + + } + } + } + + protected boolean shouldHandle(final Message message) + { + if (message != null) + { + final MessageHeaders headers = message.getHeaders(); + + // If the details of the remote file have been provided and the remote file + // has not been deleted... + return ((Boolean.TRUE != headers.get(RemoteFileHeaders.REMOTE_FILE_DELETED, Boolean.class)) && + headers.containsKey(RemoteFileHeaders.REMOTE_DIRECTORY) && + headers.containsKey(RemoteFileHeaders.REMOTE_FILE)); + } + return false; + } + + protected void moveFile(final String sourcePath, final String targetPath) + { + // Attempt to move the remote file + try + { + remoteFileTemplate.rename(sourcePath, targetPath); + } + catch (final MessagingException ex) + { + LOG.error("Unable to rename remote file [{}] to [{}].", sourcePath, targetPath); + LOG.debug("Exception whilst moving remote file.", ex); + } + } + + protected void evaluateRemoteDirectory() + { + if (this.evaluationContext != null) + { + this.evaluatedRemoteDirectory = this.remoteDirectoryExpression.getValue(this.evaluationContext, + String.class); + this.evaluationContext.setVariable("remoteDirectory", this.evaluatedRemoteDirectory); + } + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/session/AzureBlobFileInfo.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/session/AzureBlobFileInfo.java new file mode 100644 index 0000000..1077441 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/session/AzureBlobFileInfo.java @@ -0,0 +1,232 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.azure.hotfolder.remote.session; + +import com.microsoft.azure.storage.blob.BlobProperties; +import com.microsoft.azure.storage.blob.CloudBlob; +import org.springframework.integration.file.remote.FileInfo; +import org.springframework.util.Assert; + +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Date; +import java.util.Optional; + +/** + * A {@link FileInfo} implementation for Azure Storage Blobs + * + **/ +public class AzureBlobFileInfo implements FileInfo, Comparable> +{ + + private final CloudBlob cloudBlob; + private final String localDirectory; + + private String remoteDirectory; + private boolean isDeleted = false; + + public AzureBlobFileInfo(final CloudBlob azureBlobEntry, final String localDirectory) + { + Assert.notNull(azureBlobEntry, "AzureBlobEntry must not be null"); + Assert.notNull(localDirectory, "LocalFilePath must not be null"); + this.cloudBlob = azureBlobEntry; + this.localDirectory = localDirectory; + this.remoteDirectory = getRemoteDirectory(cloudBlob); + } + + @Override + public boolean isDirectory() + { + return isDirectory(this.cloudBlob); // All cloud blobs are files. + } + + @Override + public boolean isLink() + { + return false; // All cloud blobs are files. + } + + public String getId() + { + return this.cloudBlob.getUri().toString(); + } + + @Override + public long getSize() + { + return getSize(this.cloudBlob); + } + + @Override + public long getModified() + { + return getModified(cloudBlob); + } + + @Override + public String getFilename() + { + return getFilename(this.cloudBlob); + } + + @Override + public String getPermissions() + { + return null; + } + + public String getLocalDirectory() + { + return this.localDirectory; + } + + public String getRemoteDirectory() + { + return this.remoteDirectory; + } + + public void setRemoteDirectory(final String remoteDirectory) + { + this.remoteDirectory = remoteDirectory; + } + + public String getOriginalRemoteDirectory() + { + return getRemoteDirectory(this.cloudBlob); + } + + public boolean isDeleted() + { + return this.isDeleted; + } + + public void setDeleted(final boolean deleted) + { + this.isDeleted = deleted; + } + + @Override + public CloudBlob getFileInfo() + { + return this.cloudBlob; + } + + + /** + * Returns false as all cloud blobs are file + * + * @param cloudBlob the cloud blob + * @return false + */ + public static boolean isDirectory(final CloudBlob cloudBlob) + { + return false; + } + + /** + * Returns the last modified timestamp for a given cloud blob. + * + * @param cloudBlob the cloud blob + * @return returns the last modified timestamp, if available; otherwise {@link Long#MIN_VALUE}. + */ + public static long getModified(final CloudBlob cloudBlob) + { + return Optional.of(cloudBlob) + .map(CloudBlob::getProperties) + .map(BlobProperties::getLastModified) + .map(Date::getTime) + .orElse(Long.MIN_VALUE); + } + + /** + * Returns the filesize, in bytes, for a given cloud blob. + * + * @param cloudBlob the cloud blob + * @return returns the file size, if available; otherwise 0. + */ + public static long getSize(final CloudBlob cloudBlob) + { + return Optional.of(cloudBlob) + .map(CloudBlob::getProperties) + .map(BlobProperties::getLength) + .orElse(0L); + } + + /** + * Returns the remote file name, excluding the path, for a given cloud blob. + * + * @param cloudBlob the cloud blob + * @return returns the remote file name, if available; otherwise an empty string. + */ + public static String getFilename(final CloudBlob cloudBlob) + { + return Optional.of(cloudBlob) + .map(CloudBlob::getName) + .map(Paths::get) + .map(Path::getFileName) + .map(Path::toString) + .orElse(""); + } + + /** + * Returns the remote directory, excluding the filename, for a given cloud blob. + * + * @param cloudBlob the cloud blob + * @return returns the remote directory, if available; otherwise an empty string. + */ + public static String getRemoteDirectory(final CloudBlob cloudBlob) + { + return Optional.of(cloudBlob) + .map(CloudBlob::getName) + .map(Paths::get) + .map(Path::getParent) + .map(Path::toString) + .orElse(""); + } + + /** + * Returns the remote path, including the filename, for a given cloud blob. + * + * @param cloudBlob the cloud blob + * @return returns the remote path, if available; otherwise an empty string. + */ + public static String getRemotePath(final CloudBlob cloudBlob) + { + return Optional.of(cloudBlob) + .map(CloudBlob::getName) + .orElse(""); + } + + public int compareTo(final FileInfo o) + { + return this.getFilename().compareTo(o.getFilename()); + } + + @Override + public boolean equals(final Object obj) + { + if (obj != null && obj.getClass() == this.getClass()) + { + final AzureBlobFileInfo c = (AzureBlobFileInfo) obj; + return c.getFilename().equals(this.getFilename()); + } + else + { + return false; + } + } + + @Override + public int hashCode() + { + return this.getFilename().hashCode(); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/session/AzureBlobSession.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/session/AzureBlobSession.java new file mode 100644 index 0000000..3972505 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/session/AzureBlobSession.java @@ -0,0 +1,375 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.azure.hotfolder.remote.session; + +import com.microsoft.azure.storage.StorageException; +import com.microsoft.azure.storage.blob.*; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.integration.file.remote.session.Session; +import org.springframework.util.Assert; +import org.springframework.util.StringUtils; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URISyntaxException; +import java.util.Arrays; +import java.util.stream.StreamSupport; + +/** + * Implementation of {@link Session} for Azure Blob Storage. + * + */ +public class AzureBlobSession implements ExtendedSession +{ + private static final Logger LOG = LoggerFactory.getLogger(AzureBlobSession.class); + + private static final int UNKNOWN_LENGTH = -1; + + private final CloudBlobClient client; + private final String containerName; + private final boolean createContainerIfNotExists; + + public AzureBlobSession(final CloudBlobClient client, + final String containerName, + final boolean createContainerIfNotExists) + { + Assert.notNull(client, "Client must not be null"); + Assert.isTrue(!StringUtils.isEmpty(containerName), "Container name must not be blank."); + this.client = client; + this.containerName = containerName; + this.createContainerIfNotExists = createContainerIfNotExists; + } + + /** + * List all the paths of the {@link ListBlobItem} contained within the given path + * + * @param path to be queried + * @return {@link String String[]} of full paths + * @throws IOException when path results in invalid URI or exception occurs communicating with Storage Service + */ + @Override + public String[] listNames(final String path) throws IOException + { + return Arrays.stream(list(path)) + .map(CloudBlob::getName) + .toArray(String[]::new); + } + + /** + * List all the {@link ListBlobItem} contained within the given path + * + * @param path to be queried + * @return {@link CloudBlob CloudBlob[]} of blobs contained + * @throws IOException when path results in invalid URI or exception occurs communicating with Storage Service + */ + @Override + public CloudBlob[] list(final String path) throws IOException + { + LOG.debug("Listing contents of container [{}] on path [{}].", containerName, path); + try + { + final CloudBlobContainer container = getContainer(containerName); + final Iterable blobItems; + if (StringUtils.isEmpty(path)) + { + blobItems = container.listBlobs(); + } + else + { + final CloudBlobDirectory directory = container.getDirectoryReference(path); + blobItems = directory.listBlobs(); + } + return StreamSupport.stream(blobItems.spliterator(), false) + .filter(CloudBlob.class::isInstance) + .map(CloudBlob.class::cast) + .toArray(CloudBlob[]::new); + } + catch (final URISyntaxException | StorageException e) + { + throw new IOException(e); + } + } + + /** + * Write the {@link InputStream} to the given path. + * Appends to the current blob when already exists, else creates new blob + * + * @param inputStream to be written + * @param path where to be written to + * @throws IOException when path results in invalid URI or exception occurs communicating with Storage Service + */ + @Override + public void write(final InputStream inputStream, final String path) throws IOException + { + LOG.debug("Writing to container [{}] on path [{}].", containerName, path); + try + { + final CloudBlockBlob blob = getBlockBlob(path); + blob.upload(inputStream, UNKNOWN_LENGTH); + } + catch (final StorageException e) + { + throw new IOException(e); + } + } + + /** + * Read the blob located in path into given {@link OutputStream} + * + * @param path where to be read from + * @param outputStream stream to write to + * @throws IOException when path results in invalid URI or exception occurs communicating with Storage Service + */ + @Override + public void read(final String path, final OutputStream outputStream) throws IOException + { + LOG.debug("Reading from container [{}] on path [{}].", containerName, path); + try + { + getBlockBlob(path).download(outputStream); + } + catch (final StorageException e) + { + throw new IOException(e); + } + } + + /** + * Read the blob located in path + * + * @param path where to be read from + * @throws IOException when path results in invalid URI or exception occurs communicating with Storage Service + */ + @Override + public InputStream readRaw(final String path) throws IOException + { + LOG.debug("Reading raw data from container [{}] on path [{}].", containerName, path); + try + { + return getBlockBlob(path).openInputStream(); + } + catch (final StorageException e) + { + throw new IOException(e); + } + } + + @Override + public boolean finalizeRaw() + { + return true; + } + + /** + * Append the {@link InputStream} to the given path. Only appends when the blob exists + * + * @param inputStream to be written + * @param path where to be written to + */ + @Override + public void append(final InputStream inputStream, final String path) + { + throw new UnsupportedOperationException("Append operations not supported by block blob type."); + } + + + /** + * Remove the Blob at the given path. + * + * @param path where to be written to + * @return true when blob exists and is successfully deleted + * @throws IOException when path results in invalid URI or exception occurs communicating with Storage Service + */ + @Override + public boolean remove(final String path) throws IOException + { + LOG.debug("Removing from container [{}] on path [{}].", containerName, path); + try + { + final CloudBlockBlob blob = getBlockBlob(path); + return !blob.exists() || blob.deleteIfExists(); + } + catch (final StorageException e) + { + throw new IOException(e); + } + } + + /** + * Azure Cloud Storage only makes a directory once a blob is written to it + * so writing a blob called containerName/folder/blob.txt will create the directory + * if needed within the containerName + * + * @param path where to be written to + * @return true + */ + @Override + public boolean mkdir(final String path) + { + return true; + } + + /** + * Azure API does not support removing directories, only containers + * + * @param path where to be written to + * @return true + */ + @Override + public boolean rmdir(final String path) + { + return true; + } + + /** + * Rename/move a blob from a given path to another + * + * @param from where the blob currently is + * @param to where the blob should be moved to, or should be renamed as + * @throws IOException when either from/to results in invalid URI or exception occurs communicating with Storage Service + */ + @Override + public void rename(final String from, final String to) throws IOException + { + LOG.debug("Rename path [{}], to [{}] in container [{}].", from, to, containerName); + try + { + final CloudBlockBlob fromBlob = getBlockBlob(from); + final CloudBlockBlob toBlob = getBlockBlob(to); + + toBlob.startCopy(fromBlob); + fromBlob.deleteIfExists(); + } + catch (final StorageException | URISyntaxException e) + { + throw new IOException(e); + } + } + + @Override + public void close() + { + //Nothing to do here + } + + @Override + public boolean isOpen() + { + try + { + return this.client.getServiceStats() != null; + } + catch (final StorageException e) + { + LOG.error("Unable to retrieve service stats", e); + return false; + } + } + + /** + * Checks to see if a file in path exists e.g. folder/file.txt exists within containerName + * + * @param path e.g. containerName/folder/file.txt + * @return true if blob exists + * @throws IOException when an exception occurs communicating with Storage Service + */ + @Override + public boolean exists(final String path) throws IOException + { + LOG.debug("Querying container for [{}]", path); + try + { + final boolean exists = getBlockBlob(path).exists(); + LOG.debug("Path [{}] does{} exist in container [{}].", + path, exists ? "" : "not ", containerName); + return exists; + } + catch (final StorageException e) + { + throw new IOException(e); + } + } + + @Override + public CloudBlobClient getClientInstance() + { + return this.client; + } + + /** + * Get reference to blob from server. Blob will allow retrieve of properties e.g. size, last modified etc... + * + * @param path e.g. containerName/folder/file.txt + * @return {@link CloudBlob} of blob found + * @throws IOException when either path results in invalid URI or exception occurs communicating with Storage Service + */ + @Override + public CloudBlob get(final String path) throws IOException + { + final CloudBlobContainer container = getContainer(containerName); + try + { + return container.getBlobReferenceFromServer(path); + } + catch (final StorageException | URISyntaxException e) + { + throw new IOException(e); + } + } + + @Override + public String getHostPort() { + final String host = this.client.getEndpoint().getHost(); + final int port = this.client.getEndpoint().getPort(); + return host + ":" + port; + } + + protected CloudBlobContainer getContainer(final String containerName) throws IOException + { + try + { + final CloudBlobContainer containerReference = client.getContainerReference(containerName); + if (createContainerIfNotExists) + { + if (containerReference.createIfNotExists() && LOG.isDebugEnabled()) + { + LOG.debug("Created container with name [" + containerName + "]"); + } + } + else if (!containerReference.exists()) + { + throw new IOException("Unable to find container with name [" + containerName + "]"); + } + return containerReference; + } + catch (final StorageException | URISyntaxException e) + { + throw new IOException(e); + } + } + + protected CloudBlockBlob getBlockBlob(final String path) throws IOException + { + try + { + final CloudBlobContainer container = getContainer(containerName); + return container.getBlockBlobReference(path); + } + catch (final StorageException | URISyntaxException e) + { + throw new IOException(e); + } + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/session/AzureBlobSessionFactory.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/session/AzureBlobSessionFactory.java new file mode 100644 index 0000000..a9e772e --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/session/AzureBlobSessionFactory.java @@ -0,0 +1,36 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.azure.hotfolder.remote.session; + +import com.microsoft.azure.storage.blob.CloudBlob; + +import org.springframework.integration.file.remote.session.Session; +import org.springframework.integration.file.remote.session.SessionFactory; + +/** + * {@link SessionFactory} implementation to provide a {@link Session} to allow communication with Azure Blob Storage + * + */ +public class AzureBlobSessionFactory implements SessionFactory +{ + private final Session blobSession; + + public AzureBlobSessionFactory(final Session blobSession) + { + this.blobSession = blobSession; + } + + @Override + public Session getSession() + { + return blobSession; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/session/ExtendedSession.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/session/ExtendedSession.java new file mode 100644 index 0000000..be2d4fc --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/src/de/hybris/platform/cloud/azure/hotfolder/remote/session/ExtendedSession.java @@ -0,0 +1,30 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.azure.hotfolder.remote.session; + +import org.springframework.integration.file.remote.session.Session; + +import java.io.IOException; + +/** + * Extended abstraction for a Session with a remote File system. + * + */ +public interface ExtendedSession extends Session +{ + /** + * Get a direct handle on the remote object + * @param path the remote path. + * @return F the remote object + * @throws IOException an IO Exception. + */ + F get(final String path) throws IOException; +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/tenant_junit.properties b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/tenant_junit.properties new file mode 100644 index 0000000..6d39d13 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/tenant_junit.properties @@ -0,0 +1,14 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2017 SAP SE or an SAP affiliate company. All rights reserved. +# +# This software is the confidential and proprietary information of SAP +# ("Confidential Information"). You shall not disclose such Confidential +# Information and shall use it only in accordance with the terms of the +# license agreement you entered into with SAP. +# ----------------------------------------------------------------------- + +azurecloudhotfolder.application-context=azurecloudhotfolder-spring.xml,azurecloudhotfolder/test/azurecloudhotfolder-test-spring.xml + +azure.hotfolder.storage.account.connection-string=UseDevelopmentStorage=true diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/testsrc/de/hybris/platform/cloud/azure/hotfolder/aop/BlobTransferredAspectTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/testsrc/de/hybris/platform/cloud/azure/hotfolder/aop/BlobTransferredAspectTest.java new file mode 100644 index 0000000..7692b25 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/testsrc/de/hybris/platform/cloud/azure/hotfolder/aop/BlobTransferredAspectTest.java @@ -0,0 +1,133 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.azure.hotfolder.aop; + +import com.microsoft.azure.storage.blob.BlobProperties; +import com.microsoft.azure.storage.blob.CloudBlockBlob; +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.azure.hotfolder.remote.session.AzureBlobSession; +import de.hybris.platform.cloud.commons.aop.exception.StepException; +import de.hybris.platform.cloud.commons.services.monitor.*; +import org.aspectj.lang.ProceedingJoinPoint; +import org.hamcrest.Matchers; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.mockito.Answers; +import org.mockito.InOrder; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.test.util.ReflectionTestUtils; + +import java.net.URI; +import java.util.Date; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.hamcrest.Matchers.is; +import static org.mockito.BDDMockito.given; +import static org.mockito.Matchers.eq; +import static org.mockito.Matchers.isA; +import static org.mockito.Mockito.*; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class BlobTransferredAspectTest +{ + private static final String PATH = "/container/folder"; + private static final long MODIFIED = new Date().getTime(); + private static final long SIZE = 200L; + private static final String FILE_NAME = "fileName.csv"; + + private final BlobTransferredAspect aspect = new BlobTransferredAspect(); + + @Mock + private MonitorService monitorService; + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private ProceedingJoinPoint pjp; + + @Mock + private AzureBlobSession session; + + private final Object result = new Object(); + + @Mock + private MonitorHistory monitorHistory; + + + @Before + public void setUp() throws Throwable + { + aspect.setMonitorService(monitorService); + + given(pjp.getTarget()).willReturn(session); + given(pjp.proceed()).willReturn(result); + + // BlobProperties is final, and cannot be mocked. The setters are protected, + // so the only easy way to set the properties we need is via reflection. + final BlobProperties entryProperties = new BlobProperties(); + ReflectionTestUtils.setField(entryProperties, "lastModified", new Date(MODIFIED)); + ReflectionTestUtils.setField(entryProperties, "length", SIZE); + + // Most methods on CloudBlob are final, and cannot be mocked. The setters are protected, + // so the only easy way to set the properties we need is via reflection. + final CloudBlockBlob entry = new CloudBlockBlob(new URI("http", "myserver",PATH + "/" + FILE_NAME, null)); + ReflectionTestUtils.setField(entry, "properties", entryProperties); + ReflectionTestUtils.setField(entry, "name", PATH + "/" + FILE_NAME); + + when(session.get(PATH)).thenReturn(entry); + + given(monitorService.begin(SystemArea.HOT_FOLDER, FILE_NAME + MODIFIED)).willReturn(monitorHistory); + given(monitorService.current()).willReturn(Optional.of(monitorHistory)); + } + + @Test + public void shouldReturnResultFromExecutedMethod() throws Throwable + { + assertThat(aspect.aroundRead(pjp, PATH)).isEqualTo(result); + } + + @Test + public void givenMethodWasSuccessful_thenShouldLogSuccessfulStep_andIssueCheckpoint() throws Throwable + { + aspect.aroundRead(pjp, PATH); + + final InOrder order = inOrder(monitorHistory); + order.verify(monitorHistory).stepSucceeded(eq(Step.DOWNLOADED), isA(Date.class), isA(Date.class), + eq("Successfully read blob [{}] of size [{}]"), eq(PATH), eq(SIZE + " bytes")); + order.verify(monitorHistory).checkpoint(); + verifyNoMoreInteractions(monitorHistory); + } + + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + @Test + public void givenMethodFailed_thenShouldLogFailedStep_andIssueEndMonitor() throws Throwable + { + final RuntimeException runtimeException = new RuntimeException(); + given(pjp.proceed()).willThrow(runtimeException); + + expectedException.expect(Matchers.isA(StepException.class)); + expectedException.expectCause(is(runtimeException)); + + aspect.aroundRead(pjp, PATH); + + final InOrder order = inOrder(monitorHistory); + order.verify(monitorHistory).stepFailed(eq(Step.DOWNLOADED), isA(Date.class), isA(Date.class), + eq(runtimeException), eq("Failed to read read blob [{}]"), eq(PATH)); + order.verify(monitorHistory).end(Status.FAILURE); + verifyNoMoreInteractions(monitorHistory); + } +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/testsrc/de/hybris/platform/cloud/azure/hotfolder/remote/session/TestBlobSession.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/testsrc/de/hybris/platform/cloud/azure/hotfolder/remote/session/TestBlobSession.java new file mode 100644 index 0000000..1372532 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/testsrc/de/hybris/platform/cloud/azure/hotfolder/remote/session/TestBlobSession.java @@ -0,0 +1,218 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.azure.hotfolder.remote.session; + +import com.microsoft.azure.storage.StorageException; +import com.microsoft.azure.storage.blob.BlobProperties; +import com.microsoft.azure.storage.blob.CloudBlob; +import com.microsoft.azure.storage.blob.CloudBlobClient; +import com.microsoft.azure.storage.blob.CloudBlockBlob; +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.springframework.test.util.ReflectionTestUtils; +import org.springframework.util.Assert; + +import java.io.*; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.*; + +import static org.slf4j.LoggerFactory.getLogger; + +public class TestBlobSession implements ExtendedSession +{ + private static final Logger LOG = getLogger(TestBlobSession.class); + + private final CloudBlobClient client; + private final String remoteDirectory; + private final Map files = new HashMap<>(); + private final List filesRead = new LinkedList<>(); + + public TestBlobSession(final CloudBlobClient client, final String remoteDirectory) + { + Assert.notNull(client, "client must not be null"); + Assert.notNull(remoteDirectory, "remoteDirectory must not be null"); + this.client = client; + this.remoteDirectory = remoteDirectory; + clean(); + } + + // + + public void setFiles(final List files) + { + for (final File file : files) + { + this.files.put(remoteDirectory + File.separator + file.getName(), file); + } + LOG.debug("Setting session to return files {}", this.files); + } + + public boolean fileRead(final String path) + { + LOG.debug("Checking if path [{}] was logged as read in {}", path, this.filesRead); + return this.filesRead.stream().anyMatch(read -> read.endsWith(path)); + } + + public void clean() + { + this.files.clear(); + this.filesRead.clear(); + } + + // + + // + + @Override + public CloudBlob[] list(final String path) + { + LOG.debug("Polling for [{}]", path); + return files.values().stream() + .map(this::createBlockBlob) + .toArray(CloudBlob[]::new); + } + + @Override + public void read(final String path, final OutputStream out) throws IOException + { + LOG.debug("Reading [{}]", path); + final File file = files.get(path); + if (file == null) + { + throw new FileNotFoundException("File not found: " + path); + } + FileUtils.copyFile(file, out); + this.filesRead.add(path); + } + + @Override + public CloudBlob get(final String path) throws IOException + { + LOG.debug("Get [{}]", path); + final File file = files.get(path); + if (file == null) + { + throw new FileNotFoundException("File not found: " + path); + } + return createBlockBlob(file); + } + + + public CloudBlob createBlockBlob(final File file) + { + try + { + final BlobProperties entryProperties = new BlobProperties(); + ReflectionTestUtils.setField(entryProperties, "lastModified", new Date(file.lastModified())); + ReflectionTestUtils.setField(entryProperties, "length", 200); + + final String path = file.getPath(); + final CloudBlockBlob cloudBlockBlob = new CloudBlockBlob(new URI("http", "myserver", path, null)); + ReflectionTestUtils.setField(cloudBlockBlob, "properties", entryProperties); + + return cloudBlockBlob; + } + catch (final URISyntaxException | StorageException ex) + { + return null; + } + } + + @Override + public boolean remove(final String path) + { + LOG.debug("Removing [{}]", path); + return true; + } + + @Override + public Object getClientInstance() + { + return client; + } + + // + + // + @Override + public void write(final InputStream inputStream, final String destination) + { + + } + + @Override + public void append(final InputStream inputStream, final String destination) + { + + } + + @Override + public boolean mkdir(final String directory) + { + return false; + } + + @Override + public boolean rmdir(final String directory) + { + return false; + } + + @Override + public void rename(final String pathFrom, final String pathTo) + { + + } + + @Override + public void close() + { + + } + + @Override + public boolean isOpen() + { + return false; + } + + @Override + public boolean exists(final String path) + { + return false; + } + + @Override + public String[] listNames(final String path) + { + return new String[0]; + } + + @Override + public InputStream readRaw(final String source) + { + return null; + } + + @Override + public boolean finalizeRaw() + { + return false; + } + + @Override + public String getHostPort() { + return "localhost:8080"; + } + + // +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/testsrc/de/hybris/platform/cloud/azure/hotfolder/remote/synchronizer/AzureBlobSynchronizingMessageSourceIntegrationTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/testsrc/de/hybris/platform/cloud/azure/hotfolder/remote/synchronizer/AzureBlobSynchronizingMessageSourceIntegrationTest.java new file mode 100644 index 0000000..7f93ffc --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/azurecloudhotfolder/testsrc/de/hybris/platform/cloud/azure/hotfolder/remote/synchronizer/AzureBlobSynchronizingMessageSourceIntegrationTest.java @@ -0,0 +1,156 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.azure.hotfolder.remote.synchronizer; + +import de.hybris.bootstrap.annotations.IntegrationTest; +import de.hybris.platform.cloud.azure.hotfolder.remote.session.TestBlobSession; +import de.hybris.platform.cloud.commons.services.monitor.*; +import de.hybris.platform.cloud.commons.spring.util.NeedsRunningSpringServices; +import de.hybris.platform.servicelayer.ExtendedServicelayerBaseTest; +import de.hybris.platform.servicelayer.config.ConfigurationService; +import de.hybris.platform.servicelayer.model.ModelService; +import de.hybris.platform.servicelayer.user.UserService; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.slf4j.Logger; + +import javax.annotation.Resource; + +import java.io.File; +import java.net.URL; +import java.util.*; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.slf4j.LoggerFactory.getLogger; + +@IntegrationTest +@NeedsRunningSpringServices(roles = {"integration", "yHotfolderServices"}) +public class AzureBlobSynchronizingMessageSourceIntegrationTest extends ExtendedServicelayerBaseTest +{ + private static final Logger LOG = getLogger(AzureBlobSynchronizingMessageSourceIntegrationTest.class); + + private static final String POLL_FREQ_KEY = "azure.hotfolder.storage.polling.fixed.rate"; + private static final String FILE_ROOT_DIR = "azurecloudhotfolder/test/"; + + @Resource + private TestBlobSession testBlobSession; + + @Resource + private ConfigurationService configurationService; + + @Resource + private UserService userService; + + @Resource + private ModelService modelService; + + @Resource(name = "integrationTestMonitorAssertionHelper") + private IntegrationTestMonitorAssertionHelper monitorAssertionHelper; + + private int pollingFrequency; + + private final String expectedUid = "azure.integrationtest@domain.com"; + + @Before + public void setUp() throws Exception + { + pollingFrequency = configurationService.getConfiguration().getInt(POLL_FREQ_KEY, 1000); + removeTestUser(expectedUid); + createCoreData(); + } + + @After + public void teardown() + { + removeTestUser(expectedUid); + } + + private File setSessionToReturnFile(final String path) + { + final ClassLoader classLoader = this.getClass().getClassLoader(); + final File file = Optional.of(path) + .map(classLoader::getResource) + .map(URL::getFile) + .map(File::new) + .filter(File::exists) + .orElseThrow(() -> new RuntimeException("File not found: " + path)); + + testBlobSession.setFiles(Collections.singletonList(file)); + return file; + } + + @Test + public void shouldDownloadRemoteFilesAndImportCustomerCsvSuccessfully() throws InterruptedException + { + assertThat(checkUserExists(expectedUid)).isFalse(); + + final String testFile = "customer-00.csv"; + File file = setSessionToReturnFile(FILE_ROOT_DIR + testFile); + file.setLastModified((new Date().getTime())); + final String monitorKey = file.getName() + file.lastModified(); + + Thread.sleep(pollingFrequency); + int current = 0, maxAttempts = 5; + boolean read = false; + while (!read && current < maxAttempts) + { + current++; + read = testBlobSession.fileRead(testFile); + if (!read) + { + LOG.info("file [{}] wasn't read yet, will wait [{}]ms for poller", testFile, pollingFrequency); + Thread.sleep(pollingFrequency); + } + } + + assertThat(read).as(String.format("File [%s] was not read", testFile)).isTrue(); + + if (!checkUserExists(expectedUid)) + { + LOG.info("user [{}] doesn't exists yet maybe processing was incomplete, will wait [{}]ms for poller", expectedUid, pollingFrequency); + Thread.sleep(pollingFrequency); + assertThat(checkUserExists(expectedUid)).isTrue(); + } + + ensureHistoryIsPresent(monitorKey); + } + + private boolean checkUserExists(final String uid) + { + return userService.isUserExisting(uid); + } + + private void removeTestUser(final String uid) + { + testBlobSession.clean(); + if (checkUserExists(expectedUid)) + { + modelService.remove(userService.getUserForUID(uid)); + } + } + + private void ensureHistoryIsPresent(final String key) + { + final List steps = new LinkedList<>(); + steps.add(monitorAssertionHelper.createStep(Status.SUCCESS, Step.DOWNLOADED)); + steps.add(monitorAssertionHelper.createStep(Status.SUCCESS, Step.HEADER_SETUP)); + steps.add(monitorAssertionHelper.createStep(Status.SUCCESS, Step.HEADER_INIT)); + steps.add(monitorAssertionHelper.createStep(Status.SUCCESS, Step.HEADER_TRANSFORMED, monitorAssertionHelper.createAction(Status.SUCCESS))); + steps.add(monitorAssertionHelper.createStep(Status.SUCCESS, Step.HEADER_EXECUTED, monitorAssertionHelper.createAction(Status.SUCCESS))); + steps.add(monitorAssertionHelper.createStep(Status.SUCCESS, Step.HEADER_CLEANUP)); + + final MonitorHistoryData expectedHistory = monitorAssertionHelper.createHistory(key, SystemArea.HOT_FOLDER, Status.SUCCESS, steps); + monitorAssertionHelper.assertHistoryIsPresent(expectedHistory); + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/.classpath b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/.classpath new file mode 100644 index 0000000..9b0b26e --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/.classpath @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/buildcallbacks.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/buildcallbacks.xml new file mode 100644 index 0000000..e59dcc6 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/buildcallbacks.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/extensioninfo.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/extensioninfo.xml new file mode 100644 index 0000000..6e53003 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/extensioninfo.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/external-dependencies.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/external-dependencies.xml new file mode 100644 index 0000000..3fb623d --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/external-dependencies.xml @@ -0,0 +1,21 @@ + + + + 4.0.0 + de.hybris.platform + cloudcommons + 6.6.0.0-RC24 + + jar + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/project.properties b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/project.properties new file mode 100644 index 0000000..bba12ab --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/project.properties @@ -0,0 +1,29 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2017 SAP SE or an SAP affiliate company. All rights reserved. +# +# This software is the confidential and proprietary information of SAP +# ("Confidential Information"). You shall not disclose such Confidential +# Information and shall use it only in accordance with the terms of the +# license agreement you entered into with SAP. +# ----------------------------------------------------------------------- +# you can put key/value pairs here. +# Use Config.getParameter(..) to retrieve the values during runtime. + +# cloudcommons.key=value + +# Specifies the location of the spring context file putted automatically to the global platform application context. +cloudcommons.application-context=cloudcommons-spring.xml + +cloudcommons.locking.dblock.ttl=900000 +cloudcommons.locking.dblock.region=yCloudCommons + +cloud.commons.monitoring.metric.counter.enabled=true +cloud.commons.monitoring.metric.histogram.enabled=true +cloud.commons.monitoring.metric.timer.enabled=true +cloud.commons.monitoring.logging.enabled=true +cloud.commons.monitoring.database.enabled=true + +cloud.commons.monitoring.job.cleanup.successful.threshold=7 +cloud.commons.monitoring.job.cleanup.unsuccessful.threshold=21 diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/bean-builder-template.vm b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/bean-builder-template.vm new file mode 100644 index 0000000..09d9afd --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/bean-builder-template.vm @@ -0,0 +1,97 @@ +/* +* ---------------------------------------------------------------- +* --- WARNING: THIS FILE IS GENERATED AND WILL BE OVERWRITTEN! +* --- Generated at $currentDateTime +* ---------------------------------------------------------------- +*/ +package $packageName; + +#foreach($i in $imports) +import $i; +#end +#if ( ! $imports.isEmpty() ) + +#end +#if ( $hasDescription || $hasDeprecated ) +/** +#end +#if ( $hasDescription) +* $description +#end +#if ( $hasDescription && $hasDeprecated ) +* +#end +#if ( $hasDeprecated ) +* @deprecated $deprecated +#end +#if ( $hasDescription || $hasDeprecated ) +*/ +#end +#if ( $hasDeprecated ) +@Deprecated +#end +public class $shortClassName #if($superclassName)extends $superclassName #else implements java.io.Serializable #end + +{ +#foreach($v in $memberVariables) + $v.comment + private $v.type $v.name; +#end + + private ${constructorName}(final Builder builder) + { +#foreach($v in $memberVariables) + this.$v.name = builder.$v.name; +#end + } + +#foreach($v in $memberVariables) +#if ($v.overridden) @Override #end +#if ($v.type == 'boolean') + public $v.type is${StringUtils.capitalize($v.name)}() + { + return $v.name; + } +#else + public $v.type get${StringUtils.capitalize($v.name)}() + { + return $v.name; + } +#end +#if (${StringUtils.startsWith($v.type, 'List')}) + + public void addTo${StringUtils.capitalize($v.name)}(final ${StringUtils.substringBefore(${StringUtils.substringAfter($v.type, "<")}, ">")} value) + { + ${v.name}.add(value); + } +#end + +#end + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + +#foreach($v in $memberVariables) + private $v.type $v.name; +#end + + private Builder() + { + // deliberately empty + } + +#foreach($v in $memberVariables) + public Builder with${StringUtils.capitalize($v.name)}(final ${v.type} ${v.name}) + { + this.${v.name} = ${v.name}; + return this; + } + +#end + public $shortClassName build() { + return new $shortClassName(this); + } + } +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/cloudcommons-backoffice-config.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/cloudcommons-backoffice-config.xml new file mode 100644 index 0000000..fb98379 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/cloudcommons-backoffice-config.xml @@ -0,0 +1,256 @@ + + + + + + + + + + + + + + + + systemArea + " " + status + " " + key + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + listConfigContext + referenceListView + + + + + rows + 10 + + + + + + + + + + step + " " + status + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + rows + 5 + + + + + listConfigContext + referenceListView + + + + + + + + + + code + " " + status + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + rows + 5 + + + + + + + + + + + region + " " + lockKey + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + region + " " + key + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/cloudcommons-beans.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/cloudcommons-beans.xml new file mode 100644 index 0000000..599b266 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/cloudcommons-beans.xml @@ -0,0 +1,72 @@ + + + + + + + + IN_PROGRESS + SUCCESS + FAILURE + WARNING + + + + INTEGRATION + + + + PROCESS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/cloudcommons-items.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/cloudcommons-items.xml new file mode 100644 index 0000000..dbf7d77 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/cloudcommons-items.xml @@ -0,0 +1,227 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Lock for controlling access to an application resource + + + + The scope of the lock + + + + + The key of the lock + + + + + The cluster node that holds the lock + + + + + The last-used timestamp for the lock + + + + + + + + + + + + + + Metadata recording which files have already been received by the system + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CLOB + + + HYBRIS.LONG_STRING + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CLOB + + + HYBRIS.LONG_STRING + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CLOB + + + HYBRIS.LONG_STRING + + + + + + + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/cloudcommons-spring.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/cloudcommons-spring.xml new file mode 100644 index 0000000..39aba32 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/cloudcommons-spring.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/cloudcommons/cloudcommons-monitoring.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/cloudcommons/cloudcommons-monitoring.xml new file mode 100644 index 0000000..9219b4b --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/cloudcommons/cloudcommons-monitoring.xml @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IN_PROGRESS + SUCCESS + + + + + WARNING + + + + + FAILURE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/cloudcommons/test/cloudcommons-test-spring.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/cloudcommons/test/cloudcommons-test-spring.xml new file mode 100644 index 0000000..ca2450a --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/cloudcommons/test/cloudcommons-test-spring.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/impex/projectdata_jobs.impex b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/impex/projectdata_jobs.impex new file mode 100644 index 0000000..f337d8d --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/impex/projectdata_jobs.impex @@ -0,0 +1,24 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. +# +# This software is the confidential and proprietary information of SAP +# ("Confidential Information"). You shall not disclose such Confidential +# Information and shall use it only in accordance with the terms of the +# license agreement you entered into with SAP. +# ----------------------------------------------------------------------- +INSERT_UPDATE MaintenanceCleanupJob; code[unique = true] ; springId ; sessionLanguage(isocode) + ; cleanUpMonitorHistorySuccessfulJob ; cleanUpMonitorHistorySuccessfulJob ; en + ; cleanUpMonitorHistoryUnsuccessfulJob ; cleanUpMonitorHistoryUnsuccessfulJob ; en + +# Create a cron job for cleaning up deleted files +INSERT_UPDATE CronJob; code[unique = true] ; job(code) ; sessionLanguage(isocode) + ; cleanUpMonitorHistorySuccessfulCronJob ; cleanUpMonitorHistorySuccessfulJob ; en + ; cleanUpMonitorHistoryUnsuccessfulCronJob ; cleanUpMonitorHistoryUnsuccessfulJob ; en + + +# Trigger the given cronjobs every hour +INSERT_UPDATE Trigger; cronJob(code)[unique = true] ; cronExpression + ; cleanUpMonitorHistorySuccessfulCronJob ; 0 0 * * * ? + ; cleanUpMonitorHistoryUnsuccessfulCronJob ; 0 0 * * * ? \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/localization/backoffice/cloudcommons-labels.properties b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/localization/backoffice/cloudcommons-labels.properties new file mode 100644 index 0000000..b2f35a7 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/localization/backoffice/cloudcommons-labels.properties @@ -0,0 +1,16 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2017 SAP SE or an SAP affiliate company. All rights reserved. +# +# This software is the confidential and proprietary information of SAP +# ("Confidential Information"). You shall not disclose such Confidential +# Information and shall use it only in accordance with the terms of the +# license agreement you entered into with SAP. +# ----------------------------------------------------------------------- + +hmc.cloudcommons=Cloudcommons + +type_tree_monitorhistorydata=Monitoring History +type_tree_applicationresourcelock=Application Resource Lock +type_tree_metadatastoreentry=Metadata Store Entry diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/localization/backoffice/cloudcommons-labels_de.properties b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/localization/backoffice/cloudcommons-labels_de.properties new file mode 100644 index 0000000..e69de29 diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/localization/cloudcommons-locales_de.properties b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/localization/cloudcommons-locales_de.properties new file mode 100644 index 0000000..44cf733 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/localization/cloudcommons-locales_de.properties @@ -0,0 +1,28 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2017 SAP SE or an SAP affiliate company. All rights reserved. +# +# This software is the confidential and proprietary information of SAP +# ("Confidential Information"). You shall not disclose such Confidential +# Information and shall use it only in accordance with the terms of the +# license agreement you entered into with SAP. +# ----------------------------------------------------------------------- + +# put localizations of item types into this file +# Note that you can also add special locatizations which +# can be retrieved with the +# +# ...tools.localization.Localization.getLocalizedString(...) +# +# methods. +# +# syntax for type localizations: +# +# type..name=XY +# type...name=XY +# type..description=XY +# type...description=XY +# +# yourcustomlocalekey=value + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/localization/cloudcommons-locales_en.properties b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/localization/cloudcommons-locales_en.properties new file mode 100644 index 0000000..602dfa7 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/localization/cloudcommons-locales_en.properties @@ -0,0 +1,96 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2017 SAP SE or an SAP affiliate company. All rights reserved. +# +# This software is the confidential and proprietary information of SAP +# ("Confidential Information"). You shall not disclose such Confidential +# Information and shall use it only in accordance with the terms of the +# license agreement you entered into with SAP. +# ----------------------------------------------------------------------- + +type.ApplicationResourceLock.name = Application Resource Lock +type.ApplicationResourceLock.description = +type.ApplicationResourceLock.region.name = Lock Region +type.ApplicationResourceLock.region.description = +type.ApplicationResourceLock.lockKey.name = Lock Key +type.ApplicationResourceLock.lockKey.description = +type.ApplicationResourceLock.clusterId.name = Owner Cluster Id +type.ApplicationResourceLock.clusterId.description = +type.ApplicationResourceLock.timestamp.name = Timestamp +type.ApplicationResourceLock.timestamp.description = + +type.MonitorStatus.name=Monitor Status +type.MonitorStatus.description= +type.MonitorStatus.IN_PROGRESS.name=In Progress +type.MonitorStatus.SUCCESS.name=Success +type.MonitorStatus.FAILURE.name=Failure +type.MonitorStatus.WARNING.name=Warning + +type.MonitorSystemArea.name=Monitor System Area +type.MonitorSystemArea.description= +type.MonitorSystemArea.INTEGRATION.name=Integration + +type.MonitorStep.name=Monitor Step +type.MonitorStep.description= +type.MonitorStep.PROCESS.name=Process + +type.MonitorHistoryData.name = Monitoring History Data +type.MonitorHistoryData.description = +type.MonitorHistoryData.key.name = Key +type.MonitorHistoryData.key.description = +type.MonitorHistoryData.systemArea.name = System Area +type.MonitorHistoryData.systemArea.description = +type.MonitorHistoryData.status.name = Status +type.MonitorHistoryData.status.description = +type.MonitorHistoryData.exceptionMessage.name = Exception Message +type.MonitorHistoryData.exceptionMessage.description = +type.MonitorHistoryData.entries.name = Entries +type.MonitorHistoryData.entries.description = Monitored actions that took place within running process + +type.MonitorHistoryEntryData.name = Monitoring History Entry Data +type.MonitorHistoryEntryData.description = +type.MonitorHistoryEntryData.step.name = Step +type.MonitorHistoryEntryData.step.description = +type.MonitorHistoryEntryData.status.name = Status +type.MonitorHistoryEntryData.status.description = +type.MonitorHistoryEntryData.started.name = Started +type.MonitorHistoryEntryData.started.description = +type.MonitorHistoryEntryData.ended.name = Ended +type.MonitorHistoryEntryData.ended.description = +type.MonitorHistoryEntryData.duration.name = Duration +type.MonitorHistoryEntryData.duration.description = +type.MonitorHistoryEntryData.nodeId.name = Node ID +type.MonitorHistoryEntryData.nodeId.description = +type.MonitorHistoryEntryData.message.name = Message +type.MonitorHistoryEntryData.message.description = +type.MonitorHistoryEntryData.actions.name = Actions +type.MonitorHistoryEntryData.actions.description = +type.MonitorHistoryEntryData.monitorHistoryData.name = Parent History +type.MonitorHistoryEntryData.monitorHistoryData.description = + +type.MonitorHistoryEntryActionData.name = Monitoring History Entry Action Data +type.MonitorHistoryEntryActionData.description = +type.MonitorHistoryEntryActionData.code.name = Code +type.MonitorHistoryEntryActionData.code.description = +type.MonitorHistoryEntryActionData.status.name = Status +type.MonitorHistoryEntryActionData.status.description = +type.MonitorHistoryEntryActionData.started.name = Started +type.MonitorHistoryEntryActionData.started.description = +type.MonitorHistoryEntryActionData.ended.name = Ended +type.MonitorHistoryEntryActionData.ended.description = +type.MonitorHistoryEntryActionData.duration.name = Duration +type.MonitorHistoryEntryActionData.duration.description = +type.MonitorHistoryEntryActionData.message.name = Message +type.MonitorHistoryEntryActionData.message.description = +type.MonitorHistoryEntryActionData.monitorHistoryEntryData.name = Parent Entry +type.MonitorHistoryEntryActionData.monitorHistoryEntryData.description = + +type.MetadataStoreEntry.name = Metadata Store Entry +type.MetadataStoreEntry.description = +type.MetadataStoreEntry.key.name=Key +type.MetadataStoreEntry.key.description= +type.MetadataStoreEntry.value.name=Value +type.MetadataStoreEntry.value.description= +type.MetadataStoreEntry.region.name=Region +type.MetadataStoreEntry.region.description= diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/localization/cloudcommons-locales_fr.properties b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/localization/cloudcommons-locales_fr.properties new file mode 100644 index 0000000..44cf733 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/resources/localization/cloudcommons-locales_fr.properties @@ -0,0 +1,28 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2017 SAP SE or an SAP affiliate company. All rights reserved. +# +# This software is the confidential and proprietary information of SAP +# ("Confidential Information"). You shall not disclose such Confidential +# Information and shall use it only in accordance with the terms of the +# license agreement you entered into with SAP. +# ----------------------------------------------------------------------- + +# put localizations of item types into this file +# Note that you can also add special locatizations which +# can be retrieved with the +# +# ...tools.localization.Localization.getLocalizedString(...) +# +# methods. +# +# syntax for type localizations: +# +# type..name=XY +# type...name=XY +# type..description=XY +# type...description=XY +# +# yourcustomlocalekey=value + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/aop/exception/ActionException.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/aop/exception/ActionException.java new file mode 100644 index 0000000..83b26d6 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/aop/exception/ActionException.java @@ -0,0 +1,25 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.aop.exception; + +import de.hybris.platform.cloud.commons.services.monitor.Step; + +/** + * Exception thrown when an exception is caught during aspect monitoring of an action performed + * as part of a {@link Step} of the cloud hot folder pipeline. + */ +public class ActionException extends Exception +{ + public ActionException(final String action, final Step step, final Exception cause) + { + super(String.format("Action(s): [%s] FAILED as part of Step [%s]", action, step), cause); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/aop/exception/StepException.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/aop/exception/StepException.java new file mode 100644 index 0000000..ceadf1b --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/aop/exception/StepException.java @@ -0,0 +1,24 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.aop.exception; + +import de.hybris.platform.cloud.commons.services.monitor.Step; + +/** + * Exception thrown when an exception is caught during aspect monitoring of a {@link Step} of the cloud hot folder pipeline. + */ +public class StepException extends Exception +{ + public StepException(final Step step, final Exception cause) + { + super(String.format("Step: [%s] FAILED", step), cause); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/constants/CloudCommonsConstants.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/constants/CloudCommonsConstants.java new file mode 100644 index 0000000..58b3a76 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/constants/CloudCommonsConstants.java @@ -0,0 +1,30 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.constants; + +/** + * Global class for all CloudCommons constants. You can add global constants for your extension into this class. + */ +public final class CloudCommonsConstants extends GeneratedCloudCommonsConstants +{ + public static final String EXTENSIONNAME = "cloudcommons"; + + private CloudCommonsConstants() + { + //empty to avoid instantiating this constant class + } + + public static final String MONITORING_METRIC_COUNTER_ENABLED = "cloud.commons.monitoring.metric.counter.enabled"; + public static final String MONITORING_METRIC_HISTOGRAM_ENABLED = "cloud.commons.monitoring.metric.histogram.enabled"; + public static final String MONITORING_METRIC_TIMER_ENABLED = "cloud.commons.monitoring.metric.timer.enabled"; + public static final String MONITORING_LOGGING_ENABLED = "cloud.commons.monitoring.logging.enabled"; + public static final String MONITORING_DB_ENABLED = "cloud.commons.monitoring.database.enabled"; +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/core/StopStartListener.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/core/StopStartListener.java new file mode 100644 index 0000000..517b7ab --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/core/StopStartListener.java @@ -0,0 +1,25 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.core; + +import de.hybris.platform.cloud.commons.suspend.SuspendResumeListener; +import de.hybris.platform.core.TenantListener; + +/** + * An extension of {@link TenantListener} and {@link SuspendResumeListener} that allows direct start/stop calls + * + */ +public interface StopStartListener extends TenantListener, SuspendResumeListener +{ + void start(); + + void stop(); +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/core/impl/HybrisGroupRoleController.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/core/impl/HybrisGroupRoleController.java new file mode 100644 index 0000000..d47c172 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/core/impl/HybrisGroupRoleController.java @@ -0,0 +1,212 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.core.impl; + +import com.google.common.collect.Lists; +import de.hybris.platform.cloud.commons.core.StopStartListener; +import de.hybris.platform.cloud.commons.suspend.CloudSuspendResumeRegistry; +import de.hybris.platform.cloud.commons.suspend.SuspendResumeListener; +import de.hybris.platform.core.Initialization; +import de.hybris.platform.core.Registry; +import de.hybris.platform.core.Tenant; +import de.hybris.platform.core.TenantListener; +import de.hybris.platform.core.suspend.ResumeOptions; +import de.hybris.platform.core.suspend.SuspendOptions; +import de.hybris.platform.core.suspend.SuspendResult; +import de.hybris.platform.util.Utilities; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.integration.support.SmartLifecycleRoleController; +import org.springframework.util.Assert; + +import java.util.List; + +/** + * A {@link TenantListener}, {@link SuspendResumeListener} and {@link StopStartListener} that calls start/stop on a spring + * integration {@link SmartLifecycleRoleController}, ensuring that hybris is ready to process spring integration messages. + * + */ +public class HybrisGroupRoleController implements StopStartListener, InitializingBean +{ + public static final String BEAN_ID = "hybrisGroupRoleController"; + + private static final Logger LOG = LoggerFactory.getLogger(HybrisGroupRoleController.class); + + private final SmartLifecycleRoleController controller; + + private Tenant tenant; + + public HybrisGroupRoleController(final SmartLifecycleRoleController controller) + { + Assert.notNull(controller, "Controller must not be null."); + this.controller = controller; + } + + @Override + public void afterPropertiesSet() + { + Registry.registerTenantListener(this); + CloudSuspendResumeRegistry.registerSuspendResumeListener(this); + this.tenant = Registry.getCurrentTenant(); + } + + @Override + public void beforeSuspend(final SuspendOptions suspendOptions) + { + if (this.tenant != null) + { + stopAutoStartRoles(); + } + } + + @Override + public void afterSuspend(final SuspendOptions suspendOptions, final SuspendResult suspendResult) + { + // Do Nothing. + } + + @Override + public void beforeResume(final ResumeOptions resumeOptions) + { + // Do Nothing + } + + @Override + public void afterResume(final ResumeOptions resumeOptions) + { + if (this.tenant != null && isTenantInitialized(this.tenant) && !isTenantInitializing(this.tenant)) + { + startAutoStartRoles(); + } + + } + + @Override + public void beforeTenantShutDown(final Tenant tenant) + { + if (this.tenant == tenant) + { + stopAutoStartRoles(); + } + } + + @Override + public void afterTenantStartUp(final Tenant tenant) + { + if (this.tenant == tenant && isTenantInitialized(tenant) && !isTenantInitializing(tenant)) + { + startAutoStartRoles(); + } + } + + @Override + public void afterSetActivateSession(final Tenant tenant) + { + // Do Nothing + } + + @Override + public void beforeUnsetActivateSession(final Tenant tenant) + { + // Do Nothing + } + + @Override + public void start() + { + startAutoStartRoles(); + } + + @Override + public void stop() + { + stopAutoStartRoles(); + } + + protected void startAutoStartRoles() + { + LOG.debug("Starting auto start roles for tenant [{}].", tenant.getTenantID()); + for (final String group : getClusterGroups()) + { + try + { + controller.startLifecyclesInRole(group); + } + catch (final RuntimeException ex) + { + LOG.error("Error whilst starting services in role [{}] for tenant [{}].", + group, tenant.getTenantID(), ex); + } + } + } + + protected void stopAutoStartRoles() + { + LOG.debug("Stopping auto start roles for tenant [{}].", tenant.getTenantID()); + for (final String group : Lists.reverse(getClusterGroups())) + { + try + { + controller.stopLifecyclesInRole(group); + } + catch (final RuntimeException ex) + { + LOG.error("Error whilst stopping services in role [{}] for tenant [{}].", + group, tenant.getTenantID(), ex); + } + } + } + + protected List getClusterGroups() + { + return Lists.newArrayList(Registry.getClusterGroups()); + } + + @SuppressWarnings("BooleanMethodIsAlwaysInverted") + protected boolean isTenantInitializing(final Tenant tenant) + { + + Tenant prev = null; + if(Registry.hasCurrentTenant()) + { + prev = Registry.getCurrentTenant(); + } + + try + { + //Initialization.isTenantInitializing requires a current tenant... + Registry.setCurrentTenant(tenant); + final boolean tenantInitializing = Initialization.isTenantInitializing(tenant); + LOG.debug("Tenant [{}] is initializing: {}", tenant.getTenantID(), tenantInitializing); + return tenantInitializing; + } + finally + { + if(prev == null) + { + Registry.unsetCurrentTenant(); + } + else + { + Registry.setCurrentTenant(prev); + } + } + } + + protected boolean isTenantInitialized(final Tenant tenant) + { + final boolean isTenantInitialized = Utilities.isSystemInitialized(tenant.getDataSource()); + LOG.debug("Tenant [{}] is initialized: {}", tenant.getTenantID(), isTenantInitialized); + return isTenantInitialized; + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/jalo/ApplicationResourceLock.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/jalo/ApplicationResourceLock.java new file mode 100644 index 0000000..cf1e9a4 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/jalo/ApplicationResourceLock.java @@ -0,0 +1,35 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.jalo; + +import de.hybris.platform.jalo.Item; +import de.hybris.platform.jalo.JaloBusinessException; +import de.hybris.platform.jalo.SessionContext; +import de.hybris.platform.jalo.type.ComposedType; +import org.apache.log4j.Logger; + +public class ApplicationResourceLock extends GeneratedApplicationResourceLock +{ + @SuppressWarnings("unused") + private static final Logger LOG = Logger.getLogger( ApplicationResourceLock.class.getName() ); + + @Override + protected Item createItem(final SessionContext ctx, final ComposedType type, final ItemAttributeMap allAttributes) throws JaloBusinessException + { + // business code placed here will be executed before the item is created + // then create the item + final Item item = super.createItem( ctx, type, allAttributes ); + // business code placed here will be executed after the item was created + // and return the item + return item; + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/jalo/CloudCommonsManager.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/jalo/CloudCommonsManager.java new file mode 100644 index 0000000..9994514 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/jalo/CloudCommonsManager.java @@ -0,0 +1,75 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.jalo; + +import de.hybris.platform.cloud.commons.constants.CloudCommonsConstants; +import de.hybris.platform.cloud.commons.core.StopStartListener; +import de.hybris.platform.cloud.commons.core.impl.HybrisGroupRoleController; +import de.hybris.platform.core.Registry; +import de.hybris.platform.util.JspContext; + +import java.util.Map; +import java.util.Optional; +import java.util.function.Consumer; + +import org.slf4j.Logger; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; + +import static org.slf4j.LoggerFactory.getLogger; + + +/** + * This is the extension manager of the CloudCommons extension. + */ +public class CloudCommonsManager extends GeneratedCloudCommonsManager +{ + private static final Logger LOG = getLogger(CloudCommonsManager.class); + + /** + * Get the valid instance of this manager. + * @return the current instance of this manager + */ + public static CloudCommonsManager getInstance() + { + return (CloudCommonsManager) Registry.getCurrentTenant().getJaloConnection().getExtensionManager() + .getExtension(CloudCommonsConstants.EXTENSIONNAME); + } + + @Override + public void notifyInitializationStart(@SuppressWarnings("unused") final Map params, + @SuppressWarnings("unused") final JspContext ctx) throws Exception // NOPMD + { + notifyTenantListener(HybrisGroupRoleController.BEAN_ID, StopStartListener::stop); + } + + @Override + public void notifyInitializationEnd(@SuppressWarnings("unused") final Map params, + @SuppressWarnings("unused") final JspContext ctx) throws Exception //NOPMD + { + notifyTenantListener(HybrisGroupRoleController.BEAN_ID, StopStartListener::start); + } + + protected void notifyTenantListener(final String beanId, final Consumer notifyMethod) + { + final ApplicationContext applicationContext = Registry.getCoreApplicationContext(); + + try + { + Optional.of(applicationContext.getBean(beanId, StopStartListener.class)) + .ifPresent(notifyMethod); + } + catch (final BeansException e) + { + LOG.error("There was a problem getting the bean [{}] so cannot notify the listener", beanId, e); + } + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/jalo/MetadataStoreEntry.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/jalo/MetadataStoreEntry.java new file mode 100644 index 0000000..3e4122b --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/jalo/MetadataStoreEntry.java @@ -0,0 +1,35 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.jalo; + +import de.hybris.platform.jalo.Item; +import de.hybris.platform.jalo.JaloBusinessException; +import de.hybris.platform.jalo.SessionContext; +import de.hybris.platform.jalo.type.ComposedType; +import org.apache.log4j.Logger; + +public class MetadataStoreEntry extends GeneratedMetadataStoreEntry +{ + @SuppressWarnings("unused") + private static final Logger LOG = Logger.getLogger( MetadataStoreEntry.class.getName() ); + + @Override + protected Item createItem(final SessionContext ctx, final ComposedType type, final ItemAttributeMap allAttributes) throws JaloBusinessException + { + // business code placed here will be executed before the item is created + // then create the item + final Item item = super.createItem( ctx, type, allAttributes ); + // business code placed here will be executed after the item was created + // and return the item + return item; + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/jalo/MonitorHistoryData.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/jalo/MonitorHistoryData.java new file mode 100644 index 0000000..e513c32 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/jalo/MonitorHistoryData.java @@ -0,0 +1,35 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.jalo; + +import de.hybris.platform.jalo.Item; +import de.hybris.platform.jalo.JaloBusinessException; +import de.hybris.platform.jalo.SessionContext; +import de.hybris.platform.jalo.type.ComposedType; +import org.apache.log4j.Logger; + +public class MonitorHistoryData extends GeneratedMonitorHistoryData +{ + @SuppressWarnings("unused") + private static final Logger LOG = Logger.getLogger( MonitorHistoryData.class.getName() ); + + @Override + protected Item createItem(final SessionContext ctx, final ComposedType type, final ItemAttributeMap allAttributes) throws JaloBusinessException + { + // business code placed here will be executed before the item is created + // then create the item + final Item item = super.createItem( ctx, type, allAttributes ); + // business code placed here will be executed after the item was created + // and return the item + return item; + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/jalo/MonitorHistoryEntryActionData.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/jalo/MonitorHistoryEntryActionData.java new file mode 100644 index 0000000..8a24e2b --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/jalo/MonitorHistoryEntryActionData.java @@ -0,0 +1,35 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.jalo; + +import de.hybris.platform.jalo.Item; +import de.hybris.platform.jalo.JaloBusinessException; +import de.hybris.platform.jalo.SessionContext; +import de.hybris.platform.jalo.type.ComposedType; +import org.apache.log4j.Logger; + +public class MonitorHistoryEntryActionData extends GeneratedMonitorHistoryEntryActionData +{ + @SuppressWarnings("unused") + private static final Logger LOG = Logger.getLogger( MonitorHistoryEntryActionData.class.getName() ); + + @Override + protected Item createItem(final SessionContext ctx, final ComposedType type, final ItemAttributeMap allAttributes) throws JaloBusinessException + { + // business code placed here will be executed before the item is created + // then create the item + final Item item = super.createItem( ctx, type, allAttributes ); + // business code placed here will be executed after the item was created + // and return the item + return item; + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/jalo/MonitorHistoryEntryData.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/jalo/MonitorHistoryEntryData.java new file mode 100644 index 0000000..394e608 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/jalo/MonitorHistoryEntryData.java @@ -0,0 +1,35 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.jalo; + +import de.hybris.platform.jalo.Item; +import de.hybris.platform.jalo.JaloBusinessException; +import de.hybris.platform.jalo.SessionContext; +import de.hybris.platform.jalo.type.ComposedType; +import org.apache.log4j.Logger; + +public class MonitorHistoryEntryData extends GeneratedMonitorHistoryEntryData +{ + @SuppressWarnings("unused") + private static final Logger LOG = Logger.getLogger( MonitorHistoryEntryData.class.getName() ); + + @Override + protected Item createItem(final SessionContext ctx, final ComposedType type, final ItemAttributeMap allAttributes) throws JaloBusinessException + { + // business code placed here will be executed before the item is created + // then create the item + final Item item = super.createItem( ctx, type, allAttributes ); + // business code placed here will be executed after the item was created + // and return the item + return item; + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/scheduling/HybrisAwareScheduledThreadPoolExecutor.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/scheduling/HybrisAwareScheduledThreadPoolExecutor.java new file mode 100644 index 0000000..d2a7ec5 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/scheduling/HybrisAwareScheduledThreadPoolExecutor.java @@ -0,0 +1,135 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.scheduling; + +import de.hybris.platform.core.Registry; +import de.hybris.platform.core.Tenant; +import de.hybris.platform.core.threadregistry.OperationInfo; +import de.hybris.platform.core.threadregistry.RegistrableThread; +import de.hybris.platform.jalo.JaloSession; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Optional; +import java.util.concurrent.RejectedExecutionHandler; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.ThreadFactory; + +/** + * {@link ScheduledThreadPoolExecutor} implementation to ensure threads are aware of Hybris requirements + * e.g. set with a current tenant and an active Session ready for running queries + * + */ +@SuppressWarnings("unused") +public class HybrisAwareScheduledThreadPoolExecutor extends ScheduledThreadPoolExecutor +{ + private static final Logger LOG = LoggerFactory.getLogger(HybrisAwareScheduledThreadPoolExecutor.class); + + private final ThreadLocal localPreviousTenant = new ThreadLocal<>(); + private final Tenant tenant; + + public HybrisAwareScheduledThreadPoolExecutor(final Tenant tenant, final int corePoolSize) + { + super(corePoolSize); + this.tenant = tenant; + } + + public HybrisAwareScheduledThreadPoolExecutor(final Tenant tenant, final int corePoolSize, final ThreadFactory threadFactory) + { + super(corePoolSize, threadFactory); + this.tenant = tenant; + } + + public HybrisAwareScheduledThreadPoolExecutor(final Tenant tenant, final int corePoolSize, final RejectedExecutionHandler handler) + { + super(corePoolSize, handler); + this.tenant = tenant; + } + + public HybrisAwareScheduledThreadPoolExecutor(final Tenant tenant, + final int corePoolSize, + final ThreadFactory threadFactory, + final RejectedExecutionHandler handler) + { + super(corePoolSize, threadFactory, handler); + this.tenant = tenant; + } + + @Override + protected void beforeExecute(final Thread t, final Runnable r) + { + super.beforeExecute(t, r); + prepareThread(); + } + + /** + * Prepare method activates a session for a passed tenant. + */ + @SuppressWarnings("Duplicates") + private void prepareThread() + { + LOG.debug("Preparing thread {}.", Thread.currentThread().getName()); + + // Store the current tenant so can reset later + if(!Registry.isCurrentTenant(tenant)) + { + if(Registry.hasCurrentTenant()) + { + localPreviousTenant.set(Registry.getCurrentTenant()); + } + else + { + localPreviousTenant.remove(); + } + Registry.setCurrentTenant(tenant); + } + JaloSession.getCurrentSession().activate(); + + // Register the thread with the suspend/resume system + final OperationInfo operationInfo = OperationInfo.builder() + .withCategory(OperationInfo.Category.TASK) + .asNotSuspendableOperation() + .build(); + RegistrableThread.registerThread(operationInfo); + } + + @Override + protected void afterExecute(final Runnable r, final Throwable t) + { + super.afterExecute(r, t); + unPrepareThread(); + } + + /** + * Un-prepare thread logic runs always after the pointcut proceeds + *

+ * Default deactivates a session for a passed tenant, reverts the tenant as before a factory call. + */ + @SuppressWarnings("Duplicates") + private void unPrepareThread() + { + // Close the session and restore any previous tenant. + try + { + JaloSession.getCurrentSession().close(); + } + finally + { + Optional.ofNullable(localPreviousTenant.get()) + .ifPresent(Registry::setCurrentTenant); + } + + // Unregister the thread from the suspend/resume system + RegistrableThread.unregisterThread(); + + LOG.debug("Unprepared thread {}.", Thread.currentThread().getName()); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/scheduling/HybrisAwareThreadPoolExecutor.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/scheduling/HybrisAwareThreadPoolExecutor.java new file mode 100644 index 0000000..c651a6d --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/scheduling/HybrisAwareThreadPoolExecutor.java @@ -0,0 +1,166 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.scheduling; + +import de.hybris.platform.core.Registry; +import de.hybris.platform.core.Tenant; +import de.hybris.platform.core.threadregistry.OperationInfo; +import de.hybris.platform.core.threadregistry.RegistrableThread; +import de.hybris.platform.jalo.JaloSession; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.concurrent.CustomizableThreadFactory; + +import java.util.Optional; +import java.util.concurrent.*; + +/** + * {@link ThreadPoolExecutor} implementation to ensure threads are aware of Hybris requirements + * e.g. set with a current tenant and an active Session ready for running queries + * + */ +@SuppressWarnings("unused") +public class HybrisAwareThreadPoolExecutor extends ThreadPoolExecutor +{ + private static final Logger LOG = LoggerFactory.getLogger(HybrisAwareThreadPoolExecutor.class); + + private final ThreadLocal localPreviousTenant = new ThreadLocal<>(); + private final Tenant tenant; + + public HybrisAwareThreadPoolExecutor(final Tenant tenant, + final int corePoolSize, + final int maximumPoolSize, + final long keepAliveTime, + final TimeUnit unit, + final BlockingQueue workQueue) + { + super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue); + this.tenant = tenant; + } + + public HybrisAwareThreadPoolExecutor(final Tenant tenant, + final int corePoolSize, + final int maximumPoolSize, + final long keepAliveTime, + final TimeUnit unit, + final BlockingQueue workQueue, + final ThreadFactory threadFactory) + { + super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory); + this.tenant = tenant; + } + + public HybrisAwareThreadPoolExecutor(final Tenant tenant, + final int corePoolSize, + final int maximumPoolSize, + final long keepAliveTime, + final TimeUnit unit, + final BlockingQueue workQueue, + final RejectedExecutionHandler handler) + { + super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, handler); + this.tenant = tenant; + } + + // Suppress Sonar warnings - Extension of a parent constructor + @SuppressWarnings("squid:S00107") + public HybrisAwareThreadPoolExecutor(final Tenant tenant, + final int corePoolSize, + final int maximumPoolSize, + final long keepAliveTime, + final TimeUnit unit, + final BlockingQueue workQueue, + final ThreadFactory threadFactory, + final RejectedExecutionHandler handler) + { + super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler); + this.tenant = tenant; + } + + @Override + protected void beforeExecute(final Thread t, final Runnable r) + { + super.beforeExecute(t, r); + prepareThread(); + } + + /** + * Prepare method activates a session for a passed tenant. + */ + @SuppressWarnings("Duplicates") + private void prepareThread() + { + LOG.debug("Preparing thread {}.", Thread.currentThread().getName()); + + // Store the current tenant so can reset later + if (!Registry.isCurrentTenant(tenant)) + { + if (Registry.hasCurrentTenant()) + { + localPreviousTenant.set(Registry.getCurrentTenant()); + } + else + { + localPreviousTenant.remove(); + } + Registry.setCurrentTenant(tenant); + } + JaloSession.getCurrentSession().activate(); + + // Register the thread with the suspend/resume system + final OperationInfo operationInfo = OperationInfo.builder() + .withCategory(OperationInfo.Category.TASK) + .asNotSuspendableOperation() + .build(); + RegistrableThread.registerThread(operationInfo); + } + + @Override + protected void afterExecute(final Runnable r, final Throwable t) + { + super.afterExecute(r, t); + unPrepareThread(); + } + + /** + * Unprepare thread logic runs always after the pointcut proceeds + *

+ * Default deactivates a session for a passed tenant, reverts the tenant as before a factory call. + */ + @SuppressWarnings("Duplicates") + private void unPrepareThread() + { + // Close the session and restore any previous tenant. + try + { + JaloSession.getCurrentSession().close(); + } + finally + { + Optional.ofNullable(localPreviousTenant.get()) + .ifPresent(Registry::setCurrentTenant); + } + + // Unregister the thread from the suspend/resume system + RegistrableThread.unregisterThread(); + + LOG.debug("Unprepared thread {}.", Thread.currentThread().getName()); + } + + public static ThreadPoolExecutor newSingleThreadedExecutor(final String threadPrefix) + { + final Tenant tenant = Registry.getCurrentTenant(); + return new HybrisAwareThreadPoolExecutor(tenant, 1, 1, 0, + TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(), + new CustomizableThreadFactory(threadPrefix)); + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/scheduling/HybrisAwareThreadPoolTaskExecutor.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/scheduling/HybrisAwareThreadPoolTaskExecutor.java new file mode 100644 index 0000000..3182d61 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/scheduling/HybrisAwareThreadPoolTaskExecutor.java @@ -0,0 +1,314 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.scheduling; + +import de.hybris.platform.cloud.commons.spring.context.SmartLifecycleRole; +import de.hybris.platform.core.Registry; +import de.hybris.platform.core.Tenant; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.util.Assert; + +import java.util.concurrent.*; + +/** + * {@link ThreadPoolTaskExecutor} implementation to ensure threads are aware of Hybris requirements + * e.g. set with a current tenant and an active Session ready for running queries + * + */ +public class HybrisAwareThreadPoolTaskExecutor extends ThreadPoolTaskExecutor implements SmartLifecycleRole +{ + private volatile boolean autoStartup = true; + private volatile int phase = 0; + private volatile String role = null; + private volatile boolean initialized = false; + + private final Object poolSizeMonitor = new Object(); + + private boolean allowCoreThreadTimeOut = false; + + private int queueCapacity = Integer.MAX_VALUE; + + private ThreadPoolExecutor threadPoolExecutor; + + private Tenant tenant; + + private String beanName; + + @Override + public void afterPropertiesSet() + { + this.tenant = getCurrentTenant(); + } + + protected Tenant getCurrentTenant() + { + return Registry.getCurrentTenant(); + } + + // + + @Override + public void initialize() + { + if (!initialized) + { + super.initialize(); + initialized = true; + } + } + + @SuppressWarnings("Duplicates") + @Override + public void shutdown() + { + if (initialized) + { + super.shutdown(); + initialized = false; + } + } + + /** + * Set the ThreadPoolExecutor's core pool size. + * Default is 1. + *

This setting can be modified at runtime, for example through JMX. + */ + @Override + public void setCorePoolSize(final int corePoolSize) + { + synchronized (this.poolSizeMonitor) + { + super.setCorePoolSize(corePoolSize); + if (this.threadPoolExecutor != null) + { + this.threadPoolExecutor.setCorePoolSize(corePoolSize); + } + } + } + + /** + * Set the ThreadPoolExecutor's maximum pool size. + * Default is Integer.MAX_VALUE. + *

This setting can be modified at runtime, for example through JMX. + */ + @Override + public void setMaxPoolSize(final int maxPoolSize) + { + synchronized (this.poolSizeMonitor) + { + super.setMaxPoolSize(maxPoolSize); + if (this.threadPoolExecutor != null) + { + this.threadPoolExecutor.setMaximumPoolSize(maxPoolSize); + } + } + } + + /** + * Set the ThreadPoolExecutor's keep-alive seconds. + * Default is 60. + *

This setting can be modified at runtime, for example through JMX. + */ + @Override + public void setKeepAliveSeconds(final int keepAliveSeconds) + { + synchronized (this.poolSizeMonitor) + { + super.setKeepAliveSeconds(keepAliveSeconds); + if (this.threadPoolExecutor != null) + { + this.threadPoolExecutor.setKeepAliveTime(keepAliveSeconds, TimeUnit.SECONDS); + } + } + } + + /** + * Specify whether to allow core threads to time out. This enables dynamic + * growing and shrinking even in combination with a non-zero queue (since + * the max pool size will only grow once the queue is full). + *

Default is "false". Note that this feature is only available on Java 6 + * or above. On Java 5, consider switching to the backport-concurrent + * version of ThreadPoolTaskExecutor which also supports this feature. + * @see ThreadPoolExecutor#allowCoreThreadTimeOut(boolean) + */ + @Override + public void setAllowCoreThreadTimeOut(final boolean allowCoreThreadTimeOut) + { + this.allowCoreThreadTimeOut = allowCoreThreadTimeOut; + } + + /** + * Set the capacity for the ThreadPoolExecutor's BlockingQueue. + * Default is Integer.MAX_VALUE. + *

Any positive value will lead to a LinkedBlockingQueue instance; + * any other value will lead to a SynchronousQueue instance. + * @see LinkedBlockingQueue + * @see SynchronousQueue + */ + @Override + public void setQueueCapacity(final int queueCapacity) + { + this.queueCapacity = queueCapacity; + } + + /** + * Return the underlying ThreadPoolExecutor for native access. + * @return the underlying ThreadPoolExecutor (never null) + * @throws IllegalStateException if the ThreadPoolTaskExecutor hasn't been initialized yet + */ + @Override + public ThreadPoolExecutor getThreadPoolExecutor() + { + Assert.state(this.threadPoolExecutor != null, "ThreadPoolTaskExecutor not initialized"); + return this.threadPoolExecutor; + } + + /** + * Return the current pool size. + * @see ThreadPoolExecutor#getPoolSize() + */ + @Override + public int getPoolSize() + { + return getThreadPoolExecutor().getPoolSize(); + } + + /** + * Return the number of currently active threads. + * @see ThreadPoolExecutor#getActiveCount() + */ + @Override + public int getActiveCount() + { + return getThreadPoolExecutor().getActiveCount(); + } + + @Override + public void execute(final Runnable task, final long startTimeout) + { + execute(task); + } + + @Override + protected ExecutorService initializeExecutor(final ThreadFactory threadFactory, final RejectedExecutionHandler rejectedExecutionHandler) + { + final BlockingQueue queue = createQueue(this.queueCapacity); + + final ThreadPoolExecutor executor = + createThreadPoolExecutor(this.tenant, getCorePoolSize(), getMaxPoolSize(), getKeepAliveSeconds(), TimeUnit.SECONDS, + queue, threadFactory, rejectedExecutionHandler); + + if (this.allowCoreThreadTimeOut) + { + executor.allowCoreThreadTimeOut(true); + } + + this.threadPoolExecutor = executor; + return executor; + } + + // Suppress Sonar warnings - Extension of a parent constructor + @SuppressWarnings("squid:S00107") + protected ThreadPoolExecutor createThreadPoolExecutor(final Tenant tenant, + final int corePoolSize, + final int maximumPoolSize, + final long keepAliveTime, + final TimeUnit unit, + final BlockingQueue workQueue, + final ThreadFactory threadFactory, + final RejectedExecutionHandler handler) + { + return new HybrisAwareThreadPoolExecutor(tenant, corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler); + } + + // + + // + + @Override + public void start() + { + if (!this.isRunning()) + { + this.initialize(); + } + } + + @Override + public void stop() + { + if (this.isRunning()) + { + this.shutdown(); + } + } + + @Override + public void stop(final Runnable runnable) + { + stop(); + runnable.run(); + } + + @Override + public boolean isRunning() + { + return this.initialized; + } + + @Override + public String getRole() + { + return this.role; + } + + public void setRole(final String role) + { + this.role = role; + } + + @Override + public boolean isAutoStartup() + { + return this.autoStartup; + } + + public void setAutoStartup(final boolean autoStartup) + { + this.autoStartup = autoStartup; + } + + @Override + public int getPhase() + { + return this.phase; + } + + public void setPhase(final int phase) + { + this.phase = phase; + } + + // + + @Override + public void setBeanName(final String name) + { + super.setBeanName(name); + this.beanName = name; + } + + @Override + public String toString() + { + return beanName; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/scheduling/HybrisAwareThreadPoolTaskScheduler.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/scheduling/HybrisAwareThreadPoolTaskScheduler.java new file mode 100644 index 0000000..80dfa56 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/scheduling/HybrisAwareThreadPoolTaskScheduler.java @@ -0,0 +1,158 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.scheduling; + +import de.hybris.platform.cloud.commons.spring.context.SmartLifecycleRole; +import de.hybris.platform.core.Registry; +import de.hybris.platform.core.Tenant; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; + +import java.util.concurrent.RejectedExecutionHandler; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ThreadFactory; + +/** + * {@link ThreadPoolTaskScheduler} implementation to ensure threads are aware of Hybris requirements + * e.g. set with a current tenant and an active Session ready for running queries + * + */ +public class HybrisAwareThreadPoolTaskScheduler extends ThreadPoolTaskScheduler implements SmartLifecycleRole +{ + private volatile boolean autoStartup = true; + private volatile int phase = 0; + private volatile String role = null; + private volatile boolean initialized = false; + + private Tenant tenant; + + private String beanName; + + @Override + public void afterPropertiesSet() + { + this.tenant = getCurrentTenant(); + } + + protected Tenant getCurrentTenant() + { + return Registry.getCurrentTenant(); + } + + @Override + public void initialize() + { + if (!this.initialized) + { + super.initialize(); + initialized = true; + } + } + + @SuppressWarnings("Duplicates") + @Override + public void shutdown() + { + if (this.initialized) + { + super.shutdown(); + this.initialized = false; + } + } + + @Override + protected ScheduledExecutorService createExecutor(final int poolSize, final ThreadFactory threadFactory, final RejectedExecutionHandler rejectedExecutionHandler) + { + return createExecutorService(this.tenant, poolSize, threadFactory, rejectedExecutionHandler); + } + + protected ScheduledExecutorService createExecutorService(final Tenant tenant, final int poolSize, final ThreadFactory threadFactory, + final RejectedExecutionHandler rejectedExecutionHandler) + { + return new HybrisAwareScheduledThreadPoolExecutor(tenant, poolSize, threadFactory, rejectedExecutionHandler); + } + + @Override + public String getRole() + { + return this.role; + } + + public void setRole(final String role) + { + this.role = role; + } + + @Override + public boolean isAutoStartup() + { + return this.autoStartup; + } + + public void setAutoStartup(final boolean autoStartup) + { + this.autoStartup = autoStartup; + } + + @Override + public int getPhase() + { + return this.phase; + } + + public void setPhase(final int phase) + { + this.phase = phase; + } + + @Override + public void stop(final Runnable runnable) + { + stop(); + runnable.run(); + } + + @Override + public void start() + { + if (!this.isRunning()) + { + this.initialize(); + } + } + + @Override + public void stop() + { + if (this.isRunning()) + { + this.shutdown(); + } + } + + @Override + public boolean isRunning() + { + return this.initialized; + } + + @Override + public void setBeanName(final String name) + { + super.setBeanName(name); + this.beanName = name; + } + + @Override + public String toString() + { + return beanName; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/impex/impl/TenantAwareConfigPropertyImportProcessor.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/impex/impl/TenantAwareConfigPropertyImportProcessor.java new file mode 100644 index 0000000..fa96ae9 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/impex/impl/TenantAwareConfigPropertyImportProcessor.java @@ -0,0 +1,54 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.impex.impl; + +import de.hybris.platform.commerceservices.impex.impl.ConfigPropertyImportProcessor; +import de.hybris.platform.core.Registry; +import de.hybris.platform.impex.jalo.ImpExReader; +import de.hybris.platform.impex.jalo.imp.ImpExImportReader; + +import org.apache.commons.lang.StringUtils; +import org.springframework.util.Assert; + +import java.lang.reflect.Method; + +/** + * @inheritDoc Allows substitution of ${tenantId} property where required + */ +public class TenantAwareConfigPropertyImportProcessor extends ConfigPropertyImportProcessor +{ + private static final String PROPERTY_KEY = "tenantId"; + private static final String SUBSTITUTE_KEY = "${tenantId}"; + + private String tenantId; + + @Override + public void init(final ImpExImportReader reader) + { + this.tenantId = Registry.getCurrentTenant().getTenantID(); + Assert.notNull(this.tenantId, "'tenantId' cannot be null"); + super.init(reader); + addDefinition(reader, findAddDefinitionMethod(), "config-" + PROPERTY_KEY, this.tenantId); + } + + protected void addDefinition(final ImpExReader reader, final Method addDefinitionMethod, final String key, final String value) + { + if (StringUtils.contains(value, SUBSTITUTE_KEY)) + { + super.addDefinition(reader, addDefinitionMethod, key, StringUtils.replace(value, SUBSTITUTE_KEY, tenantId)); + } + else + { + super.addDefinition(reader, addDefinitionMethod, key, value); + } + + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/MonitorEntryFilter.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/MonitorEntryFilter.java new file mode 100644 index 0000000..e1578a1 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/MonitorEntryFilter.java @@ -0,0 +1,19 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor; + +/** + * A strategy to filter {@link MonitorHistoryEntryData} + */ +public interface MonitorEntryFilter +{ + boolean apply(final MonitorHistoryEntryData entry); +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/MonitorHistory.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/MonitorHistory.java new file mode 100644 index 0000000..0573b47 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/MonitorHistory.java @@ -0,0 +1,69 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor; + +import java.util.Date; + +/** + * Strategy to record history information for areas of the running system + */ +public interface MonitorHistory +{ + /** + * Record the completion of an interim action within a step + * + * @param code code representing the unique action + * @param start when started + * @param end when ended + * @param message helpful message + * @param args arguments to be substituted into the helpful message + * @return current instance of {@link MonitorHistory} + */ + MonitorHistory addAction(final String code, final Status status, final Date start, final Date end, final String message, final Object... args); + + /** + * Record that a given step succeeded + * + * @param step step + * @param start when started + * @param end when ended + * @param message helpful message + * @param args arguments to be substituted into the helpful message + * @return current instance of {@link MonitorHistory} + */ + MonitorHistory stepSucceeded(final Step step, final Date start, final Date end, final String message, final Object... args); + + /** + * Record that a given step failed + * + * @param step step + * @param start when started + * @param end when ended + * @param ex exception thrown + * @param message helpful message + * @param args arguments to be substituted into the helpful message + * @return current instance of {@link MonitorHistory} + */ + MonitorHistory stepFailed(final Step step, final Date start, final Date end, final Throwable ex, final String message, final Object... args); + + /** + * Temporarily stop & record the history so it can be resumed at a later time + */ + void checkpoint(); + + /** + * End the history and record it's information + * + * @param status what was the end state + */ + void end(final Status status); + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/MonitorHistoryFactory.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/MonitorHistoryFactory.java new file mode 100644 index 0000000..349edc5 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/MonitorHistoryFactory.java @@ -0,0 +1,40 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor; + +import java.util.LinkedList; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.util.Assert; + +/** + * Factory to create a new {@link MonitorHistoryData} + */ +public class MonitorHistoryFactory +{ + /** + * Create a new {@link MonitorHistoryData} + * @param area being recorded + * @param key unique key to identify the history being recorded + * @return {@link MonitorHistoryData} with area and key set, status {@link Status#IN_PROGRESS} and entries as new List + */ + public MonitorHistoryData create(final SystemArea area, final String key) + { + Assert.notNull(area, "'SystemArea' cannot be null"); + Assert.isTrue(StringUtils.isNotBlank(key), "'key' cannot be null, empty for blank"); + final MonitorHistoryData history = new MonitorHistoryData(); + history.setKey(key); + history.setSystemArea(area); + history.setStatus(Status.IN_PROGRESS); + history.setEntries(new LinkedList<>()); + return history; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/MonitorHistoryRestorer.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/MonitorHistoryRestorer.java new file mode 100644 index 0000000..532ce28 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/MonitorHistoryRestorer.java @@ -0,0 +1,19 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor; + +/** + * A strategy to restore any persisted Monitory History Data + */ +public interface MonitorHistoryRestorer +{ + MonitorHistoryData restore(final SystemArea systemArea, final String key); +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/MonitorRecorder.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/MonitorRecorder.java new file mode 100644 index 0000000..28b921b --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/MonitorRecorder.java @@ -0,0 +1,23 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor; + +/** + * A strategy to record a {@link MonitorHistoryData} + */ +public interface MonitorRecorder +{ + /** + * Record the given history + * @param history history to be recorded + */ + void record(final MonitorHistoryData history); +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/MonitorService.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/MonitorService.java new file mode 100644 index 0000000..8fce020 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/MonitorService.java @@ -0,0 +1,41 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor; + +import java.util.Optional; + +/** + * Service to add to/begin/resume history information for areas of the running system + */ +public interface MonitorService +{ + /** + * Begin new history + * @param area area of the system being monitored + * @param key the unique key for the record + * @return {@link MonitorHistory} to encapsulate information captured + */ + MonitorHistory begin(final SystemArea area, final String key); + + /** + * Return a handle on the {@link MonitorHistory} for the current thread + * @return + */ + Optional current(); + + /** + * Resume monitoring + * @param area area of the system being monitored + * @param key the unique key for the record + * @return {@link MonitorHistory} containing all the previous entries, if Area/Key combination found. Else empty {@link MonitorHistory} + */ + MonitorHistory resume(final SystemArea area, final String key); +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/DatabaseMonitorHistoryRestorer.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/DatabaseMonitorHistoryRestorer.java new file mode 100644 index 0000000..b9b3373 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/DatabaseMonitorHistoryRestorer.java @@ -0,0 +1,105 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.database; + +import de.hybris.platform.cloud.commons.model.MonitorHistoryDataModel; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryFactory; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryRestorer; +import de.hybris.platform.cloud.commons.services.monitor.SystemArea; +import de.hybris.platform.cloud.commons.services.monitor.database.dao.MonitorHistoryDataDao; +import org.apache.commons.collections.CollectionUtils; +import org.slf4j.Logger; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.core.convert.converter.Converter; + +import java.util.Collections; +import java.util.List; + +import static org.slf4j.LoggerFactory.getLogger; + +public class DatabaseMonitorHistoryRestorer implements MonitorHistoryRestorer +{ + private static final Logger LOG = getLogger(DatabaseMonitorHistoryRestorer.class); + + private MonitorHistoryDataDao monitoryHistoryDao; + private Converter historyReverseConverter; + private MonitorHistoryFactory historyFactory; + + @Override + public MonitorHistoryData restore(final SystemArea area, final String key) + { + final List models = getSavedModels(area, key); + if (CollectionUtils.isNotEmpty(models)) + { + if (models.size() > 1) + { + LOG.error("There were more than 1 existing records for Area [{}] Key [{}], will restore the first", area, key); + } + else + { + LOG.debug("There was an existing record for Area [{}] Key [{}] will restore information", area, key); + } + return getHistoryReverseConverter().convert(models.get(0)); + } + else + { + LOG.debug("There were no existing records for Area [{}] Key [{}]", area, key); + return getHistoryFactory().create(area, key); + } + } + + protected List getSavedModels(final SystemArea area, final String key) + { + try + { + return getMonitoryHistoryDao().find(area, key); + } + catch (final IllegalArgumentException e) + { + LOG.error("There was a problem retrieving the saved models", e); + return Collections.emptyList(); + } + } + + protected MonitorHistoryDataDao getMonitoryHistoryDao() + { + return monitoryHistoryDao; + } + + @Required + public void setMonitoryHistoryDao(final MonitorHistoryDataDao monitoryHistoryDao) + { + this.monitoryHistoryDao = monitoryHistoryDao; + } + + protected Converter getHistoryReverseConverter() + { + return historyReverseConverter; + } + + @Required + public void setHistoryReverseConverter(final Converter historyReverseConverter) + { + this.historyReverseConverter = historyReverseConverter; + } + + protected MonitorHistoryFactory getHistoryFactory() + { + return historyFactory; + } + + @Required + public void setHistoryFactory(final MonitorHistoryFactory historyFactory) + { + this.historyFactory = historyFactory; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/DatabaseMonitorRecorder.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/DatabaseMonitorRecorder.java new file mode 100644 index 0000000..97d7500 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/DatabaseMonitorRecorder.java @@ -0,0 +1,74 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.database; + +import de.hybris.platform.cloud.commons.constants.CloudCommonsConstants; +import de.hybris.platform.cloud.commons.model.MonitorHistoryDataModel; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryData; +import de.hybris.platform.cloud.commons.services.monitor.impl.AbstractConfigEnabledMonitorRecorder; +import de.hybris.platform.servicelayer.exceptions.ModelSavingException; +import de.hybris.platform.servicelayer.model.ModelService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.core.convert.converter.Converter; + +/** + * @inheritDoc + * Records {@link MonitorHistoryData} into the Hybris type system + * + */ +public class DatabaseMonitorRecorder extends AbstractConfigEnabledMonitorRecorder +{ + private ModelService modelService; + private Converter historyConverter; + + @Override + protected String getEnabledKey() + { + return CloudCommonsConstants.MONITORING_DB_ENABLED; + } + + @Override + protected void recordHistory(final MonitorHistoryData history) + { + final MonitorHistoryDataModel historyModel = getHistoryConverter().convert(history); + try + { + getModelService().save(historyModel); + } + catch (final ModelSavingException | IllegalArgumentException e) + { + log.error("There was a problem saving the history for Area [{}] Key [{}]", history.getSystemArea(), history.getKey(), e); + } + } + + protected ModelService getModelService() + { + return modelService; + } + + @Required + public void setModelService(final ModelService modelService) + { + this.modelService = modelService; + } + + protected Converter getHistoryConverter() + { + return historyConverter; + } + + @Required + public void setHistoryConverter(final Converter historyConverter) + { + this.historyConverter = historyConverter; + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/MonitorHistoryEnumHelper.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/MonitorHistoryEnumHelper.java new file mode 100644 index 0000000..d96aebb --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/MonitorHistoryEnumHelper.java @@ -0,0 +1,48 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.database; + +import de.hybris.platform.cloud.commons.enums.MonitorStatus; +import de.hybris.platform.cloud.commons.enums.MonitorStep; +import de.hybris.platform.cloud.commons.enums.MonitorSystemArea; +import de.hybris.platform.cloud.commons.services.monitor.Status; +import de.hybris.platform.cloud.commons.services.monitor.Step; +import de.hybris.platform.cloud.commons.services.monitor.SystemArea; +import de.hybris.platform.cloud.commons.utils.EnumHelper; + +public final class MonitorHistoryEnumHelper +{ + private MonitorHistoryEnumHelper() {} + + public static MonitorSystemArea getMonitorSystemArea(final SystemArea area) { + return EnumHelper.getEnum(MonitorSystemArea.class, area); + } + + public static MonitorStatus getMonitorStatus(final Status status) { + return EnumHelper.getEnum(MonitorStatus.class, status); + } + + public static MonitorStep getMonitorStep(final Step step) { + return EnumHelper.getEnum(MonitorStep.class, step); + } + + public static SystemArea getSystemArea(final MonitorSystemArea area) { + return EnumHelper.getEnum(SystemArea.class, area); + } + + public static Status getStatus(final MonitorStatus status) { + return EnumHelper.getEnum(Status.class, status); + } + + public static Step getStep(final MonitorStep step) { + return EnumHelper.getEnum(Step.class, step); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryDataConverter.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryDataConverter.java new file mode 100644 index 0000000..caae6c2 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryDataConverter.java @@ -0,0 +1,86 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.database.converter; + +import de.hybris.platform.cloud.commons.model.MonitorHistoryDataModel; +import de.hybris.platform.cloud.commons.model.MonitorHistoryEntryDataModel; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryData; +import de.hybris.platform.cloud.commons.services.monitor.database.MonitorHistoryEnumHelper; +import de.hybris.platform.servicelayer.model.ModelService; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.core.convert.converter.Converter; + +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +public class MonitorHistoryDataConverter implements Converter +{ + private ModelService modelService; + private Converter entryConverter; + + @Override + public MonitorHistoryDataModel convert(final MonitorHistoryData source) + { + final MonitorHistoryDataModel target = getOrCreate(source); + target.setStatus(MonitorHistoryEnumHelper.getMonitorStatus(source.getStatus())); + target.setExceptionMessage(source.getExceptionMessage()); + target.setEntries(convertEntries(source.getEntries())); + return target; + } + + protected MonitorHistoryDataModel getOrCreate(final MonitorHistoryData source) + { + if (source.getPk() != null) + { + return getModelService().get(source.getPk()); + } + else + { + final MonitorHistoryDataModel target = getModelService().create(MonitorHistoryDataModel.class); + target.setSystemArea(MonitorHistoryEnumHelper.getMonitorSystemArea(source.getSystemArea())); + target.setKey(source.getKey()); + return target; + } + } + + protected List convertEntries(final List entries) + { + return CollectionUtils.isEmpty(entries) + ? Collections.emptyList() + : entries.stream().map(getEntryConverter()::convert).collect(Collectors.toList()); + } + + protected ModelService getModelService() + { + return modelService; + } + + @Required + public void setModelService(final ModelService modelService) + { + this.modelService = modelService; + } + + protected Converter getEntryConverter() + { + return entryConverter; + } + + @Required + public void setEntryConverter(final Converter entryConverter) + { + this.entryConverter = entryConverter; + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryEntryActionDataConverter.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryEntryActionDataConverter.java new file mode 100644 index 0000000..44da88a --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryEntryActionDataConverter.java @@ -0,0 +1,54 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.database.converter; + +import de.hybris.platform.cloud.commons.model.MonitorHistoryEntryActionDataModel; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryActionData; +import de.hybris.platform.cloud.commons.services.monitor.database.MonitorHistoryEnumHelper; +import de.hybris.platform.servicelayer.model.ModelService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.core.convert.converter.Converter; + +public class MonitorHistoryEntryActionDataConverter implements Converter +{ + private ModelService modelService; + + @Override + public MonitorHistoryEntryActionDataModel convert(final MonitorHistoryEntryActionData source) + { + return source.getPk() != null + ? getModelService().get(source.getPk()) + : createNew(source); + } + + protected MonitorHistoryEntryActionDataModel createNew(final MonitorHistoryEntryActionData source) + { + final MonitorHistoryEntryActionDataModel target = getModelService().create(MonitorHistoryEntryActionDataModel.class); + target.setCode(source.getCode()); + target.setStatus(MonitorHistoryEnumHelper.getMonitorStatus(source.getStatus())); + target.setStarted(source.getStarted()); + target.setEnded(source.getEnded()); + target.setDuration(source.getDuration()); + target.setMessage(source.getMessage()); + return target; + } + + protected ModelService getModelService() + { + return modelService; + } + + @Required + public void setModelService(final ModelService modelService) + { + this.modelService = modelService; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryEntryDataConverter.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryEntryDataConverter.java new file mode 100644 index 0000000..de05f7a --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryEntryDataConverter.java @@ -0,0 +1,88 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.database.converter; + +import de.hybris.platform.cloud.commons.model.MonitorHistoryEntryActionDataModel; +import de.hybris.platform.cloud.commons.model.MonitorHistoryEntryDataModel; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryActionData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryData; +import de.hybris.platform.cloud.commons.services.monitor.database.MonitorHistoryEnumHelper; +import de.hybris.platform.servicelayer.model.ModelService; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.core.convert.converter.Converter; + +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +public class MonitorHistoryEntryDataConverter implements Converter +{ + private ModelService modelService; + private Converter actionConverter; + + @Override + public MonitorHistoryEntryDataModel convert(final MonitorHistoryEntryData source) + { + final MonitorHistoryEntryDataModel target = getOrCreate(source); + target.setActions(convertActions(source.getActions())); + return target; + } + + protected MonitorHistoryEntryDataModel getOrCreate(final MonitorHistoryEntryData source) + { + return source.getPk() != null + ? getModelService().get(source.getPk()) + : createNew(source); + } + + protected MonitorHistoryEntryDataModel createNew(final MonitorHistoryEntryData source) + { + final MonitorHistoryEntryDataModel target = getModelService().create(MonitorHistoryEntryDataModel.class); + target.setStep(MonitorHistoryEnumHelper.getMonitorStep(source.getStep())); + target.setStatus(MonitorHistoryEnumHelper.getMonitorStatus(source.getStatus())); + target.setStarted(source.getStarted()); + target.setEnded(source.getEnded()); + target.setDuration(source.getDuration()); + target.setNodeId(source.getNodeId()); + target.setMessage(source.getMessage()); + return target; + } + + protected List convertActions(final List actions) + { + return CollectionUtils.isEmpty(actions) + ? Collections.emptyList() + : actions.stream().map(getActionConverter()::convert).collect(Collectors.toList()); + } + + protected ModelService getModelService() + { + return modelService; + } + + @Required + public void setModelService(final ModelService modelService) + { + this.modelService = modelService; + } + + protected Converter getActionConverter() + { + return actionConverter; + } + + @Required + public void setActionConverter(final Converter actionConverter) + { + this.actionConverter = actionConverter; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryReverseConverter.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryReverseConverter.java new file mode 100644 index 0000000..0fdfc26 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryReverseConverter.java @@ -0,0 +1,68 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.database.converter; + +import de.hybris.platform.cloud.commons.model.MonitorHistoryDataModel; +import de.hybris.platform.cloud.commons.model.MonitorHistoryEntryDataModel; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryFactory; +import de.hybris.platform.cloud.commons.services.monitor.SystemArea; +import de.hybris.platform.cloud.commons.services.monitor.database.MonitorHistoryEnumHelper; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.core.convert.converter.Converter; + +import java.util.List; + +public class MonitorHistoryReverseConverter implements Converter +{ + private Converter entryReverseConverter; + private MonitorHistoryFactory historyFactory; + + @Override + public MonitorHistoryData convert(final MonitorHistoryDataModel source) + { + final SystemArea area = MonitorHistoryEnumHelper.getSystemArea(source.getSystemArea()); + final MonitorHistoryData target = getHistoryFactory().create(area, source.getKey()); + target.setPk(source.getPk()); + target.setStatus(MonitorHistoryEnumHelper.getStatus(source.getStatus())); + target.setStatusWhenResumed(MonitorHistoryEnumHelper.getStatus(source.getStatus())); + target.setExceptionMessage(source.getExceptionMessage()); + if (!(source.getEntries() == null || source.getEntries().isEmpty())) + { + final List entries = target.getEntries(); + source.getEntries().forEach(e -> entries.add(getEntryReverseConverter().convert(e))); + } + return target; + } + + protected Converter getEntryReverseConverter() + { + return entryReverseConverter; + } + + @Required + public void setEntryReverseConverter(final Converter entryReverseConverter) + { + this.entryReverseConverter = entryReverseConverter; + } + + protected MonitorHistoryFactory getHistoryFactory() + { + return historyFactory; + } + + @Required + public void setHistoryFactory(final MonitorHistoryFactory historyFactory) + { + this.historyFactory = historyFactory; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryReverseEntryActionDataConverter.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryReverseEntryActionDataConverter.java new file mode 100644 index 0000000..2769c37 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryReverseEntryActionDataConverter.java @@ -0,0 +1,33 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.database.converter; + +import de.hybris.platform.cloud.commons.model.MonitorHistoryEntryActionDataModel; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryActionData; +import de.hybris.platform.cloud.commons.services.monitor.database.MonitorHistoryEnumHelper; +import org.springframework.core.convert.converter.Converter; + +public class MonitorHistoryReverseEntryActionDataConverter implements Converter +{ + @Override + public MonitorHistoryEntryActionData convert(final MonitorHistoryEntryActionDataModel source) + { + return MonitorHistoryEntryActionData.builder() + .withPk(source.getPk()) + .withCode(source.getCode()) + .withStatus(MonitorHistoryEnumHelper.getStatus(source.getStatus())) + .withStarted(source.getStarted()) + .withEnded(source.getEnded()) + .withDuration(source.getDuration()) + .withMessage(source.getMessage()) + .build(); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryReverseEntryConverter.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryReverseEntryConverter.java new file mode 100644 index 0000000..cf4e81c --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryReverseEntryConverter.java @@ -0,0 +1,63 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.database.converter; + +import de.hybris.platform.cloud.commons.model.MonitorHistoryEntryActionDataModel; +import de.hybris.platform.cloud.commons.model.MonitorHistoryEntryDataModel; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryActionData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryData; +import de.hybris.platform.cloud.commons.services.monitor.database.MonitorHistoryEnumHelper; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.core.convert.converter.Converter; + +import java.util.LinkedList; +import java.util.List; +import java.util.stream.Collectors; + +public class MonitorHistoryReverseEntryConverter implements Converter +{ + private Converter actionReverseConverter; + + @Override + public MonitorHistoryEntryData convert(final MonitorHistoryEntryDataModel source) + { + return MonitorHistoryEntryData.builder() + .withPk(source.getPk()) + .withStep(MonitorHistoryEnumHelper.getStep(source.getStep())) + .withStatus(MonitorHistoryEnumHelper.getStatus(source.getStatus())) + .withStarted(source.getStarted()) + .withEnded(source.getEnded()) + .withDuration(source.getDuration()) + .withNodeId(source.getNodeId()) + .withMessage(source.getMessage()) + .withActions(convertActions(source.getActions())) + .build(); + } + + protected List convertActions(final List actions) + { + return CollectionUtils.isEmpty(actions) + ? new LinkedList<>() + : actions.stream().map(getActionReverseConverter()::convert).collect(Collectors.toList()); + } + + protected Converter getActionReverseConverter() + { + return actionReverseConverter; + } + + @Required + public void setActionReverseConverter(final Converter actionReverseConverter) + { + this.actionReverseConverter = actionReverseConverter; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/dao/MonitorHistoryDataDao.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/dao/MonitorHistoryDataDao.java new file mode 100644 index 0000000..ce6067b --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/dao/MonitorHistoryDataDao.java @@ -0,0 +1,22 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.database.dao; + +import de.hybris.platform.cloud.commons.model.MonitorHistoryDataModel; +import de.hybris.platform.cloud.commons.services.monitor.SystemArea; +import de.hybris.platform.servicelayer.internal.dao.GenericDao; + +import java.util.List; + +public interface MonitorHistoryDataDao extends GenericDao +{ + List find(final SystemArea area, final String key); +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/dao/impl/DefaultMonitorHistoryDataDao.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/dao/impl/DefaultMonitorHistoryDataDao.java new file mode 100644 index 0000000..c4a98ca --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/database/dao/impl/DefaultMonitorHistoryDataDao.java @@ -0,0 +1,35 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.database.dao.impl; + +import com.google.common.collect.ImmutableMap; +import de.hybris.platform.cloud.commons.model.MonitorHistoryDataModel; +import de.hybris.platform.cloud.commons.services.monitor.SystemArea; +import de.hybris.platform.cloud.commons.services.monitor.database.MonitorHistoryEnumHelper; +import de.hybris.platform.cloud.commons.services.monitor.database.dao.MonitorHistoryDataDao; +import de.hybris.platform.servicelayer.internal.dao.DefaultGenericDao; + +import java.util.List; + + +public class DefaultMonitorHistoryDataDao extends DefaultGenericDao implements MonitorHistoryDataDao +{ + public DefaultMonitorHistoryDataDao() + { + super(MonitorHistoryDataModel._TYPECODE); + } + + @Override + public List find(final SystemArea area, final String key) + { + return find(ImmutableMap.of(MonitorHistoryDataModel.SYSTEMAREA, MonitorHistoryEnumHelper.getMonitorSystemArea(area), MonitorHistoryDataModel.KEY, key)); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/impl/AbstractConfigEnabledMonitorRecorder.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/impl/AbstractConfigEnabledMonitorRecorder.java new file mode 100644 index 0000000..f7cb2be --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/impl/AbstractConfigEnabledMonitorRecorder.java @@ -0,0 +1,68 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.impl; + +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorRecorder; +import de.hybris.platform.servicelayer.config.ConfigurationService; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Required; + +/** + * @inheritDoc An abstract {@link MonitorRecorder} strategy to control a concrete implementation via a configuration property + */ +public abstract class AbstractConfigEnabledMonitorRecorder implements MonitorRecorder +{ + // Suppress Sonar warnings - Protected non static logger so that + // subclasses can access a single, consistent logger with a fixed name. + // Provides better log consistency for this use case. + @SuppressWarnings({"squid:S1312"}) + protected final Logger log = LoggerFactory.getLogger(this.getClass()); + + private ConfigurationService configurationService; + + @Override + public void record(final MonitorHistoryData history) + { + if (isEnabled()) + { + recordHistory(history); + } + else if (log.isDebugEnabled()) + { + log.debug("[{}] is not enabled, will not record for Area [{}] Key [{}]", getEnabledKey(), history.getSystemArea(), + history.getKey()); + } + + } + + protected boolean isEnabled() + { + return getConfigurationService().getConfiguration().getBoolean(getEnabledKey(), false); + } + + protected abstract String getEnabledKey(); + + protected abstract void recordHistory(final MonitorHistoryData history); + + protected ConfigurationService getConfigurationService() + { + return configurationService; + } + + @Required + public void setConfigurationService(final ConfigurationService configurationService) + { + this.configurationService = configurationService; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/impl/CompoundMonitorRecorder.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/impl/CompoundMonitorRecorder.java new file mode 100644 index 0000000..b29194a --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/impl/CompoundMonitorRecorder.java @@ -0,0 +1,39 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.impl; + +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorRecorder; +import org.springframework.beans.factory.annotation.Required; + +import java.util.List; + +public class CompoundMonitorRecorder implements MonitorRecorder +{ + private List recorders; + + @Override + public void record(final MonitorHistoryData history) + { + getRecorders().forEach(r -> r.record(history)); + } + + protected List getRecorders() + { + return recorders; + } + + @Required + public void setRecorders(final List recorders) + { + this.recorders = recorders; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/impl/DefaultMonitorService.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/impl/DefaultMonitorService.java new file mode 100644 index 0000000..683b621 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/impl/DefaultMonitorService.java @@ -0,0 +1,191 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.impl; + +import de.hybris.platform.cloud.commons.services.monitor.*; +import de.hybris.platform.core.Registry; +import org.slf4j.helpers.MessageFormatter; +import org.springframework.beans.factory.annotation.Required; + +import java.util.Date; +import java.util.LinkedList; +import java.util.List; +import java.util.Optional; + +public class DefaultMonitorService implements MonitorService +{ + private final ThreadLocal monitorHistory = new ThreadLocal<>(); + private MonitorRecorder monitorRecorder; + private MonitorHistoryRestorer resumeMonitorRestorer; + private MonitorHistoryFactory historyFactory; + + @Override + public MonitorHistory begin(final SystemArea area, final String key) + { + final DefaultMonitorHistory history = new DefaultMonitorHistory(getHistoryFactory().create(area, key)); + monitorHistory.set(history); + return history; + } + + @Override + public Optional current() + { + return Optional.ofNullable(monitorHistory.get()); + } + + @Override + public MonitorHistory resume(final SystemArea area, final String key) + { + final MonitorHistoryData history = getResumeMonitorRestorer().restore(area, key); + final DefaultMonitorHistory historyMonitor = new DefaultMonitorHistory(history); + monitorHistory.set(historyMonitor); + return historyMonitor; + } + + protected String formatMessage(final String message, final Object[] params) + { + return MessageFormatter.arrayFormat(message, params).getMessage(); + } + + protected int getClusterId() + { + return Registry.getClusterID(); + } + + protected MonitorRecorder getMonitorRecorder() + { + return monitorRecorder; + } + + @Required + public void setMonitorRecorder(final MonitorRecorder monitorRecorder) + { + this.monitorRecorder = monitorRecorder; + } + + protected MonitorHistoryRestorer getResumeMonitorRestorer() + { + return resumeMonitorRestorer; + } + + @Required + public void setResumeMonitorRestorer(final MonitorHistoryRestorer resumeMonitorRestorer) + { + this.resumeMonitorRestorer = resumeMonitorRestorer; + } + + protected MonitorHistoryFactory getHistoryFactory() + { + return historyFactory; + } + + @Required + public void setHistoryFactory(final MonitorHistoryFactory historyFactory) + { + this.historyFactory = historyFactory; + } + + class DefaultMonitorHistory implements MonitorHistory + { + private final MonitorHistoryData history; + private final LinkedList actions; + + public DefaultMonitorHistory(final MonitorHistoryData history) + { + this.history = history; + this.actions = new LinkedList<>(); + } + + @Override + public MonitorHistory addAction(final String code, final Status status, final Date start, final Date end, final String message, final Object... args) + { + actions.add( + MonitorHistoryEntryActionData.builder() + .withCode(code) + .withStatus(status) + .withStarted(start) + .withEnded(end) + .withDuration(calculateDuration(start, end)) + .withMessage(formatMessage(message, args)) + .build()); + + return this; + } + + @Override + public DefaultMonitorHistory stepSucceeded(final Step step, final Date start, final Date end, final String message, final Object... args) + { + return add(step, Status.SUCCESS, start, end, null, message, args); + } + + @Override + public DefaultMonitorHistory stepFailed(final Step step, final Date start, final Date end, final Throwable ex, final String message, final Object... args) + { + return add(step, Status.FAILURE, start, end, ex, message, args); + } + + private DefaultMonitorHistory add(final Step step, final Status status, final Date start, final Date end, final Throwable ex, final String message, final Object... args) + { + final MonitorHistoryData hist = getHistory(); + hist.setException(ex); + hist.setExceptionMessage(ex == null ? null : ex.getMessage()); + hist.getEntries().add( + MonitorHistoryEntryData.builder() + .withStep(step) + .withStatus(Status.SUCCESS.equals(status) && haveFailedActions(this.actions) ? Status.WARNING : status) + .withStarted(start) + .withEnded(end) + .withDuration(calculateDuration(start, end)) + .withMessage(formatMessage(message, args)) + .withNodeId(getClusterId()) + .withActions(new LinkedList<>(this.actions)) + .build()); + this.actions.clear(); + return this; + } + + private Long calculateDuration(final Date start, final Date end) + { + return start == null || end == null ? null : end.getTime() - start.getTime(); + } + + private boolean haveFailedActions(final List actions) + { + return actions.stream().map(MonitorHistoryEntryActionData::getStatus).anyMatch(s -> (Status.FAILURE.equals(s) || Status.WARNING.equals(s))); + } + + @Override + public void checkpoint() + { + getMonitorRecorder().record(getHistory()); + monitorHistory.remove(); + } + + @Override + public void end(final Status status) + { + final MonitorHistoryData hist = getHistory(); + hist.setStatus(Status.SUCCESS.equals(status) && haveUnsuccessfulEntries(hist.getEntries()) ? Status.WARNING : status); + getMonitorRecorder().record(hist); + monitorHistory.remove(); + } + + private boolean haveUnsuccessfulEntries(final List actions) + { + return actions.stream().map(MonitorHistoryEntryData::getStatus).anyMatch(s -> (Status.FAILURE.equals(s) || Status.WARNING.equals(s))); + } + + protected MonitorHistoryData getHistory() + { + return this.history; + } + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/impl/UnsavedEntryMonitorEntryFilter.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/impl/UnsavedEntryMonitorEntryFilter.java new file mode 100644 index 0000000..1aad5e6 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/impl/UnsavedEntryMonitorEntryFilter.java @@ -0,0 +1,26 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.impl; + +import de.hybris.platform.cloud.commons.services.monitor.MonitorEntryFilter; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryData; + +/** + * @inheritDoc Filters for {@link MonitorHistoryEntryData} which have not yet been saved + */ +public class UnsavedEntryMonitorEntryFilter implements MonitorEntryFilter +{ + @Override + public boolean apply(final MonitorHistoryEntryData entry) + { + return entry.getPk() == null; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/job/MonitorHistoryMaintenanceCleanupStrategy.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/job/MonitorHistoryMaintenanceCleanupStrategy.java new file mode 100644 index 0000000..5a36e28 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/job/MonitorHistoryMaintenanceCleanupStrategy.java @@ -0,0 +1,140 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.job; + +import de.hybris.platform.cloud.commons.enums.MonitorStatus; +import de.hybris.platform.cloud.commons.model.MonitorHistoryDataModel; +import de.hybris.platform.cronjob.model.CronJobModel; +import de.hybris.platform.jobs.maintenance.MaintenanceCleanupStrategy; +import de.hybris.platform.servicelayer.config.ConfigurationService; +import de.hybris.platform.servicelayer.model.ModelService; +import de.hybris.platform.servicelayer.search.FlexibleSearchQuery; +import de.hybris.platform.servicelayer.time.TimeService; +import org.apache.commons.configuration.Configuration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Required; + +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; + +/** + * A {@link MaintenanceCleanupStrategy} implementation to locate and process {@link MonitorHistoryDataModel}'s. + */ +public class MonitorHistoryMaintenanceCleanupStrategy implements MaintenanceCleanupStrategy { + + private static final Logger LOG = LoggerFactory.getLogger(MonitorHistoryMaintenanceCleanupStrategy.class); + private static final int DEFAULT_THRESHOLD_DAYS = 7; + private static final String TEMPLATE = "SELECT {%s} FROM {%s} WHERE {%s} < ?threshold AND {%s} %s ?status"; + protected static final String STATUS_PARAM = "status"; + protected static final String THRESHOLD_PARAM = "threshold"; + + private ConfigurationService configurationService; + private ModelService modelService; + private TimeService timeService; + private MonitorStatus status; + private String statusCondition; + private String thresholdConfigKey; + + @Override + public FlexibleSearchQuery createFetchQuery(final CronJobModel cronJob) { + + final HashMap params = new HashMap<>(); + params.put(MonitorHistoryMaintenanceCleanupStrategy.STATUS_PARAM, this.getStatus()); + params.put(MonitorHistoryMaintenanceCleanupStrategy.THRESHOLD_PARAM, this.calculateThreshold()); + + final String queryString = String.format(TEMPLATE, + MonitorHistoryDataModel.PK, + MonitorHistoryDataModel._TYPECODE, + MonitorHistoryDataModel.MODIFIEDTIME, + MonitorHistoryDataModel.STATUS, + this.getStatusCondition() + ); + + return new FlexibleSearchQuery(queryString, params); + } + + protected Date calculateThreshold() { + final Calendar calendar = Calendar.getInstance(); + calendar.setTime(this.getTimeService().getCurrentTime()); + int thresholdDays = this.getThresholdDays(); + calendar.add(Calendar.DATE, -thresholdDays); + return calendar.getTime(); + } + + protected int getThresholdDays() { + final ConfigurationService configService = this.getConfigurationService(); + final Configuration config = configService.getConfiguration(); + return config.getInt(this.getThresholdConfigKey(), MonitorHistoryMaintenanceCleanupStrategy.DEFAULT_THRESHOLD_DAYS); + } + + @Override + public void process(final List elements) { + LOG.info("Removing " + elements.size()); + this.getModelService().removeAll(elements); + } + + protected ConfigurationService getConfigurationService() { + return this.configurationService; + } + + @Required + public void setConfigurationService(final ConfigurationService configurationService) { + this.configurationService = configurationService; + } + + protected ModelService getModelService() { + return this.modelService; + } + + @Required + public void setModelService(final ModelService modelService) { + this.modelService = modelService; + } + + protected TimeService getTimeService() { + return this.timeService; + } + + @Required + public void setTimeService(final TimeService timeService) { + this.timeService = timeService; + } + + protected MonitorStatus getStatus() { + return this.status; + } + + @Required + public void setStatus(final MonitorStatus status) { + this.status = status; + } + + protected String getStatusCondition() { + return this.statusCondition; + } + + @Required + public void setStatusCondition(final String statusCondition) { + this.statusCondition = statusCondition; + } + + protected String getThresholdConfigKey() { + return this.thresholdConfigKey; + } + + @Required + public void setThresholdConfigKey(final String thresholdConfigKey) { + this.thresholdConfigKey = thresholdConfigKey; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/logging/LoggingMonitorRecorder.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/logging/LoggingMonitorRecorder.java new file mode 100644 index 0000000..b3c1fc0 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/logging/LoggingMonitorRecorder.java @@ -0,0 +1,110 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.logging; + +import de.hybris.platform.cloud.commons.constants.CloudCommonsConstants; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryData; +import de.hybris.platform.cloud.commons.services.monitor.Status; +import de.hybris.platform.cloud.commons.services.monitor.impl.AbstractConfigEnabledMonitorRecorder; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.core.convert.converter.Converter; + +import java.util.List; + +/** + * @inheritDoc + * Record {@link MonitorHistoryData} into Log files + */ +public class LoggingMonitorRecorder extends AbstractConfigEnabledMonitorRecorder +{ + private Converter historyConverter; + private List infoStatuses; + private List warnStatuses; + private List errorStatuses; + + @Override + protected String getEnabledKey() + { + return CloudCommonsConstants.MONITORING_LOGGING_ENABLED; + } + + @Override + protected void recordHistory(final MonitorHistoryData history) + { + final LogData logData = getHistoryConverter().convert(history); + + final Status status = history.getStatus(); + + if (getInfoStatuses().contains(status)) + { + log.info(logData.getProcessedMessage()); + } + else if (getWarnStatuses().contains(status)) + { + log.warn(logData.getProcessedMessage()); + } + else if (getErrorStatuses().contains(status)) + { + if (logData.getException() != null) + { + log.error(logData.getProcessedMessage(), logData.getException()); + } + else + { + log.error(logData.getProcessedMessage()); + } + } + } + + protected Converter getHistoryConverter() + { + return historyConverter; + } + + @Required + public void setHistoryConverter(final Converter historyConverter) + { + this.historyConverter = historyConverter; + } + + protected List getInfoStatuses() + { + return infoStatuses; + } + + @Required + public void setInfoStatuses(final List infoStatuses) + { + this.infoStatuses = infoStatuses; + } + + protected List getErrorStatuses() + { + return errorStatuses; + } + + @Required + public void setErrorStatuses(final List errorStatuses) + { + this.errorStatuses = errorStatuses; + } + + protected List getWarnStatuses() + { + return warnStatuses; + } + + @Required + public void setWarnStatuses(final List warnStatuses) + { + this.warnStatuses = warnStatuses; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/logging/converter/AbstractMonitorConverter.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/logging/converter/AbstractMonitorConverter.java new file mode 100644 index 0000000..8cb669f --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/logging/converter/AbstractMonitorConverter.java @@ -0,0 +1,45 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.logging.converter; + +import java.util.Date; + +import org.joda.time.DateTime; +import org.joda.time.format.DateTimeFormatter; +import org.slf4j.helpers.MessageFormatter; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.core.convert.converter.Converter; + +public abstract class AbstractMonitorConverter implements Converter +{ + private DateTimeFormatter dateTimeFormatter; + + protected String formatMessage(final String message, final Object... params) + { + return MessageFormatter.arrayFormat(message, params).getMessage(); + } + + protected String formatDate(final Date date) + { + return date == null ? null : getDateTimeFormatter().print(new DateTime(date)); + } + + protected DateTimeFormatter getDateTimeFormatter() + { + return dateTimeFormatter; + } + + @Required + public void setDateTimeFormatter(final DateTimeFormatter dateTimeFormatter) + { + this.dateTimeFormatter = dateTimeFormatter; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/logging/converter/MonitorHistoryDataConverter.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/logging/converter/MonitorHistoryDataConverter.java new file mode 100644 index 0000000..d9633a0 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/logging/converter/MonitorHistoryDataConverter.java @@ -0,0 +1,54 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.logging.converter; + +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryData; +import de.hybris.platform.cloud.commons.services.monitor.logging.LogData; + +import org.springframework.beans.factory.annotation.Required; +import org.springframework.core.convert.converter.Converter; + +public class MonitorHistoryDataConverter extends AbstractMonitorConverter +{ + private Converter entryConverter; + + @Override + public LogData convert(final MonitorHistoryData history) + { + final StringBuilder sb = new StringBuilder(); + + sb.append(formatMessage("{}:{} Status [{}]", history.getSystemArea(), history.getKey(), history.getStatus())); + + for (final MonitorHistoryEntryData e : history.getEntries()) + { + sb.append(System.lineSeparator()); + sb.append(getEntryConverter().convert(e)); + } + + return LogData.builder() + .withProcessedMessage(sb.toString()) + .withExceptionMessage(history.getExceptionMessage()) + .withException(history.getException()) + .build(); + } + + protected Converter getEntryConverter() + { + return entryConverter; + } + + @Required + public void setEntryConverter(final Converter entryConverter) + { + this.entryConverter = entryConverter; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/logging/converter/MonitorHistoryEntryActionDataConverter.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/logging/converter/MonitorHistoryEntryActionDataConverter.java new file mode 100644 index 0000000..26f8378 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/logging/converter/MonitorHistoryEntryActionDataConverter.java @@ -0,0 +1,26 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.logging.converter; + +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryActionData; + +public class MonitorHistoryEntryActionDataConverter extends AbstractMonitorConverter +{ + @Override + public String convert(final MonitorHistoryEntryActionData e) + { + return formatMessage("Code [{}] Status [{}] Started [{}] Ended [{}] Duration [{}]ms Message [{}]", + e.getCode(), e.getStatus(), + formatDate(e.getStarted()), formatDate(e.getEnded()), e.getDuration(), + e.getMessage() + ); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/logging/converter/MonitorHistoryEntryDataConverter.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/logging/converter/MonitorHistoryEntryDataConverter.java new file mode 100644 index 0000000..34f1a93 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/logging/converter/MonitorHistoryEntryDataConverter.java @@ -0,0 +1,62 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.logging.converter; + +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryActionData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryData; + +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.core.convert.converter.Converter; + +public class MonitorHistoryEntryDataConverter extends AbstractMonitorConverter +{ + private static final String TAB = "\t"; + + private Converter entryActionDataConverter; + + @Override + public String convert(final MonitorHistoryEntryData e) + { + final StringBuilder sb = new StringBuilder( + formatMessage("Step [{}] Node [{}] Status [{}] Started [{}] Ended [{}] Duration [{}]ms Message [{}]", + e.getStep(), e.getNodeId(), e.getStatus(), + formatDate(e.getStarted()), formatDate(e.getEnded()), e.getDuration(), + e.getMessage())); + + if (CollectionUtils.isEmpty(e.getActions())) + { + sb.append(" Actions [none]"); + } + else + { + sb.append(" Actions ["); + for (final MonitorHistoryEntryActionData action : e.getActions()) + { + sb.append(System.lineSeparator()).append(TAB).append(getEntryActionDataConverter().convert(action)); + } + sb.append(System.lineSeparator()).append("]"); + } + + return sb.toString(); + } + + protected Converter getEntryActionDataConverter() + { + return entryActionDataConverter; + } + + @Required + public void setEntryActionDataConverter(final Converter entryActionDataConverter) + { + this.entryActionDataConverter = entryActionDataConverter; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/metric/AbstractMetricRecorder.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/metric/AbstractMetricRecorder.java new file mode 100644 index 0000000..86699c4 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/metric/AbstractMetricRecorder.java @@ -0,0 +1,105 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.metric; + +import com.codahale.metrics.MetricRegistry; + +import de.hybris.platform.cloud.commons.constants.CloudCommonsConstants; +import de.hybris.platform.cloud.commons.services.monitor.*; +import de.hybris.platform.cloud.commons.services.monitor.impl.AbstractConfigEnabledMonitorRecorder; +import de.hybris.platform.core.Registry; + +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Required; + +import java.text.MessageFormat; +import java.util.Objects; + +public abstract class AbstractMetricRecorder extends AbstractConfigEnabledMonitorRecorder +{ + private static final String AREA_METRIC_KEY_TEMPLATE = String.format("tenant={0},extension=%s,area={1},name={2}", CloudCommonsConstants.EXTENSIONNAME); + private static final String STEP_METRIC_KEY_TEMPLATE = String.format("tenant={0},extension=%s,area={1},step={2},name={3}", CloudCommonsConstants.EXTENSIONNAME); + + private MetricRegistry metricRegistry; + private MonitorEntryFilter entryFilter; + + @Override + protected void recordHistory(final MonitorHistoryData history) + { + processHistory(history); + if (CollectionUtils.isNotEmpty(history.getEntries())) + { + final MonitorEntryFilter filter = getEntryFilter(); + history.getEntries().stream() + .filter(Objects::nonNull) + .filter(filter::apply) + .forEach(e -> processHistoryEntry(history, e)); + } + } + + protected abstract void processHistory(final MonitorHistoryData history); + + protected abstract void processHistoryEntry(final MonitorHistoryData history, final MonitorHistoryEntryData entry); + + protected String getAreaMetricName(final SystemArea module, final String name, final String... names) + { + return MessageFormat.format(AREA_METRIC_KEY_TEMPLATE, getTenantId(), module.name(), MetricRegistry.name(name, names)); + } + + protected String getStepMetricName(final SystemArea module, final Step step, final String name, final String... names) + { + return MessageFormat.format(STEP_METRIC_KEY_TEMPLATE, getTenantId(), module.name(), step.name(), MetricRegistry.name(name, names)); + } + + protected Long getDuration(final SystemArea area, final MonitorHistoryEntryData entryData) + { + if (entryData.getDuration() != null) + { + return entryData.getDuration(); + } + + if (entryData.getStarted() != null && entryData.getEnded() != null) + { + return entryData.getEnded().getTime() - entryData.getStarted().getTime(); + } + + log.debug("entry for Area [{}] Step [{}] Status [{}] had no duration or start/end times", area, entryData.getStep(), entryData.getStatus()); + return null; + } + + protected String getTenantId() + { + return Registry.getCurrentTenant().getTenantID(); + } + + protected MetricRegistry getMetricRegistry() + { + return metricRegistry; + } + + @Required + public void setMetricRegistry(final MetricRegistry metricRegistry) + { + this.metricRegistry = metricRegistry; + } + + + protected MonitorEntryFilter getEntryFilter() + { + return entryFilter; + } + + @Required + public void setEntryFilter(final MonitorEntryFilter entryFilter) + { + this.entryFilter = entryFilter; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/metric/CounterMetricRecorder.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/metric/CounterMetricRecorder.java new file mode 100644 index 0000000..03eb251 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/metric/CounterMetricRecorder.java @@ -0,0 +1,60 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.metric; + +import de.hybris.platform.cloud.commons.constants.CloudCommonsConstants; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryData; + +import java.util.function.Consumer; + +import com.codahale.metrics.Counter; + +/** + * @inheritDoc + * Records {@link MonitorHistoryData} as Metric Registry Counter data + */ +public class CounterMetricRecorder extends AbstractMetricRecorder +{ + private static final String METRIC_TYPE = "counter"; + + @Override + protected String getEnabledKey() + { + return CloudCommonsConstants.MONITORING_METRIC_COUNTER_ENABLED; + } + + @Override + protected void processHistory(final MonitorHistoryData history) + { + final String key = getAreaMetricName(history.getSystemArea(), history.getStatus().name(), METRIC_TYPE); + adjustMetric(key, Counter::inc); + + if (history.getStatusWhenResumed() != null) + { + final String checkpointKey = getAreaMetricName(history.getSystemArea(), history.getStatusWhenResumed().name(), METRIC_TYPE); + adjustMetric(checkpointKey, Counter::dec); + } + } + + @Override + protected void processHistoryEntry(final MonitorHistoryData history, final MonitorHistoryEntryData entry) + { + final String key = getStepMetricName(history.getSystemArea(), entry.getStep(), entry.getStatus().name(), METRIC_TYPE); + adjustMetric(key, Counter::inc); + } + + protected void adjustMetric(final String key, final Consumer apply) + { + final Counter counter = getMetricRegistry().counter(key); + apply.accept(counter); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/metric/HistogramMetricRecorder.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/metric/HistogramMetricRecorder.java new file mode 100644 index 0000000..25c14e5 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/metric/HistogramMetricRecorder.java @@ -0,0 +1,55 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.metric; + +import com.codahale.metrics.Histogram; +import de.hybris.platform.cloud.commons.constants.CloudCommonsConstants; +import de.hybris.platform.cloud.commons.services.monitor.*; + +/** + * @inheritDoc + * Records {@link MonitorHistoryData} as Metric Registry Histogram data + */ +public class HistogramMetricRecorder extends AbstractMetricRecorder +{ + private static final String METRIC_TYPE = "histogram"; + + @Override + protected String getEnabledKey() + { + return CloudCommonsConstants.MONITORING_METRIC_HISTOGRAM_ENABLED; + } + + @Override + protected void processHistory(final MonitorHistoryData history) + { + // Nothing to do + } + + @Override + protected void processHistoryEntry(final MonitorHistoryData history, final MonitorHistoryEntryData entry) + { + final SystemArea area = history.getSystemArea(); + final Long duration = getDuration(area, entry); + final Step step = entry.getStep(); + final Status status = entry.getStatus(); + if (duration != null) + { + final String key = getStepMetricName(area, step, status.name(), METRIC_TYPE); + final Histogram histogram = getMetricRegistry().histogram(key); + histogram.update(duration); + } + else + { + log.debug("History Entry for Area [{}] Key [{}] Step [{}] Status [{}] had no duration so cannot log", area, history.getKey(), step, status); + } + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/metric/TimerMetricRecorder.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/metric/TimerMetricRecorder.java new file mode 100644 index 0000000..d7fb117 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/services/monitor/metric/TimerMetricRecorder.java @@ -0,0 +1,57 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.metric; + +import com.codahale.metrics.Timer; +import de.hybris.platform.cloud.commons.constants.CloudCommonsConstants; +import de.hybris.platform.cloud.commons.services.monitor.*; + +import java.util.concurrent.TimeUnit; + +/** + * @inheritDoc + * Records {@link MonitorHistoryData} as Metric Registry Timer data + */ +public class TimerMetricRecorder extends AbstractMetricRecorder +{ + private static final String METRIC_TYPE = "timer"; + + @Override + protected String getEnabledKey() + { + return CloudCommonsConstants.MONITORING_METRIC_TIMER_ENABLED; + } + + @Override + protected void processHistory(final MonitorHistoryData history) + { + // Nothing to do + } + + @Override + protected void processHistoryEntry(final MonitorHistoryData history, final MonitorHistoryEntryData entry) + { + final SystemArea area = history.getSystemArea(); + final Long duration = getDuration(area, entry); + final Step step = entry.getStep(); + final Status status = entry.getStatus(); + if (duration != null) + { + final String key = getStepMetricName(area, step, status.name(), METRIC_TYPE); + final Timer timer = getMetricRegistry().timer(key); + timer.update(duration, TimeUnit.MILLISECONDS); + } + else + { + log.debug("History Entry for Area [{}] Key [{}] Step [{}] Status [{}] had no duration so cannot log", area, history.getKey(), step, status); + } + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/beans/factory/config/impl/SmartLifecycleRoleBeanPostProcessor.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/beans/factory/config/impl/SmartLifecycleRoleBeanPostProcessor.java new file mode 100644 index 0000000..5bafa53 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/beans/factory/config/impl/SmartLifecycleRoleBeanPostProcessor.java @@ -0,0 +1,82 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.beans.factory.config.impl; + +import de.hybris.platform.cloud.commons.spring.context.SmartLifecycleRole; +import org.slf4j.Logger; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.BeanFactoryAware; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.SmartInitializingSingleton; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.integration.context.IntegrationContextUtils; +import org.springframework.integration.support.SmartLifecycleRoleController; +import org.springframework.util.Assert; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; + +import static org.slf4j.LoggerFactory.getLogger; + +/** + * A {@link BeanPostProcessor} implementation to ensure all beans implementing {@link SmartLifecycleRole} + * are registered with the {@link SmartLifecycleRoleController} + * + */ +public class SmartLifecycleRoleBeanPostProcessor + implements InitializingBean, SmartInitializingSingleton, BeanPostProcessor, BeanFactoryAware +{ + private static final Logger LOG = getLogger(SmartLifecycleRoleBeanPostProcessor.class); + + private static final String CONTROLLER_BEAN_NAME = IntegrationContextUtils.INTEGRATION_LIFECYCLE_ROLE_CONTROLLER; + + private final MultiValueMap lazyLifecycleRoles = new LinkedMultiValueMap<>(); + + private BeanFactory beanFactory; + + @Override + public void afterPropertiesSet() + { + Assert.notNull(this.beanFactory, "BeanFactory must not be null"); + } + + @Override + public void afterSingletonsInstantiated() + { + final SmartLifecycleRoleController controller + = this.beanFactory.getBean(CONTROLLER_BEAN_NAME, SmartLifecycleRoleController.class); + this.lazyLifecycleRoles.forEach(controller::addLifecyclesToRole); + } + + @Override + public Object postProcessBeforeInitialization(final Object bean, final String beanName) throws BeansException + { + return bean; + } + + @Override + public Object postProcessAfterInitialization(final Object bean, final String beanName) throws BeansException + { + if (bean instanceof SmartLifecycleRole) + { + final String role = ((SmartLifecycleRole) bean).getRole(); + LOG.debug("Processing bean with name [{}] role [{}]", beanName, role); + lazyLifecycleRoles.add(role, beanName); + } + return bean; + } + + @Override + public void setBeanFactory(final BeanFactory beanFactory) + { + this.beanFactory = beanFactory; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/context/SmartLifecycleRole.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/context/SmartLifecycleRole.java new file mode 100644 index 0000000..c93cfda --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/context/SmartLifecycleRole.java @@ -0,0 +1,22 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.context; + +import org.springframework.context.SmartLifecycle; + +/** + * A {@link SmartLifecycle} that has a role. + * + */ +public interface SmartLifecycleRole extends SmartLifecycle +{ + String getRole(); +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/FileNameComparatorAdatper.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/FileNameComparatorAdatper.java new file mode 100644 index 0000000..e1ca2b9 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/FileNameComparatorAdatper.java @@ -0,0 +1,33 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.integration.file.comparators; + +import java.io.File; +import java.util.Comparator; + +/*** + * Adapts a {@link Comparator} of {@link NamedObject}s so that it can compare {@link File} objects; + */ +public class FileNameComparatorAdatper implements Comparator +{ + private final Comparator comparator; + + public FileNameComparatorAdatper(final Comparator comparator) + { + this.comparator = comparator; + } + + public int compare(final File o1, final File o2) + { + return comparator.compare(o1::getName, o2::getName); + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/FileTimestampComparatorAdapter.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/FileTimestampComparatorAdapter.java new file mode 100644 index 0000000..f84d28e --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/FileTimestampComparatorAdapter.java @@ -0,0 +1,33 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.integration.file.comparators; + +import java.io.File; +import java.util.Comparator; + +/*** + * Adapts a {@link Comparator} of {@link TimestampedObject}s so that it can compare {@link File} objects; + */ +public class FileTimestampComparatorAdapter implements Comparator +{ + private final Comparator comparator; + + public FileTimestampComparatorAdapter(final Comparator comparator) + { + this.comparator = comparator; + } + + public int compare(final File o1, final File o2) + { + return comparator.compare(o1::lastModified, o2::lastModified); + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/NameComparator.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/NameComparator.java new file mode 100644 index 0000000..0c38cad --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/NameComparator.java @@ -0,0 +1,52 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.integration.file.comparators; + +import java.util.Comparator; +import java.util.Optional; +import java.util.regex.Pattern; + +/** + * {@link Comparator} implementation that enables sorting of objects based on the object's name + */ +public class NameComparator implements Comparator +{ + private final Pattern pattern; + private final String nameGroup; + + public NameComparator(final String pattern, final String nameGroup) + { + this.pattern = Pattern.compile(pattern); + this.nameGroup = nameGroup; + } + + @Override + public int compare(final NamedObject o1, final NamedObject o2) + { + return getName(o1).compareTo(getName(o2)); + } + + /** + * Retrieves the name for an object, excluding sequence numbers. + * + * @param namedObject the object to get sequence from + * @return the part of the object's name excluding sequence number, if one exists, otherwise the full name + */ + protected String getName(final NamedObject namedObject) + { + final String name = namedObject.getName(); + + return Optional.of(pattern.matcher(name)) + .filter(m -> m.matches() && m.groupCount() > 0) + .map(m -> m.group(nameGroup)) + .orElse(""); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/NamePrefixComparator.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/NamePrefixComparator.java new file mode 100644 index 0000000..1656ac1 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/NamePrefixComparator.java @@ -0,0 +1,55 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.integration.file.comparators; + +import com.google.common.base.Splitter; + +import java.util.Comparator; +import java.util.List; + +/** + * {@link Comparator} implementation that enables sorting of objects based on a name prefix + */ +public class NamePrefixComparator implements Comparator +{ + private static final Splitter SPLITTER = Splitter.on(",").trimResults().omitEmptyStrings(); + private static final Integer DEFAULT_PRIORITY = Integer.MAX_VALUE; + + private final List prefixPriority; + + public NamePrefixComparator(final String namePrefixPriority) + { + prefixPriority = SPLITTER.splitToList(namePrefixPriority); + } + + @Override + public int compare(final NamedObject o1, final NamedObject o2) + { + return getPriority(o1).compareTo(getPriority(o2)); + } + + /** + * Retrieves the priority for a named object. + * + * @param namedObject the object to get priority for + * @return the configured priority, if one exists, otherwise the default priority + */ + protected Integer getPriority(final NamedObject namedObject) + { + final String name = namedObject.getName(); + return this.prefixPriority.stream() + .filter(name::startsWith) + .map(this.prefixPriority::indexOf) + .findFirst() + .orElse(DEFAULT_PRIORITY); + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/NameSequenceComparator.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/NameSequenceComparator.java new file mode 100644 index 0000000..0963c89 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/NameSequenceComparator.java @@ -0,0 +1,97 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.integration.file.comparators; + +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; +import org.slf4j.Logger; + +import java.util.Comparator; +import java.util.Optional; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static org.slf4j.LoggerFactory.getLogger; + +/** + * {@link Comparator} implementation that enables sorting of objects based on the sequence number within the object's name + */ +public class NameSequenceComparator implements Comparator +{ + private static final Logger LOG = getLogger(NameSequenceComparator.class); + + private static final Long DEFAULT_PRIORITY = Long.MAX_VALUE; + private final Pattern pattern; + private final String sequenceGroup; + + public NameSequenceComparator(final String pattern, final String sequenceGroup) + { + this.pattern = Pattern.compile(pattern); + this.sequenceGroup = sequenceGroup; + } + + @Override + public int compare(final NamedObject o1, final NamedObject o2) + { + return getSequence(o1).compareTo(getSequence(o2)); + } + + /** + * Retrieves the sequence for a object. + * + * @param namedObject the object to get sequence from + * @return the part of the object's name identified as sequence number, if one exists, otherwise the default priority + */ + protected Long getSequence(final NamedObject namedObject) + { + final String name = namedObject.getName(); + + return Optional.of(pattern.matcher(name)) + .map(m->getSequence(m, sequenceGroup)) + .map(NameSequenceComparator::getLong) + .orElse(DEFAULT_PRIORITY); + } + + protected String getSequence(final Matcher matcher, final String group) + { + if(matcher.matches() && matcher.groupCount() > 0) + { + try + { + return matcher.group(group); + } + catch(final NumberFormatException ex) + { + LOG.debug("Unable to find a sequence in the filename [{}].", matcher.toString()); + return null; + } + } + return null; + } + + protected static Long getLong(final String sequenceNo) + { + if(NumberUtils.isParsable(sequenceNo) && !StringUtils.contains(sequenceNo, "-") && + !StringUtils.contains(sequenceNo, ".")) + { + try + { + return Long.valueOf(sequenceNo); + } + catch(final NumberFormatException ex) + { + LOG.info("Unable to cast [{}] to a long sequence, it maybe a timestamp.", sequenceNo); + return null; + } + } + return null; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/NamedObject.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/NamedObject.java new file mode 100644 index 0000000..4299158 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/NamedObject.java @@ -0,0 +1,19 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.integration.file.comparators; + +/*** + * Provides an object's name + */ +public interface NamedObject +{ + String getName(); +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/TimestampComparator.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/TimestampComparator.java new file mode 100644 index 0000000..0a9e05e --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/TimestampComparator.java @@ -0,0 +1,25 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.integration.file.comparators; + +import java.util.Comparator; + +/** + * {@link Comparator} implementation that enables sorting of objects based on a timestamp + */ +public class TimestampComparator implements Comparator +{ + @Override + public int compare(final TimestampedObject o1, final TimestampedObject o2) + { + return Long.compare(o1.getTimestamp(), o2.getTimestamp()); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/TimestampedObject.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/TimestampedObject.java new file mode 100644 index 0000000..0f2efa7 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/comparators/TimestampedObject.java @@ -0,0 +1,19 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.integration.file.comparators; + +/*** + * Provides an object's timestamp + */ +public interface TimestampedObject +{ + long getTimestamp(); +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/filters/ChainFileListFilter.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/filters/ChainFileListFilter.java new file mode 100644 index 0000000..7e86b34 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/file/filters/ChainFileListFilter.java @@ -0,0 +1,59 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.integration.file.filters; + +import org.springframework.integration.file.filters.CompositeFileListFilter; +import org.springframework.integration.file.filters.FileListFilter; +import org.springframework.util.Assert; + +import java.lang.reflect.Array; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +/** + * A copy of {@link org.springframework.integration.file.filters.ChainFileListFilter} with a public + * constructor that accepts a list of file filters. + * + * @param The type that will be filtered. + */ +public class ChainFileListFilter extends CompositeFileListFilter +{ + + public ChainFileListFilter() + { + super(); + } + + public ChainFileListFilter(final Collection> fileFilters) + { + super(fileFilters); + } + + @Override + public List filterFiles(final F[] files) + { + Assert.notNull(files, "'files' should not be null"); + List leftOver = Arrays.asList(files); + for (final FileListFilter fileFilter : this.fileFilters) + { + if (leftOver.isEmpty()) + { + break; + } + @SuppressWarnings("unchecked") final F[] fileArray = + leftOver.toArray((F[]) Array.newInstance(leftOver.get(0).getClass(), leftOver.size())); + leftOver = fileFilter.filterFiles(fileArray); + } + return leftOver; + } + +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/metadata/ExpiringSimpleMetadataStore.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/metadata/ExpiringSimpleMetadataStore.java new file mode 100644 index 0000000..f8c7273 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/metadata/ExpiringSimpleMetadataStore.java @@ -0,0 +1,71 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.integration.metadata; + +import com.google.common.cache.CacheBuilder; +import org.springframework.integration.metadata.ConcurrentMetadataStore; +import org.springframework.integration.metadata.MetadataStore; + +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.TimeUnit; + +/** + * Simple implementation of {@link MetadataStore} that uses a {@link com.google.common.cache.Cache} for the data store. + * The metadata will not be persisted between application restarts and will be evicted once the ttl expires or the max + * size is reached. + */ +public class ExpiringSimpleMetadataStore implements ConcurrentMetadataStore +{ + + private final ConcurrentMap metadata; + + public ExpiringSimpleMetadataStore(final long maxSize, final long ttl) + { + this.metadata = CacheBuilder + .newBuilder() + .concurrencyLevel(1) + .expireAfterWrite(ttl, TimeUnit.MILLISECONDS) + .maximumSize(maxSize) + .build() + .asMap(); + } + + @Override + public void put(final String key, final String value) + { + this.metadata.put(key, value); + } + + @Override + public String get(final String key) + { + return (String) this.metadata.get(key); + } + + @Override + public String remove(final String key) + { + return (String) this.metadata.remove(key); + } + + @Override + public String putIfAbsent(final String key, final String value) + { + return (String) this.metadata.putIfAbsent(key, value); + } + + @Override + public boolean replace(final String key, final String oldValue, final String newValue) + { + return this.metadata.replace(key, oldValue, newValue); + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/metadata/HybrisMetadataStore.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/metadata/HybrisMetadataStore.java new file mode 100644 index 0000000..efb1114 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/metadata/HybrisMetadataStore.java @@ -0,0 +1,249 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.integration.metadata; + +import com.google.common.collect.ImmutableMap; +import de.hybris.platform.cloud.commons.model.MetadataStoreEntryModel; +import de.hybris.platform.core.Registry; +import de.hybris.platform.servicelayer.internal.dao.GenericDao; +import de.hybris.platform.servicelayer.model.ModelService; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.springframework.integration.metadata.ConcurrentMetadataStore; +import org.springframework.integration.support.locks.ExpirableLockRegistry; +import org.springframework.integration.support.locks.LockRegistry; +import org.springframework.messaging.MessagingException; +import org.springframework.util.Assert; + +import java.util.Optional; +import java.util.concurrent.locks.Lock; + +import static org.slf4j.LoggerFactory.getLogger; + +/** + * Implementation of {@link ConcurrentMetadataStore} using a Hybris Type system. + * Could potentially replace this implementation once update to spring integration 5.0 + * + * @see org.springframework.integration.jdbc.metadata.JdbcMetadataStore + * @see ConcurrentMetadataStore + */ +public class HybrisMetadataStore implements ConcurrentMetadataStore +{ + @SuppressWarnings("unused") + private static final Logger LOG = getLogger(HybrisMetadataStore.class); + + private static final String KEY_CANNOT_BE_NULL = "'key' cannot be null"; + private static final String UNABLE_TO_ACQUIRE_LOCK = "Unable to acquire lock for key "; + + private final ModelService modelService; + private final GenericDao metadataStoreDao; + private final LockRegistry lockRegistry; + private final String region; + private final long lockTtl; + + public HybrisMetadataStore(final ModelService modelService, + final GenericDao metadataStoreDao, + final LockRegistry lockRegistry, + final long lockTtl, + final String region) + { + Assert.notNull(modelService, "modelService cannot be null"); + Assert.notNull(metadataStoreDao, "metadataStoreDao cannot be null"); + Assert.notNull(lockRegistry, "lockRegistry cannot be null"); + Assert.isTrue(StringUtils.isNotBlank(region), "region cannot be null or blank"); + this.modelService = modelService; + this.metadataStoreDao = metadataStoreDao; + this.lockRegistry = lockRegistry; + this.lockTtl = lockTtl; + this.region = region; + } + + @Override + public void put(final String key, final String value) + { + Assert.notNull(key, KEY_CANNOT_BE_NULL); + Assert.notNull(value, "'value' cannot be null"); + final Lock lock = obtainLockObject(key); + if (lock.tryLock()) + { + try + { + createNewEntry(key, value); + } + finally + { + lock.unlock(); + } + } + else + { + throw new MessagingException(UNABLE_TO_ACQUIRE_LOCK + key); + } + } + + @Override + public String putIfAbsent(final String key, final String value) + { + Assert.notNull(key, KEY_CANNOT_BE_NULL); + Assert.notNull(value, "'value' cannot be null"); + final Lock lock = obtainLockObject(key); + if (lock.tryLock()) + { + try + { + return getCurrentEntry(key) + .map(MetadataStoreEntryModel::getValue) + .orElseGet(() -> { + createNewEntry(key, value); + /* + * @see {@link org.springframework.integration.file.filters.AbstractPersistentAcceptOnceFileListFilter#accept(java.lang.Object)} + * expects null where record was not in the store originally + */ + return null; + }); + } + finally + { + lock.unlock(); + } + } + else + { + throw new MessagingException(UNABLE_TO_ACQUIRE_LOCK + key); + } + } + + @Override + public boolean replace(final String key, final String oldValue, final String newValue) + { + Assert.notNull(key, KEY_CANNOT_BE_NULL); + Assert.notNull(oldValue, "'oldValue' cannot be null"); + Assert.notNull(newValue, "'newValue' cannot be null"); + final Lock lock = obtainLockObject(key); + if (lock.tryLock()) + { + try + { + return getCurrentEntry(key) + .filter(e -> StringUtils.equals(oldValue, e.getValue())) + .map(e -> { + LOG.debug("Update MetadataStoreEntry key [{}] oldValue [{}] newValue [{}]", key, oldValue, newValue); + e.setValue(newValue); + modelService.save(e); + return Boolean.TRUE; + }) + .orElse(Boolean.FALSE); + } + finally + { + lock.unlock(); + } + } + else + { + throw new MessagingException(UNABLE_TO_ACQUIRE_LOCK + key); + } + } + + @Override + public String get(final String key) + { + Assert.notNull(key, KEY_CANNOT_BE_NULL); + final Lock lock = obtainLockObject(key); + if (lock.tryLock()) + { + try + { + return getCurrentEntry(key) + .map(MetadataStoreEntryModel::getValue) + .orElse(null); + } + finally + { + lock.unlock(); + } + } + else + { + throw new MessagingException(UNABLE_TO_ACQUIRE_LOCK + key); + } + } + + @Override + public String remove(final String key) + { + Assert.notNull(key, KEY_CANNOT_BE_NULL); + final Lock lock = obtainLockObject(key); + if (lock.tryLock()) + { + try + { + return getCurrentEntry(key) + .map(e -> { + LOG.debug("Removing MetadataStoreEntry for key [{}]", key); + final String value = e.getValue(); + modelService.remove(e); + return value; + }) + .orElse(null); + } + finally + { + lock.unlock(); + } + } + else + { + throw new MessagingException(UNABLE_TO_ACQUIRE_LOCK + key); + } + } + + private Lock obtainLockObject(final String key) + { + // Expire locks according to TTL. + if (lockRegistry instanceof ExpirableLockRegistry) + { + ((ExpirableLockRegistry) lockRegistry).expireUnusedOlderThan(this.lockTtl); + } + return this.lockRegistry.obtain(key); + } + + private void createNewEntry(final String key, final String value) + { + LOG.debug("Creating new MetadataStoreEntry for key [{}] with value [{}]", key, value); + final MetadataStoreEntryModel entry = modelService.create(MetadataStoreEntryModel.class); + entry.setRegion(region); + entry.setKey(key); + entry.setValue(value); + modelService.save(entry); + } + + private Optional getCurrentEntry(final String key) + { + if (LOG.isDebugEnabled()) + { + LOG.debug("Check for current entry for key [{}] in region [{}] for node [{}]", key, region, Registry.getClusterID()); + } + + final ImmutableMap params = ImmutableMap.builder() + .put(MetadataStoreEntryModel.REGION, region) + .put(MetadataStoreEntryModel.KEY, key) + .build(); + + LOG.debug("Querying for MetadataStoreEntry for region [{}] value [{}]", region, key); + + return Optional.ofNullable(metadataStoreDao.find(params)) + .filter(CollectionUtils::isNotEmpty) + .map(s -> s.get(0)); + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/metadata/dao/impl/MetadataStoreEntryDao.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/metadata/dao/impl/MetadataStoreEntryDao.java new file mode 100644 index 0000000..cc7310c --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/metadata/dao/impl/MetadataStoreEntryDao.java @@ -0,0 +1,26 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.integration.metadata.dao.impl; + +import de.hybris.platform.cloud.commons.model.MetadataStoreEntryModel; +import de.hybris.platform.servicelayer.internal.dao.DefaultGenericDao; +import de.hybris.platform.servicelayer.internal.dao.GenericDao; + +/** + * {@link GenericDao} implementation to query for {@link MetadataStoreEntryModel} + */ +public class MetadataStoreEntryDao extends DefaultGenericDao +{ + public MetadataStoreEntryDao() + { + super(MetadataStoreEntryModel._TYPECODE); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/support/leader/LockRegistryLeaderInitiator.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/support/leader/LockRegistryLeaderInitiator.java new file mode 100644 index 0000000..dc53f3c --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/support/leader/LockRegistryLeaderInitiator.java @@ -0,0 +1,609 @@ +/* + * Copyright 2016-2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package de.hybris.platform.cloud.commons.spring.integration.support.leader; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.context.ApplicationEventPublisherAware; +import org.springframework.context.SmartLifecycle; +import org.springframework.integration.leader.Candidate; +import org.springframework.integration.leader.Context; +import org.springframework.integration.leader.DefaultCandidate; +import org.springframework.integration.leader.event.DefaultLeaderEventPublisher; +import org.springframework.integration.leader.event.LeaderEventPublisher; +import org.springframework.integration.leader.event.OnGrantedEvent; +import org.springframework.integration.leader.event.OnRevokedEvent; +import org.springframework.integration.support.locks.LockRegistry; +import org.springframework.scheduling.concurrent.CustomizableThreadFactory; +import org.springframework.util.Assert; + +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.locks.Lock; + +/** + * Note: This is a copy of + * {@link org.springframework.integration.support.leader.LockRegistryLeaderInitiator} with + * bug fixes applied. The majority of the code has been taken from spring integration v5 + * and has been adapted to work with v4. Bug fixes are described in inline comments. + * + * Please also see + * {@see https://stackoverflow.com/questions/53638213/spring-lockregistryleaderinitiator-making-excessive-calls-in-some-lock-registry} + * + * LockRegistryLeaderInitiator is component that initiates leader election based on holding a lock. + * If the lock has the right properties (global with expiry), there will never be more than one leader, + * but there may occasionally be no leader for short periods. If the lock has stronger + * guarantees, and it interrupts the holder's thread when it expires or is stolen, then + * you can adjust the parameters to reduce the leaderless period to be limited only by + * latency to the lock provider. The election process ties up a thread perpetually while + * we hold and try to acquire the lock, so a native leader initiator (not based on a lock) + * is likely to be more efficient. If there is no native leader initiator available, but + * there is a lock registry (e.g. on a shared database), this implementation is likely to + * be useful. + * + * @author Dave Syer + * @author Artem Bilan + * @author Vedran Pavic + * @author Glenn Renfro + * @author Kiel Boatman + * @author Gary Russell + * @since 4.3.1 + */ + +// Suppress Sonar warnings - this is mostly spring code copied here to extend and fix bugs. +// I don't want to change it's structure as it will make it much more difficult to compare to the +// original in the future. +@SuppressWarnings({"squid:S1193", "squid:S134", "squid:S3776", "squid:S1312", + "checkstyle:LocalVariableCouldBeFinal", "squid:S2221", "squid:MethodCyclomaticComplexity"}) +public class LockRegistryLeaderInitiator implements SmartLifecycle, DisposableBean, ApplicationEventPublisherAware +{ + + private static final long DEFAULT_HEART_BEAT_TIME = 500L; + + private static final long DEFAULT_BUSY_WAIT_TIME = 50L; + + private static final Log LOG = LogFactory.getLog(LockRegistryLeaderInitiator.class); + + private final Object lifecycleMonitor = new Object(); + + /** + * A lock registry. The locks it manages should be global (whatever that means for the + * system) and expiring, in case the holder dies without notifying anyone. + */ + private final LockRegistry locks; + + /** + * Candidate for leader election. User injects this to receive callbacks on leadership + * events. Alternatively applications can listen for the {@link OnGrantedEvent} and + * {@link OnRevokedEvent}, as long as the + * {@link #setLeaderEventPublisher(LeaderEventPublisher) leaderEventPublisher} is set. + */ + private final Candidate candidate; + + private final Context nullContext = new Context() + { + + @Override + public boolean isLeader() + { + return false; + } + + @Override + public void yield() + { + //NO-OP + } + + }; + + /** + * Executor service for running leadership daemon. + */ + private ExecutorService executorService = + Executors.newSingleThreadExecutor(new CustomizableThreadFactory("lock-leadership-")); + + /** + * Flag to denote whether the {@link ExecutorService} was provided via the setter and + * thus should not be shutdown when {@link #destroy()} is called + */ + private boolean executorServiceExplicitlySet; + + /** + * Time in milliseconds to wait in between attempts to re-acquire the lock, once it is + * held. The heartbeat time has to be less than the remote lock expiry period, if + * there is one, otherwise other nodes can steal the lock while we are sleeping here. + * If the remote lock does not expire, or if you know it interrupts the current thread + * when it expires or is broken, then you can extend the heartbeat to Long.MAX_VALUE. + */ + private long heartBeatMillis = DEFAULT_HEART_BEAT_TIME; + + /** + * Time in milliseconds to wait in between attempts to acquire the lock, if it is not + * held. The longer this is, the longer the system can be leaderless, if the leader + * dies. If a leader dies without releasing its lock, the system might still have to + * wait for the old lock to expire, but after that it should not have to wait longer + * than the busy wait time to get a new leader. If the remote lock does not expire, or + * if you know it interrupts the current thread when it expires or is broken, then you + * can reduce the busy wait to zero. + */ + private long busyWaitMillis = DEFAULT_BUSY_WAIT_TIME; + + private LeaderSelector leaderSelector; + + private ApplicationEventPublisher applicationEventPublisher; + + /** + * Leader event publisher if set. + */ + private LeaderEventPublisher leaderEventPublisher; + + /** + * @see SmartLifecycle + */ + private boolean autoStartup = true; + + /** + * @see SmartLifecycle which is an extension of org.springframework.context.Phased + */ + private int phase = Integer.MAX_VALUE - 1000; + + /** + * Flag that indicates whether the leadership election for this {@link #candidate} is + * running. + */ + private volatile boolean running; + + /** + * Future returned by submitting an {@link LeaderSelector} to + * {@link #executorService}. This is used to cancel leadership. + */ + private volatile Future future; + + /** + * Create a new leader initiator with the provided lock registry and a default + * candidate (which just logs the leadership events). + * + * @param locks lock registry + */ + public LockRegistryLeaderInitiator(final LockRegistry locks) + { + this(locks, new DefaultCandidate()); + } + + /** + * Create a new leader initiator. The candidate implementation is provided by the user + * to listen for leadership events and carry out business actions. + * + * @param locks lock registry + * @param candidate leadership election candidate + */ + @SuppressWarnings("WeakerAccess") + public LockRegistryLeaderInitiator(final LockRegistry locks, final Candidate candidate) + { + Assert.notNull(locks, "'locks' must not be null"); + Assert.notNull(candidate, "'candidate' must not be null"); + this.locks = locks; + this.candidate = candidate; + } + + /** + * Set the {@link ExecutorService}, where is not provided then a default of + * single thread Executor will be used. + * + * @param executorService the executor service + * @since 5.0.2 + */ + public void setExecutorService(final ExecutorService executorService) + { + this.executorService = executorService; + this.executorServiceExplicitlySet = true; + } + + public void setHeartBeatMillis(final long heartBeatMillis) + { + this.heartBeatMillis = heartBeatMillis; + } + + public void setBusyWaitMillis(final long busyWaitMillis) + { + this.busyWaitMillis = busyWaitMillis; + } + + /** + * Set the {@link LeaderEventPublisher}. + * + * @param leaderEventPublisher the event publisher + */ + public void setLeaderEventPublisher(final LeaderEventPublisher leaderEventPublisher) + { + this.leaderEventPublisher = leaderEventPublisher; + } + + @Override + public void setApplicationEventPublisher(final ApplicationEventPublisher applicationEventPublisher) + { + this.applicationEventPublisher = applicationEventPublisher; + } + + /** + * @return true if leadership election for this {@link #candidate} is running. + */ + @Override + public boolean isRunning() + { + synchronized (this.lifecycleMonitor) + { + return this.running; + } + } + + @Override + public int getPhase() + { + return this.phase; + } + + /** + * @param phase the phase + * @see SmartLifecycle + */ + public void setPhase(final int phase) + { + this.phase = phase; + } + + @Override + public boolean isAutoStartup() + { + return this.autoStartup; + } + + /** + * @param autoStartup true to start automatically + * @see SmartLifecycle + */ + public void setAutoStartup(final boolean autoStartup) + { + this.autoStartup = autoStartup; + } + + /** + * @return the context. + */ + public Context getContext() + { + if (this.leaderSelector == null) + { + return this.nullContext; + } + return this.leaderSelector.context; + } + + /** + * Start the registration of the {@link #candidate} for leader election. + */ + @Override + public void start() + { + if (this.leaderEventPublisher == null && this.applicationEventPublisher != null) + { + this.leaderEventPublisher = new DefaultLeaderEventPublisher(this.applicationEventPublisher); + } + synchronized (this.lifecycleMonitor) + { + if (!this.running) + { + this.leaderSelector = new LeaderSelector(buildLeaderPath()); + this.running = true; + this.future = this.executorService.submit(this.leaderSelector); + LOG.debug("Started LeaderInitiator"); + } + } + } + + @Override + public void destroy() + { + stop(); + if (!this.executorServiceExplicitlySet) + { + this.executorService.shutdown(); + } + } + + @Override + public void stop(final Runnable runnable) + { + stop(); + runnable.run(); + } + + /** + * Stop the registration of the {@link #candidate} for leader election. If the + * candidate is currently leader, its leadership will be revoked. + */ + @Override + public void stop() + { + synchronized (this.lifecycleMonitor) + { + if (this.running) + { + this.running = false; + if (this.future != null) + { + this.future.cancel(true); + } + this.future = null; + LOG.debug("Stopped LeaderInitiator for " + getContext()); + } + } + } + + /** + * @return the lock key used by leader election + */ + private String buildLeaderPath() + { + return this.candidate.getRole(); + } + + protected class LeaderSelector implements Callable + { + + private final Lock lock; + + private final String lockKey; + + private final LockContext context = new LockContext(); + + private volatile boolean locked = false; + + LeaderSelector(final String lockKey) + { + this.lock = LockRegistryLeaderInitiator.this.locks.obtain(lockKey); + this.lockKey = lockKey; + } + + @Override + public Void call() + { + try + { + while (isRunning()) + { + try + { + + if (LOG.isDebugEnabled()) + { + LOG.debug("Acquiring the lock for " + this.context); + } + + // THIS HAS BEEN MODIFIED TO ENSURE THAT ONLY A SINGLE + // ATTEMPT TO ACQUIRE THE LOCK IS MADE, FOLLOWED BY A SLEEP + // FOR busyWaitMillis. + + // We always try to acquire the lock, in case it expired + final boolean acquired = this.lock.tryLock(); + if (!this.locked) + { + if (acquired) + { + // Success: we are now leader + this.locked = true; + handleGranted(); + } + else if (isRunning()) + { + // Wait before trying again. + Thread.sleep(LockRegistryLeaderInitiator.this.busyWaitMillis); + } + } + + // END OF MODIFICATION + + else if (acquired) + { + // If we were able to acquire it but we were already locked we + // should release it + this.lock.unlock(); + if (isRunning()) + { + // Give it a chance to expire. + Thread.sleep(LockRegistryLeaderInitiator.this.heartBeatMillis); + } + } + else + { + this.locked = false; + // We were not able to acquire it, therefore not leading any more + handleRevoked(); + if (isRunning()) + { + // Try again quickly in case the lock holder dropped it + Thread.sleep(LockRegistryLeaderInitiator.this.busyWaitMillis); + } + } + } + catch (final Exception e) + { + if (this.locked) + { + this.locked = false; + try + { + this.lock.unlock(); + } + catch (final Exception e1) + { + LOG.debug("Could not unlock - treat as broken " + this.context + + ". Revoking " + (isRunning() ? " and retrying..." : "..."), e1); + + } + // The lock was broken and we are no longer leader + handleRevoked(); + } + + if (e instanceof InterruptedException || Thread.currentThread().isInterrupted()) + { + Thread.currentThread().interrupt(); + if (isRunning()) + { + LOG.warn("Restarting LeaderSelector for " + this.context + " because of error.", e); + LockRegistryLeaderInitiator.this.future = + LockRegistryLeaderInitiator.this.executorService.submit( + () -> { + // Give it a chance to elect some other leader. + Thread.sleep(LockRegistryLeaderInitiator.this.busyWaitMillis); + return call(); + }); + } + return null; + } + else + { + if (isRunning()) + { + // Give it a chance to elect some other leader. + try + { + Thread.sleep(LockRegistryLeaderInitiator.this.busyWaitMillis); + } + catch (final InterruptedException e1) + { + // Ignore interruption and let it to be caught on the next cycle. + Thread.currentThread().interrupt(); + } + } + if (LOG.isDebugEnabled()) + { + LOG.debug("Error acquiring the lock for " + this.context + + ". " + (isRunning() ? "Retrying..." : ""), e); + } + } + } + } + } + finally + { + if (this.locked) + { + this.locked = false; + try + { + this.lock.unlock(); + } + catch (final Exception e) + { + LOG.debug("Could not unlock during stop for " + this.context + + " - treat as broken. Revoking...", e); + } + // We are stopping, therefore not leading any more + handleRevoked(); + } + } + return null; + } + + public boolean isLeader() + { + return this.locked; + } + + private void handleGranted() throws InterruptedException + { + LockRegistryLeaderInitiator.this.candidate.onGranted(this.context); + if (LockRegistryLeaderInitiator.this.leaderEventPublisher != null) + { + try + { + LockRegistryLeaderInitiator.this.leaderEventPublisher.publishOnGranted( + LockRegistryLeaderInitiator.this, this.context, this.lockKey); + } + catch (final Exception e) + { + LOG.warn("Error publishing OnGranted event.", e); + } + } + } + + private void handleRevoked() + { + LockRegistryLeaderInitiator.this.candidate.onRevoked(this.context); + if (LockRegistryLeaderInitiator.this.leaderEventPublisher != null) + { + try + { + LockRegistryLeaderInitiator.this.leaderEventPublisher.publishOnRevoked( + LockRegistryLeaderInitiator.this, this.context, + LockRegistryLeaderInitiator.this.candidate.getRole()); + } + catch (final Exception e) + { + LOG.warn("Error publishing OnRevoked event.", e); + } + } + } + } + + /** + * Implementation of leadership context backed by lock registry. + */ + private class LockContext implements Context + { + + LockContext() + { + super(); + } + + @Override + public boolean isLeader() + { + return LockRegistryLeaderInitiator.this.leaderSelector.isLeader(); + } + + @Override + public void yield() + { + if (LOG.isDebugEnabled()) + { + LOG.debug("Yielding leadership from " + this); + } + if (LockRegistryLeaderInitiator.this.future != null) + { + LockRegistryLeaderInitiator.this.future.cancel(true); + } + } + + @Override + public String toString() + { + return "LockContext{role=" + LockRegistryLeaderInitiator.this.candidate.getRole() + + ", id=" + LockRegistryLeaderInitiator.this.candidate.getId() + + ", isLeader=" + isLeader() + "}"; + } + + } + +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/support/leader/RoleAwareLockRegistryLeaderInitiator.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/support/leader/RoleAwareLockRegistryLeaderInitiator.java new file mode 100644 index 0000000..ac57da9 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/support/leader/RoleAwareLockRegistryLeaderInitiator.java @@ -0,0 +1,120 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.integration.support.leader; + +import de.hybris.platform.cloud.commons.scheduling.HybrisAwareThreadPoolExecutor; +import de.hybris.platform.cloud.commons.spring.context.SmartLifecycleRole; +import de.hybris.platform.core.Registry; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.integration.leader.Candidate; +import org.springframework.integration.leader.DefaultCandidate; +import org.springframework.integration.support.locks.LockRegistry; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.TimeUnit; + +/** + * An implementation of {@link LockRegistryLeaderInitiator} that itself has a role. This allows + * the election to be started/stopped by a role controller. + */ +public class RoleAwareLockRegistryLeaderInitiator extends LockRegistryLeaderInitiator + implements SmartLifecycleRole, InitializingBean +{ + + private static final Logger LOG = LoggerFactory.getLogger(RoleAwareLockRegistryLeaderInitiator.class); + + private final String tenantId; + private String role; + private ExecutorService executorService; + + public RoleAwareLockRegistryLeaderInitiator(final LockRegistry locks, + final String childRole) + { + this(locks, new DefaultCandidate( + Registry.getCurrentTenant().getTenantID() + "-" + Registry.getClusterID(), childRole)); + } + + public RoleAwareLockRegistryLeaderInitiator(final LockRegistry locks) + { + super(locks); + this.tenantId = Registry.getCurrentTenant().getTenantID(); + } + + public RoleAwareLockRegistryLeaderInitiator(final LockRegistry locks, final Candidate candidate) + { + super(locks, candidate); + this.tenantId = Registry.getCurrentTenant().getTenantID(); + } + + public void setRole(final String role) + { + this.role = role; + } + + public String getRole() + { + return this.role; + } + + @Override + public void stop(final Runnable runnable) + { + super.stop(runnable); + if (this.executorService != null && !this.executorService.isTerminated()) + { + try + { + // Ensure that we don't shutdown until the executor service + // has finished cleaning up. + LOG.debug("Waiting for executor service termination..."); + this.executorService.awaitTermination(30, TimeUnit.SECONDS); + } + catch (final InterruptedException e) + { + Thread.currentThread().interrupt(); + //Do Nothing + } + } + } + + @Override + public void setExecutorService(final ExecutorService executorService) + { + // Don't allow the task executor to be passed in, we create it in afterPropertiesSet. + throw new UnsupportedOperationException("Setting the task executor is unsupported."); + } + + @Override + public void afterPropertiesSet() + { + final String threadPrefix = "HotfolderLeaderInitiator-" + tenantId + "-"; + this.executorService = HybrisAwareThreadPoolExecutor.newSingleThreadedExecutor(threadPrefix); + super.setExecutorService(this.executorService); + } + + @Override + public void destroy() + { + try + { + LOG.debug("Forcing stop."); + stop(); + } + finally + { + LOG.debug("Shutting down task executor."); + this.executorService.shutdown(); + } + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/support/locks/database/HybrisLockRepository.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/support/locks/database/HybrisLockRepository.java new file mode 100644 index 0000000..b8e56f3 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/support/locks/database/HybrisLockRepository.java @@ -0,0 +1,387 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.integration.support.locks.database; + +import de.hybris.platform.cloud.commons.model.ApplicationResourceLockModel; +import de.hybris.platform.cloud.commons.spring.context.SmartLifecycleRole; +import de.hybris.platform.cloud.commons.spring.integration.support.locks.database.dao.ApplicationResourceLockDao; +import de.hybris.platform.core.Registry; +import de.hybris.platform.servicelayer.exceptions.ModelSavingException; +import de.hybris.platform.servicelayer.model.ModelService; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.BeanNameAware; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.integration.jdbc.lock.LockRepository; + +import java.time.ZoneOffset; +import java.time.ZonedDateTime; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + * Implementation of {@link LockRepository} using the Hybris Type system. + * Also implements {@link SmartLifecycleRole} to ensure locks created by the running node are deleted upon shutdown. + */ +public class HybrisLockRepository implements SmartLifecycleRole, LockRepository, BeanNameAware +{ + private static final Logger LOG = LoggerFactory.getLogger(HybrisLockRepository.class); + + private static final String DEFAULT_REGION = "Default"; + private static final int DEFAULT_TTL = 10000; + + private final Object lifecycleMonitor = new Object(); + private final Object deletingMonitor = new Object(); + + private volatile boolean autoStartup = true; + private volatile int phase = 0; + private volatile String role = null; + private volatile boolean running; + + private String region = DEFAULT_REGION; + private int ttl = DEFAULT_TTL; + + private ModelService modelService; + private ApplicationResourceLockDao applicationResourceLockDao; + private String beanName; + + @Override + public void start() + { + synchronized (this.lifecycleMonitor) + { + this.running = true; + } + } + + @Override + public void stop() + { + synchronized (this.lifecycleMonitor) + { + if (this.isRunning()) + { + LOG.info("Deleting all lock records in region [{}] for node [{}].", getRegion(), getClusterId()); + synchronized (this.deletingMonitor) + { + final List locks + = getApplicationResourceLockDao().getLocks(getRegion(), getClusterId()); + deleteLocks(locks); + } + this.running = false; + } + } + } + + @Override + public String getRole() + { + return this.role; + } + + public void setRole(final String role) + { + this.role = role; + } + + @Override + public boolean isAutoStartup() + { + return this.autoStartup; + } + + public void setAutoStartup(final boolean autoStartup) + { + this.autoStartup = autoStartup; + } + + @Override + public int getPhase() + { + return this.phase; + } + + public void setPhase(final int phase) + { + this.phase = phase; + } + + @Override + public void stop(final Runnable runnable) + { + stop(); + runnable.run(); + } + + @Override + public boolean isRunning() + { + return this.running; + } + + @Override + public boolean acquire(final String key) + { + LOG.debug("Acquiring lock for key [{}] in region [{}] for node [{}].", key, getRegion(), getClusterId()); + try + { + modelService.enableTransactions(); + deleteExpiredLocks(key); + try + { + final ApplicationResourceLockModel lock = + Optional.ofNullable(getApplicationResourceLockDao().getLock(key, getRegion(), getClusterId())) + .orElseGet(() -> createNewLock(key, getRegion(), getClusterId())); + + final Date timestamp = Date.from(ZonedDateTime.now(ZoneOffset.UTC).toInstant()); + lock.setTimestamp(timestamp); + + logLockStatus(lock); + return saveLock(lock); + } + finally + { + modelService.clearTransactionsSettings(); + } + + } + catch (final RuntimeException ex) + { + LOG.debug("Unable to create or update record for lock for key [{}] in region [{}] for node [{}].", + key, getRegion(), getClusterId(), ex); + return false; + } + } + + @Override + public void close() + { + // Close is handled by the lifecycle stop event. + } + + @Override + public boolean isAcquired(final String key) + { + deleteExpiredLocks(key); + final Date expiryDate = calculateExpiryDate(getTtl()); + final ApplicationResourceLockModel lock = getApplicationResourceLockDao().getLock(key, getRegion(), getClusterId(), expiryDate); + if (lock == null) + { + LOG.debug("Unable to find lock for key [{}] in region [{}] for node [{}].", key, getRegion(), getClusterId()); + return false; + } + else + { + LOG.debug("Lock {} found for key [{}].", toString(lock), key); + return true; + } + } + + @Override + public void delete(final String key) + { + LOG.debug("Releasing lock for key [{}] in region [{}] for node [{}].", key, getRegion(), getClusterId()); + synchronized (deletingMonitor) + { + final ApplicationResourceLockModel lock = getApplicationResourceLockDao().getLock(key, getRegion(), getClusterId()); + if (lock != null) + { + deleteLocks(Collections.singletonList(lock)); + } + else + { + LOG.debug("Unable to remove application lock [{}].", key); + } + } + } + + protected void logLockStatus(final ApplicationResourceLockModel lock) + { + if (LOG.isDebugEnabled()) + { + if (modelService.isNew(lock)) + { + LOG.debug("Creating record for lock {}.", HybrisLockRepository.toString(lock)); + } + else + { + LOG.debug("Updating record for lock {}.", HybrisLockRepository.toString(lock)); + } + } + } + + protected static String toString(final ApplicationResourceLockModel lock) + { + return new ToStringBuilder(lock, ToStringStyle.NO_CLASS_NAME_STYLE) + .append("lockKey", lock.getLockKey()) + .append("region", lock.getRegion()) + .append("clusterId", lock.getClusterId()) + .append("timestamp", lock.getTimestamp()) + .toString(); + } + + protected int getClusterId() + { + return Registry.getClusterID(); + } + + protected void deleteExpiredLocks(final String key) + { + final Date expiryDate = calculateExpiryDate(getTtl()); + + LOG.debug("Deleting lock records for key [{}] in region [{}] older than [{}].", + key, getRegion(), expiryDate); + + synchronized (deletingMonitor) + { + final List locks = + getApplicationResourceLockDao().getLocks(key, getRegion(), expiryDate); + deleteLocks(locks); + } + } + + protected Date calculateExpiryDate(final int ttl) + { + return Date.from(ZonedDateTime.now(ZoneOffset.UTC).toInstant().minusMillis(ttl)); + } + + protected void deleteLocks(final List locks) + { + if (CollectionUtils.isNotEmpty(locks)) + { + try + { + modelService.enableTransactions(); + // Not using ModelService.removeAll as it's all-or-nothing. + // We want to remove as many locks as possible. + for (final ApplicationResourceLockModel lock : locks) + { + deleteLock(lock); + } + } + catch (final RuntimeException ex) + { + LOG.error("Unable to delete locks.", ex); + } + finally + { + modelService.clearTransactionsSettings(); + } + } + } + + protected boolean saveLock(final ApplicationResourceLockModel lock) + { + // Unique constraint on the the resource+scope columns will prevent + // more than one caller obtaining a lock. + try + { + modelService.save(lock); + return true; + } + catch (final ModelSavingException ex) + { + LOG.debug("Unable to create or update record for lock for key [{}] in region [{}] for node [{}].", + lock.getLockKey(), getRegion(), getClusterId()); + return false; + } + } + + protected void deleteLock(final ApplicationResourceLockModel lock) + { + final String key = HybrisLockRepository.toString(lock); + LOG.debug("Deleting lock record {}.", key); + if(modelService.isAttached(lock)) + { + try + { + modelService.remove(lock); + + } + catch (final RuntimeException ex) + { + LOG.debug("Unable to remove lock record {}.", key, ex); + } + } + else + { + LOG.warn("Unable to delelete detatched lock [{}].", lock); + } + } + + protected ApplicationResourceLockModel createNewLock(final String key, final String region, final int clusterId) + { + final ApplicationResourceLockModel lock = getModelService().create(ApplicationResourceLockModel.class); + lock.setLockKey(key); + lock.setRegion(region); + lock.setClusterId(clusterId); + return lock; + } + + protected ApplicationResourceLockDao getApplicationResourceLockDao() + { + return applicationResourceLockDao; + } + + @Required + public void setApplicationResourceLockDao(final ApplicationResourceLockDao applicationResourceLockDao) + { + this.applicationResourceLockDao = applicationResourceLockDao; + } + + protected ModelService getModelService() + { + return modelService; + } + + @Required + public void setModelService(final ModelService modelService) + { + this.modelService = modelService; + } + + protected String getRegion() + { + return region; + } + + public void setRegion(final String region) + { + this.region = region; + } + + protected int getTtl() + { + return ttl; + } + + public void setTtl(final int ttl) + { + this.ttl = ttl; + } + + @Override + public void setBeanName(final String name) + { + this.beanName = name; + } + + @Override + public String toString() + { + return this.beanName; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/support/locks/database/dao/ApplicationResourceLockDao.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/support/locks/database/dao/ApplicationResourceLockDao.java new file mode 100644 index 0000000..25178c2 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/support/locks/database/dao/ApplicationResourceLockDao.java @@ -0,0 +1,61 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.integration.support.locks.database.dao; + +import de.hybris.platform.cloud.commons.model.ApplicationResourceLockModel; +import de.hybris.platform.servicelayer.internal.dao.GenericDao; + +import java.util.Date; +import java.util.List; + +/** + * Extended implementation of {@link GenericDao} to allow for querying for instances of + * {@link ApplicationResourceLockModel} + */ +public interface ApplicationResourceLockDao extends GenericDao +{ + /** + * Get Lock based on the parameters + * @param key value of model + * @param region value of model + * @param clusterId value of model + * @return matching model, or null + */ + ApplicationResourceLockModel getLock(final String key, final String region, final int clusterId); + + /** + * Get Lock based on the parameters + * @param key value of model + * @param region value of model + * @param clusterId value of model + * @param expiryDate where is less than model timestamps + * @return matching model, or null + */ + ApplicationResourceLockModel getLock(final String key, final String region, int clusterId, final Date expiryDate); + + /** + * Get Locks based on the parameters + * @param region value of model + * @param clusterId value of model + * @return matching models + */ + List getLocks(final String region, final int clusterId); + + /** + * Get Locks based on the parameters + * @param key value of model + * @param region value of model + * @param expiryDate where is less than model timestamps + * @return matching models + */ + List getLocks(final String key, final String region, final Date expiryDate); + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/support/locks/database/dao/impl/DefaultApplicationResourceLockDao.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/support/locks/database/dao/impl/DefaultApplicationResourceLockDao.java new file mode 100644 index 0000000..ea7c4b2 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/integration/support/locks/database/dao/impl/DefaultApplicationResourceLockDao.java @@ -0,0 +1,123 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.integration.support.locks.database.dao.impl; + +import de.hybris.platform.cloud.commons.model.ApplicationResourceLockModel; +import de.hybris.platform.cloud.commons.spring.integration.support.locks.database.dao.ApplicationResourceLockDao; +import de.hybris.platform.servicelayer.internal.dao.DefaultGenericDao; +import de.hybris.platform.servicelayer.search.FlexibleSearchQuery; +import de.hybris.platform.servicelayer.search.SearchResult; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * An implementation of {@link ApplicationResourceLockDao} to allow for querying for instances of + * {@link ApplicationResourceLockModel} + */ +public class DefaultApplicationResourceLockDao extends DefaultGenericDao + implements ApplicationResourceLockDao +{ + + private static final String FIND_ACQUIRED_LOCK = "SELECT {" + ApplicationResourceLockModel.PK + "} FROM {" + + ApplicationResourceLockModel._TYPECODE + "} WHERE {" + ApplicationResourceLockModel.LOCKKEY + "} = ?lockKey AND {" + + ApplicationResourceLockModel.REGION + "} = ?region AND {" + ApplicationResourceLockModel.CLUSTERID + + "} = ?clusterId AND {" + + ApplicationResourceLockModel.TIMESTAMP + "} >= ?expiryDate"; + + private static final String FIND_LOCKS_BY_EXPIRY = "SELECT {" + ApplicationResourceLockModel.PK + "} FROM {" + + ApplicationResourceLockModel._TYPECODE + "} WHERE {" + ApplicationResourceLockModel.LOCKKEY + "} = ?lockKey AND {" + + ApplicationResourceLockModel.REGION + "} = ?region AND {" + ApplicationResourceLockModel.TIMESTAMP + + "} < ?expiryDate"; + + public DefaultApplicationResourceLockDao() + { + this(ApplicationResourceLockModel._TYPECODE); + } + + public DefaultApplicationResourceLockDao(final String typecode) + { + super(typecode); + } + + /** + * @inheritDoc + */ + @Override + public ApplicationResourceLockModel getLock(final String key, final String region, final int clusterId) + { + final Map params = new HashMap<>(); + params.put(ApplicationResourceLockModel.LOCKKEY, key); + params.put(ApplicationResourceLockModel.REGION, region); + params.put(ApplicationResourceLockModel.CLUSTERID, clusterId); + final List results = find(params); + if (!results.isEmpty()) + { + return results.get(0); + } + return null; + } + + /** + * @inheritDoc + */ + @Override + public ApplicationResourceLockModel getLock(final String key, + final String region, + final int clusterId, + final Date expiryDate) + { + final FlexibleSearchQuery query = buildQuery(FIND_ACQUIRED_LOCK, key, region, expiryDate); + query.addQueryParameter("clusterId", clusterId); + final SearchResult result = getFlexibleSearchService().search(query); + final List results = result.getResult(); + if (!results.isEmpty()) + { + return results.get(0); + } + return null; + } + + /** + * @inheritDoc + */ + @Override + public List getLocks(final String region, final int clusterId) + { + final Map params = new HashMap<>(); + params.put(ApplicationResourceLockModel.REGION, region); + params.put(ApplicationResourceLockModel.CLUSTERID, clusterId); + return find(params); + } + + /** + * @inheritDoc + */ + @Override + public List getLocks(final String key, final String region, final Date expiryDate) + { + final FlexibleSearchQuery query = buildQuery(FIND_LOCKS_BY_EXPIRY, key, region, expiryDate); + final SearchResult result = getFlexibleSearchService().search(query); + return result.getResult(); + } + + protected FlexibleSearchQuery buildQuery(final String query, final String key, final String region, final Date expiryDate) + { + final FlexibleSearchQuery flexibleSearchQuery = new FlexibleSearchQuery(query); + flexibleSearchQuery.addQueryParameter("lockKey", key); + flexibleSearchQuery.addQueryParameter("region", region); + flexibleSearchQuery.addQueryParameter("expiryDate", expiryDate); + return flexibleSearchQuery; + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/messaging/core/impl/PatternMatchingDestinationResolver.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/messaging/core/impl/PatternMatchingDestinationResolver.java new file mode 100644 index 0000000..b5f88ac --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/spring/messaging/core/impl/PatternMatchingDestinationResolver.java @@ -0,0 +1,64 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.messaging.core.impl; + +import java.util.Map; +import java.util.regex.Pattern; + +import org.springframework.messaging.core.DestinationResolutionException; +import org.springframework.messaging.core.DestinationResolver; +import org.springframework.util.Assert; + +/** + * {@link DestinationResolver} implementation that attempts to locate a destination by + * checking if any pattern matches the required name, otherwise it delegates onto another + * {@link DestinationResolver} implementation as a fallback mechanism + * + * @see DestinationResolver#resolveDestination + */ +public class PatternMatchingDestinationResolver implements DestinationResolver +{ + private final DestinationResolver fallbackResolver; + private final Map patternChannelMappings; + + /** + * Create a new PatternMatchingResolver using the given pattern->channel mappings and + * fallback DestinationResolver to resolve destinations in the event of no match. + * + * @param fallbackResolver the fallback DestinationResolver to delegate to when no match found + * @param patternChannelMappings map of {@link Pattern} to destinations + */ + public PatternMatchingDestinationResolver(final DestinationResolver fallbackResolver, final Map patternChannelMappings) + { + Assert.notNull(fallbackResolver, "'fallbackResolver' cannot be null"); + Assert.notNull(patternChannelMappings, "'patternChannelMappings' cannot be null"); + this.fallbackResolver = fallbackResolver; + this.patternChannelMappings = patternChannelMappings; + } + + /** + * Checks patterns, and uses the first match, otherwise delegates onto fallbackResolver + * @param name the destination name to be resolved + * @return the matched destination or that returned by fallbackResolver + * @throws DestinationResolutionException if the target DestinationResolver + * reports an error during destination resolution + */ + @Override + public D resolveDestination(final String name) throws DestinationResolutionException + { + return patternChannelMappings.entrySet().stream() + .filter(e -> e.getKey().matcher(name).matches()) + .map(Map.Entry::getValue) + .findFirst() + .orElseGet(() -> fallbackResolver.resolveDestination(name)); + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/suspend/CloudSuspendResumeRegistry.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/suspend/CloudSuspendResumeRegistry.java new file mode 100644 index 0000000..9c48e97 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/suspend/CloudSuspendResumeRegistry.java @@ -0,0 +1,79 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.suspend; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Collections; +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + +/** + * Registry for {@link SuspendResumeListener} instances. + */ +@SuppressWarnings("unused") +public class CloudSuspendResumeRegistry +{ + private static final Logger LOG = LoggerFactory.getLogger(CloudSuspendResumeRegistry.class); + + private static final List suspendResumeListeners + = new CopyOnWriteArrayList<>(); + + private static final List publicSuspendResumeListeners + = Collections.unmodifiableList(suspendResumeListeners); + + private CloudSuspendResumeRegistry() + { + //NOOP + } + + /** + * Registers a {@link SuspendResumeListener} which will be then notified on suspend/resume. + * + * @param listener + * the listener to register for notifications + */ + public static void registerSuspendResumeListener(final SuspendResumeListener listener) + { + if( suspendResumeListeners.contains(listener)) + { + LOG.error("Suspend Resume listener "+listener+" already registered!"); + } + else + { + suspendResumeListeners.add(listener); + } + } + + /** + * Unregisters a {@link SuspendResumeListener} for not be notified on suspend/resume anymore. + * + * @param listener + * the listener to unregister for notifications + */ + public static void unregisterSuspendResumeListener(final SuspendResumeListener listener) + { + suspendResumeListeners.remove(listener); + } + + /** + * Gets all listeners registered for getting suspend/resume notifications. + * + * @return Unmodifiable list of all registered listeners + * @since 3.1-u1 + */ + public static List getSuspendResumeListeners() + { + return publicSuspendResumeListeners; + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/suspend/CloudSuspendResumeService.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/suspend/CloudSuspendResumeService.java new file mode 100644 index 0000000..c32fc9c --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/suspend/CloudSuspendResumeService.java @@ -0,0 +1,114 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.suspend; + +import de.hybris.platform.core.suspend.ResumeOptions; +import de.hybris.platform.core.suspend.ResumeTokenVerificationFailed; +import de.hybris.platform.core.suspend.SuspendOptions; +import de.hybris.platform.core.suspend.SuspendResult; +import de.hybris.platform.core.threadregistry.DefaultSuspendResumeService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +/** + * Extends {@link DefaultSuspendResumeService}, adding the ability to notify registered {@link SuspendResumeListener} + * instances of suspend/resume events. + */ +public class CloudSuspendResumeService extends DefaultSuspendResumeService +{ + + private static final Logger LOG = LoggerFactory.getLogger(CloudSuspendResumeService.class); + + @Override + public SuspendResult suspend(final SuspendOptions suspendOptions) + { + beforeSuspend(suspendOptions); + final SuspendResult suspendResult = super.suspend(suspendOptions); + afterSuspend(suspendOptions, suspendResult); + return suspendResult; + } + + @Override + public void resume(final ResumeOptions resumeOptions) throws ResumeTokenVerificationFailed + { + beforeResume(resumeOptions); + super.resume(resumeOptions); + afterResume(resumeOptions); + } + + protected void beforeSuspend(final SuspendOptions suspendOptions) + { + for (final SuspendResumeListener listener : getSuspendResumeListeners()) + { + try + { + listener.beforeSuspend(suspendOptions); + } + catch (final Exception t) + { + LOG.error("Error calling suspend resume listener [{}] before suspend.", listener, t); + } + } + } + + protected void afterSuspend(final SuspendOptions suspendOptions, final SuspendResult suspendResult) + { + for (final SuspendResumeListener listener : getSuspendResumeListeners()) + { + try + { + listener.afterSuspend(suspendOptions, suspendResult); + } + catch (final Exception t) + { + LOG.error("Error calling suspend resume listener [{}] after suspend.", listener, t); + } + } + } + + protected void beforeResume(final ResumeOptions resumeOptions) + { + for (final SuspendResumeListener listener : getSuspendResumeListeners()) + { + try + { + listener.beforeResume(resumeOptions); + } + catch (final Exception t) + { + LOG.error("Error calling suspend resume listener [{}] before resume.", listener, t); + } + } + } + + protected void afterResume(final ResumeOptions resumeOptions) + { + for (final SuspendResumeListener listener : getSuspendResumeListeners()) + { + try + { + listener.afterResume(resumeOptions); + } + catch (final Exception t) + { + LOG.error("Error calling suspend resume listener [{}] after resume.", listener, t); + } + } + } + + protected List getSuspendResumeListeners() + { + return CloudSuspendResumeRegistry.getSuspendResumeListeners(); + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/suspend/SuspendResumeListener.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/suspend/SuspendResumeListener.java new file mode 100644 index 0000000..f01d7c3 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/suspend/SuspendResumeListener.java @@ -0,0 +1,53 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.suspend; + +import de.hybris.platform.core.suspend.ResumeOptions; +import de.hybris.platform.core.suspend.SuspendOptions; +import de.hybris.platform.core.suspend.SuspendResult; + +/** + * Implementations of this interface are notified of system suspend/resume events. To receive events, + * register with {@link CloudSuspendResumeRegistry#registerSuspendResumeListener(SuspendResumeListener)}. + */ +public interface SuspendResumeListener +{ + + /** + * Called before system suspend. The suspend operation will block on this method. + * + * @param suspendOptions - the suspend options. + */ + void beforeSuspend(SuspendOptions suspendOptions); + + /** + * Called after system suspension. + * + * @param suspendOptions - the suspend options. + * @param suspendResult - the result of the system suspension. + */ + void afterSuspend(SuspendOptions suspendOptions, SuspendResult suspendResult); + + /** + * Called before system resume. The resume operation will block on this method. + * + * @param resumeOptions - the resume options. + */ + void beforeResume(ResumeOptions resumeOptions); + + /** + * Called after system resume. + * + * @param resumeOptions - the resume options. + */ + void afterResume(ResumeOptions resumeOptions); + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/utils/EnumHelper.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/utils/EnumHelper.java new file mode 100644 index 0000000..5cb01ef --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/src/de/hybris/platform/cloud/commons/utils/EnumHelper.java @@ -0,0 +1,58 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.utils; + +import org.apache.commons.lang3.EnumUtils; +import org.slf4j.Logger; + +import java.util.Optional; + +import static org.slf4j.LoggerFactory.getLogger; + +/** + * A utility class that makes it easier to work with enums. + */ +public final class EnumHelper +{ + private static final Logger LOG = getLogger(EnumHelper.class); + + private EnumHelper() + { + } + + /** + * Get enum value representing the string value a given object + * @param enumClass the enum class required + * @param value the value to attempt to find + * @return Enum value representing the given object + * @throws IllegalArgumentException when value is not a valid option + */ + public static > E getEnum(final Class enumClass, final Object value) + { + return Optional.of(EnumUtils.getEnum(enumClass, String.valueOf(value))) + .orElseThrow(() -> new IllegalArgumentException(value + " was not a valid value of " + enumClass)); + } + + /** + * Get enum value representing the string value a given object + * @param enumClass the enum class required + * @param value the value to attempt to find + * @return Enum value representing the given object, or else the given default value + */ + public static > E getEnum(final Class enumClass, final Object value, final E defaultValue) + { + return Optional.of(EnumUtils.getEnum(enumClass, String.valueOf(value))) + .orElseGet(() -> { + LOG.warn("enum [{}] did not contain value [{}] will use default of [{}]", enumClass, value, defaultValue); + return defaultValue; + }); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/tenant_junit.properties b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/tenant_junit.properties new file mode 100644 index 0000000..a576aa9 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/tenant_junit.properties @@ -0,0 +1,14 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2017 SAP SE or an SAP affiliate company. All rights reserved. +# +# This software is the confidential and proprietary information of SAP +# ("Confidential Information"). You shall not disclose such Confidential +# Information and shall use it only in accordance with the terms of the +# license agreement you entered into with SAP. +# ----------------------------------------------------------------------- + +cloudcommons.application-context=cloudcommons-spring.xml,cloudcommons/test/cloudcommons-test-spring.xml + +cloud.commons.monitoring.database.enabled=true diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/scheduling/HybrisAwareThreadPoolTaskExecutorTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/scheduling/HybrisAwareThreadPoolTaskExecutorTest.java new file mode 100644 index 0000000..3eac4f9 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/scheduling/HybrisAwareThreadPoolTaskExecutorTest.java @@ -0,0 +1,402 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.scheduling; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.core.Tenant; + +import java.util.Optional; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.Callable; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.RejectedExecutionHandler; +import java.util.concurrent.SynchronousQueue; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Spy; +import org.mockito.runners.MockitoJUnitRunner; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.willReturn; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class HybrisAwareThreadPoolTaskExecutorTest +{ + private static final String BEAN_NAME = "beanName"; + + private static final ThreadFactory THREAD_FACTORY = mock(ThreadFactory.class); + private static final Tenant TENANT = mock(Tenant.class); + private static final int QUEUE_CAPACITY = 2; + private static final int CORE_POOL_SIZE = 3; + private static final int MAX_POOL_SIZE = 5; + private static final Long KEEP_ALIVE_SECS = 5L; + private static final RejectedExecutionHandler REJ_HANDLER = new ThreadPoolExecutor.AbortPolicy(); + private static final int TERMINATION_TIMEOUT = 6; + + @Spy + private HybrisAwareThreadPoolTaskExecutor executor = new HybrisAwareThreadPoolTaskExecutor(); + + @Before + public void setUp() + { + willReturn(TENANT).given(executor).getCurrentTenant(); + + executor.setQueueCapacity(QUEUE_CAPACITY); + executor.setCorePoolSize(CORE_POOL_SIZE); + executor.setMaxPoolSize(MAX_POOL_SIZE); + executor.setKeepAliveSeconds(KEEP_ALIVE_SECS.intValue()); + executor.setRejectedExecutionHandler(REJ_HANDLER); + executor.setThreadFactory(THREAD_FACTORY); + executor.setAwaitTerminationSeconds(TERMINATION_TIMEOUT); + + executor.afterPropertiesSet(); + + executor.setBeanName(BEAN_NAME); + } + + private ThreadPoolExecutor givenMockThreadPoolExecutor() + { + final ThreadPoolExecutor threadPoolExecutor = mock(ThreadPoolExecutor.class); + willReturn(threadPoolExecutor) + .given(executor) + .createThreadPoolExecutor(eq(TENANT), eq(CORE_POOL_SIZE), eq(MAX_POOL_SIZE), eq(KEEP_ALIVE_SECS), eq(TimeUnit.SECONDS), any(), eq(THREAD_FACTORY), eq(REJ_HANDLER)); + + return threadPoolExecutor; + } + + @Test + public void initialize_shouldSetThreadNamePrefixToNameOfBean() + { + HybrisAwareThreadPoolTaskExecutor local = new HybrisAwareThreadPoolTaskExecutor(); + local.setBeanName(BEAN_NAME); + + local.initialize(); + + assertThat(local.getThreadNamePrefix()).isEqualTo(BEAN_NAME + "-"); + } + + @Test + public void initialize_shouldCreateHybrisAwareThreadPoolExecutorCorrectly_LinkedQueue() + { + executor.initialize(); + + final HybrisAwareThreadPoolExecutor threadPoolExecutor = Optional.of(executor.getThreadPoolExecutor()) + .filter(HybrisAwareThreadPoolExecutor.class::isInstance) + .map(HybrisAwareThreadPoolExecutor.class::cast) + .orElseThrow(() -> new IllegalStateException("threadPoolExecutor was not instanceof HybrisAwareThreadPoolExecutor")); + + + final LinkedBlockingQueue expectedQueue = new LinkedBlockingQueue<>(QUEUE_CAPACITY); + final HybrisAwareThreadPoolExecutor expected = new HybrisAwareThreadPoolExecutor(TENANT, CORE_POOL_SIZE, MAX_POOL_SIZE, KEEP_ALIVE_SECS, + TimeUnit.SECONDS, expectedQueue, THREAD_FACTORY, REJ_HANDLER); + + assertThat(threadPoolExecutor).isEqualToComparingOnlyGivenFields(expected, "tenant", "corePoolSize", "maximumPoolSize", "keepAliveTime", "threadFactory", "handler", "allowCoreThreadTimeOut"); + + final BlockingQueue actualQueue = threadPoolExecutor.getQueue(); + assertThat(actualQueue).isInstanceOf(expectedQueue.getClass()); + assertThat(actualQueue.remainingCapacity()).isEqualTo(expectedQueue.remainingCapacity()); + } + + @Test + public void initialize_shouldCreateHybrisAwareThreadPoolExecutorCorrectly_SynchronousQueue() + { + executor.setQueueCapacity(0); + executor.initialize(); + + final HybrisAwareThreadPoolExecutor threadPoolExecutor = Optional.of(executor.getThreadPoolExecutor()) + .filter(HybrisAwareThreadPoolExecutor.class::isInstance) + .map(HybrisAwareThreadPoolExecutor.class::cast) + .orElseThrow(() -> new IllegalStateException("threadPoolExecutor was not instanceof HybrisAwareThreadPoolExecutor")); + + final SynchronousQueue expectedQueue = new SynchronousQueue<>(); + final HybrisAwareThreadPoolExecutor expected = new HybrisAwareThreadPoolExecutor(TENANT, CORE_POOL_SIZE, MAX_POOL_SIZE, KEEP_ALIVE_SECS, + TimeUnit.SECONDS, expectedQueue, THREAD_FACTORY, REJ_HANDLER); + + assertThat(threadPoolExecutor).isEqualToComparingOnlyGivenFields(expected, "tenant", "corePoolSize", "maximumPoolSize", "keepAliveTime", "threadFactory", "handler", "allowCoreThreadTimeOut"); + + final BlockingQueue actualQueue = threadPoolExecutor.getQueue(); + assertThat(actualQueue).isInstanceOf(expectedQueue.getClass()); + assertThat(actualQueue.remainingCapacity()).isEqualTo(expectedQueue.remainingCapacity()); + } + + @Test + public void initialize_givenIsInitialized_shouldMarkAsRunning() + { + assertThat(executor.isRunning()).isFalse(); + + executor.initialize(); + + assertThat(executor.isRunning()).isTrue(); + } + + @Test + public void shutdown_givenIsNotInitialized_shouldNotNullPointer() + { + assertThat(executor.isRunning()).isFalse(); + + executor.shutdown(); + } + + @Test + public void shutdown_givenIsInitialized_andShouldWaitForShutdown_whenShutdown_thenShouldWaitForExecutorServiceShutdown() + { + givenMockThreadPoolExecutor(); + + executor.setWaitForTasksToCompleteOnShutdown(true); + executor.initialize(); + + executor.shutdown(); + + final ThreadPoolExecutor threadPoolExecutor = executor.getThreadPoolExecutor(); + verify(threadPoolExecutor).shutdown(); + } + + @Test + public void shutdown_givenIsInitialized_andDoNotWaitForShutdown_whenShutdown_thenShouldExecutorServiceShutdownNow() + { + givenMockThreadPoolExecutor(); + + executor.setWaitForTasksToCompleteOnShutdown(false); + executor.initialize(); + + executor.shutdown(); + + final ThreadPoolExecutor threadPoolExecutor = executor.getThreadPoolExecutor(); + verify(threadPoolExecutor).shutdownNow(); + } + + @Test + public void shutdown_givenIsInitialized_andShouldAwaitTermination_whenShutdown_thenShouldAwaitTermination() throws InterruptedException + { + givenMockThreadPoolExecutor(); + + executor.setWaitForTasksToCompleteOnShutdown(true); + executor.initialize(); + + executor.shutdown(); + + final ThreadPoolExecutor threadPoolExecutor = executor.getThreadPoolExecutor(); + verify(threadPoolExecutor).awaitTermination(TERMINATION_TIMEOUT, TimeUnit.SECONDS); + } + + @Test + public void shutdown_givenIsInitialized_andShouldNotAwaitTermination_whenShutdown_thenShouldNotAwaitTermination() throws InterruptedException + { + executor.setAwaitTerminationSeconds(0); + givenMockThreadPoolExecutor(); + + executor.initialize(); + + executor.shutdown(); + + final ThreadPoolExecutor threadPoolExecutor = executor.getThreadPoolExecutor(); + verify(threadPoolExecutor, never()).awaitTermination(anyInt(), any()); + } + + @Test + public void setCorePoolSize_givenInitialized_thenShouldUpdateExecutor() + { + executor.initialize(); + + final ThreadPoolExecutor threadPoolExecutor = executor.getThreadPoolExecutor(); + assertThat(threadPoolExecutor.getCorePoolSize()).isEqualTo(CORE_POOL_SIZE); + + executor.setCorePoolSize(4); + assertThat(executor.getCorePoolSize()).isEqualTo(4); + assertThat(threadPoolExecutor.getCorePoolSize()).isEqualTo(4); + } + + @Test + public void setMaxPoolSize_givenInitialized_thenShouldUpdateExecutor() + { + executor.initialize(); + + final ThreadPoolExecutor threadPoolExecutor = executor.getThreadPoolExecutor(); + assertThat(threadPoolExecutor.getCorePoolSize()).isEqualTo(CORE_POOL_SIZE); + + executor.setMaxPoolSize(100); + assertThat(executor.getMaxPoolSize()).isEqualTo(100); + assertThat(threadPoolExecutor.getMaximumPoolSize()).isEqualTo(100); + } + + @Test + public void setKeepAliveSeconds_givenInitialized_thenShouldUpdateExecutor() + { + executor.initialize(); + + final ThreadPoolExecutor threadPoolExecutor = executor.getThreadPoolExecutor(); + assertThat(threadPoolExecutor.getCorePoolSize()).isEqualTo(CORE_POOL_SIZE); + + executor.setKeepAliveSeconds(100); + assertThat(executor.getKeepAliveSeconds()).isEqualTo(100); + assertThat(threadPoolExecutor.getKeepAliveTime(TimeUnit.SECONDS)).isEqualTo(100); + } + + @Test + public void givenAllowCoreThreadTimeOut_whenIntialize_thenShouldAllowCoreThreadTimeOut() + { + executor.setAllowCoreThreadTimeOut(true); + + executor.initialize(); + + final ThreadPoolExecutor threadPoolExecutor = executor.getThreadPoolExecutor(); + assertThat(threadPoolExecutor.allowsCoreThreadTimeOut()).isTrue(); + } + + @Test + public void getPoolSize_shouldReturnPoolSizeOfThreadPoolExecutor() + { + final ThreadPoolExecutor threadPoolExecutor = givenMockThreadPoolExecutor(); + given(threadPoolExecutor.getPoolSize()).willReturn(100); + + executor.initialize(); + + assertThat(executor.getPoolSize()).isEqualTo(100); + } + + @Test + public void getActiveCount_shouldReturnActiveCountOfThreadPoolExecutor() + { + final ThreadPoolExecutor threadPoolExecutor = givenMockThreadPoolExecutor(); + given(threadPoolExecutor.getActiveCount()).willReturn(100); + + executor.initialize(); + + assertThat(executor.getActiveCount()).isEqualTo(100); + } + + @Test + public void execute_shouldDelegateToThreadPoolExecutor() + { + final ThreadPoolExecutor threadPoolExecutor = givenMockThreadPoolExecutor(); + + executor.initialize(); + + final Runnable runnable = mock(Runnable.class); + executor.execute(runnable); + + verify(threadPoolExecutor).execute(runnable); + } + + @Test + public void executeWithTimeout_shouldDelegateToThreadPoolExecutor() + { + final ThreadPoolExecutor threadPoolExecutor = givenMockThreadPoolExecutor(); + + executor.initialize(); + + final Runnable runnable = mock(Runnable.class); + executor.execute(runnable, 1L); + + verify(threadPoolExecutor).execute(runnable); + } + + @Test + public void submitRunnable_shouldDelegateToThreadPoolExecutor() + { + final ThreadPoolExecutor threadPoolExecutor = givenMockThreadPoolExecutor(); + + executor.initialize(); + + final Runnable runnable = mock(Runnable.class); + executor.submit(runnable); + + verify(threadPoolExecutor).submit(runnable); + } + + @Test + public void submitCallable_shouldDelegateToThreadPoolExecutor() + { + final ThreadPoolExecutor threadPoolExecutor = givenMockThreadPoolExecutor(); + + executor.initialize(); + + final Callable callable = mock(Callable.class); + executor.submit(callable); + + verify(threadPoolExecutor).submit(callable); + } + + @Test + public void prefersShortLivedTasks_shouldReturnTrue() + { + assertThat(executor.prefersShortLivedTasks()).isTrue(); + } + + @Test + public void start_givenNotRunning_thenShouldInitialize() + { + assertThat(executor.isRunning()).isFalse(); + + executor.start(); + + verify(executor).initialize(); + assertThat(executor.isRunning()).isTrue(); + } + + @Test + public void start_givenRunning_thenShouldNotInitializeAgain() + { + executor.start(); + assertThat(executor.isRunning()).isTrue(); + + executor.start(); + assertThat(executor.isRunning()).isTrue(); + verify(executor, times(1)).initialize(); + } + + @Test + public void stop_givenNotRunning_thenShouldNotShutdown() + { + assertThat(executor.isRunning()).isFalse(); + + executor.stop(); + + verify(executor, never()).shutdown(); + } + + @Test + public void stop_givenRunning_thenShouldShutdown() + { + executor.start(); + assertThat(executor.isRunning()).isTrue(); + + executor.stop(); + + verify(executor).shutdown(); + } + + @Test + public void stopWithRunnable_shouldStopAndThenRunRunnable() + { + final Runnable runnable = mock(Runnable.class); + + executor.stop(runnable); + + verify(executor).stop(); + verify(runnable).run(); + } + +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/scheduling/HybrisAwareThreadPoolTaskSchedulerTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/scheduling/HybrisAwareThreadPoolTaskSchedulerTest.java new file mode 100644 index 0000000..d2dbb3f --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/scheduling/HybrisAwareThreadPoolTaskSchedulerTest.java @@ -0,0 +1,293 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.scheduling; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.core.Tenant; + +import java.util.Optional; +import java.util.concurrent.Callable; +import java.util.concurrent.RejectedExecutionHandler; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Spy; +import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.scheduling.support.DelegatingErrorHandlingRunnable; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.willReturn; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class HybrisAwareThreadPoolTaskSchedulerTest +{ + private static final String BEAN_NAME = "beanName"; + + private static final ThreadFactory THREAD_FACTORY = mock(ThreadFactory.class); + private static final Tenant TENANT = mock(Tenant.class); + private static final int POOL_SIZE = 3; + private static final RejectedExecutionHandler REJ_HANDLER = new ThreadPoolExecutor.AbortPolicy(); + private static final int TERMINATION_TIMEOUT = 6; + + @Spy + private HybrisAwareThreadPoolTaskScheduler scheduler = new HybrisAwareThreadPoolTaskScheduler(); + + @Before + public void setUp() + { + willReturn(TENANT).given(scheduler).getCurrentTenant(); + + scheduler.setRejectedExecutionHandler(REJ_HANDLER); + scheduler.setThreadFactory(THREAD_FACTORY); + scheduler.setAwaitTerminationSeconds(TERMINATION_TIMEOUT); + scheduler.setPoolSize(POOL_SIZE); + + scheduler.afterPropertiesSet(); + + scheduler.setBeanName(BEAN_NAME); + } + + private ScheduledExecutorService givenMockScheduledExecutor() + { + final ScheduledExecutorService threadPoolExecutor = mock(ScheduledExecutorService.class); + willReturn(threadPoolExecutor) + .given(scheduler) + .createExecutorService(eq(TENANT), eq(POOL_SIZE), eq(THREAD_FACTORY), eq(REJ_HANDLER)); + + return threadPoolExecutor; + } + + @Test + public void initialize_shouldSetThreadNamePrefixToNameOfBean() + { + HybrisAwareThreadPoolTaskExecutor local = new HybrisAwareThreadPoolTaskExecutor(); + local.setBeanName(BEAN_NAME); + + local.initialize(); + + assertThat(local.getThreadNamePrefix()).isEqualTo(BEAN_NAME + "-"); + } + + @Test + public void initialize_shouldCreateHybrisAwareThreadPoolExecutorCorrectly() + { + scheduler.initialize(); + + final HybrisAwareScheduledThreadPoolExecutor threadPoolExecutor = Optional.of(scheduler.getScheduledExecutor()) + .filter(HybrisAwareScheduledThreadPoolExecutor.class::isInstance) + .map(HybrisAwareScheduledThreadPoolExecutor.class::cast) + .orElseThrow(() -> new IllegalStateException("scheduledExecutor was not instanceof HybrisAwareScheduledThreadPoolExecutor")); + + + final HybrisAwareScheduledThreadPoolExecutor expected = new HybrisAwareScheduledThreadPoolExecutor(TENANT, POOL_SIZE, THREAD_FACTORY, REJ_HANDLER); + + assertThat(threadPoolExecutor).isEqualToComparingOnlyGivenFields(expected, "tenant", "poolSize", "threadFactory", "handler"); + } + + @Test + public void initialize_givenIsInitialized_shouldMarkAsRunning() + { + assertThat(scheduler.isRunning()).isFalse(); + + scheduler.initialize(); + + assertThat(scheduler.isRunning()).isTrue(); + } + + @Test + public void shutdown_givenIsNotInitialized_shouldNotNullPointer() + { + assertThat(scheduler.isRunning()).isFalse(); + + scheduler.shutdown(); + } + + @Test + public void shutdown_givenIsInitialized_andShouldWaitForShutdown_whenShutdown_thenShouldWaitForExecutorServiceShutdown() + { + givenMockScheduledExecutor(); + + scheduler.setWaitForTasksToCompleteOnShutdown(true); + scheduler.initialize(); + + scheduler.shutdown(); + + final ScheduledExecutorService threadPoolExecutor = scheduler.getScheduledExecutor(); + verify(threadPoolExecutor).shutdown(); + } + + @Test + public void shutdown_givenIsInitialized_andDoNotWaitForShutdown_whenShutdown_thenShouldExecutorServiceShutdownNow() + { + givenMockScheduledExecutor(); + + scheduler.setWaitForTasksToCompleteOnShutdown(false); + scheduler.initialize(); + + scheduler.shutdown(); + + final ScheduledExecutorService threadPoolExecutor = scheduler.getScheduledExecutor(); + verify(threadPoolExecutor).shutdownNow(); + } + + @Test + public void shutdown_givenIsInitialized_andShouldAwaitTermination_whenShutdown_thenShouldAwaitTermination() throws InterruptedException + { + givenMockScheduledExecutor(); + + scheduler.setWaitForTasksToCompleteOnShutdown(true); + scheduler.initialize(); + + scheduler.shutdown(); + + final ScheduledExecutorService threadPoolExecutor = scheduler.getScheduledExecutor(); + verify(threadPoolExecutor).awaitTermination(TERMINATION_TIMEOUT, TimeUnit.SECONDS); + } + + @Test + public void shutdown_givenIsInitialized_andShouldNotAwaitTermination_whenShutdown_thenShouldNotAwaitTermination() throws InterruptedException + { + scheduler.setAwaitTerminationSeconds(0); + givenMockScheduledExecutor(); + + scheduler.initialize(); + + scheduler.shutdown(); + + final ScheduledExecutorService threadPoolExecutor = scheduler.getScheduledExecutor(); + verify(threadPoolExecutor, never()).awaitTermination(anyInt(), any()); + } + + @Test + public void execute_shouldDelegateToThreadPoolExecutor() + { + final ScheduledExecutorService threadPoolExecutor = givenMockScheduledExecutor(); + + scheduler.initialize(); + + final DelegatingErrorHandlingRunnable runnable = mock(DelegatingErrorHandlingRunnable.class); + scheduler.execute(runnable); + + verify(threadPoolExecutor).execute(runnable); + } + + @Test + public void executeWithTimeout_shouldDelegateToThreadPoolExecutor() + { + final ScheduledExecutorService threadPoolExecutor = givenMockScheduledExecutor(); + + scheduler.initialize(); + + final DelegatingErrorHandlingRunnable runnable = mock(DelegatingErrorHandlingRunnable.class); + scheduler.execute(runnable, 1L); + + verify(threadPoolExecutor).execute(runnable); + } + + @Test + public void submitRunnable_shouldDelegateToThreadPoolExecutor() + { + final ScheduledExecutorService threadPoolExecutor = givenMockScheduledExecutor(); + + scheduler.initialize(); + + final DelegatingErrorHandlingRunnable runnable = mock(DelegatingErrorHandlingRunnable.class); + scheduler.submit(runnable); + + verify(threadPoolExecutor).submit(runnable); + } + + @Test + public void submitCallable_shouldDelegateToThreadPoolExecutor() + { + final ScheduledExecutorService threadPoolExecutor = givenMockScheduledExecutor(); + + scheduler.initialize(); + + final Callable callable = mock(Callable.class); + scheduler.submit(callable); + + verify(threadPoolExecutor).submit(callable); + } + + @Test + public void prefersShortLivedTasks_shouldReturnTrue() + { + assertThat(scheduler.prefersShortLivedTasks()).isTrue(); + } + + @Test + public void start_givenNotRunning_thenShouldInitialize() + { + assertThat(scheduler.isRunning()).isFalse(); + + scheduler.start(); + + verify(scheduler).initialize(); + assertThat(scheduler.isRunning()).isTrue(); + } + + @Test + public void start_givenRunning_thenShouldNotInitializeAgain() + { + scheduler.start(); + assertThat(scheduler.isRunning()).isTrue(); + + scheduler.start(); + assertThat(scheduler.isRunning()).isTrue(); + verify(scheduler, times(1)).initialize(); + } + + @Test + public void stop_givenNotRunning_thenShouldNotShutdown() + { + assertThat(scheduler.isRunning()).isFalse(); + + scheduler.stop(); + + verify(scheduler, never()).shutdown(); + } + + @Test + public void stop_givenRunning_thenShouldShutdown() + { + scheduler.start(); + assertThat(scheduler.isRunning()).isTrue(); + + scheduler.stop(); + + verify(scheduler).shutdown(); + } + + @Test + public void stopWithRunnable_shouldStopAndThenRunRunnable() + { + final Runnable runnable = mock(Runnable.class); + + scheduler.stop(runnable); + + verify(scheduler).stop(); + verify(runnable).run(); + } +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/IntegrationTestMonitorAssertionHelper.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/IntegrationTestMonitorAssertionHelper.java new file mode 100644 index 0000000..7b887eb --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/IntegrationTestMonitorAssertionHelper.java @@ -0,0 +1,166 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor; + +import de.hybris.platform.cloud.commons.model.MonitorHistoryDataModel; +import de.hybris.platform.cloud.commons.model.MonitorHistoryEntryActionDataModel; +import de.hybris.platform.cloud.commons.model.MonitorHistoryEntryDataModel; +import de.hybris.platform.cloud.commons.services.monitor.database.MonitorHistoryEnumHelper; +import de.hybris.platform.servicelayer.internal.dao.GenericDao; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; + +import org.assertj.core.api.SoftAssertions; +import org.springframework.beans.factory.annotation.Required; + +import static org.assertj.core.api.Assertions.assertThat; + +public class IntegrationTestMonitorAssertionHelper +{ + private GenericDao monitorHistoryDataDao; + + @Required + public void setMonitorHistoryDataDao(final GenericDao monitorHistoryDataDao) + { + this.monitorHistoryDataDao = monitorHistoryDataDao; + } + + public MonitorHistoryData createHistory(final String key, final SystemArea area, final Status status, final MonitorHistoryEntryData... steps) + { + return createHistory(key, area, status, Arrays.asList(steps)); + } + + public MonitorHistoryData createHistory(final String key, final SystemArea area, final Status status, final List steps) + { + final MonitorHistoryData history = new MonitorHistoryData(); + history.setKey(key); + history.setSystemArea(area); + history.setStatus(status); + history.setEntries(steps); + return history; + } + + public MonitorHistoryEntryData createStep(final Status status, final Step step, final MonitorHistoryEntryActionData... actions) + { + return createStep(status, step, Arrays.asList(actions)); + } + + public MonitorHistoryEntryData createStep(final Status status, final Step step, final List actions) + { + return MonitorHistoryEntryData.builder() + .withStep(step) + .withStatus(status) + .withActions(actions) + .build(); + } + + public MonitorHistoryEntryActionData createAction(final Status status) + { + return MonitorHistoryEntryActionData.builder() + .withStatus(status) + .build(); + } + + public void assertHistoryIsPresent(final MonitorHistoryData expectedHistory) + { + HashMap params = new HashMap<>(); + params.put(MonitorHistoryDataModel.SYSTEMAREA, MonitorHistoryEnumHelper.getMonitorSystemArea(expectedHistory.getSystemArea())); + params.put(MonitorHistoryDataModel.KEY, expectedHistory.getKey()); + + final List histories = monitorHistoryDataDao.find(params); + assertThat(histories).as("History not found using params: " + params).hasSize(1); + + final SoftAssertions softly = new SoftAssertions(); + + final MonitorHistoryDataModel actualHistory = histories.get(0); + softly.assertThat(actualHistory.getStatus()) + .as("Status of history was not as expected") + .isEqualTo(MonitorHistoryEnumHelper.getMonitorStatus(expectedHistory.getStatus())); + assertThatEntriesAreAsExpected(softly, expectedHistory.getEntries(), actualHistory.getEntries()); + + softly.assertAll(); + } + + private void assertThatEntriesAreAsExpected(final SoftAssertions softly, + final List expectedEntries, + final List actualEntries) + { + final int expectedSize = expectedEntries.size(); + final int actualSize = actualEntries.size(); + if (expectedSize != actualSize) + { + softly.assertThat(actualSize) + .as(String.format("Size of actual steps was not as expected.\r\nExpected [%s]\r\nActual [%s]", + expectedEntries.stream() + .map(e -> String.format("Step [%s] Status [%s]", e.getStep(), e.getStatus())) + .collect(Collectors.joining(", ")), + actualEntries.stream() + .map(e -> String.format("Step [%s] Status [%s]", e.getStep(), e.getStatus())) + .collect(Collectors.joining(", ")) + )) + .isEqualTo(expectedSize); + } + else + { + for (int i = 0; i < expectedSize; i++) + { + final MonitorHistoryEntryData expected = expectedEntries.get(i); + final MonitorHistoryEntryDataModel actual = actualEntries.get(i); + + softly.assertThat(actual.getStep()) + .as("Step at index [" + i + "] was not as expected") + .isEqualTo(MonitorHistoryEnumHelper.getMonitorStep(expected.getStep())); + softly.assertThat(actual.getStatus()) + .as("Status of step at index [" + i + "] was not as expected") + .isEqualTo(MonitorHistoryEnumHelper.getMonitorStatus(expected.getStatus())); + assertThatActionsAreAsExpected(softly, expected.getStep(), expected.getActions(), actual.getActions()); + } + } + } + + private void assertThatActionsAreAsExpected(final SoftAssertions softly, final Step step, + final List expectedActions, + final List actualActions) + { + final int expectedSize = expectedActions.size(); + final int actualSize = actualActions.size(); + if (expectedSize != actualSize) + { + softly.assertThat(actualSize) + .as(String.format("Size of actual actions for step [%s] was not as expected.\r\nExpected [%s]\r\nActual [%s]", + step, + expectedActions.stream() + .map(e -> String.format("Code [%s] Status [%s]", e.getCode(), e.getStatus())) + .collect(Collectors.joining(", ")), + actualActions.stream() + .map(e -> String.format("Code [%s] Status [%s]", e.getCode(), e.getStatus())) + .collect(Collectors.joining(", ")) + )) + .isEqualTo(expectedSize); + } + else + { + for (int i = 0; i < expectedSize; i++) + { + final MonitorHistoryEntryActionData expected = expectedActions.get(i); + final MonitorHistoryEntryActionDataModel actual = actualActions.get(i); + + softly.assertThat(actual.getStatus()) + .as("Status of action at index [" + i + "] in step [" + step + "] was not as expected") + .isEqualTo(MonitorHistoryEnumHelper.getMonitorStatus(expected.getStatus())); + } + } + + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/DatabaseMonitorHistoryRestorerTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/DatabaseMonitorHistoryRestorerTest.java new file mode 100644 index 0000000..985ad13 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/DatabaseMonitorHistoryRestorerTest.java @@ -0,0 +1,96 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.database; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.commons.model.MonitorHistoryDataModel; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryFactory; +import de.hybris.platform.cloud.commons.services.monitor.Status; +import de.hybris.platform.cloud.commons.services.monitor.SystemArea; +import de.hybris.platform.cloud.commons.services.monitor.database.dao.MonitorHistoryDataDao; + +import java.util.Arrays; +import java.util.Collections; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.core.convert.converter.Converter; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class DatabaseMonitorHistoryRestorerTest +{ + private static final SystemArea AREA = SystemArea.INTEGRATION; + private static final String KEY = "key"; + + private DatabaseMonitorHistoryRestorer monitor = new DatabaseMonitorHistoryRestorer(); + + @Mock + private MonitorHistoryDataDao monitoryHistoryDao; + + @Mock + private Converter historyReverseConverter; + + private MonitorHistoryFactory historyFactory = new MonitorHistoryFactory(); + + private MonitorHistoryData historyData = new MonitorHistoryData(); + + @Mock + private MonitorHistoryDataModel historyModel; + + @Before + public void setUp() + { + monitor.setMonitoryHistoryDao(monitoryHistoryDao); + monitor.setHistoryReverseConverter(historyReverseConverter); + monitor.setHistoryFactory(historyFactory); + } + + @Test + public void restoreShouldConvertExistingRecordBackIntoHistoryData() + { + given(monitoryHistoryDao.find(AREA, KEY)).willReturn(Collections.singletonList(historyModel)); + given(historyReverseConverter.convert(historyModel)).willReturn(historyData); + + assertThat(monitor.restore(AREA, KEY)).isEqualTo(historyData); + } + + @Test + public void restoreShouldConvertFirstExistingRecordBackIntoHistoryData() + { + given(monitoryHistoryDao.find(AREA, KEY)).willReturn(Arrays.asList(historyModel, mock(MonitorHistoryDataModel.class))); + given(historyReverseConverter.convert(historyModel)).willReturn(historyData); + + assertThat(monitor.restore(AREA, KEY)).isEqualTo(historyData); + } + + @Test + public void restoreShouldCreateNewHistoryDataWhereExistingOneNotFound() + { + given(monitoryHistoryDao.find(AREA, KEY)).willReturn(Collections.emptyList()); + + historyData.setSystemArea(AREA); + historyData.setKey(KEY); + historyData.setStatus(Status.IN_PROGRESS); + historyData.setEntries(Collections.emptyList()); + + assertThat(monitor.restore(AREA, KEY)).isEqualToComparingFieldByField(historyData); + } + +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/DatabaseMonitorRecorderTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/DatabaseMonitorRecorderTest.java new file mode 100644 index 0000000..b9b6466 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/DatabaseMonitorRecorderTest.java @@ -0,0 +1,92 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.database; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.commons.model.MonitorHistoryDataModel; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryData; +import de.hybris.platform.servicelayer.config.ConfigurationService; +import de.hybris.platform.servicelayer.exceptions.ModelSavingException; +import de.hybris.platform.servicelayer.model.ModelService; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Answers; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.core.convert.converter.Converter; + +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.willThrow; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class DatabaseMonitorRecorderTest +{ + private static final String ENABLED = "cloud.commons.monitoring.database.enabled"; + + private DatabaseMonitorRecorder recorder = new DatabaseMonitorRecorder(); + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private ConfigurationService configurationService; + + @Mock + private ModelService modelService; + + @Mock + private Converter historyConverter; + + private MonitorHistoryData historyData = new MonitorHistoryData(); + + @Mock + private MonitorHistoryDataModel historyModel; + + @Before + public void setUp() + { + recorder.setModelService(modelService); + recorder.setHistoryConverter(historyConverter); + recorder.setConfigurationService(configurationService); + + given(configurationService.getConfiguration().getBoolean(ENABLED, false)).willReturn(true); + + given(historyConverter.convert(historyData)).willReturn(historyModel); + } + + @Test + public void shouldNotRecordWhenIsNotEnabled() + { + given(configurationService.getConfiguration().getBoolean(ENABLED, false)).willReturn(false); + + recorder.record(historyData); + + verify(modelService, never()).save(historyModel); + } + + @Test + public void recordShouldSaveConvertedHistory() + { + recorder.record(historyData); + + verify(modelService).save(historyModel); + } + + @Test + public void recordShouldCatchAndLogModelSavingExceptions() + { + willThrow(new ModelSavingException("oh no")).given(modelService).save(historyModel); + + recorder.record(historyData); + } +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryDataConverterTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryDataConverterTest.java new file mode 100644 index 0000000..fa62bdb --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryDataConverterTest.java @@ -0,0 +1,135 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.database.converter; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.commons.enums.MonitorStatus; +import de.hybris.platform.cloud.commons.enums.MonitorSystemArea; +import de.hybris.platform.cloud.commons.model.MonitorHistoryDataModel; +import de.hybris.platform.cloud.commons.model.MonitorHistoryEntryDataModel; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryData; +import de.hybris.platform.cloud.commons.services.monitor.Status; +import de.hybris.platform.cloud.commons.services.monitor.SystemArea; +import de.hybris.platform.core.PK; +import de.hybris.platform.servicelayer.model.ModelService; + +import java.util.Collections; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.core.convert.converter.Converter; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class MonitorHistoryDataConverterTest +{ + private static final SystemArea AREA = SystemArea.INTEGRATION; + private static final String KEY = "key"; + private static final String EXCEPTION_MESSAGE = "exceptionMessage"; + private static final Status STATUS = Status.IN_PROGRESS; + private static final MonitorSystemArea EXPECTED_AREA = MonitorSystemArea.INTEGRATION; + private static final MonitorStatus EXPECTED_STATUS = MonitorStatus.IN_PROGRESS; + + private MonitorHistoryDataConverter converter = new MonitorHistoryDataConverter(); + + @Mock + private ModelService modelService; + + @Mock + private Converter entryConverter; + + private MonitorHistoryData historyData = new MonitorHistoryData(); + + @Mock + private MonitorHistoryDataModel existingModel; + private PK existingPk = PK.fromLong(1L); + + @Mock + private MonitorHistoryDataModel newModel; + + private MonitorHistoryEntryData entryData = MonitorHistoryEntryData.builder().build(); + + @Mock + private MonitorHistoryEntryDataModel entryModel; + + @Before + public void setUp() + { + converter.setModelService(modelService); + converter.setEntryConverter(entryConverter); + + historyData.setSystemArea(AREA); + historyData.setKey(KEY); + historyData.setStatus(STATUS); + historyData.setExceptionMessage(EXCEPTION_MESSAGE); + historyData.setEntries(Collections.singletonList(entryData)); + + given(modelService.get(existingPk)).willReturn(existingModel); + given(modelService.create(MonitorHistoryDataModel.class)).willReturn(newModel); + + given(entryConverter.convert(entryData)).willReturn(entryModel); + } + + @Test + public void convertShouldCreateNewModelWhenHistoryIsNew() + { + historyData.setPk(null); + + final MonitorHistoryDataModel model = converter.convert(historyData); + + assertThat(model).isEqualTo(newModel); + verify(model).setSystemArea(EXPECTED_AREA); + verify(model).setKey(KEY); + verify(model).setStatus(EXPECTED_STATUS); + verify(model).setExceptionMessage(EXCEPTION_MESSAGE); + verify(model).setEntries(Collections.singletonList(entryModel)); + } + + @Test + public void convertShouldUseExistingModelWhenHistoryIsNotNew() + { + historyData.setPk(existingPk); + + final MonitorHistoryDataModel model = converter.convert(historyData); + + assertThat(model).isEqualTo(existingModel); + verify(model).setStatus(EXPECTED_STATUS); + verify(model).setExceptionMessage(EXCEPTION_MESSAGE); + verify(model).setEntries(Collections.singletonList(entryModel)); + verifyNoMoreInteractions(model); + } + + @Test + public void convertReturnEmptyEntriesWhenHistoryHasNone() + { + historyData.setPk(null); + historyData.setEntries(null); + + final MonitorHistoryDataModel model = converter.convert(historyData); + + assertThat(model).isEqualTo(newModel); + verify(model).setSystemArea(EXPECTED_AREA); + verify(model).setKey(KEY); + verify(model).setStatus(EXPECTED_STATUS); + verify(model).setExceptionMessage(EXCEPTION_MESSAGE); + verify(model).setEntries(Collections.emptyList()); + verifyNoMoreInteractions(model); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryEntryActionDataConverterTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryEntryActionDataConverterTest.java new file mode 100644 index 0000000..6ae47cc --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryEntryActionDataConverterTest.java @@ -0,0 +1,100 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.database.converter; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.commons.enums.MonitorStatus; +import de.hybris.platform.cloud.commons.model.MonitorHistoryEntryActionDataModel; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryActionData; +import de.hybris.platform.cloud.commons.services.monitor.Status; +import de.hybris.platform.core.PK; +import de.hybris.platform.servicelayer.model.ModelService; + +import java.util.Date; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class MonitorHistoryEntryActionDataConverterTest +{ + private MonitorHistoryEntryActionDataConverter converter = new MonitorHistoryEntryActionDataConverter(); + + @Mock + private ModelService modelService; + + @Mock + private MonitorHistoryEntryActionDataModel existingModel; + private PK existingPk = PK.fromLong(1L); + + @Mock + private MonitorHistoryEntryActionDataModel newModel; + + @Before + public void setUp() + { + converter.setModelService(modelService); + + given(modelService.get(existingPk)).willReturn(existingModel); + given(modelService.create(MonitorHistoryEntryActionDataModel.class)).willReturn(newModel); + } + + @Test + public void convertShouldCreateNewModelWhenHistoryIsNew() + { + final Date started = new Date(); + final Date ended = new Date(); + + final MonitorHistoryEntryActionData action = MonitorHistoryEntryActionData + .builder() + .withCode("code") + .withStatus(Status.IN_PROGRESS) + .withStarted(started) + .withEnded(ended) + .withDuration(2L) + .withMessage("message") + .build(); + + final MonitorHistoryEntryActionDataModel model = converter.convert(action); + + assertThat(model).isEqualTo(newModel); + verify(model).setCode("code"); + verify(model).setStatus(MonitorStatus.IN_PROGRESS); + verify(model).setStarted(started); + verify(model).setEnded(ended); + verify(model).setDuration(2L); + verify(model).setMessage("message"); + verifyNoMoreInteractions(model); + } + + + @Test + public void convertShouldUseExistingModelWhenHistoryIsNotNew() + { + final MonitorHistoryEntryActionData action = MonitorHistoryEntryActionData.builder() + .withPk(existingPk) + .build(); + + final MonitorHistoryEntryActionDataModel model = converter.convert(action); + + assertThat(model).isEqualTo(existingModel); + verifyNoMoreInteractions(model); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryEntryDataConverterTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryEntryDataConverterTest.java new file mode 100644 index 0000000..1df21c0 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryEntryDataConverterTest.java @@ -0,0 +1,136 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.database.converter; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.commons.enums.MonitorStatus; +import de.hybris.platform.cloud.commons.enums.MonitorStep; +import de.hybris.platform.cloud.commons.model.MonitorHistoryEntryActionDataModel; +import de.hybris.platform.cloud.commons.model.MonitorHistoryEntryDataModel; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryActionData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryData; +import de.hybris.platform.cloud.commons.services.monitor.Status; +import de.hybris.platform.cloud.commons.services.monitor.Step; +import de.hybris.platform.core.PK; +import de.hybris.platform.servicelayer.model.ModelService; + +import java.util.Collections; +import java.util.Date; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.core.convert.converter.Converter; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class MonitorHistoryEntryDataConverterTest +{ + private MonitorHistoryEntryDataConverter converter = new MonitorHistoryEntryDataConverter(); + + @Mock + private ModelService modelService; + + @Mock + private MonitorHistoryEntryDataModel existingModel; + private PK existingPk = PK.fromLong(1L); + + @Mock + private MonitorHistoryEntryDataModel newModel; + + @Mock + private Converter actionConverter; + + private MonitorHistoryEntryActionData actionData = MonitorHistoryEntryActionData.builder().build(); + + @Mock + private MonitorHistoryEntryActionDataModel actionModel; + + @Before + public void setUp() + { + converter.setModelService(modelService); + converter.setActionConverter(actionConverter); + + given(modelService.get(existingPk)).willReturn(existingModel); + given(modelService.create(MonitorHistoryEntryDataModel.class)).willReturn(newModel); + given(actionConverter.convert(actionData)).willReturn(actionModel); + } + + @Test + public void convertShouldCreateNewModelWhenHistoryIsNew() + { + final Date started = new Date(); + final Date ended = new Date(); + + final MonitorHistoryEntryData entryData = MonitorHistoryEntryData + .builder() + .withStep(Step.PROCESS) + .withStatus(Status.IN_PROGRESS) + .withStarted(started) + .withEnded(ended) + .withDuration(2L) + .withNodeId(3) + .withMessage("message") + .withActions(Collections.singletonList(actionData)) + .build(); + + final MonitorHistoryEntryDataModel model = converter.convert(entryData); + + assertThat(model).isEqualTo(newModel); + verify(model).setStep(MonitorStep.PROCESS); + verify(model).setStatus(MonitorStatus.IN_PROGRESS); + verify(model).setStarted(started); + verify(model).setEnded(ended); + verify(model).setDuration(2L); + verify(model).setNodeId(3); + verify(model).setMessage("message"); + verify(model).setActions(Collections.singletonList(actionModel)); + verifyNoMoreInteractions(model); + } + + @Test + public void convertShouldUseExistingModelWhenHistoryIsNotNew() + { + final MonitorHistoryEntryData entryData = MonitorHistoryEntryData.builder() + .withPk(existingPk) + .withActions(Collections.singletonList(actionData)) + .build(); + + final MonitorHistoryEntryDataModel model = converter.convert(entryData); + + assertThat(model).isEqualTo(existingModel); + verify(model).setActions(Collections.singletonList(actionModel)); + verifyNoMoreInteractions(model); + } + + @Test + public void convertReturnEmptyActionWhenEntryHasNone() + { + final MonitorHistoryEntryData entryData = MonitorHistoryEntryData.builder() + .withPk(existingPk) + .withActions(null) + .build(); + + final MonitorHistoryEntryDataModel model = converter.convert(entryData); + + assertThat(model).isEqualTo(existingModel); + verify(model).setActions(Collections.emptyList()); + verifyNoMoreInteractions(model); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryReverseConverterTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryReverseConverterTest.java new file mode 100644 index 0000000..0efb5c4 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryReverseConverterTest.java @@ -0,0 +1,111 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.database.converter; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.commons.enums.MonitorStatus; +import de.hybris.platform.cloud.commons.enums.MonitorSystemArea; +import de.hybris.platform.cloud.commons.model.MonitorHistoryDataModel; +import de.hybris.platform.cloud.commons.model.MonitorHistoryEntryDataModel; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryFactory; +import de.hybris.platform.cloud.commons.services.monitor.Status; +import de.hybris.platform.cloud.commons.services.monitor.SystemArea; +import de.hybris.platform.core.PK; + +import java.util.Collections; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.core.convert.converter.Converter; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class MonitorHistoryReverseConverterTest +{ + private static final String EXCEPTION_MESSAGE = "exceptionMessage"; + private static final String KEY = "key"; + private static final MonitorSystemArea AREA = MonitorSystemArea.INTEGRATION; + private static final MonitorStatus STATUS = MonitorStatus.IN_PROGRESS; + private static final SystemArea EXPECTED_AREA = SystemArea.INTEGRATION; + private static final Status EXPECTED_STATUS = Status.IN_PROGRESS; + private PK pk = PK.fromLong(1L); + + private MonitorHistoryReverseConverter converter = new MonitorHistoryReverseConverter(); + + private MonitorHistoryFactory historyFactory = new MonitorHistoryFactory(); + + @Mock + private Converter entryReverseConverter; + + @Mock + private MonitorHistoryDataModel source; + + @Mock + private MonitorHistoryEntryDataModel entryModel; + + private MonitorHistoryEntryData entryData = MonitorHistoryEntryData.builder().build(); + + @Before + public void setUp() + { + converter.setHistoryFactory(historyFactory); + converter.setEntryReverseConverter(entryReverseConverter); + + given(source.getSystemArea()).willReturn(AREA); + given(source.getKey()).willReturn(KEY); + given(source.getPk()).willReturn(pk); + given(source.getStatus()).willReturn(STATUS); + given(source.getExceptionMessage()).willReturn(EXCEPTION_MESSAGE); + given(source.getEntries()).willReturn(Collections.singletonList(entryModel)); + + given(entryReverseConverter.convert(entryModel)).willReturn(entryData); + } + + @Test + public void shouldConvertDataCorrectly() + { + final MonitorHistoryData expected= new MonitorHistoryData(); + expected.setPk(pk); + expected.setSystemArea(EXPECTED_AREA); + expected.setKey(KEY); + expected.setStatus(EXPECTED_STATUS); + expected.setStatusWhenResumed(EXPECTED_STATUS); + expected.setExceptionMessage(EXCEPTION_MESSAGE); + expected.setEntries(Collections.singletonList(entryData)); + + assertThat(converter.convert(source)).isEqualToComparingFieldByField(expected); + } + + @Test + public void shouldHandleNullEntries() + { + given(source.getEntries()).willReturn(null); + + final MonitorHistoryData expected= new MonitorHistoryData(); + expected.setPk(pk); + expected.setSystemArea(EXPECTED_AREA); + expected.setKey(KEY); + expected.setStatus(EXPECTED_STATUS); + expected.setStatusWhenResumed(EXPECTED_STATUS); + expected.setExceptionMessage(EXCEPTION_MESSAGE); + expected.setEntries(Collections.emptyList()); + + assertThat(converter.convert(source)).isEqualToComparingFieldByField(expected); + } +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryReverseEntryActionDataConverterTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryReverseEntryActionDataConverterTest.java new file mode 100644 index 0000000..e02f060 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryReverseEntryActionDataConverterTest.java @@ -0,0 +1,75 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.database.converter; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.commons.enums.MonitorStatus; +import de.hybris.platform.cloud.commons.model.MonitorHistoryEntryActionDataModel; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryActionData; +import de.hybris.platform.cloud.commons.services.monitor.Status; +import de.hybris.platform.core.PK; + +import java.util.Date; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class MonitorHistoryReverseEntryActionDataConverterTest +{ + private static final MonitorStatus STATUS = MonitorStatus.IN_PROGRESS; + private static final Status EXPECTED_STATUS = Status.IN_PROGRESS; + private static final String MESSAGE = "message"; + private static final String CODE = "code"; + private PK pk = PK.fromLong(1L); + + private MonitorHistoryReverseEntryActionDataConverter converter = new MonitorHistoryReverseEntryActionDataConverter(); + + @Mock + private MonitorHistoryEntryActionDataModel source; + private Date started = new Date(); + private Date ended = new Date(); + + @Before + public void setUp() + { + given(source.getPk()).willReturn(pk); + given(source.getCode()).willReturn(CODE); + given(source.getStatus()).willReturn(STATUS); + given(source.getStarted()).willReturn(started); + given(source.getEnded()).willReturn(ended); + given(source.getDuration()).willReturn(2L); + given(source.getMessage()).willReturn(MESSAGE); + } + + @Test + public void shouldConvertDataCorrectly() + { + final MonitorHistoryEntryActionData expected = MonitorHistoryEntryActionData.builder() + .withPk(pk) + .withCode(CODE) + .withStatus(EXPECTED_STATUS) + .withStarted(started) + .withEnded(ended) + .withDuration(2L) + .withMessage(MESSAGE) + .build(); + + assertThat(converter.convert(source)).isEqualToComparingFieldByField(expected); + } +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryReverseEntryConverterTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryReverseEntryConverterTest.java new file mode 100644 index 0000000..708c219 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/converter/MonitorHistoryReverseEntryConverterTest.java @@ -0,0 +1,138 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.database.converter; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.commons.enums.MonitorStatus; +import de.hybris.platform.cloud.commons.enums.MonitorStep; +import de.hybris.platform.cloud.commons.model.MonitorHistoryEntryActionDataModel; +import de.hybris.platform.cloud.commons.model.MonitorHistoryEntryDataModel; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryActionData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryData; +import de.hybris.platform.cloud.commons.services.monitor.Status; +import de.hybris.platform.cloud.commons.services.monitor.Step; +import de.hybris.platform.core.PK; + +import java.util.Collections; +import java.util.Date; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.core.convert.converter.Converter; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class MonitorHistoryReverseEntryConverterTest +{ + private static final MonitorStatus STATUS = MonitorStatus.IN_PROGRESS; + private static final MonitorStep STEP = MonitorStep.PROCESS; + private static final Status EXPECTED_STATUS = Status.IN_PROGRESS; + private static final Step EXPECTED_STEP = Step.PROCESS; + private static final String MESSAGE = "message"; + private PK pk = PK.fromLong(1L); + + private MonitorHistoryReverseEntryConverter converter = new MonitorHistoryReverseEntryConverter(); + + @Mock + private MonitorHistoryEntryDataModel source; + private Date started = new Date(); + private Date ended = new Date(); + + @Mock + private Converter actionReverseConverter; + + @Mock + private MonitorHistoryEntryActionDataModel actionModel; + + @Mock + private MonitorHistoryEntryActionData actionData; + + @Before + public void setUp() + { + converter.setActionReverseConverter(actionReverseConverter); + + given(source.getPk()).willReturn(pk); + given(source.getStep()).willReturn(STEP); + given(source.getStatus()).willReturn(STATUS); + given(source.getStarted()).willReturn(started); + given(source.getEnded()).willReturn(ended); + given(source.getDuration()).willReturn(2L); + given(source.getNodeId()).willReturn(3); + given(source.getMessage()).willReturn(MESSAGE); + given(source.getActions()).willReturn(Collections.singletonList(actionModel)); + + given(actionReverseConverter.convert(actionModel)).willReturn(actionData); + } + + @Test + public void shouldConvertDataCorrectly() + { + final MonitorHistoryEntryData expected = MonitorHistoryEntryData.builder() + .withPk(pk) + .withStep(EXPECTED_STEP) + .withStatus(EXPECTED_STATUS) + .withStarted(started) + .withEnded(ended) + .withDuration(2L) + .withNodeId(3) + .withMessage(MESSAGE) + .withActions(Collections.singletonList(actionData)) + .build(); + + assertThat(converter.convert(source)).isEqualToComparingFieldByField(expected); + } + + @Test + public void shouldHandleNullActions() + { + given(source.getActions()).willReturn(null); + + final MonitorHistoryEntryData expected = MonitorHistoryEntryData.builder() + .withPk(pk) + .withStep(EXPECTED_STEP) + .withStatus(EXPECTED_STATUS) + .withStarted(started) + .withEnded(ended) + .withDuration(2L) + .withNodeId(3) + .withMessage(MESSAGE) + .withActions(Collections.emptyList()) + .build(); + + final MonitorHistoryEntryData actual = converter.convert(source); + assertThat(actual).isEqualToComparingFieldByField(expected); + assertThat(actual.getActions()).isEmpty(); + actual.addToActions(MonitorHistoryEntryActionData.builder().build()); + assertThat(actual.getActions()).isNotEmpty(); + } + + @Test + public void shouldBeAbleToAddToActionsAfterwards() + { + final MonitorHistoryEntryData withActions = converter.convert(source); + assertThat(withActions.getActions()).hasSize(1); + withActions.addToActions(MonitorHistoryEntryActionData.builder().build()); + assertThat(withActions.getActions()).hasSize(2); + + given(source.getActions()).willReturn(null); + final MonitorHistoryEntryData noActions = converter.convert(source); + assertThat(noActions.getActions()).isEmpty(); + noActions.addToActions(MonitorHistoryEntryActionData.builder().build()); + assertThat(noActions.getActions()).isNotEmpty(); + } +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/dao/impl/DefaultMonitorHistoryDataDaoTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/dao/impl/DefaultMonitorHistoryDataDaoTest.java new file mode 100644 index 0000000..fca7e8b --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/database/dao/impl/DefaultMonitorHistoryDataDaoTest.java @@ -0,0 +1,91 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.database.dao.impl; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.commons.enums.MonitorSystemArea; +import de.hybris.platform.cloud.commons.model.MonitorHistoryDataModel; +import de.hybris.platform.cloud.commons.services.monitor.SystemArea; +import de.hybris.platform.servicelayer.search.FlexibleSearchQuery; +import de.hybris.platform.servicelayer.search.FlexibleSearchService; +import de.hybris.platform.servicelayer.search.SearchResult; + +import java.util.Collections; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; + +import com.google.common.collect.ImmutableMap; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; +import static org.mockito.Matchers.isA; +import static org.mockito.Mockito.verify; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class DefaultMonitorHistoryDataDaoTest +{ + private static final SystemArea AREA = SystemArea.INTEGRATION; + private static final MonitorSystemArea EXPECTED_AREA = MonitorSystemArea.INTEGRATION; + private static final String KEY = "ABC"; + + private static final String SQL = String.format("SELECT {c:pk} FROM {%s AS c} WHERE {c:%s}=?%s AND {c:%s}=?%s ", + MonitorHistoryDataModel._TYPECODE, + MonitorHistoryDataModel.SYSTEMAREA, MonitorHistoryDataModel.SYSTEMAREA, + MonitorHistoryDataModel.KEY, MonitorHistoryDataModel.KEY + ); + + private DefaultMonitorHistoryDataDao dao = new DefaultMonitorHistoryDataDao(); + + @Mock + private FlexibleSearchService flexibleSearchService; + + @Mock + private SearchResult searchResult; + + @Mock + private MonitorHistoryDataModel historyModel; + + @Before + public void setUp() + { + dao.setFlexibleSearchService(flexibleSearchService); + + given(flexibleSearchService.search(isA(FlexibleSearchQuery.class))).willReturn(searchResult); + + given(searchResult.getResult()).willReturn(Collections.singletonList(historyModel)); + } + + @Test + public void shouldSearchReturnResultFromSearch() { + assertThat(dao.find(AREA, KEY)).isEqualTo(Collections.singletonList(historyModel)); + } + + @Test + public void shouldSearchWithStringValueOfEnum() { + dao.find(AREA, KEY); + + final ArgumentCaptor arg = ArgumentCaptor.forClass(FlexibleSearchQuery.class); + verify(flexibleSearchService).search(arg.capture()); + final FlexibleSearchQuery actual = arg.getValue(); + + final FlexibleSearchQuery expected = new FlexibleSearchQuery(SQL); + expected.addQueryParameters(ImmutableMap.of(MonitorHistoryDataModel.SYSTEMAREA, EXPECTED_AREA, MonitorHistoryDataModel.KEY, KEY)); + + assertThat(actual).isEqualToComparingOnlyGivenFields(expected, "queryParameters"); + } + +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/impl/DefaultMonitorServiceTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/impl/DefaultMonitorServiceTest.java new file mode 100644 index 0000000..aea1c46 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/impl/DefaultMonitorServiceTest.java @@ -0,0 +1,377 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.impl; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryActionData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryFactory; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryRestorer; +import de.hybris.platform.cloud.commons.services.monitor.MonitorRecorder; +import de.hybris.platform.cloud.commons.services.monitor.Status; +import de.hybris.platform.cloud.commons.services.monitor.Step; +import de.hybris.platform.cloud.commons.services.monitor.SystemArea; +import de.hybris.platform.cloud.commons.services.monitor.impl.DefaultMonitorService.DefaultMonitorHistory; + +import java.util.Collections; +import java.util.Date; +import java.util.LinkedList; +import java.util.List; +import java.util.Optional; + +import org.joda.time.DateTime; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.runners.MockitoJUnitRunner; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.willReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class DefaultMonitorServiceTest +{ + private static final String KEY = "key"; + private static final int NODE_ID = 11; + private static final SystemArea AREA = SystemArea.INTEGRATION; + + @Spy + private DefaultMonitorService service = new DefaultMonitorService(); + + @Mock + private MonitorRecorder monitorRecorder; + + @Mock + private MonitorHistoryRestorer resumeMonitorRestorer; + + @Spy + private MonitorHistoryFactory historyFactory = new MonitorHistoryFactory(); + + @Before + public void setUp() + { + service.setMonitorRecorder(monitorRecorder); + service.setResumeMonitorRestorer(resumeMonitorRestorer); + service.setHistoryFactory(historyFactory); + + willReturn(NODE_ID).given(service).getClusterId(); + } + + @Test + public void service_beginShouldReturnNewHistoryAndSetItAsThreadLocal() + { + final MonitorHistoryData expected = new MonitorHistoryData(); + expected.setKey(KEY); + expected.setSystemArea(AREA); + expected.setStatus(Status.IN_PROGRESS); + expected.setEntries(new LinkedList<>()); + + final DefaultMonitorHistory actual = (DefaultMonitorHistory) service.begin(AREA, KEY); + + assertThat(actual.getHistory()).isEqualToComparingFieldByField(expected); + assertThat(service.current()).isEqualTo(Optional.of(actual)); + } + + @Test + public void service_currentShouldReturnEmptyWhenNoSet() + { + assertThat(service.current()).isEmpty(); + } + + @Test + public void service_resumeShouldReturnExistingHistoryAndSetItAsThreadLocal() + { + final MonitorHistoryData expected = historyFactory.create(AREA, KEY); + given(resumeMonitorRestorer.restore(AREA, KEY)).willReturn(expected); + + final DefaultMonitorHistory actual = (DefaultMonitorHistory) service.resume(AREA, KEY); + + final MonitorHistoryData history = actual.getHistory(); + assertThat(history).isEqualTo(expected); + assertThat(service.current()).isEqualTo(Optional.of(actual)); + } + + @Test + public void history_stepSucceededShouldAddEntryWithDataIntoEntries() + { + final MonitorHistoryData expected = historyFactory.create(AREA, KEY); + given(resumeMonitorRestorer.restore(AREA, KEY)).willReturn(expected); + + final DefaultMonitorHistory originalHistory = (DefaultMonitorHistory) service.resume(AREA, KEY); + + final DateTime now = DateTime.now(); + final Integer duration = 5; + final Date start = now.toDate(); + final Date end = now.plusMillis(duration).toDate(); + + final DefaultMonitorHistory newHistory = originalHistory.stepSucceeded(Step.PROCESS, start, end, "Arg [{}]", "val"); + + assertThat(newHistory).isSameAs(originalHistory); + + final MonitorHistoryEntryData expectedEntry = MonitorHistoryEntryData.builder() + .withStep(Step.PROCESS) + .withStatus(Status.SUCCESS) + .withStarted(start) + .withEnded(end) + .withDuration(duration.longValue()) + .withMessage("Arg [val]") + .withNodeId(NODE_ID) + .withActions(Collections.emptyList()) + .build(); + + final List actualEntries = newHistory.getHistory().getEntries(); + assertThat(actualEntries).hasSize(1); + assertThat(actualEntries.get(0)).isEqualToComparingFieldByField(expectedEntry); + } + + @Test + public void history_stepFailedShouldAddEntryWithDataIntoEntries() + { + final MonitorHistoryData expected = historyFactory.create(AREA, KEY); + given(resumeMonitorRestorer.restore(AREA, KEY)).willReturn(expected); + + final DefaultMonitorHistory originalHistory = (DefaultMonitorHistory) service.resume(AREA, KEY); + + final DateTime now = DateTime.now(); + final Integer duration = 5; + final Date start = now.toDate(); + final Date end = now.plusMillis(duration).toDate(); + + final IllegalArgumentException exception = new IllegalArgumentException("some error message"); + final DefaultMonitorHistory newHistory = originalHistory.stepFailed(Step.PROCESS, start, end, exception, "Argument [{}]", "value"); + + assertThat(newHistory).isSameAs(originalHistory); + + assertThat(newHistory.getHistory().getException()).isEqualTo(exception); + assertThat(newHistory.getHistory().getExceptionMessage()).isEqualTo("some error message"); + + final MonitorHistoryEntryData expectedEntry = MonitorHistoryEntryData.builder() + .withStep(Step.PROCESS) + .withStatus(Status.FAILURE) + .withStarted(start) + .withEnded(end) + .withDuration(duration.longValue()) + .withMessage("Argument [value]") + .withNodeId(NODE_ID) + .withActions(Collections.emptyList()) + .build(); + + final List actualEntries = newHistory.getHistory().getEntries(); + assertThat(actualEntries).hasSize(1); + assertThat(actualEntries.get(0)).isEqualToComparingFieldByField(expectedEntry); + } + + @Test + public void history_checkpointShouldRecordHistoryAndRemoveCurrentValue() + { + final DefaultMonitorHistory monitorHistory = (DefaultMonitorHistory) service.begin(AREA, KEY); + final MonitorHistoryData historyData = monitorHistory.getHistory(); + + monitorHistory.checkpoint(); + + verify(monitorRecorder).record(historyData); + assertThat(service.current()).isEmpty(); + } + + @Test + public void history_endShouldSetStatusAndRecordHistoryAndRemoveCurrentValue() + { + final DefaultMonitorHistory monitorHistory = (DefaultMonitorHistory) service.begin(AREA, KEY); + final MonitorHistoryData historyData = monitorHistory.getHistory(); + + monitorHistory.stepSucceeded(Step.PROCESS, null, null, null) + .end(Status.SUCCESS); + + assertThat(historyData.getStatus()).isEqualTo(Status.SUCCESS); + verify(monitorRecorder).record(historyData); + assertThat(service.current()).isEmpty(); + } + + @Test + public void history_endShouldRetainFailedStatusWhenAnyEntryIsNotSuccessful() + { + final DefaultMonitorHistory monitorHistory = (DefaultMonitorHistory) service.begin(AREA, KEY); + final MonitorHistoryData historyData = monitorHistory.getHistory(); + + monitorHistory.stepFailed(Step.PROCESS, null, null, null, null) + .end(Status.FAILURE); + + assertThat(historyData.getStatus()).isEqualTo(Status.FAILURE); + verify(monitorRecorder).record(historyData); + assertThat(service.current()).isEmpty(); + } + + @Test + public void history_endShouldAdjustSuccessStatusToWarningWhenAnyEntryIsNotSuccessful() + { + final DefaultMonitorHistory monitorHistory = (DefaultMonitorHistory) service.begin(AREA, KEY); + final MonitorHistoryData historyData = monitorHistory.getHistory(); + + monitorHistory.stepFailed(Step.PROCESS, null, null, null, null) + .end(Status.SUCCESS); + + assertThat(historyData.getStatus()).isEqualTo(Status.WARNING); + verify(monitorRecorder).record(historyData); + assertThat(service.current()).isEmpty(); + } + + @Test + public void history_addActionShouldNotModifyHistoryData() + { + final MonitorHistoryData historyData = mock(MonitorHistoryData.class); + given(historyFactory.create(AREA, KEY)).willReturn(historyData); + final DefaultMonitorHistory monitorHistory = (DefaultMonitorHistory) service.begin(AREA, KEY); + + monitorHistory.addAction("code", Status.IN_PROGRESS, new Date(), new Date(), "message"); + + verifyNoMoreInteractions(historyData); + } + + @Test + public void history_actionsAddedShouldBeIncludedInSuccessfulStepAdded() + { + final DefaultMonitorHistory monitorHistory = (DefaultMonitorHistory) service.begin(AREA, KEY); + + final DateTime now = DateTime.now(); + final Integer duration = 5; + final Date actionStart = now.toDate(); + final Date actionEnd = now.plusMillis(duration).toDate(); + final Date stepStart = now.minusSeconds(duration).toDate(); + final Date stepEnd = now.minusSeconds(duration).plusMillis(duration).toDate(); + + monitorHistory.addAction("code", Status.IN_PROGRESS, actionStart, actionEnd, "message") + .stepSucceeded(Step.PROCESS, stepStart, stepEnd, "Arg [{}]", "val"); + + final MonitorHistoryEntryActionData expectedAction = MonitorHistoryEntryActionData.builder() + .withCode("code") + .withStatus(Status.IN_PROGRESS) + .withStarted(actionStart) + .withEnded(actionEnd) + .withDuration(duration.longValue()) + .withMessage("message") + .build(); + + final MonitorHistoryEntryData expectedEntry = MonitorHistoryEntryData.builder() + .withStep(Step.PROCESS) + .withStatus(Status.SUCCESS) + .withStarted(stepStart) + .withEnded(stepEnd) + .withDuration(duration.longValue()) + .withMessage("Arg [val]") + .withNodeId(NODE_ID) + .withActions(Collections.singletonList(expectedAction)) + .build(); + + final List actualEntries = monitorHistory.getHistory().getEntries(); + assertThat(actualEntries).hasSize(1); + assertThat(actualEntries.get(0)).isEqualToIgnoringGivenFields(expectedEntry, "actions"); + assertThat(actualEntries.get(0).getActions()).hasSize(1); + assertThat(actualEntries.get(0).getActions().get(0)).isEqualToComparingFieldByField(expectedAction); + } + + @Test + public void history_actionsAddedShouldBeIncludedInFailedStepAdded() + { + final DefaultMonitorHistory monitorHistory = (DefaultMonitorHistory) service.begin(AREA, KEY); + + final DateTime now = DateTime.now(); + final Integer duration = 5; + final Date actionStart = now.toDate(); + final Date actionEnd = now.plusMillis(duration).toDate(); + final Date stepStart = now.minusSeconds(duration).toDate(); + final Date stepEnd = now.minusSeconds(duration).plusMillis(duration).toDate(); + + final RuntimeException ex = new RuntimeException("random message"); + + monitorHistory.addAction("code", Status.FAILURE, actionStart, actionEnd, "message") + .stepFailed(Step.PROCESS, stepStart, stepEnd, ex,"Arg [{}]", "val"); + + final MonitorHistoryEntryActionData expectedAction = MonitorHistoryEntryActionData.builder() + .withCode("code") + .withStatus(Status.FAILURE) + .withStarted(actionStart) + .withEnded(actionEnd) + .withDuration(duration.longValue()) + .withMessage("message") + .build(); + + final MonitorHistoryEntryData expectedEntry = MonitorHistoryEntryData.builder() + .withStep(Step.PROCESS) + .withStatus(Status.FAILURE) + .withStarted(stepStart) + .withEnded(stepEnd) + .withDuration(duration.longValue()) + .withMessage("Arg [val]") + .withNodeId(NODE_ID) + .withActions(Collections.singletonList(expectedAction)) + .build(); + + final MonitorHistoryData history = monitorHistory.getHistory(); + assertThat(history.getException()).isEqualTo(ex); + assertThat(history.getExceptionMessage()).isEqualTo(ex.getMessage()); + + final List actualEntries = history.getEntries(); + assertThat(actualEntries).hasSize(1); + assertThat(actualEntries.get(0)).isEqualToIgnoringGivenFields(expectedEntry, "actions"); + assertThat(actualEntries.get(0).getActions()).hasSize(1); + assertThat(actualEntries.get(0).getActions().get(0)).isEqualToComparingFieldByField(expectedAction); + } + + @Test + public void history_failedActionsAddedShouldBeSetSuccessfulStepAsWarningInstead() + { + final DefaultMonitorHistory monitorHistory = (DefaultMonitorHistory) service.begin(AREA, KEY); + + final DateTime now = DateTime.now(); + final Integer duration = 5; + final Date actionStart = now.toDate(); + final Date actionEnd = now.plusMillis(duration).toDate(); + final Date stepStart = now.minusSeconds(duration).toDate(); + final Date stepEnd = now.minusSeconds(duration).plusMillis(duration).toDate(); + + monitorHistory.addAction("code", Status.FAILURE, actionStart, actionEnd, "message") + .stepSucceeded(Step.PROCESS, stepStart, stepEnd, "Arg [{}]", "val"); + + final MonitorHistoryEntryActionData expectedAction = MonitorHistoryEntryActionData.builder() + .withCode("code") + .withStatus(Status.FAILURE) + .withStarted(actionStart) + .withEnded(actionEnd) + .withDuration(duration.longValue()) + .withMessage("message") + .build(); + + final MonitorHistoryEntryData expectedEntry = MonitorHistoryEntryData.builder() + .withStep(Step.PROCESS) + .withStatus(Status.WARNING) + .withStarted(stepStart) + .withEnded(stepEnd) + .withDuration(duration.longValue()) + .withMessage("Arg [val]") + .withNodeId(NODE_ID) + .withActions(Collections.singletonList(expectedAction)) + .build(); + + final List actualEntries = monitorHistory.getHistory().getEntries(); + assertThat(actualEntries).hasSize(1); + assertThat(actualEntries.get(0)).isEqualToIgnoringGivenFields(expectedEntry, "actions"); + assertThat(actualEntries.get(0).getActions()).hasSize(1); + assertThat(actualEntries.get(0).getActions().get(0)).isEqualToComparingFieldByField(expectedAction); + } +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/job/MonitorHistoryMaintenanceCleanupStrategyTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/job/MonitorHistoryMaintenanceCleanupStrategyTest.java new file mode 100644 index 0000000..90edf2e --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/job/MonitorHistoryMaintenanceCleanupStrategyTest.java @@ -0,0 +1,106 @@ +package de.hybris.platform.cloud.commons.services.monitor.job; + +import com.google.common.collect.ImmutableMap; +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.commons.enums.MonitorStatus; +import de.hybris.platform.cloud.commons.model.MonitorHistoryDataModel; +import de.hybris.platform.cronjob.model.CronJobModel; +import de.hybris.platform.servicelayer.config.ConfigurationService; +import de.hybris.platform.servicelayer.model.ModelService; +import de.hybris.platform.servicelayer.search.FlexibleSearchQuery; +import de.hybris.platform.servicelayer.time.TimeService; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Answers; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; + +import java.util.Calendar; +import java.util.Collections; +import java.util.Date; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +@RunWith(MockitoJUnitRunner.class) +@UnitTest +public class MonitorHistoryMaintenanceCleanupStrategyTest { + + private MonitorHistoryMaintenanceCleanupStrategy strategy = new MonitorHistoryMaintenanceCleanupStrategy(); + + @Mock + private ModelService modelService; + + @Mock + private CronJobModel cronJob; + + @Mock + private TimeService timeService; + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private ConfigurationService configurationService; + + private final Date seedDate = new Date(); + + @Before + public void setUp() { + strategy.setConfigurationService(configurationService); + strategy.setModelService(modelService); + strategy.setTimeService(timeService); + strategy.setThresholdConfigKey("config.key"); + + given(timeService.getCurrentTime()).willReturn(seedDate); + given(configurationService.getConfiguration().getInt("config.key", 7)).willReturn(10); + + } + + @Test + public void createQueryShouldReturnEqualToWhenRequired() { + strategy.setStatus(MonitorStatus.SUCCESS); + strategy.setStatusCondition("="); + + final Calendar calendar = Calendar.getInstance(); + calendar.setTime(seedDate); + calendar.add(Calendar.DATE, -10); + + final FlexibleSearchQuery query = strategy.createFetchQuery(cronJob); + + assertThat(query.getQuery()).isEqualTo("SELECT {pk} FROM {MonitorHistoryData} WHERE {modifiedtime} < ?threshold AND {status} = ?status"); + assertThat(query.getQueryParameters()).isEqualTo( + ImmutableMap.builder() + .put(MonitorHistoryMaintenanceCleanupStrategy.THRESHOLD_PARAM, calendar.getTime()) + .put(MonitorHistoryMaintenanceCleanupStrategy.STATUS_PARAM, MonitorStatus.SUCCESS) + .build()); + } + + @Test + public void createQueryShouldReturnNotEqualToWhenRequired() { + strategy.setStatus(MonitorStatus.SUCCESS); + strategy.setStatusCondition("!="); + + final Calendar calendar = Calendar.getInstance(); + calendar.setTime(seedDate); + calendar.add(Calendar.DATE, -10); + + final FlexibleSearchQuery query = strategy.createFetchQuery(cronJob); + + assertThat(query.getQuery()).isEqualTo("SELECT {pk} FROM {MonitorHistoryData} WHERE {modifiedtime} < ?threshold AND {status} != ?status"); + assertThat(query.getQueryParameters()).isEqualTo(ImmutableMap.builder() + .put(MonitorHistoryMaintenanceCleanupStrategy.THRESHOLD_PARAM, calendar.getTime()) + .put(MonitorHistoryMaintenanceCleanupStrategy.STATUS_PARAM, MonitorStatus.SUCCESS) + .build()); + } + + @Test + public void processShouldRemoveAllModels() { + final MonitorHistoryDataModel model = mock(MonitorHistoryDataModel.class); + + strategy.process(Collections.singletonList(model)); + + verify(modelService).removeAll(Collections.singletonList(model)); + } + +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/job/MonitorHistoryMaintenanceJobsIntegrationTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/job/MonitorHistoryMaintenanceJobsIntegrationTest.java new file mode 100644 index 0000000..3e828cc --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/job/MonitorHistoryMaintenanceJobsIntegrationTest.java @@ -0,0 +1,149 @@ +package de.hybris.platform.cloud.commons.services.monitor.job; + +import de.hybris.bootstrap.annotations.IntegrationTest; +import de.hybris.platform.cloud.commons.enums.MonitorStatus; +import de.hybris.platform.cloud.commons.enums.MonitorSystemArea; +import de.hybris.platform.cloud.commons.model.MonitorHistoryDataModel; +import de.hybris.platform.core.PK; +import de.hybris.platform.cronjob.enums.CronJobResult; +import de.hybris.platform.cronjob.enums.CronJobStatus; +import de.hybris.platform.cronjob.model.CronJobModel; +import de.hybris.platform.jobs.GenericMaintenanceJobPerformable; +import de.hybris.platform.servicelayer.ServicelayerTransactionalBaseTest; +import de.hybris.platform.servicelayer.config.ConfigurationService; +import de.hybris.platform.servicelayer.cronjob.PerformResult; +import de.hybris.platform.servicelayer.exceptions.ModelLoadingException; +import de.hybris.platform.servicelayer.internal.model.MaintenanceCleanupJobModel; +import de.hybris.platform.servicelayer.model.ModelService; +import de.hybris.platform.servicelayer.time.TimeService; +import org.apache.commons.configuration.Configuration; +import org.joda.time.DateTime; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import javax.annotation.Resource; +import java.util.Date; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +@IntegrationTest +public class MonitorHistoryMaintenanceJobsIntegrationTest extends ServicelayerTransactionalBaseTest { + + @Resource + private ModelService modelService; + + @Resource + private TimeService timeService; + + @Resource + private GenericMaintenanceJobPerformable cleanUpMonitorHistorySuccessfulJob; + + @Resource + private GenericMaintenanceJobPerformable cleanUpMonitorHistoryUnsuccessfulJob; + + @Resource + private ConfigurationService configurationService; + + private int successfulThreshold; + private int unsuccessfulThreshold; + + @Before + public void setUp() { + final Configuration configuration = configurationService.getConfiguration(); + successfulThreshold = configuration.getInt("cloud.commons.monitoring.job.cleanup.successful.threshold"); + unsuccessfulThreshold = configuration.getInt("cloud.commons.monitoring.job.cleanup.unsuccessful.threshold"); + } + + @After + public void tearDown() { + //Go back to current date/time + timeService.setCurrentTime(null); + } + + @Test + public void shouldDeleteSuccessfulDataOnceThresholdIsReached() { + + //Go back to current date/time + timeService.setCurrentTime(null); + + final MonitorHistoryDataModel dataModel = modelService.create(MonitorHistoryDataModel.class); + dataModel.setKey("success"); + dataModel.setStatus(MonitorStatus.SUCCESS); + dataModel.setSystemArea(MonitorSystemArea.INTEGRATION); + + modelService.save(dataModel); + final long pk = dataModel.getPk().getLong(); + + final Date thresholdDate = new DateTime(dataModel.getModifiedtime()) + .plusDays(successfulThreshold) + .plusSeconds(1) + .toDate(); + + runJob(cleanUpMonitorHistorySuccessfulJob); + + assertNotNull("PK should still exist", getModelForPk(pk)); + + timeService.setCurrentTime(thresholdDate); + runJob(cleanUpMonitorHistorySuccessfulJob); + + assertNull("PK should not exist", getModelForPk(pk)); + } + + @Test + public void shouldDeleteUnsuccessfulDataOnceThresholdIsReached() { + + //Go back to current date/time + timeService.setCurrentTime(null); + + final MonitorHistoryDataModel dataModel = modelService.create(MonitorHistoryDataModel.class); + dataModel.setKey("failure"); + dataModel.setStatus(MonitorStatus.FAILURE); + dataModel.setSystemArea(MonitorSystemArea.INTEGRATION); + + modelService.save(dataModel); + final long pk = dataModel.getPk().getLong(); + final Date successfulThresholdDate = new DateTime(dataModel.getModifiedtime()) + .plusDays(successfulThreshold) + .plusSeconds(1) + .toDate(); + final Date unsuccessfulThresholdDate = new DateTime(dataModel.getModifiedtime()) + .plusDays(unsuccessfulThreshold) + .plusSeconds(1) + .toDate(); + + runJob(cleanUpMonitorHistoryUnsuccessfulJob); + + assertNotNull("PK should still exist", getModelForPk(pk)); + + timeService.setCurrentTime(successfulThresholdDate); + runJob(cleanUpMonitorHistoryUnsuccessfulJob); + + assertNotNull("PK should still exist", getModelForPk(pk)); + + timeService.setCurrentTime(unsuccessfulThresholdDate); + runJob(cleanUpMonitorHistoryUnsuccessfulJob); + + assertNull("PK should not exist", getModelForPk(pk)); + } + + private void runJob(final GenericMaintenanceJobPerformable performable) { + final MaintenanceCleanupJobModel job = new MaintenanceCleanupJobModel(); + final CronJobModel cjm = new CronJobModel(); + cjm.setJob(job); + final PerformResult result = performable.perform(cjm); + assertEquals(CronJobResult.SUCCESS, result.getResult()); + assertEquals(CronJobStatus.FINISHED, result.getStatus()); + } + + private MonitorHistoryDataModel getModelForPk(final long pk) { + try { + return modelService.get(PK.fromLong(pk)); + } catch (final ModelLoadingException e) { + return null; + } + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/logging/LoggingMonitorRecorderTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/logging/LoggingMonitorRecorderTest.java new file mode 100644 index 0000000..d9e87b7 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/logging/LoggingMonitorRecorderTest.java @@ -0,0 +1,93 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.logging; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryData; +import de.hybris.platform.cloud.commons.services.monitor.Status; +import de.hybris.platform.servicelayer.config.ConfigurationService; + +import java.util.Collections; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Answers; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.core.convert.converter.Converter; + +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class LoggingMonitorRecorderTest +{ + private static final String ENABLED = "cloud.commons.monitoring.logging.enabled"; + + @Spy + private LoggingMonitorRecorder recorder = new LoggingMonitorRecorder(); + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private ConfigurationService configurationService; + + private MonitorHistoryData history = new MonitorHistoryData(); + + @Mock + private Converter historyConverter; + + @Before + public void setUp() + { + recorder.setHistoryConverter(historyConverter); + recorder.setConfigurationService(configurationService); + recorder.setInfoStatuses(Collections.singletonList(Status.SUCCESS)); + recorder.setErrorStatuses(Collections.singletonList(Status.FAILURE)); + recorder.setWarnStatuses(Collections.singletonList(Status.WARNING)); + + given(configurationService.getConfiguration().getBoolean(ENABLED, false)).willReturn(true); + + given(historyConverter.convert(history)).willReturn(LogData.builder().build()); + } + + @Test + public void shouldNotRecordStatsWhenIsNotEnabled() + { + given(configurationService.getConfiguration().getBoolean(ENABLED, false)).willReturn(false); + + recorder.record(history); + + verify(recorder, never()).recordHistory(history); + } + + @Test + public void shouldRecordStatsWhenIsEnabled() + { + history.setStatus(Status.SUCCESS); + + recorder.record(history); + + verify(historyConverter).convert(history); + } + + @Test + public void shouldRecordErrorStatsWhenIsEnabled() + { + history.setStatus(Status.FAILURE); + + recorder.record(history); + + verify(historyConverter).convert(history); + } +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/logging/converter/MonitorHistoryDataConverterTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/logging/converter/MonitorHistoryDataConverterTest.java new file mode 100644 index 0000000..5843f68 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/logging/converter/MonitorHistoryDataConverterTest.java @@ -0,0 +1,83 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.logging.converter; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryData; +import de.hybris.platform.cloud.commons.services.monitor.Status; +import de.hybris.platform.cloud.commons.services.monitor.SystemArea; +import de.hybris.platform.cloud.commons.services.monitor.logging.LogData; + +import java.util.Collections; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.core.convert.converter.Converter; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class MonitorHistoryDataConverterTest +{ + private static final String ENTRY_STRING = "entry String"; + private static final String KEY = "key"; + private static final String EXCEPTION_MESSAGE = "exceptionMessage"; + + private MonitorHistoryDataConverter converter = new MonitorHistoryDataConverter(); + + @Mock + private Converter entryConverter; + + @Mock + private MonitorHistoryEntryData entry; + + private MonitorHistoryData history = new MonitorHistoryData(); + + @Mock + private Throwable exception; + + @Before + public void setUp() + { + converter.setEntryConverter(entryConverter); + + history.setSystemArea(SystemArea.INTEGRATION); + history.setKey(KEY); + history.setStatus(Status.FAILURE); + history.setEntries(Collections.singletonList(entry)); + history.setExceptionMessage(EXCEPTION_MESSAGE); + history.setException(exception); + + given(entryConverter.convert(entry)).willReturn(ENTRY_STRING); + } + + @Test + public void shouldConvertDataIntoRequiredLogData() + { + final LogData expected = LogData.builder() + .withProcessedMessage(SystemArea.INTEGRATION + ":" + KEY + " Status [" + Status.FAILURE + "]" + System.lineSeparator() + ENTRY_STRING) + .withExceptionMessage(EXCEPTION_MESSAGE) + .withException(exception) + .build(); + + final LogData actual = converter.convert(history); + + assertThat(actual).isEqualToComparingFieldByField(expected); + } + + +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/logging/converter/MonitorHistoryEntryActionDataConverterTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/logging/converter/MonitorHistoryEntryActionDataConverterTest.java new file mode 100644 index 0000000..912398a --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/logging/converter/MonitorHistoryEntryActionDataConverterTest.java @@ -0,0 +1,78 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.logging.converter; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryActionData; +import de.hybris.platform.cloud.commons.services.monitor.Status; + +import org.joda.time.DateTime; +import org.joda.time.Period; +import org.joda.time.PeriodType; +import org.joda.time.format.ISODateTimeFormat; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class MonitorHistoryEntryActionDataConverterTest +{ + private static final String CODE = "uniqueCode"; + + private MonitorHistoryEntryActionDataConverter converter = new MonitorHistoryEntryActionDataConverter(); + + private MonitorHistoryEntryActionData.Builder entryBuilder = MonitorHistoryEntryActionData.builder() + .withCode(CODE) + .withStatus(Status.SUCCESS); + + @Before + public void setUp() + { + converter.setDateTimeFormatter(ISODateTimeFormat.dateTime()); + } + + @Test + public void shouldConvertEntryToExpectedString() + { + final String started = "2018-03-15T13:15:10.123Z"; + final DateTime startedDt = DateTime.parse(started); + final String ended = "2018-03-15T13:15:11.674Z"; + final DateTime endedDt = DateTime.parse(ended); + final Integer duration = new Period(startedDt, endedDt, PeriodType.millis()).getMillis(); + final String message = "some message goes here"; + + final MonitorHistoryEntryActionData entry = entryBuilder + .withStarted(startedDt.toDate()) + .withEnded(endedDt.toDate()) + .withDuration(duration.longValue()) + .withMessage(message) + .build(); + + assertThat(converter.convert(entry)) + .isEqualTo("Code [uniqueCode] Status [SUCCESS] " + + "Started [" + started + + "] Ended [" + ended + + "] Duration [" + duration + "]ms Message [" + message + "]"); + } + + @Test + public void shouldHandleNulls() + { + final MonitorHistoryEntryActionData entry = entryBuilder.build(); + + assertThat(converter.convert(entry)) + .isEqualTo("Code [uniqueCode] Status [SUCCESS] Started [null] Ended [null] Duration [null]ms Message [null]"); + } +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/logging/converter/MonitorHistoryEntryDataConverterTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/logging/converter/MonitorHistoryEntryDataConverterTest.java new file mode 100644 index 0000000..def1ba7 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/logging/converter/MonitorHistoryEntryDataConverterTest.java @@ -0,0 +1,98 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.logging.converter; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryActionData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryData; +import de.hybris.platform.cloud.commons.services.monitor.Status; +import de.hybris.platform.cloud.commons.services.monitor.Step; + +import java.util.Collections; + +import org.joda.time.DateTime; +import org.joda.time.Period; +import org.joda.time.PeriodType; +import org.joda.time.format.ISODateTimeFormat; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.core.convert.converter.Converter; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class MonitorHistoryEntryDataConverterTest +{ + private static final String ACTION_STRING = "actionString"; + + private MonitorHistoryEntryDataConverter converter = new MonitorHistoryEntryDataConverter(); + + private MonitorHistoryEntryData.Builder entryBuilder = MonitorHistoryEntryData.builder() + .withStep(Step.PROCESS) + .withStatus(Status.SUCCESS); + + @Mock + private Converter entryActionDataConverter; + + private MonitorHistoryEntryActionData action = MonitorHistoryEntryActionData.builder().build(); + + @Before + public void setUp() + { + converter.setDateTimeFormatter(ISODateTimeFormat.dateTime()); + converter.setEntryActionDataConverter(entryActionDataConverter); + + given(entryActionDataConverter.convert(action)).willReturn(ACTION_STRING); + } + + @Test + public void shouldConvertEntryToExpectedString() + { + final String started = "2018-03-15T13:15:10.123Z"; + final DateTime startedDt = DateTime.parse(started); + final String ended = "2018-03-15T13:15:11.674Z"; + final DateTime endedDt = DateTime.parse(ended); + final Integer duration = new Period(startedDt, endedDt, PeriodType.millis()).getMillis(); + final int nodeId = 2; + final String message = "some message goes here"; + + final MonitorHistoryEntryData entry = entryBuilder + .withNodeId(nodeId) + .withStarted(startedDt.toDate()) + .withEnded(endedDt.toDate()) + .withDuration(duration.longValue()) + .withMessage(message) + .withActions(Collections.singletonList(action)) + .build(); + + assertThat(converter.convert(entry)) + .isEqualTo("Step [PROCESS] Node [2] Status [SUCCESS] " + + "Started [" + started + + "] Ended [" + ended + + "] Duration [" + duration + + "]ms Message [" + message + + "] Actions [" + System.lineSeparator() + "\t" + ACTION_STRING + System.lineSeparator() + "]"); + } + + @Test + public void shouldHandleNulls() + { + final MonitorHistoryEntryData entry = entryBuilder.build(); + + assertThat(converter.convert(entry)) + .isEqualTo("Step [PROCESS] Node [null] Status [SUCCESS] Started [null] Ended [null] Duration [null]ms Message [null] Actions [none]"); + } +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/metric/CounterMetricRecorderTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/metric/CounterMetricRecorderTest.java new file mode 100644 index 0000000..559e88f --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/metric/CounterMetricRecorderTest.java @@ -0,0 +1,164 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.metric; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.commons.constants.CloudCommonsConstants; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryData; +import de.hybris.platform.cloud.commons.services.monitor.Status; +import de.hybris.platform.cloud.commons.services.monitor.Step; +import de.hybris.platform.cloud.commons.services.monitor.SystemArea; +import de.hybris.platform.cloud.commons.services.monitor.impl.UnsavedEntryMonitorEntryFilter; +import de.hybris.platform.core.PK; +import de.hybris.platform.servicelayer.config.ConfigurationService; + +import java.util.Collections; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Answers; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.runners.MockitoJUnitRunner; + +import com.codahale.metrics.Counter; +import com.codahale.metrics.MetricRegistry; + +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.willReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class CounterMetricRecorderTest +{ + private static final String ENABLED = "cloud.commons.monitoring.metric.counter.enabled"; + private static final String KEY = "key"; + private static final SystemArea AREA = SystemArea.INTEGRATION; + private static final Status STATUS = Status.SUCCESS; + private static final String TENANT_ID = "master"; + + private static final Step STEP = Step.PROCESS; + private static final Status STEP_STATUS = Status.FAILURE; + + private static final String STATUS_METRIC = String.format("tenant=%s,extension=%s,area=%s,name=%s", + TENANT_ID, CloudCommonsConstants.EXTENSIONNAME, AREA.name(), STATUS.name() + ".counter"); + + private static final String STEP_METRIC = String.format("tenant=%s,extension=%s,area=%s,step=%s,name=%s", + TENANT_ID, CloudCommonsConstants.EXTENSIONNAME, AREA.name(), STEP.name(), STEP_STATUS.name() + ".counter"); + + @Spy + private CounterMetricRecorder recorder = new CounterMetricRecorder(); + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private ConfigurationService configurationService; + + @Mock + private MetricRegistry metricRegistry; + + private MonitorHistoryData history = new MonitorHistoryData(); + + @Mock + private Counter statusMetric; + + @Mock + private Counter stepMetric; + + @Before + public void setUp() + { + willReturn(TENANT_ID).given(recorder).getTenantId(); + + recorder.setEntryFilter(new UnsavedEntryMonitorEntryFilter()); + recorder.setConfigurationService(configurationService); + recorder.setMetricRegistry(metricRegistry); + + history.setSystemArea(AREA); + history.setKey(KEY); + history.setStatus(STATUS); + history.setEntries(Collections.emptyList()); + + given(metricRegistry.counter(STATUS_METRIC)).willReturn(statusMetric); + given(metricRegistry.counter(STEP_METRIC)).willReturn(stepMetric); + + given(configurationService.getConfiguration().getBoolean(ENABLED, false)).willReturn(true); + } + + @Test + public void shouldNotRecordStatsWhenIsNotEnabled() + { + given(configurationService.getConfiguration().getBoolean(ENABLED, false)).willReturn(false); + + recorder.record(history); + + verify(recorder, never()).processHistory(history); + } + + @Test + public void shouldRecordMetricForStatusOfHistory() + { + recorder.record(history); + + verify(statusMetric).inc(); + verifyNoMoreInteractions(statusMetric); + } + + @Test + public void shouldRecordMetricForStatusAndOnOriginalStatusOfHistory() + { + history.setStatusWhenResumed(Status.IN_PROGRESS); + + final Counter inProgressCounter = mock(Counter.class); + final String inProgressKey = String.format("tenant=%s,extension=%s,area=%s,name=%s", + TENANT_ID, CloudCommonsConstants.EXTENSIONNAME, AREA.name(), Status.IN_PROGRESS.name() + ".counter"); + given(metricRegistry.counter(inProgressKey)).willReturn(inProgressCounter); + + recorder.record(history); + + verify(statusMetric).inc(); + verify(inProgressCounter).dec(); + verifyNoMoreInteractions(statusMetric, inProgressCounter); + } + + @Test + public void shouldNotRecordMetricOfPreviouslySavedEntries() + { + final MonitorHistoryEntryData savedEntry = MonitorHistoryEntryData.builder() + .withPk(PK.fromLong(1L)) + .build(); + + history.setEntries(Collections.singletonList(savedEntry)); + + recorder.record(history); + + verify(recorder, never()).processHistoryEntry(history, savedEntry); + } + + @Test + public void shouldRecordHistoryOfUnsavedSavedEntries() + { + final MonitorHistoryEntryData newEntry = MonitorHistoryEntryData.builder() + .withStep(STEP) + .withStatus(STEP_STATUS) + .build(); + + history.setEntries(Collections.singletonList(newEntry)); + + recorder.record(history); + + verify(stepMetric).inc(); + } +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/metric/HistogramMetricRecorderTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/metric/HistogramMetricRecorderTest.java new file mode 100644 index 0000000..c7d7e3d --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/metric/HistogramMetricRecorderTest.java @@ -0,0 +1,172 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.metric; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.commons.constants.CloudCommonsConstants; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryData; +import de.hybris.platform.cloud.commons.services.monitor.Status; +import de.hybris.platform.cloud.commons.services.monitor.Step; +import de.hybris.platform.cloud.commons.services.monitor.SystemArea; +import de.hybris.platform.cloud.commons.services.monitor.impl.UnsavedEntryMonitorEntryFilter; +import de.hybris.platform.core.PK; +import de.hybris.platform.servicelayer.config.ConfigurationService; + +import java.util.Collections; + +import org.joda.time.DateTime; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Answers; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.runners.MockitoJUnitRunner; + +import com.codahale.metrics.Histogram; +import com.codahale.metrics.MetricRegistry; + +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.willReturn; +import static org.mockito.Matchers.anyLong; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class HistogramMetricRecorderTest +{ + private static final String ENABLED = "cloud.commons.monitoring.metric.histogram.enabled"; + private static final String KEY = "key"; + private static final SystemArea AREA = SystemArea.INTEGRATION; + private static final String TENANT_ID = "master"; + + private static final Step STEP = Step.PROCESS; + private static final Status STEP_STATUS = Status.FAILURE; + + private static final String STEP_METRIC = String.format("tenant=%s,extension=%s,area=%s,step=%s,name=%s", + TENANT_ID, CloudCommonsConstants.EXTENSIONNAME, AREA.name(), STEP.name(), STEP_STATUS.name() + ".histogram"); + + @Spy + private HistogramMetricRecorder recorder = new HistogramMetricRecorder(); + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private ConfigurationService configurationService; + + @Mock + private MetricRegistry metricRegistry; + + private MonitorHistoryData history = new MonitorHistoryData(); + + @Mock + private Histogram stepMetric; + + @Before + public void setUp() + { + willReturn(TENANT_ID).given(recorder).getTenantId(); + + recorder.setEntryFilter(new UnsavedEntryMonitorEntryFilter()); + recorder.setConfigurationService(configurationService); + recorder.setMetricRegistry(metricRegistry); + + history.setSystemArea(AREA); + history.setKey(KEY); + history.setEntries(Collections.emptyList()); + + given(metricRegistry.histogram(STEP_METRIC)).willReturn(stepMetric); + + given(configurationService.getConfiguration().getBoolean(ENABLED, false)).willReturn(true); + } + + @Test + public void shouldNotRecordStatsWhenIsNotEnabled() + { + given(configurationService.getConfiguration().getBoolean(ENABLED, false)).willReturn(false); + + recorder.record(history); + + verify(recorder, never()).processHistory(history); + } + + @Test + public void shouldDoNothingForStatusOfHistory() + { + recorder.record(history); + + verifyNoMoreInteractions(metricRegistry); + } + + @Test + public void shouldNotRecordMetricOfPreviouslySavedEntries() { + final MonitorHistoryEntryData savedEntry = MonitorHistoryEntryData.builder() + .withPk(PK.fromLong(1L)) + .build(); + + history.setEntries(Collections.singletonList(savedEntry)); + + recorder.record(history); + + verify(recorder, never()).processHistoryEntry(history, savedEntry); + } + + @Test + public void shouldRecordDurationOfUnsavedSavedEntries() { + final MonitorHistoryEntryData newEntry = MonitorHistoryEntryData.builder() + .withStep(STEP) + .withStatus(STEP_STATUS) + .withDuration(5L) + .build(); + + history.setEntries(Collections.singletonList(newEntry)); + + recorder.record(history); + + verify(stepMetric).update(5L); + } + + @Test + public void shouldRecordCalculatedDurationOfUnsavedSavedEntries() { + final DateTime start = DateTime.now(); + final Long duration = 15L; + final DateTime end = start.plusMillis(duration.intValue()); + + final MonitorHistoryEntryData newEntry = MonitorHistoryEntryData.builder() + .withStep(STEP) + .withStatus(STEP_STATUS) + .withStarted(start.toDate()) + .withEnded(end.toDate()) + .build(); + + history.setEntries(Collections.singletonList(newEntry)); + + recorder.record(history); + + verify(stepMetric).update(duration); + } + + @Test + public void shouldNotRecordUnsavedSavedEntryWhereHasNoDuration() { + + final MonitorHistoryEntryData newEntry = MonitorHistoryEntryData.builder() + .withStep(STEP) + .withStatus(STEP_STATUS) + .build(); + + history.setEntries(Collections.singletonList(newEntry)); + + recorder.record(history); + + verify(stepMetric, never()).update(anyLong()); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/metric/TimerMetricRecorderTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/metric/TimerMetricRecorderTest.java new file mode 100644 index 0000000..a5a80f1 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/services/monitor/metric/TimerMetricRecorderTest.java @@ -0,0 +1,174 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.services.monitor.metric; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.commons.constants.CloudCommonsConstants; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryData; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistoryEntryData; +import de.hybris.platform.cloud.commons.services.monitor.Status; +import de.hybris.platform.cloud.commons.services.monitor.Step; +import de.hybris.platform.cloud.commons.services.monitor.SystemArea; +import de.hybris.platform.cloud.commons.services.monitor.impl.UnsavedEntryMonitorEntryFilter; +import de.hybris.platform.core.PK; +import de.hybris.platform.servicelayer.config.ConfigurationService; + +import java.util.Collections; +import java.util.concurrent.TimeUnit; + +import org.joda.time.DateTime; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Answers; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.runners.MockitoJUnitRunner; + +import com.codahale.metrics.MetricRegistry; +import com.codahale.metrics.Timer; + +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.willReturn; +import static org.mockito.Matchers.anyLong; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class TimerMetricRecorderTest +{ + private static final String ENABLED = "cloud.commons.monitoring.metric.timer.enabled"; + private static final String KEY = "key"; + private static final SystemArea AREA = SystemArea.INTEGRATION; + private static final String TENANT_ID = "master"; + + private static final Step STEP = Step.PROCESS; + private static final Status STEP_STATUS = Status.FAILURE; + + private static final String STEP_METRIC = String.format("tenant=%s,extension=%s,area=%s,step=%s,name=%s", + TENANT_ID, CloudCommonsConstants.EXTENSIONNAME, AREA.name(), STEP.name(), STEP_STATUS.name() + ".timer"); + + @Spy + private TimerMetricRecorder recorder = new TimerMetricRecorder(); + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private ConfigurationService configurationService; + + @Mock + private MetricRegistry metricRegistry; + + private MonitorHistoryData history = new MonitorHistoryData(); + + @Mock + private Timer stepMetric; + + @Before + public void setUp() + { + willReturn(TENANT_ID).given(recorder).getTenantId(); + + recorder.setEntryFilter(new UnsavedEntryMonitorEntryFilter()); + recorder.setConfigurationService(configurationService); + recorder.setMetricRegistry(metricRegistry); + + history.setSystemArea(AREA); + history.setKey(KEY); + history.setEntries(Collections.emptyList()); + + given(metricRegistry.timer(STEP_METRIC)).willReturn(stepMetric); + + given(configurationService.getConfiguration().getBoolean(ENABLED, false)).willReturn(true); + } + + @Test + public void shouldNotRecordStatsWhenIsNotEnabled() + { + given(configurationService.getConfiguration().getBoolean(ENABLED, false)).willReturn(false); + + recorder.record(history); + + verify(recorder, never()).processHistory(history); + } + + @Test + public void shouldDoNothingForStatusOfHistory() + { + recorder.record(history); + + verifyNoMoreInteractions(metricRegistry); + } + + @Test + public void shouldNotRecordMetricOfPreviouslySavedEntries() { + final MonitorHistoryEntryData savedEntry = MonitorHistoryEntryData.builder() + .withPk(PK.fromLong(1L)) + .build(); + + history.setEntries(Collections.singletonList(savedEntry)); + + recorder.record(history); + + verify(recorder, never()).processHistoryEntry(history, savedEntry); + } + + @Test + public void shouldRecordDurationOfUnsavedSavedEntries() { + final MonitorHistoryEntryData newEntry = MonitorHistoryEntryData.builder() + .withStep(STEP) + .withStatus(STEP_STATUS) + .withDuration(5L) + .build(); + + history.setEntries(Collections.singletonList(newEntry)); + + recorder.record(history); + + verify(stepMetric).update(5L, TimeUnit.MILLISECONDS); + } + + @Test + public void shouldRecordCalculatedDurationOfUnsavedSavedEntries() { + final DateTime start = DateTime.now(); + final Long duration = 15L; + final DateTime end = start.plusMillis(duration.intValue()); + + final MonitorHistoryEntryData newEntry = MonitorHistoryEntryData.builder() + .withStep(STEP) + .withStatus(STEP_STATUS) + .withStarted(start.toDate()) + .withEnded(end.toDate()) + .build(); + + history.setEntries(Collections.singletonList(newEntry)); + + recorder.record(history); + + verify(stepMetric).update(duration, TimeUnit.MILLISECONDS); + } + + @Test + public void shouldNotRecordUnsavedSavedEntryWhereHasNoDuration() { + + final MonitorHistoryEntryData newEntry = MonitorHistoryEntryData.builder() + .withStep(STEP) + .withStatus(STEP_STATUS) + .build(); + + history.setEntries(Collections.singletonList(newEntry)); + + recorder.record(history); + + verify(stepMetric, never()).update(anyLong(), eq(TimeUnit.MILLISECONDS)); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/integration/file/comparators/FileModifiedComparatorTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/integration/file/comparators/FileModifiedComparatorTest.java new file mode 100644 index 0000000..ed9a491 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/integration/file/comparators/FileModifiedComparatorTest.java @@ -0,0 +1,50 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.integration.file.comparators; + +import de.hybris.bootstrap.annotations.UnitTest; +import org.assertj.core.api.Assertions; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; + +import java.io.File; +import java.util.Arrays; +import java.util.List; + +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class FileModifiedComparatorTest +{ + private final TimestampComparator comparator = new TimestampComparator(); + private final FileTimestampComparatorAdapter adapter = new FileTimestampComparatorAdapter(comparator); + + @Test + public void filterShouldSortFilesByModifiedTime() + { + final File first = mock(File.class); + final File second = mock(File.class); + final File third = mock(File.class); + + given(first.lastModified()).willReturn(0L); + given(second.lastModified()).willReturn(1L); + given(third.lastModified()).willReturn(2L); + + final List entries = Arrays.asList(second, third, first); + + entries.sort(adapter); + + Assertions.assertThat(entries).containsExactly(first, second, third); + } +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/integration/file/comparators/FileNameComparatorTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/integration/file/comparators/FileNameComparatorTest.java new file mode 100644 index 0000000..4012b68 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/integration/file/comparators/FileNameComparatorTest.java @@ -0,0 +1,51 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.integration.file.comparators; + +import de.hybris.bootstrap.annotations.UnitTest; +import org.assertj.core.api.Assertions; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; + +import java.io.File; +import java.util.Arrays; +import java.util.List; + +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class FileNameComparatorTest +{ + private final NameComparator comparator + = new NameComparator("^(?.*)-(?\\d*)(?.*)$","filename"); + private final FileNameComparatorAdatper adapter = new FileNameComparatorAdatper(comparator); + + @Test + public void filterShouldSortFilesByName() + { + final File first = mock(File.class); + final File second = mock(File.class); + final File third = mock(File.class); + + given(first.getName()).willReturn("a-3.csv"); + given(second.getName()).willReturn("b-2.csv"); + given(third.getName()).willReturn("c-1.csv"); + + final List entries = Arrays.asList(second, third, first); + + entries.sort(adapter); + + Assertions.assertThat(entries).containsExactly(first, second, third); + } +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/integration/file/comparators/FileNamePrefixComparatorTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/integration/file/comparators/FileNamePrefixComparatorTest.java new file mode 100644 index 0000000..36e960f --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/integration/file/comparators/FileNamePrefixComparatorTest.java @@ -0,0 +1,70 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.integration.file.comparators; + +import de.hybris.bootstrap.annotations.UnitTest; +import org.assertj.core.api.Assertions; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; + +import java.io.File; +import java.util.Arrays; +import java.util.List; + +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class FileNamePrefixComparatorTest +{ + private static final String PRODUCT = "product"; + private static final String URL_MEDIA = "url_media"; + + private final NamePrefixComparator comparator = new NamePrefixComparator(PRODUCT + "," + URL_MEDIA); + private final FileNameComparatorAdatper adapter = new FileNameComparatorAdatper(comparator); + + @Test + public void shouldSortByNamePrefix() + { + final File first = mock(File.class); + final File second = mock(File.class); + + given(first.getName()).willReturn(PRODUCT + "-999.txt"); + given(second.getName()).willReturn(URL_MEDIA + "-999.txt"); + + final List entries = Arrays.asList(second, first); + + entries.sort(adapter); + + Assertions.assertThat(entries).containsExactly(first, second); + } + + @Test + public void givenNamePrefixNotFound_thenFileShouldBeAfterNamedPrefixes() + { + final File first = mock(File.class); + final File second = mock(File.class); + final File third = mock(File.class); + + given(first.getName()).willReturn(PRODUCT + "-999.txt"); + given(second.getName()).willReturn(URL_MEDIA + "-999.txt"); + given(third.getName()).willReturn("another-999.txt"); + + final List entries = Arrays.asList(second, third, first); + + entries.sort(adapter); + + Assertions.assertThat(entries).containsExactly(first, second, third); + } + +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/integration/file/comparators/FileNameSequenceComparatorTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/integration/file/comparators/FileNameSequenceComparatorTest.java new file mode 100644 index 0000000..58338d3 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/integration/file/comparators/FileNameSequenceComparatorTest.java @@ -0,0 +1,51 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.integration.file.comparators; + +import de.hybris.bootstrap.annotations.UnitTest; +import org.assertj.core.api.Assertions; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; + +import java.io.File; +import java.util.Arrays; +import java.util.List; + +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class FileNameSequenceComparatorTest +{ + private final NameSequenceComparator comparator + = new NameSequenceComparator("^(?.*)-(?\\d*)(?.*)$","sequence"); + private final FileNameComparatorAdatper adapter = new FileNameComparatorAdatper(comparator); + + @Test + public void filterShouldSortFilesByMatchingGroupSequenceNo() + { + final File first = mock(File.class); + final File second = mock(File.class); + final File third = mock(File.class); + + given(first.getName()).willReturn("cba-999-001.txt"); + given(second.getName()).willReturn("abc-888-002.txt"); + given(third.getName()).willReturn("bbb777-003.txt"); + + final List entries = Arrays.asList(second, third, first); + + entries.sort(adapter); + + Assertions.assertThat(entries).containsExactly(first, second, third); + } +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/integration/support/locks/database/HybrisLockRepositoryTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/integration/support/locks/database/HybrisLockRepositoryTest.java new file mode 100644 index 0000000..f06d595 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/integration/support/locks/database/HybrisLockRepositoryTest.java @@ -0,0 +1,208 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.integration.support.locks.database; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.commons.model.ApplicationResourceLockModel; +import de.hybris.platform.cloud.commons.spring.integration.support.locks.database.dao.ApplicationResourceLockDao; +import de.hybris.platform.servicelayer.model.ModelService; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InOrder; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.runners.MockitoJUnitRunner; + +import java.util.Collections; +import java.util.Date; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.willReturn; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.isA; +import static org.mockito.Mockito.*; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class HybrisLockRepositoryTest +{ + private static final int TTL = 250; + private static final String REGION = "region"; + private static final int CLUSTER_ID = 0; + public static final String LOCK_KEY = "lockKey"; + + @Spy + private final HybrisLockRepository lockRepository = new HybrisLockRepository(); + + @Mock + private ModelService modelService; + + @Mock + private ApplicationResourceLockDao applicationResourceLockDao; + + @Mock + private ApplicationResourceLockModel lock; + + @Mock + private ApplicationResourceLockModel newLock; + + private final Date expiryDate = new Date(); + + @Before + public void setUp() + { + lockRepository.setModelService(modelService); + lockRepository.setApplicationResourceLockDao(applicationResourceLockDao); + lockRepository.setRegion(REGION); + lockRepository.setTtl(TTL); + + willReturn(true).given(modelService).isAttached(lock); + + willReturn(CLUSTER_ID).given(lockRepository).getClusterId(); + willReturn(expiryDate).given(lockRepository).calculateExpiryDate(TTL); + + given(applicationResourceLockDao.getLocks(REGION, CLUSTER_ID)).willReturn(Collections.singletonList(lock)); + + given(modelService.create(ApplicationResourceLockModel.class)).willReturn(newLock); + } + + @Test + public void start_shouldMarkAsRunning() + { + assertThat(lockRepository.isRunning()).isFalse(); + + lockRepository.start(); + + assertThat(lockRepository.isRunning()).isTrue(); + } + + @Test + public void stop_givenIsNotRunning_thenShouldNotDeleteLocks() + { + assertThat(lockRepository.isRunning()).isFalse(); + + lockRepository.stop(); + + verify(applicationResourceLockDao, never()).getLocks(REGION, CLUSTER_ID); + } + + @Test + public void stop_givenIsRunning_thenShouldDeleteLocks() + { + lockRepository.start(); + assertThat(lockRepository.isRunning()).isTrue(); + + lockRepository.stop(); + + verify(modelService).remove(lock); + } + + @Test + public void stop_givenIsRunning_thenShouldMarkAsNotRunning() + { + lockRepository.start(); + assertThat(lockRepository.isRunning()).isTrue(); + + lockRepository.stop(); + + assertThat(lockRepository.isRunning()).isFalse(); + } + + @Test + public void acquire_shouldDeleteExpiredLocksBeforeAttemptToGetLock() + { + given(applicationResourceLockDao.getLocks(LOCK_KEY, REGION, expiryDate)).willReturn(Collections.singletonList(lock)); + + lockRepository.acquire(LOCK_KEY); + + final InOrder order = inOrder(modelService, applicationResourceLockDao); + order.verify(modelService).remove(lock); + order.verify(applicationResourceLockDao).getLock(LOCK_KEY, REGION, CLUSTER_ID); + } + + @Test + public void acquire_shouldCreateNewLockWhereOneIsNotFound() + { + assertThat(lockRepository.acquire(LOCK_KEY)).isTrue(); + + final InOrder order = inOrder(modelService, newLock); + order.verify(modelService).enableTransactions(); + order.verify(newLock).setLockKey(LOCK_KEY); + order.verify(newLock).setRegion(REGION); + order.verify(newLock).setClusterId(CLUSTER_ID); + order.verify(newLock).setTimestamp(isA(Date.class)); + order.verify(modelService).save(newLock); + order.verify(modelService).clearTransactionsSettings(); + } + + @Test + public void acquire_shouldUpdateLockWhereIsFound() + { + given(applicationResourceLockDao.getLock(LOCK_KEY, REGION, CLUSTER_ID)).willReturn(lock); + + assertThat(lockRepository.acquire(LOCK_KEY)).isTrue(); + + final InOrder order = inOrder(modelService, lock); + order.verify(modelService).enableTransactions(); + order.verify(lock).setTimestamp(isA(Date.class)); + order.verify(modelService).save(lock); + order.verify(modelService).clearTransactionsSettings(); + } + + @Test + public void isAcquired_shouldDeleteExpiredLocksBeforeAttemptToGetLock() + { + given(applicationResourceLockDao.getLocks(LOCK_KEY, REGION, expiryDate)).willReturn(Collections.singletonList(lock)); + + lockRepository.isAcquired(LOCK_KEY); + + final InOrder order = inOrder(modelService, applicationResourceLockDao); + order.verify(modelService).remove(lock); + order.verify(applicationResourceLockDao).getLock(LOCK_KEY, REGION, CLUSTER_ID, expiryDate); + } + + @Test + public void isAcquired_shouldReturnFalseWhenNoLock() + { + given(applicationResourceLockDao.getLock(LOCK_KEY, REGION, CLUSTER_ID, expiryDate)).willReturn(null); + + assertThat(lockRepository.isAcquired(LOCK_KEY)).isFalse(); + } + + @Test + public void isAcquired_shouldReturnTrueWhenHasLock() + { + given(applicationResourceLockDao.getLock(LOCK_KEY, REGION, CLUSTER_ID, expiryDate)).willReturn(null); + + assertThat(lockRepository.isAcquired(LOCK_KEY)).isFalse(); + } + + @Test + public void delete_shouldDoNothingWhenHasNoLock() + { + given(applicationResourceLockDao.getLock(LOCK_KEY, REGION, CLUSTER_ID)).willReturn(null); + + lockRepository.delete(LOCK_KEY); + + verify(modelService, never()).remove(any()); + } + @Test + public void delete_shouldRemoveFoundLock() + { + given(applicationResourceLockDao.getLock(LOCK_KEY, REGION, CLUSTER_ID)).willReturn(lock); + + lockRepository.delete(LOCK_KEY); + + verify(modelService).remove(lock); + } +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/messaging/core/impl/PatternMatchingDestinationResolverTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/messaging/core/impl/PatternMatchingDestinationResolverTest.java new file mode 100644 index 0000000..fae134c --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/messaging/core/impl/PatternMatchingDestinationResolverTest.java @@ -0,0 +1,69 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.messaging.core.impl; + +import de.hybris.bootstrap.annotations.UnitTest; + +import java.util.Map; +import java.util.regex.Pattern; + +import org.junit.*; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.messaging.core.DestinationResolver; + +import com.google.common.collect.ImmutableMap; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class PatternMatchingDestinationResolverTest +{ + private static final Map PATTERN_MAP = ImmutableMap.builder() + .put(Pattern.compile("^ignore.*$"), "channelA") + .put(Pattern.compile("^(\\D*)-(\\d+).txt$"), "channelB") + .build(); + + private PatternMatchingDestinationResolver resolver; + + @Mock + private DestinationResolver fallbackResolver; + + private final Object fallbackResult = new Object(); + + @Before + public void setUp() { + resolver = new PatternMatchingDestinationResolver<>(fallbackResolver, PATTERN_MAP); + } + + @Test + public void givenNoPatternApplies_whenGetChannelKeys_thenReturnHeaderValue() + { + given(fallbackResolver.resolveDestination("blah.txt")).willReturn(fallbackResult); + assertThat(resolver.resolveDestination("blah.txt")).isEqualTo(fallbackResult); + } + + @Test + public void givenSinglePatternApplies_whenGetChannelKeys_thenReturnValueMappedToTheMatchingPattern() + { + assertThat(resolver.resolveDestination("ignore.txt")).isEqualTo("channelA"); + assertThat(resolver.resolveDestination("abc-123.txt")).isEqualTo("channelB"); + } + + @Test + public void givenMultiplePatternApplies_whenGetChannelKeys_thenReturnValueMappedToFirstMatch() + { + assertThat(resolver.resolveDestination("ignore-123.txt")).isEqualTo("channelA"); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/metadata/impl/HybrisMetadataStoreTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/metadata/impl/HybrisMetadataStoreTest.java new file mode 100644 index 0000000..d8f36ce --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/metadata/impl/HybrisMetadataStoreTest.java @@ -0,0 +1,169 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.metadata.impl; + +import com.google.common.collect.ImmutableMap; +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.commons.model.MetadataStoreEntryModel; +import de.hybris.platform.cloud.commons.spring.integration.metadata.HybrisMetadataStore; +import de.hybris.platform.servicelayer.internal.dao.GenericDao; +import de.hybris.platform.servicelayer.model.ModelService; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InOrder; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.integration.support.locks.DefaultLockRegistry; + +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class HybrisMetadataStoreTest +{ + private static final long LOCK_TTL = 90000; + private static final String REGION = "region"; + private static final String KEY = "key"; + private static final String VALUE = "value"; + private static final String CURRENT_VALUE = "currentValue"; + + private HybrisMetadataStore store; + + @Mock + private ModelService modelService; + + @Mock + private GenericDao metadataStoreDao; + + @Mock + private MetadataStoreEntryModel newEntry; + + @Mock + private MetadataStoreEntryModel currentEntry; + + private final List results = new ArrayList<>(); + + + @Before + public void setUp() + { + store = new HybrisMetadataStore(modelService, metadataStoreDao, new DefaultLockRegistry(), LOCK_TTL, REGION); + + given(modelService.create(MetadataStoreEntryModel.class)).willReturn(newEntry); + + given(metadataStoreDao.find(ImmutableMap.of("region", REGION, "key", KEY))).willReturn(results); + + given(currentEntry.getValue()).willReturn(CURRENT_VALUE); + + } + + @Test + public void whenCallPut_thenCreateNewRecord() + { + store.put(KEY, VALUE); + + verifyNewRecordCreated(); + } + + private void verifyNewRecordCreated() + { + final InOrder order = inOrder(modelService, newEntry); + order.verify(newEntry).setRegion(REGION); + order.verify(newEntry).setKey(KEY); + order.verify(newEntry).setValue(VALUE); + order.verify(modelService).save(newEntry); + } + + @Test + public void whenCallPutIfAbsent_andNoExistingRecord_thenCreateNewRecordAndReturnNull() + { + assertThat(store.putIfAbsent(KEY, VALUE)).isNull(); + + verifyNewRecordCreated(); + } + + @Test + public void whenCallPutIfAbsent_andExistingRecord_thenReturnCurrentRecordValue() + { + results.add(currentEntry); + + assertThat(store.putIfAbsent(KEY, VALUE)).isEqualTo(CURRENT_VALUE); + + verify(modelService, never()).create(MetadataStoreEntryModel.class); + } + + @Test + public void whenCallGet_andNoExistingRecord_thenReturnNull() + { + assertThat(store.get(KEY)).isNull(); + } + + @Test + public void whenCallGet_andExistingRecord_thenReturnCurrentRecordValue() + { + results.add(currentEntry); + + assertThat(store.get(KEY)).isEqualTo(CURRENT_VALUE); + } + + @Test + public void whenCallRemove_andNoExistingRecord_thenReturnNull() + { + assertThat(store.remove(KEY)).isNull(); + } + + @Test + public void whenCallRemove_andExistingRecord_thenRemoveCurrentRecordAndReturnItsValue() + { + results.add(currentEntry); + + assertThat(store.remove(KEY)).isEqualTo(CURRENT_VALUE); + + verify(modelService).remove(currentEntry); + } + + @Test + public void whenCallReplace_andNoExistsRecord_thenReturnFalse() + { + assertThat(store.replace(KEY, CURRENT_VALUE, VALUE)).isFalse(); + } + + @Test + public void whenCallReplace_andExistsRecord_andOldValueDoesNotMatchItsCurrentValue_thenReturnFalse() + { + results.add(currentEntry); + + assertThat(store.replace(KEY, "dodgyValue", VALUE)).isFalse(); + + verify(modelService, never()).save(currentEntry); + } + + @Test + public void whenCallReplace_andExistsRecord_andOldValueDoesMatchItsCurrentValue_thenReturnFalse() + { + results.add(currentEntry); + + assertThat(store.replace(KEY, CURRENT_VALUE, VALUE)).isTrue(); + + final InOrder order = inOrder(modelService, currentEntry); + order.verify(currentEntry).setValue(VALUE); + order.verify(modelService).save(currentEntry); + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/util/NeedsRunningSpringServices.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/util/NeedsRunningSpringServices.java new file mode 100644 index 0000000..8c4feae --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/util/NeedsRunningSpringServices.java @@ -0,0 +1,29 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.util; + + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Marker annotation which let's test framework know, that this test needs running spring services.
+ * For tests marked with this annotation, test framework will automatically start services before, and stop after the + * test. + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ ElementType.TYPE }) +public @interface NeedsRunningSpringServices +{ + String[] roles(); +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/util/NeedsRunningSpringServicesTestRunListener.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/util/NeedsRunningSpringServicesTestRunListener.java new file mode 100644 index 0000000..f1af2f0 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudcommons/testsrc/de/hybris/platform/cloud/commons/spring/util/NeedsRunningSpringServicesTestRunListener.java @@ -0,0 +1,110 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +/* + * [y] hybris Platform + * + * Copyright (c) 2017 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.commons.spring.util; + +import com.google.common.collect.Lists; +import de.hybris.platform.testframework.runlistener.CustomRunListener; +import org.apache.commons.collections4.CollectionUtils; +import org.junit.runner.Description; +import org.junit.runner.Result; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.BeanFactoryAware; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.integration.support.SmartLifecycleRoleController; +import org.springframework.util.Assert; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + + +public class NeedsRunningSpringServicesTestRunListener extends CustomRunListener implements BeanFactoryAware, InitializingBean +{ + private static final Logger LOG = LoggerFactory.getLogger(NeedsRunningSpringServicesTestRunListener.class); + + private BeanFactory beanFactory; + private SmartLifecycleRoleController controller; + private String controllerBeanId; + + private Description description; + private List roles; + + @Override + public void afterPropertiesSet() + { + Assert.notNull(this.beanFactory, "beanFactory cannot be null"); + this.controller = this.beanFactory.getBean(controllerBeanId, SmartLifecycleRoleController.class); + } + + /** + * @inheritDoc + */ + @Override + public void testRunStarted(final Description description) + { + this.description = description; + this.roles = needsRunningServiceRoles(description); + + if (CollectionUtils.isNotEmpty(roles)) + { + LOG.warn("Starting Spring Integration Lifecycles for roles " + this.roles + " before the test: " + this.description); + roles.forEach(controller::startLifecyclesInRole); + } + } + + /** + * @inheritDoc + */ + @Override + public void testRunFinished(final Result result) + { + if (CollectionUtils.isNotEmpty(roles)) + { + LOG.warn("Stopping Spring Integration Lifecycles for roles " + this.roles + " after the test: " + this.description); + Lists.reverse(this.roles).forEach(controller::stopLifecyclesInRole); + } + } + + private List needsRunningServiceRoles(final Description description) + { + return Optional.ofNullable(description.getAnnotation(NeedsRunningSpringServices.class)) + .map(NeedsRunningSpringServices::roles) + .map(Arrays::asList) + .orElse(Collections.emptyList()); + } + + @Required + public void setControllerBeanId(final String controllerBeanId) + { + this.controllerBeanId = controllerBeanId; + } + + @Override + public void setBeanFactory(final BeanFactory beanFactory) throws BeansException + { + this.beanFactory = beanFactory; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/.classpath b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/.classpath new file mode 100644 index 0000000..911088a --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/.classpath @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/buildcallbacks.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/buildcallbacks.xml new file mode 100644 index 0000000..7310af5 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/buildcallbacks.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/extensioninfo.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/extensioninfo.xml new file mode 100644 index 0000000..53462e9 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/extensioninfo.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/external-dependencies.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/external-dependencies.xml new file mode 100644 index 0000000..3809ca3 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/external-dependencies.xml @@ -0,0 +1,46 @@ + + + + 4.0.0 + de.hybris.platform + cloudhotfolder + 6.6.0.0-RC24 + + jar + + + + + org.springframework.integration + spring-integration-zip + 1.0.2.RELEASE + + + org.springframework.integration + spring-integration-file + + + org.springframework.integration + spring-integration-core + + + + + + org.zeroturnaround + zt-zip + 1.13 + + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/lib/.lastupdate b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/lib/.lastupdate new file mode 100644 index 0000000..e69de29 diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/lib/spring-integration-zip-1.0.2.RELEASE.jar b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/lib/spring-integration-zip-1.0.2.RELEASE.jar new file mode 100644 index 0000000000000000000000000000000000000000..c7e11cfe467ea3f46527dc314785183ac49fbab8 GIT binary patch literal 23684 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.*)-(?\\d*)(?.*)$ + +cloud.hotfolder.default.zip.header.catalog=electronicsProductCatalog +cloud.hotfolder.default.zip.header.net=false +cloud.hotfolder.default.zip.mapping.product.catalog=electronics +cloud.hotfolder.default.zip.mapping.content.catalogs=electronics +cloud.hotfolder.default.zip.mapping.store.names=electronics diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder-beans.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder-beans.xml new file mode 100644 index 0000000..12870d7 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder-beans.xml @@ -0,0 +1,33 @@ + + + + + + + + HOT_FOLDER + + + + DOWNLOADED + FILE_ROUTED + FILE_UNZIPPED + HEADER_SETUP + HEADER_INIT + HEADER_TRANSFORMED + HEADER_EXECUTED + HEADER_CLEANUP + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder-items.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder-items.xml new file mode 100644 index 0000000..89b4e4d --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder-items.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder-spring.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder-spring.xml new file mode 100644 index 0000000..ab46172 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder-spring.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/integration/hot-folder-aop.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/integration/hot-folder-aop.xml new file mode 100644 index 0000000..6a8b0dc --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/integration/hot-folder-aop.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/integration/hot-folder-default-mapping.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/integration/hot-folder-default-mapping.xml new file mode 100644 index 0000000..69c94d3 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/integration/hot-folder-default-mapping.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # Import config properties into impex macros + UPDATE GenericItem[processor=de.hybris.platform.cloud.commons.services.impex.impl.TenantAwareConfigPropertyImportProcessor];pk[unique=true] + + + + + + #{defaultImpexProductHeader} + + #{cloudHotFolderConfigImpexHeader} + $importFolder=$config-cloud.hotfolder.default.images.root.url + $mediafolder=$config-cloud.hotfolder.default.images.media.folder.qualifier + + INSERT_UPDATE MediaFolder;qualifier[unique=true];path[unique=true] + ;$mediafolder;$mediafolder + + # Import media from remote file system + INSERT_UPDATE Media;mediaFormat(qualifier);code[unique=true];mime[default='image/jpeg'];$catalogVersion;folder(qualifier)[default=$mediafolder];realfilename;@media[translator=de.hybris.platform.impex.jalo.media.MediaDataTranslator] + + + + + + + + + + + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/integration/hot-folder-file-routing-spring.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/integration/hot-folder-file-routing-spring.xml new file mode 100644 index 0000000..cd9b9da --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/integration/hot-folder-file-routing-spring.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/integration/hot-folder-file-sorting.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/integration/hot-folder-file-sorting.xml new file mode 100644 index 0000000..c14c6af --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/integration/hot-folder-file-sorting.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/integration/hot-folder-zip-mapping.xml b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/integration/hot-folder-zip-mapping.xml new file mode 100644 index 0000000..e05a3f0 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/integration/hot-folder-zip-mapping.xml @@ -0,0 +1,234 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/additionalTestData.csv b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/additionalTestData.csv new file mode 100644 index 0000000..c5fc3ad --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/additionalTestData.csv @@ -0,0 +1,37 @@ +INSERT_UPDATE ProductTaxGroup;code[unique=true] +;jp-vat-full + +INSERT_UPDATE Title;code[unique=true];name[lang=de];name[lang=en];; +;mr;Mr.;mr.;; +;mrs;Mrs.;mrs.;; + +INSERT_UPDATE BaseStore;uid[unique=true]; +;testStore; + +INSERT_UPDATE BaseSite;uid[unique=true];stores(uid) +;testSite;testStore + +$productCatalogId=testProductCatalog +$contentCatalogId=testContentCatalog + +INSERT_UPDATE Catalog;id[unique=true];name[lang=de];name[lang=en];defaultCatalog +;$productCatalogId;$productCatalogId;$productCatalogId;true +;$contentCatalogId;$contentCatalogId;$contentCatalogId;true + +INSERT_UPDATE CatalogVersion; catalog(id)[unique=true]; version[unique=true]; active;defaultCurrency(isocode) +;$productCatalogId;Staged;true;EUR;de,en +;$productCatalogId;Online;true;EUR;de,en +;$contentCatalogId;Staged;true;EUR;de,en +;$contentCatalogId;Online;true;EUR;de,en + +INSERT_UPDATE MediaFolder;qualifier[unique=true];path[unique=true] +;images;images + +INSERT_UPDATE MediaFormat;qualifier[unique=true] +;1200Wx1200H +;515Wx515H +;365Wx246H +;300Wx300H +;96Wx96H +;65Wx65H +;30Wx30H diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/cleanup.impex b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/cleanup.impex new file mode 100644 index 0000000..e775c50 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/cleanup.impex @@ -0,0 +1,27 @@ +REMOVE Customer;uid[unique=true] +;test.dummy@domain.com +;bob@job.com +;essentia.data@domain.com +;sample.data@domain.com +;first.job@domain.com +;second.job@domain.com +;third.job@domain.com +;raw.impex@domain.com + +REMOVE Product[batchmode=true];code[unique=true] +;123456 +;112233 + +REMOVE Media[batchmode=true];code[unique=true] +;/1200Wx1200H/y_logo.png +;/515Wx515H/y_logo.png +;/300Wx300H/y_logo.png +;/96Wx96H/y_logo.png +;/65Wx65H/y_logo.png +;/30Wx30H/y_logo.png + +REMOVE MediaContainer[batchmode=true];qualifier[unique=true] +;y_logo.png + +REMOVE MonitorHistoryData[batchmode=true];itemType(code)[unique=true]; +;MonitorHistoryData; diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/coredata.zip b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/coredata.zip new file mode 100644 index 0000000000000000000000000000000000000000..dd8aec2d5767317f1d5eda10c595d3f591e4835d GIT binary patch literal 1127 zcmWIWW@h1H0D;r4nLc0!l;C8LVMxv|N=->DNz@Mw;bdUG>$xb(&}>X$3a}Bg;2N z1_l-ppyB|y5oghi5I{B}Gq)hWs03otBSI$iMrWWnMiPrjsE&)0TZrFrAzeu*Mk?Sl zGC4mtH$M;J*n;+%xJ(9lpM#+X=vd=}AGRF@@+5$vVnT$;sl~;qc_o>NIl7?m)dL1j zY6Uou!-4+T<%AK)vHgbrhYbW;%l~)r$tG-MDcP(eI*~^w)b+H8>(#6KR!w^ov%|Xi z$M+Vk#DtwstE;}-ZSJdRoK?!N6o2HRy^US&nW%vBfD8PWUot(rlc2z+`c3fd*WYJ6 z-^_5-KXTM*hEm1hrav>8x_TE(IOVbC8;{gFGd zAu-m?d$QCXas3CT6h(oF literal 0 HcmV?d00001 diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/hotfolder/customer-00.csv b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/hotfolder/customer-00.csv new file mode 100644 index 0000000..574384f --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/hotfolder/customer-00.csv @@ -0,0 +1 @@ +bob@job.com,Bob Job,dr \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/hotfolder/product-00.csv b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/hotfolder/product-00.csv new file mode 100644 index 0000000..31b4cda --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/hotfolder/product-00.csv @@ -0,0 +1 @@ +123456,,Test Product,Test Product Description,ean,manufacturer,manufacturerAID,pieces,approved,jp-vat-full,, \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/hotfolder/unknownfile-00.csv b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/hotfolder/unknownfile-00.csv new file mode 100644 index 0000000..5084bb8 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/hotfolder/unknownfile-00.csv @@ -0,0 +1 @@ +123456\|$y_logo.png \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/hotfolder/url_media-00.csv b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/hotfolder/url_media-00.csv new file mode 100644 index 0000000..36deef9 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/hotfolder/url_media-00.csv @@ -0,0 +1 @@ +123456,y_logo.png \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/images/y_logo.png b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/images/y_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..00aa3263a335665d9db41700403aa1cf6103a33a GIT binary patch literal 7971 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 F{{j!zGwA>T literal 0 HcmV?d00001 diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/product-with-media.zip b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/product-with-media.zip new file mode 100644 index 0000000000000000000000000000000000000000..2fcf0df0eb1b3c50ebdd4de6b4c60640a1820a74 GIT binary patch literal 253677 zcmb5VbCf5+vM%~-+tco8+qP}nwrv~Jwx(^{wmogzcK4lq&UtUYd$8ZVRVy zTzQ&!@_Cvr?l1r#&?g`O0QARSG5P-&tk}w2x?=T>8|m-rKN|jj59VoMulH}Tv_?*@ z|At)3nWxDh@n4V`7#JCun5aGUtnJL~Xzgvy{;7)G?tkAm)_6Jr0susKf4|MY#Qf*3{_P0CAt{;>vj61>J|1B5%DXFU*v>Sx zaQ(=@3DA;3FbR^S_}TNL3G;2vQOJ?Z^Wtu9MEGsaQc~j7)VI~&Zd)EbucqDC(;M%T zPS-qUzQ~@x{X7#!254LUiF{ljp*pf%dZW6f#3yX4Wg5gE)Vx@8b;e!7F){a$^0T9 zkd+4R&dQE`f!YAf7b-|p6W|uiFnlsEdTzi6=2p!j=5s`dyc=eNGD+OI$L5O8{k>1x(9ejqh)`ChFX-fhAc*0Qglx8G(gTfENRUI#U{_)P$w+PW9PXAb7gXE?~xkqxPV% zjGn}7tHW?Zr1=%(C!8F0)M-YTT^zaYPRi3Pi8Ie7W|C*tVCo;`ZCYH006&t|HDC!qmI-kWa%v>N=0s5-eq-bqT*b?w zlk!6%q=)u8PsdX3`h_KpJ}~sj!eT?u8@aXc?JY@ZqsI-e11t*bv~Fmt+b=pJv|G<2 zZy@o~BR zN3vhqHNpJ2L&K%hFaDcT)~R2y{ozYWFb&SSOCkZ(o3&Gc5T{Y;0zY=$X0KL}BA%x? zqL7=7ex?5+om$-?;_fs+Nl-@93!S$*OG8m2M zygfy)(8eDTD|Csg00o@QYf5=|KHAQ-y-9F5Vr?7MHd} z@w^9?$7yCSqFdf1XpZG5uwd{Ac-Pyd7cT!5Yk!h(lK{5(R!#R0xqy+$Jb>K&%ARq| zf}B^ax(2r;*h?5b+S!9RGjIO>8E-MW8!pY-glw3%p}BOta@j{elwfq8Y!gI{0W3gd z5nc+o4iIVwudD26v{*0qkwdVj*H7AQ(j@b{^mytx79h8`o7b*^;4!SXXBi(22@>lQ zV?X?p`(8Na0U<<7OmXd~R zljnzpe_0n^cf$CVnPCvM9n>QhW@MY-ZNFcx;{qpmBXh#(b0?qxp(@{qFFF58ik?sP z*OP^TBl`u_c4sFR^N&VtjG5X^IR3af`u}r;H`)x`~ zwl|NGTBg;{L66!k zY)NtD`#P$-*-8cV0z(~G`YDuNWL|y5Oq=>JL*1zNa;WLDwHqdJ(2)T$3e`x!s9U*hu9;26D_BHC{Py4aQU#kJmD}50$PeG$RZBH`{_PH-b(#LGr^WEae z^X^SGqL4ZBUYz{rCaa9Iz7O<%ovJI!QRg%DUtVR3KjV4*u1ORhGJ8KBm88J-Op74` z!_Sk@i8|vLcGN9Na>NXrYc3;9!&D@YMi;nx=q@{WX`iGfspbTWS5Bk7@gdg>|#UaC^*@7t3f!YyIJo8Ywh65fFZ$K6#tqta#si+>jov zgYBX(b~;P|O`*Nf!Rdi?HLG`%ex6$3H&gXtZ5T>`Ysj=V$|Nr>$0Jrk zzx?77nCU2T*#d;*)F-4;X<#PPuP_S98&Bw>Hi}EszG8SRq`&JYL(B+@&h z{Ft$85ps{VazD6j(H|J$yrb*!srZcaN_PF^Hy2}r-=7U|`h3;60Ki$YjM<4^qfZ%2 zCA*IgPQV~;-V)esdOWWQJn_=Hic|`|j({@qQV~?W=7jr1CvW$RNa^_`j{3Gc^CH1u zwUlHzsH5i2Lh2qwmlF?$YKZ1<$PFMo-zRowZ$!a|7VtZk3Ir{omDW)IA;hA!Bw4rq zAW?99Y*ZUHy?wG#`z>!!V? zhY;rCAIr||pU|tglgf|Iemv7PuYe;bH`6Il#aKcs{w1-*$xw|w2msQ(H=%sC`ZL57 zbACt`U$xL|Sh!ecOmy}78?$lGbx=y`4>T(a5(OYGMPB#29%orNyo`k_dAqB!C?1CL z9FfPcYNgeA$uP5qOzOr+8uJp#wY|VgjFR(@dAX4FH-x062_Sp%%vXmUXi&D*%v=Y-j$C5Nbl)_ZvWaI^wT1onl z6!#U~?*%j0ARn;=zc;Np1?B6t#G@h(h;FXHWDmyB zIGMJhuQbbc^>T?72XRlgQZ9g&kR%KV~^rT3d?+7W? zQ1zwS3OOZevJXW`3n9IBw{*EILs*&zjhi>iX#B*}l}ATe)hutG?6*Sypmm00J5fVh zpHmWjC^(2_#X52HrSH)#m)|`lRz7!wR&VTkb!m=JB@&HRNi<`rnKk%Mq_nzYDw%EY zWvk#+x=QEsLA7`B?Vw+E(dt$d>u=n6RxT)90J|0>b^5Zp0kFJ9=@(JtuO7$+hmReF zY?lr06StJz&jTc{+o+Bn_no*w3$sZVeXJ$D*Lh3dh+`{b;=OfLufWgB2^JuJO30p@!*XMu_XD%xH#D6U(YAgIodQeR z?k%;=XkWoh6!No^!z7Vfv@MO{g}rg=Y~4!AA>NK3pA}b3nuYgZJM&r7Qurv`{}iC; zL+|`#4$qKToMnk6i5piUCJYyp05oqMZt!#QtPse4l=bSDe*WYcNVtzz90M+Nbd3lA z-?hvO(*4xc5qgmLxsJy)2RtU4+d2Rb1#f(ysF;3 z8w=9Hh@-5iSSVMqo90Bv6$&(+jCk%ldA7bcX7}5_vA8XOAWziF_^lTqzMCvZW4j1@ zjCVSYd9S(!F*UipRdG4N*u)}ZomHQZ)?=yX#=}KmagLBsP!HNIIwvd5RN(>Q zE!3w{9`bc+2XWE*v9}no@{^2uswvlfRWa77VSnT4?E=fx+4c$eM@UrM?Jw;4BO1kpOF6aiXn|T%NiuFWQCr+UQgL{zjZ{}Bi1>fthF1Nywwg?n1?R+L^ zjLTk~*8p76ai?X-$awf(nUsnTjoPgnk2;m_-29_7rDn`=K7aW-or`ufqY|VkbB>(-&)C4n|L8LHo2O zS&KANKlQoZXF&tUqnZa6mUIYGKTtxeY-N|YlvC>pimnac%MeY?Gl}y0Sf)IO&Kx?A zI7;)(lw)8M5@u9t^dZ`fl_{KahoKU^60l(D80@Y47?*?im4GLPu!`D@j%}Y3zhdM} zPioT-KDQKtN4x$o?HP^6o_ngOPENf_pN08{2Xf>7QM!!K#u5o%gdyXdf|Y;RE!1Z3qQoLIj?M7#cxWu@aB{2|P{C*=*re z|4*$l^((G3<_E-6>NNkALhw(=9Z@BD5}#zfMCOaGB6~?DoYWAG{aRoRiWKM#-<+eN zb?F32Gr8?$L1nn|Dfi6AFm=juekOZn(^T&7-wEAq2zM&=3D88h$K~b`@-gy&mR9ZZa!aQ}ghz zu}KQ8g&hL078Ki#&9s@%TBG4>e2&ic8K(qFUfL%y6!y(9yV(`AL4S)(1?9xJ6|S!C zRtv`&xgo|P#)$y2q9{N7Mhx1?_Lh`?rRCXVk1&z%i;9|6KMs)=FUNq;{b86?oB2Bv zpZ!lr%_s9S&UmyX2<#&Iy#-BY(VtI#E=dnR9ZF!A`t=N@5CtK~U{bOs}D!_YrjdsIHuE? z^Tq>Yq8RAIWj9f?8qHx%3E7VV|60Z#_~%b|Vz;X}x1m=(CQf1+WRmh7z0Z%u*9bL8_p9so zseH&=Saa#p=)$CH;A&B&=!kp2V8+YKlWJrh#fY&w%F>M8IVsWj6$0+_5+W8R$nGZH zM#}TFDOSUVRa&_<)mZG4J?#__BMb(aE27z6QQ;(}>%H!@r?PW2yi6#2t7F6-QJteD zt^#%fchS1!trR6nogzrZ+6bBF-HYS4R7x9rRLVU=xt{&!n$cs>x)^HLDk!USsJm+cXyefVXZr% zAn~60vI3QhNx39WE|=AUi9M-0W9xC?{&lN{mA(AMygQzTzae9m6Er7>vk{sgOkYR) zHBa~cb=Qk5+SPL_eAnPz&IzB{NZVI2woH&+5L;W~w}lajZTII6)r?5o-2XzQ#qD%gj5Se(G^>iO;D>T=WeW-*;@{BA1T6h^d+pI&ZDW_T1hIV9`ozNw|hs zm1mtNJ-f=L!uiYK5Z2bSD@I#DA)mFi`SIe;`ug5fwBiIbE9MQIf;j(L=lj-Het!CH2v7&6i?)L*e}W-WhK8nEZrwRx(j z?o3lSu(mc*0~%U1`*N%G^F%l{d3NYyKE9aZwNBPU($tdiUApy0Udgjx+$6w}Xi*qQ z$3k}7l=lTqx52`glUHl9f{OZkjYu!~>1bqDj;u>iz`1z0UhZ2!UEu}I^$=6f^y?%F zv4&qzqDyY~qRSGK*bIB{o`x5jW`(4c?gHLa;ahZeNjYcx4K13X+kQwRZnseef0VQT4 zefoKFFGiH#twYA%#pv)E8vU!r&M|X_?tzduIlVhiZbQhbk{cNJzJWT6S!>#%@qv4^ zAwy&Ja3HESmcT}HQ(FX+f;vZ0)HSu$TeG|zrpDRXTH4|f6WMdt(q~Xh#x#6PHBlXn z(rpCXT$xWlYI&joUs+*R*&Om|@MkA>1ECn#uj=J_yt1j4AXw((T3T=xP`n4}nDuc5 zLyefekNSe3xk_->5bN}QQJ?*WjS76^amtLt{g_CL;Fx|@nk#ysuQ|sv-}L*BT9L@* z3q?hUkE&v5@SiVa8^9GREf(cI+?`svIOwIo;Don2-sVwFG3KTsMHSc6&_?ftqK0AMT~K@HMU{U_W7m@2Ufl%~|D4 z1CP7}iJ3^I6utsibieK-T7^c_5;8#k`QoctLus?4@rMB&g=8pxQheo&lqC)Vzwl<6 z`%_!pdv_`U)I@%gf4PE}9a-e!y5P}fiLI*8-NLWAFJ`tJCjFpm$VUOJkMf*-JJSyO zJA~yoZ~0bk#G?xQu>} zD&h16jDkSRYhVFw2vl>~QX zCmW>&a%LWHUY`z-7iDWIkY>=^xI0r1(ZyC+Gsl>gIl0kj)45W^$ z8dhCtBa`ZWv1EFA>?Qn|anxV~L6Hl8k)X@g?L>kfJle(3cYpc;(pdsbZKOPsm5nz1qnMJRD8UWKNToZ#QsY=@!wZ4w!Bw{>7)F1orXq=Hwl!xDoOXUs0)0s2 zgo7~u_pV5rIa#tQ5i)qcq&?ZY;Va6B-H%=PMdn|2H+A%*L2n|n;twVuw98#v zvp~eR-P%fSzwzX1ms(g{j#M4oB|+-rH}`T~XdyrIdT4*PhRY3afDTH-u%cL*o)=VO z63~PALmN968B3k#`Jyq5?wI<=ERoupQ%vE>@#ecK(%mP&k!pf@a`)85@3IV8AeuPP z8=3d8x@%`Om>DbNhT}pTS);=HNyNA`>$z0Bd~Pamvz|o@t=c3$&%d#Yuqb^GXJnio zj5ieNfal^}9U$Gn&kJGVOeJ4Lz1B8n2bG)~O_><9@LBuJ+RpT4(J2O}3fmvK)JwB$ z`Hi0!4)tV49wVa|RwZD=*dM15K^ zl@0k-rjOTE^ps>I0X42klW0sqMdcZOOW$M zktyCF>X$bhtgv#ap);J^eN)d1ajntbQN&D9CDIPd(Gh_I)^=5AKOO-zy~--rN}`Y7 zdV5q4=18%=S!m#~k~RkA2uADX5wrzp?0#P$L9;D=j$K5pfX8J`k!Gkq43_7X)wSD| zD>`8PINRQib##;K_t@$HUynt+oN*2d@z>5ztt+?!NIP%8{T3VJ>z%`oDPWvdp=9aj z!?+W-duoB_P1b-~A+=zxAk>}dc)0v6f^Ik+rj6Tdc;|unL?D^88lc^pUUT!8`GrHj8+YiPmE4>=9^kLNi*Hlqd_w*ZLkH?S$mbftNDgL}t zM&pyu8bw(<;ODQ0hz;JvU!inBvf)`YR-B;Dex@GCe}kqAm0t`8ZuiRC5S>Zq<{e?g zbC8br3M<=kd4qc*=e!Q7$I(U>48~_3Nv?Z+C_>5v)#t=rN7i(W zD1I0Ss=lQL2~qUq?~RBp;A)mUpKO$9CUU7@K9@l5ED^Fl_l*|++9yQ0L)E$B7hi8 z>@g&Z1y`>WZQlg#ZM9hZKyTr{D~Q?b73!5~Pp=&#>a&V@8b6HZGof-x2Ul!~jvrv< zag_|)m99+ZKw81g@Sc8PK*#+}J47qu8GR&aiy4036BFj@M^&i9IPXPfX&vQpk?$K| z&L2t`Wqv}d994++>dL0Uja4lcYCfWq=XUU*Z%wMvk80@$MBvi#g=5R3&79v7<)Cf) z-HoJsWk7?qWq~16q@)9N1pvq90DhQ4yFDe9us!LpQoy&0o>|tG@#%Gx(Q(%l8yL?d`d|oE;@3db2g@vXu}=u}%|N8;0{Wy+ zc>Pocp}E%KO7`e&=Md;>yXt&Z>j=jwOm|Shw^=07**Jp-SC^b8w2-(u^ByYuZc4Xc z!zt`XyKbmOK?Hz+=+}N@>VL0%kdp(R{G`9}>;!l#tp`IZXLY`ns;Fy7)hMlyU-bUT z$+O!3@0>j0zvR!E=+)er=*9n?n->%OAG!H|uTyaR%lAt;G9ZhA0|5VM)c;4=|B0g? z`R^+LBIISo;GnVop$JYwTv+k%__qQ8fD8Fo4}golI{)tgY9=5f007j*!h9Hj{hi|* zi7Uzg0G^}(fPXLm@b-7f{{#SVp$7oY^Z@|QGynkIKC4}U`|k^ILn$#~!1q7y-(4k% ze^(%!C1gY(_CO#ZxgaT6oeKc~FewRP0cG)#%M>l^B#|E@-%Q)yE0?y<%kwZrP07`N zC@D#QBa-OKqkxG2h(^Fd2?Fc@fk9Awcqy9w{)p5On!2wA{vefB#mou^+G$k;$1?Y~BmieBW z`rT{FP(vqKgNl-IIS98W6I3Z^oAM9@t<^N1H$h&E2t%+bOe&Tjy#*6m0{%f(UJGp3 zJUX3EV>)Kdxsxhb!{c9pcwxniB(W<$7SjJl>-@NW@;q#pItp;0)XDio78h2LO|Xjm zXxaGi{s%Taw)0R4#gf@vbaFo}D^}$E5v5fIM)mtHJ)UPzLcp`LTjim4!3j0(`&}uB z4cn1*Gg#l7aXxGwGh)G?Y~Su4N>=mN+dZ~dOO~yF{`tN+F5v~$XC7$;QXwb}1?E`q zd5A61%hpnhUF97v?n>Lg2L%YT6m2BahsDNnr56+&k|f}NJjIT^BfzFEeQxpONqzQDD&30)v zBl4t!T*8q8H-nT;J5fqu7LIaT%#gROTg#Cs3s6H4fdJe|Sb%;r+S|!JOoHAhuh4-a zo4KF&XUcR3zzRBj^UZ(A*qnzU$g*~FTUY4|(iosc@&e`if$$F$8#d)TcoKVuO=!HT z%_DKZArsIlbQcuec9QYxF|wZ!gXi}I6#?=;_CVsG(}P;;WQRISRT(f`fO_FXh}Gct z{7`u+J+IYokE&l%ULP~KRPUyIgp{7Sofd!}SLPV4bJ;+(ktO}ZMWq0ODtQg)Y$MJO zlMRwC8H`YX<{6>^CEfKrYpC@rtza_M=1c7@-1Q>H$o*rg^X`+G8jOz%;yc;dQ%9g; z#6f3P$x%<);{=CsLwc4WSxsswa)Gh^vsvTEaW=N^=<1}1)NVZ2t1}tC@6q|ARpK@Cz?|M#jrW(7fO=a;$4{zhXL32yV{QBneU3InZ zSF(IRUd`+*=s-@kYg_B^0C270SDXs!uC{AhpcF`K>P1v0AKeZb6C1@S1fX(PA1F2s zpCyH3o$(1Jc)V6M>W>272wgF%+xIOl)<2M6b;zK_H7?#RecIR>lyuMK=cIxFQwlaO zp;BjZszDh8WlzqUekvf;qOrb?)NIU(cXU+Bz)kY-YXpU*FB|y5_*%|Lj$ON>9A38} zb)^iEAr|-cZb2;5R-Fsql)Cd+U<4Q)Rb02S^Tri6u_M|1gYC$}kOjo}Nxup5^S9(L zay;UhenR1DW++OEEq=sgKjQH{Em_g(n|Jf1#dyyLKU+hJ32jLhL0HE)0``3=}|H1xGj_~=f zBMkqq#cD3&rGkQ~TN{%K znZw12vi-X0zUh2tveJ*a-KKq*9ImpVR_5hNdrSHt0RH?cA_~X617GKe8}AM*U<3}i z_ST0>hd{qspLQR$ZhWT9%km500b3UUe^_w;2`|W32*3syVCR}ggAxotuEVI=WO7Aj zPqUbW8qo2rDeL9X&l3otrlQubH5AHUNT6+a0}OEAs3<3|Ip%1|yxj`$UHj=2_GjIJ z)lPO)NtwimNf^~JqmDPG+RDL?x;#a8N1X7MHUT(L4-lz;NIV@dxrE?1u262IOlAVR zppqij;6P+#f$yjO-b9z9R@F;s``C=Iut?#%s!VIE48wsh+-@% z3AiNd2aO&Wjoch~gH!&Ll(|QvG^uJfUSDG77+l{tAVhG=<8++k+!2i#Ie3*bcv7|7 zT_n7{jUoi|Nr+?of;f;gMuN5CR^PsfXB4Lp;<^$=RVIrr$$2 zR5n@tIB&?_DH&XS*QCW`$wuo-wNhR*=)bG*#)gzwvrI_v#mgr_1 zLWy7MDYfcZQam602E>FJCh-kpg;@q47l=o}joAPQY718M;MorYk+s`5Z6KB1<8|sk zkhulFHb!Sz^xRU$H;Vy=GZ4L$Zp=xBkbU@@!xaKRI>&G#23rY)E_KR3zIeci_Wc?n zl*xE6Dk`(CTffVv^z2N9zAT3sL-bo*zrXiSH>A8PJRDa?h{@0le~w z>TKFOn-rzcBKPmOAPFb(hiVNY%$dxbQ%7?=k6Ar7Bz`zC z@VMkpGjBDdl#-Qchdxo8=)~3RWN+3b&U4okMX+%jpBgn?f=p^yY@mD-XmT0_EOGT@ zI#IGwwA`})(v{^F0BtAG=~#}#z-JY2R03jA{YeH1ush8m)%TO*OK64(e4TXF3D#x= zI(f)?IOHBi8mljqqkx|7mW^?;!|GWh|Aw09N2_IuAM{yPphP6dW4-+4~!pRlB9W2e=>K)Q3BN&f3IgP+hf1E#U#cOvE;FX zxIO~FK-&}CBq6-A(y@9HUPEd4zJe6kNSL}pLl`fshnf4X>$F$jFa%oF5-BAWWCDO& zpM$p;^7KrO)Ds1hAi`#NmNYwH3@RfdtIL*wB>~yfbwB9vr`jj>qmQoC_uIMH`RACb zRw#B*GU!wtXhC5$qJmiDiwo)Jn)I1m>V9E1=tPK=({BV~fO|L0ShXss%38b0hto1# z98s#?5S?%ZWq=sUuvfWHjj2~Aqx9t&(ylt~OqPKN{DTl3%;>y2Yde0Gu(F0vBQ=c) zs8ldTwKFqPSX+b`(-;MC;Fk={jHTcNq1^InW(m@unAbd_3Pi#Ef~>D?C@%kYY1$lkuiD<6^upvA0b+f z*dKZx5A}$^V^>a>4$ zZf^u>rjIiri?%a$rQSCo(eDwhzubM%HQp?Y&CeR(Q^6!&FvGsYWPR5>2nv#e%I=Nl z>z)3VCUNDk<~8Ofy&_R`GXD~5X9xb37lQP#qtFbEVbXJWMmhSOkr`rQ&T!1le1KnpFqlAbzUQ{iwfpb0PW0TXkh z?)QKBLL%X+#w=ImkCaQE8;^th%#LK_>4@A^XjYr{j&nlt(lTKS8@{ z+}>f8QG>?+z74>-DG0pq36B<9y@|B%kqBLtA_3{ft~`5f!>X|o#>ESWLLnVP92ZZQ z`8wiQS~m3toBFI^J7V&2$6!A;7W@i{n$?I=LzPlw6e?*ybb47qWt|i1V4~PakZAw$ zbveO165Aea7OcHw3*(fy@JBz~`lN#5QC`^fRMS+1HoXf~d|t_hc3i%@i7=9mi|^}c3g7%T8x{?dhCrwT2zC5` z*$gJ+_rwvm>=shNasRs3B8OysvgBQ$xq|^-FijyMJy0E;QdfP@9<#&X3Ytf>LZ;eGSZRXMWZUhKkKKuK za~gVXQBizQtf^r>twLOW;=LLt@dJL zB<8!1r_JoaaaCEHEzz{3b$>FUL+Sk&ZRa<61>e?Y45yLJkEauqYLiNn2NfxPtaqWO zL}yjggOqbvA;zadT53d`b1Yi-k>9r%`6Zel7~yo#3#;tqjz&+I%4V)Iinz23XiC;H zR(HFZMKE=gIL0)Eo|!^+0`9XH_aVX+9EL;FW=J}=i=<;(y<8l29|SuUhtlZeSb8B1 zy#C9O`uz;$3rRO`d3SlyVIBe1KLYQA?8b+RRehY+UCgXD4sDHnfM@+tGNevP04gVk zrYAx)QxBqB{h2nxVU-o;4gY|$OJ!aFHpQ{8)VZ;B|~qRJ!<`Zwot#P(F}9NO-EEk3nmfqM#0ZrDXd&e zt2*p$Mv)0kYSi3Cka?`r@?mx+&@`QnsX|(;H_Q(w+YbW)u7-r_)rly_>qMh1+8*=? z4=GLFXuZ!vpL~@;%Je4u)Hs2EY1x}_WkfaMp>`N(O1wO@2fc0JtPrhM*NB_0O;Ne- zXD61+j3g|AI}GvNaKZmjjR`%?ky=G{4i&`Prp{!$-`n+dNqM^0kEwa?TtL|mgaY%y zWrVij*kMxmnWmr;;Ol8vyuc$5IhI%ayGBWo2f+x^@gYIdsv$@7d|G&A>s98uFJ!e- z!+u(>vXqVDVw!qoQTbjl?9q^pIcyx|(9x^i!m2l?O5STl!|%7A;49gNX5mYOGg~;p zmE3}p`?RTB!XGa#NLfZ++pwN6wc{%Sq~+YB7i~9Oog@jHz^RP51YKH>PYWn@+)(Ug zz1-WjM$T0%@%*a51ASLZS)qu!+LUh>Q+n=iN>2=#!CEJFG7_{}95U`!%?!>P;2XeZ zH+8yE9L5xNYWI*%iV`_Ac4;i~3{ZNSB2F^$oe+i+r5W|CogL|)@q4fz_%pT%FT74V z7e0i6W;4@jtR{Db_Sm_x)~LUluC|hBo7#RsW~}^LZgkWB?b^V$e5$R4DlS+X7u;{T z#NZeU53g7i)workOsGg7?Wls*=32$}8v2Wlu%TgIk|pOOqN}T){gUhHGG8$;)y%Xi zcDe_LBFOjisJ2R;iZu5(OKC|AXw!Yzp~Cm{~iEbL2-tc)3@E*&M* z79~)}IRCLyuJKq8&a;E=QuC~LH<0fm`k){{7K{3HTPgKA%F_|!XT;*k4ah#{g}hpo z!walwaF4r_KC}{L>T&7GAJy-3xi*1iMNk(g==5Ym;4kU+G^dbk=XClVq5*GCo#u6l zK#%pTlMRqHBqkmmKg^An_A(Lr!E0i-FH5@uss_mYB5?zK;S9_nJ}zw5SF(D%%A9AA zj<$H(K^juKkT&|xn9q~L*}OVPTWO$ot?7P(Vp<QX9N)E#14)=UowfYAr~^7YZi#}GW$3Z<=%C# z>p3~Ex^8XvxoU8S?ysW*_FEwRA-iL_q^%8%6WAZ9fUlSy3hhuCP#!(uIP5vZhL1VJ z0t;MH1)asRvh+Vq%+a$3e%!X@$J?H^te1~ZyrAV+`k#he;6xkHZu8Dp9Cu5qr4065 zC#p9jQZ@0`s39}0?@O*XoffSE?7X3?r0W|K<{v|;q_r){+(fiS^h6D;{Ex<7IDEh2 z&ij5h1(%jlvgAFu_!7(c8=W`~XY`~;aKF(AE_V^=ia*&_M(DYj{WaIUGZqR$KFJLc zItK<$j7tkxRzUELG?dq&&+qzc-7uIS*W)#S2FboM9$x$slwIrl>d|te7L%0snr*X!6dqY+U%pGg znkUIvc;Osm28Qr{;W1&}*;Rai$1<@7*YGG^1Vidvacxrkc*^j;i(%-T= zL^`%*#rskOWRM+wbz=FdohD5!%T#q%e6M3^KQn1*dQa;4`t{0IYrrwcC4Iiil=(&T z%eNZnb8kMseBZt3x!zmfuJwE+35b3#!r#6(Fy@(Fd3*}Uk5s2GgcDe3RYvGZrL>mu==g@4QEr|jDd&WOp_&p?=5Mmu z-rtNWbNUxzGWWAJO$quWM28!Ep2;%5z)uN5rd7DXOL5W^^+mgUC)l=UyT>*M)(&2Q zy^LobGEFORL@|_MMVxTF$LOeI-s5&rUh^9cPja6Q1rnbrta!YUMeQvp4KY_gS|C)% z8=(8+We@TD+2KS2C8kGm-^PsLE-o)h<#9}P1Qllg_Hw(_??sULZhm8N+3;gsX_?nP z-1aqzM&R^vx!NAG+64wtLVIY0C33(}^#}efmoPxo_(y|BeEa*#hyf9O^m8v)tBjw*-lYorIN%(_ubD;}4J^)V+rv8dZcDtFhdu3O28tuiTUQXdC&r7M?wOjVuzW z9F0oZN2=xX*dbVz4yA{+q3EnlK$e2;T1i!t&rQV9)hE9*(gu_=V`n+T3hAdMLVY_r zTxQM>RF@+i%LSwii6=5w6fzd%WppaEbuaA_mqm9!A5jg!9QA)f*TV1HcUui|VW;1@ z$&SJ8eW#QZhe>o^%7h*-w#(iT4eiqIGbbF5CoNrcgIm@(-GB-Pew!&D{NbvN0WF>|Eh+UM`aZb;0w4h>ULXTrASfOnC<+A$ihy@TWl4Vjy~p>RZ!vr4 zW>35Q#~!F=gpsfJL=fd<<{uS5^aH*j{+Ui>`cLV^fBj!73j>Rq``_+A5{iQVe+fl` zzvyIn5@+f?06@|Z06_aMnYDkS|EH89?tic6!Y4#cdkUTS>IzFcu%kn07I9;9GrNzB z9dw01PCuxl!^++b@(P~o)%RWQg2PL2nt0%5>+-7IrQ*$njbFt?Lz$S67!ndv*@L63 z1`$zy_WO&lH(+~Aon#5Pr&m3KDnf{VageAdqc`wd&X)991q!%76%Ck>9Ts>G^F#Fp z2{af28+1_52of^D84}X__(GM1;D&8Sx@S~U!29Dpaa$n)))!(+M^^&N7Xk}N0CATo z_MPqqL12)#G~TW<5)D@?^+UuiuGjk1i|?1)=bbfiFsm0>iG z5g!Iqwp;ani?bA04S<;0zD}>+8*cCI&ko&X?_r%~41{1DqE3LL3JaqdaADag-`V`o zgOUB7$lw}1HX!oJ_iLevtz(J(LuBXoIaG+%bvxwSEc6?i;`U&OH*FMq8E*^k6;;;- z9P&m<_(z~mn0I0Opi2re)*2ex;pCRoIsC1uN4(v6zY=0Q`L)MRa}DEbD<&5o@zLoN zAB^+HNvmI+jV-tBY#{!oc_P_wv_3h)I4>92#tn{MHc&7QWw6R1PXV3K%wqQUWG#CUjEZGdG<;o&#dYuRh_0XrlF!v+0E zvgc}JuyK)~*|iUtnx@p|GEaB8lHcwBzq!8$-K>W-As(LzLdRCXzXs zp;?O(wU&!&(RoAO44_W8GhYi`(KKM3GB71K%a$PB%qM$#{OPk9xCi$1VvU4*7(8pr z@F{4kp24bR>PPeJvxusn;bEOOdLJ}Mix(0Efxow!n74%6hWH*bbMBF}>V#D9w5;Uw z<%{>akA-XyKdLcsMQ(Zp*y{?4sZq%osj8A1An}qb#3)!oqSdPUf-id6=RF6yEI*Cp zyif(?^4q@dSXuDeF~mQ7ZOL6a#v+0iR$O4uS`qeSyf@xggyH<^^obOty}i~Ja*eS| zvB{ik0&tA~IH#%&50(Z*O>_r3}vJwbmwf=GTrFvDfJI=xf zKff^Fc9n!!+V7q*q2OVt{wwnAE9*ZL>mEZFY_+EE#*1pwfw7v`S9qBC3r!Rav^=m0=B^o<+gr zg2;r7;*5xX@DPP5vwP=%nYCo=o%;?x^M?=L@x?`0BZzah zeVPuLVQ*$R^S}zK6hz}tp%i3}YgBlWok=-g5QKJ-t`Yame!C>%PyM$y(kP64GSc%O z7#R^ugV~6Dp9JyvS$i1tGl-bO{mM$YWE%_Z2)*Pk3CNm*o$3R%%J6J~sPD-{BEogh zfbVR^(boJ2H&0CR(`^%&LxJepX;0BqKe5nhnNm?KC=yA&V&a}JFx1ia$%xm4J zuTX3feta51vZ@ptH&)GR&ZOFO#HD2fE*2e~KhdV%s zt9IHyDNLLx_85JTJRfm3x(OV{_Q3qBr;dr9m!YPFS)<*J#RSzEABe7N8? z^w!Q84T_is*%)IU$^RDsKtR90fMyST1!r^Ou65Ve$Ll;=Tll{7kLB@Uv{C4=(DU}S z5{n#+3n0}NLHeJ{Osh2Rk0~;ir;m5~1~*>EJv>?x4+OmjQaGzRnaJOJW4U`>=`fPAoq5TY0ZyRd3F zYYz~A`emtsfPVO^T=E`Fm+KF#N0}7S&(G4TpI|JEG`w0bJ~v=P6G2~6>&|Mxb!oIB z>Jfpyi42z^esf4@&FWvx|N0_!w);?T_&Xp$gH)T_P!}|lQBiFzl-6K1A2z7~p``kk zr|SJM)@r$bzT`|Zx15#@wEHslli)~1>x>CnDZfnE0b7-f+`Y~RpEX}8SkomVL4`9{ zh@eh%gD4Z#0ffDU3c6Q$$Kf3Dwy8>B^4l+L#1>o*VrIz6?qNbt zq@iICQ!xrRN()Pe48kn_LY)WB4BUxWil%~=*e<6Zgv>eCmZ+NDQAc9xo(pg@h6i#n zR@!oOa8lYx9N62lQSEr!en7|?noI1!b9&6W%*job12Iha0acxYr@)w*mkc#ykoZx zS9acTr?3k5cT{~*MEO&{h2}o=7(Iz^c|i7XTcvFZ1C09-?a}7L+a?K0b+0d_8pxVh zb@Pcd0vK5~4Py#yzWin z$FvF`ckGvX6^!8EjA>(Tg0tf7+Wc;;gp;nxb0H{MO-W^CK1KAqGEtzemdL`A-}T@( zwvSZ(FCmEcF8c}uV81K{7@!NK#G(S>&9=h^-H$HPU+f~o*j5oeXNDUy}` zxg!6_*{$_y2w{sZ$IWn*|L4o}qpy#U-hFTFL0Eag)Noi`sT<<~Qts%lIvO7?%VDyI zDNUfm*jH!6t2yb3fwEYDuLJLP(`Xs6_(g-*dWCNUG|=r^yNM85rjdzpN%8!8f*~D- z?h^h<2?>&j%<3vo>VmXmaiaJ{&1l0g+34dmz#=T6;o^Dpf^2~Urk}8a)8+Ewb%wNq zycq=jborQKEknoY65?LvhAM~8xm6Vnx$w721>IYV+F*L(Vc?9^?`mUe0g^ro=tw*SWu z7Jk>>D=8y%jfko~=8g8%$44 zXbh>`6Fx5{%!|#7J{q*^$Lz7F#}7+=>IQ0#;$^b%7GS{Go0U zUb z6NGwu?{TzY1lriF8x3M5yNvA`i2kU0c9FXA5G~Pnqo=O=sinNrz`9A3w_)+*bCMQ# z^!r^bfTumZBLZcH=4Tl@bG{p6g(%s3&?PsNDYdS6g?KjkLjO1{06saUF1!TsijS@( zrDHZO<}wS&TvWPIs|qB30#Ja$ zZ%0#t9r$(!o#uDLj~59D?EK>}2dm%KSs3dGEfyv9{xw-Q=5$lpi2b1@zeYko>-J9gqU$8y9TQgr+dEJ#*#bGPnDAqNJAD*h z&(ad!`;UV$7pxe@tI6TEs0K@v#_IW$%)}`v#-3J7oqEK z2K-r~zsma85QW@8ESIc4eiT$MG}4*>ez}?K~-hDXeQZgLQ1pI>+IVG zvQ-h|!n!b*0iaT6-$&TVo7-vJ(L^?50?l=doqgaTm>w>*p9lun52Ag_#3EC0!aZXA zdG^hL-f)8W=FNwO)rz}((8>QnG_5>Oj(S7s<1{@Mml?*Q@w&aa;%U1*iFb?#)S(QV z+U;{(-F;7KRQ8twS5bfZfS*5y`o&8tbQ?gHsGE5j?U~#ancp6$6CbT_*}o%2uiWhV zOl&GM_;B0(a%`Z!XYiI9|I1J7`Jwnfv~EaffZ);Z_an(LzF?5S6>0MT7NaBbSQs{# zi2gRZ>Ci@l&FD+i0Cy`WMVi#xQ|D$~XQ13iavn~0oZ4Fs2U=Di8~VaK4jcH81eThT z)wjY&DXhVvWvEXTae?FbbrEwGU(UD(ps2CPpb71f#s>c(vCjv5jj>wPQd=~Vzk|AI zMo+kup9{&adj8oL{^vw$x?(nAq@(1)lb(wEbNl6M%Ng(&8?ieoOcK2uwFnl{H-|0r ze-eX40!1McgA?&nM0cOgnU~Q-*6BdS zf%yzuxsVdEsabj;e=;65u>Znp+R)F?PdSYlWU2{CH^yVcWg=R7PbktRCC>IZBDK>e z_d6VzR~V1GRCrQ!t`V=Cc6QrVH|p=D>B4bg3i})fkVgPF4^u}=@K#)h3$S<-K{m-4 zN5|qecxpxUuq30^!>)z_WBT2M1DRSR{a<_}0TtbtF8Tbo;$Bl)l`rq@9N@9bW+qzU zv5&|>Kf_LtqYlh9=|Y1E`O2M}EZrA>h&#nX#9RLMZANnE#z(P&pN%s13}__ZYJw#i zNma%532P!jooskgE0=7FF;D>1tlb#aK#)KUg9VJ2-%Lqf+8W~pMEmrC(-6N-_aKE= zoDjRxOBT!)>^Al)uL`rM$&dUb2I`ar1O$E>Ev34-1`9%673s`+66FT_;$L-5D6iNF zMO4JEVh>H1uiHGU)>DYv&S7*X9>$!OQgYRUHP8*cFn$$FD<9q1AlO>57L7U( z_FuY5JK-+D-s7S%kQLL7(FO(TjAZFdxGwKxVL-zxEm|=D21xD9nZR)8i|Z`pMoW*C zk7XXFHDp(=sGap;&S*Hx#SqiWg^*tXz`fKQhoKbH*1y#gVEnb=r;tJ8^>yvG{f4T> zrxmtgO1XguETBrnaB+mJ>dFeI5qEnow;Br5YWr2Iq`x70)YL^7J=|<^#-sHA+9>_y zSz}PdTE}l6oNu<8Zk^UPMCg5nFgDHd)FPykJ(Wlf`G!8qR;a92;COUxLHxwg8;~;- zY3uh@bRy_U1kFS3bo+8q(4)|;#?%`6^AR2fx6vA3Ru}P(f+!Q^{B_|BP_7gVd?xY0 zmp}z0V-P;73eX8LqX!84JivA(@-L1djEQLUZ)TaZwTS2K*X&I`;PmzrGN=&yD|^Xv zGLF=8oh0|lQiXeG8{)b!Pr_%=$dna~P9#X^h!kEl+YdyiT&D(}+`b`v@|_3h$vi<>GErC34J2g_UKOuxip1CMe9>9lEW`s3|Qt~S%q#qva#|wrq;A1Qzh?Uz^PeEJ63Oh94bJc5po*bntmLlJtA)W^=+W$B)dMKeo>DfN z{0kd;wEaGN(oC~wOlM-Gz$IGX6n-CbMrqm#r~9pA6N^j?3mW*TuX-AT1b)6xdUuF! zY$1D6&+;bKcUb}(Lf$mriq8o3fc2~~-$uX>-U;~AyAw_`#Y+d_`~`R_-HaI`rVh`7 zkLtu?XK1+4p2_RD@tBkU984g^M#2wXZAQkG zRcYz~02lic)nQAvw`{oiljIS$4qLOdK)>FW_fA7UqX=xp2U&k!fCnvrZ>EDgdEH8U zn(QGZ3Y#>lHldPg3cSdy{Yjz zdCb9-$*|DnqYal{4X%f42w6I}FYotU{)vr3@9W^HMPn$H!Wd+KGvDyi2+Ci63*5R% zunJIM{SK!+uZEIc*$QDqL#GRa)_R7cy>{sIFAxciBqBc%WzSbQyK1}gUdX83$bs-s;is*Ro!Sc#@aYWL?0w(GCeP%7X@S2xxl zrqO>Og-t(cc&H03%jxsqhXy#6@`Paa5a^_-uwivI%JArE8TLSBu*bNLHCM;DN^YYR zaqh{`$FO~7@}n9mT+enwQ@B@%#6=VfXM<0bGI7pREkMx4dRt22Jn9*~IxNJb_ixd2 zuCY&F1dK9jAbhL*+5oU1)&9mjHaG`EQ|*~ESGFU$RuCyJNLm^O@ly+BG2HaygT(@U zbwERpN5UoRl=rRE{iU3espGoXPm`5Fh4kVfi9qTR;Ss>KK^GX|?zSemp&rLYr3)9g zn*UNxyO)*%W(L>U6!I#KUE`KY#$rfHmwiXf3i<_)n=WnwY^A9|gh8Z1!iqD^C(Yqj z;HHP3WqA9?IFfQVFk#ht<&&3VFb6i09esr=UmqW*0CUB8JV!u#GW$p@Z!gV^`3n&r zG()3Z+0!5TYAEF*LHLDX`zGf?&^_`<<+eX4MQ7h)8RoY?9l}a?88-9{LuPLl#wAjv z#97K9yzQnAhW~?(YGyvyn_nfCzgP!WJ61@6NPbSRHEcU(`*6xv%vE_D79^%n*H(KU zVLLvfhKfvbrRhX$e!Oi=c1QBq2e4jrjFVE4(K5;q_3bjkrLZRk$zaF$5y}> zt;1?slm5Bo`*S*=5fc*&$tu&vG0VmBaB!G&OAv4ojK3x->Ih-k%~^o>!pL~-ouv2T zUP5q|!cv}@FmG6Ntod|iY}fv^2`~u1lJ6aB;iKhXye!qD%B?2GC4vMnl&i?>F1xzA zp=~9$1=Ty`pLJSoFx>E{!p5dXtcvJ~%395QHJ*o4#zzIQ+9@A0*R`gUxtNWNOEO+d znUb3jU0`3(tdk%{4PIkbmmIn5_MKPUFF%#-`_H(x*xT5WNe8E##R4u;T`5)h#+0|0 z$oS(1N%ctwyRm4*H|yuO1?PlvTnM^yQV&we4U`0^xQh9OGnSD$^;8CQX5=0R31@Q)Ml zGY%~b>!kvIdZ>z|8E^H|f&JTyl4zw$ROkTYXyE+cThn<)`V_otqU@^Bhu!hrLAcfxiB8O} zVHT0}if*Pg+1b_&wNf*-Z4-AN4`q$_w>TS(z*FtGK6g9X?29?@vYCvvCET$t6NNePyRxnI~$G0=e0L7|dYHa)z zFI6&Z{k)wP>w+5G`dA7$LQ)LqSTtNuMlzX_v4!>w-tmR-i05|4)_ zRUK)>)Ke(oBZ_L;$uEj-piEdA^#R!VHAWwVOuu;{`V6fGk^U`-sAVLp^3<-JipL8x zS+sFWR4WIsLcR4#SeFEStirdKKTSm1BbFgXH5r$Y7pR+{sh3FqkcT@cri;SY2MD{-ThLkcpn*v4+ z%k-Q)Fe!Co5g+4tSE-u^zOyH$S}vj|w9YlQK6Tc6ru#*?VG<^kYAB~(hfQ4<*g)?8 znzWRD6h#l`*>2ltElf8Sv3Qd@wlb74W^b1dp(O~T`;(sO#cZfBCq!1TXo?`|dQD+*Ns=s?yyS=dsm<)^E23tioP& zSl&9>PVL&QQ{3@;N>Qqc`p#&YKZd~^9NDdv!9C;`PAr^#aPPb`PS2~gYu2cN(T|NX zI1Pp0aHzqgq5>yBW$yP!YFww(G&9t=?`;6RIX?}14V`VM6e zc1?lY+1|XlvE|Yt#>A-{pE|981;))CV`bAr6sJ%h2ryLUyKCuhiNt5I9M`>+8Nk?< zg%GzfQ}_jLc+*T1#$F#%0d|b?h%(!_;ZHRiV6G1Td)??ITw_4Z?%YKPu8+a;*nhwh zJ4+gS9mb=349|<6i^5izP8K_$6csv6^6l0(}2=+ac9_|^6?;`V6 zuPSxi;7k5XeZj{MeZlwurXJAbL7OJ;ZYvvsE@8w@x5sAF;@cU#rg_khWz(R&>ppo) z^b*20v!Ri8Se(0cr}e=TryaHWZi_RYhA0imw%PtknFlc^!bjj)5*Lt}9GuV-t>!kW zaX5n-<(8VThEsarFU#2Y!kd&-4n3L0X6u!@gWButdnJ_>?Q4%VbtFK3jqO((pXOvYp^4?sOyQi|m%3q2 z04Lz*0J?s8)48+#^{%^|LsrDlGl`&1#VwDA@#*Dxy$C}HQ35IzCZSC8gBfu0dh;G$ zDfjr#e0?zO9`=Nr^Yp5PFR);>#2L3!ISWNiM;uLzI>k0a!1`zSox3o17)*HS{WOS2 zea`k>=Q;Emm>5(}B(q-|Ii@mWv$`2Gx&uvo_(u5XnZr5dvTvuND7U!TRjYZW%cJb| zV5D}mt~qy3J1CvV$#qRpqpYw_KE1Mg6|aA0il-%1@pRqDuH;jeRTuSUzvo-3@s>fALT85*haiL zCiv*>^||kqVjGj_mqI1hy;)M3!RA6|Ux&Mg$B?d!1jB$5R_|4c&M}f2?wn4d9!UuZ zkOtq}T=V7BeK~XKsDD>-X{RSXR?7&cCW51hB!=^o66ZQ2X+}zFdYPvJ4mAF+*T4N5 zKhhT-Gbh8TDWhi*BMW09=VI1p6ZtuhqFTZ|;1|^W>XS4aj17HQv~tHr$I4KpRo5v* zF3jMnLbO+Of=1Spns>n?AvzKjDq(cz(1a+^TH$|hyW!ku`+`@hM?#lhBki&%G=i5p zLv4vEv^L_=jqW#W$b#rTgGZp1QzX5TW!5!T(`&=krENB+V%%qPG zvpPsV^A)#@r@yK&dSRR~@2NX#0?K%__?H`HqGOn!g3LHbg!Vf?p18ibv^_xBY0rK6 z>k~7{X@q+X6c$d6gpPn`3BRl$KRRv3d8%iI&P@aX$$}oN=4-^ChW?xqTBHHat=MjP z$9>ll_la#jGp8iAIFdcu@4NYnu1bwjED5T>91@jOX3$}*{({JjxF37Kr8H$? zf48uOHQ^HUpoq1nPD8sPmusi(?*RPZj-m)al?5p+Jr(0=JgMwl4E$VnpG&b|OO7BT zD^OZfS2G|M0yNH99<%c zlZ^x4c(=w3RBw{KtYi5L9Z8U?6&?%tFyo~zB?e9%;vIGmUH$thc0Ov7jHYWl3<*S{K_9M=kdGbsDolx|uxo zH`+}sj8sTwbR=<{aYKZDMP}JLxF*W(n78{{tM9VX<{dOx(6(FOwlX-cZGS8eIGWs9 zpL$PQl*Uw$w@#!&9-~4N^NMdeE6&&0D0)iy-zO8uL4cd5-z1vDzA9ZY+L5aR4DaF2LP+}-9n zw9aOC1;e8f2MSt%x97Na`>uVv_WrTjQMdjJ_)b~mHMBs0;H2Nz2oB@2n&jnrR9h{F zEikb$3xhqSV_lZhZ;3w|UZXc4h zm^;RR1hBw<2AI7N6nhZ%Sfu78?s_M=@J$j}z)>+pEd;9o(EK?5N#TyXDT%M7u@ z_r{5S54G$&pYFVAX!kp~*qnPi2hYM-82Yhj);vzvB9>O+Lw(L7cL@j60$D)M&ziFH zZOaq7!oBD27pxOQGvi3g+RaW(s zHzjBPSIr`+7HIPr6tx@(azO3ECkknrB3mzzj!VLUdPgg`$i_K8nV9{OnRMY~bOc>3 zXmTE4Go?mTLD!`JI4`Hj8? zr$YI`^I`T;=5)uS(=XUgbFci~o*fJgT9yrm_WLc`K3XrT3<4(VsY|Fq94?~&A|UUF z4^oJs-O!jHsl6IFuH|;ZW4;-kiwHDNKC46OUg0nX%o2Jcjr9z>5S$=$6^>^EFS7~w z_^i~8jI$z6`aLp;5deiM#OU=^`G zTcafazB?ahEG|Fx9u2$q<#!G8c|19P@?2|DKJH%m<8k|@`oN&QC00_wmZExEwA|JE z_TdJta9aB46}L{?mWuYu0D3MYz~?IuDR=x|k-MLg`@7$MPO)!L$Y5QRa#RI4b#WYXUE+;jfCPghH9UxWQ%k1@64}`~(baelSCjMWg~qjVn~Y z8NO^$YI>003a>WV`?tB0!*SRxF&9P~(>3iah`A%`SKBE5P{5!IL`M47oq<5tT`?Y$ zx0gzfz_dHwPtfbp-kmDKhP2_83Lv1i&&qH4n}QaBO-=^{_$h%&4_?xL%TLs#xa?~K zAi8Y7{ku*0Uk|}psFMJ!>Ifm;(^!(B-I$!-ofz*Oh(Pgrq;Y~D&1)Vp~XnU}Ai~mISB*vF7&+E+9#p@Do^(sBoP1i*0(GgQ*Yi-@`A5Tczm9 zOK%#7a0N3mw44zZ~ zVghV>dkFvOfB6kE<)4bF zZ?kAWyqAd+;sq;hW86*;dYCRm^7c|84PsS|FBQDCk~q*$4i~mNp8q9e7M$Oh*g>em zKJ*x^V=Vg7^g|2tN!T_yV@O>N0f7a$ZshDWy4HSbR*7;9;s5t6To83;zP_`BgRySC zmj|7eAAUE6vMJpVC0`Fuk^aOxVk^Z0o6pFHGEuo%r8_!J;UKPj*NDD*%J(oGBIRw)Pcwf zI7tEV(VSacbqB5>_vKKqf*(|tX&KO!MEHLDlV|mM3B@+dI!Y<}z{6M#{%?K&=2Ui% zceS)%UNdZx1-Ow99GfP1c8LH2@AnWsFP3(SH>95KCUK3JINe3%QUPr$Mn=X`S}ql+0tSC51dW~=Eb^}x zTT>jyZbX-8%#45N+$#(jYCY0$&Vn{3TO9^Gt7fqB=-%EuOv1+26u2j2m0iJs#kfjZ zTKI9-2P4%ZX_SxKO+Age;RzDpIZS(Ca(tEP>7dntI~Pff)i6dneazpr*sY76r?t#S zrGS${UbP}UD)uxp-P-D*Hv_r%&b5$6Ec+$` zhndT)H<7V=4&Oolp@-T0_E0-HC&SH0d*&6%0o7 zdr_CWXlC&Of??Bu$Bte#zR)Od9<|MmtgS)#+Q8mtLN)S>WpYC*-X;47LvplnX7-B? z6He95TlRZMt9|3K)~V-!+x3Mu8;OT^=dNwr=5;^Gi^hH-;TYm{$Oi5L=|y(8%%M(# zo3o|GCQMbBZ#MqM%a7WD?bo%olApf43|gr3EPj)B;eCh$QV{n?3Ru6q?Y6`li zpKNeoF_5lvGFihnEEO4bOMX9o82u3IiE-lk4uoO234 zqq%l`G_uyL;eX4-q$>_|?T}Y&3L5Ihbe78&JGysS?$DHiWK*2V!X8jO+CaAti|e}o zaA@%q4#*2>Ai&74k67=m)zcmwH~v*F#B~G_cyjAy)TC0WRmM|YDtxo@Wj;dasMTcV zM{IdMz9-O63JcncY)l5_hZy0vIt>yWa~(f_;_j1f;c8SWLah>5NV9NxFu@AmE0lzD zzm+-2;6SJO!?0h*&3E{BTQ&<^Juvz&=6t+!6Tb#Mb_9G`7HMt6hi2R{_myD^oO23L zqd9wcFsuBv>Gn!<3Gv8zS;T;j>q!&Xn#6a^+V^pYxekF+$-_Fqommc}bTVE$NTOS_f|F&BAO<_(`lz7#=W zqYCfl*Z={UCpDZu%eccUU@D|ZTJl2R7 zTw}%lVf939JSj>!ZMA*-A49~fmp1&mjsXUjDX$ghFZ3p zuNwhIvaC3vgW+e~7+WUDGs%jZtx&Ai+G&|?ouAe0t^q$XB<;*uE`@7uU6pV|C+LK3 z%(jrjgRmZDLC-_dq`B?6yzM%TVflNL33@$*JqS4;?I%3UA!i%$J!b_n)>7Jp<`!Wo zm^wrz7BNh*)$THun&vFEc#vc+i1dAgrhvRs~Qo<&2k_$ua?PLF=eI16TmK-8VG1patb*QokQw| z2_KELX1E1ZGefF$Inz&eQ*)lC#O3rp_bSk20e|w+^%f zpA^qOmYF+DSJ-lc0)~k|RadrlWcs_@1$&Y+d_L_t7>F(#|SnJ zYx%*(dtT4*)uCg&Gp+YaxyLh!&dBqwU%eyl2caJ25rO8CE&752YPO7wn6jrLDiF%CJJN4|VbN$r*3V;*N+u`7eR^3W`p3$GzCVaQ|i=eJ8`+1H@rsQ7L zR(gbNptN^3<{*n^G*gAK;wzJvsZ2&92WO)@EhER5l~L=@Uu+7id##UjzQYamU6p&RFcirvjMmRR5s% zusPRYOZD!!_34f$dicCn=gKqbDmUZKZ{GMdh$lWpU8X2Jo4*)6Zf@Fyi~rjAV9052=vs zy}#VsTPia6`nH!c)<(>eR%I84)eDMt)W5}^ges#0hPt)HpIkQ{3)AXaAJ6Rvz|eb~ z!go`~V=m(Sq2rEgF2e>FW{pViu*N|Z1=I{>;@rzfq-??g_vCj#L%2yvR0zmDVoe4z z(ZexnoXC}~aBZ~S*|MbG669WVrJOkKz|7gGIYQAnt?&r{UJZ|@#X9;`X*&c zIjvIApz+*(er0TQtl)~tZmJ+oJiVMp)dP@mBLHW`k{Np(G~fRiQ;ZlUknhkGt_|0! zQj4yD--l_2P&>|M)F_mD;NN02{Hxl+a>8WWo4k5xu;PXNrWci6WCwFb=~_FbaBNg1 zh!6C5l0_q$UE%H1x??`GQ?XTHoWLktWtv-L+OU`jCBrsp>>4_Ol2Nyp6K%4GQrLbX zh$&4L9-DU;LZuslA{fs7QpAWZGf5g#i`Yz;(O{(AQ|p5JM+$#-Xq4x&TS4le#e#cO zG5tWT`$t9(5%B8M>NlV>!4$oOn1J0koSy+MDm=DzB|4p2t)$iP{X3%Y{Y;@A>wtLY(HAI5^x(*DaaB?y&0MlcyG~)? z;dbrypN0~{tl_&enV~c9P;dL&RGQ$k;y$TkNW8%iWlhe1dKh`-hd5yqg?Tw` z`UXR_Ewqwopp%6Pl(ZCmMYWy)nv5C>pB=_8NJ}jE*FehGjze3CY~y%i6t~(1bMH-hxN;N<8wvJOr;>r^@-kyx;a2RSp z?ytmF(W!@N4MOXzr^%$Gn9^gCTc6p}*)RfD$Rts;3-pegR|mz}4;iPttZ;)w%lUMC z{83Qyzfdgw0-!yJ-JJ>lg@y>(;oj<)>zwfPfwo!>NcKzVmLP>{$Wh!sDZHFJqjQzz?*;y!jU zu;Ao*_@QB2T1@F7qRq2&|JkuxUdc`39c+BNI+8V`_LNJ|_cvP7lt02L# ziz;U0R=3LpWr7Cre-F9mq$lF>xvd(8^Z;v){oQR<+k&0#ltj-rrQfv%pc`zx0$+y5 zdq(TAHFwvX8|~ROm-5VCkJ;c1YCm_a<2ya4^ESe#$|;)R_E>2W9I{WEWD};|Z9N~S zYOl6(B+3a5d5~4>%4#jtA}$aT687Qz0tF>DTY*u-d#n+VCn}_o&Le^oO`EQ>n=zj& zee&Cnw`Y2}jhkLVA2+V<=nIQky|3|Haz1GBgZ;I)ueRya0DLP)m58cF?m$_Q;Zu3) z59Rs_l@|{ak0R%*>gu@{+GxiV2iSI1MzC&r^`6N%v{TuYG~{#pb(tdd@#rS9fy)$S zc~4g+gm!dWYdbMgu&<$IWIPiQD}C&n@rw~Y@azPRlTX4m<|Y*PswTX|Tyj3k>IiDlTgUt4d~Krvs0%_D}UJ5lTEgJcuEV zsva^tEvK4nSojJ0mF$;(1HrYJ1a8JO63K+_KL|6-Q`bCDZ7PDfU5Il*CKv~8vy+=N z5F6Ysw;HF4uY%mpwYE=J?K@8v6HjFp^ASvL2N?T|n1N95v7146&%Xl{$Em$_BQLGh zB9Bj`%?w$Il+zqyaINpo;yTC#5YaTt?6&8Es_~$o&o`H0E>S5ZG6sq@WOrlaEnhqr z0s#4Q=K_J_h?QPSIgp&8TrIfkpDRdWNZZ2qJ+#cW`vi42F>Obg9t z*QEg5Ua%j<1Sf&gvv>z@S{!$#?~Mkr8JwmP6JLE5U%dl292{f+I6|^D;q)wF4P`*4 zmJ`tj!7@w$S#ZzA51u+&MK?Q7B*r361Jvh9t#c8z$RQJ$W?bE^g6sC|`S$h-e!cqf zzgtN7_c@6rGJEVbe5#u+=S^?{cTWd?QV-pQ#q+y!7M#9;I%8ux6Hm1k^X{}yfnPtE zQGzr#UQnI#@L{ui1p0otlPGbZ4Ji+`U{cL`c?r=dFOl^HaG5W$_@VuoOlO;{TxTRn zu5dGP$imRpt7v6W69>V!X7X517F)?Ex8r9{pwpcT{65`VFLFxGf-Le}MSr+zlM05tw`OIN!}M2=bDz0j-4KCS--u~uyTDUXzj1zd8+Ww5oMx{;tP5K=WUjubIAZBzC_*o)Z z58D%|q|KmQmrAtG^lfQ3=rBoDOwXdmo|qm#_3wHSk%K9POYhovx~E zF%v3zlFuXa%;Nz)QS1M$3rn@t@!Q1CXWLj1P!P68&%kL-1FFP00 zmw2-~u1}Px)%`^vPlT+ia9b6H39u6N*h@I5GfwNgs_l(Xg@=2x1~WzrhoPy&CSv_F zt5~luLVA^tgIWX<3{(T(F)?K;!b|bG(egh^iqX+6=hc%AtBpgQ(F{|tv3;$B5?%P%l+W%Gc?UAyAkhfc5Z7n^aV@CYM`-dF@pGyiWPj%}L@o z?-dqPC-n)oVQUV0X~;loGYRkSN5qu#3)6AgGa^~tcXxQtF+hjy?m38Q)|2Qq`k&iv2v?1`|=P0Z)4d?;i((Khj$V#nBi8^i z8{L~cghzaW-$&lEo_Tx)7fGaM$J07;aBosYv?=>zKB+wA66#bWH8ixDok1Z=42Tu*1 zUbTeW8q9yJ7`cSPv${y_tF8#nRp zzK8Db`sOACJ~^l|@rHwQ;#c))EayEPVe+ggs@9jYKm}iR<1ioM|GTYcOsB8nein`t zI-U!UT;O1loAobxpo0lQnF=do(535wIT)das?kaj7F$soFx0 zO*)hLTI<(l#Ak$k#)7G!{zxOGpLUkgF~Z(Qp(3rNuN(1c4KME%JNp#}uJd0TC{{L{ zYWgf3!`^1EoHO0nTz^cG%Sn56L@mQGik!Kx>HT7$;ws`a(bXnBtm)g)tSWhVOjbsj z=AO{?5a#l4kKeQ)lv~42B52M+K}JgnR*!uesQEehynV4$Y$XE6P1LRXbC}t}VG2qvz*)=#ZrUj;wqZM%KPT(eHUfqe_7 z;NqZ|wq1OV%q60>o&G%jzC>@P?b%ngXcmK5I~g!f28+w_{5W3lcHH%_IR zeZCeY^$x~0wm#hDU`djMUq@^7$HZtx#BmF`Al$f@)yPB^Mc}per6n|9K)}cc{Fzj; zDTYZa)Xw{w)t!|mcWAdTDDhn%9tllt+T07gK$zvK33o4vqb@I||8OzBP94!SOiq0E=xY z^`)1rHE-3f-SV(}33+>2dSJg`fY(Ho@G1f?y6nWwzCtxMF2@E3I^K&zn4m?&aX-cy zlW*HL^SGov>t%Lc4F#bAb7oxnN_P*=OsS%A4SBGV@;>y^!0)WJ4#nN7LPb{jIQ$_7 zEUsuJ{1cE{XA5RDO8*$zgjAJdIFYXBn@6PrTs}3;B4#9lGb~5vQGF1lz8|=c${t(M z2$yq^8k%SZs>YGz?NN%mGZ^SvVFVqZZsuyfdK+?<3lq`Z2NaZVvCq7Ie3|kVcgK7c zPhnlj7fegx1%FJ`pnt1J=M3JVD)QwDc>KDG^fhmMdNzkFuo-xJwW(EoZJD>b{e)GO(13sWR1MU#jz%ZXL2zW0)y? zf-vHx5X#XA^li1?+qamw8OvO}iI6U@;jSZWPH@_(790ykRImx_m~{~v;fs4i=v6kc z%1E*5Mqh7uwyuF9bLK7}z(`$?OV*j`C6ZazZFVdnII`6&MTqUKy<=Jx!|rW;=Dq67 zzzR3bq&i1Dme^GC4d0Z72hAb1u~^jbI(_8m$>MVwhs_d>60iny7C^SIAGNx0)U1GDX@4Cy z>Y0=^%7tbKNyQd~&cYxX*kQdtU$Jez;9PV2O%iCTL(5Ny##74Ux*~*c-b2$uyio417%3tcs9+ z;eV4&@?@NB#nFVN9iwHaOs(GvJjT13i-8@4$*{#na*YUv)ERPWpv6*aKtAu3XxUuP2 z1V4MurH@z6LTbV0SGOIlSsgfY8)+h|@oo;|;VQ2BHCpcO6y+H^mBoYivrq)}nV)_# z|KPT<#!Guo?cAY}&&VNBp1*ouioSwJT=2W0IwxA}S002eP!o`;!Uz{JkuVuE>~lQs zT2gOP;*LWVIl)}>j1l??JultkfxqYupmS!{vK5_amDa$o*O)wbg2}FQnb3UA+OpDK z+Jr=cVE{8k@0Ws}oGfjZXRvU6P;1g+kEj$SF*H0ulZm>{D#JF(#!QM{JR{9E!c4gX zG~ME^fw`gyb)Ga*^SNp|H*q4=)}gB8WN%>8t!-RZnx+V_FEj+@a5HH(DiuoZVE=nw zV@}GM|2^7KEA|QsQg@zj!7+;SQIc#UPorjag6Sy~TB}@W;=DdCjvQs)KSRDu!-Thlhz-Q+5 zLrnmitRPE)^9Nwlkm9i$tmaM&c3y5qvzdriy-BgP-c+KFLu94CbU!zNheZYWIb60Z zlR2{+oL?6#3}Ao!xAXQ=sS0zE6p1$#&|XcV$l1BZ`eX{S_EKo8rtDjRN|Q?TR-bcp z*OIQ$hIH7JEOb`GX!Zy`Mm?K}bS+}2`PwjJy5xK2mx^iz2bK@A|4n}2c4}x4f1@eg zk*r7a)(Anf9e3*66lpj#krQII1U91xSiO=F08aJq?76rHMhuS8}!* zTl(}=a`S!8;>%nc{9c4plK5KG7)o-l3)h5Ct=^?`Qq$a;Vbo>P(I>t`OLe3d;nPsX zG%+(N3CnOb`%-B~8nh}s283^>mTL11<%SqAXX;6^>!~%QV7S4_{j-G80R5D4c~R^~jTF`LXxk-OTl&VONuxegpQ zv|TcKxRFN-?uGIO4y0KvQKMWKjFE({%8Z!*I(yezuSbt%=1nr> z=4oYvR!Zx$kD=h5j;5dM;&x)#Mob+d;df&qv4^&oGz!N%*(pV_py8*YdN0-SiCQ}& zaVr>2G#4p&=v1`?ZYIIsU&kmEhq)Uh|YX zv@7iILT^5b&-`Q#_yb#w6&}n!8*c=lhsr#^Qzt%vcG-WB*Nojz0UQrL=X|zCHABpLS-Q#aO{r5&E-siYV4PtolwFdI8%K^rt3qGNXmS zhk*)D(HyOIzH+{n3Y|Z>n$&P|8&b#HjQv@hUJ-Az*Unhs-GRsH2aS!rjF_EN#W;r5 zzomSV=gwQ9C{zg(6TEcLlh?j#*VUldClej5!{k^P@Av5<{1J&l{~PkR+HX5G4g(mk z1g1M|=so&m4EH}U9vZ~j3xIv{233=`StQ8THG9e1p14}R>Xqg^0N*9+jovRWyzgWeL$L}=iU z&M^((1*MvLsI~y;twEi(vQsQ}H?IXd?uK<0{y4m@eaB%Z>SzS?oP9H3qHvtNqBbLe zhEMBe1cpZ#dM;WqBZ<09Z#mON_WnW6Ivp#2ws97a)F$D}jYcL#T`A+$8&Qur@-#52%Xl2T^56rG6U_^4BpjPExS-`8g? zS~%MZ$3?2y^|lfoZGkQ@Mv##X(<94e4K?WE6ZXqkE0>XRj-t1>BGPbb$9m4ylLws^edSn$3&$L<~kH8 z>J7oM7Us&scTDV}>MN$sP&2{L6I-7zeh*(NoHPvZKOud$#^LTOkOcZk{MQn~4R`dW z+W~2))&QkHRda|?tMC|x9(sNSHutmzLy_yplfk^?AUC`F2Zc5_u953EdD_CnJ|;a0 zGG21mhW@D%3AnNQNdadbr$?~=IhO9(uc4!lJ0kL)C7tT*<%KeO&QI3a-(QxV2x`~4 zUiTT0CZ6t0n2lA2)tWe-L=r68KQ^2sLq`f=8~M8?Z=|(_o23|%#USnbj>oo{mbrggz7q*3euN&Ff1Vsgiym+ems0=XakzTik%Nl{ETJM5CAP z+T9MpzBh4gwEs7Q>qN&G*j}ph7~BdN zd!(hSRhBg|edu~q8%$mgVSV`S%r%)B&P`XX{8@z~6Fry-|U7is3gopj(jS87KUg5(E@dI`Wj>N+xV@ zK$P>q;j*rZ?Q5*$v(VGj{O}p2{jZpM>ChcGEvw!-K9k1shevTXYwsFVMtQy=X!heS zJHYVFck}m-^=4pGUEdmm4Y(kh!kDsSDa;DQC~8(jTWJtF(@OV9!M^lj$m4uFd*S%$ zDb6|2<11v__fM05*}&t}MmEW4XtcnjC34=*&1*K(tc-7GQdw=J+qpFHWZJalyhp%~ zO%3NHLbrg|yr+A-t(T8pd()pU_{=gT69F69_;{>dbf<6z9gAL1v4vZ1J=t)72y9aU zlQ2Fs9}Y1Nb_f=fHQCzz@5Mh|5hjaWlbep&Jr26~O)?AR)vH+0sO-U)G|rhizl&Su z-#GBdRv4Mmcn&(&o1Zy?x!LKt=+nkhdFwI{@o~ZI%E^4%?0g`8tcV<=kuhm&^y;p* z+Lfo-p3BV@8*kMR@6o(HIqrTq0d(eb_3tpco;RF)A5PS>0bW6hVnV}j+A92U3+>%% z9V>Gi^6CkdBwphYb~3mdHLQNF;`ogo&_{{O1&gsEnE6t*05;bj z8Pd;me`U173}nTrFn*}|;oYR-<8yN=>%PFF*bISc`?c0!|ilEdJFc+%@}LQw zi@a=+3FmcO{RNx6CV%B1%R}B&6hdvT4U;RmHROMjP6P#0pwkl+u1bYf+j=DL^@`r6 zN+=VuHcL}NQ#+|x@k9@mkX43=9pKCfofJD;olM#K?6o)D;g#~_(Z=sQRpUs2326l)v#~L0S={rS94c&UIu*CRY$1 z9?T+uz#as4Mxxr>kG8Dyen25%g%B}=TN{7ZZ~^dZ6|3FNfy}oO%OjdR3X3>|hTZwU zbyTL1CGPCdWnmZrqrAG3A71$kFTqvi$x@)?0+UxwOfqOfy-JdAf{^x0Ds!Jv9jr`^g z&RDEfLv~P3f28*Pw_9R{+6?5bVKPCSkQW6ArCU?nA3lk# z`*&92laq!sT15N5sM%1U?8HSsDy_g8Ek&@4yLZmyWU#N;S+qr&B}xtGL{!u_S?nIE zwQ$$G0t+5+(B?CyFu4W`?adYZ8AGqvTYdRubExG27TmgVl*rwfAwO9362g}vv+OJl z$NiK+Z2-R1gIL4UwqA+T?+&qa!bA(lBKqt-9Y?kdplLon6mL#dhTJRCe^ZhX*@5IM z5j8iG4}ofBt{nlx3EcKmxH4~8^LDznIegyZCkgEm|+kn`VxWJ94zLxQk#y5182)KW807RaX7i&lKh&H- z{{;2*d&Ui?Pkm%fY;6thT5;L&hof}bfu&Snb!uTw@29hrnt^ji8~!n-I@&F#KBl!a z3C(aG)k@t-s~SLJP483LzEcU~yJzi=>Aa%^kz?ONEgp2QqvcbdVUJOqjL`B3A^#jN z@NX7Yhsj)-ch=FxNR_DgsoFIBp0tVIiNrlafQb~DS(HDq^{Uuh1Dobo8k#pIs56GP>V|_it+!=}L1sF$m$l0!fO29x=tyjI)*qc(6P6WvL zV34rV?(Y@y*hMCKvjT!)dDE?p1h8S>zwwRIz|`PikI816U`}4UXO7XcGe@&ycgC)a z-fSz8(&{0ci4Q>gR>UckZSLQob@^IwP;x_5=DD>rou$KoHu0V@fZYCDcwz+04rOeR z69nx+Y^vB-8D=`Dh)gAst8-sWh<@+->Eb{r^B}OPI&ERttpMQ>sC{>J9r19zSj`_T zIni8M6je0ld0Zt~k5X{~+)(9nWd6tc>~r;f=C z9kB6YaXkLFhnlf-h4t~}SYdR{9?qayKz#*Q{1U2BVDxq~FcIR7gz$}I8$v7(%3ZER~g!ZLVgr1+o3a2Kh*ABCj zMw6udt1sV`O+xvHk02bS%b~nA%&~ z828|HT%8+I8wXC& z+|#{Nyc~k&vp|d{ongY(Em-OHBrgxxPp5+@A>j7HQ#CQ=_=H}@SQC0n)+2G*Uxc|A zZD9oPMO5taIw`xqDL2ZS{I}T{3%D6~m`T7!d1iS0=*oIH))Dg7YxfHlaIgyH(%07=kfO7BQNa>$|(q z4(kxrCuKJzMpSmrUA?VMaA~|yeiXr<;F;$Atcx&SG0f3aOv+!ryT&nzQpBl^X};ca znQQRTZzT!Nx_&2Fpmf6IF$@6HP=&+q$vCMY-qZD-j?m&5F5qnW9pNV4$MZQ~Jc3N0OtE&$)MG?Ts=PZ0D}25&?bCTYTO*qcOHQJ+jgsIb)7%=z1Syr3 z>8K`w3@$C!s_egefy}EF&LZz|XACaCO68_aW}l@r@@JY0t&I3IW1pazQ)<9P`w;5+&E9UH&yj*o+5AFyNSXNwk9nDq+tHeNl6g=SsyWb7u)#k z=CazBDc7F&4*>C!(iPbc$p}tJR%LIq*YklRMsZ-_IYLMbpcT_Xb^fwTE<%|Vf|-Ho zi9FP2vr%MlKoVDLo4sr$vlj&MAzqJm`#UUe?9Xp8j7v%wOtm=+*Zc6g^H&SyHN+$W zIcgEKFQ$6C7XYmVRVAb`trz}}TjTykKYn$qga!*^Rm4l>*$49|Pz!F{P#nn9E%zLJ zd6K!cikQnn%y;-pEz^mJsR2soGcmv8n-=SIsU3!YV@?)H!!G*n)QujJ9h0pil6mkv zA^uy%3wf~REEC_wqb(XGUdi~IcJ4XeYu`*1s~2){_yCa();iQC)*PpmemPIGl6dH9 zqbRU{h#Clx+S#q9ULbl@+1a}?BL~!Haem_OM{OnCm|ubJ)18Id`R~a0 zzL20mzFF`GXftepEP%y+ZGhG~|LfWkOuV)IRpFv3?8Od^@|y7fTF=cce9rHZ@*GvEOwe!y77=|lyCaVFa<>D9pW+6WElegxAB`)B(&8{2L#BQG1t!69P*7bpvA z&3U(*-JbOM_`b49-xc+4^jipB8-H8Nz;DM|q;twL0!&Y&vE-`TOR&<1Pi9g?_RH0I z5}YZz#%5=(JGc=g*18v!#-|pc`**!Ss*B$-i)r-lzgJllta^L+cER)k?lUwQw8ce| z=IC&1fw5rRZRfqmU6T+jU1c&HqF4YIQK7VnEAl#E-k9XE>q#v3c@{X!(+G8Q4)#?hxW>*g+SnVx#5uqowQ%hk+_@^UG(k(OuYt#@gTsVi87s@f64F4RI)8Uh_;c3bGS0g97Xnru zqHHIyIsg}7yUwLCpXRhW&XHkP;zPtu4H_xYDPZB|Vg44hvT;eh z(Avb4Yu8qJ2bj8jgeT5^W9CANVuW|wnRf5%qWBj(LTMvI>XZ{43lIc($|g0Z{RaX4 zAL*1{;%Sns!w(jghNQ7;f5Bd+up^`}Cp%|05mAn~fc)r*$qGFjLwaHu0iBL8h>!l! zw`&Xhsh(kt!tr*F;U=kv?k@#``z$bMNX7zb@hHeBYXb=h{piio&;-uGqA?LX*|B5!5%x4ww(FEACi z>~B*?7vI=S^6_Tz7Z}L|Iu?i>3mv!&c_EE~VeT|XL zKu(AwB~t}ISeMvOt36pRuY7El!zSN+XP{q!3%Ljjeo~~3&7bzo=01%lHTv}9^~$>n5cQ9$mE`r6hl!uH9+^1*rU`#&P6HUj&;+{Ikl#~u^M zD~!sO0i^!*ao4fkj*uW~hpj54r9gIYOes#2~)PaAA;p5{z?`f_4~nz9JZ zvn=AVqN(p1FgeEDv#;E{_Q>L8UtPKo+KMWr7A!J8LJ6dN6n6Wx_w`!^##zk4Rvu=h_rs-mEKkcCV$>uaX_oyBXroe~t?Hl4>Klm^^!5uAv z?aeuIx<8lG{=RGSJKhUfCR|b<-=i~@GC%JV&L!j(0Ei7%pZ;!q-zALc7DE%W(lVap z!#=1jzh+lsLaln6laZ3Xw#}oI)7*c|Q^TB7{Y#2aM;cNbQ`n|vZgHE?mHbT1!fVpJ z!vH}hwO6QZpNx#;U3txbnyedd-b3dkc4m?VaBZwzFGjS`Ru|hH^(v_b3!7{7A*#-p zvkb}Y@uF@otX-H+I$i1WuNB=>b?36xMK{NnjY+ZGWA?RV&{w|e#8;`0Lh$qbkyi_n z?M0GvzK4GhDtl`Y$L*%t@0qg5HHd5T6@y8Q6&3fNvyVX1O4$TP2>y9`H~vl4H(-$q zRuY|SjNW_`>E=9*ZOe^6n?a!%JIeBwOIZj0Zr`p|&}D=&4sa&x`%i&gP#>}Bn%+g- z(}$|Qk6P14zaiKyjSZBIR~Hv4jZp^?ClM!+7UVE~QGQ>%Z}eh!arcy>av=(*Tc8cjcq%9}|T|j(UoB;D;)q%VC1B=o0`}$_Avp(OAH^}|j9bAhd zX%3?!%C4C-bMpa}nMwi=5J-HIJf0-y`>)5|{YG&z+uK}oYojqoXiton7g9~be;d8t zuyYf)7f-k!QkHs{Tf?;OS0H5AGAPDSTDbqlaADPnrS=OD=IwH(KB7{Ob+7LULq6%P z$tVeE6-n%-w4Uk1irZ+!N+`QyoA*nwuJZJE2FP8Y(N+LWxAX*pe8C2In`?JUmS&SA zl_aL1+_?OxkRLZ2bC7BXoPVG;Z9qwzPn*^Xr`;aB>GJjkuwW~xt*w`&>I2pITcMh4 zq+zau?*`l=CKZ8|a|VrD#2R6CqGkbxHpaz#8_8t`!M`~IX$Z9qZaxQ>k<|to-9G1J21)PR46c|Lq8VKcdBIabLWWQTX(4(@;tZdWv92yF8#rd$4g%k41zK z=brK(LYtUsV=B1DD{z$$-lJ`9yOmb0vOITK4soltLXpe@5wh)(t{y6UVH$afIZ_F- zjBOVouo@r>Q8t>8ecD~;Z=)I-jV$NJY3!L|Nf7J{wHf?3ySu^2_sL4pb(LV7W`_Hc z*A%Yja4l#{@(9*8?kl~y;e5T}l?cX4dI+L{#t3t>f51v`eko*4jz>39HfBXnw4725 z;Sr-T%{gS=3j^boBMt% zJltnMl_V83_KlxDZJuCXRd_On`!_!ijdCs}axN2WvzZctwfpUp=e*&zU80RDp@im} ze?XD~O621u4u03R>esfDs(|#Hc=ca}{^P-85e2_na<8`9ckxVeJoTK^?E9`P^@-3V zD08)MSDxqTpn7kp4pV9Ww-$4Gr%z(XnE^aZ4Dfwl&5=Ia*i4;flXQ-dJ-l|uQH3@j zySq5NhNG-wMFYFkPNh`19+E@wNVgf*Z^D=&Ka?Ri_%H1{V5+WIc852K3EB&rCeu0% zj=`$mibn<|Ydn}c%aU)E&yW%0IUSPvXpnWxN{~|skW!cc?P3r~r z-w})hhLe1CS#GYxJ$Z|yoJb=5cpY`4b=FWy?p6e*!G}2M7|8~ zGWCH&^h}3Qjl0K10CCd-qlmGFXqSD6kr*)X9xQrRIywn0Jg){E&p)nu@qE3+o~F9?MlhSRDj z0BlY9W>dFU_e~Smu#~lQcjH2m~LevZBA1Ugt zO+oHAvU5WIHCmSgfv47dE^xcJy6aNPYkP^H5}}_O`=;~PukAaLbfu2s94PFU&OpiZ!kvOIq=uJ1n+XYAElS9@{uw_hL>j($2R=410KGsW!%mSBgpu zxn|h5s#ta%V+iP@v@F#8lr2$3bE+P}T@*PtzQ1rPyn;DW`G({TMS?jnnVnu2sC7j5 zArfcdfP1u~Z+bnXy65=QoEwgVac|+@{%$q9ODvGa#5yxxiZ{HMS`8gfMR;(9UZTTq z9)dv>80n6kj@gK%9#yl#fMwpfq?XHq5?{bY z|Du09ByFKufPnwqUHckcmMYE*S$})yZ+kpx^YIEar4|X-3LFa_>c7PY54?YI4kV09-874Wv)bx13f4izVh$*N&dG?l&*n1gb0%xEc`_H03*SPHsU;Z6 zT{s0R0*h1*P8ckwJm~LX3wfO*D2BQ^4kwu z7)^(KTWFE0keBRpOqT{9EmOlEe3!YHcF#eqy_<9yK5xcJTHqS@y6xPb22V4T9OG(D z+FZ#cNmYueskC)xF%eJ47#ITxb8WSkZ9tFLc!HkcaF)V>(c|TQNAp!{#VZ#7iONpu zc{Z@T^F12cpov9+p(gC9mFC9b!ffZDnK9I6hoNRNn2nS2W=%m|ppUvq(RFN?kmza# z^t;wzU%K_U7rI_0X4hR;cY%;hP-9Ry2SGajAdz3GP^TI=F-E9-PQiuirGo0*t$y4@P?E1z&f?Z45>1 z)0v5sCmEH~&gSD#d2=k6csCFgR=p<=QAM+>9^-i#J!K}9I60R`&VDxdL%ss(U4__r zdZD%SVe@pRLNm|=!%=EaL7yxRdhpwx_KZHo z@n_6mFYe^J61^11&@kakQsv0jKkHz+Vb&P**_R2bQtk6beq{1Kd)k&&+ zC`6pM@856vD!GtngS*bRwFNO{br&H1F>Hg7Xq?iRZfeCCo}g`Dt1DQD;+5EJxMa~@ z$0Gap&rkjybj!bb@~3yAB*3w0pA#SY!bF@T3i2I7 zh%wve)jKnb$NFk+VE9uPJ)zM8R~?)`-492B@XD?L({Bt7z0o?7@3td7e7mf&G(l^u z*RvTV{gWBoHHF)oQRg{R>l_K#1{&)52$1Sc03Xuy`P|Wy`Sx;b(0d6#+g$=IO zxeg=izKfoxO%g7XS!lX3It7D($H{qqYQ!dHg!BNWQU&54WvCUVh-XT++l@aBmLd^~ zuw?>h0l2t8zz{g8FaAB_uDz#6J|frkZnK(lgoo~*^lq?HgC_!c53DFzwX?g3b(VXZ zPOo#eZkT^>fapNFRNHtA&|4%79v90X zl*v$Swq~bBst0!<`oC>@Sd~!Il(U0O)tzWh#i3UVlrBX&J{E=#B1>Yb+~kV`-8^I? z@K?Fnekw7YA6}*`FZeCoMr85pN8sVZAB(7y?km@sC^-Jxivlg-REv=a8(T*)HhS}1 zdjN9MB)MR*D5)ojS+g#wj+7efHj2WYpn+ze&I_IDH<*S;Pem&Fcd!`tk1~)L!2*SE zQwJzZ*ia8@SJ+f~xbpT6wz@WsyDX|I+nlgjc1=3Z&NNwx4PRS;%E7VF$T?d_!OFQ0 zZ*WyA?-b<^1)RBt!;xDP>@atx)rBHYkDmgLpDA=<7iKwDpc4w+3zgQ}u`|y5{&pA$ zUBOd^kmW@0>!#^Cz~i@RbA@n_puyFq(d5&6`(GqXc8Ud($D#8(1&RVMk`JD_HpIcQ zm=46`ZEW?x4jjZ+uraNT;Z z(z`RcUkZ9*P*C08qs8QLtwoKk%}bfrNwSaRZPC3wlN8s@s24u&6XSnVV`;M3e|dg{ zbE;@$0564STI&o!ff1RegQ;EmCez}|i-u-Ia+;V{|s{_92sErUcwHoThu?>8&#>hJ()QPh#0{IuXJ zN_=8tzuQ;H*-rS%>g_bUXd(I1h$Q?M?(c9^1EXt}NxSv7weD_?YH9Z`xabw_9Ob*V zcJpvVpxH7!INGSSJBVHiMpNC5E-bA-k;&sE{w--YtmuPGU~{1{WC3*N<70ysp*2+`LW%zqlY#nX| zgJ-iv!@UDBCLx+_1SNSqN$l!x zW<$7daMf+#KJ?8X*gceM4-Y)%d#!L>e$wpc>idB7N6tQ62%{6^|F|~p&x@BOQRc|z z&e3UQlyaX#dD|7&nFrwGbAP=1js$h;jEod`I7}OCeZEv#zfS;^o@5a?_)rxxLWUW- zh=}b%dth6y1RJ#>I{ImWW~{JbhGW{4%I}f-3 zi1g3J8|^%rriPgyCi~?GRlcG=FY+DGpdLv4sRGhqJUHb%y5_i3`QNeC{32mM zqXPv9iW;bFOWH<8QjcYrSz?H$GnWh9lBaww2Ys7?%!?Y-HU?NVl(n>%Cfdwd=9!9j zGt0fPJ{L>CRr%9!K!Eo3n~(HK%2Qd<{fazIOQxo$y4-2NmG2BWNK5g{kWrlM>(g+S zjU#%+wu;Oi)+4X!cJ9rp$Vk`0QIx51S(!RWm&;H|170(wq)g~BSXVG+di7K5WiaD1 zj8+$w1@@Zc`Ixcq<`FbPnmhL(tTPWD{^yFGJ4S$m-g)k7R_xYrWy>*)|-BCGhWrLpzAI2oa~(!z{Zv_F+y9d@g**l=65*Y)_gn>hlV zV1}Agvr(W+UhfrV;pB(xB-aI~h}A+sNX5uYiGPDXun$>ijCg2fd=8PcP#qmC*K07) z|AKA33djo3JD+646)`)Atcf`N*xbnSYKhgi$(!oH1cd8VCD}HNoqIm4uHW4Ie>kyU zWFHSWu4)*TD||ht7KgxeIgA%e82+Zv@P+B>eX@rlSucbfIyqW~5j{#DAslB(>D`ra6M9;@Q)&vKRV4{f;T(HO&fD5lT} z7TU7(q$LC59H=p4Qdamqoga9k@nPVA)1neb>3&&Cvv|;jvP%{v3Nvy;kS{Yq2NTSA zh^`R&~z zG%a=t@wLzCB^8{DL3jX|p4zL&*Mc4w2OCWyp$q{pfgVg6_RAm>`lN82flg2ZJi&4E zVLC1`Y<4s%w@7j0mf{6%@QsrFm zb7Y%+3m3QfOi&OPwXoEJH?QGr{9n+f27V=5h}M z;lp|}FdP8VQ*{$#3==15UVfTBU~`IT|gP4(5YClBExDqIg}=Z4j**j|P*zJ4P{cK&fW{YbOEh7W zwaJ^;Bz`kYTwoJVuBwbds^&!G@{D%64Ea*+-f3!R(OZEE0zEop6jNbr=91@yo|pdX zSU2FO>DC*K9-IKg#B^bPImz;9O--D59DptAmjv8sYUp`tsmML~Zv6=lGQ|0z$&}nLdj|tl23Qa%^r$%KkQ{R2}3$vlV@Ur({0^ zD}Kp70BoOF^BO(WW(dJ)3yxkz>w5EzwXwPEspu{lDuQ(W{w>iNc&q0aG$)LNV)2VF zC41#>L3h1j^*OY|;4;h$PdM5lFS>>tV_P}@SKYYO-!#2^md2Z5>DSnWxc{ep_lj!j zi`sq@AR+Y7L$CkPAs_+@M5^?T^cqB@7X<++p@k~FO79>=KtP&wq!%gDr8kk@MdXX` zdvngkxjc8@7;B7-BxCQaHRqbY`8;cnKvuMvO~CIt!DRvhDqFB(H6D!Qa3{j#S2XKD ztD+1Gs6r4mUkntF+Vl>h1Fr~>meO0pS(}w|I4%UPyP15*TzlS=Ia5%;!xlHI}hMi4@J2b7~U+>%)g*S=msWELLD;sai3A(HVdkRm|t|QjSjKZ zxYA~xZm_{j!HJo9d;r}_9K1(=UKo6Jno9}95AFY94DJp$I$jr$zhyM<93ad{+2Zd>N!&WE z)b)YPsF9pO2*MsCir4{k6NYnvMVNWgk6)?sedijR;EEo~`m1Yg+R{HeD^N`z z$6d#;ZTusL6;?3!AKd-Tl((Pf;+j?(gI_>HzOlWkU0J1oIO`vZPN8^|Y`a1o8gDhb zm6$(KaTU_ZAJHTTNi~nMYj(u_&H9!bujWf*hHglK!>*pL@l#ugrtC~s!ytX({~=?? zdNJcPv??|fAvTUU8tfHZ!jLH z_`VFuwmLi2&5txrPP&+~viQ+(-q#0CV~Bf}8BCyv#~Kj*pt8X3e!yQQdz5die#8Lo z(UJ&a3|+J)C89NVbl>m zWAnf$664F2^_uZ5 zGvp;mH+tjV9aA!vzCJ%P(;-nc@&uW&`r!m(alE92Cv*hQPPT9L)H(K;--u2l!6xPU zr*XJeEa4loMJ~Lb>29Fa!1$j$o73Ok*td%Tc!6+s-3wXueUJvWmau-o*7?}u+okNr;!ID7RwryLlyINa z%!tT)Cq40w7ReJvA>dL4n30(t^S1d^Jf7+)TRsfkof-SNV$pb^4|}xHgWOsC*oTZu zS-V(!vJ*c=heU4nxWSm0Hyg;x<#!jIcP3Yijn92kJ04feJ9;$>9ZcR;c-OcgJqqBe z6+3+`GjgIdKy0 zd9X4b=B#yqJ)WgOrXl&m@2Xe;>ZMPC=bzr$J`x->k*^7N$ms5jr}xeba=OIYDN7Ic zkP{R5!naCt{TDFZJ+FL$(N>#>Kw;LzreE*TEjK?P38D~4-Q3;Vx4 zz76FDM@GAV#QN$FYj>AqAfUF$HEVp6URS5>G|W3LW-X?&=+0Jqv>gWz~lpzd*UwTJ5z zMT4rP7s3E0bC4Y9lO=XH{|Rrni2Ig@1s$feb{)C+GA^+RXu)Q5&*V={u(e*T{2R@w zhvOn}zjO5y{hIDKN-g9dWVnJpy1Qb7icf%Zei_wyl4cXpMReM(ZP}*Z+r00ZpEs1 z60sryB{8GEp)v^du`#HL2(+hOaJ>>yJqm%bPd6BSE{Fg!>EEy-pucEGZEL$kOENmn z>EXIOgK*I~Lj9n8XsPAxxcL}(%a&_C|LgEA=GGmgH?KOooNM3)4_s!$U#k|@@S>|} zjju`~Z}-Qjw20_083TgGvBnn5@w4P9&%$(kl4!@KphJ~-4$a_v&Y?i#0@%p~S2`PW zYq#{_n^1DgqP}+W1)amDa!XZ{6z}8J;2m*&0@o}0Iz%|rXP{T?oER7rL^}O4J(zp0 zrYzbk<}E3CmR5Dan}-tFgd9Zsg$adAV#`>DgA2Jd9(0<`nivN)+wWte4|m<)MGGh; zN-!KWE*3L0nKzeY?)jeEK|nFnV3iNbuJno8aQB4AZ;xGajd>ql$_3pi?{EWENp)hf z(G$l4UcpgdxB&T>f_M~ss%I$@>5a~8eK-3{)xiXNbL+Vg2?&6Y`>6U>QHXQp_(@S1 zBTK2|JQd?Qv-iv(UKfOue=0F-phbA-0?AK!FUV1x-?=EgVJORj68GEU5d7NpmeBz( zlOc=^w!T)b7ra#(I}-7I{{*J&^E~ztSkn8vBvwA}K1xxmYg?*oCliT$$nKZN$CsjqTO4t+JPQ62 zyR=sg8FvHpaOcOf5_=I+1%|10%iY_eqQ?I;m|=(!OMBl(KUU;1WsZto+Oh}!qAD5j zkiT``y2wJd*;aoxj-Ynq0eXFg?{)d6jWk@?mla)ExiO8pot}RFnJnLb4*D6X-j!%B zavQq(kTYkYP8!}ebvd+3Gr9sD>kaWdN8W}$-m~U-sw`O47hL6rG~&L8&`F1!+=+y} zqC@y28p;}M%KMk|fI&JEk${f!hPrIk8zs_Qi|opjh$yrCG2<;Xr{7QdPUjA)s;Fb$ zN+_DxoM|2z57S9+d2G1ej}s3A@v9&t%~yT|AB#KN1a&yPwK{5Rqoc!x+rW*)30~sM z4IRCcE!*L5@EK;)VL{KXiaXntc*rVhcUVXPR~cLHg!h&~7^0Gz7rnX-F_MrR@op(= zlxs^yg_*KmvEhO0U^D`O4pw7>beZB4!TI~uA%8rCWb6J5x}Gfw;cwQvhTN3ycjVJC z=P5h{fM;~`kezx{k8kvui3qVY!dj1|0kHNtgU|=O@FUheJcJ@6{WPg(0r~FcW-U_) z!lWyFm-!%@y79<)^r(NE0Umy)=nyY>tS`LBkui*da4<=4?}V}#xZR-PwHgRytyXiJ z4qaX)ea2Mx3G4aJy-|@m-N&f95y=H6kM5m9fFsahyA8Rd9;IX!Dzt$hRUuy2gYh{8 zVFDv3f`Y`|n-KZJT1R4AWybGN;du|D&NxM4Prf7sO(%p6Dvgb~(1bh9Gc8B__TRw| z0H?jG{y?+Cs^%=AwLZ`@`%UZClei+B6zSV4mp$Mn*Tk?_=$qIev8JUXY=4%WwR3 z5Z$V1Ule=(joRkF@6^6%LxPx3Eb})xE=~26sKrXinP#HrKRO8Bu8W~s-7s?_<01qk z*4}FAqIaCK7L<$#siVf4@OrfR*K6*7sJsC}QRH{WU7^srdD8ZMWzA1feA$uz8&0d~hrg|9Bg%sCFpWL!u2N z&a3)zqd#8uRE0-(i9T2hb*L?UAmVt7M&_2YfO>8olT7^|o`h^LN z(y(*tTah?W{{-e@eX;Md55^IL^JgIy`!OETX&uwXC<1V*U&3d93WWf&z&w-q1ZAbDoO;WvKXm(*{p2VxmH2i4&2ecty@!q@}dlzE%U@7M6U!93+_=XxGG- zvcCSs52km4IcfhgERZ~Cf$Nbm=jzF5W2J63NpJOrHng3{O*_oZkBr?SfL#wwfaO;w z!-isi4#yNPCI_^|WnL&b(trw;<9NF8m<=AjSYGm>@SXz4X`FR;bzkC}#yh!#Cd|8Q&ru*vMGfogL6>OXsxhgCXgSNZ8 zcuLyqYn5-~QGrNP)o=C-BwL238pZDC-*>IsnF+7R5U~racJ@cnath#O7b>rHr2U~? zUN}S&uT8jWD%~8`?sgitljBn(eQUt+MdbiUExkeW(s;*?ezqFS(NOG1Wz~@|L>}nq zwj~lqZmWGcaIXy}$E{JS$|PwZFJVPvL5&3PD=>6mx^DX@v&ZvY+Z7B*MT|zJ;-l!V zxuP@5@G=m)yJs2|-UT?$mR8X76us3pM&NbLKFDZv?ixU;_fq9?(EA=1d780{(JSd$ zLn*f3tsdRY|TLDh!B@q`P{*|VC1MzYZQVy{XH&mETB!t(qP=^rb~(?GVV=~2RM zAUpeX=!)qR%t-v&D)`saw^P|D*g#i5{))ThQ&WBE)`_1I9Vf~=QHoD>l|Nc0eu9eQ zJZQ@lz&Z*k#r?!A*rFG^yqJWodAxTw^|?XLL)8-p9*S55jv4koX_FDxH#c#%<&DH$0oSuX^iu4;uSa}PnDrzh%|~Pm>&)G zGk>HuYG{SM#VE3DMjJy^7g0|NC>!Ux5zQa0b(v|Cgr`trAbi`Xf*-wH&el9Uu%Hg-vg?6H+*cZpTA*LYlg~%PY@}u`)O0Wk;QW-M zH|urVl0NgQSOa98e`v0hxja>^md&09w2`uQsQ9{yvY>-D^D8mVSD{Kj#wOxUoNPQd)eHw&(Kw*# zQn<=Bq1x}z)Q~LN&66R@dNhA)WJWZ+V}Sd$(VjP?Xk(=g&CyUpexG^>yXHo?LL)Jb zXCE?H>hTJGk>&dq?AX*mE3yE;nP_uf;jgd{AV{pk#7v86AdI%QOjRdsiF zXE=#r1P1B}qo=VK=}grN1D0tM{`& zJ|uK5MC6_hI0F)n;yN|fPkB4N-VvPi%>A)x>mq-ejx%J4uQG-UCG=RGm5Vg?&jC`1 zPv4=p)>2vySm^)*N_*{sBwS%(fZcCDB;w@1a;4&hRk@~t2U!ZUbjH#)QgjYA>v>tJcU3+0*tnWad{P$kBhbpA@W)lq{rN z^=ayrNiv>>Z{xbK-gQ#G1gxcL3F%i#-6q;ytx_ci@yM@rUQH}I-ERUNVj->l=KP|_ z65>JjtP{n8XJW$HX%|l06u^Dpa=G?a?U{6WqmyLY=^h8MOg`!>Gxk|r!@JxY&XV zulc>U`tymwDy8-GTZj6sy=Sbq*1n5dAb&F?Pv71hey3F?O$i0bQg0V-LDl=IT>X4L z>o#vDI}A*#_a4ASJ{U)|-^0waK58@KQda^ZytDg)?!ssyOHM17b*y72vWqLGl!JxB z)2}IfjXeskrQtz*MD_URJkE4HH;(37ylCTx!b>snVeF5#ZiN!2;6RoQ<|j9Sn(5Eb>esbE{~Hm z&hbo{n!weRvVF*Mjp5y^q z`kr!A9Qs0|S8uM;GXn(tWQ&m81@>05eVdYAL*mQBGPaz^~Y9@4zD9=E_?xU?yC>}$88r7gqZE5UEPj3muZ3Rl#IurR&;4@Yz4s8^Kt*TH8 z&wnU10d5R|%JX?HHP|&GL?82Io$nmrj{ea6T)^75T_PjSrYLTfhO|)65A>RZsdI`}Q zQ91mjI)gskU$s&KLs5I@B>KqB37cGsOCON+mN~$!iuJ+F)a(2}h*59?9}4I)hiVv# z-`!@MT%M9xGTBb z0la_FLjTw!u{^rktUTsB5&Dq@g`K^mweflMfrgp@f(CD?^uVf9CTr$fWKXgVk{uI& z6KtusK;@hhU5JiHx`rdaWdiGzGh>0q4&Y^0hp$8MPgzP<5eRHCXs=}FT&yaD1y#O^ zK3B^H2ikr_P{9Jb&F)~=H=1v4p-D-|KPOf0Fs;Ry(4LxOgln@Xpn4``*tmkfmtw!} z8k!p9TufHOpI;xeu;Ijsd~3b9W>x|3cBJ}~rXKYY55S&(S49RY0Q9NTcx{<_t(YDy zm^wVTBjxqiN%#^08`(1;m0j_@wV-0*uZI$44}fE~8>qVNPkzMkThA~{8G|irXeKQs zHiy3mDRdD8^1jb1>mSE06a8C0@JFMg*x++>#&F+Dinqr1e6ROeKv(;tq$ET(g@7^e zhi21doHgdhy%1^%89ve=9&5haSKao<8-%Bb|M7ZOC;pxEX}jvqSzPii4l8E|;Q@+& z#@S9_BsFP^Td8?xF&p;8S=@hDwrmqjU0lN_#Gi*sZ*89K=Yyeb% z?-E*5D0%>k3@jYXByy5e?;l0rAxm|;d-}df1uy^!RDWD|KCaemeJoIFrW<~~Ri7Nm z!u9A8zXjco2lK$Q%o8yYiOFaRne8?kNEuJ?zd2_37nInsE8d5c$_Kbe>SN}Ep}VQH zfs!=;4GIup{vCF&!l_7?4Q8uQ6|%ueSzfkJyo-=soL%2{@n&>P<~}Iw++8c&o{A%Al5!Gtm|370Y!mg9xX(yZeUN(mq+c)!x0KQwk(>A1tA@=s&B-cTi_gUjT zqAKtj7zY~4=+$Vj4TwC;hBBEno+a~i5B2U$&HY9j+I~-#Hw!S;M!Jp0Ff}Vda+WGk zaK9RxW{={hSpe*zqX}4>fZ~=HYSD7k+pyX*X-a#IXT>zvD-P)aickGv;v`sq3mB5b zMQWu;(FSeB?DB=TZ@H-BI4SW-P1T3# zYngeo^=WFIwA zj7$1ww@PHsus$(V`k#`zw=cRXdgYuHjv9w=slE}q9;NboBj47^dfxKD{@^k*I>6)X z!X~j8xS_u>Cp@$pmw#WkF|IAoM^7#c%I?H+fXGi`pj_`0J5b|v{{&e^IBw3*P;D39 zYGybD5_w}vWny9GMZ5T90@XmkHe%mS2tffHM%rNqzAn%DV!L`$Cx!K-Gep zFMFNs+)Z}BqB=>y5*k22IN>VrKc(ai)Ixn?J=zEL5@GC;USF8smWT|F1PV_T*pD7Ah z0bz8ogm2zi2rUEq$iP+KD!ZT&OiThLKH~ov)mSnp=qZ=E-aMgjA|HMJv#!!2ASe7n zR2Q#_y?1Q?1@sYxEmwm!D?*Tt`36gY$AbzR44&H=4x$(g_;bDo7Nsn>xM;P3wC8JEc5I&}17 zd-edsrG0i*U;9}#-B9Zwb(vcHvvp1INQh{O>tR*bSYocwlJqE6R~79o!?yYY|JP`( zC2wBLD&!DWYZ$?Z4kET6To^$B3l2F|9@6&kK_=}eD1dtB`4$7pikzFI?&BtwJyQxS z$|Gy6JB;WhaW}S z#9Uj^N{`!!ePt?x$LsFVqf2^6d;FbdaSmsBe|A54NuMGp^yQPIFf~Gebh6Aouq7sy zI!T0tC}-AYVg-)UU<`q7aB#3)&!3_Tj~06eY}lK--xdx!I=eNXd`^xx`BSx@$X$_9 zc1h~Y`*aN05u<%f#Y~{uHA}*#7C3-TnQ1kv*ji#%;@a|~U#*S3a%H4WMVu9@w;k+( z_MvBImW*6!qw2kb4?e~q7Pnt*UyWa1mf=2dZK8LGXM;=F0}V~JULNI(AERw-sZ3fl z=W+~p-2*yAVTw<{h_ykf7FQaYALd5y*EhfmsW*DzQ@Fj_u%(zz#G6VS@yN|Yu0c~>Pvloeqo`IP+(W(7~wh4V8{jI^AR0bh|055bN6llycKdc+XC1BOp-s{y2&_4s4na~ z#PW{>p}PPn!IB2z{ez%gI^z?@+5#nuS>TYa-hxch@soW4Y zhzwYy7kA?h41d>bQcHH!+l6FCMECH8im|$r63Os^%ty&=Jhm+-vx0b``mhJCeup&0 z()!@hYBRHF?=IF?yiGlJ0GM-!uTds921MpoWLNd{;kOLH&jWeO>ne~Z(0|G22eV_8 zxwGc^8xW}4p5#5eCcVaIj;@OgIgF$})6HW%R7R|>+Wx6%^10;wnP=%d8h`bUiGHnF zh~|HCz^x&>a*lbpCu9~qVsQ-h{BMc>>=G-+%g2Y`?FJwuY6TkNa^bQx90@LHOK&Gz zO+&tSwzWGtoQ9?Dx1t)TC>Adh4zTlvp~bm>;y6s~2KFH7b3WIp;q~uOYo;LB@!D4} zVH^lc?2bQW1Tl(fK7`7T(`U8hFy+{`KBa^D_!8U-?b@y6i8K8 zcAcs+RbOd-w-=oL(cYgrR9iD_FoaLHFfKVW#fMX^wmLVyJx&PrUf@IfoX4 zs|D5Y6u80HRo?0MBk!D@2l@s}$X2d+P5pbox6jXy;)S1?I@6o(qb3pJ1?!)2)lMk#=M}M2al~N0*$GJ!)M#GXuuPBP(Eg}rF2+&DJ z2?HPj=Ettm)2^s?84j}7O~k*lAZkr!oc?uK5#So2zz>!kXWe-#Ol-#|@~?X5^P_e+t*o%PyX z44B&J4@qp;VEtq?3yQ?fVaUdkt>Ll$y^$MfXv;MTBAR;=Z1y4*`Xlk+yvduz?Ny8y zsXQ$Jc)9xLQ_#xBM4I7w9&y&|7W!R!Gi*M?X5GF4e{S(`n3V653K;?GRMxo0jn@{P z0Mzc3E}s{4x=M*^)ZPNL3WP+YpA6Ws^KuOJSmhfX2Flum@cc2Va0xJueuTD7eXgQb zy?HO?87h|R9hk+12$ugOgG!&x!JYf?hD^Vzdnrd}*>N=7&=NgFN zK#>nIG{zhMRWQA1r&a!dlH~(RUSdu3n;nW1J=Zvmf6udLE#qk3a2JzXPiJy;VNqdmKNt8V7ut0Fe21LQczi8Nvs#bWqxkJHjs8pmGI zGdDHU`A04s%gxkYF=OH$06i;}<1!5&w@*+O*KOTt1h5Y;&2Q~(MWj#_Mm+)o-CU^Y z^e#_In>J?0OXsmKlIUHIe~8+jQMlEjcgn)2yJ9Fn6_v8Vx*<`29A`kRs@jtt11y%4 zQ&93q^gJW5+2q$Gn)R}Ev@(WFW1`bpU)Gr@x9n>|SE=1U;k6^>t+rEKoK_-2dBV}) zF4P9gAmX(j@>@+&viEELVi)A$D%rbiIB;90{I%7#%&cV@j-5uoUWJl|LBQmE+A}aV zu&L5BJq0lKydSx25v}Pnyzv}s*Bo)R7{3EQ%?Mx=au=Xl8a5qT-Aq%EGjk=;=@D0( zm(4o1ED%i5gi#62{W8qAz9r|(dgJ^9A2P-44+3NWiKT;)L7aNoelKHBEiyTt15JxmuUA<=OiQQ=LP;|8dj#^!6iCAr1pMg5XZ zfS>#(g%$66vxTuUG`GZ@G8&sJd?m74T3pPEjxxU3Bkc*oA-$6vM&V|TYmlNJ{v7bd zc7P8y{{|H@!1%?X(}Iy<`c03)X5h|4OS%fxg4%wMq)jSY64}-1ejhzKIyg zYHGV1(1Ao0$cnzIDT#;PoCH<#R5?SW3UIx5e?exoruf7ia&K-_G_SL=Wb5}zSG|t_ zunRQhmyp%;oGqWeC6Jvd0cd(EbhFB7JwKYZu<4+k+n6}1@0x!oc6j7pj4QzdyJ`n$ zqn5Nk{D^U_A{HyW>K&8A{H4B4zinP&%z@h^PA?$qH9VMS7#Nndhm8cXsRsnVtPO;u zpk=HAM^djio63Syr)?@j6_lFM0#9V{S1XX zA$h6e?HD7FRp_p2S7v{|Ec`+4De+@j!vUz@{OKCckX+--L!y{q560!9WvosY;d=NmPd9o@42;HMss#<8uF^6Rh$bQl0x)&#ks5^cOO9OIIy-Pt z`xfn-T5n^#z5FISpzY642vI#L3nyV+#zStU9_j(BNa}E5CpjgdgBnl&(f#q}-4+Dd z)OBX=5zkBIsSEPq;!Z&VeOtDAp+Z+Zep)ecY`wf|*pCs8(W_r&uRn;BNInpQA@i-- zPr7M5<5Mgg&jg)|x&`KSRV65%PiFjbP*ALc z`C>B$FUY02M<+y5#@HFioM%(P80pbsV*hv2z83s|ByT-4ucgzdT3xA}%UCl=mv?w~ z=0EmJ(=gNKB+DVLr-p8AYIxL+9U3$7q`C?p=XQ zX^s+U7SNM;TWAx9>!qBXb29>6w;kPt9lobEGS&gu`rCLOaZuoX?rTg5N9g;S zoFdcXQ0KjWxN&P_Cy%wt(@JFB3)f$X>hOwB4C1|l7%|izu>|G{HY`)C?e~wuH9rkR z-Wg7dYnKUM5^_{|Q!3gQ?cz~R+Q96>qG9>F?OuYrzE6Hpyq;a<~TYnv{WqDv*>}|xCYq=8w9ur99g0Y zbA_qz%{I@Z0?H&T0lbM!BG5SDEm;sxIuro)-{`WCBp(5Od(`1zk>A2EY)Ml4=)u9G z@87m~o8@)iv@*Hp)d4T!(m-N;m)tTG5;v|CfR&itXXD4VT%&648b#Su2uiQ40i?UM zS?Q_oyjLSjB7Av?=K>&WM3$!$UCKV$`NS)be)Ee{pUc%$;b`A)A6C4x^>rV&q|v}| zj_o*L1UT&T)Xdzg=K`m*QbW@H9;$rYmBwYq*FUeMQC(|q9WN}(*%(wT$8$9GQwveO zd*Qq`6^@=2sUpqAM%F7>0XZm`fr$-KBs!|h&wSVb0dbZgLSWUx7Coq7R~~OgNQn(r zcaH30MP`h~>#>3o_(7J#A}*6~vHrzt`B0k>{Cq)|~|M|!8ufFmo9yWyRipqsK=3?vS0%J-b7QR(073j3J5VBc9FU;4Pq zH3K%U#<$_$IZsBzhcy8+3dMCau*{M{es^=`s$-#XWr~j*#JXQcS_o*?OC5`)Apns| zQZ_AUig~p@R4+VOL2cama`1mLi7ck^OYu10(N!iKHpc(8k(mCPlLOgrNnhGZRKoLSZGS2| zBHn{v%n{F|8SV)$hhdFqQL}8RpJ2=-?CTR>dan3w{#4=74P!&s_`6F-wmU7ls<~C>DnHq-obo2Y0aJ zlF`By1kX(7k&$UEvqwBU?+`R`*}C_!_VYSAgU;}WaQ~j-?htir^>ivE@Zm=xA;-mztwk&8fA^Pb2 zt|(NgWGFXRc$=A4V)R9ZOotDVi%OZwxUAs=`Z~z*K0sGD)bdwTR{iRt#+`yFnFk9@ zj4J}4+k|OO=f0daB^Zwse_3(M(Co0uBY8yAa({B+U{`Vy7GS1b>*`-UOtj67T>B)L zDXc2P(t2)yr7# z+TPd5OwYN7tG@^5O*QR3v0~{qMFZg`851U!r}RjuTxylmNj>dH$I9lfU5&Zu8$;&R z;ijwg4IXZ8q1w%F&f@K5FaGUC^8jH;+2fKyP%1@$9|Jp#P0>k6{fe1A={cj1g>)(u zpnQz|ywh8llQRgxN6^9Bo3j0WZL+oo$C@>L>Q86oANF$NBdJ-kcE9Simb+&TvmfZVgc*BQR4cgj%@}dLk$6BQDeOxhn*Y`)z z<1G-)yOA$5Gus`9{DD0|-}sCol6hFWa%%u~Kk3mnl(a2)%VM?IgRmi4u={6yO&yPk z|Im^K=i!&e@Vk*5xdOF}G}WOz7%VZ(I?Dwf3J`Rx!luH9sr?kVDS^N}*xeTRZW6_{ z#uZ*yZVYZqD_;5p1x@(o5k;qjo*pHyID#Njo~Sw@8O`nhQQXi~6+&-XDxte4jsf9L z=YC`DI>bO;$A!ZXJIK*)k_T`GoyKKu!?^QKG^CXr-tCklYW=QbeE^x>EGkB z%N2Gft)Ll@>ZIHRtHjC!Xc6@K`^(Lu(@%~$52JoW8~G+Fq01XvRSva{7oTp3$U>0q zeep4WXCabpMARa5J*X6r%m8t_xpS2ZvRyOA4Kms5(yZWO7`=Y%T2-dEbA9hoT0#0C z|wS8X5S%y}gYOxtGy;*!3w%L#pB* zQx9x5;_$6?DqJlITBb;{G(=+&Gl)GT6I%XJMT+l2`6dTqvuXnt%1WEDfqnBO!`NtA zwp{M!eOEk+7KXB;u#F2xp0v9hkDSZlez^Xh+tNj`RR93k4SqExmc7jE{asaVeY#zb z`qQ{;c2+<_?x_JffI84;FXJv^Km{_MKc!=`(0HZx-=u?xz-f!lmTNmG zF8IGx$h2U73|MaP^A!MaFLN~CC9=SqOIPR(YwTChGIy+s4w(YdK_%jEaB)z)#}s0i zYFDLq*=X$I>*SD@hXK~+mOc(|<*iJ=qH%ZH;wa%6fPde+>G87f-b+OKi{c|o1v=9k zlj#N}Y6wvLlO(MGgDxIy`N|bqgS{%-R_3QUnGacZ9^4MTA|ImI!Rhn)=nJjH83Y-U ztj%7duVw}9$==AIpnzB=mgi2rSbTK{jmU9gSGCKzY@k9(98wXzX%*<&FKgCuz5@1W za(sOiuMivM8pbT8lt7?i>t()*rSL}p2t(^mB3C*@mH;f*9)76*fg2j=30<_+e;Hiy z0Dt2i+srRP!hSZDC3u96XK0|FH6IOOnCu`B5zAJVYxYe2AcmS#Vl zhw`P=r`Vw2zl6W@6(t77jyu?saF+E6qe!cQomXqehNDgMOmM`-a-nslUmlSpI=+o2NrcBXqC^vS@~ug5 zLv?kbxch0BTQ*ef(jRPD1%OCQEl44li(P`ULM8P`0MmOCIG&e`{4Q(EaO_XIPna^8 zFjNd}Z%2(F3Rt&iL4_F4{K`SdkUzf6?VJb7hm>ry3f)$O`g7Z)^YQFMkPhu!peU2z z?;p3k@0g~!FV@xXCrDE2rnXfN+7yZ^wUvmaXok~7lw5z&WRncS3}x>r`aJr0Tvi?W z{Zr6PT$rWFbtMrnRxunaIalf6<&iOJX3OQ4}8R)3?}DJp)l7g zru|X6OKje_?wifL(^;=-W-S(6soR!KEJ^H$KW3`Ebs`9zz;`&wjcZC0J3_-)qDyjz z6JIXm7v;}-N7z4POl_XQ;9@e(+NpU1PvLd=(OU2Se2S5=58F(wB0lHsisq$`FY%7X z_E_88knFGP7_KJjSh5|a%;B;>IR1Yg63EYEow{@KWsQBv{DK8xQUO!p53i~YX=ll# znudmZ@h^B9s*^Av@O|IqhtFt3HSV1d2Zw)s)Gh`=$Y960I&x7cLa z0Q9q2QyXHg>*RtU2LDw{qr(?rv021EE4$J&u7 zUv<>eeWgNNrKfFZ=<%!$H5*+rKZ=?K-p2~nUBeN3(h50pZ+j*pf?AtV^tKYiVyKMY zVn2fjf*~@An(Or1PGn^B+L+iU@{s_)Ph8~I|a0q>k{Mgl(6JpAJG=@Wa4sct2e zWdLj!QC@{OO7CjPf0*F(IUp23yl9Rpxc|q+6XK?ZMPTm(JOf}XByc}MNrKZaKq2{Y zNvi)O;Zb8?xcR$SlgSqG{8&Jnr>p%$?E4hxI68)fL;TQ>OA#mWV%#Rg0ydz^Vs`c- zbPqTT@}y}%qzk#I9m6ODQyaV>QUAQ2c`LP`6FNUtUG?3JkhbE=RI@7s#Gt4VIco`D zt7c<+I6BsnR_F3|BDxuwv?yQz-7r^+|-BKMV^(<;;}uq^hQw{bRJHTbD34DgpFPXIE=+qdfUqCk}#%q-$Z(rOzfXsPH% z8jN_b(~T@xl*1zrpD3M_a`)s3Y#ZxHT>pN@9_89OHG6)+6p>F+<6X4@ z2hG03zlhU)e-R5kJqz)JDA}4}c8ikzhKp@3f!bz;f**Abeh!48L70^T^c@4VLp+H_tO3_eXY)>*t>v*TZkho+a-V$V6YV>(p3WRM0K? zU)QhQ``=lN2KLTT>l!mpUD?=52mpW|&uX)$kM?KF%~4jomNj%g2mv(#fO|dw!u;4c zx39Z-Ly(v2!BGg1Xn*gs-%B9V)zcSxub*D}I^qv9|89W1g0gZsT2s_7UjR8tU=S#P z|2!;qW>WwC_}_&D00+R%!Pdyx(23U7+{ujA+StfkpWfVB-_+QVo|%C`)$QLRMz5>{ z2>>i8kgtI+m#^XM1`PlR@&X6|0D|%_&VQo+=M4dX@-I5N+eNscJODt9A^-s0|1-L~ zu9dB+EuEc>>3{Qp|H}g^`hW5qe<>?z?qY*M2-=mJ*;C%2L`X{J^HIPN^4%R^ZQ*KU z9cVxW9oY2aYIL=A3i_oSu)cry-Wr@3*qG9p7#n9h%QVdH)bh-B&hC&)2ujBTq++3i zf(G-ci|asxf+nB#(zB91M9A`Wfj{`!e9JuJLP=Ny?F3?iJ!H)bh)be^4yVF`lCtA~ z9>cj)z5##^3j%;1kD-7H69Iz;FOZfhD?+^km$XL|a7{e==HB8CkB?ES-Aq(KscD+6 zttG5w5#2DLpj49>zq@kmNQT9@x5`raf3Eh5(26{;X_zAzrmDnyOC4|)CUVhQOLp)o zhZX#RW6|9j{-V~q-Ajs;AvqL*u_(VgZ>~1F=@4q+%oa$=1QsIKCendd|H=E6j1&k@ zi=rOnx^9a`Vjg(g@hAe`==OQbq>B{EWoY^y)x7wn4uzBla0>PYUdFp0Vwh|Ha+8+f za_rtr7fnna<)BQC-SKn<{a%u$@LS-U>hZ0LM*zL^mMnj|)&izIUXX_fQV&?L2gA*L z)&C%ma~L$!M41 zW$K!m>*4R+-(leAwlQ>#l>R}#nud2H>ml53!$}Cpi?>MwUBh2B$;WWgJ_ zPhXjo6Ks!ty*?}iPJ1Pa;YD2JagfkYZouwN5LAB5IqyPON@Q#M(!R)wT5$&B+j=*G z?M{EQ$P++bpjEwCBl{{$VCxOyZWQkk8yX|3C_wasA_F@b#DH|UrvBq*FPzU$XuXhC zXx0FGN(M<4yE)Nf(Sp{DV!g_=U!Fh3Q4_)5CQ7z-TjqDrR!(ne}T}8lY<9Y0M0P|?bNb=eK*&9Aj;}sVL-bt z7o0k1x8Oj&CeZ>B{I@dNpo#p7HmfWwCNVu3!w*i+yR=Gun-wAV!0!<$lu|*GK=>x; za1|cOk;^5pt}`|B;YH(eWFddih$nPTBp9$XSsEmu>=XpOBm2#-i-J%u7|L2}KmWF^9LOl9cB2Bf9REJ~Eo^yU*xzJo+fk%n+!0tasir_x?nCW6mqCInQlrm8bnj!!ixe}ls$k0%h_NywV$ zShg&bYaiAK=Qw?jtNoxE&)e(W&!opF2%@RUA?;FmyDlU$x) z&!A0IG(nW&yfcugrZSPwofDxB=SZLq#*w=r{F7m|q|>E%wWuDCO0g}D$;=ICM$qiu z;q$Uo&edCV6UFAw5ft_CuTYO5tY+L-4;i(yjx4LA)G6f#(hbw=<9Uh@B-)iwc365- z(+);bj9)sKC1_;xTZD_vPIKhPa8zGQ8~C8 zISNu+T9%n#?DmH10FsELFG?xEe2;i0p433Yj2Xqp!As*Quh#R?&pv8z(zDkONJ2KLA4xg z0LZ-v_fveOed%i(Q`#mAmw`_;u%gI_-8;b4qEZpYgFhiIbcrA!|NH z*wV0;R$A}RScwC7F(Jn(DaE6tmp1(7bqKY+-5i<4VugA;s!ev{sD*J-Um16G@Vp5* zB=`0NuzQwg31c>FUu@77rA=e0b=+^>4QMOhCXx&o3}j~~AHm*b*IDDAs>2aio;+)MT5Nvb#J5124>0(I2 zLwenu2eSV2W_OjTua^b>vc1_Qq!+78=o@7}-rVm)v@^1$Zvi#he+LG`KfmhAe#|Xs z`hJEW^KX!_3V;AAP^vfiY`$@BVjSBv1iN+HdtnWf64A$c3;ZxKdCtfot!dV{-aQi3G2L%AR>mrM?sgG$n1yztj{V28Uf4|C22CGW z&sOQ6)@=uy<`-34BrVd~-N*rn;kBbSoZ`F6w2OX{T4V=*JHrG}wwm)S!gsdsU!5Yz zHe8jep@07hch!3L_^MrrtD$X#idLe`^=;Z^?xENm^@V z&9q7wbC0ceY(Lr{8ws*hsm%^RmhDX(_x|Y7P-SnE#GM!387bi6;$356h&H*>!=X*=x4mxJ6PCgsAr%V_hy5~xEMj8e4s@1nD z>hz#YgaK;C3bD?##x=&V*w?I5>3TmdcYWDToh=s%_?S-9!`D@h;wX}JSBxfZPB!It zQxCWObFI(YA`}Pl=9t8ZZ_>AN5c`o46ebQI!8CKVdi+WJ2e+P#(7Yf^AAz5@=C3TY zs3SNL6WQf;5w=MQozG@*BMZCr=snD z7M|CL0{8_o{xjQ$GcWpDgl!g=Pu2Pqu6~vsPg${F924WzRU=p`F+VTliHRXx^eO&* zwdb)2LUJ^j@EWX_b!_iAsK#6sXcy3V8t`Z5+S3I;{{3=z@LO}-z9Xx_eWIa?gb@sg zLIUf9)8^OnBK~iAtPpfJFGuj-+ddq9AN=vF4-Qx4dCR%^R_hj7meCGr2qpiuOuQbHZnPy?Pi>^i76^m}MXBrNm# zyNp`g#|%5C7|#}N1ma4TiFnC1@Pb7#hkU=tPKBq*#f*V3^; zUowDn#Rbe24#dsRmv!J`?;4v8=g(wyYO4T zDz>98_wZ)Ub3CpxM{Xm!WsDdH9U#Z5sr6kh3ZLa22hQ;xc5RY8FflSo*wx6~oavwl z^@4YPuZ&cAZ>#&;(TBab-85|2OYHdqyJPs!Es7z)2}=uq4eZ4Guz$w0IGZcyw4eHt zqH1|^5B^D@^k?NUvoI%q@|1>+O4aIP-K0*D{ZYP3m`GY^N7J~_tHd2SmjLeVQ$}m8 zBN%zvJZuC1d=pA^DoV}|p7;z<(_1q35#!pH%oeu~%fYp>H=|Oa=1g10q4a(6DEyrq z>!102blE!YVKFMAwSELrcEFCh3Vs2c|ExaynM?=xg*nkYDcn^X_m3BxkKZfa&xObZ z>xPE2Uy|~!R^RFKMQUwnlgR6|?l)z60m2vG`8oxo^q%GVatWdp9&QvkK6|{R*WPELEiapOp^e&_> zFZ;k-Q?)IZ8l$ol>fGwdM&IbA8$A3v#(Ox2d@fQ`f}tyaS3)bD)<{!ktXGO+#+A>E z-mnOwtWkzOv*PSbB)|PO;OOn{Vi~{; zk%9pFi<*AHUjKs4Ks6U@CPjw1l0O1T)wl}lfZBE=M>RXvqL>fM6C$@aPd_6Hep2xe zq;}hkm=-7oA%i6BSJM8&rJ5n{Z`iX#j zO#}P0E&0p!ZGTzE9Mi_*LPG|GMwD8KPBUfsc<0cii`psSY3TIgc-g5x3Az`9TK|w& zWW6Efob!9i$k}&2W0jDOx{QB@`BG>(gZhb`Q`>GxUq0`LYcX+eYnAhhuvMsXQTk!j z-)`B*$WJ0ZKn(1lmNJzEZ&$FMa7Cl84ORN?_6M`dZhY-M9y1IBR>FLhFvUU~m(c0k z9Z#`N^o@9PG!V_hPXbzh)%nMUR7N^D7)yA$`~F=k@jA6oanXMwH*xxS^QXw^3tp5D z#=6aA#CfQPw>d+9)-bPXBVNKJ%LRusFKdI@0ieM;4bFzBtUj4lrUa|l!5R-whM;w^$e zln&(W&>wK;VHa%vlHs-nCp36{-@cqZ)5_w)ZZ74h+n@ z3EZ7aKNrTi8X8A{UsS|iTuQOaOg)~nbZ6#5u0dX|ND%#z1Fe;@P=;-!-iA*jh;z^$ z@k}q_SlcwijvHYbQNIRSGDIo0=chhozmh?amMjMo)JHF8i)U{~7u4Z(V<3qGv2hKd zVl?*)S33(xle5EaEZ*3tR1<}0RLb}1IPXiHVOL2WX#7%j3El3ueJk=CGO&@;=e;9y zU=EkpZ$Y6u9t=~SzKX5!@22)z9>Lo1pI)2XqEZaVyACmr2Q}WfKqBTvgPn z#0|f^4v_e)9vSF_EQ8}QAeqajckrD-s}GusiwC--^qSOZBm?#;oRs&1tKiih1*Nmdyff@C$B)xJ@G2k{&*&}oCfzCjAo2cCYsU`-dvQrVcen_TPmQ+L(T|Va4JPm>Mdh@% z7wLPX%&c4+GA_Bv=`jB-amG{9obz=j#bJn%68JRIiEVVWmxOG|)mn0Y6E06fv+ZB- zxJ{q!Ol@5AEe^%ENN~iyj~PNoezHT|7n>IDQJPUg=jtiA``2Gf0a&%kQ{e%rNZlXc zga&rE<&zjv-bLwWsW4W(^0(UYpC7Cf|6M_-BEqJtLFI>g*5`{cyt}4isv-{elpy;1jOPn$Glh+Na(W7WuzE4)Xa65FR!?)FD$r-vrG>@R zcA+#Buw6vX@leiTqz`Pzx|{cC_xrUG9Zt-$Wd{uxblZWSk8gBQez?}x{461iREOFtaIuPo-?bNRi#Xr4?oCbv(Fh5!2PkUZLjDz3ORI&kA?u`|Q{L5jg zh`HHXuBAFbo)#gFPo<7{UV;!L;^hAcy>thxkk=Sek1S2QEu;)(Z5!2yyF&RwhTsVF%opK)5=_1s`s`LJ?*fgZkY+) z7kR(HQFBS!ji!wbk2e9XIVR_)T9UL7eWk;q5JQnHHeat{?4ONh#V(dP&^sx*OwC7%=VozR+ZRqgHb&IH1*vRkfjN zYZj3$z~uL4ntZ&DX5+z{)zoCBx7nk@%Nzcn>?$)jfH|;5^3}1YM zC~k2frIZ~VNmx3%L+o$|W~FxD<=2L}x@22=e3i(S(+#e~@$F9MMPZXa%U>uf*h#fT z#b2g>aEetaD_CQ~&v+ta3MS@hc#n(#kreaL?2p&tFjG1k>7be`pKjyDjhA|f0;^u= zmuFenC&cXZL@saOGFVNOjT5?|w{I7>EH@H(+ruo4u{~YJ&t9lyh(I+DsM*aeAg3nU z#WMACX_xEQ^A$mwn)c}Sk~+N=?ynY|G3s#`ZDqa=CsAg_L4UztSNgW^BMr)dG-&3B znk~(IeTKBEqI5G)-4Coh9&&tF7IYY{G?e2m>HGCHp8`(lR^)Bwn=jz3PNetK)j`eR zXBji~1?rfQ4YuE(yPwe?0PF(%z0BuW-OpgVdn-#GC}Sf@o4LgzDYHx3s)U-12y|{Q z?9Pkk@(lB`cEET$Za=>)&+UzddBaqU#6{)X(W>Z*WzLxhE6MVoT(4XxV?<;cHZ_nH z-D}q(KS*wmt?Sllt#3>Xa|4=v4esiJIzkul&>I^155*~^S1iJSiE zu;qP*PwtIfpT?!h_zL`>YZpQLN*-!+W#cVVWyPxefzq#@qFWZDBl#Yum6XQm4zXFuM9V7uRnC_?)K?Iq z!+*vH%P~l&n8u*sMK9D6`q`)*M|C>I8uBThyk>>agK>aj+?Qi@MCQrkI!X?u-Lm3Q z9oI3adh*Jy2vN`^QW=}7n!Zz6VIBYx{JByqUAmBI^LHvSH7o9;PzK!pSAgUAUL{l(8+Jo{6TGj|opuR+^0XagSZAPE4Z1wUeBQ?*vK@*xF0hHf<;3Vv5~Spo zW3?UPIw;~gV0+h=j{Yw>cvtPMq|UvhK4l15m{OEqeiFk6;6qTiEZV8?_Fw!>yNB@d zT9Rza{jC9Q1V^Hlxs~RA2Ssn0aD_Mnh1iJQ3+oqt-$MSAwXr5gk8R*%@JB z*P~rFQPS|KqZuhsFg~uhesU>Xkgvg??BXgjdNo?GUEl; zQfU0(d$F4ELmP{IFIPGTOY%ZF3oG6H9s@Z}{lgDDjql}HRW{SOKIgi>aKiES(8@}^ zJ|(;rHF5ZJ?Dsx$J6aPY$Vre{`?0}Ni^|nvl|+vwon}$qOY~jsQg6x5$gE&qrFBng z#6NfL9qKBry>!~nD*sS>THipOj00z9qT3y_L0FxdRrY+xmx@zU*Cd?*OUCqk+I)?0edRNhZCdzx`Dfi_u?^+31`!%v4ONIQAg>i(t zOg{xd35YW-zOqmSlCp$ANJ3B7=6jlJf=G;O=+#l&xh?ja*;1EiC6DEW+UUdc!&9C5 z{i(mhI9$dz`fx$Xuw1Lu-+9tGB|+B%6kV;Ix>(pVq}srFMNQmh4bt8Y7ys{66(}pS zd2NyyUHWt}d61(bB$>lKm%hTNmx)KqC*|FEvoQ(+{dsy6^onF<8IJfYi)xA-RZ|fn_#5F%sIQFN5wGoMz@6;@pE4rH@y^^x5U9$dqqc_Ej!9kjFjr z+!Jw$-|hPj-D)a?aroBORlWuE>Q0@=pW0xkaWEf-b0wNMG?+~~oAhKP-g5I0!3}YntPTqPwMfgscc>}_a zgvOq@Wx8*&0%mw{8ek@GGun&Ps1xUG>6F;J0*$LxO`te$0%VD%wW|}B8{0jt+rZvuYhOM~vR>8jPRR$* zo3Hy|nNI*?$#Yx6xm7svDjEAyH+{a!|6w}UcsmzI7E_sMN})@0bPaofOt2u3;LpaX zDiILTb;pH$Pw@uE@gMZJBj9DK^bh0_i$=_2=-cSW?(7BW=;VH(9^hiX2t4rx{M4W7 zUd%%2m?qChvd%KqC@I~b$VNoy#M~gVI*=Lv?18br6BLdH@Wk|{5eu-FOb_z1{y7e- zDAzhS*RI#+14VLZ<`@85+B51B(c4tDe4a*w&7=d9Jz*zu)Wlz?cFE>sdMjSz*F~FE zrPls~<`WL4LGx?3My+ZdiarLjX@rY|P!k}QX_wct2A6f)|Pri(dIHCc1!Oaa!`TFFw; zg>ly4Tzj$;QjrZ1 z+Z^}&V0Q9bVI8nklM)Fr`k1Lg1~-~jcVVKOFkCbby`YNsgML?Ueif?U_-Hp?D)1?@ zikD{@{o1$37ZaHT6t-x;e{D+BEd9k@&%f>*U9F=>m6~5LO^8Gkjc6wRwQ+l0oIjSL zpxed3(TLmrSzd9VvNh|^T8PQSjl0L_>btKLOYLDXl}CSW&NRLl5*lag>}}m&5B+8* z`rwc-Qs@ksQIX3>=kEBTN2xufK`ypFdl7CZRW&oJ#+~HTMNS;iNaS)9@vwk6kmdL7qBF-ar(g_F-;xloK1vQYn8 za+glZmS9*R7#v44+M7;8)zvQj36k-0-#aMVpoZ||k%1 z-D3O^w)1<>aC-bBt`h<7TAL`6jD)zgc8wK^yQorSo;j+OUChr5$(ZEUeAVSUwZ9fO zA-0GL-;m?q+w$)<=g#5altFQFX{cJDULZ_)*(~=9LXwE->KVwx`7;*pOJy~C+pnwX zpdM!;q_44dJ1#a46etK# zo(JaX|6Zhv05E+9F2`aM^oA-3M}**I#3TNzTnF2pSk)Er!!7F-@%rmOYl@(u9x1Eu zj`?Vz74W)5m$D8To;#c>^FGbVZcmN@7B!d>eU-8p4E+YCQ^0}=M?6W=g0{WJc3Bkcaw2mM3idyX+lo>OV;cWtD9PZtTT z{l4a(^8f5SxS|~G6N0l^QeY&hReYJn4^_N&TuT{DN{t*wY<&>p9+~)6yn(f^iB3#y zpNlWLi0`4_KY-pA`5JROc-uTRn2z8%Id*fPJ4-tf#Omx75;U4+`qHJ|>Oy znH8LSq8}f&OA}778*XFCx{UpYv-x2`nA5!n~a&|-8ggkjo{}x zCt!6F@1Vo#{bu*s{r#J4`Un&)fw@Rk$`}Pp2b%rp^UzB&WWE5R@a!!$U}aiaXbF~% z#`?afYf}+RN9W+g=dWRrB34h?wyUZBk>4;+L8|8Q>ROq>qfZ3~h)2}qCetdqQ#cEK z%{fNX{l*kyf7(~Nd~~>4PjQpd-ePc@#BW9;5))_tUhwRjtx!5gm|H`aNy4J$@^}55 z=b9urVkP}+Y9HkRQvbNf_nR2Unq-sQjgE1^F~)L^#!}u`PHvEqT#>GGA(oafr-{*XKh!*mdiKK75rKJSxBba6unQr{woXmdj%5Hf_z zFQFu7?m=uwh?FM{`bW|!1B4G}U#i$1r5W(wxT{`g9_N#p7#|GXwhW|rvde+}`ZFpF zd>VGItj6z&22Xa#yD>J3yYo_)jN9sSky)Vm)>Y%JRK%A*z6xv60AoX^Kacgf1>|Lh zGjCQh)z$}BSGARA*jcxSM>h=uZ>`AwOHR<=qo}Mn za>^C3p52Bw(s%KHN2y#SwYFmFS2?=G@@i%Xu@mgf-Wd(NtCQfmz3KTdAw%@Q zcRt>cYkpXG|H`S-nh#4TQL&jSmNhL@kAlS55GXz!Ri_c94s8o-6HiwRAYX}8qlgjuDY^|yNp7~|aQkz=b)hhH!jL&QP z#}7de;_cr)H@Yg`AK^fJ=$L?$`fmLKjS#_0R1nVQic`HEor$Psc>|t(4Ml`{U?AIn z84*1V*HN-hSwV&?e`b1u)uD_+F-Z&r%b$@u5h2h00N)Ve?pTIaV%855@o zx2~_Y&&~*L-5q=9;O^WLh0*>-`tC)ff5(BJ-P{B#HP(6}URR)AeaXi+@q3eFicsnS zaVO~}VSa&oa?*KlK8B~e%LK%DEKAlOjr^-bdZjjT!b;{7-cR4&S%!XLp?RJv-#))e zja8ZX7_s@7qugpvsWuWY>bB-DJ$s8lPm6BZd+)FWhFH58cie4I@pgM_;`#K58_y3^ zxaEf8OvK%fkGuv2S{_9Bw*^Hxc?yn)X)SEr_^IVlm#{nYZ`65Ife>&^!(^OMfg`s@ zDw)IP-$i3FyS7@9BQ1W5mAU6fC))Et*O-K}xP=_rqLOzPa=~O^)|;En@RMy1Cx_jY zwb37>^*?xf!AUF|m(z}cHB)ny8q(;2V<+gxzpus0_fr9`s^V2IceAvz*``+if3N}< zpkVz@$-Ot7s8-QHVvfcR*47~Fj!=SNox<{S{GE$(ACAW3Z@eAb=SMdc(zVBu_(A^S zKU>~#QIS(S#!s4>%PtY)z-wl<#!^M}D3X+Ef0}G(!PYXTZlrL2<4>Fz_c%fh+L^h9 zQ)^#T=_E8GL6#xMLLLBR{DP)j68<7I_7MG@$PPTWSAAMz&F}hSTYFswN#vC3FWZkw zhf7sNLq*3dt2&-yxN~y0HYz=5MhAcQGDQ$daj*?aF>6VI)P?fop5`6LcKmkJTogio z6EDk8xTJN;mo4<1x4$A<#QZ!2cOm?2Dbsl3H8UX=Z2{;BH{p%v9+EF)#pXA)WJR=G zh;A^P_T50(Z$nd6w{3+ALkms(2BaSdH-*kaJz|AJ_Lr8dZkaNttXfE#_OJw}R_Oc-Lg6_uSbbL%aA-n0n7gMFJPRl7AX$ zCYX@mw7MZOeqA3>ns>guFVO%HFRZ+KHJM?zgd~Q4Bq>|l>t+flu}n5A%JpMXQE@|l z%CS0h=*XUG{yFKxoAV0$46phrij0NdlGaP^Q{SKdsVCaZ+6%nkTm#!)eCA8Z??>Q2 zz42f_;T$xkgGKc%orITVsiWy#6^n~b)NW%O8;*8H8Epc`{p)6M^-T1EEe$iws(=zJ zjkpbk-+VKL^Km}={^{$I>%0bETXEVykI?0KaD-ucrjTV0cos+f*BleAtq^vk2q~f!^2@_5cT?0Fj>!~*$xEDz5`m#mj5h`{VaiRTM zj0n#&K7@KOQEeX?1;mywKGnHohh2R-fbSoB_uQRMl3lgE0N(z}R7>fAmJQgCa4ORQ zT`G#LHr?5G{J81X#HX!V=!~(Rq^o2ePo`a@*0GTyV~J@joc$p7PYic`IC32(8uze? zu=6B%PxQXy%GaZGK%MUzY!^Z9q<7(5qVjXp#rph@^{XGGXvdj+#xQQdW9HI4)sO zP%GW4-~GpIm14sNbDWlM#`@cRjNePk|Lz@9Af0)4N$#~8;FjLW+Qoo??c4Kc`^Ay` z7RGVgFY0qqTaN0yycnPTkJ+hCI`f%9QQ!7j*K|cw9{&BMJ*#T4Q9Q~gelUd8*r3*{ zyEgd=f=Fy=?ESWZULrIJD3mQ@dk5x0MPB(U0gBB)JL&P8;6ZX$zm*7jsG%Qt^X_VzcoI^r7t)9TI2`Xbj=NhX)6K>dt^4V}{lSu(;GW zBlQ9v@AWvn5$@TttrA23JseGyf0i{xGd>zOeScxzhVkJ4VfbQ%LE{cJXL{OrJCl?oHVgK8E@pgr%4A&Firk!79Z4 zeJ;52@z-q2QEok5sLL?#QuY)Uz}N_QJ8d7ZCN*o$r`d)1L~DIW*X+R*jO_rSf>rT= zmOHvW#{3XzB9XVa_`VN=_ z_Rm27Tc}4d{mVJ;_`5ybMgW+I?T6)-VO>kOhXv{l3&RVLg@OnpZ&%6HIe)kuB)}C!BFcdnN{Z z|2n%?R$>&Uh`qNyd$8{A^ycq+?~VQ692EvGXDNU+u_x9pRv1+#f^9-r-!dgaW^&KF z6aETfFzQz22Y z`SuOpkIW?>kNp#+mT{>|KC^fe5*c!2&?*Sss=U{?i5^z6w?)I@|KsK}8oxP_N}QLA z7}y)qLpoW;i3geVUmcR~ES6^QT9M7_uBE;5u?nbfc2`{Q%gwTAaT9zDa&Fx)^)TGVhx4@cLJMK_p z!IJG<5OV%@OwuGrDXUBO8hh*>woB#Px&_<=R#at1PZz|3Ke$gD3Gf``0@y_v4X*|uB*dKJ+23|AnLlY! zVYYbwK6O$S8ybo8UVmOYLp>V^d6+FnTFQ(6(tF?Gvko>pc=~1N+a&#)e`{Z^oe7Yn z)_ynj7WJI32ED|>rCntuNw|R#7s1EeX8tB@`UL<+7RM&y_~|j}{6GI7BXIZ-LhE6n zAWNV$i=T6f;*ndVZ29ujY+z5;kiI^DT)>DNL3?%hP0Xz@_<6I1@Oi@^uLUH~F(s7W z&(X8@edElD;O2HL*QI#UI)nj5w%<{z{e zbG%|zey<>aC;Q=ImMnA_40NnHz4&spE#?&~gYiUuzId#1c)-y9dLmQXQJ%wyp|3C+ zq+O-Ztw=QZaBEFdK{!Hu6R^?Mj~pBg1`i;&y{;mGJF;j|dZN?zZ#LOK&CyjuZKL=872ak9+PIx_$V#G5I5f7kxUyRkmT+LP{_1H26z zk>=xL@q6X20}EEFmEiGy9wZF%^5Zx~knIPrV+6*eGwgkL@yW5Z<&kV*%l4dfc#r4< z{x>V8H#LNqa@q<2s}KCwBcq;NN`4Yc2up@;OX||p%e2T#sPZXEm?WJ0QN@TvCKC0$ z8XEO`K-RZt;(EeU(XM-jC zG}*XqlB>Vk^D-VhgACWX%YQM$4{J_hG7n@Bsz;*WNGewww9=DDKYn# z6jBoAcG6BO3qs+cSn`aFuyWK9>CZ`KlQtwVs||)gtD!Zg{$&U>S(N- z!G_sXXRB0ye}`$lE*&iw+rM9i!yD2=%J-cdvQi^+E11hi9jufb^M8bV;v;myq<9Z0 z((PjL|1UfTHrVX=Fktzvp>JYpB7M_cAXFl3hK^ET3K`7MStP~DamKp^T5$&rhE z@$#}}s)Si-TYup;KEOEsUp8H3%})w#5&Qn8z6SFxF3^$6I;-II%lRM9dv9vLA_N!6Z(-e8ua zi(ePrUdNk5#2snD-#jJIJz)9hA*xCAbYjr;@VkiK4N>ESCsG9G!K0DHcs{evZVz&n z&qv^%CqQ4E*HI-<5pSn${;8RC4bW=wSma3yiz}j6nG*g^!_6D9(8G&^_kZdL5T)OTT9jZmx6Cdc+zKFWZox|6k|Kpuf(1|B`exK>Rnk4}T@f}n)j8#l<)L)N#eB`0y>7(IL6r!DV3qgvvdTsYP0{`-qyw-pv*+H|6K%RZrU^66$R=Nj-#pt6wX=Rl zv(IfGhsP_*PVURq*)n9x+bc)Q<*V#yrrhKby31SfA6e7nIR!TJVr1tk9XS0QE- zi4i$!V))#>QRNEp_a7eQexsjzg@66AU_H$cxTAQ`iz@Vnb6C-pKr=0Y&&?~+t? zu3bylOSgZl_2|sMI&wq1I%>!G&rV#Ni{XF=rgOIX7k_*lM-Jb&cIuJkJ9*jQvE-v(vIg}?huN<^STC4n+fFDK z8}GO~eiP+}>U^Yy1^if8?sn(JcX{CT9@Zo_y`#jx2h_6f3yX{Gy7P~jpjRVvLDd7^ zj#0G_@YPhr5j3-r`^i-3i>UG_NK%dP0@x;SUt!o3v-_arig1H$L1cUB3J7_W!W-?%Un+6%Fvl zz78q14#WB&7xN}g7i+6beR9_oy9|J?&!n#61D0mX;I>3PwuN!w?96YaL@N3=iqTFL zN&x*$<`qRD??z`jC;032EC;Z8@f1-0?YhTnW$t>Tb2WO6`#NJ9Z z%F{AqJc^eGwCi1y`Rh3L-1ZW+`Yj?4 zh+L-UhhzeJ{Fs+F^ykHJ)_QMEEdR$K7AJPkmPxCpaYiEgc%YuGJH?E8c?v9VPWf{D zUbMT>;Nri<66#i>RE@f42OQ#s8=C!2v{Qqyt*h@E5h8RsLN_crP79LL(m@~`e~gD1 zmc+BJx{NGYzoLokV#5-)pI5dPmPAk#^rQ(E z%@VrxrpXl}x{Lihhrhp%V2+!w$EPIhhSkE4XX>?HPPcXBj$E3xT;Hm-Nq2Z44*P^R z-1!S=xZ_C6c~`E-F7VZWESJhGeY(LbNAkeDqYqqafD9c!if$eLZa{^lJ;XJrm^ihT zvnH0bf@VnirTTYUx91qK#PzP%c@I0qdV9Wkm8v)M4Au40rHuZuPF1J>Lg#s7)h;4VoExdGm5&K4S1P2SgP<0D5^l&aVwbyF3&W%vD&qY!ET3(+P z=^A<;Pv8>xZUR}CUVftP@m+|TInZH08HjQXiSzuRUpqKQ0a7b<42~I)=)-BK2`9cc z9P1)_h|!1|S(ltXeVCr#-@R-UG;vhkQp!J?Gaf4$2w~9zaH5BVDk+<@MgiWjYw<2S_(YMcVHK{{5|@*qOV6A} zslNw6N|HLSAeO}Z;LrVdbIF`8Ca^dV3p-wA&3yDsr-X(OF|YmN%k&j$vK_vBc!J@T zJW^*98!8+8!N?@9`H;;0SbqJP)e8$l`GAMb<&hGNDMS7JT_p8TBq>x0 zM~)Szs0J7gKTwL0Mf;+(WMRsdd4%IynXpV@+8s2p}DTPu)CJQA|$!`Yg)WvF8eJZ zWr4iHO7sMVP9d^yR`~`=C-R0uAaG%ZiRWTx-m4E0njvH&gz~%epA!MoxVm3I)FsL- zfN^po>y+MSsxSdpBFw|Ne@peM?(Hpf>+9uhvb6@R)r!>=E}-!_d>p=AUKU3p!AH@# zS$x`43OUZhK~xn)BB&&*AmH}t&p#} zKBKPnA$A&}@wbAPKLQ`&m3KB=7Gx*7%ffKz{3Z1K$<0t#{X13;)_7II$Q&gRd+cCi zpLB+1swPe@xOQQQH>Mq}V%B0u937dE$DNksVdycH!DWZu@^m~n z24amhaVXlD_V>-1S%t@24F=ey8U9<_TihE^>IvXPdOXLT0jg?ta_Rl*F(Aa}M@viQ zg$pE~?xa2F)MSU8y_o-yshSdm&bSDVLAn_G-S^xdM&P z!Q7AQ^szy4B%u+YpFq*6uOxb+n@Gh`ecQ7k z?L2U(kYsBrcbshL%E@Wh)lsNV&93V@mWPKG<59kL1~*eB6sY`%m>vATtpucEE(6Pe z)1nZbbVH_M$$a}@@j~-J?6))^ER6rQK{%4E#LuxFU739AbNi023TVg7$xZnX*qB)> z!gEZJqCa4wFUKl2AER&g8C@#{Zk%8^BrWpao&vgf)toS4Lx%{YH9h_`E|Oi?vyCs6 z?8IEgzWdR$OV$~g?ZRGUvMKtN;v8ft)+Xcm$BC$Zc))nfMWjDuXUcz6iyMV9-IH{` z@2?crf4eg-!{FnX5KdOZUkky=& z5tAzQ8+XT1U(h=aYsw%?qtNStz+Qi9>J^N0Or)J?km=R}4NmC5)6n}@OO`3CXuHFy zKXE?`>zK64`Qt){j&*Rec>XL+Cld>Nb&lIG*=}>sYH$xk7~xs#A*A-Jr8Ti;1;_2m zl{vw{aZBUaT&Rr&Z-u1jHGY#D<)sXtA>2KkJ7>kYzcE{|4)rrHvFgOVeZDpvRBvgLC zc=JBsv78cVXKk^`1b!^1;*b@H14d46%)!9$?zgewYdWRZczIQ-@Y+m4PF1^2qnwKX z`U9}N;oQ=K0XL1}gV!uo*V!YUy`yQRYGtD%M3L|V!pLGb6Hp?|dB0B}BZdpG6o*@%>cv-p>>z9cqT43F^pg;vwY z-y)|2y!pan;<|6>}^`+HxEYM2jW%hrnn!ng5$QDpFJ8PO78CLX2Gey0ynU zT%2BY(Z~5MEO&DQ$MR;_50Mp~drJOX`1gpChV*vUih}SjFcz<`&+Hdmm~5#|+ve|Z zqF!V!M2JgxTTUoTM<=xhl*U!P!Ycp@1bP=DUjXl#5w48;B&=&<%W+T1%@q1}*J{eFRoGyuQ>aXLK?L{Gf;K~S zT=Mh%{PDxyDdBSF58ZwnHABz;1KM+#hZ`!Gwu3? ztd;^#(eeO&+K9w*JRInE#`(6~02Asq6>8Kn&j*H_@T>0JQS%B*h%K%ogU<|3AB>$t zkf>3RX3Mr-*?48!wqMz{ZQHhO+qP}ncGXlzbi_>bOmxrU|Cf0;x%qD9J;&FQyk*^4 zj_GVs#2o&DF%ZpL-lT9>&vAesz(%YxZ4k8DG^^s3*UD2^83X=xmW7-aDj?g>9(AM0 zASfx!Kx(pi%Mdv}tTMAMta!RVrozOYj2|3Tbm$SW!di0vLiyhVBV*#rBab?>Os1wi z@NvC|&r$G~cxJO!-D7S>2u(QZDL+Y zU{s>;YG%OUXDVi)p?Wj>p4;c6r5G%C7ylGMa4OY#%IM)i!jbiM(efBNOZYrVDgq-i;Ahy1=8qaf7YM^_CUU@#L)KZ*Y(@Ifm^L(uC=MiU1NbbKI10wk_(21r5 zD=_+|9F)owk^JMi4hsE2Z*}KmBAQHT$@t~*#BLkCSRJzECL8X87y@KRo?EiVc~9_b zodx3wdD?XARD)8XPp32Q@s6OB2R~`Xy?hBhHF|}8^6QDpI~xgLcUj0UiZ6q z3|Vn3ct3)y^5sROCJZ$f;k+laV$vaomNouJrgc$|iaH~ZpTN2^Ml34*=$J4aq`$%! z-XrZ#fbeWw)Axf=I#?wpnV{ej-qaIrc&UT?=ATaOZv;&YiN(-<3VI4czuX@lXt362 zf#C+IJn~PbuyZZu_w6Cd@Mb+kYXQBTvI)Y5!lxg%T zwGdj=qos{?*c$Dm;Xu&de+tx-K zC`p_!dGzyYX1JkNet|7jAhhP+Y7i!OM_J$s2+LduNpNpx$L>xc3DgeIy(4lwu0I z@A&3vE3~oE0dfO=x-L^J;oYd!H+rrMjgdju6^+U#{WtA=&!?G; zVve;2UNWL7r_=4^8gORqb&Vq-Y-YS^H>m#Rg>ZD`F2gjPpdF2eDd{}%`F%6zSoRdl zjBJtdALfaTOk0eJAC1}%w=#-@4l{xt8GHquY~za|(N4B|!T6l5=Tmx2Zjl)ovrlk; ztWM%VYb;}1*Tt2HtoAd9)_|>R*po|A2zzya>KkEd0dqr%82h4ZHeapcIrelMhT43Be8$M0w(JMa*=6Wymiq>J&Ck z{_&D5;Gm7PVO_n&pRvkPIk(BOJjtwF_=%ZWVJ$wu<2$A(*(zanRny0Sp4qL?{+l+5 ze)X{A&@`k5{pR{FZ|<=H#C_)&4RPG@Xj)*pR}j@kIqHUcA=RSgw>$90XqB5YtEmK0Y3(T_HrFeU&_l zFB1IzZht^C5Fs9>r`8MqskUeA+Pm7nZ^fX086MmnKuK#@^+8_$cp6wL393Vqz6>YQACHQR7GS5az_2nmtd%)%Ug2QQHwx@V)Y zj+R2JYDDQY1~aoS?=wp zANGLJH-zzgpx|Gna&UcZtnGH>#S9>A`r{=1*OTM*AUd<^>z>>PR1O17iCCkl|46mWG z0duWASxY1qwvb26ML`0tWf9`vq2L!#7D*z^kVBkMxiT#9hg8;2>BXPJvdsvi!SY6+ z9~AHXL++kfV(T@nMHbI7XLegH%wAKixwXjk%ifNsyeesF67CavU&`7Z55gMxyh>;hW*LB{AJ2??zt zc?fvaIhSQ{-3hK&C;N^Ya0=?AkLF3oDn1 zx_DS|C?)s<|GzM-xN%-HQ99fuETv?d^6B8-&KVc$)ervBDGcKgT0s!RyepLTo zwf_qw@{s@k38QpUQISiSTmFKe4nzYMlTVNRo0|uf2N{SzB~}UqL;;B}RwDsBUkEKA z6q~Q0#0N+&-!36q_=1$~>v(o`+`XChvzNnYQnhw5neK)Ayv@jo>7tQ=+7Av0;H#tp zZXje7^`lJ(jEelc-dHMhlIvF#o`akggEy;aK+qYDhz9V92*3ve?kiX>^a%{WqX1Cr zi3gB458%7;#k?jL^xmsmQ4<9?{q13I4y`SRDq^EmiAEHJ2BQoXG3Ids1R&W>BQkJ! zcUoQ)^stquQnFRuPUlTumnrF z*hcA3Qy;s7c{)rO71aOwj^0}^U71`;i~P6Y=q9_#O59mpbhL^6!g>klS#vHm+%Wz{ z=Xw{+-S$3veU0D6>v(M_Q;esipY*qlw_WksTkKIPQrDS^n?ln+{|Y z!Ym)}6#E;-D+=$MlX7ChL;b<3dGNPbZ^S1wT9$;C@E^P;_>O$s#ZAi>nDLw!9hddN z@+i2g0%I$B8~2Xm>O|7si_gEwJ~IRfJl$tb!>DY_1?<+u))X-U_N@`OFI0CtS6KpYrGs2g{3yggq&kG6dYo?yshvgQzV(>KDnrTaOPaz#{Jzvkwm34a4dWU9heCCE zO@Jpd)%?>$v`niA0Nrca%RG0d=@hv$^0+r^n{Nz!w97!r7mkVrhW=;V#wK&qO8-wL z-8!&U8>Yh%$J~$8_7}I~nySWqasXtt7|z$wXcbOI&|HEq`$uCTEWaNsFsDr{gtkI^;*7aV^(2f3qt9!mUo@kI>iXJgY#ECry07i@rk zWLhdH;WCK!&T|64b=n>Pre>Ml52#%uQVN(e!RQgG*w?cuW&ps&yot!qag)XsL`?L* za8Ltw+Jli1H9D6ZEIieY%jKovs27emVN>6^2IQd?*}sjEaVK5%p320b-(hwp;Q^dV zX+ykSOsk9pfaJDQF4jy-tf-e*O7Cwm;AGG9dHxT5O% zo-7v(|C%ZVG{GEbysVDgsQ@2;rF=0)fJ)fteuF;w7r`1y&r+4bB=DFmo!M{bX9sI? z#5N;+wPF>Rm64!)s4usT~)VMM$sU#9rFf*mL8ar1*wL4RZTHCABK+{&Iz@k2m~3-dLb)4DDXqSy%N z3IxP(%f&&?fEy+7fK~_27B$#z9eoVLqM;!dLx;@c^nN}FT>*kji7aS=5u)9K!~+&A zr(7kfm<%u>jzJkB`dw*PWW4Aro$0$_m~eOMzxbff6Cjju>y7FJTe*Znca5Hd& z=9hVwm+mH?<`>UU!SQ_`X46yiG0nUDyR+Id(6Hsy`V!OB)3EVuWVy)wLmoXem6SZ5 zdsI$$Tqbcs&>WD+g(P2Qb2&2>PT^Ck`>*PRTA^YZ=fT6VzXH!VPvAA3>5`6@8%8Hd zyyZ>Sup%Zy<9kHux-;K>O`v10cFqLDn^qlEGL`^Z9u$Hkt<@NQv3hyzhFb>=Fwxw- z=_OLgw^%)N0!Uk0+=;kovYi=pfTA0@@%-9LXi9}I^c&9cUHFnsok;l#mKy>WvW9{b zAaD7+ztOfN!dTVA;lO%_fY!kI_L+2>hB(BS! zzu2B?P~4HBV^aNV-b+qKBKlJFS@MFR*TLk>J4WF#mKdj?$^bCq{nqmwA&?UCWfH&Q zeME7m`RpYXS0IlmHzS*Eb=k?9+dr>y@*X5Q%Ck(GJuIRKc5G4p>A7p%2u{}co9yRR zRCzCrANoK)MZ&BVEdnS1)&)aoxSI59EjBXJgR5Ff(j>hZXtnW!65+V0w>Hu1^}Ve-Iiuk zLmVMRW!S!Y9P?Vjnn^ab){md3Q@lpAEm%6y??7ruU=G#7dL^$iI>Msb18fKy*R-rs zHsj#I&2@|%$HXH{msq}=N5o-&3K~D&jXHCyjTmMvCHORfK1qC*R#tTmN76~qGt^ij z+xtT+1uSCqZ+wI`hYm^8H|JkQrbp6l=x9RY21jl3sDKk#*Yp6|ZzF=rn)=ex_$*Np z%YawHYI}4tM)7nWCC{qCX4aF;T$5G=Ox^*RHE(4x6<&%KVO#hVh zR-T^ysR}LBw~C*!&4|b&AK=(*g@OJ=rlLh>54%K!EYn*R&jd_rOfL53VjN$^=U-FE z1ov-*QiR*9c4o9@^KzRS*)<&dG2ikh)Uu^`7v8?mh5ItERzI(Vc12gNIWDSBXe(?+43f6*2%T zfWUu1ddlf0t5Q1Hcwyr!e-b~eVx?h(O9}uCaFalEFV(A#sEb3TU3DSk^c-;IJiU{i zLSw#NPG!GKO}wHk19P)MO-&LRW1Vn-d{hqoAflLIP&gjsxXdSIhXe07HyI39xBH_r z{mtwXA-W35^DJM7E(GSvbtvr0oDkW7?vKyYL{Gl*(ejN`Ny0lrnvUjpd+Zg`il5`d zZ~|UDdMI}K?F4~9%ErEn>sqpTlg{;6ww^d`fWTO&Uwzk&Lnv~o#+whM_r`uGz5MoVIl6Bx~i8`@5=9fNPmH1vu zQ+e%Y>HTzFB%Ibs8&N)$zMKlhhOTm@9b{2zBs82`{aF$>^Ae|`0_qw9Te@xyFK&4O zPh$Vve|#!D(;`g6G@peasmZ7 zAF|ZivEc^XnuUu8Z$!F;si2oXbl43s57z7E!uO5_NWn$8xqN1SNxnsmiT6oc9)y3z z+~))oBt!K#9jaXG6L-^V+nUGk`aTjfgpQE;s)|R>P^Bmg|Y2@FZXslnv15Y=P6m75h9g(ZQxc} zNO1n+iqI~La;Rp@8!ofg&aA`?Z~20nUkvB)a8a6HL0ZJLw|DTX)P24{2_)4mT$^dp z2FT(J$RTw{HTU#|O3X)8Wc1(kh+lhSyq`>1#8_3d$17>Z%*Yu#XKb$#5U$)P-@Q|- zKtA*d1Q;z9Q}HFq8+q{tt{hz+uNwCDrZ0Uncn_86B@^q34GH)6Jbjj4Mg?~Mn#o$} z*$kaRr6bRKw}+Z?Tqw_|H?b&iIMEB9g0KHLdXZ~6+nL4M!a+Dr+|b5X0dQVIz0s|M zjD6<4hjNFOy`4Yc$d#<0>07f_qY@z+K2bT665nN-;VB~FzZzTL(66181f(AZ8fSfBMrTKdq$>)l@KZVv zTigSrJHV3{ec6)1 z5adkI1K6!@vu^IP{C7Cx)R&oVDl2qcC??6O%Y?Ptt$>plfbIL_f=Z`vd?#*q|%{ zoSJV9C+6Ppe*GWOlHtEZOVa-~{?Rl1hlJoi{{I;-`TnPPN%31hx!oH-$Q1}cAr1(D z?*F^~e~Fm1zb8RS{$Cz~%dZcjg)cnb=otIaxASlbf|aE9%p>&vpo#!N@(`=z%wwh! z>|?gXLKQMCd!7_UOGdq5y~210Jq<=i3N*$*jEuXii?8ob$eo?-8D+CN?wpr_t6Mg% zm!1sPY6;1|62C45vkr?NHei4dEO_sT2&inma+Vm#Zw_ozuPsaf*9?-j3o^pj7mOc^ z=@mfVK?eZ7bzlHrN>_?2G5~}MZ~&?|AOK@ffZn^&_-Kt3kRJl~jlFYT->(22RIMgj z(3#MoRjnSX=d0M(*0$DmJE^4I5J2Z2)sA6V>IXf$9a{~VbcUL#2J+5&azs@;F4Hr`wSg=iah@Tf!yiH;K)Pe#=#r>QS~wD0Uj9O zQDHh<#iUYLfj6zAPwjgS_QZ|u8SE`9^N>CVry4vfGZ9H<)DgY#>hh>};^oiOj&%i^ zvKP%)b3LGq`kK=!n^Jc=k94=}NKxf{Li@``f=d5s&kjD_wz{3GxS(r$n=3bf+;^ZY zW^8avrRNLm*Gs-II~m@^L~5K~A9^bm`f{C8KLD?#q|s7XLx1YtuOTRd5bQD5`ZRe4 z(^=Sj1@y*BEE_$}Bj2&0p(pXd5<0&gWz$Wi&Ond=Thc~``(~WwPbR39P0HYUK4($! zzV&6~GhU~%qv+);Iap1Ir2dp8dL+0Et>qZcu^6y>^hW4k0An0NMDi2|gGsDER-kc* z=deSmEsmoTn$JKaR^t=*IUaixFC28%Ka$;XU_%ed6JuJeDLCqvK(jBQ*9U?#r1{jf zQea*sRp4Oa5mRfOXa79Po8uit7{OY65>Y2OABLrmG*gdl5HVIdxB|s+2Th#W+(A+l z$4sQJdfml6I*XQg)hKtwvG-y8c*jF`IiUcXt&Ti{06Zir^cIPWc_qO~nV#DcKhpNH zBsVPx5;b^W>0g9BTPx%LM(v2*2Uzmy^Qt;K*Zu+l*@?mQOXyEX)ojd0zSPsh$MZ}6 zT2>D0q&KzN)QtQ-y4j58Tfb$Gcx6AIGezky8M4^E)XiNv-rWdw1TM2mT8@T~k0%#=W`fKL-5)A*L&ddb|gP8jZ<;sf+O>{)cN zJ-$vvl{4~6dk3+9Gf?2ThlRHqp}g8&7kQLYuTu4f8&fEl@=S9bHYKb4ejmMI_#PLg z^tz2zsjtx1u~!ka<45~Eu8#?03PP_*Rljb*I0g<(qIQVyGZb*w)~zpR0(3=6k8YmWWpTm6eI{upmRX7fovPe zK#CZSytI{67sXHn^*GcA{-g=vZQ<-T7hRoUK;(d3 z%|f;TnKb_LXY(`?ODl{fD4ukRZ*oCJXJgepBBe0B8M2P7KfEcy5vsSYOxP;x z8n03QtjcgfXKDS`!!0QytGd-CQ=GrtU@T6>YKD zF1;hQoCK%vp-F+bz38%UL#geNM9^x#?pby6a2ZUFCkf3)0y-5LUWsqsHcKu>SQA6UGB0-0egb*ImKmXdf$s;E7{vgSNRnsKiGf!dkRRcH3GS z?@TNZD&r?WTp_HifS|QM5$!K(u3$$f?x1DcCB2vfgU6jvmLZ^H8D>B?HXA`tL2oJE zH1m>P{$LV-0=wIu0f_f*58dz3I@uwq%+ZHU8dQ)xzWYbBQLtx5ZWtPMt6yE*hFWXJ zbxYD{HQhFwLUGvu(zLX{*Z$Gjdex5-o5C?<9hD-$38$?o-%8PXxmtD}V65Z+5)g@M|c?&Es@4MLFV4qneWvv7*u3c9Jh_3Bdmv5UNiNlJsUo3NvOZ-?wTr_E7j*nUX3g= z*kb!_CxWNgs!o{QPK)=o?inczQ-j-OVoV&2E~>Kgz0b&dz!7RDZS zX46uKst84Ydmu5Kp_}*bN(&k9fy*Kp=Iti?}?>tx=GOwB>c-Uh4e&YvVE%3QD| zUm~h=bwdqgsV)BFh#|fVHKK1iB>pFA8GVhiJEyDXkYC+{G6eHP{hY>kKsc=%t!bL( zHk(Rfn`V=}Me%YT#1=)$pECJe<6L`Qm$K^zFRK_H;`nX|i~;TV=w*_|qo_kU#1O4W zE#h(q=|Pt3(?Qhu1JV0aPiFx>0li_*i`x&Osb*SAEZlUTNqn7w=5860xt9A^buL51LyzprbTMEM#?s6MlLMeT=F0E9| z>o_{y*w%!e(Y{Uj%)axqLL=;_FijDg&&y*jm)eu+5~2i3A`Ot0^`b#e9Xv=~DWoQX zh5vHA5t}Ng64m6e=ib-#cu#cY&%ss>QcW~oZj-qOE4OnUo26&(cfB-9|C;?QNR$sq zC_gIatVd_3S5BB}C!lF3)J5>Saay7lcJzy29aD4v$v?&-rr7c{`v=v& z@?{te?J4Jx?e)jLxXGaixuUyaq+ohe`ib)nqYkph7iKAX1tBY-3E%BH~3jp#hjv| zhF?AeNU(fTEH7EHyE)Xq^qy?y;LL~k)LM2s-njm31t>xOKRC z;Q>W%F`c26Uw5L$AK?lsX!3FO8(GcwkowJC#?H6Gp+!RUFLJvftmTBlA`ERG^vt3> z3H4Ad)7v{KN6j&NwI5KNqv2IZ+%REjjya9utEGv6M7MCPZ-~o0pS!7d;da#!oPI6$)K$0B z2LQ5P6brQQX%ApVfpm?nVdSLPn2zY{hrnccs+uNtLNs>Lp`l9SI;<&;o*Px(41#2p z-C+k+3AS$W#5b6i@=Xw8XpAle%}Op$VtYF^lFc$>mrRlZYFSrz)W;4V`Bh(UC3M1s z!zK_Xw`skM-%@e%m}dLK@(% zp-9b=1+^hg8NR(tozl0fz9Rnl%Lwr1xHi{;i|(E<(fa_qL&(C_GXTq-DWUugh$=5TdcvUSw6w`&F60SKQ$0|4Zw8^1u|4YZ-qY$ zPcBB1O489THSCgeC1wnFP78-d*{fo+*0|%VwRa%Dt#6Cb7NW_Z*O&8Wl(d+*Hnc8b zIEC0$qFB|kZg$BAhIK6!RrWz{B{$ikKCvm~hSR3=Ox={LlH+Fm8T}Wv9svrkE<=ERIH3%~v9VPRYbT6TR9Y+y?myf^((_7v?fGSD4}pIVdzY6~mycje-xM0$KE{iZU6LlR`w z&4Pt(-7V%#$dcHM)j8D`jHq~Qt0t{*4{UH}ung0DD^&F_FgHWfAfb9FpgSLn8KJKd zgN!{1&RaYP)n-O#jZ5dSC)ltzJv`^`05=ng3&JBLJ#}L9-cXp? zMWZc!#%;{*^lyp|L!0=@ZZ;lVR|aC-_ajxGAzJok{2)Ou)H(Se=d^O(8wtB7j$;o| zQXO;|OHSbl$IKcn@ zNtdN_)(48{ahjshs{RhRLV9s6*ITE8GcY6CrThTCYpP=xZM1}@zm?%%8Lwxh?AJzM z>|@IvZA|5qQKfuMv`Mj}zZA1LQG~;6%cFjbKYfvI+Bz_dOCFHe773BYI9{4~<91y= z0oncsK6oN#GScPdggtYj*A4$HCmL}Pb#eY?aZaUy!uu~vju#av84bs&OY6LEyqr2P zAzjDxv??t4b5h#6gk)l8hUAIqD|>NC3Y5D)S;if=pJH>^+%&3eDi~XWUtTyF$ZJ4Z z>TEx%6deCx0MC+lW~}bylV`zV#7sW?qCItQfUVslDz@-OFyXO(@3=<0MRIzfDc zizIy@#JxCQv%C4IfgcZ^?@xe!30P!U5b0u<*{ThwYB-i@v}-@XRH&m!!r%h^o+UkV z7-ABk%y;n2zouip*RSjR-x-3P@J_9Zm~{rP0=UjFO6Pk3BQ8SHBTU20c9(jB8G&}q zHJbe*-Be)F^YiK_JWlv`Fcw*H##W97Wr-j-mAz+*xPp`Ti>Bg;Y*G!b0D;UD)Z?z5 z4fG*!Y&a%f+F-i)Bji=aNmd8kDf_o<`l#jA@?UwTFy3^a51m@(IdJWZ1t;|QChtX; z64Whpn(2%90JX0uwxe<@z1KlO;S|J;7$KF|IcfY|(WxkfkD6d{36kvQQSv>$8jET- zwyoO1RSw+F+5q#F?OW09_-%m?V7l*ZqzrAf<4PhX9Q`pcQF>{R6)2r{hw$W=RRDph2l7wY0xFytYCmj|QN9`l(nB49%9N2e9;syqo)V^g~Jv=}o&psg#rN z%LnOl_CVNkb|EvJgT#rT_Y)1;*H)fAl?u43=g4&VTZ%%-v+-5V)hmv^i7)wQM;vlE z;zeT#x&_$?gsM(ze7bvWh#`%$FT))GwI$5u@c8qpAbWo}KV>S}5Mh0@P)bs&jiX&{ zX}mIhEIJmBliMMr6g}oW#2Yd0(cA&|y$}79@#uF+1w6kPXA3}~CSy1UFY7_{u2JJ! zE*snve1bh(KhtFY^|4%jF|9GGKSBP*wGbgBLEItm z`ynMfQAFk%K=(E+DVn2}KfLMZ?gYLVGdS_D$IpelM*e^o%8{wsdFH?J*cqnh_-KGt zc}OZTC}2y1)5k6?C7SjH6yQD8W`~)xcGvhCUOCJ$tG7HA;VeUewIL9D&u5?t-_xR$ z7GYN`wTqR`Qj!GpPC zrM)U9{_5i`|Hj2BAuEmsHFT75KA*K*L8PZ_*jNc|Gi%P$p71+^Jjg3M$Q3DfLceiA zCyQK1Y!9A-FcC#pO38g-himwEq@rYQp2HF9wHUmfKcarGdu&A?;?~k*e}&pAc~V-C zhTgA&n-!DmK44nXEjy<98N%_&F@ECu2_4^=IHFQO?MT{JDB91Vctxk!n9{P8UAFtR zcbqzKS$L`%2$ol{m0(o7Twpg7h5xyA$!7j9k)ypS8|aHoA2wB23A4A$zIZq><>kCH zcMm^iXw*Hat`;6|dE;RQ2BTflAXt#ZJbj}pB!yf_1=^;U`aNC34&ZR~(Lzt0??v8E zIF$B=ltu~X=}-r+gwe%w@pTZv+1hTrXY$}`d`e2mv+W_-Cs6^pW@Um`){$&;${w}# zP65W^3)!8yKewE50LYKZ{4RTLP1Q`I&N0aonZ~MEBf8<6eTKUEdvAARo-Py59%B_Z z`(Hn3NS_vXo_iR9fE$klt0OEXcu!0d(L{3Kh1$eut)h4Qo8sKiTg=58rv?|54=Y{t zu&gPD(A0w*=Z}oOZ2c}O>9On86#x2}{i)9Cau`xJN5)gnEh-(=cGYLxmiz3k?m}AD z?8rGk>!udi8Yg3Ze9%>_=ezGSMe3|)!2knl|8fO!vcY% zgf+4flj?rA+r;(7;Qanu@oc{1Qv@(I-)?=l~-pVXX7FO>lIhITNvZmwD^65{4Q@D|!Qjbe15MRjURBRkkah z(LaK{7tU4aue%ESa#?cm$r!w`ugKJF^5<79)^YW9mza%Hf+*&VqLb(Eav0~IE1)@P zYr=B6)l~a;Z)v%?i=l#-F72CkaKol#0dm&<${QPTDk4rm06YQ$&|b%irLQt~JBW-^ zhvXZ>mK(b6AGJG{o@~QUmGj$Hj&4sqcEv20yG{vwQD(Vx|JTJ^2NE<%^f<97tu$<% zm--yVygs41rvoO9&5!erAZD}u)XsM>bxvT;Zm!4v$%?%=RyyUoomng9j22Z}J#R)oj?_oub6cUna(-UF(!qQB}A z9%9vG?B@4c+~PkKV9Tp#EP1>bq!Q=ts`T$qK+HzL-vCtnw0R^s0n|JsQ(viLG-Np& z1teQqQLoWoz-jcOnCgAyUQ;Es3@!(6jWl6YBZRNqe-25+z8bi2jrNe6nfkwc+;2B8 zLM^H&criuteaxF(sPa&w^^|DvZkC;ZgUNl1uyci}3=5)U!Iay(m#$bGIolpsXH0rp zHPL8ScOh(^sw|<)y3>??Q0|UhCF@JpjtJnS9rJtY^73JmT>9m^bO)Q~Zf)C!26jj7 zGl){lKGZ*D&3Gg^Yo4n?^~Js98GNn6fSDJnY%`=mw5Gg72p4g{ZcLP}ENIo+)^ndU zOzQ$*zilh@!Y#jJc$(hYE+tvPx>HmasTc(nHn_p)N~t$(^%i~UFKDWKP9!$qKV!wK zad5Xaw0^)iQ6e;rCIqo-6K06br(j~ML?2RN*XJe=)&1uDBadj6su$h&lqbFT!G0N)Y4QzwW@dKjarQFpDX!mb zztd4L_&~8_9&r0P&d{5+pAUD&(1=H7TgrnL7{A=t4Og@chx z*I_k*d;QI9ZGNIhrx(lJaSiXo;`?`Wdi>`OnuEf1QcGVbdCpwo-JV8zni?*sa6UO+ z!_U6%e)-hKDSxHxnucwbl|m-JxZ?n}-l+_JP1+(B$9&cjh3#)AK%_y5dT^-q4J}F9 zyqyiXv6fxW535xxm~E@*3qVC#%jhTxZ7X2%9vJy ztkCCdZddGtQ`GtbmuRIg7w%l$h~#0&vyF2kQ{6)Z_06S*?gVPztwVZav;nLxGB7XT zSDCreqp;oFoOtC3v3e}h8a&lzk_G0EPYyqwfr%2EH6%ywi}P!^Apm#x;I*Ra%r<4& zQ}eCoY3`J-uho{-*o>$%QdS$>zxu5~kGV(ck$!n@#vP`Fyll0KUoi^eUu#bp8Y~ib z3{#C2JICgN(Gpzp!UT^1hC{Vk@~`|oy(x1qY9WW?Q{iM012$!4lY+<&VE@w0oiH!I zB%qieQyGgFugm*N$!9pGwK7Bp%=kA9+d^Cg^a``A-uaRWjC{^m)u`n~JWptz#h0TXEzZu|_mdl4euHVK8-@&tXgD+$ys8I#XYwy#b!-yuiwHiG=B z;=XvUDxG0V=}3Z_@J+G`Oi#a`L4GdvkYCNFkoy=~g%PuxH`Eld?dB=l7lFO0K6X~& zZRb_LF=-{QLTcm=Hty% z7K`73=;;tdmRF4Yb;McaDK$5<<|BS53>pS!Z&b?xX1UrcQ&c(Qlb1+%`s;!d6w;;2 z!HK&7O!%_F+F;@)u8_Jl_>4tRxPt@UZtb_|lt)iX2$8?8+2DJm%-KRkzM3OWMb1;Y z;yC36XUVf5`xEA0L#2W-W#V-`dpGDfApolxSDYaSla_qNRB;jQN+uk)r_~B_CpW7< zTs*-GZ>BYD_LkwQWNW~R>_E``STa#+f^bKC0j?e@!Qr_3{2Jmn$8ngWbnqNR7%HE; z%$Ki`CK=UGQ|A%uGet=}kx&kUBhd&|@%LV|H6OsX#I$(3d{{)0iDKx|PzZ?69n;{L zZ+cB45Z9-h<7g$_*BYyBjwd_bCe@zMK5S1R&h0r|PWMGu70?R~7*C3Pax);Zn12nF$}E)L$Gk zIElL6~$;7uU?e->@w>h{_ukeg*35N<*1z)tSE81`@vtDOu zmZy@3gIA3VsND%>lar%rO8$xO8Q4nPHHI<qLPAc1j1)7T%60OCU;oFEivL(WVck$tGexm!C z4iP(Fc3MKatWgbrF^nMUA0Y4x3AvP$gl@;q`0Yk^2gk;J?5~%oSgk1P?_h~DTf?Q2#ogfkiOKT{+;%VGs;}<4W!!N_T8LRM z1zukoFY|;cSMr)Y@nAh(6x`YVkV~kpv2?9T&8ikT&o^iaG`L z!!#s_H6m?|o`;Akhr768tNUZuO!TVug!8yV5J1Y=#*|sOlN&8Q68PN~y2OF*YP+mS@#2P25(;Mp}>{%NM>4stcTES8HiGw1Wm%9|2T@@lH+L3NMBaGP9|bd;ZdH%P7ghp%Sn( z+i#;&c6^)MMXSD;DR%&|f**K%NYmcs!@sZUfwPbOfnuUv8?Y8~-p}LP%mT`T23g0G=EvP7aY4;J%$xf1q`_PSq z`4svZ-_Ap#E=>xHA+t|4w0`VK@cwMwE9O#4lXe4H2frLL&*$WRWi#mB&6vH&q%=dr z`Mi~1DnN!&z-ZO@7R|%bLgaU)%_E2vQ0943y(ocDF9vPLNP!mEdP1igJtd&nPOHLn z@f;L<6dUgB&^1(3NnaL+G2c1+Wn2jh7|%PKtOzy>L!r`-SNOOz?Pi1RA+tF;G4JpQ zrJ-qdAoKVKwm#yd8GOY}aOOLKiV@{dl;)ZfndDbfL`ME<2q4i8998&B^Qmiu#Z-y?qq5J>xalXo%qO?mr$O;Sw-J z($6i(O9_%aw3pH}6NIabCv*^pVBx*^&ru0(WJOzG?rWERV4S&IZbC0tJ9yT*QK2 zC+d@M>HDZFZ8#th@ukQgJA-otNoF1)O61$1ZeDdld4wA6WS%05k1S{CQ|=%{mb@h} zIF%4!M5?xUL=j@O1WEHQv3-dAQ1Ui3n~8(Q_Xxg~I_nEgLzS9)`LsHLYe-`6*xHw9 z;kTWhbvU)qrFeo!D`iZ-yWCogCdw^nan?p-wfsqh!QnLMao;V;hg*Z-;lD)g)K?r%Qx#ksGz1jP1??duI)uh4S>O5Bk*kg~lp$w?rZ! zY0Ys5!2SUSeI~A(6tsu??T$ejJSf~2C~*Vm*vSV3^E8Qs5=nWpA{bEHjyiETGtrGh zIimqyR6?3oP%V~%3}5R!wN4{KOfFaFPMnmb{EEwp{{>AzvcFt~vcB^4uD_BsyD8*v z$5WHy0|gE#RT;NT?Tj<%+9Gdxl*d^UM_#cJvRrnbZl>Mt=pnD_Vm!fL`~4E{HxG<2 zIWvf+V(L9YUz(*69V|7pY*>7cPTSyiWV-#hGR*Pc)!fuz`;LtQ!F5W?Hd&H?w>Te z9Mg)-D)j5vn~w0Flc&-33G&{wWpx&zk$0$LOPj>-+Mk(E(V-;Lo9#^Vc+byCzeRao ze9-s+4E>ZeuA2!Cyxra&aYg!45So-yU;AP-K z+)FKcMXXHp{!J%`+}6R?f2>9&0c++5Lx*8F%|=hcB(&KnTZV$TMhP2ih#pMr$T}0qM&R(*nvWN*u`=VtzODv5XFq{YchG1%5I%p??E~HrxqoVVYJ=j#!e;!P zjNTm_Fd7j6o~s7tw);Tjqndu(Ngt>@9aIczTni=It6+*vHQ;T=-^YsGpy5w zJhj4xhR+Gnf9~b-;$doN-3zH7Ry@}}mfU`)0oa!CcK^J#K=vT!##k76VQA#8-VJ=V zU+VYK@CKV-=AxUcvY)nB_L7qb6fc)3N(nT-MJiP#)19DPY3VI$aovtVF**+#Y+6>X zq#X5aXMPDi(zqoL2K=YL)5`Cs&NzRwrmC)-x69J8=-9p0AeR4p!03j0zr%W@ox83J zX~VT1ZCN(7I8j}q6Ai2nOJ}}z_X@(QM9nlrGhgarPwti_{N=;i)3nh9Y=7@!&){XN zXa3@LrSeR|w;KpT<-a&TNlyh-@5Meu6@{%h*MA4xahI@DEqd<%IfB9VolMYq(l~7D zF{qFpY}lM64;DkqgK?)WtcI2s{F@-uqkP~KPPslW+9HBvvz5CZfNGb`Mk$%m>)ZN) zNo7rCwa)k0F?9@=@r|6AvgVqcAzydS$i)}LZeiw)Co_1DT>xO)CWS*+_ramQjzyC>@UK-hETbjpeQaa4(|Aeacr z8k%(b=8>ia-8H2{Jx)&ml09SLRx(|(4bL@BRh+kzjk372nA5DnSpKfIv!*}4c1bO% zDBJQnG^3YMH;gwMbI)&YIoq;kU+-_hmHv61H;aC?gqK|zDScgZ1hCfJ?v7r@uh}z~ z(peE0;KLN900yIqt;H}mB*!?u?%)YUb z;@I$36#Q#KEz@{)>AMJoz;RH&yT5rZSVl3|dD^?~;L;Q$DhQw1_XT)XJ1q zdYi&+ZO)v@eXUhd5)I)~9d z+?ib1q?CEuU(aMCw8sCDnO!SpHe8i-t6Eso!Jb`0_y$-zDUkiU%MdovvS%t2bafzW z#j<9(Pf#6~pgco09;>s#Z2MBKycpvL7WSEZ^l*(ZS}|DD%Ab)8nneNWy6V zAlU*T`3fo7q_Jul>9VzsOSYen;6;0(<|ovs-wT#6f=^UZPF%Nb>^recG%bQ0(xO}a z@qhCTM@ae=r?TIiVx{XyuP8ci>5YVsxww1tzN;4LL)2ZQ<%bS)rUU@6 z>z79quP!zqdPV7e2Q2&$G>DUn_uhil)86N{pYMKxpSUmcB~wf3tQE=l-OE<$?^zn! z573B4HyND&jC$r2ArEG~S#*n63(kRkTJalI)~S=a%Xc-t!}6DIEMv-XOz}~4 zn|S8GLV%uf*vah~epmP*y4PU0D0r-T2|_4+c|-7C;&X+F{QD5bIKmo za0B!IcM=R(yYXKT(Za|Pbo^&UZ>$C?eUJwocE0AFH%5Qh`&1HP! z+rBN70QAJE;SB@Hrr48UcUh=tUW#d+{1M%a&oZ8u36_6ty*cV@QTG7s#Ae>Ame{RH zq8bE*Is@l1#beP}u&mxoh$m+txyH|B0k{PXQtYz4En?g2=ktcOaBs!@{~jVtI$ zX+h}1VqYW;HVl<8f2LJT$ZbZ7bBEM&iJ30Q&aK&$XupD1uU~dd@O|r0B|uN0svs!_ z2Dz2xt4A7dM`h&DYFdE4xoX(vvZ*V}%SCx7!Kqs~F#y1uJ$P6nUlU*F>Yaq{ykRC| zoyBjxsbwSH_?|G_}P(63}BVcW~lZp%wnWC2%hk_+#d2bA>SH!A*<{s~VWK<$mTt#@ zrejCD2O-9ZBUD>qK-%gvq{5wcO}q88UN$7t41KZalWL8wQ0h=gn3TeG%a0Yddgg_j zLGb7oNgmH4k6xw%*3KPVlO*#-SY(nUW@;A+{alY%UO-LctP23OZzJb>zeAH#ew9;x z)B5a?KIgSgc`38;DSWaOtNL~2u%M(Rb+nNZcn6oL+=K$?so8`nouBK5YNzgBw)=j9 zb@8yp17F6?Kv;-$BSdpf&`2W?TNH?N<#1a0@dI_%i(U(vjE!fXS?m==)2e#8KYCs8 zu9;c+#{@p)zactjQCznpG$_d)n(?|*%j~POX6!xr0eJzRw^$laUA?xlu2t<@)XdE8 zLS6H;(Zn9|l=W}yb=C`h@$Qzh;)sq>C$}O@9tb;MvQ$~M_uKxmiWndnc2JyJTsJXZ zJE(ZAzO;#H7-;3~tX#g}j5t^tMi^~IT*`konQsa!a$x5sp}RYS zKP$OA!zB)`+fK4^YVdFEo{-uO>&4pTl#*tZ(Pr5(7a0}Zf&JJrHYUI6-V{W)hqIvVTR=FXgSb4C@Si1<=_==>z-l_E9M|u6e%`JuZh@;e- zoG11{YPlLH^Q-RxvyA`KBISr!BsWBz5x4ka`hYOoTSUJKoPTQROUtrA3omEs#=$En zMr!&3ka=M{SimWFlrnw$m!pF7cF$7K ztmiN7({f#HP{4a4fUkZOAi(NL3cFXqmnMn15+@zK6=~OyU)L%&xh7CZ%tdG5nG%=? zaHY0$MMaRw{FsxMx`*OcUX+QOw% zQhybs6qpO-dFTCuo~-b>w}uA5UL2c-7H_51op$G=Wg=6{AR>9>li(CuNYAdOpd+jt z9%1(ntqg@cDDw&)?HG2~%^$z=75GPTS(N+F>Zd35^6&31NPObgx%pmxI}ZSu9Po&H z3xHX{{=^VNJ3v(2jFl_T4rK@A>(pUIC#5H%O$WJA>Y8#jIrHwZAs^6kNMz^j=wkvg znNQo^z9Q*|?6I$tin1b0pjy#uhPkA74pC}x?Ma`_K2|7Q!@Fe=LB4N^0D$=c3oGyx z-nHh$BHx9`gTJV4w7$Cuy2oD3-mD9+>Yl7@KnpVi;)#t%1gyw;mGwL?dKIXu<$tJi zv{wLaQ%ec;bHwVFV*)si@>z(SsXt7AexX8G60mYx-UdKdppX-F9lv#*MzF$?N80|b6@ZzP@qGoB&yX%`+h)*u&W?oCznBILWM}(8Ea?MM=5ndq#mOH9z2W4*umZ*x%-*E+o@j z;*r3(`EKrDxP?HbY6-MjU`S zbHL_7r=F#gn)p}qE!#F#@yg8t)DblNchmXL8koU>{0;paBiP{lCm1PwQ$AO~QM>W* zzG+(Z5AS~Iw$TB$KJTbEHr+elxf&V`cc2Io*`FxK3dy{W6-X2sQa zr_w=|66;8jWtjGFER%$hj46dR{ro>s`9F&6&C{|6zokPhAHJv9BB#&89mMuh=fls-a4oARW|>wocv9Yf*5fVDsCk^Ef1P;QezpcX)Uv7+vb z`5zr;W&PKK7QV~H=u`Y(ltGIX-leG7T=~wv zMz>yoh}Ybb$P7wp^36Js5AtBN1Tq7>Gq%?%H0xn40IjS3v;-f7pe0Ms5_f)2v3Kt` z<<03cz{03I0>wB{{QxXLF#Yz0oZJq9op!m<@#}=Ew?G-C2dC0$XE(U#>3ODLjr1ua zV!9Wj{WKt{Y(254`Pqf{L6${3U+!BRCbvHXg{i$W{?sKMoi!y2HnHy(nq~a=*5d+6 zvE@d${CY$Cy;%pdK%j(w^a(C>B8MeluuK2VLAsC(14o)QM;c0^&6hO>2J`Mv+rkVQ z#SfV8Ue20*Qg!9X9bTgN4tDQ z-)d9MT2x80#U3Tot(au}uwBr`eT`e?Sim4Nb^WL>TORB_mXE4+sQa0s*sOH>xxb#u zeU;l=IqBC0;!xoC!kSw&P?J_Ag3eg`{ZGLkmBIfy(=FpQJI$`8#Bgj!6>CfWk82$I zGR`2`TvQv02HLxu#!XOpJs}2%m}7gt0RU;b0nK2Cowf{6_Sv}Vv(+~tM|6#P5{m>} zVOK6-!{C<4)1fC`F3QcX6tw_-N?T;2R&7yQ!3_+ZDRH6Q_Xmai2*UJL@x(rRw`bU4 zc#h+DLwT$@UwYJGon-S>qtQNXzM5Mvzb=N6^rE&V{CikZP+5JJIw7eHkNemhKRb2& z0#pWAuL>khs8J?Vr}}bOhHa&yxF0JzN@`a2t@IngLZk|#&TNvLBp}890O1YM8I5k< z?0dw8Pc;se_=n5NjOC81CdlWF99Er-4~yY5|6_d_`r+05tBz=DsuTc_A}%OW;@@^u zxgjr8X!SAsM{Xefll0_80Lfr4T9hK^gS z$WrS)#?jl_Zs6FYZ*>pBx-P8_QP(Nj?N{l~O}~~y9uXh5H^&Oi)?O76^yu|dvorM= z<*JdR#A0ciI9ZBUu>?vWe(dtwWg>mvY0|9r25Qs*0IM>-II0VBPt8t%nT{?5ML*Jp z8g=8XRDAhMP5jlk%k)uZr`tVZePj05alqQkN@2;KtSSNEYxX2gLhcz|lUQl`QEv-E zxNmg~6PAn(d0V|BKY;!#0-0jfaXllJV?t;Ci$+yDn~zjWFgqs)bZ04mnd2pCvuP0E$aV3h=`qNRxw=|~f57n>-fHM$r zq2%w=R^}J<(Wma8&;7iVE`Tq%p+UzT3N1TddSu8mz_)Ai*)Y5+X0*Z6*ziBu3)of& zeO+aIsu}1DB^%~ztT2M(d{IE(`6%DvWPwCNc84^Zm#cLJdECSL9Di%M$qGAWpsx$C zlF<+p^0g_62mFV=bj!B7o}%W=cA1C>B1qST*3ZY}{#niY1%mTGndpcLV)Y2O zMN@8HN)V}q2C2!m& zKF6?T`R)zn1J*s2GZrn4;YyF>7`5Bir6xVt6F82PYl zR6A31yh7w>bc2(8m(_9sutBw-_BzpI-_}rEa^&K1O;-9?wk7eu!DrM87X%6|2hn*pi;=@B=@3FjyCWilRUHMg#V$Ld9o}u=^ zR-0@?e9S<@#~7vm(3{2p6YkfP-R2|9vsY zD}`&_Adne%4(M!jKsH~X14>u|uzNV~g6@GZTw5fx)IFpdZD`?AKobb%`TO$4t?_~% zZ??Z|BlFiSpITY(H^Ef%29f$Obk9;?XlvMWeKF+l*OF#xiG^r$dZF^PgGgRgpr#Os z;My8EW&hx5n$X(B0l-%V&AAD>)&3VuBu{Xjwu31pO#(ihyM!;TRlI$j_iQNk$_Gz| zPkW(fiod9WxzqNZT-2OLFYGt^GyaoUpF(t0qbAbT_d5PS&ffKIHE62&;rHC~@P@6P zMZscvRp3BbHEZ`qZdeIk^Ect1tmlHu=7bP_DYS&Cglg{OsIH9r!%G*I`_*^i?M%yD zWQx~9G>{@*HK?J^9F8VOY{%n+JW}SH6DM&#cZi%zBT1`s}4m!dypTlR!NNdS&PKgiI-GnU6V`zf#Kn;G6Quy8ld)-eP)TS&P^I z8b!e9XD<#ik$G@RsIVS3I-T!4$<%nT4!Kv|=NahhwGhhs>u18CnUh_
#5jVbI# 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%0D?Q9xuf?`o7!ucttg+)c@B*$Hz>E+_?;Vr}}) zbI1XfrAP0NsCk0P+w?&1F9i2&UUWs6;I)c?I*R1tlv(DKnhvRYhrpZ*7~W4az67et z3caaShOwAvc_qj#m+ixY_mD@YHp4DomelO>;}bqIZlqWOs~dX_K6OwhFB+A-ZfD4n z?;DLC+M>s;t5WE?qB;2Wn5a*n#_~R#2VcqEO^?h9Y)|_(&z!5D?;3WRg0mNm;4Y3> zCB(aQlVcc$!z2~p7{6fj>Wu>iw z$N*E5cGB>7?Cy->NEb(RM>oGy^d!v{Y+{$C0gBgyp|%THMeU6$MI>m6GJCLmEe#x( zHm~?4Ti{;V=$e6th5ginM)kTjaFFq-3VYm2Pt(LYoPM8)p{mv!wGQTf)+kKf5T@C3- z8^CXu-#_Sn+Dkfh@~0@)RUN|+=)RX2d9wU_a*)t{)StZG4aI9&g=6$TV{%%w?Rrzd z4LhYrZ|ry*bB|q6=k#J@HZhmB@Dws`3psza$a7MJ?*zZ_uIjf zIYsHFM6Tx_i_bBRu$WtTn0ed3Uty1V)K&qYp1x|>P&Z~fYT0FWtMkswtG3H4$1Hio zf@lUnRK+r3!&Ex38^wRL=%3@x7@Wjzt@#r=oK(RKZ62|*qel?Se*D3Furxz@VSU%gP8-$PWpe75sE2mxm)tef>pY?d#Cq%t*JTqot`VbX}4UiAWBQy z7TxV6ztHe#@>7E0ajp*6FYBfzgnm+OuKH+eNfv&^YI$H1-3BuK-EnypxP4OU8yB`& z0hVV6zDpmYxSW1=m4%UcvTN#LL5}XoC?*sKNsKRe?^l|@LIV^|w96~}bL-F|rguFutxgxxQt_@8gdI7>Zl*oogA<(fdiq2a;PzgYxk%J`SfEoW$Ai_uI2;Q7sxI(BU^Nf3 zAw3v6RYNSJkL}1b($9lh+}qxNVBv}?UBRDjD@3QC+1)LIqDW6E#{7ko{)Gm?&>>Cq z(zXzo->txs?1#vis{O5PoWeTw^Am^XTLbAcyqYUCva=HV6447w>mz(EwSSiU7k$lL zO`^x*0)|xlW}1t{ki&i-Yac?eKQwId2JpWmz!z z1v7v+;3g4h>HfE$-l%1<{0}~#D}8F`>}R$vl>)83iH%IA!+yYMPG0kH*GI#nao^*Q zHW!;yhb2)gP~EYQ*7%)C#_l^x^?spFEjIJfI)!h+o3yLJ9(Uf=mdoOcn?#6P=@=v5 z{4c@lA3RCg-H1>7H?KlIuQMeL{c3Hgm8KX7Hz0(NhNWz?G=d^=Xcq$R{hsq-Mnoad7|RAD;=u+ggHj(Cy^&swShV=Sh-ktEbw zPFVg8)+cKwS;EtCdnc`rSHnzIl~;^=UXeTvPn6k?a$c8zu5{4hwoKqsf4f=ZDW(am zB0v{lWX4jM_}N(*AP~iwdpq15ZysdAjr(b%bGP1a`UzLG^YTj|+`HKx`&MzSCZ*C- zNVNAY9)n5{=E;LfQ{;x(DBY8~=D^)1k)?+n0?aUFjU+S{0}(nJeI_Qx*lY!o-d`e9 zE23Gh=TQe9_r|sQ_wY<(`-<@(<7frhiVrQ7N_=~l2yND}Iw<#ZOTG3+_$={&FoI9( zWOxP&oCTRAYvx8frl#7|g_#cdBY9u0-)b`ue ztJiz*3-M43d>D4egx&azv85IO5vnaC42?MvoZxwDD!mnKfK@f`JWzcQo4f4PnsKiN zdj1WGX3iM^BArxzAAKKfkuiz`SIKT2Hb#06@8Z82JpE{;%DBL9%YbC=v3LZGhE|HY z1y0$KiSgqxF7%YJbPF#&bMn<;tL1mIfm#Rc{WI=A6P3^z(0{${zLTTAL#5qr*KWgSOuB-=%z%MfKtT>~SMr_R;&}JUp{3NS99Y=B~<0jQ;uRTk% zv)aYGvc@#HgUm!vlclWM!N}!3M=Rv9IDyunsjFqpZ0%>2v++*)=(A>ldFaW9j(Q(qT zr;CQ^gT6mw*78okANX1jE+)|n`+wR-z8ST#XEZbx%!}c0(556VD4{JkrxS-LkRW$Y zWj!r^(+6$Kd^#_CMVUR4DBZSy5Ae%<|DD9wM-bb|F1g{ZRt1s|iD;UviX3^=#d{qq zW#o$ufbot#doM8`fYuNzyKpKvJ!`-^Bixn>Z7WiC+yVoQIC;@uprtm|&wJT_(HqcY z=3#ZvUgV9zUt&&`tcsbWJamYed3=!?>fNs^Z3jR+!`3Uik0;9R{~3Y^L8@zSfLk=W zj?+zdT4K>H`?1b_O@bq27SBbp$I2^!_GzIe`t3~d8O9MFL1&?>t#xLd#*-YYT~?0D zAf&75Zos#|pl{;8rUMs!KZQ>R%I@KDz|4wV!yi zjNFU44{eNpQyoK^E*Qdp6-=+t-Ks=_ERdy*`q44b@CnG$SWGI@8)d?a5? zaDVG<5emkM_2GRxIk^vWDPE&~^R+wnzv*mUR|u&IVYbGSiDb15mIZXOyAgYAW7T-~ z<{SBbkr3AaMhl)cdd`Uesww@nV5G@{wqMbh;SBCbcNpj7SiJSAZ5 zy;oZPmUapxBtff<(H)q0m3W^%*SjqL%K)nQ#V!S;T!e7GjsP4#;@uwn+`&ojf<=WM z0sO+}J)IhwZ)!63dsUe!m}}GH4fb?NYo&n!#_brXG_?e-u2PdCmA5Nqg~K>^yLw!! zX4`9>?myb)`Dvr5&_y!@*2Q0a+(V<}l>kcu)Sq$Nta~lX?=R?sn;mIeX}6aAdZ@y=2K|}Db8ED-h#fo} z-Xx#^vxX4}SgocBHeiCm!DfF?V8GM8CW~q>}nFGQIr|e{Vy2}{pSKslqXC{scibH^#!t0dMBV4T9Xu(qy{--9O#a- zV*8#Py+3~(OUbJ2^3E#z%M)me5{6c&w;wyqRp471OFcdF|Gs+D9`=f&f z{~q{q9JA##-FE<10ooz{KI5FuBwR>X^TT<>5M;qm*yCO?&f&UA0g@*zi zj@2}K2#=t13+4PZyL|6(@zB5Jl-DPLI^gddAdH#Esfz}=qK!@C@=#B2w zZ{nU*w1a}y)GWR7P%d2O3=*MFY|u@S=awM=QF>0M6;@jda>`|Al!U7u#;J4F^|#t) zYt&RE;dqCG`H-;_od?&DivjW7X!)8a{$b()|9#X=|LgN1{EZkh=ql|2taan#uINO} zM4D7_gzycDjERH36@hr*I+Z|TM2eun1MVWWJ5`PTn-3cRD7aURn_*GplfO5L44%7C z)LkUVE#sLC&57ZVu%ybIL-oNZ0Ny?AS?eUYJJ%AH#$q>rgxaZV#J?LJOU^Q2LQ$(; zlWuONLoMZ=xj2mEVtjpiGllO8%M6C0yTt=YE12>!Iw!dqCI~9gJ zRD2ag!nf}^v=}_`>eAroQ(D#hfs*? z7X0;&?!A*a{)=zFLQJ`t_EWGBtx}H6MX8b>&qKJF+K=cGZ9J@=HUN^$SMp!rQn+os zZ1a8ZlHruskB*;HYPi{&t+jnSv61pX;h*S1(FdI<*tkBJU$djfV zYT?l0*}-s~|9hAr$oby6jRgKP@Nh|;k7WazgymSbM2SZ;Udk}u(>hly-|D_%PcZr2C5+!b? zXfNXil+`jnIdN1Md=++f7&#Db%RF;5dO5&t7_E2SY9@Vu+M#j(n)|ly06fQt4;lC_ z^ol5jDvHSbM;i#d_yORXKV${-v!lDHE^@?5poEQJ%rqj^;2a;cFQ2`3oWe}&WlVI_ zoDhvLJCydDl??jkAGDLdDSL~*@KRmbn7R2`# z7G?S3ATIIQtX&#(yVCrU?~#_^-lNgYwOao!-LOIY)~TNQ(amy{18o1SIcv5zTNELA zKJX!FT)tjJgm<;k$BG!JKntbg2Bg z?skuH`|x+3FUQRXtcTC>JF+Gu0GfV`E#x&Q?eAluaixjd`}1X26!(iaQFyI6r@a+$bhVjNt`LPP3=ETE=ndkk_+crESnEZ>i4V^1=h@bs9S-Ib?-)IVpZa|v zxJdYtpEcnRSo$;x#9akJG8W-Vc`X>*r?MkmH@~lA%u7GtJx_eRw%BbC&isG1*K%CF zC4%x!p`V)%kpYuIdP0Q(FmAKs-62K)FYNBt7Q=Xw(KX&b24P&>`Yd35J9St1`&)vr zQxBuw3}x#eyqZc3lNbmi7J*VP;iQE1>_-sf`}rq-RBjf&NU&R0w#z3n_aj@2>BfY) zDx2Z%Ey6K%TO1EMbM8_vm*fZc-1t<@JYP5qc$VKYH}rp*+ojDyXJiw~jUb919_29CVH4d-xuckeImOQ*gs&#DbyQvSiTC z)5E}|HWwfB;>(D!(bWTvcQ%KzvyzWbYG_v(dpt?toe;dHbLG!eG# zQD(pT1a9HD)rA$%)7$g=kgNNj$2%G2>Cr!@oZ0VYo*?*^YDeaz$WeDz63n8`Y)GHq z=K@1%o)v6C&h*U(d*mD%0atX!F@|w3w7=r=%WpRyip@zbQeGOcnTxcXF;1Oi4jaVO zLa-1@h&F)c-D$0eG(Aln0Y^;xk&BA^1QT(q^ z^B7MVLl%hi_(R^wHJ9=O&kO3qy(p46FHv$C(P`Y<>S}V&HE6NFu)_4@^O^}jsu1PT zBelj!XD5DeQHq!PqHx6R(tQT7K;hwj_k0r|pVFB&l9Xcd1FfqC`mZ!4Udx0l%^}%6 z(W`|zirT4wUd&^HbD*0JlWYbPx12t-BAZ#D(mK{2T7g%EXQKLG`L^)hl0jboy8kmw z1rmHkkS+8f+J#Cp7$xdGjs7Gzh`s6fOa>s&XY=rY_4UF ze}>+()?GCK#|blvGBRK=FoSXHk<``Okqbt_1Zxx!751OAGE(79sxv|0p3vK=*?%NhS^@MgFfd<*CTvT%n{xiRiu+H)@R6iUNK;0wleJH(x>4 zTrxadzp5eF0N@KBOI!548qcdK$zS(1!`UAe9ox=(s05oqO!}qH2P`qu$rNLF_fX~I zO>6_^2o~a5WGhO|7(ED6B(KKM(7zfEkE)B;reFVMLQ>aw(O$T(Z+Cx&691iHBx-d+ zy=$>McwWkD(@(=l!$0AdP?nHyk@POw*LaJ00m?zvbWh#AFjBJRt1?s#GJqxut3%~J zqt2VkBx|ri!kfX>#H2|W^mmWpr7iR2_6gmX(jQimdt_KVVHN3*padpn??}JC0 z2c6siglLi?xrV;C>~s{~o09tG>PBWm|6twxT&o&Wh@r{7>~i|=_-Gq346~FTuJCpF zU;ZdPz!2K{5MZ-Yhxiu5N3HmNmkk77bN*uRCMAZ znn6c;vn_37s{#RegRphtldsrP^w`yuVoJ)4y@o`UU3|o|kvb+7DcLJSBJz^$L2*jBl*aF2PI}hhC=o zi|Z>Jw1JQ(y4eQco>WEh5|@Hv$bfu>UgW96r&%6Xof?L%-h1nE|7+xj!wrW{0WD@m zDQOreiv8j%8Ty`h5^0PqtPUuePwBfrpxH4bP?@N=;U4cNq2c#~wlyu10fUvZ=%n>+ zd3x!$k~5oP@8Ha`byblaqtu866kJl}4ZxSmC;bXuw*8oMEAffeP*Qr#;W2QI3%jh8?9B#fnZyWL(6Zk0;0XD36&NNXVnN!ff7g`E2$caP0oU z>0gvi_9uc|0EBal77(dgae=;~^07x!RFa?SIfvdf@4lFVRDskVaU8D$Xqmg4EE7S$ z?vb81QthE}d%Z{RW%1IIcXucAv|VLHPVfAi0iGjRO$x{ywN5}&hnByc*{-_(m)JvU zN(p`&7Ac9I$1xmkY^LNVyD)uGF-v^c*-;DIU-YI`+i+}DPA#<;i;{>^)wk6bQ2fk1 zqmOSaOD?z;@p$6iJNf=C8~+j~!!-<7E<9Ig=LYwMcgtekD$e~(5WvtxSHzanryqpX zDkUxSLI12wilT>*G*@ta=8S`U-N)mZ!AGfcoQ9v;;MeuqGH8kNEb@DvTLwpNvyzJk zQitzh83R1~G?an-#on}e$DG}s6t(n7zDJ-jIBBY%LC(mx$>Uerfo~1@K-jdx&x~LW zt(oa0J*?KHeFE}~W3@X~WX3K2PkIySQIKx)_eSi#l+g6~8NKZzD)_d%iRGc&VY)b; zza1^LwsMixjq#h3-F0HW(BtNvrx)L$HQsiEFhS0e!3>xPZcAT3{9)8?z{YPjupdS> zi;sBw9g5iT5H4x z@xFFfcSG&SYsc~axb*(1y@wYX)0tl3KTi%(-|7`)6}0MRmiqjC4Noe0ANyEShJ%rd zNN00S!Z!`G!_@;Yg;LfJ(Z8@xWcMz#RFss3@0P&hCfTqIFt*GUO?Z{1WI&ux{`zlceS~hCXL; z&O^y+VSO|8@T1?gf5nUBKdq9V5vK|@nIRdF)alvHwqpRj%HfIS>nw(c`RYhs<( z75$-XPq(-+;A`$Ri+7o@!cIurl;3CNl^p^0G@GEpH&6hTsC01iDka32xQ>XncSzfu zU3YrXt8YeH1SE9@CUyDHTLeTe%vjB`MrV@B8~Zi}$w-9!!Cfi*)s6>YyWCw9iI~Yh z)mo$UDKiiHTR(f&`)@aq$+*zd`hZS7b(j_=BP|&Pph4tVu=8&*okCQh#)t3(Imt&M(HTZP%E~m`TLU={SPM*ohrQ>StzxI zTGo5Qy++dg_9AzECKj={qVtopXJ~i)&qBL(rKv)%e5t!6mpcy2!E1}VB%FoJnvaP>md;7_UIe|gf7)>nlZ-6_c}0=xCg(% zUH%B`NkX3)hjI6*SOTzIa7_T~N{3O;)Ue|Dt_!pgE!fQA#9{i|1LYngH0W`GUCu_$ zg73W$&dTSxHVT*(@36 z-{6)}^yu+&l0{aQ^X&gMQ^zz@n;1M2EoznDMua9)7A(kLtm~=b?a?Bb&AriF(1TDKOY3FUX1<6GeA3~`X7n;e=lsO4aO+S*gZm-Xu=|J!k=+6!m`S2F${(kj# z;z-IuTHGOpyRBxX1FSx9Bk=2&v18%y*H-O3|8(f+{_G0AbRaJ|@iFzRF>`Otz_!I- zlV%M5^F+DD$hQKDM-oY#M)`UyZsAF4MCVXN`Q({Do}Uw4tKx*13I@fVQ18*N)iRq7 zdRu;_d^J3^Hxw#j96zXg_#|sxB$F2SuzxPwa?CjIc`dh21U`Ds5lKpq=Mn|y01b_x ztB_T`*qPNZkzLDUNTlXVA zP3cFeQ^+uOoS!#XqCgR{Q*=VNkGNwrJszGeyljXlUCv-}&Z2&O67rAj-+UUL{?#Q^ zX*O^ivC}3svQ{0Ers42Rv^3sLeqJj=7cEV3nQ;f;)#_|(`a{Lf;|dIN*YShc+J2BVdAa$HSTlL;Zr7l|Uv;nWPq$@K84Opg#FL9s zT}M2&A_oe;ZULXc2ow#fQdRM?PTvb*#ldWS?VhoFO6bxnSRO00MdGsRtUc;}9R4ab zP|LaG?N4(mGOD+ya|(-%pQ_(GVs}t}5dRz;AEC4UD-$aVW189eP3*bQk0cA8*J6MB zUD(B|JAX<)jBZ<6FY`X@+|TPD{PdAk`zi1WXALFREZr?LPJ1LShXvx7!wq&$&R^6M zn$I`zFQ8VN|4)ao)>gz>X>%=^j5ebpqr3u4M%%1lh}j_=C5U0VbUkVqhP>8~7?KXw zB9*TdI6%xZ`@PI3px#FGynvLVl{r|O{WjtqC`fFdy2q0x+nS`xTED`B9N?rhz@zJw z+8x0EIE%QI`?l&5C5JF(f{)T}tGrcUUL-U_F=`WcEU9+qTJ!_q-ZD3D)DC(2vg>@j zkNO+vQ$F7nZ*2jt)#|CI_p+lS96d$V`-T2*(VO6po-^dc-avSn)L=z+@2R);09l4k zhOB}7YUNJ?VMgkATALl$K;|fH zZ>qLjmY^Mk5$h%Fz+hBqaMu{S;hZ-aB%MSiPb(iI3BHA}rFsmstGeAa$x>fWTG1^`@^|BLaY`jgd)*tC;y>u9 z*E;Yrql%>Z1^tc)y6{mM%&TT-Q~)?45byi=YY02XTM3ufDk86E`c^U6c=k1) z^81rsX7lep^uA`@_C$D-n}@#L74AE)j0p|d&3{Y0w~Q*K_ginrz>@&eP6|hKnhoRL zEm5NL9Q2v7*g=V9Sp}Ks9-_GF+O%OewUrre!clS*;=LxrdxwD=gYWGx+X-xMw-z+W z!dl`$Y$EH#Bw)_8fKpawSlEEOahx%`^`n2En7uyX&=WV;7q1PD!*rZtHGIHijc43G z%pzGw#mrhEQGQGy+DcLDfIdPC>3aA+F@{x0bh!EU&V{ngj>QpZ=SR6Oy#)Q zUXSt0jJ|x5rC%KKfLf2siZdT=INUBXj&dc{&-<`5f_M#EgJo{>w5Q8QrTyl17vM`5^KIfE&Ju4{+?B7LP#h|{{)slskS*% z=x`&cS@c6${uzkrPzxeKoP#-1A?~?uDzRz&tZk!L$o#dMIHUoR?TGUVT}?NOfV~^=JpLGPapZX-b&+lIQSwn=2E5NZ zh(OO1e$n6eWRyZtnH|jqZBfGGXYWKa$XX<#jSnA^gwo0i@l4h^Wb0&t>I9l<3}DF? zi|lGY>&NwEKF$EYVHS{EeMyy5)<~p{aaaoA)-@ws<3dqG`JKr!3(7U2He)Vz3Mej|2z>tRcVUt;truinVqE zeHY4Ve1<0XsFHzrPxq4nA_f zZ^+>K99-BBuRNor9(v1Cpd5s~r9*4f;3i_}ZZTIN9Cn@%H?0xB2u***aOS!GS#?sk zO}d?GxlIm|e(2Fr5iRFoiT@=!kfb&h(-BzH$Op=;{tpEP)pX)0X_(}Sb8Lytv=Clx z+;#QXsG7jmzmb|~%)b;G`_1-cgO0yeD?dv#;}KuvY*Nryax5}mUjNn?AUtk z(rTygN889bf6739oAr$!QAyw+mg8q`0H<0t94!b%P2G)})58$W#=`SWoY!bY4k5gu zi{lKp*M0KE?>kF)Br{LezUDSM{D`PJW6bXsH(VoMjm0D+VvP$Ev2FpR(}Fy${`a0% zO>a4PK(TuG;q>Rm!AyDAzNj2cg@fj*QF@a*3-$h+_nd73V2@cTn@=Kp$-}rjlmIO- zAmQz@|Elx$i}+zKZ^VX``r34jw@SB%eR#SAsky(eq(cbc_n0G=JlYX#iO@x&$L#1B zwXr)7yW6a#_4{iix{HJ_omNgALh5k6z#2E1~seQ2& zskbcU5!|yL2me{gPhjvo_za@MQ@hAm$b2{>4&h{jlEQ%fA4k}r_xG)TFTdJZpXFH> z*jk%%GYOk#AIWRmHcgw3>eTXh@tUu0LwTOR{AHf53B{aRd;cQG8K~I%5ur^MSf_M0VSAe1&_Qwop?(KY(Csw|1B4_vww9X zdB@L92~#EKM{Kl}_CssLm6Av|BE})9tyH#y2kYIxh2`^OxO|rx}_P z(^O`Q&_e4>y<$iuh4V4cTGHVrcs63pfUGwa8AuEiia`lr>#rGZrSE?gkI<3LE39PA zWxm)tX!VNJu#l~X4Gbi(ftV?JrlN@TG0-i!9)YYIGagd^E87OugmQiTtUToS@|TQw zm%EIhhWt*>RX-ibPIjG0EzGsDZ+FLw@gSQ)R=Z}t} zbNO{Ve$cm9rCuMr=znE06xO9b#F?9(RW|js@PBbazyl<#jC1}x3bv-GNByb#pIne= zM4-3IkmVFhRT0vYvHk)%13M>Rl4MFN<42x*F=4r z+YV?CPsKF;wpKDRr@uxQj4M3@Ps<}7^R?EB9^js_c=~9hnL#>y=bnfopT-#_ut>%A zts!n-%n#X1S#vSap5&j(=GbgKK6!dF%pwwMr#}s^iVN$Xp+pU zg(yE5dH=1`)?Bp9vl;66={ zv(fO3)S(u-oN@#?dR`F~ho!_w$E5d8vN&Jp=S7|PvjntHw$N&h8^x_jf7x79BVw!X zW^cuiv0(-mXQWe|O{cP$kZ8^sX2VbIIRkL1pwHKSvIbyY>nLGsSX?sslilfW4c+YM z{DV^EQ!SDk7Yn%$z0I46azEJp_g;%%_URFq;Tan9%iETh393;q@QJJGAUh|zYpIox z+A+iaHPwarr4Q4ihs|G=hOas}Z$XR)hs;i2F=n1%JR$G_3$s#l=Kxzkq`%-e-S@!$ z=yY#)PCMIGJ34kdrSjZiREzM$gH_=v^bhlX-`-vjVwTL|YpWGa&TfPGXDu35v&{cm zY@0H3;(J*2ems^Co}NHo*IWzQ8{|xX|9-5a>bntdnBo^VomH?tj)A5^J2xL9S<%B1 zJ*;fmXXa~9j#N7ZT(i%UGV6Nb>$E3t2=AVR6KZ3BE7o1AZ?-_a2GiE!ZAeB&&z)gf zlHqTO2GRUz@Rmtq`|y)0Cw=(n%dU;V)(e{W<;VkRkZgy-TsAfcEs%un3%G%_#JAUM zovN(`vtXsu_p1KPj~b(F1sDOAlh0<3AZGDM4%|t!o%*QdR{4D4hLv}A=Bok--_TZ> zi_SEpJ+JHh4}FzRKhK`D9onAOYc)1#OAv7acRP2`=SL7d4+}wg1tR~irO<%Q;~O1B z*vT>^gMBZ^-dKXzaXK9GB;=Z*Ec1R?hs57u9Xw9h2`1e+x_h=zr`8B!GTo>mWgn}I z&e7gd?afp|#{#8CwZm2C7yhNQTLbUs%+{OADMVr)mtzGT;dv?B;I0g&yrmpuZ$Tmp z=^*sua@_)4gIv}*%&!F#NZ&V99cGI#JohOmJR{ZdTplTz7i;$Voo~VYV1{Qc($?m8 ziqk+`HK8Ltfww1aZw1#OcNWlr*E~ZObjZ`)4>wY5dexjs!Do_N*I2U2wmN)~{9m;E z;-(ycpXSM@3$wPNK}WE|&3yzr+4hnoKJSR4^d_6G0pc35p2KynluhKSy*VX2*|l9@8iXIoC++^y(R4Y+wXO{doy z<7q9@aTq7wE2!~Wf7`f-^cV$t4#?_Z?EtwR?f_MqxtT^4x?8c`7~NSu#cT%fAC}!q ziA2fTJ~Dq=7C?DeIs3}wtJRx8Y)*Mk#+B0+xYUG1i-F@gXTGOOd~` zvBj!_@-FmwQ%3L@&FhoHzniSBAJzS|M$S&m5~HZBvPLexT`vZv?b!vU*pmdRpdt~J z`}p^hEs}&?3P)pM&LY8Ox^drO8+8``#LBRW8d{oj&baJT&A}rrUdyLe?i+rrJ?j+R zlxVmZ985QZlb7axUnG_;L--i(8*GR0gL&-ox;JqElyTpN!|jzO%Pya{h+4n@q0Tf% zP5y<?oLx&KvXPEl!0I-2#hFr` zRgUZ+a%tFFTlFFoKGw_aCy0&Hw?pLGDLynx4*8(q;pp{0Xx@P7*y%Z*7s)2?1(g7A zYp)6|vJ>*G1vv=E@gnWNgcdLPyoY5_K1}gUc8NFs7+d+7Wh^4IzFG9AX*+jGW>niB zaWdQ)D68eP@8VP4Khsacy3nLBr3hNiQn3)hJcrU^i70_wpe5JcG-flaZbzfC=Iw6k zvh01{4@DfsLJYoZ5drmxX@_9jdfkzQ69KY&9E%?SmvY@!@l6Fv|9(=F!7%M>(LhpDGIj{3 z)$5hQl6aMu9-n8@U-cdtzg)Q1jgjfujt6<7{05SwEDpgXk>vlGU%n_W3)3vCpk<#P z(pzzUX0px?y!wjqvPv;+4>}*m^Dd;;Cv+E6K3sUey?lFMsQat; z*Gfdy-T9pzDjr4uiAN-XI|p$$*@h;MQ>BNkk)1m_<<0IzD?-u!f?ol<*DL?Bg>ww_u0TDGO@? zV0nz2T(&F8hl1ukT6&zMa={GG0&qW7$ysli`y!J#lARL+7KTb@-#KVN+y1{OL+ehq zdqS@z&^}uocp5Xgna$1r5xr&gH{RMI<&QQwi6D5>d0X3-exD6+{;?-Y^|qu7P~w#; zF{g4h`_EKisq_!?r*hc^nD@@-oNscLDs{L1;%s{od+Xq1X-`rUfldum_!HfAsw-z z2d!e!%3xHpgbSNm$oi5!#M!<+ITMMT_D3ovlF6&E?<&WB1b$N3Qu!DKLt*Pb{C?`> zOCZft?h=3D^souizDwy}#4cqU?h0_ntuiB=?U0M!Y zd)rAzg3%3GLU~)>oiuhXKir{?%B&J{j$y-|Bq}(KhV&^ z&{X7Q^+nR^{U=9|^XZ@2jOWy!skQZ>yw?ok`KZ{=B_(kn*dPwlh;@C&sigX;ktX>x zIk6%Nw3ZT^&q9Mo%UDA2M8P}S(Cv%F{VjU_kaN}|WQdEo|7&6J@VLz(MKXnndW>T` zqjm7^h@5m1KZG@cn~GTzOCBSK^kjn)eb4E!L@u}|ywULHlrlJV-eJQb|cq;9f;KWS7%Q1Ctx6HHofbK9LsZFojUUiML zWR2`iVowkVLs==!{8Q)S1WBDk3_Ej;D(l!V9PA-He)RE#l^x;L6S37*)ZfO58-ZOu zOkfoKIdK9^m#UabMv5_m{4fRMR+5!+26h$&KZtq8VD9&;vW%`F`TRTPfV7BtX7zb> zj*~k@O*Y-h`PsLG3>T@?6e!8B0@!^~vFvXsJC-~P`o>;UI}Wlw2~sGQC~t7ow-Y0+ zOI84FF4U&twESi*55p2kqf^Tblb`goLdP<|KbU6{Ea zmUr|N#jX3ufO1eA^oW;qB6OaQ;cq_z-jctMGT1)1m-o?RjzCKU)4tZ1xbjoQm}y#v zE*MTo=wcOwp=tie0CRSerrwX*QGH|;-4JF#QP0j1Lcg2W$FPLtbVqB*tmh_e)VuL+ z_7EMrHq3x*deB$qDuDRh-{rY7$-9k-RWtBD{9h^9JdHt9#~E;|_*D~BG~C@g9A27} z4-xsh>u>OQk= z_hqdsk5j6$Y*kzi1u7PHlC(0k{FdrKW9dhZFSn<4tt%&tSz$~KrgR63O^FwufvarvS3aUBhXM)mLfLu~#x~KlVf83f`uTRoO6;DGZQt0X z;_#4qz}M;VZ$kq-o=m#>Va7-g);zStFjD++a(^%Hr}ww$m4Wmh z9by}oRC`t7?_I~o^0_qfylCs1e+Koxb(!T@{IeuoQC%#=D^_&J@r|jSl>S5-CCvl@ z(N9rP!92~Q0K^cJWwz9ypfxSaYgqy1ZX}6OiZhL=`TK@LcHO{hu-dC$1cf?5d_2`) zwkbreyU)J2$%f#|k<>S_lJkg}ILCY+9U%I5%ywB1i|>~1*3Q@<9;TbKZ@cuH^G8+N zl=6sE|CC(9A5&ECD(K<9D;L%AMpk?evE;KQGT86f>a+84S6-eFq##<=I93CC=cBOa zUUi_@EbJff2{_qPdnEeGqKb>YR+g9GE6o+6DY?uAYWu*HU&8SFs$s-5+hs-z@{eha zI8rs{8zAn7pxEkHvB886k;2hbWIDy_QG`bb-!GV3%LAoqu!PKC5%x+Q(+ z+KY1JViWq~|(Omo&(ufsF0)W7=NYEwwf|M?WXP?RSt`2wWt z&%Qc5Zf!`-tgqq%BCq#KSq9I-NN+DMCKml*%(`H)c3Ry zVPy?eIj&_K{C)_i%`2*+oMnBEJHwI*@a9cDc8?=FmQKb?j87mAW@)y^zRVx;WJp5_ z$t8d$du&KnN>$#NA$m) z@`iZmzP&rRd-+SUhWBx8yJ!~qSS8!pW#dSq8a(kd=iu|RB$Mud-uf`-WK+pY<;|BI z7;lM--Q)8qTkL5MZ(-{jf|`{d4o)^E80e_^iIuedHdB%KZnvL@uYz70FdJ%2Hdqh$ z<**O9s{;_ynw*76wt?d~wFgSGbbWaR85Xq(Mc;HRfEedNA zt2d;3H+H>5((kibDC=&ifx@7JF}vhp+&eG{G7(KFHH~s`Ne{&b^k7tF6@44mQdmKI z7&kuPFJfX0-CWqo{JbmPJKj%{g2c#CFrD@r^!aY9N)i*EkgPRV5i2N%qX zUL=ML!kzu@Gz2y`8SIojUAbq@6|o0GJ)ICafU!0QiS&B^N)Ra`7CH#F5lTCIE$TalfrX zL(oB#Kx}dxpq}3k#%P{Uh0-_N54UMLMfR zQw&WKS^+*SR4ky_m9EaQKl+E5!lr%fFCPySw{?+-Hrt+{!#>y$P_P8=a3&iLc*=og zrCqEDmwCOFnoLcoQsg7QymPY&lLRgi1{7j^XNV5lW?B(!$<2hWU}+nc>)$fA%@~5dKg$OvgX!l|)b<=`NDk z3{16Mmq-H+a3RKGmVmFW3TKKus0MR!&*k04BUh@yTw5qwT=RoT97IsOu9tSHljvz6;kvE( zY=*-ZZlg24u_weMw4l3q!?UK=GrOm=@6VP5;-CC8=sQBS*`zn*OTJ_R#vrq~xC&E= zH=xhSj00E+8}|0{tLy2@qvY3I%FKD~nfL5a0IaPs~?Nus7KIT>z8XVXvr+urjwJj|*dUhoorN?@QBpmjSVi_a4KS zEUC&O8E8w3IKgAQI@R(B_%}{(V-;X+Z=fsA`oJ8Y>8{(+)SF}UZX>iNENZ4Gj4%v? zj~mkmG(FDSZp;2bJ5T@Yron_>mg?)f$Hy|g1|bZOT-3@(zP_@3QS%)K{Au7J0RV`L z?Znv<4z$3E@f-IIsrNk&CIqPa@YgrM`LC zR)*WvE}Kxy z3MQTo>CGB>g=^+Xw2tGa%HW4v6v6XnF)V>)_#xRv$JeE5(Cn20q{)Vch3 z%h&A?y3^ke!=B=gr_+J-CB*F6Ye#F`1HND_c?0fSBYn}wZDjBSx%mA1iGjP+z2XK( z9e3Xt(#7|2IMoadWZq_Wx{3k1dk70qhDH4)l6KN@EP4Z~IikqW%$W$Hl{YtFG%HT~ zDe@y+UAGr`O&veCPYSVA&HY{4dH33*C6;xKTw1>N3qLm{|5}<-9Aos~NV&g?*Pw}- zTQRjq=Pk?EEaXIj+q76XWq2B%QrS=6EyfjR)8>O;kJR6OxLD~!Enb@0o&QfvA_r>619UvxJ0u^4~>##nql^wEUH}&wtCNs;uD9s({@#0M z75P|wW`nY_qqC>Ve&qZXF7nD!yf+TviNx}>=JdX$$P7O((Wj3wj%xq%nk$Au`(YMHKbbLVjj$q4h;4w59ci5UzddGI;J%y`_a_k#0{l=OW+Q^LR2 z2GO5&)qO!#ED_b_Ur0MO=@h!`W%h+VRCttqH$RIVWi2jY%L{k z#F@gVkCn}@m!_WmKfEdR1SN&Ph;dl&6OgJ3bCQ4mrW8Zy%LtNH)=H*B54gJh(ffR=_45?iXdb@b`=Q6+4o`IPw;}6dO{RV!e^0o%05<(7;WYbJ zZdt;Q--&M0zo!PcAJI%a?Ks@Hz|>OPiFWnu-EXtuNJpS&^Ud~~FT1|hf%#ouoqamD z#tRufmj3WAuntjwBA=-@`(kW%C3XZDC&qUDa!qL0-?$(;rSc&byybhqT)|_ab+f+* zVPPBS%hy&*EF;fplY_MrP_M6wZ`==;^6wqr_z-$wuuF*KBA9!bZbwnA`^^$qJC;*q zL0Yfgeq)-BVmRHYzXHVh0$5kq`O(JFw7`i8ZH@Wlyo)3F{Q+?nlSA5#tG z2u1fFAC!9s<>-?b3!rm>vT29sa_CnTWBFyU+okoI%jN^Riw?O^ulqNyWlgbYs>x$j zBjzzQH8iADF{An6u#IGKO@er!lm@Yqa6z*(-Je4aseGw|=&<#T=G>CAUQt_Wl8N?= zm@s|O8*-J3MHbrve^8>-`em8vHh+wfXCENS5P{Ql*u({`s0t^*s5$@o!W?J2y;w63jGOc6m-Cx`V*?? zu`Oi{tfN={3GiBzu{yPRjo0GL;v$(9J%nOfU&Lw4U{vJ#1JLY!Go7Ane!fBR_ia%b zVHrMp;^Wc8;VDJLn(SWY#}lQdh#{sGdzc?Rv#)e4sc2YtX&`_RNKTu5vGY`S>>EAT z{_n6-gs@>~0>J-w&55{$VHFSS z(L)|4kG^~f3hViJXTbev#N5B-*{)&ZKfeB&G8vy(W!W3v;Td=P6Eu%nEyplhXDBF{ z`ymeVhDv!>%i@nsx{ug6GBvzHJ^$GH_DamP!5|j@A5(7u6@?SE57R8o(kR_s(jZDn zHw#NI-Q6X%ND4@&pn}9Muz+;9bcf2)ok|LbNT}c9@BP2;cMgZ+Ip8vL=icW&&z(Cn z1S^ytqdP0)_Le1T}(EebP@>OdpWHM6nw@3Jj86D6;MM+V<^pp$9NZiD4|`INNbf*xvO8> zcBK`e#^lF6#xMY~1ABsPf2B@M-mG^`BC#+=Up^RDG<@*CVmTm1=EGA6FKuyt-FAh1 zS0Z@to^MZz{_9n=I~x?{5Uzb&UrdGhsLk43!F z*#a$c73M&zk~Lyp0V`Rzq*df!W1&UGoqs;Uow19(I3u)o{MoFU<6@K?92d?luxNTI za&~a#uLSqMC@p&pdO7doi0Znl|>kP4(1t zlKG8}EbZ7#3JD1O{~shkCpS``Y08ItGJt;lyMLNU_WpKkdoFe= zJy;x`qXKV}M%Ytpx9NCCp z3hV6wt~8TIT`~330hMHF5=6J8pUIN}r!@GuyFNhqRssCIdq&Jj&A2ojK}af~JJvH= zUk0q#db}gQ4@C*UFKH!pXJi%k*=6-;b6zT0MBi_`FlI(yrtTnX9{J-%a1)&_`34I5 zPli0I%ORU1k>gmM)vr_KFNs^GrJZB5n;b41Wv(CI>o8RjkV*lEBHZBEG=jc|NJ8n; zr!L{s|5rPx4Uy0bP#;){*Vm|lL;0r!OZGSPt@R%(+-_Y|RC@=QE=vY-X$6m0@*yLa z1fKfo3%?=v34&M=`APu~{f&sgdf?6oB<+wwkS!7k*erh%=UUXI>87zul#gf+oh}Q zBGxKvU@(#$0Mw->$+rvuTY{(6+f9|9%d;JOkN4kpS3Ti1nUocG{F7Hi^|n1#q(;oR z-8749-|L#eEXmZ_+rA56DwNPfVK(`33=&E@y9Ek`$HQww9Pc6he|lF4E%reKx5ZS& z`5kjOtnbJ>JU1K1$HjULT`K7Kw=mYlG zFQUCGqyO-@bR%_u6iIZZQQFt`^NM?=B}>PRgbdp2JXk;JsHV}>oww|XuFHd%t5^jh z)7IL4aw+dYQNFw>kt@;@eYIHw(ehp;zJDRskLIdRv(ozJNSdlT_dy zjA^!dM2&eU%z=4Gfb0c!({}U#aX?82)uWTW+u15PQE8Mnb8jBwitGAigj)viQ>|LS zEE$`8v8p6>+eZ$z#_X2Nl#S7;f0(sQM%U-{_t#&WLM|)F=(tQ7B(QueNX=JFD?C07 zZy_5?zTX<8fSckBsjV?9YYdA`-$>UVi2a}w9nj%kK6g(Nkp7~;yG9|@hl*O*k>tJC zCja2vreYb8JR;7EFr$e#EPb9P+{~0 zyIT;%a||#Uc_r&{XW(qn&PV<`CdlQHaKDHG)&CSyh`ub{-^lq2n*4P2J+^KWuwkWm z96^UeRn)WGLjD_9h&RU44a+ZdI27ZwqsiE-;JJx)tWKNoQO}L@dzx1JOLYu%jsfAo z@yXM*Nd<(da@{d8q*U*pKB_47nU^`TNa*qX8Zkg+Xm*G*!8R8$32|+|T8HCBQSDd$ zrby1JuNFl`ZPQWFVYA>^bu9WU%iOJxZo2}c(}4E+x(1vom)2lE1Q$q~Ls$Lw67R_- zvXT6XOp9@=C!h$`o;srnN;057IPXPdlaqqzH_y#7jWA968jlZ6-^q5jm@Gt{J%oGA zh@_Im{6|h5Uv==Y4|MqJP#Nx%N`vTaeeK$hkmmJ%9||`L{Vv~nNbVXcRl&qE5CndD zTc9wNRrBBS_^`E{mTd*@%eR#@2-))UMl~u-q7W)SZeue2M)oWW2LSM@d)R8D=Z+thqJ3WW4v`(2=`7q3OboH^t0&99Of7wFdtrSrrA%z1)FQDynZJB; zKc~*?$Gq#AU)neys!UEe#>upG2gC`rzoUJRlP9aKR!n4m->LfIzv7EC>xr~?Cxd}k zo0F+3FLeM%1g{_mOMAS(uT4q!I1RtxowrA$&t6Hsa!}rs0TNsc4m~qS0>9N{-4su_ zvHPa$XaykIxH}>S%YJ$MjsgLQ!2U$}L!C>9bx<{aSxN)Zam;WcTRNPL0}llizu=R6 zb0UHnLDXvF;+SVN02m;^U@OM?!QG4Yj1a;QSzLJ%;IuNb4tQ3MUG9rT%|@P|EiaN} z+Nv%Df5^dln8-;hXcCoVHTZ)OeF>tZFfyIjd}*K>kjd8-6k?Y@jZ zev=?gx$>qgGY>}I-`^v#8oH@-=rdm-@ZMW4{Y$pkGPy(!*^3WPr@TqWKi)9GPbdVc z;|l*$f)ufalcduy(KG&nPH;H##a!~lXi`r2jp}Jp@rO?Y+&o^2D{Q;PDEkrb5G5hu z;q!J|)7x~7Rd_%4w->mXKAeR5)W)?>lymO}c!|s_fFox3O3R0TOHQr6Xo5NOtVzZv z`*kiDcpFGo7S{JeSK8=d?W^J5c<5NC{TJ&LmW}zPixXx^;BRR*9S?an&Lw=!1{!aF z)FT_CQN?l8;*J|snC^gN(E-kW2eU+x_o^v89|Sy-Lz)Fy#lImJ3@xSc(ZJ20sq8Fd zphVFm%Y9U6In?5fbJg8%BbPqR3Mr&|V9ysy1VqzT+b>BoVnIFFS~DBki(WMYR8(kA z_kcZ3dEg80#wOkOW2*1RbPKX?%Ab+yQzMl%($W^No1!l{)73aW)g-cV3sme44VOo0*tn^?ik| zu^|mghY)woztFK|yHDV${{=wcQXePq@EoU-0uBwVrLR}9%a7k0WHs5G^N$X<#0nYC zAB2_pYuLKxF@ZSU4wTf(FhBVS+U2ae(OI-$%{@_X2Q!(qVIi=6lv$EF5~h26+uR@j zIlv}WRsj^Mz%)eDFe?pw?0R-AyBrn*9h^YVETJC8riVM_ylf_ZwyNkgM~D2c%0L%} zZ+^vT7;J1lZ@XjV-Z%ELL4Ln97JE<=EG)-nQvZ-Sy*av~iD;ac#gzw?lM({*3UC1O z=YIBAmH9lyg@cMa)b` zrT?0rg?l;A+}uTN0w;AJ*-aIIFL$bG8uqAjmL`5Wn$3I7VxBZ(yQ8ok3te-G3YyS? z7)P@sD>MfBLJ8g+%fEZi;H8QTdrAQ}FSoA@_@Kq4Ebwb+bCCC#p2plKg^LY8`rn2V&ILkno)`kdm?Xh(Eyt4X!qNn$kuT_NovS01 z(Mam6$2JGvg-~Ci*z7P3a%!kR(mtf#trSYz&OBIiKqO@@X&_1Fci+;FQdj^b7xsZE zA}@>HhAX@EL*E6z|b!G%+Ib9j?iM%{71R#$YuzP|i zgI;Q}I;MRsF1rFovMW6EG;YRjSEfLmVBW=lcyh?a>}Y#b_uI@=Y_`s+j$WA1w;k%! zGgOIj#bKw)vO3GN8@t=|HmoPecJrJ&?szF`y5jnk2`zFg24o4YNS(VDtN}l>Qkv;7I+DG*~Ytzut=lcZ7m7aXTKyb6#Oa2 zKlAtUw71f=%`)zhwx_kp}cp67I2gSLPWdAx{2 zt{-X%bNIi?01u{dGt39Dv`223LMaC${*YyDi9C}p#`-xNJ*DSjImUHZ6m7-6AO$pH zSKxbq|3lpodZoS_rZ@0Sog_}inM zyZML0&jfj01HX`KT`;Ikl$4ejOOb~Dv}mb-E`L@mD*L}fXZq{a%W38Vg+;L%ucfKa zYP8>vskm8x@@Qlbn!_lNJA9HU#W2q}qDeXzR+ddV^(1Tj84h7@JDRNsSQJ0V(?<(Y zM$%Qb98wz0LyQfM`*ZqNKa39ZRY8n#=OTFMU~PLGcC<_o$u9jOv21{fzt%12xpAnR ziQzA0Dvf~$?-Tb0Ab|-4Yrr*NE$z|rPO2Pk0xwUT>3n%w`C$Adu9izUu%0PHMQeQY zw#`G1JPhNdQ)@Y2my(sSju5=~6`j-;NYHK)Pu(x4*X1RRHQCBnZjocw$8-n=Tkw6 zR@o7bRf=wmf7(6~*?jN6P{NRAB>OxjkuGnhOvv*oduD;Gzn}$Q*%u)+%>4q%+tE*{x ziq>O4IV^^PXyz;x@|$S8V7LOtwkH^~duqaCbAgSnbMHIa5Coj_ePS=JxK*BCly|I7JNvuXVC`i1Y6p1_ z-Lkv+V|@bCz(tn%C$AT&*k4zApt&AOBy~FJf4C~pdAsp`rPhkQzC;H zdq#Pn35Ny8`?S9YM^%&#;J6 z)U((ip>3KIieZj2R>~jbCorIAle{+7;(ar8uwwB$Y@xDW%fEu5NqkyENI)q4mlwlE zOFC?F=zrf_Hs#GKXe6&yg*RiT=n`aw}NG2>j3~PcnN^j(G_fPQduTkhp zHA1@bdG!V$YA7C1+dkjd>=LUp>d3~*XCtr7m(9S!NE#wK=_FWB!z5EiqRFZ}-q8b~ zZ~!z&7r>f5^Yk3bVZF*m0G8tb!UoS54L){S{k9?h9h|mj-o+=ydEg!qWYarXMO>)B z?(~UIC|&e`&8(B?)b8#yCP9; z?XQhAP%%EsNg0x`NGnZJljf&_dTf4cAYlETD&QbfX>ab^VoZf~uV3(Ue#qjK_;VE% zzQ+n|xDij-9Bm_Uebj_(*Etqs#i~Z`Z%3J0y}xUE_}`wk2#%HC@|ayA&b~PO!FaE^ zL0%xW;zJBSA?v45iVW7WtJqU{zj2oHh6gw|vUzfa(XKxc&!qrGAqEF$LZ(!#ux10>e5+ zZVv7_DU83$e&1%j6fid)yz%b-WyOBd5_o^3;QG|I^!qet^Wr$80ddvTz!{5UQ4tzH zg-?yYtbUg69eRz?q(~F^GGM<>;4qIw)3vZ-pJiD|HV)nzz9s3JgiHp;1~rOWFU%Fw zciCi`&#e`dC*m)kqvPv0Pqb{j7#2lVNIbbwf$KtBU~{glhhC3RV2+dPRk5RbW*G(> zbVnwSO6tzi1h5g-+FP3l`uOhuw|6k-_PloT-0f|X=Vn*xjTg(bN^Z&*&LXAXat8=E zlf(Y5JaIWhvX4akZdzEPf1Z*PZLSfB3;{6Z+-L=WgGyI_No7w#_0&&b6hEw3{7A`? z=CT?t-b&SO=P|G;yfBun5>2YxrbF{^Qu~#z93d}q%7J+gtYg{)r!X2e5glMZl`q|v z0Oa>+XkQO7#MYWDJfmEHHYJGgr*;}lj$`vcxE$?~__(9-!F{s)lOYy~fw{J;`O1d# ziX!VX8`(o_5W!N)pJ#V8mVP#qeo=-s$sxNnoBaE?mUe9`>Q&4ir7D}OJpNxlmT+%# zF*K|Z8&dLB@RITA=vEF#$}PoMbYM}j)~Uyx)SjvvFZ^>miS5Qxj6{4Jbt4@$MGCgo zr)aHUJ}_zS*(tB%h$`|1KVJ(!Wnkx(SXLO891uDux+cE$=iu>B8DMm6kesTY&R3c< zW-!NHE41>)s{Q)ri;)1r0+;{E^ht}WVe!!YS({dSB z11I|GrAU9iPN%cvGWG#qe!FT)pHU`9#@`6)27&ty@c*eqa9GgJ9SB(!bk5xvn{PPC zb^16umqsB@7@V@!^C|_b4!ZGG9V~-0%?0(TMBkqn8Eggs>(J)3-O52vTt8FVpDG_`4^N!5=SuPi(<9IfN+_@tF~4sv@3Yt3o0#mp|J;g2i&hHEgdn zadA^pTNSB!0-FQ&Wrw3=759^@*o8P6I#mzEL*qCgznL?aYj&)2aQ(m8xpP9j)w=gv zV~$lv3J3XhgjTK}*^YUwRtK<6obX$%CdNjxb#biAJ=#MUl;6SRi^pI3Tkaw$V#_l5 z&uSbByh^}amiO<-|3}$;CIbTnm2GM2Row7Rj{9m-P5Gtf!v7lmC9jj!4WJ>m-zg3a ze3PA_*qa%LJ1GNpze174t<(n&cI1{g+sM^KXuF9<|8cD6u4e$=v@vyB1YRSrz{36VtSCVR}&My~;*6mZ_yzaDCa zf7@idEo>$O?TOTw1LYc=4K*iEznGq1Ly1GLwdQoXbWLr3JwyI?@q(mbK;Y4tu6Ute?H&1HRu^x9ju!#;BrcyXk} zvt7Dud!7m?m;rqHyZ+{jSyFo-y=}(}-zlUfC$xxIAn@DXn@nCAjQLIt3vQ+VO>;00 zXT9b`(0V)3)As(nlH-b!N0|E}7AvY_Gf21Alp=KZE^%qA^z4jr4o%12Pt`_-eb_KrAl%G_p@;;;JiGLN7~(S9`aA z()kebQr?MIq`4NVE`e}a3o@T8bjQXA8Z7>N@TNM|hd6ng>P#FbByW{5Z9$6ks-!=U zbwfm^`2EOQivL?3_7zqF@H;*(KN`W(3>C@sWEC`V?wMM6^FYi_MpE-9iaoQCz(&G z*1xr+-|E!&{>ie(OhK6Tsl4-aNY~{2_aDYc2M6`V?0;x3HZs;es!6UIpkhm7S0wNU z2W%%6&25g4Zq{cFUy%DAvEA?{Q+|LRK`;8Gv52)#VEE1{>q!2JX>mRd zEK||66Hyn)_QC(l|9jirI$4Vm;Ew6uQl16i;0&%ZZ={nHg176uv2MGxsdt?ni?mM7 zl*)Y+n=PO-OfKFoICRvZ&PF5d=GXYu&!U?K(c;L{EMiM%u_uWICIaINoD_Rw^k6My zc^Ll1r)E`Ut@EBe_d8ut`0>CM6yex zAiKEY;V$p|vESrcvZ?c`BM784K?+}tZ%zcW9&}J{-boIP>vz`wSc#9X2*~Ivj>%D4 zNx^mxQliZ{cR^>${afS^Stqrx4HDiTf<&6f-U6key$3& zH>NWCo6vkPqs;WzKy^_z-MSH{WaM<{R6Mmoo#wvH-rt=^MJ3tJT2dg=)Y<0PGovrb zVi==eK=HrEyHL4w@OYl8Ue#`+VPie~u9@imU_1Gn`$sJ*6QA1E$a-UeaUR6y@XlvH z>Xfy&Ukmaz#DOyS06x5Klaq;%(+QE*4UrF(55(-IJyX)dB2iaM)Dl`I7-094e)75J z7-1>@3Zed?L|_}5a`P#K{>OR2tE;bO(YFy_$bHH+34O_A zuwjX&PY(YbB>JD*bK0nm%vMYTrHTlU1M+5Lq;Nx7_5Bvb6EygA_^MX^gs4po zn-G<`L#=#>OK5c%ztdnIhH7J(@VZdsNR%K;iAx&c&?UK2_`cWNgP9fd7e42!Xk;tUw zhb-C%m!ZuR2r6=rIywXzDC&pu#Sm}#>;&ubpI`djef?TLj<1!sf8-&20pCH!%CaSk z5Yp%GIX8zillZT{jtXM>zq@GsMq@xpro|XKr0{Z!PXq(6egIEEu)oOQYdMs}49ZF* zp*r&~4gwdThf|sk#@g*rpTsfNDzr8);~lXQPBC>nGh#}K2Bneli+GYVIRNHhS#aOz!K6X%c;GxM6M}%&$l!>#u zkg(8O8{@&~fZqzlqi5)x@++wL^H+wBzop&5p56~l8-3>aqO*@Uy04C8{{F>(y+5HH z%-zC~StZMik-?%Wlh;ByT-VCnA~YvRp^8ZaGr_e5BGknII#_Qo^hWwnl}@*bcLnp? zDka99*gKAGoOaEmONEX+ZbJ@`V_ms}M#L*|XRgBQgdbZIhM%Y8COLC$EoAAI83d+C zf(}9^8Nq4WUFMcZKZgC%&vgUGNv7^sAeu&sBq}H|N9@zs4Ak0M5SxRiS(}uJd3(L( z#LckrS@L+e=ZDNFT4qTKU7a;@_!fy@oeM60K3f(aMn^j_i?VY_> za6FY%Lka6ZDA)t*-4gobc8JF)CL{ZrEMsfgb7x8 z=rV0TKZDgg^7iZ@v)0Y89^MYxvh10}gFK+lt3v-$4;AfPX(a*kO|;O?c0_^xBSL$s zpLh&f8ei2MxaU5;da_?wz&%p>_|+Bme(2)3kVibMJ%St+4^o8}$0uq`x&<#)0}AW> zx>%YlsL<#<+DPU1?dM9O$;(8?7;#pRAHin26GSF$`%e5n>&zsR+YtGbn*LDN#^PY* zP$#WV@)T00ZaByYtKV(OBkhs*$20M@arMf1u92+eTBP9m8d+7aAlAF+RKx297^58}@xJD}*-61;Ym+_`}_} zlthppO=bpb1_hL+C=J@Y`iQfhsl}?k?sapZ^|jAIX_ITPLNJTKE^B{z+s;d6!&Hq| z6DlNFXtTAPz=9q&0E+&&%B(9rt~17jjV(z8+(fJX`h~qA14u6sVS4x7h?#@e#Z5%Q z8gH<_J-ej@i`1$wltNn{9B2y)j+2<4-Feb2w>KF3G7;1S0Oef?V7iVeZB}QKuRS5W zVY#MbPE;UFGw_+`omCNFesr+^OBmxXrcbZz%*PXK?2U@y=?Te?KJ{@P#{jeROXKkp z9(S58ajBnRF@y(-VaN3Eqji=dl^Q-ff^+GbwiVMU*o-U!hsGfY5~)S7DTzJ)1cbH- z-#?2Kqb&k;$DdPq>jcpWy;DgUkVl&50VQouV60!{f|c$Bz_@U(zkFuCHj~GnTS?(T zyU+O{D6u}^%hoC1o)|uBkE?=c%dnsLexr-nFEiHAGEw{NB&alKO|ts@VS9em6~N&~%@Rf-e~a~kj}4{Btn9mrHwNTTXkY3 zwIQH~+$)6M!J^~7#ihwaXmq_ZYVkb%$YrN9ac!!hPEwBhW*5{q7vCH(&5G$h2Ivmj ziQkwCeU!hOnV~^TJC`A@XEK{XtPdveE#+2RmOMgx*Avad0}pP)Sb?|vkNl&on$4#2G^@VlsnC|S1?rc+RQ=T_-k3fnW(s(prPAdNLt%ZBQ+Tq$bcU|jH za{=+b0Wbkdmqdpf$)Ui6^(QhZgpNY@-If@ALKUm}*Z8Jr33Fa4wG$QalkEp<%$qXc zX&u4QRVTVS75KBRtq#5EOMA9b*yICWIfyT0Gf0mWA4GS#x)Y>jOOB{EUizle}(d#OG^_JT|P0^^+?qF+9M zUm?W50*HTY3vFC*<{C<3NK$hH-(*S1fGvL-KRJT8j{(MqQ#45OG+32maoC^)3F;B@ zxOb6Ko8z2Yw)(|G1IiBMw(~@%&|>&qP)0r?;PoBR;+w#ye^w50IwLus3tWquR}osuf>1)T6^tJW1*zqatBK5n zhdd&AWx)Og>Xb{cc4KIZSAWl>0oom}6ZRs=j-@^(Z_x^r5d6ja&K(mT-4K*f$x6rZ z^V1e<@@jBjdP4M*G~nNk!|x&v^NG2WnglDe3hV;RD5t9&3C{Q_fha21PZ-)xPsJd{ z`V=aO%2W}u9Cwkrziu+pdmfk%JTyVm?9`DY@VHd}C!JX_QrsLL&G zt%TWL59xM6^bkKcsjwk8C%poGC&oLKwUtQ~=VrCw(y=x9*Z+0NUfR&_TK^7U@u`D+| zFf?4|$d)PI$!Eegw<5Osi-c|N^WfMM(f!+nWJ-yJ@BuVEeTXa_!BT@P{)K*J^Zg1< zP@ovr{r+YeYwqJI1=DbLrz_X^ayc3RM1as7OHLuHpV4gA-TpxLAS>JMoK|jnh#Nu! zlU0R+)VFV6d4!Q=no^;ZU4fb6Mja@I6^*A!B}Pc{f?$AlC*zOaNT~DG2$l(7y+hx5 z5q4X~CA%@Edp+jxSbRlAgh-CqCsxNRlnnKmn_+6T*-BNqb^p%V;nl8LJ1VFBns168 ztV6%4OJl;Kb8f;2KF+TVv~9l~`(Il~p>09wAAPG1pNloW;}d^yX7Zk4 zF`nbxS&xVUnkl#FaIYeTSnsard|wBwl@4q8(o^W#%k0fMyMfL@8rjzaUDWkZkp(yh zXS4h*BPA5cN~mDN6``QlM0EJYaf{V3HiH9;B_=wXq6)K}-px_t31nrrr_Q8e9BTfl)iuFXNb&t6147m~LM3)O_t~r?pH2oPwH>a~*MV>&f zz&P**X|*ZkzHQD8TXjIp#z2KiyMw(Ifw^^`A-uGSPzH}5!LIkDL z=r77YvU5iLk@Mj+S zK)yux6D!&pH*Jkfe#FhI_Nq{>Jz&^6`8Y2;krpz@_56+GU{b784B~NVCplpOn2pIt z4u9O2VLxvh3!OoybxKrb>ui_rVA+olnu&7ttEMoPD=s1}EzhFGrC%aXVAHCvOAdMr z`C-SdiwAtS0(P4vXW;vQ zg6ReHqi}ob_ife<^7s<+5`Y~`C$f$bohSRrzzV}rtVB83b9Jzr&TYk$CsVcCLFs66 zBW#>ap@ch>jk}@sdAIcqf$#btC3z|Sa{gNn1GeS!-jP96Pij*%vN(!5zmptGZ_lP3 zd;I?eK^IOqDco#=%|MpCFZp7u1i!#r|_?U#yv5u{9g&CPQQxP#yaG=d$m%pMfk0{8~s0{L36T63rbK?pK42wpfK zfY+U~$zVM~(-VgPhJEL)d%qCwon#57$ci3Kq)Kdo`gDsecqrA`nRr}^EBJ%~N4Wmh zh*N6iHtCLi%Lt&}^O8&fFKf(L=O*hp7Vnn{vJ+3vu@Zq%4Hp<228lhCW1@ubnOF-9 zQ2Ci>@*EKgYIl*^zYgU$LkOfR<$?H(ltA!=>iF5P|F1o4e}21Ku>lM!(1RF6YJS3Mz^fob?8s};(hz&m-L6`GmA0Jk9ypM_Jw8~{s;ltQ$6Y5 z;J3-8T^#seqWvNdJp)Ti@Bq%Zl^0b1l?=AK+JHF&_>F^1gw>gk;$gy~uH=47dxTHT zZXD-6hj-}bMsv@5-)thOTkIs|V{s)4#;36DVr+3gFde(?T% z!!Q^M@2WD;oQ}Hu__Z67a?udPJb^`1rvhVv)j?@?+}<<>PaOby4#kdLbSpk<$abL)dDX?d0(t ziRIKjdGN`!c7*ihTLDgJ=#~tJ(D7$oX*c1TRDly}rmDKcb;;`tZn5!o#D=V|q z2_n(-QfilYgXr8jJmIdOv_bkq@#(vc`aLlv{z{y;1-KIWlU0R`;FRbJf8NcdSDoLK zzNWSA_e$^@Cgo|1UM@qLN|&!-e2Dq9o6V8b@6> zWJkJ_O*s_750&C%I2O3mg)#PppzV%fysX+4RyW3eh-4xye;OK;HdcE!`GXrnyd6@3 z{q_RNTts#|z)!|3aPN*}Lm2A{L+(}AUtAG@K#dtg=EAVT_b;MbHp7WgtEv(76fgKp zTz#{u6q~DCJ^fu)s5|~#wf4rVwpEd^3S}wcsR9T@$%lD<-7R#B5h8x_P8X9RLTlKpiL-3ANw^k zCI^nw?%X=yfCsYo)sY7&eZ4o$LNZk#MUdi@Y7J=#8Ag~Njb8lI)EKM!&&+Q(dT1kL zaqbRYy4?2iJDoZ<c*2KiM)~>5CT#wXyKo}y(?4=&SlOhdO(Bl%7u%N4z$HhSs)BQ#$9Aj!5Kk=t zBU)a_{F4`%mL#cd4V5WK=*vU5dUjg^Kb!cr<(EeL%rkp7%~k-7qJN!-*En z<>GplDkO>{Q^eiWXUSTLopOlcytl{N!AdkTe^l14*mC>TRfIerKT|x2-JtWQU;da5 zOur&fHq4#~avA+euleU8w2D=Se=p$b88WoqW5pCQ_tVg~(f0F7V>VKhyj0H&d2=Yf zdD@wno#%u1Ccrkwz2gPF#HK^s{rQD+Cs}J+N8*$2v`dw! z+GS_Bo!$E0gFGdqqQ%eVSYf&IkDWZ_MZ^2Ylcz8rZ`c;-QSKNgv=$pijd&K4*oj6= z^8XOCg&urSR)qtdn)`uVNfH^6^r4#E@x*jF@Up@kp}ct% zLbfME0Cdth*8UYO00GT2k6p9-iTqN_e1IF27)ut3{FvrD1!?^3 z>G_XKN%QoTLuzby+koC4gQJO8a;Bx8EQ>jk7LSSbaVPxt6P|9MnRIC-8|3A$3o4&= zqIVe>Dq2^a3gpDvz27m5Rbfvu_?s2v@+#I)&#Pgj#BGSj;%WEj#772x>`e@h&*WGEl96! z4Bvu#BD`cxPFSrZg9NR1EE+W(q~_EdKG{16IS;V{6n@0A;%YBVTFnkQNWV-Lj@!D( zAb*BgX~+i7wv+;g+PvUQ^<;1*)uYy$NH3Dlx&Irs0pQ&aaQd1i_I{ z$uleFlA;0eiURZ@)0ScjgkUmo=d-1x_6u=SdNAUsON@m}IiE_bdbDcDVEnD>Qlcs6 zN;e73Rp}>rfXDl>>!P|aUjA}E{A+7C5sS(XplKXZ9kKJZ#l!*Rg~8>WHKQFvF#v z1;x%>^X_wzEkUeZV;^e_h|z8kK{dbncD`tT1PuZ;|M8}`f~;MRI;Je0^=?TU9mf}8 z-z6+~3THl73{9#HP4}vkhQIF@RMt4v0U3d`0F&@5+Fuv<%W8 zgW6m!BEuZ!r`AWV!DKkh@j;17OtAsg*jZSk5PLBNVzaKB0OGbM_$yXeQ@s0ksl51I zt+gC;!|#HR`miL|Pdp?2Xymvs`pXA*bJq`Vzd)6R6Jrt;XK)p16BPjA%|g841k&gQ z_)XM);c$B^2I+R$63UFk(K!J%1c8Ky7ZgA7HD0 z8Kan=XII|1dRc+tm?w*oDA^@<-Z$dMJ_zQmwOq0=f;Z@xAp9>T?r9VhL7GYxjY^a8 zU*3O-4V(07yVjn1@~*^YZKeSdnwcqp-=fEf@2LJl%g{2@Pv6#<@(nH_I|{My=4F8fp^k~ z4^B3VFP$R~8ZWlRUsAaBpyXc=Ix&HRczLf%lC-ARj0AEw4=_F*WBWsyY!N^hd|hNGjXSr5lEL~457 z+~u*$l3(#$>q_9maJp|dU3HGN0TZhPlugl>(!4vFds9r=M?D>S%@ z-&Ss31LwN?I1R)5qu&FPRbxpL<>XDqysz~--U#GlL1p2|8G z=hbbB&S3=Cz^Vo=AIVG)3({BfX6LdQg78gDTLfHo86w*QA5J0`S! zLGj+!tM;z9mX8p2P02jrC4iFBe!h)_i$(LBEG+=_exp_9c?Ps3KR~q$D@Y5leEe9C zuO!cwA3`!RRm|scN3ek%gRS_=&xfEQChu8Np6*tH@&ue;b^X!6T@K$=G``e#CMK|MMgY3B*hF18c6b^C zKH%o(KiTFpT(bu{)kNcV>8WWH;hXx`*W4aN^8?3|vB&$ejfJY)>Ywd~&UQf1ypp7~ z2EWAFsdIm7{hh!s!w^oiwliVUqQ<8&O-T)O?_a)RKnI2NM}~iB!TZzW+cGh{I4XYb zCJjamKk8Fz=!qH@m`SjlRx$c%B+Mp<$iz}MAH&}l>vQo-{ihCES8`7o~!a#W<`- z)cTtG!S2DcjBD6VX$1DwpGZ>)r+nv6PETW5IavynwD6uYCw?Tuj4EaOqo9XYAZNp@ zo8(X>9ObXK7&tMwVo95^mWIE8?aG^v&z&Rs3|rQE-d+V2SD(P5cYlQ&4UAa<1UXbk zk&Q=4J{hpGp?1y8=N0UAK0BH9VV$#@)cEMd7)~XeSD8_qU;VG97GtQBn|#%fH%oMr zXuE(m{@G=4?O@IGjIh1gpTswvGaz8fn}?0Y(aiM+bRlo+kk4cisi{M->4?rHwme%P zL(1lrQ9=aihDqB&(M9c}K1cQaqF+-dP*f7=QRbg#YxwT;?g>Y8?fBnc4ba7h0R|#z zzYnu+1kBrNhc?zp{Ph$oR_hNngsNyuOccUsXM4U@HpRa7tdDwAKiw)1kKA5&qoQ%c zSBv9&J(fX2R%V+0x+-J6q;x1jg7CIWb))XAhc@IVST3?Fp zkDz?B0W8oMc!6)Ac92%rIkCX7uQm05GUNlBiJW>zOXVXugkOl<+!kmATZ|W$0>6CW zRHVVyWxT(*@F{)oN=nbzgcQz;-%gh0r#&QEz|mY5wA-^}aeRsh04U3xN(;x>0TFK3 zZh;j)Mz&DQ7*jZ0tcJ`gr{S-j7z%8Gf}*%4>-xV`g)mSssr7Qw#{!MA5}L(Q=E|kn)GYl^u!s?C6l7(apPi@SnV-$M zU^*+X&=KIXe0C7+=(o7{S$fLuKDRE6h{15%Eayb^U2B-fE``M7VI6VxGu!zUe@4>_aq?%`ldNql?Mhcuq=#h037?J#3&%H+5XO+1*p7H(4v9B~QdYf}2`#iX>Ox=|?#bN;NH(^d-HVF%#bA9`J zrqnv3#(dS8AOCph%xpkFC)wAq81EnJuOt|*)1G1vO^xl;4XLL<%`CEwtk@n8g{e#_ zbY=^d-DTcEqt4vz50MA22A6C3B_F^YASl1ZV*ilWRLTUtdV@JGbJ-^yA(s;#IO}2W zzdZ$O0V)K34zhf;dz40Dj-Dk&lFF9nncF(=sdU-};eW~5ZuxCHb^VeN?nTfslC7gn zh#jqC%Rk77EgLdete6SeJti~R54|RtqzAVXErS`sGWaRYa1Lk4qBVi-VV^97z|WgI zC+&iQt`0YVi;}_PJL1HIQYUp!1yOB2*Z=HTh^Ziv&yIU9C`og+-s@&&j zSZ=5wt@MUdm_H9FiT{q4vR0Dp1}lA%`!BN6d;B5o1fVu2i%_#xn)GP8-I5(gaz<2|bofF~z{a z8yyZ6n3O$e=y8I$o~X+?L)vH0CO+8xu*Nf4%Q@V74JdjhEi=*`!194bpEY~Ks3Oku z8gkfkt~d9;RYQ)znWnsEgwTugC zbn!1f6Yd zpLbjeD;16GP<}rYf-a{aQbKUm7js@M4JP}+nGFL!qD6a2>%yw(^f=}9uS+=|O9pU5 zTU}#_Dp5IM!3ZkkDED@39G`JGH0M9c-yq29VP(1<#O^;_e}s(vKnhp5f6=<(K$CqS z2!46kNEK}R7<*ZNtuO|pyrR{1%9#iBtKx(X#>6+X+X>HfqyPUZP{AeWbrgS|DgO1Rek=Rx8rkKRCE*m)6c^45D81w7)X?*;-xlEyps?lXC}k6^0Y9lF-DqX1 zl}k)!GR)Ewwm)qtzqaYVe){XKT9bChJoWB84wVBX}x+KY}cqt7m+z0Zm*3kta&h^%HvL+>)WX$%iXB z-Hp`3tO3t)L6DCaAsF9jqyOUiEJ%mNW>``Ej2t;B(@Q`ry_d5r<`&Z%^XiJMfm)anHnnr@Xz{C(KOyD*mK{ zkajc(+1^Oz@0;Y`&+=EnQ4H7$my53gc~()Hj-j_jMp5oBoZQFXt+DILAP%tlkDw); zlS_MGn?|yt?T9aye*44oQ7JYIc7j~^n0BL7Bv?e5on(Zso^nLn5P7Zd;dCV4XKmzv zSvzRgOBfrbE8ql7*`d=Uu%!iCg6$&7gLLprXc~N0Ct(W5{k+xh39)M?8umJbvAA!PS~J z!iOQe-g_PHrs(&F`ihpa)Q?Z$>)9Se z{Uhv5aUE5AU$tx|T!=NEHyJoDp@OLlT=Izf+ z2FwLH;97&U_$F56RTW!KMTt`T*NEd#>|PM%o+^0AP*R#`ESAoXG&h59K*eutD%fif z<{5n(P7{U(p#P~ke5zYHj&JkEUg3Vb10hhR()9Xm$;G4i0G~z^kEX}gW%mHpWP}xd zIN)UI4B0)W5IjaT#iDX+jTIrwE!`#Z*Z6yP+6SUFlf7=MJopZ02kec}fy~ebGC%oe zDa_%$`B?8AB&*Nm`Iufnh4T^D%8saLBq z6$9Hb`QXXh4RTzoGD4Y5Y1X{xxnrO^CQKG#9y}UuZ=n4Rt%EmYTdD5)Ppo%r6n>{o~wIeU)()uGeI(ymum)c#jsy-Bd z1U&g3co4XZUpCU9k(mlaO|1CEUmA|6~tJ6k?(xD}GGx`KXp-AGCPo%2)=bAiG^6?QUN zxHX5jYx20xF#;c-!d zZuO0k3b>fXx7L}Bk_|>mwCZr1NZwpNYUR(Kx_Ct`;2sxQdDPXR9mvlK>d4N6Joa6Z zMJ)LVlKBQd$Cbc8OuaPN)n=^B&!+uf9BD>!<(kuAvS&G59#(r8K@&uH zwYP4JTT>J?-NN8W))UXFaHHpRxyuNswgn4(Wvvl`3uSZ4S;u>c)-=U8EcR5^&uX8p}f437ya0rf$-~dqjAhT?`^m2Dz3jaZ85L%u}-dCj+pB1 zyJIXGgk=;xWO%!g@4o|2e_JA=y2;_-`MQbQ+Ea_5$T@&v`1?S3qg zW<&_F|DaIXH?lW{f7#E(ytHZjQsm*RQ5l7nAXGb%!_yL&5A9iy~zMW8%N zWCwgsBdS284$^kBGBQIpzVBaF;#UFrR!!#C43B$S-wA|`vV~a%Qtp^XQ^lPZd+Y|0QatA1zEx*GY*TN#B` z(@YIJkna8Ss?~U$M?ZENGcsm5=og%9YR~H>IiXHJ|E!JLs9Pvlezbp88?DNqi49d= z#i}K01b}ytm5ktJ-I6~9a{q4!Ht$){m)b-Sz7~5@(f~)Su_i#!1mDC(_L~O-CgHdv z)S^9AZoh=tUXA`kfe-R79K}+>!_mCxv%3lM0ae1wZEkA>1x*+>#1d zPD`2faRs(m@J9LcCm+*_Hf4xI)Z4Rz@~KAst~V0cAgHi|gOHk&>cONB(2D7ws4cIC zXI0acT4pvJn$jKczFEhhKtVH$<_I5O6{}zYckBg=Pp-he+)TAzilgVdb8da>DGN@! zJ-O5U>JRcRG?7q!Ec3r6CzVP(Nd_Z|iCG!xY`-W*K5E=030VG)0uzBH$PQCEk=@Tv zPG5F!`* zwz6OA?8c@2-|pNJMV}}ACg`DarV$G|+TXM1Ok`CfFQH?}vgbmT>`#igRy|06=_Ip` z@{M%s`fyFQ8sM`2U5N=~@Biww_i8(Wz4owXQk`&w5%8o8+Qu%2u$yz|!NGp_j73G_ zYleWO;Y1q00M;CsAqn|e5KfKQdWNhK9wVN~jQnzNhKe*O)|tzJ{7|4_)yg$gE&FDi z$i?r@X)ZCmG~=K@`gs$6Yz?;QXLD#Eh);NRZDA(X10Mb|``fqG(}6(;FUbBF&;BB^6!PH^DzSmFpeV?k zfFkFXpwIFJ5om|GRgi?lGG(%(Pa<`GJa503qGsKs|heIT~ zDFh`c?Q?d&Z}IY9C$+#*%f$Q^wTR|7CA#>+xUeQ{SiKM&!RubI++%ZDFl6`e+~7x( zm>#@|or702N94*@;?t;wg_|FSw+v#57>@CGrnq$4gdjgdHGOIEMDe2vz+Cg#O+^PlBrSO<=H1}k^&q z-*+_9baC9uoDiWeEL)d9GgA@h&&ZB^8xZ4v`;#l!aXMzV^!3G2gmZ9TSaAmn5i4lm z;IJ6@lw(G5K`pC?EHSubbeJkb{IoxTMOrVpysU4I^&q6#u_Y_UAOqIafiK-Yn9IkW^%O-z@$C>u1teb83y=epYM-erD&A z)9*bl0`{x`HnBmhV9Xh}%9_k1iD1|mWoahMf}%{cvxJtM7ZO9Crdr1s=~99 z4AoamW*^Mk3F2k^-V>!J@SMLP6L}gN9b5v@=JHpY^4ov#!rIc<-{*Rz469ZeL9?Gy zKiZZEp;0GNdWpH{YS3|m%Ix{s11k$q?Di(rnHGA-RLDwaQMpI?4|zTem~9dwbmmv zjY`3WN!Qohx;dgY_hv(xmb@P#0w{6!_6SoR`j@!R3&wuH6O-FWA{cr#&xpT%do|!& zypD12ZPx`yvIunk;wAhhWfFFh*d9T4`0={Ifs%Nh$P7G$VI%JAJ`^b_ z7)9+PDc6we1spa1a*|*b*`wui}O<9eh ze2Wr}lk=|6bw_1Dm(R_G+<~=Y--=b6_iL8?QEPs>ymf=s-mA|%G^ZL8!N);s9%zcV zw$QTXvT9lz5{TntydYY@IOMRJA@DjSI`Dyeuvtmx`1_$q&_(?nqyPAK{yL!2l zp}B_F!`g>lGsPc`F69=Ve`G}KNWp*Q@keH4Wd|xyIu|-918->Nm-vI8u|5#9TV1~x z4~!8FLwt>(AZc-BH)g9R!WSQ^W+`$gC?uY`j|W>ah!g{QgfVU`_`TEz@XE1(eCi zQc%vSS9n^DMc?c^4y>}Jes%vbAsE>>{ow=_R&2FmIv7*o_PczEM58~{Q0C>>7c|5Q z^j8pguLm)SQ_YuYF$-%QBE_bjWQ%ovHjPCwoG>Miyxfx;KRm5*wn5v);@`f?ldO&o zQ`6o3oB#^!7~lYoShaz_+*i(l?x4Bk=2S$ByZ0dMM&L3V_GpT%Uw}BbwXvkqW*Giv2g`=E(MgxhtVa?q)x4R|%G4p_-0}@FN+=={2ihLX`hxM4? znJt@d>X>z$>LVQN*jik~0~dwP0=KKjmU?XUxbVBj#iurwhDjSx0R_|-PqP_;FxJi{ zDoEk!^o_K-L&5BWOq5Xct(i$U*5}r?nx6xel?=MBhtS_w6agO|)K)K0_3C7C0%ow=*Gou%AEN zI3c~SJUsr-V_dnP6eSTS@Yw-#jWubNs{26f*3F71oVSW*`~FkojoHpEXV)4@#<45h zlcBu(qczw>`x>G7#0FfqiE5z`YjSO<+f&;1Xl)A z8vlF>=P{&2uw5BT*>j@RB6;|?7}HWSgGeyOz)gN3MoZS`o4)h``8VW`;~xg^))0yROsD?ejCHLR;cO}lu?iEz zqBHYHj6vfa2(fBCclT*db?*03bY%4K>SGlGnQ>c3u`Tf_?Lov0)4!ryU=1TM>Y-rJnolwxm2Xtse-r-aCnFBlNUU6Cmd_ zA_GU+v~so`UlIBM?;GG#|M45brJP$#8GLsMMS^l%p|}P|AFlE1&$6=9gzlae4ab%*uioCY&}8NN<%)ChMyy3hPPbKE^%< z!h%@f+f~4J>@{u-X2j7Ke0bC968jfPEjNA|)cz7>gU1Eka${MTz$*Wn+uW0waLy1L zBHt*!k>4h?eW$A{oadgic!3gKzjM(LIP=g)-EB4737=-#ev8-JpJ21RBheJ5XUlGV zeR_If5*5HyctIyKa`GwWJY0;~g z9&rc@pgXc7eDN;%`Q`Ff*Ta?y7lP1_9uG;hM_5mz?1A+s4K((xSaT)-H`PKIh0;+c zqUFk4uCv9fqKFgvOQH8*?&o8r1*7HGm1*vU^=F63niE*9PvBEvJ>=``j83vNN7jWy zQ+SIL1Fe%gQuL3+H#+(o?XZ ze{?~z70+;4BTv)ya!nTD#x=LZSE?#dI^QL7DOfk&0UF^m(p-hMmF`pY4SeC~(q>Z@ z%M~(llGH2z$pFUR**FTqI*D`NH=RjV$RVO({S$lCb3=6a`Q?_<7r8s^l{1`BUX>rC-HQD7+FX{CjNIyL;+d63rr)H+}{k5`Uc);A$2T+Fdu% z0to96yy1$Q6a+K?8!Vf{d?k0|79%;o7QT>@Aku21ptve7G~E{Z6+D4<%e4R8vS)Ox zM;cN0h-oS3nOVK~iF^)O&0kTQFZe~oa9;WsVg#~M^x%Dsf^q%SQAo>cV@4^9-xd~l z_f?lB*Z6WzNXX+CC9iPdbGwb)_f4y%V{dLMvF2XGwsNDJsq4IO%bo;YyDQB0YOSNDg_(*MoDqlNQPIAz@mCJZj7=}KS~4-?9U zCm`EXGx{7Ej^p-d%O=(>{;G!)A~oB*HQQHq#P&#`%~ZQ$^a&36neki5g9ku&Z`h(@ z;K%QJbJw7wq$iiZI7iq_NXETX7f*RvJ@hPIQy^L>zjPxnEVe!yrB&~TeSCeyGjb}utP}~lK7jUO zpQ&E9>_gp(X+EX&s(yLTrMfxKgHSiQ6W7H4jO9umN+Ga_?^x6Ka3(eIZwk1} zGh4N{ZoUxPN~nklt;tka2E`6(i=&quN#}$d`)?7?%`bCFpy_E+xTTjEoDnRe#ks3t zSb*(mh1H4!k3PI(84mS*K2rcHA-#+ce6(`Nwy@@1pL)uxH*RgV-BMJl_iUYeSqN$o z?Ebh858DN=#@4Iv6(iV0mfSoDQmsg-dA(69E&liA?_sdN({c(G1_u#X;%|-c7Rrj& zXWmg1CfNae^Qx0`sNZRs5d3__hhZP}?|{*hqR04iEk~-DUoEK@pl$nI_=?PVEuR$I z93Y;9u$-CW{>e)~>{bXKgl1$%QYMm0`Rkhw@r!cvnmZJg_` zW-VUZyF~CG`y2QIsz4(2X|@(XIS{f-(PzJQL>HfeoicW*wD~%udH#E^@BfY3qCk*+ zj%`jJNQo6Q5+?!tq0{+QH<4VETWOP0MrWZd5uF#lKm4MbwEyMqz4>yIPhqFou3@&Z zmH}~1G`&lTRv969S;GWB7$Q?&+ILK^Y< z2SZ!f<&k(Oj}w#z(_H}eOM!R^gvo_AzA%nn9Zfe z*W34jkmfB^4z|{0zUDP#5;-OVzKoD@a^FV!y=Lz8eNH6P`MHzjYg{(@Rb~wJKnDu| zi~2nG_8_+M-x-4cr%o1M&_va;>#~(C#-IRT(S3ybCRx$L6s5* z1?9Xw++?5wsl0-=-Q@Q=-G3|z<0?oWm24(4^Oyjl7+ps^cf%r$2Eoa&Dta)=-e#)q zyX|6%kt#e?$=KxLutgeiek`#6!`q^}740yeV($}z^m^ZG>_eB9pcbw;Z8rf6n)(1U zAG*w1%ciiyg5v${IcZ0xIfvm;7lvxmkf<-?#O6$NiUD zmWbiq`kyMYGxF8>G&~u>2~Q8Trj%(poFN)5DB%|b%%Hz~v(d9SSoPdW?bMyQy3h`s z_W9!6PA3?a$)x)k84B&!hn9{+4}3lh#W=pmpHVaXZDgn(ojPsI+qd=Ra*)_EK#h8u^7-G40KU!^SeHn zVYog1KbFx#561TT5Hy8FW5mKqSV88Hb(P_dP$5?zv3&fC1e2kj)#*CeK1x0^kn+)l z;9{jL(CrcE^LcCekOK{tj5DNQGtH6!Y%_^GKXFAbFvd?ga+7$Hn2B!x8a}1u@a6H~wR42vV9CX@j$KJib2hMr6RI(HZ5mD#?|H!> z%pAb5--^7ClIz7I8N^Qd;Etw4RF%>>d zI|brri)VCaXFbDkD5~xLIBn^q5!PHw^MyKu$}hPOZ1P~24tH4hh1 zAc!jlX4KaI7VqhBVUAz(B;V2K;c5F5*wWMr8Lb{bHRvg^Sw#V1G?h=ck+OEK*Vd}& zJjbwKSbJOJne6NRA{->A>y{vD7F-};$(3_aB`-C+_hz);9Bak1TG+kwZptqA@B2UY zN8iR#k(@8F@3;T(O-AvWh4kZC2wsJ(9*4TMv;-g&-bH1kZFjl-rwzWmXroMtZhk1D z=||N|g=>^Ijvq=JAN)!>Xi*jofHDil2au(u%8Rpw6j8ag^M^eVZFox*Th{Tg3kT`+ zkgbG$2F||5bU8VKR zx@7gP+ad~b>l&J8EsDsm?ovPpc~ zU*nbZF(Lg}5yD#9Ig?WlEdVSU)qx1OAdDbCk)8^Fr^B{Fi8v7bL5jv_Pl7iu(C+e* zz-&NM6)C2z@hX$8x;GaC9*D0b%oy>!?)hl$Ri5RFsVzEZkM=d{)@cH+icP~$_=oSw ze4ZV8;QTJCa9PCCVdf+9DpGhgnRWtC*bzqxxPsD_w%h^IFzVxN`l2WVf7yEfj@|EZ zKOd3fHx+Q~3OaNI*^5;L23?J()H(n= zK$_zS^c#>Ql+Tf9Y&#mt=!}`qMe=e&?G3egg%!&AtaD1W-Ai+GU{{M%Wac9Mg*9Ut=pQ_zSwLJw|=b{y{7T-aSnFjoTm zBU-GwBRzg+isMD29(s$w7~#ZUjK=}AKv*{XyOW1#2E|g@p4!S%AwHIRDp~KC>`xIA@ zD+Fyn)FlsyX{WSpm?OHtuFW53et!AnlB9uFYVN04qvc3-1(jnVmA%<+eJKCFMyLj# za%PDBBZ(hQP3~oAeu8B(a1OlXYuuJTEima?@`vQuS6zx6qW)9cT9j+njNt8Z^(>{V zK0|5*LdXOvS8tvDzTG>rG#;ux)#D~d9>h7)J-&IID1o#xVFVnyTF8c6wE9bF&7!d> z=bt;*$8fVMcc1-?n3&83`$ z^Hbxd{E5DNs=QI3*Ruy_A^B8as?@U-x#Kt|u}mUs9-oa3rbSIrezd%<j$x*H5*V|u6B+upA7$f8+|p2hU3KXQZ?SA zqCr@YJGULmRsYHCj}qY(v~>i(3vPkBdmbrkCySt_5U$Pn(QjlCnSJK?G-FM(%o8Rf zZgoL_SS9~@SCg$mThvC=E_edZboWH{sT3!+Kv)^zl_Se7`UAE%a(U=f==tBMpE7EL zXyHF`Z694I#D6#DDOsBiJrh~(cI5-%G@DUw7y9EmIq zlDN4k#83`4ESr34D`!b}U$HIZa%EwUDqlj$bpWQDXq~(9Q?-jN`F0Eu)HwZ$xb5Gu z!0Th5|Ln^TnY2CGS$XBdmSIPJ7;EN9-@Wr>7BtGaBW~Kfm^p4-iu+yh%Ks@`754LS z$$T)$`^ESiL$65%%Y-(2^(Jh7?D^>yLeEwg&K>A|C~hr^0yVnOC^}(O~uO}k~7`86kbhEt=-6ysDYMjhm>7X z6O#^L8Yebv4^qN4$jLh-0NH(D-~c3Y=brmh?(yx}J-EMK$R+zZGCVA2Db+i2!k^DE zKD@*#5ehY;Ml>RF#F?9FbK_1QH!%m=6fZ`qvS>1Gqn9ml;0@!c08y|7_ic1@G-w>omdlX^w5>!0sZ4dM{|#XThWC@-e{UTOT{WTqHA2H;*BCJ})Ht&q7VhMJ>D- z{E{68KPwa@g^MoUcl@PLx~nH^kc?tHB3ckma^-e9PCowuTgO6wwhcxD0F1w5zwM}&pt~5ckuRjW*N-7WFr}KZi4TI(SbTG*v+*1Qy~5nJ(SZYO){#8>>AT*& z7;ZA8>2CgN3tzy+h^#q7FOH_&{Y;(qGG^B(CY?W^W62Pn)x2~o`a`H=F}vC6&7Ln+ zSLzJfd{qB7Ulauu{<^R- zWmL1El<3Y26Z-=B67K$QH4zm%5NaUNh7l>;TTWGgA0Oe6v$ zk3va;D2u+*fx%E{u}3@kOSaDgqi;$s=uqx`fKM~Om2>fh<(%%l`;bhq)f%aRQ)MX2 z@_BDgh1RrJ>ON$A*LZ5N-FJ;8n&kM0N6WuHlc3KO?X=0;K5;cJ z#v63iZi<$u*}Z9$oSqqkm8xx1)N?{@Nqucr_7a{3uxa5dO%X*et0HT$$NyoN#lK@? z^+~nZFvbv1S)h{R6mm-z8}_2;MX2NFYqJmDk_EQ}ZwdBz9HILkgjnU%QJ7_e@tno8 zSV_7Ix#Z`s?+rd&J&uEpJ?Q3Cw44M33SLUFC1Td5J$B)+crDArGz?8(-SpKC@ksla zl|vpZFnl^Vbd<12J2+R_4D})KEw$R4Q?sS@yDrN>g*FG;loZvby{o~7MLxTCxBohv z1<{KbzWJ_+DCH^J8zplp#IggVR(WOB<8sR*0SRl&8j8V%G!{2em~$gPWH(rHjhhLK zF5r?VePfl!Xyf*o9*hBXx~qoBbfH%`{ouZNUjqNo<%OJt97pqW<3pi;8=>h*m7*!8 z>2X`W6U(l%i9>0AsxR7KD8JKxs?}esR>J zsY9A#m!BO8AvbqMDki?mV1|Ua^e3SqR>%&G;IFH8n(HEpsiTD z_E@`z&xB)KC9AhTH+b@dAH%(2OnD^=bMY~gCf?ko5@Ri;B6$sYl2*v=YixH5rLX@= zS^q-;`mAaDjyL$1*Du`OCC}uN2X9H|0rw8=7QQKc?GmXtDmSZ@S~@~DeooVGR0pZR zDzRv70ZKt%Dj<46|?X+eZn<2yjCE=k^(LAPFMEv(YQ!NX#a(tBmf5a1V-g6-v7pxm{2>mS1Cp2l& zgb>O)BL}?|A@pSlRolYaz@94sgbV1xqXnW{>XG>0(2|uiQMIk6BF_JsB{{JI9oC1> zP$C>TOV`a-0#$t|@F0Ilf1Y3B?GbXxV`}`eo5FQKR zEb%)`=6pu*vSA;e9d9nF*2N<^^j~=YAwHrx03lmX3MK-h!KHKpEp(jlbI-a0tvKU# z3AGAWO`Y-&PnKtbylj#$?8NPL;~mk)YC%6EjSa&ijw`Ga{V*2f3A9Jy7SG;l8g|4EWdyO8^mY`Q%2 zv-y^f2#g=km}xG>nZ@dOb|A(pY)@1FUgH&4e1+fBy4|>z(51QfUHK)fz zhUUK&35p3z%$8XZC)_6wUaWQUx6Xb`@2MhCRt$>kEt}AVyTZ-D)p*1g;&^L%L#zeb zZg24lZTrMDU_x*{2qOXjrnYemLI>guA$WNLX4Zz~gK-3CihIyep7`#8u!e8J?9`Xc zND0n(uDEI;tU1Z{-(xYmT|7lL{9?hZM_8Zsb;r$+V+EyiYM*rTRYWvMeZ92+trmjJ z#ms+9|N7rwT7&aHq==Fw(UPm7HCZ~7E?!$PKMeTo-FN*le6kp=L^-X*aKQv0neE-` ztk;E=c9Rcna0D=B9Mmha9eFVOo1x#c<(z!c%u?0(B_0E&92Pta9rVYs&9`GuJkf!V zHL%rl;1hZ0o}Sc=SyC97MV}yGy(!PT{Qak^n9E^LqfS^`imCAQPuiO6Y7T$eK9*3? zIM!>WZUbITut9*FJHoTguY*lDKYlHgDl zX?g&*)N)?ZSe7Kx+9>^i4$!y*q?_{cX+zLkr?at{YSx-qBQfGpp911a4PQPYTvSZX zY+0uQYSO!cS)(-X_*^qwfxA^X*@wD+3(03dAdO?rJn&WoSCPUFr+!G?f8NP5#q|DQ zyWsx-An6-QFMydqQHBxud);$Q2j<*6n1Tb49{}V?c;h5GsJ8VaPZsEAa!$fY#7_j) zAlY_6aq5o&##Q)vhaB`DfrD5)uv1$}p-ft8N`Db(K1yVKuZPiqF^MgY@s${Wm*w!n zfJAw$59M0CTH98B*Xqz--1&3i*8#teH4O!MY-Z66T1=Avi1}*Yvw~}Gx@y|@YDXP{ zQ9p*uEl}rx&d*XY{|JwHbphCd6|MFBsFvuUMznOdESnjRSd$Y$Cc@*I?-4ER9}b-{ zBYgg>e6T~+ex5XJ&YTr_&u7icG#*q)l~=9(VHSe7BsQVKU8ZpY!yx`)6m(cLXWPx1j%OIPYZkJ-Sh8OHnbU+3jFS4E5EG6Cn`Iq-#sFsQMVAxA*ij?GLolB=P-6(&z`-?3#7q=rsF^ zSBO+VZh}AOGwBZ&C4K!k&brc3$}H;_-I7PU5t4TFnV9b$2vq~X%4@pswhS4-yeU@D z+F}4I2DA!jBEn3;9#{K{M!%EUZR_-i;@fCdWX*67(^K(BHM^e=EfuPybqL5NeJ|zZ z5M$G8N4jgHUFYkAw20<4}KJ(^8A^tRba$N(Cz?iu_>T!j+98EU7f+j>CS60%6QCrxhk;^!sz3X<7SKrUv zyb{?KMCkG-bxGF}mGm7mh3HK#5bu|F@qaE{^Y%ABM(Nm3Of5W!{!?QE9Qct#Bts+Y z@=Z3-nrpCZZZ_BRobbva>TgnnLSc|ZvGQ`#Q}F`R0am}D?BGEICR`dQ4U})km=Vk} z1(uaE#W#s1^Fd>UeaOE{T?%TWbF=_Sm@gDZFcF_{c#~adXFCuMkV{)&qZ^ZnSDSR&i)xVxR@XE@*(ToS*=zj)RXui>wI&S%E#( z)_$A%*+02j=S7pdNB<(Tu$n(1IS_9y9*H}^vO$MqMCHP5$GMU{&z4(8L@3Dr+5|6s z4i4?`xumShst_|6JJ=Ch9OHx%q$~HiYFF6LWyV!F;k4}|ZxYcC!e)}tH9Z@d_^YK+ z>2_?_`*#tVp<+MZzPuZ=|L`&NvV(Mf6~D>F`xju!3J?y0I&5U8D!Zl{Sk;m#3$afS zVJ|`3Xn{m6L8G$MdU9)3abynwPVSnFJ1R2lvtl(3psUdEXC~J?=^MF z{Hxzr`nfxv4rxLdC+1nM8b2ozB@$`T&>*P>#0hJ&IDhzNQexMDCoh-l}_MfRRppTfDNMwKep$`8!l3e3d#2F_<;<`*oO<$nC@vRE)3ubD0x2i%Csd8 z+NA8zje(eww4tf4ywR{lk$=i)OV8ad1R|hXm`#u?S zR^g-CM~Iqe(4&9SkNBVaExF>}pXSPz8ka}%Rswf6`kg&mM^VJW;b~--pa%8 z)$pgL_;Y!FVb9jQ6CGLB3Bl`)ymPT8x55Evi6_r#GP-y7^XKvJrEMJ&FPkLOz(*TQ zW=L6%X6fp9QQm~n{Be9EGh+1gl+8OjO}NiB6}FqZ_PU7u32Z6-h6Es!+qq&v1zG@X zAP#w-Chqf>AZhl_3_UOo9M~H55k0}@7XPiB(dr`*vPSaS2q^fX7+aCL534~Mp~QqS z2b#Fx$j@ZsRLW5Yb-ATHvFr*{@EQX8Gj%<@0ECNUXR&Gjf9<_hRFrSrHadWGBPA&) zA`Q|lASx{}!w^GCH#l^+pn`NGAvFx$-Q6%lw{!{u(tGg#u5YjJV4v=z_c>wBTFl({ z^NZ_uU3b1Q)W^tA2@+)Ejx{6YV9RfNTDA13m&{0l+TEC;NgHjC)Z_lcujK~ZJvBED zRXceOyF1@K*S51?PY1IZzU`r^?=s0+3sgmtMYrF4J_7884r-?R-VKWyuE7C^dhtKV z+o=XV9qO2V7PCY|y(^T98Mz)^+Ng}h^_9<=|LY!6`3QdbfKQgMR_sp3QLYrwgb48~&>Nj}YeL;kfvVS9};JntIC=;APZaA$NgB$EGU`;j+0uP z&|1fS-E336IrS1-UO1aXKa-J{l+iElTebR4vJ>-)*V z`}4JrN`a?h9bO$}#W_QzPYJuxZTYNJhx1*03cV&}*;-OJ2lAwSvOq*Q5-qX(BcAoa z$Br9FYs|XD&~0~e&;l;a)92X$pC^q&EWwBX7MDAqs}Y>)d>37np4Lb6-?alr;r}?i zxh|h^^F&`f(3ko98zULZ^8Pll1d1V3RuQ5=r4Izpdqhu)`m>J}t_RDxSl`Uw;=MP2 zjUJr9s*|%K@ryfnYvSv1Orx~|37s1k zw3>`XR9su1@%&kCr|PwR;uTl^{!X zrIW@Nbb_3Yr0$z{V)Z- zpG`7wQM@Wu4k@lx(b3oZD@jokAlU^QEaX~S15c!b&k#E3BRA7?9Y2RT{jqnPra29k z|Hhyk{@ZeOFhx*|GMg_Cn&aY0}`B6=8J>s=m3!lFi-p9Ja zeEhEi9$^ggs&VBs;c+9e!4=(dF4H{&5=7ntC8N(%NCH5h*v}n4z^f(e8Xh$J#BxrtvCij@d}z zTCeuBajS{$t2?HiBF;2XF>jO}QNZ>aYyZZRxp?0W4JpIL9fq|-k&)DYYtjtFYw5rT zit9K}ziY9j<1}i>CM{|QUURQ7I4CyuW{PM6eOOCm)?DCimEcMQ9~I(k85}aPiLp+ zRxiuuT3?UJ`lvpGU9*X$>Ht?qt-deZCO`3LcEn~if#fU>{3i}jwe_VTUacDX4q-PM zU%gcjA#7mU+|tQxP|b`yUv`8&;!9MrAcY;gPHH4hf!2GEb$Doa&^=bmsSs+Tej%rb z1xH6}F1u5eW@I+!*zzNP2r^d1ZSv2Pb*#1FJ%4|Q3yzwhDyx}|dXPPm|5M%Q!FJ)- zKx7cfi#H=}F)Z)aTH;8S5S+OE^nPGQAFJ+PH=HQWQIpp31MfLa9$m(g)CA!}BQWt_O-T)g3uKw+3z~2oK@-ESs}$3{gz##gk^D!mI;Z7pBm;_@ z7pqQ>mc57`lr3ffoVseuXzsCphV$D4$#=Fjhdt}Hf!YhRHL^&g2g3eL%BxiNj5&>Ufh&pg2cECzYifAB=X;pxes5p*O9I}VCq6l~Xy}O|!_^n+GBT{tf z2eE$Iy1L^&`qf;(2gQB~hi{)H{vkose~>uWe;J$?TsFI_Xv+QUBh+XEI4DL^9Mmp1 zByXy{a=aabl5VC@(r&e1HQ=abOlC0 zpL?03ahP!pfwCza@ITPLBZs*IF@Kad6K0Y{x^o#haivseBS6pR@xLy+*dBHd|v3@8coV%pUkH|HR#KKxmV`x@vz=OTY#rrk{&B`Mu<&@9#H zX?J=$tJ`GF*oeIkda@etZZ_IitMz@=h`*Y*N*99F2hmnaHbIBJc+z&ie=YRMBJs8@C zBtlx_8Z#7=D)^Iw6>%`OxP#pwZRL7&VCFqnH4fH^7`Q=%Nxfw^0ukd>#=J-2>YtwYv&wS3-END;hX@SRmJCjoaZ>3CXnbxh4j!B!0m zc9_Uz`rBS5rB4FG;ZNdAx40+p7aM_l~n@=5Hql}Yy? z`_%4YqhXs0_I;gia<8blE-HVZadOw{e}XKjAe_DFC=5e`rPUtaT?nlDF|yu_t_R~!8 zExaRkbfeoE{%;;GeYcI75*rkC`}E@bFY@py+@Hh`r`)<4VKU?R?BB7!%#>BB5bTJE z5hz%dcp_y;Mzn=X78#;Im_x(OwkE(Xb*_uai4$-h%jJR*oeLn*7>KAP)gt>Y-^acN z8h|al*BDWvEQ@D}|H^Z{^=~MHCI>q^C=l;V{kTmcZr>@L!K>}BvHHQpCXc~pc zi%u)WzupRePt%TDqfAN5-`*@+b!2V@^W?0h*;1BKt`>#9ZiqP31Pg|F`e*(5`Kl}T9G*uQXT=)6&BciFa*g=v6+E!vq|T)BQp*IXrBoJ8;}`I%kBN8uxe;V&&+~Q;iOj4}ngRVid{pgCE2`U@=8lVzNDXF01&II+!e&GK4ai1_xjE@kGS2 z8G6!3nITzwx*r?olvB#VF9hC`mJg(jNqT)F&M-JshvLeUz zo2F{}mqDZnL5C64n1UY=Nd(H)X+tN4DFp%jUy3$d&9(SnV6qA(4;;K0zF;HbKyG(C zTW?6cH&2?X2>%(XC3hRa!C@sunUSAH{CAoqk@U_Z;{g&+%{mg5I^>*;R6vS2k%NM* z7$r7MB9*&!^%6&gX^Yy300b2ki2GUY+4nhIO_DFnmvtkw>x`Ve_vhe)-iHxx^8YB# zEQeV`J-UJsiSw6_+d)5~Xud&N`0*N(FqY){k{^@A{oEOT{kShkh4ELb1RMkA-Jxg{ zxEe!F=Mp~kvEJ64lO7M1asrPQ++HP;grDyJSU7}O10 zvX3X3+x6HgReAQL3UlzxVF*2@9OsP|KQ(XSadK9K#{1dZE(JpQIN1vCBD}n{1Vuc` z-=FJ$>4@f?`3$U&peJmGk|&&)j@H6uK@_D$;x<~H^&gFZq_7BW;-EEw7isUhqX}X+ zXtozSRPR4~Jt@&O5(pcq5UvQ<=EG~KIE%c-^C900vZNBhTz%R0x&k^0`du`v`N#BO zn4ad}{u}xNj0z!qn^X)ZbAx2MVCo>=w@lYh_jCHPimlJhqNy=R1E1pXDX6Q=q219z zAou66<-ppZ9!%|G19odq?m_$dH7aa2+kwj1;qCv#^OqeEB(8{Z@BvH zIYF%Py!Tw8Z;!1x4Vg(Xjc&H#O-9w}H`y@#{4Im$WTUI7GB`Gsr@;ptmfJsAdg#@WvgdswIvXtAcJ)+kOu2 zAMbnCI)}oVpa0D^kGNJe9jqZYZ_;EkFhy{<-UdwZUP$3wwaK?d#MoV{pR81<4hM95 z2quyVd4NX-Ung8N2g~!R(Xb9LA%QqE0 z0Rfw?s4Cpg7%}eV3GSnkZ&8p_ix&3eK=#R};t+mp5w0|qW@pON#z9Icy;iaYhjot1|jV=v% z5G&tvUhA7rgGgCbxTV}cx-Mf+ljOIEUIiz%bnJH!gGt-@G%EZX;e+lOv3gosBS~|7 zQ452!MY1KSNU+XKMbhA8zB6ZQG>m8n*i>Y;-00qGh5{Y3f1uN-&hJ^Xh#Uc^J{o!c zO=bqu_@xeb;@u|2NDROF!4(sU3})dIC-ZgSdefZhdis``Z`8Cy#YpA&EA02UG&t$x zY#7{#s}UKiD_jVT z)e$c2jw{7i;3|+&Jib%}3>-e^WY!?f_+%DZ{*$P7$+cyXEUhK(FBdatIA>0*EKld9 zu6?Dm1_c!|EsmxfnaohB{gLKVf zaaf|?cE4WJm(PWhXpLxPg@1MI{*b22atzs=6rC&z*Qme&SB_QVXaWo75=iYAbvZ7` zsrcCAwumY#BT~69B2zgMW!8$)oG2^G>V_L8+I|qfVGM@+_|q|ixpV#cpzZT7dO~dU z@3TpKCh3J5+J7D+OWyTfQieIGqt zE_G}OlNEJL2w$>(eT0yiZ{?3TT?;K&&Fa8J6SiKP!3!ih5+!AEw18#0@gyMZ_}P7A z5mC|4=N}?-tUVS%AHyz})!%Ta)TEWlYCn5hX!f059PZyv5JdBKaAO)z59;aYiv|zJ z^cQ$9TH+Sd4U=OPNq|Ry5qwLSy5!a*-(u*&tebS5?>I+Jn}=i{CLtsLt!wyJ^>|P0 z_XrW^+MB_{n5V8d9poXDC?q!Qg0(y*u;!hVK-c<_ko}S7IzCccI$liS8Njmo(QL7P zsCjCT<0gZteq&rjc=cR_Zdcy3pH=7}OK~cL#9M`DZ@S<1r6}Q~ZjGAxMUo(~`mu!q z$&txAXXTA$w$o4ahV7K<_nAH@vT`uw^f4)l&=`?C%aTnE-VPzhAfqLnan8`!Qw6u0 zp4pv$jyWZ_y91{Bob~%l*L`BVsYSatYimX9N9DSvO|7vc>%Z6#P3-8ew@p;oi1{L? zfz&UkmMh|#*Q;SSfxmfHl|98QG5jt6st%m^Y@`;k;lygEgv}>Cy&&VbQ82&~7U^Cc zPHXN#x?v5QPNW_F25*=(X)nwlV4)jrgQ=2?sO93C1g%I=9KGBP{PCn~GvneEQtyMRcSU%>XwUk> zW{xZkTYV7XvtS~f&qU%N}ds zH26)8=?00uR&}5LyZ}X0_zHMQ{#X~U1H80E+V;#J``1V?G58fowT&+2U>SW&Z`Rys zF(({scAaC7b(0ku6+37AFkE?J{Qg{|D7`0mvcQ`zKA-Qm1RIa2(mGH+$blNs)+6^Mb$lAq*vXo+Wy~fhHUM)MtC-WL@Cx5F2Jk5l;Oem%* z>V9rGOOn_tcj)8}luQ*X^E?UcnMnHXLAuG_wYc$(s*7?@@AQdH#F{VT zPF9y_bkma%-Lv`?+}{W2D?bSr%i=Zsvnf zN8o{hA5&6(oC^*4@a+5Oxy~d|m&mTd3VwQR_?zj`@B8bBrW)G1Tr73wHb%Z~KsNVU}E~QI0G=(66v$O_d z@RzK9lPA|u=HRX~f9FDD76n>`t0*}q5)b&V-E>MMplklqGDv%qG7o+h4x$SqYO`S!Y_2*!V0IK&HX79rQT@ z6GJawnS%D)hIg0*C`r6UbVT^WAkH&nI?kRi6fpLLWQy~-U?Kfki$2-I%{-@RfB#+O zwQBs{o$ldMUNIPh;nBmL6+c0*?{IMbfm`HB#Z@}MeP@X zT`}tK*B)_*g7>(C8QeBSMjHQJA?>SOBXel+izt{i(8Gu|DO*N7>nuiFXwUz53x3@Z z`e8$`F}bqL_xH~^RWo0_$@NgoWNN}O^s-5fY146!*=#wlzBW2|T`+24lQkF-@$u0Q zES7d=M|jsueev?(;>|Eou#Z_Bc(I1Gb?ld6brghNF91~uDHMgK&!Jt+${QMS{={KT zJ~Zefv9j=>srg6Uqq$qhBu zkRXa^<-xu8N;#H}diG#ZZw2?4^B&3~Q4!^M;5NnRA{|Yoi&ho^pN#_9*dWY#9L+t| z5SVqDXX?2(p<%BWoiCCr1#liea~C%?#;|4mZsFiyul;A-YaTnb)Ye+;EG}-S1WzrU zo&4o<+>{NTN6EdP@tDA1X)O2$^sN|IhV7j}?=y#X38-j(7$* z+2aSHWYaB274_*PjYOD6r%rY+Tn`v)=}88I`J_XJfuG-UOmm;g${%tHYQMC9Q*yqe zOKMYp+i-1kJ;PGQj$MO~5<da zvh;45=h>Zi+VO=)N8)L4FVm{TbNv_HA{!NL))MF`6|d!ql+|>d^Akw^0DqCwwBy2e zc66K2bxC1PAG0XNkmygwsO9v+w&4yRr1}JaeyQurTxfem$_@2RKB`o3gU|zuh9#ZN zbcJXtQ86Z>0FK|g+}uRPbL4Lxy$H_!toXE?i|Nn9-3Lqm-F?tFVQ$35608qb{^r!* zRza77qTW)U(4zQO=`iI;2%clb{ch!gWPaJjsF&?u;A6h!tG!VV(iAVOPZn$Ezi3e45{u(O#R{ zY)Ak_&Mi53`CcqqR>D$Z)A5I&`E+XA|MZn+ni7}JRC)W15a(%wC`M#AZbmOlHHI;j zwSw4uNCSR?eR*~NTd0u-6^d6a5&mZ;4Id4qaB;`AJaOXB6%zmt5EmLIHM{m5vPN3JZK5Wcdq5i}B2 z!D@uKRr0U@{xSwFhkZno$nk#f)vDja*sfETVN|5QAUT>%5jrvrQhTdPJ{@l_J2ub0 zmX}*6ICE&V?LyTW3VY9PuODq%N5A4aBFC*WYc81X%+f+S{goOgW=0w^E?&_{r#9M|S7BdE__#`Axn_G@f zlB($n%zf>w9}hlnK7<9lCJ1DD;>oYv_t+b^t6a&Q&Kg^o18oMYGUck8jMh9L>oQdw z1!l&L%eI&k9?P%z6JE&@^gD9vfQb`>M-zkTeo3u*D^O!~i&%}+q;N$?*5Mn`J65x; z>f$QE1BY1OWaca0?LM(5;^B;PP?I?43Y)5Jda-rpL^04RdY*{+IZX~s2NrB=7Dz1I z2;y@q0&f0R`KkaGgs~+`b}c%kxrO~B+9m(?i~?(2F7=p=nd?v0sKVunF?#9Ne7{^a zEX;m&nTa}0E!Pg2RJEQpn7L_=(4l48E7JPpGCRj{F`$^4qPh>A(T``V8IgtwMkom- znFuP365@Qqb){-&VdsurOLN|;DUZ-jIhwnHoj<~+DoOJj(7c{%awtSAs*hYrB9I%n z-ZvYV=cVaU=TnIg*f4UnVOT7d@N6!Nm5wXFwfAwcn4mvj5cIOoZ*D!<_;7%$4V#x_ zakn!_JjI*6G}^SR*e{9b5RI*j0EaPK%d?rSzeX=z(6+ma|F<+F@gGY#de6nE3?|-Z zK$9@iNvBgkVd~Ron5jnInx9n?YdEtaSqzjc6(?~APD>524P$|zfa8P9SN(QJt;6{q zVx+#8*Ee+w`u5I^Wfu~{6^Qe5m|f3s!V7$uIiPU!o2};jcNLe}cp>K5uZw>Rtt!{O zdDIToBCFyqhClB4xGJ)gswlMp56JWw4;A%`0$&ODI_@u9sDV9;hK>}%C>`!?TD#TH z;A@B_=w0d`&zWIo{Z|C0&#&s<(9q?~FyS@w^5n9RJ*N6y)KGd(_unB1jUE4$ZPaIC zfRqvBZPM$PXpePX1)8J5(n^Vn+vZ41)FnVYH%GVxZU%8jw=Zj$Da(|D>)qCeXAySu zyy>*12Zhtk4fmQqzaAh`w{p1{5@vxKv9-H?NtiIPqgtUG&wIq&V?UR)qm9B_E9gf- zn{&;Xi6@RrsR26Ats7rz%`?#o7E#n^47^#6=uo5AJb(1dfi&mb{z5DK`r@wZZ|xr_ zZz7>kE5%tQxj%aF>#pcQOyceUXrD;}l$k&_p3^|3j$#0PNsSe&Q?7hPB*e*=<<2Wd8F~7I;85n+acg=W)+!T@S;6KnF zzNlF2g;`c}82PX+`?NB;GvCj;d)d-@RIMI-#fX&UeeY`29gi_cr0$554f%oD{=5sv z@ijwd6;Uy0h^CzK-+D95|ABu@&XoowHTv!NcE)!xIXHPwzd-r|3f(d*lc9r?K-R4TBg?BNT6HdB_*hHr zqnA3iT`(?rEy8XOM1*!&$#7dXG=L3{mFeAPxe^Ds+P)anWR0=mxj#;OCf7Pi_ZCF5)m6YsC9Sg<(+ zo4a*{=n4vREO>npG*sDhPP16KzNiERSwCCS{cep|@SmO*9~m{;YqCytFEcmnXEuP& zq8T)jFyw$4-*_40btr@f=-0zhOynEX`a;I-;RwW%e+zP#zt>RxNH`TFwn?RR!g74! zM48RO68xJar1z!s7o9G#Pk}9i7(>*UWaI)ugvB#)c2 z>6vW`*$}C$p&!sdXuIi=;bQ3=POVuc{QB=gxe-0GWtj6O;hT?F>5x-PBJyHNq--|@ zJ^EsqI-L8Lda+2T?Em%QgsN!KSKkf|RgoW7 zqADw#AE|=(gGC;Nnz|bQ9>XQ_p)6}qB{5m*a=vy2D6PXdNMX=UkrB5OEnDQU0yMp= zlxOqQmJX}~Ac=GTadrH0r=tGa+ME5TNucriNhCG!VvyhG+?ws$`oMQVp7H|NmW40U<8Ml3&H8cgS@q+*_e8S#@6$ZEjDWwb^~4@F z!rK35R{Cx-QffDk8x8YIi?Lv3*x4F5mQD8nk#V>vVCHyqT$&Ejy5%S=#Y3__{733?q|G zjjDehZHk{T(f%`FXuqY1sCWwVn~VsK2h)sDu9Zvai+wlxKavZmviI+jmYb2P$GLES zgjg8^t`y$*yYd-aIYw$C8BU82ajL=TKaOPCo;{akp29&$@GcHoKz|Qh?(BzXJCK!> zDq$z$B80=i+`1?*(Y`1YU9w((s-H+^U-Z)zV}X9lqTIni9Bz#aq)rkiL-w~m`B9^51x+*T&70I+ZyC^b;sQ(3JKj!Nw;XMcM4e3e zerh%pyx!Iw(|yEoSX5S`FWMR-Ce&wPg@s1){teSrAG5(mMLV-T@Pgv%^BGaG1BKW1Xy-hdFFj5t-rA`^TN6wq(>vinkF?;2kWEm|XMiCwA!4~G@yJ$(6#r!4o561)@{damYhwUH^ z6*lGX*PYl*hfkX@9QV;R8M}!BDjfwQ!7^jmGF0TTjtN*XvlFL|uEv6PtLL)S^jj>e z!jKIY@2!i@3%f1BiMy8429h~W4#eh@?{5qr6*nfilpdy#b;x~uViW$>7_S~<6|*hJ z>~~QF817%4=(q8IqPObra%l_?D?RwyDTLmhK5`TB2M5xn93;PAyshir93sr_)tKuZLLjA=nys=K(See9x03eQMU2; zt%MPm(bv9pTInz1C@25^$AZZki8#6Eaoa+=sQbu6keIp#O!05K);LX|vcVceZNpEY ztz22_H=ZqKqko#GJ-Ghf?cSV|Q&DmW(?`>+Fo^JcSws*NCj~8v_t)aevTWUq;5)A; zvl~@E0Sn#_v=V(=Z~AW`FqgVZ83;orj>L^~(YxpAdl^f0XQOLl!M+PUC=i&5Ndo62*8=WRqYKzRgBk zhe>BCM*ACC*l;UH&`_hQ7frhylxRP^X7?U94Xdu zNYP0##u41Tg4ac#7`~wQy~>@z16QM|=t+qf_qUy>hoWAb@?X5$EZ{jiU>4)*w7p^i ziBepougEzW0UQ0OFtg%FO;}8-M|as~Q9b{5x@jdwRARLBa)=1!fw@{jlZI%j5oZB3 z3VnITDJLcR#$w8)l^g<;oBz9}JfYwa)=bvXKxoFlDf{h=9eAP73Zmq%p%0u^S z^$BI5wA#1V^9Eu>+|zv17>cS67EfiP>%AR`9FMxbx!^J}<;J|%Z!G0bwQE~zaehcf zxBphy3D%_JTonJE4UzwXt{gC>dh+^I3Qy{jF==^(KLS$*=V2=ba+j@~vfMj-=fTSk z_%>8U1Iaz{TrBrRk#Cl{X0_cQ1?7*B7H$c+qE4hGy1$FQ>7749y+xYaS2w0lbX)N9 z;kMl}%5rn2$hOxeIDsYj`$X#Q)7Xti6pUAG#6E51qh`T;=4eW?q$NX?q%b^fM1s77 z()PdRB0x=Z=0@NB0c7DHD)@=hS7xTc=RDsA7;MnBXG)*px?v9$lIa{qWjfj%Qm;CLBGPKp=z-NfXb6 zuf56qFN&LWPMWFcQSA2%op@)$IXtv+WbG&M4KKUY zA2c_Vi4###85m7qj-|=1HXB-hnD$><37b=vCM+mXK8PU`Hpb#hZMRvUkZS|S< zE)KXp__!q2gU)HcizuLwm@dbWq@UZ7a}D@#Gn)3!ykRa1uIB$sN1FLB;bH(fR2HZ{ zRB)_zG$V&-Rl-Hct5ocCJ_jH2Pb_JIc;6rSlSOcvnDK)iN334{*Q%?fOBsMDaS5A0R1oe}h)ME@Npx+GTp%$TAaYpMx% z?R)4urlXf4G26pQJt)2a@>`;~KroSoz5Wxh9sK?yWwAe}3Bp1TSG&YS6xHTPYBn1a zIpF(i)}P+IIN!eOR9Vw4gmKzh@hI~-5_DlI?HEy%&E0Si+q=>A&i)&&Ucvx&6`_N; zn7p4~zC@9%9KgGv+?*5!IRin-E;HV_cm3#~r!U9`-ey}X;aKQ5IX?i-GVQ#i66Z!x z`Y-vCZm0NBM%m9#`-to#Wi-f%I8_}5y_rhrz;^D9C@V}p{g0pBJR?aonxgx#S=)$};p>m+sm4l%i}b<4N;w*EdLGz#rG zi(6D*@$SxbYkTtHNXeID6=qvsz*CusxIxqY2=@D>Eo004gy>(tzPFcsW&i{3SnNXI z#w-ZeURW>sEjp&LmsOD(CHDuhT~vpA;Ix$!H}DL)Q2m*}Z0^bZP*nDbt1Fv=5&*dO zY|?qI(#$>lv7J0{z*Sb$NAOptt`CKry|B?~l+_@v+2$@xsBMn0^t{Fou=4B&I)2+b zC$2V6ZY83!+>Z$`*wqIiZuSqBLv~xpdzOQKRLkPkHW4yzSNwuL>iRL7Ux*xP*laJ7!Fob&Z=0Kjo+yPG*BH(El7eu!k;UDAaa?P?YQlf=0uh8t$(^VFi!UDx-w zd~i@eDQ#Wl1^~eE2n>)4tieV$d}_r4pZ4Tf2~_gUEnw`G+*Djyh1cW31T4Pt-Q$Vh zvo|`8&duUr0RXMvh6iA850|*{HNx{s@CN~VB-#|}OU7usoVerC`C0&`uGFk$F>ReD%IDf7MreOu&f#&! zl2>zX_@xjZ%>Lrx153Zb@8$k`OVXL|Qjsrr62>$KvHGL92exTOZ%|DE zM#VrG%BXGcK8Wk&ZZ`ceIWndY8R z;`I`k)J|@Bf0aEr8>N;4E8Tr&#DNA7`p>eaE=seDb388j=DFYhBZKV!Qb!OYy_Ycan090ozB-z`Gh zqag3YsC$^^*pehu|2)^zLcJy|-NSLQE`65+F!S0UbLE+pT(P=KI6~F#_W5LNaz@a8 zJ^n7sS-+gyzMPw|T>;i&{MTtY3!3a5!6b5JHhA8OP+}8qdEbLCac>JW{3@w@t|palrb$YP0HY#x0;GqZx3E=#pT{)P z4qPNEm+S}o2hGBqHh|FfFg+d5 z^-^$a|FmmL9k%WJvYF?kSnkw$`dxE|Br&6MUaXQ;THe#4i?^1TfVS2+qdX%G#;q1@ z=w|yh_wEcfVR|8P9`#UAvfiCjvAwppT~TR^wf#~{29yMFjP>wVI`jB2drK)c2V1Fv z9Zgad)68q#xK#|%E>G%{soAK~9D`Arb?P_`qKcU0o;jt?6t4v_A{0n?YU}2w+7`7H z`Q0B~{|FPy8sybBg7UpgVM{_V_Nb=Raxe%AJNY4<|2`$0M_YOO0KOGsUyh6GKYK0q z-4xN8sI_;_qGhQQs zVSL~Ryg!#FkjV@!2%Ern*_PD|fa=V`MVmY)%rGg@C;?v7{s`;zSjRdyUhv+BU zB?y*F<0zG;KRMz3Wsnp$anGIS}C=(De!Yqf5}h6U}C?J zaewG`rH@{GEv0rifyu(plKghVE>t%FC|7J@r)^Xo0ssgzKfF@v6BQZt-d7gT zJcR@cru}Rcev;{dy=9_tX~J=9Ob`_(=H%=q*5Mvrv6Tt6I;sLJ2S2n z3|~gW>xEr5ZH=PHYEX`}*Cl5*wrQV+jJLY|Zs&*Mf{Vh#z7KvrTxC=^ec{!uR z^=+R|=hTQTW?-W#f<&u`^QBweO&z(c{mRn2$#UYKpS?;tt_0q+9_27LtjJaIr8Hwr zMkcHR;Z3^4jJfFefEKiWZ4;I$YoILLVl8@b7W;AZh2Q7)D=A$OS0*U}rlzzU$#jk6 zuP+k-gXD7XjuT*FrAOO&I;Jrm)m|okGp@4UJ2KyCOUX_G=nBdZZd3sa|9;-g&VFM};wNz72+}5>G;5lmUxib{X z6zVu#uj(^3xUzc6blFLA&_XQsM+O3K!*hM|+QY??me|56Lp=+HGVq&$CkJLN1eKKC z6E83)$&Cn6{}s`|=v;l~!+29dyq<-hFEwMsE15c*1F@G@o+nAUHcS`1uaXbP{4c=1 zBM5uXc(T$HS~H{+QN@`pDZ^xp_YJ-&)xK1{s%criCRodeaGczfLDtf|zHH#OV!4Oh zMDP^KgAN0FRx|k4S(I8ypx9Z1!zJyeIIGaSes%nKq91tpWGDzCK=|_t1$~QzOkvuW zM?PZb#&iviyV;VxMrsbh+SOOPxlO}p0C(00^n+aQSrC?IbB6)qNCr`rFw0H;i1P*U zYFxH-TFhZslatrJbLF&@Zb_F|91rlTuD|VgG7~W%-hql3CShsFvS~$dksMgmA z@9hsPz&(TS`zhyj#g>Z}d+Vhog9KK{XS3~al({j$I5n?s#jUanR61lrS;jYf|XxVNlbUF9kM>A zL({O*D>VZlELY6@(mVZQk~;U7SiQ}sji*X;+tbD{1~Bbyh3`mYr7tjLu*J;hplH8l z?*P){FbOz5UHC(PJz|~jpmSk(23ZEZo-W$%crG6sn&jv0Nu4c4pDo2G=0jt$gEcz&@gU0NOZuMrbnVX;K{^h^NDs# zcapU8UdBmwqaE&pw+>R;fWJTNZxzplRa=FX=Nb&IbH=>xeGf`ppzYnK)wI4ORwZMh z+LM{a+8;_<#6IO+lNsE)ZvVMv+O0LcOZA;bRsW51fDA(rg0aEb-z;($Hg{2k1qS#Z zp*RL$-Wn6RmI$0R>HI@J)We;0F@C}+4;hoo6#gVltga?Eb-AyYGZ@S9Q+@r=d|%al zgLbR1*%s;Q!D1`LjYg}XR@;r(fTRzDV%%bu)Tr^aV zuKb(2S_?T^yGbwGom(zG+wi)mJk+T^o0~Ek@Lm_wi|Q2TjR6biP(Oo(iK4LDvzDN!Rmc$;+?iLc;} z%rFnEU7*Kk33HM}#m#4|ljKkRjmfq5H?gP^K9;ZjP}LHb7-a>6pyEO=TbEHyHO}QZ zWD7yboH40xdTn)p^kT^HUc=0igIwt_Z7Jgziw&|`1U?vgrbnTpch7;+$@}lTM=ow>ligz40h69dH(Usy??#2^gmR*A8HaR_trm477xT{#FZ7=@@B$5QeZO4I zL-Jc0#czFwI&mHIv?WXHyUpX)=Ce%R=*B>JlO;qG?T$VW|QPM`=N9xV3@4mA;G!a(jD?TKLb4^XIf|r+@ zH|$@P6ygX8=q8Z`{6+ic3GraZqP7X=&Og8j(IjVo1Sb7;ftuWyLs&ttY5wW9vs-fR zkEX1Jcax{0J8}9}d_~4YnN8<|?6fnHa`8S<-Db!%i+Smq`Q1-0=3eRDc6RA1kh>Tk zJB_YE^L;%@HEWU!s-N1fd&$xt6?>1o_5FSi0&X7PXf8!cZ|rS0FFz4J_rFRe{ypb* zN^1-40s$Kb)i-M(PdCK((gJz)3_u-)S24ttXzi+M;1a?SVmSJ@I zXIIxg`K`;SKM)4lzn9S#OcJg#KD^yV{kG$*mG;lP*#=F-S9$(sV)_#YJmfqa6?gHU zSa(|JN@??Qlo^Huf+d2FQHpo@C}yPJ>;<%aDvXzq@8;wcH+r$C1WNrmZ}{qDT$_8~ z7E<;q32IAb#PEzHURM~|_|)-DnEEtrsvVf^jekjfrpjGZE>trgTLRy()BF0XwJ;1R ztm&lZQkJ4HD0EJK00*MC`tSHOcvhy^HTk))k1w3ywO$S( za&#aUlJN?{hTBK?G~Td)tJHIYQYbFsZqJi%w~@;~MrB$2K)2@I+3ec2)!x{^*ImDQ zokJa9RP9!(0%fu2^2c`a-Ge+-!7n4{#0L9J9l5FBJ1y_sOZ>SS4KuiR%9JZcr7J^d zfgIIT@7(>s9Amxp86tB44XM5H0Vd>>k78OkfCtGv480uORd?|R3M-Gk_(}cChoIre zC%(3OxHu?jFB> z>L_ohTqVGG(OuB#>6`M+%f+c7L7m>Uh%5`%V7EA!uhrFEi*ufMOX6m)(V9 zZPYGxSHIm9F1CePOd+Q86daIScFn$f{jWjVhG}LlB#68FjrGJttJ8*>28fGStSs&i z*(ABbu~5ykrgQf)4?fM}X&_Nq!;7}71M0KdYwj@cMLijZuu~LD=MdH31L>ubs%-g> zw0~#B*455ub8l}P> z26X%wMz5|?@&Go)#<3?Y14;U(l5{Q<(;^`{DY9_BLONublFCXoL4^h`T*F0La3N)M zFbmiWDGC5VqCWAR*2N3ypWaQ-es!n1Z3J!ATFs)={Oo0l`HzNGzp6!Cy)eTg+|N}| zpH#!>NRFn-siBsgC+6bQ^PUT-W+2y%snk)*zsZzG&4U-4prW4#ju+N44&Y=3X^v*V+n;3%PnEs4`4_R7G0Zu>Z+4}#HZ?R zChWuYcQ-S!!$xigYCoE{x0f_$e^dTwgpweQim+4!iw7zxHUWDQS9Bk%r+;_Jo$L}YRH+*im1NF`4U{z@-|bhRGxa1J5jJ#kl3oYR9|vIwIQMOAQS@pW6f(!O|nJMYQ%X6JgHEUN%OJ4I|q1ED>c4wX0I`_L!8#RY?!;yu7$HEyn z$J(jOUa6vEZ&|iHm0i5(5!P8dq#s+tm3ZW`Hq;!>M#v#~{oYkU@jFDC|o2s51#!1{Dyv{|i# zYR2H;J9P`dYCe9u&6RnId|!}IJ?p&XO$rd&8de#j6mK;!IFk3PIz!Z4MAl+iE&j1a)7JN5tj6%je|9kM z<$J_^eP;)9;g;P+;8D3{yPZc^JJkBzoD=uO^MuJe!rA_`igkGCF0zMbdhQBx=zs06 zOcALz(>QC5qAFx#u6bb+(H<�K6KR*#J_d`WH!Z223%R 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 J@R%9I0|30g=|unl literal 0 HcmV?d00001 diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/sampledata.zip b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/cloudhotfolder/test/sampledata.zip new file mode 100644 index 0000000000000000000000000000000000000000..a55deaf6af8d4b2c4f0d45a7b2ea5ffffe4c4f53 GIT binary patch literal 1461 zcmWIWW@h1H0D()cnLc0!l;CENVJJ?_EyzhtNi0d!4-MgDV1DDdD5`bpm8jARZU#n{ zZ;T8KEFwVV0dPaEq8TEDYDi{oL4HvQ#H^2m%$k!m0mVVGSj|Frq6W};c%8Tq%~%aW z#wH~uXXmG-WhSRW9Ii{qh9zh=Sdd^ta%pi%er{?}acKb}s7!F%2nv14f8Jo(1${-Z@p zmr16wbLQTje=D&^)GA3J>2=`!IB~wna=|BFb4+&JYdUPLY~OTvjV(vZ6~XR(4LfFk zOK$q76{(^4-|Wv*Gq2q8<7Xe1{JR%EfBD&zl9@s^v9}8JGg`UL(qht8JdVs%?k~Q) zm+_VPgunjRG$t#S3btov`*S+2mQ^j5dE$BXwAx4h0B=SnIc8khK?0gF1Q^~rf|w{N zj}?+RFfs+q{6u8_D_5fI<>MvJEXM1G6vCc2H)*YCEp11hE}xEyI$=JrvlE f<{Gq&1#}rGV_~?Al?`Yy0~-)dVq#$6Wd`v8TQHDY literal 0 HcmV?d00001 diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/localization/cloudhotfolder-locales_de.properties b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/localization/cloudhotfolder-locales_de.properties new file mode 100644 index 0000000..44cf733 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/localization/cloudhotfolder-locales_de.properties @@ -0,0 +1,28 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2017 SAP SE or an SAP affiliate company. All rights reserved. +# +# This software is the confidential and proprietary information of SAP +# ("Confidential Information"). You shall not disclose such Confidential +# Information and shall use it only in accordance with the terms of the +# license agreement you entered into with SAP. +# ----------------------------------------------------------------------- + +# put localizations of item types into this file +# Note that you can also add special locatizations which +# can be retrieved with the +# +# ...tools.localization.Localization.getLocalizedString(...) +# +# methods. +# +# syntax for type localizations: +# +# type..name=XY +# type...name=XY +# type..description=XY +# type...description=XY +# +# yourcustomlocalekey=value + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/localization/cloudhotfolder-locales_en.properties b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/localization/cloudhotfolder-locales_en.properties new file mode 100644 index 0000000..1e1cea8 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/localization/cloudhotfolder-locales_en.properties @@ -0,0 +1,21 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2017 SAP SE or an SAP affiliate company. All rights reserved. +# +# This software is the confidential and proprietary information of SAP +# ("Confidential Information"). You shall not disclose such Confidential +# Information and shall use it only in accordance with the terms of the +# license agreement you entered into with SAP. +# ----------------------------------------------------------------------- + +type.MonitorSystemArea.HOT_FOLDER.name=Hot Folder + +type.MonitorStep.DOWNLOADED.name=Download +type.MonitorStep.FILE_ROUTED.name=File Routed +type.MonitorStep.FILE_UNZIPPED.name=Unzip +type.MonitorStep.HEADER_SETUP.name=Setup +type.MonitorStep.HEADER_INIT.name=Initialization +type.MonitorStep.HEADER_TRANSFORMED.name=Transformation +type.MonitorStep.HEADER_EXECUTED.name=Execution +type.MonitorStep.HEADER_CLEANUP.name=Cleanup diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/localization/cloudhotfolder-locales_fr.properties b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/localization/cloudhotfolder-locales_fr.properties new file mode 100644 index 0000000..44cf733 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/resources/localization/cloudhotfolder-locales_fr.properties @@ -0,0 +1,28 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2017 SAP SE or an SAP affiliate company. All rights reserved. +# +# This software is the confidential and proprietary information of SAP +# ("Confidential Information"). You shall not disclose such Confidential +# Information and shall use it only in accordance with the terms of the +# license agreement you entered into with SAP. +# ----------------------------------------------------------------------- + +# put localizations of item types into this file +# Note that you can also add special locatizations which +# can be retrieved with the +# +# ...tools.localization.Localization.getLocalizedString(...) +# +# methods. +# +# syntax for type localizations: +# +# type..name=XY +# type...name=XY +# type..description=XY +# type...description=XY +# +# yourcustomlocalekey=value + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/aop/AbstractMonitoringAspect.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/aop/AbstractMonitoringAspect.java new file mode 100644 index 0000000..3ffe22f --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/aop/AbstractMonitoringAspect.java @@ -0,0 +1,114 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.aop; + +import de.hybris.platform.cloud.commons.services.monitor.*; + +import org.slf4j.Logger; +import org.springframework.beans.factory.annotation.Required; + +import java.util.Date; +import java.util.Optional; + +import static org.slf4j.LoggerFactory.getLogger; + +public class AbstractMonitoringAspect +{ + private static final Logger LOG = getLogger(BatchHeaderAspect.class); + + private MonitorService monitorService; + + protected void beginMonitor(final SystemArea area, final String key) + { + getMonitorService().begin(area, key); + } + + protected void resumeMonitor(final SystemArea area, final String key) + { + getMonitorService().resume(area, key); + } + + protected void monitorSuccessfulStep(final Step step, final Date started, final String message, final Object... messageArgs) + { + final Optional history = getMonitorService().current(); + if (!history.isPresent()) + { + LOG.warn("No MonitorHistory within the thread, cannot add successful Step [{}] started [{}]", step, started); + } + else + { + history.get().stepSucceeded(step, started, new Date(), message, messageArgs); + } + } + + protected void monitorFailedStep(final Step step, final Date started, final Throwable e, final String message, final Object... messageArgs) + { + final Optional history = getMonitorService().current(); + if (!history.isPresent()) + { + LOG.warn("No MonitorHistory within the thread, cannot add failed Step [{}] started [{}]", step, started); + } + else + { + history.get().stepFailed(step, started, new Date(), e, message, messageArgs); + } + } + + protected void monitorAction(final String code, final Status status, final Date started, final String message, final Object... messageArgs) + { + final Optional history = getMonitorService().current(); + if (!history.isPresent()) + { + LOG.warn("No MonitorHistory within the thread, cannot add action Code [{}] Status [{}] started [{}]", code, status, started); + } + else + { + history.get().addAction(code, status, started, new Date(), message, messageArgs); + } + } + + protected void checkpointMonitor() + { + final Optional history = getMonitorService().current(); + if (!history.isPresent()) + { + LOG.warn("No MonitorHistory within the thread, cannot checkpoint"); + } + else + { + history.get().checkpoint(); + } + } + + protected void endMonitor(final Status status) + { + final Optional history = getMonitorService().current(); + if (!history.isPresent()) + { + LOG.warn("No MonitorHistory within the thread, cannot end with Status [{}]", status); + } + else + { + history.get().end(status); + } + } + + protected MonitorService getMonitorService() + { + return monitorService; + } + + @Required + public void setMonitorService(final MonitorService monitorService) + { + this.monitorService = monitorService; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/aop/BatchHeaderAspect.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/aop/BatchHeaderAspect.java new file mode 100644 index 0000000..b03b869 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/aop/BatchHeaderAspect.java @@ -0,0 +1,274 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.aop; + +import de.hybris.platform.acceleratorservices.dataimport.batch.BatchHeader; +import de.hybris.platform.cloud.commons.aop.exception.StepException; +import de.hybris.platform.cloud.commons.services.monitor.Status; +import de.hybris.platform.cloud.commons.services.monitor.Step; +import de.hybris.platform.cloud.commons.services.monitor.SystemArea; +import de.hybris.platform.cloud.hotfolder.aop.utils.ActionCodeGenerator; +import de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.ZipBatchHeader; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections.MapUtils; +import org.apache.commons.collections.MultiMap; +import org.aspectj.lang.ProceedingJoinPoint; +import org.slf4j.Logger; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.messaging.Message; +import org.springframework.messaging.MessageHeaders; + +import java.io.File; +import java.util.Date; +import java.util.List; +import java.util.Set; +import java.util.function.Supplier; +import java.util.stream.Collectors; + +import static org.slf4j.LoggerFactory.getLogger; + +/** + * AOP implementation to monitor the various stages of a Hot Folder Spring Integration Message + */ +// Suppress Sonar warnings - AOP aspects are supposed to throw Throwables. +@SuppressWarnings({"squid:S00112"}) +public class BatchHeaderAspect extends AbstractMonitoringAspect +{ + private static final Logger LOG = getLogger(BatchHeaderAspect.class); + private String fileNameHeaderKey; + + /** + * AOP Around implementation to monitor the setup of a Header based on a File + * @param pjp Pointcut to be executed + * @param file the File the header is being setup for + * @return the value from the execution + * @throws Throwable any exception/error thrown during set up of the aspect for logging or a {@link StepException} in the + * case of an exception during execution of the method call + */ + public Object aroundFileSetup(final ProceedingJoinPoint pjp, final File file) throws Throwable + { + final String fileName = file.getName(); + resumeMonitor(SystemArea.HOT_FOLDER, fileName + file.lastModified()); + return aroundSetup(pjp, () -> fileName); + } + + /** + * AOP Around implementation to monitor the setup of a Header based on a Message + * @param pjp Pointcut to be executed + * @param message the Message the header is being setup for + * @return the value from the execution + * @throws Throwable any exception thrown by the method called + */ + public Object aroundMessageSetup(final ProceedingJoinPoint pjp, final Message message) throws Throwable + { + return aroundSetup(pjp, () -> { + final MessageHeaders headers = message.getHeaders(); + return (String) headers.get(getFileNameHeaderKey()); + }); + } + + private Object aroundSetup(final ProceedingJoinPoint pjp, final Supplier fileNameSupplier) throws Throwable + { + final Step headerSetup = Step.HEADER_SETUP; + + if (LOG.isDebugEnabled()) + { + LOG.debug("about to run method [{}] on target [{}]", pjp.getSignature().getName(), pjp.getTarget()); + } + + final String fileName = fileNameSupplier.get(); + final Date started = new Date(); + + try + { + final Object proceed = pjp.proceed(); + monitorSuccessfulStep(headerSetup, started, "Successfully setup header for file [{}]. Header will be passed down pipeline.....", fileName); + return proceed; + } + catch (final Exception e) + { + monitorFailedStep(headerSetup, started, e, "Failed to setup header for file [{}]", fileName); + endMonitor(Status.FAILURE); + throw new StepException(headerSetup, e); + } + } + + /** + * AOP Around implementation to monitor the init of a Header + * @param pjp Pointcut to be executed + * @param header the Header being initialized + * @return the value from the execution + * @throws Throwable any exception thrown by the method called + */ + public Object aroundInit(final ProceedingJoinPoint pjp, final BatchHeader header) throws Throwable + { + return internalMonitor(pjp, header, Step.HEADER_INIT); + } + + /** + * AOP Around implementation to monitor the transformation of a Header's file to an impex + * @param pjp Pointcut to be executed + * @param header the Header being transformed + * @return the value from the execution + * @throws Throwable any exception thrown by the method called + */ + public Object aroundTransform(final ProceedingJoinPoint pjp, final BatchHeader header) throws Throwable + { + if (LOG.isDebugEnabled()) + { + LOG.debug("about to run method [{}] on target [{}]", pjp.getSignature().getName(), pjp.getTarget()); + } + + if (header instanceof ZipBatchHeader) + { + return aroundZipBatchHeaderTransform(pjp, (ZipBatchHeader) header); + } + return aroundBatchHeaderTransform(pjp, header); + } + + private Object aroundBatchHeaderTransform(final ProceedingJoinPoint pjp, final BatchHeader header) throws Throwable + { + final Step headerTransformed = Step.HEADER_TRANSFORMED; + + final String fileName = header.getFile().getName(); + final Long sequenceId = header.getSequenceId(); + final Date started = new Date(); + try + { + final Object result = pjp.proceed(); + + final BatchHeader resultingHeader = (BatchHeader) result; + final List transformedFiles = resultingHeader.getTransformedFiles(); + if (CollectionUtils.isNotEmpty(transformedFiles)) + { + final List transformedNames = transformedFiles.stream().map(File::getName).collect(Collectors.toList()); + monitorAction(ActionCodeGenerator.shortAlphaNumeric(), Status.SUCCESS, started, "Successfully transformed file [{}] " + + "to impex(es) ({})", fileName, transformedNames); + } + + monitorSuccessfulStep(headerTransformed, started, "Successfully transformed header for file [{}] with sequenceId [{}]", fileName, sequenceId); + + return result; + } + catch (final Exception e) + { + monitorFailedStep(headerTransformed, started, e, "Failed to transform header for file [{}] with sequenceId [{}]", fileName, sequenceId); + endMonitor(Status.FAILURE); + throw new StepException(headerTransformed, e); + } + } + + private Object aroundZipBatchHeaderTransform(final ProceedingJoinPoint pjp, final ZipBatchHeader header) throws Throwable + { + final Step headerTransformed = Step.HEADER_TRANSFORMED; + + final String zipFolderName = header.getOriginalFileName(); + final Long sequenceId = header.getSequenceId(); + final Date started = new Date(); + try + { + final Object result = pjp.proceed(); + + final MultiMap originalToTransformed = ((ZipBatchHeader) result).getOriginalToTransformedMap(); + if (MapUtils.isNotEmpty(originalToTransformed)) + { + //noinspection unchecked + for (final String csvFile : (Set) originalToTransformed.keySet()) + { + monitorAction(ActionCodeGenerator.shortAlphaNumeric(), Status.SUCCESS, started, "For zip folder [{}], " + + "successfully transformed expanded file [{}] to impex(es) ({})", zipFolderName, csvFile, originalToTransformed.get(csvFile)); + } + } + + monitorSuccessfulStep(headerTransformed, started, "Successfully transformed header for zip folder [{}] " + + "with sequenceId [{}]", zipFolderName, sequenceId); + + return result; + } + catch (final Exception e) + { + monitorFailedStep(headerTransformed, started, e, "Failed to transform header for zip folder [{}]", zipFolderName); + endMonitor(Status.FAILURE); + throw new StepException(headerTransformed, e); + } + + } + + /** + * AOP Around implementation to monitor the execution of an transformed impex associated with a Header + * + * @param pjp Pointcut to be executed + * @param header the Header being executed + * @return the value from the execution + * @throws Throwable any exception thrown by the method called + */ + public Object aroundExecute(final ProceedingJoinPoint pjp, final BatchHeader header) throws Throwable + { + return internalMonitor(pjp, header, Step.HEADER_EXECUTED); + } + + /** + * AOP Around implementation to monitor the clean up of a Header + * @param pjp Pointcut to be executed + * @param header the Header being cleaned up + * @return the value from the execution + * @throws Throwable any exception thrown by the method called + */ + public Object aroundCleanup(final ProceedingJoinPoint pjp, final BatchHeader header) throws Throwable + { + final Object result = internalMonitor(pjp, header, Step.HEADER_CLEANUP); + endMonitor(Status.SUCCESS); + return result; + } + + protected Object internalMonitor(final ProceedingJoinPoint pjp, final BatchHeader header, final Step step) throws Throwable + { + if (LOG.isDebugEnabled()) + { + LOG.debug("about to run method [{}] on target [{}]", pjp.getSignature().getName(), pjp.getTarget()); + } + + final String fileName = getFileName(header); + + final Date started = new Date(); + try + { + final Object proceed = pjp.proceed(); + monitorSuccessfulStep(step, started, "Successfully processed file [{}]. " + + "SequenceId [{}]", fileName, header.getSequenceId()); + return proceed; + } + catch (final Exception e) + { + monitorFailedStep(step, started, e, "Failed to process file [{}]", fileName); + endMonitor(Status.FAILURE); + throw new StepException(step, e); + } + } + + private String getFileName(final BatchHeader header) + { + return header instanceof ZipBatchHeader + ? ((ZipBatchHeader) header).getOriginalFileName() + : header.getFile().getName(); + } + + protected String getFileNameHeaderKey() + { + return fileNameHeaderKey; + } + + @Required + public void setFileNameHeaderKey(final String fileNameHeaderKey) + { + this.fileNameHeaderKey = fileNameHeaderKey; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/aop/FileUnzippedAspect.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/aop/FileUnzippedAspect.java new file mode 100644 index 0000000..79a4072 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/aop/FileUnzippedAspect.java @@ -0,0 +1,99 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.aop; + +import de.hybris.platform.cloud.commons.aop.exception.StepException; +import de.hybris.platform.cloud.commons.services.monitor.Status; +import de.hybris.platform.cloud.commons.services.monitor.Step; +import de.hybris.platform.cloud.commons.services.monitor.SystemArea; +import org.aspectj.lang.ProceedingJoinPoint; +import org.slf4j.Logger; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.messaging.Message; +import org.springframework.messaging.MessageHeaders; + +import java.util.Date; + +import static org.slf4j.LoggerFactory.getLogger; + +/** + * AOP implementation to monitor the exploding of a ZIP file + */ +// Suppress Sonar warnings - AOP aspects are supposed to throw Throwables. +@SuppressWarnings({"squid:S00112"}) +public class FileUnzippedAspect extends AbstractMonitoringAspect +{ + private static final Logger LOG = getLogger(FileUnzippedAspect.class); + + private String fileNameHeaderKey; + private String fileLastModifiedHeaderKey; + + /** + * AOP Around implementation to capture the time taken to explode a ZIP file + * + * @param pjp Pointcut to be executed + * @param message the message being passed by Spring Integration + * @return the value from the execution + * @throws Throwable any exception/error thrown during set up of the aspect for logging or a {@link StepException} in the + * case of an exception during execution of the method call + */ + public Object aroundUnzipped(final ProceedingJoinPoint pjp, final Message message) throws Throwable + { + if (LOG.isDebugEnabled()) + { + LOG.debug("about to run method [{}] on target [{}]", pjp.getSignature().getName(), pjp.getTarget()); + } + + final MessageHeaders headers = message.getHeaders(); + final String unzippedTo = headers.getId().toString(); + final String fileName = (String) headers.get(getFileNameHeaderKey()); + final long modified = (long) headers.get(getFileLastModifiedHeaderKey()); + + resumeMonitor(SystemArea.HOT_FOLDER, fileName + modified); + + final Date started = new Date(); + try + { + final Object proceed = pjp.proceed(); + monitorSuccessfulStep(Step.FILE_UNZIPPED, started, "Successfully unzipped file [{}] to [{}]", fileName, unzippedTo); + return proceed; + } + catch (final Exception e) + { + monitorFailedStep(Step.FILE_UNZIPPED, started, e, "Failed to unzip file [{}]", fileName); + endMonitor(Status.FAILURE); + throw new StepException(Step.FILE_UNZIPPED, e); + } + + } + + protected String getFileNameHeaderKey() + { + return fileNameHeaderKey; + } + + @Required + public void setFileNameHeaderKey(final String fileNameHeaderKey) + { + this.fileNameHeaderKey = fileNameHeaderKey; + } + + protected String getFileLastModifiedHeaderKey() + { + return fileLastModifiedHeaderKey; + } + + @Required + public void setFileLastModifiedHeaderKey(final String fileLastModifiedHeaderKey) + { + this.fileLastModifiedHeaderKey = fileLastModifiedHeaderKey; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/aop/ImpexImportAspect.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/aop/ImpexImportAspect.java new file mode 100644 index 0000000..0df93be --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/aop/ImpexImportAspect.java @@ -0,0 +1,138 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.aop; + +import de.hybris.platform.cloud.commons.aop.exception.ActionException; +import de.hybris.platform.cloud.commons.services.monitor.Status; +import de.hybris.platform.cloud.commons.services.monitor.Step; +import de.hybris.platform.cloud.hotfolder.aop.utils.ActionCodeGenerator; +import de.hybris.platform.impex.model.ImpExMediaModel; +import de.hybris.platform.servicelayer.impex.ImpExResource; +import de.hybris.platform.servicelayer.impex.ImportConfig; +import de.hybris.platform.servicelayer.impex.ImportResult; + +import org.aspectj.lang.ProceedingJoinPoint; +import org.slf4j.Logger; + +import java.io.File; +import java.util.Date; +import java.util.Optional; + +import static org.slf4j.LoggerFactory.getLogger; + +/** + * AOP implementation to monitor the set up and subsequent execution of an Impex by the Hybris Platform + */ +// Suppress Sonar warnings - AOP aspects are supposed to throw Throwables. +@SuppressWarnings({"squid:S00112"}) +public class ImpexImportAspect extends AbstractMonitoringAspect +{ + private static final Logger LOG = getLogger(ImpexImportAspect.class); + private static final String OPTIONAL = "OPTIONAL"; + private static final String MANDATORY = "MANDATORY"; + + /** + * AOP Around implementation to capture the name of the impex we're about to import, as we lose this information + * at the actual point of impex import + * + * @param pjp Pointcut to be executed + * @param file The file path passed to the set up service + * @throws Throwable any exception/error thrown during set up of the aspect for logging or a {@link ActionException} in the + * case of an exception during execution of the method call + */ + public Object aroundSetupImpex(final ProceedingJoinPoint pjp, final String file, final boolean errorIfMissing) throws Throwable + { + if (LOG.isDebugEnabled()) + { + LOG.debug("about to run method [{}] on target [{}]", pjp.getSignature().getName(), pjp.getTarget()); + } + + final Date started = new Date(); + try + { + monitorAction(ActionCodeGenerator.shortAlphaNumeric(), Status.IN_PROGRESS, started, + "Attempting to process [{}] impex file [{}]...", errorIfMissing ? MANDATORY : OPTIONAL, getFileName(file)); + + return pjp.proceed(); + } + catch (final Exception e) + { + // Failure/success monitoring of actual impex import is captured in aroundImportData + // We're only capturing the filename here so it's unnecessary to add monitoring on an exception + if (LOG.isDebugEnabled()) + { + LOG.debug("Exception occurred just prior to impex import. Possibly during impex set up...", e); + } + throw new ActionException("Set up impex prior to import", Step.HEADER_EXECUTED, e); + } + } + + private String getFileName(final String absPath) + { + return new File(absPath).getName(); + } + + /** + * AOP Around implementation to capture the size of a file and the time taken to transfer it + * + * @param pjp Pointcut to be executed + * @param config the ImportConfig for the impex + * @return the value from the execution + * @throws Throwable any exception/error thrown during set up of the aspect for logging or a {@link ActionException} in the + * case of an exception during execution of the method call + */ + public Object aroundImportData(final ProceedingJoinPoint pjp, final ImportConfig config) throws Throwable + { + if (LOG.isDebugEnabled()) + { + LOG.debug("about to run method [{}] on target [{}]", pjp.getSignature().getName(), pjp.getTarget()); + } + + final Optional media = Optional.of(config) + .map(ImportConfig::getScript) + .map(ImpExResource::getMedia); + + final String mediaCode = media + .map(ImpExMediaModel::getCode) + .orElse(ActionCodeGenerator.randomUUID()); + + final Date started = new Date(); + try + { + final ImportResult result = (ImportResult) pjp.proceed(); + if (result.isRunning()) + { + monitorAction(mediaCode, Status.IN_PROGRESS, started, "Impex is still running, will not wait. Maybe consider setting config.synchronous to true"); + } + else if (result.isSuccessful()) + { + monitorAction(mediaCode, Status.SUCCESS, started, "Impex ran successfully"); + } + else if (result.isError()) + { + final String supportingInfo = Optional.of(result) + .filter(ImportResult::hasUnresolvedLines) + .map(ImportResult::getUnresolvedLines) + .map(ImpExMediaModel::getPreview) + .orElse("No supporting info, please see logs"); + monitorAction(mediaCode, Status.FAILURE, started, "Impex didn't run successfully. {}", supportingInfo); + } + + return result; + } + catch (final Exception e) + { + monitorAction(mediaCode, Status.FAILURE, started, "Impex didn't run successfully and exception was thrown. Ex Message: {}", e.getMessage()); + throw new ActionException("Impex import", Step.HEADER_EXECUTED, e); + } + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/aop/utils/ActionCodeGenerator.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/aop/utils/ActionCodeGenerator.java new file mode 100644 index 0000000..534ec30 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/aop/utils/ActionCodeGenerator.java @@ -0,0 +1,38 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.aop.utils; + +import org.apache.commons.lang3.RandomStringUtils; + +import java.util.UUID; + +/** + * Utilities for generating action codes. + */ +public class ActionCodeGenerator +{ + private static final int SHORT_CODE_LEN = 8; + + private ActionCodeGenerator() + { + //Private constructor to prevent instantiation + } + + public static String shortAlphaNumeric() + { + return RandomStringUtils.randomAlphanumeric(SHORT_CODE_LEN); + } + + public static String randomUUID() + { + return UUID.randomUUID().toString(); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/batch/task/CloudCleanupHelper.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/batch/task/CloudCleanupHelper.java new file mode 100644 index 0000000..a77b429 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/batch/task/CloudCleanupHelper.java @@ -0,0 +1,58 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.batch.task; + +import de.hybris.platform.acceleratorservices.dataimport.batch.BatchHeader; +import de.hybris.platform.acceleratorservices.dataimport.batch.task.CleanupHelper; +import de.hybris.platform.cloud.hotfolder.spring.messaging.support.impl.UnmappedHotfolderChannel; +import org.slf4j.Logger; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; + +import static org.slf4j.LoggerFactory.getLogger; + +/** + * Cleanup for the impex import process. Deletes all local files. + */ +public class CloudCleanupHelper extends CleanupHelper +{ + private static final Logger LOG = getLogger(UnmappedHotfolderChannel.class); + + /** + * Deletes the source file + * + * @param header - the header for the batch operation. + * @param error - true if an error occured during processing; otherwise false; + */ + @Override + protected void cleanupSourceFile(final BatchHeader header, final boolean error) + { + if (header != null) + { + final File file = header.getFile(); + if(file != null && file.exists() && file.isFile()) + { + try + { + LOG.debug("Cleaning up [{}].", file.getAbsolutePath()); + Files.delete(file.toPath()); + } + catch (final IOException e) + { + LOG.error("Unable to clean up local file [{}].", file.getAbsolutePath(), e); + } + } + } + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/constants/CloudHotfolderConstants.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/constants/CloudHotfolderConstants.java new file mode 100644 index 0000000..212584c --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/constants/CloudHotfolderConstants.java @@ -0,0 +1,25 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.constants; + +// Suppress Sonar warnings - suppressing deprecation warnings for generated class +@SuppressWarnings({"deprecation","PMD","squid:CallToDeprecatedMethod"}) +public class CloudHotfolderConstants extends GeneratedCloudHotfolderConstants +{ + public static final String EXTENSIONNAME = "cloudhotfolder"; + + private CloudHotfolderConstants() + { + //empty + } + + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/ZipBatchHeader.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/ZipBatchHeader.java new file mode 100644 index 0000000..5aa9413 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/ZipBatchHeader.java @@ -0,0 +1,138 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.dataimport.batch.zip; + +import de.hybris.platform.acceleratorservices.dataimport.batch.BatchHeader; + +import org.springframework.util.Assert; + +import java.io.File; +import java.util.Collection; + +import org.apache.commons.collections.MultiMap; +import org.apache.commons.collections.map.MultiValueMap; + +/** + * @inheritDoc It also includes + *

    + *
  • originalFileName: the original ZIP file name before it was exploded
  • + *
  • unzippedFolder: the directory into which the ZIP was exploded
  • + *
  • unzippedFiles: a collection of files that were exploded from within the ZIP
  • + *
  • originalToTransformedMap: a collection which maps an original file name to the resulting impex file(s) + *
+ */ +public class ZipBatchHeader extends BatchHeader +{ + private String originalFileName; + private File unzippedFolder; + private Collection unzippedFiles; + private MultiMap originalToTransformedMap; + + public String getOriginalFileName() + { + return originalFileName; + } + + public void setOriginalFileName(final String originalFileName) + { + this.originalFileName = originalFileName; + } + + /** + * Get where the file was actually unzipped to + *

Note: spring-integration-zip creates a UUID folder (Message.ID) and then unzips the file within

+ * e.g. file_name.zip -> be24ef21-cc29-5d71-d7bd-93c35baa2d3b/file_name + * + * @return - A {@link File} pointing to where the archive was unzipped + */ + public File getFileUnzippedAs() + { + return getFile(); + } + + /** + * Set where the file was actually unzipped to + *

spring-integration-zip creates a UUID folder (Message.ID) and then unzips the file within

+ * e.g. file_name.zip -> be24ef21-cc29-5d71-d7bd-93c35baa2d3b/file_name + *

Note: also sets unzippedFolder to the parent of the given directory

+ * + * @throws IllegalArgumentException where given directory has no parent + */ + public void setFileUnzippedAs(final File dir) + { + Assert.notNull(dir.getParentFile(), "parentFile of given folder cannot be null"); + setFile(dir); + this.unzippedFolder = dir.getParentFile(); + } + + /** + * Get the directory encapsulating the unzipped file + * + * @see #setFileUnzippedAs + */ + public File getUnzippedFolder() + { + return unzippedFolder; + } + + /** + * Get the collection files resulting from unzipping the original file + */ + public Collection getUnzippedFiles() + { + return unzippedFiles; + } + + /** + * Set the collection files resulting from unzipping the original file + * + * @param unzippedFiles - The unzipped files + */ + public void setUnzippedFiles(final Collection unzippedFiles) + { + this.unzippedFiles = unzippedFiles; + } + + /** + * Get the collection containing the mappings of original csv files to their resulting impex file(s) + * + * @return + */ + public MultiMap getOriginalToTransformedMap() + { + return originalToTransformedMap; + } + + /** + * Set the multimap which maps csv files name to their resulting impex + * + * @param originalToTransformedMap + */ + public void setOriginalToTransformedMap(final MultiMap originalToTransformedMap) + { + this.originalToTransformedMap = originalToTransformedMap; + } + + /** + * Adds a mapping of csv file name to impex file name + * + * @param original the original filename + * @param transformed the resulting transformed filename + */ + public void addOriginalToTransformedEntry(final String original, final String transformed) + { + if (originalToTransformedMap == null) + { + originalToTransformedMap = new MultiValueMap(); + } + originalToTransformedMap.put(original, transformed); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/ZipHeaderTask.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/ZipHeaderTask.java new file mode 100644 index 0000000..786743d --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/ZipHeaderTask.java @@ -0,0 +1,25 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.dataimport.batch.zip; + +/** + * General task for execution in a ZIP batch pipeline. + */ +public interface ZipHeaderTask +{ + /** + * Executes a zip task with a predefined {@link ZipBatchHeader} identifying all relevant process information. + * @param header + * @return the header + */ + ZipBatchHeader executeZip(final ZipBatchHeader header); + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/UnzippedFolderImportService.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/UnzippedFolderImportService.java new file mode 100644 index 0000000..18337bb --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/UnzippedFolderImportService.java @@ -0,0 +1,24 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.service; + +import de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.ZipBatchHeader; + +/** + * Strategy for processing a {@link ZipBatchHeader} representing an exploded ZIP file + */ +public interface UnzippedFolderImportService +{ + /** + * Process the {@link ZipBatchHeader} + */ + void execute(final ZipBatchHeader header); +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/impl/DataImportUnzippedFolderImportService.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/impl/DataImportUnzippedFolderImportService.java new file mode 100644 index 0000000..3c13a4e --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/impl/DataImportUnzippedFolderImportService.java @@ -0,0 +1,129 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.service.impl; + +import de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.ZipBatchHeader; +import de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.service.UnzippedFolderImportService; +import de.hybris.platform.commerceservices.dataimport.AbstractDataImportService; +import de.hybris.platform.commerceservices.setup.AbstractSystemSetup; +import de.hybris.platform.commerceservices.setup.data.ImportData; +import de.hybris.platform.core.initialization.SystemSetup; +import de.hybris.platform.core.initialization.SystemSetupContext; +import org.slf4j.Logger; +import org.springframework.beans.factory.BeanNameAware; +import org.springframework.beans.factory.annotation.Required; + +import java.io.File; +import java.util.Collections; +import java.util.List; + +import static org.slf4j.LoggerFactory.getLogger; + +/** + * @inheritDoc + * Checks if the unzipped directory contains a required directory before executing the contents of the header + */ +public class DataImportUnzippedFolderImportService implements UnzippedFolderImportService, BeanNameAware +{ + private static final Logger LOG = getLogger(DataImportUnzippedFolderImportService.class); + + private AbstractDataImportService abstractDataImportService; + private AbstractSystemSetup abstractSystemSetup; + private List importDatas; + private String requiredSubdirectory; + private String beanName; + + /** + * @inheritDoc + */ + @Override + public void execute(final ZipBatchHeader header) + { + final File unzippedAs = header.getFileUnzippedAs(); + final SystemSetupContext context = createContext(unzippedAs.getAbsolutePath()); + final AbstractDataImportService importService = getAbstractDataImportService(); + if (requiredDirExists(unzippedAs, this.getRequiredSubdirectory())) + { + LOG.info("Will try to import files within [{}] using importService [{}]", unzippedAs, importService); + importService.execute(getAbstractSystemSetup(), context, getImportDatas()); + } + else + { + LOG.info("directory [{}] didn't contain the required subfolder [{}] for importService [{}]", unzippedAs, this.getRequiredSubdirectory(), importService); + } + } + + protected SystemSetupContext createContext(final String path) + { + return new SystemSetupContext(Collections.emptyMap(), SystemSetup.Type.NOTDEFINED, SystemSetup.Process.NOTDEFINED, path); + } + + protected boolean requiredDirExists(final File folderToProcess, final String requiredDir) + { + return new File(folderToProcess, requiredDir).exists(); + } + + protected AbstractDataImportService getAbstractDataImportService() + { + return abstractDataImportService; + } + + @Required + public void setAbstractDataImportService(final AbstractDataImportService abstractDataImportService) + { + this.abstractDataImportService = abstractDataImportService; + } + + protected AbstractSystemSetup getAbstractSystemSetup() + { + return abstractSystemSetup; + } + + @Required + public void setAbstractSystemSetup(final AbstractSystemSetup abstractSystemSetup) + { + this.abstractSystemSetup = abstractSystemSetup; + } + + protected List getImportDatas() + { + return importDatas; + } + + @Required + public void setImportDatas(final List importDatas) + { + this.importDatas = importDatas; + } + + protected String getRequiredSubdirectory() + { + return requiredSubdirectory; + } + + @Required + public void setRequiredSubdirectory(final String requiredSubdirectory) + { + this.requiredSubdirectory = requiredSubdirectory; + } + + @Override + public void setBeanName(final String beanName) + { + this.beanName = beanName; + } + + @Override + public String toString() + { + return this.beanName; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/impl/FileBasedSetupImpexService.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/impl/FileBasedSetupImpexService.java new file mode 100644 index 0000000..529f87f --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/impl/FileBasedSetupImpexService.java @@ -0,0 +1,111 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.service.impl; + +import de.hybris.platform.commerceservices.setup.impl.DefaultSetupImpexService; +import de.hybris.platform.core.model.c2l.LanguageModel; +import de.hybris.platform.servicelayer.impex.ImportConfig; +import de.hybris.platform.servicelayer.impex.ImportResult; +import de.hybris.platform.servicelayer.impex.impl.FileBasedImpExResource; +import org.slf4j.Logger; + +import java.io.File; +import java.io.InputStream; +import java.util.List; +import java.util.Optional; + +import static org.slf4j.LoggerFactory.getLogger; + +/** + * @inheritDoc Extended implementation of {@link DefaultSetupImpexService} which retrieves an impex + * {@link File} at a given location + */ +public class FileBasedSetupImpexService extends DefaultSetupImpexService +{ + private static final Logger LOG = getLogger(FileBasedSetupImpexService.class); + + @Override + public void importImpexFile(final String file, final boolean errorIfMissing) + { + importImpexFile(file, errorIfMissing, false); + } + + @Override + public void importImpexFile(final String file, final boolean errorIfMissing, final boolean legacyMode) + { + // Handle starting with additional '/' from CoreDataImportService/SampleDataImportService + final String adjustedPath = Optional.ofNullable(file) + .map(s -> s.substring(1)) + .orElse(""); + + final File impexFile = new File(adjustedPath); + if (!impexFile.exists() || !impexFile.isFile()) + { + LOG.error("Importing [" + adjustedPath + + (errorIfMissing ? "]... ERROR (MISSING FILE)" : "]... SKIPPED (Optional File Not Found)")); + } + else + { + importImpexFile(adjustedPath, impexFile, legacyMode); + + // Try to import language specific impex files + if (adjustedPath.endsWith(getImpexExt())) + { + final String filePath = adjustedPath.substring(0, adjustedPath.length() - getImpexExt().length()); + final List languages = getCommonI18NService().getAllLanguages(); + importForLanguages(legacyMode, filePath, languages); + } + } + } + + @Override + protected void importImpexFile(final String file, final InputStream stream, final boolean legacyMode) + { + throw new UnsupportedOperationException("Please use method taking String, File, boolean instead"); + } + + protected void importImpexFile(final String file, final File impexFile, final boolean legacyMode) + { + final String message = "Importing [" + file + "]..."; + + try + { + LOG.info(message); + + final ImportConfig importConfig = new ImportConfig(); + importConfig.setScript(new FileBasedImpExResource(impexFile, getFileEncoding())); + importConfig.setLegacyMode(legacyMode); + + final ImportResult importResult = getImportService().importData(importConfig); + if (importResult.isError()) + { + LOG.error(message + " FAILED"); + } + } + catch (final Exception e) + { + LOG.error(message + " FAILED", e); + } + } + + protected void importForLanguages(final boolean legacyMode, final String filePath, final List languages) + { + for (final LanguageModel language : languages) + { + final String languageFilePath = filePath + "_" + language.getIsocode() + getImpexExt(); + final File langFile = new File(languageFilePath); + if (langFile.exists() && langFile.isFile()) + { + importImpexFile(languageFilePath, langFile, legacyMode); + } + } + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/impl/ImportZipSystemSetup.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/impl/ImportZipSystemSetup.java new file mode 100644 index 0000000..9a1c7d0 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/impl/ImportZipSystemSetup.java @@ -0,0 +1,46 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.service.impl; + +import de.hybris.platform.commerceservices.setup.AbstractSystemSetup; +import de.hybris.platform.core.initialization.SystemSetupParameter; +import org.springframework.beans.factory.annotation.Required; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * This class provides hooks into the system's initialization and update processes. + */ +public class ImportZipSystemSetup extends AbstractSystemSetup +{ + private List setupParameterKeys; + + @Override + public List getInitializationOptions() + { + return getSetupParameterKeys().stream() + .map(s -> createBooleanSystemSetupParameter(s, s, true)) + .collect(Collectors.toList()); + } + + protected List getSetupParameterKeys() + { + return setupParameterKeys; + } + + @Required + public void setSetupParameterKeys(final List setupParameterKeys) + { + this.setupParameterKeys = setupParameterKeys; + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/impl/RawImpexUnzippedFolderImportService.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/impl/RawImpexUnzippedFolderImportService.java new file mode 100644 index 0000000..173c019 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/impl/RawImpexUnzippedFolderImportService.java @@ -0,0 +1,69 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.service.impl; + +import de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.ZipBatchHeader; +import de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.service.UnzippedFolderImportService; +import de.hybris.platform.commerceservices.setup.SetupImpexService; + +import org.springframework.beans.factory.annotation.Required; + +import java.io.File; +import java.util.Collection; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/**) + * @inheritDoc Imports any Impex files contained, or converted from files, within the exploded directory + */ +public class RawImpexUnzippedFolderImportService implements UnzippedFolderImportService +{ + private static final String IMPEX_SUFFIX = "impex"; + private SetupImpexService setupImpexService; + + /** + * @inheritDoc + */ + @Override + public void execute(final ZipBatchHeader header) + { + final List impexFiles = getImpexFiles(header.getUnzippedFiles(), header.getTransformedFiles()); + for (final File impex : impexFiles) + { + //Add additional "/" to start of path, so can be removed, mimics CoreDataImportService/SampleDataImportService + getSetupImpexService().importImpexFile("/" + impex.getAbsolutePath(), true); + } + } + + protected List getImpexFiles(final Collection unzippedFiles, final Collection transformedFiles) + { + return Stream.of(unzippedFiles, transformedFiles) + .filter(Objects::nonNull) + .flatMap(Collection::stream) + .filter(f -> f.getName().endsWith(IMPEX_SUFFIX)) + .sorted() + .collect(Collectors.toList()); + } + + protected SetupImpexService getSetupImpexService() + { + return setupImpexService; + } + + @Required + public void setSetupImpexService(final SetupImpexService setupImpexService) + { + this.setupImpexService = setupImpexService; + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderCleanUpTask.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderCleanUpTask.java new file mode 100644 index 0000000..f4bcb33 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderCleanUpTask.java @@ -0,0 +1,60 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.task; + +import de.hybris.platform.acceleratorservices.dataimport.batch.BatchHeader; +import de.hybris.platform.acceleratorservices.dataimport.batch.task.CleanupTask; +import de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.ZipBatchHeader; +import de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.ZipHeaderTask; +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.springframework.util.Assert; + +import java.io.File; +import java.util.Optional; + +import static org.slf4j.LoggerFactory.getLogger; + +/** + * @inheritDoc Also cleans up the parent folder of the Unzipped File + */ +public class ZipHeaderCleanUpTask extends CleanupTask implements ZipHeaderTask +{ + private static final Logger LOG = getLogger(ZipHeaderCleanUpTask.class); + + /** + * Default implementation with {@link BatchHeader} to ensure that AOP aspects are applied + * + * @param header to be processed + * @throws IllegalArgumentException when header is not of type {@link ZipBatchHeader} + */ + @Override + public BatchHeader execute(final BatchHeader header) + { + Assert.isInstanceOf(ZipBatchHeader.class, header); + return executeZip((ZipBatchHeader) header); + } + + @Override + public ZipBatchHeader executeZip(final ZipBatchHeader header) + { + super.execute(header); + Optional.ofNullable(header.getUnzippedFolder()) + .ifPresent(this::deleteDirectory); + return null; + } + + protected void deleteDirectory(final File dir) + { + LOG.debug("Going to delete directory [{}]", dir); + FileUtils.deleteQuietly(dir); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderExecutionTask.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderExecutionTask.java new file mode 100644 index 0000000..7524873 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderExecutionTask.java @@ -0,0 +1,71 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.task; + +import de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.ZipBatchHeader; +import de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.ZipHeaderTask; +import de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.service.UnzippedFolderImportService; +import org.slf4j.Logger; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.util.Assert; + +import java.util.Map; +import java.util.regex.Pattern; + +import static org.slf4j.LoggerFactory.getLogger; + +/** + * @inheritDoc Delegates the header onto a {@link UnzippedFolderImportService} who's pattern mapping matches the file name + */ +public class ZipHeaderExecutionTask implements ZipHeaderTask +{ + private static final Logger LOG = getLogger(ZipHeaderExecutionTask.class); + + private Map dataImportServices; + + @Override + public ZipBatchHeader executeZip(final ZipBatchHeader header) + { + final String zipFileName = header.getOriginalFileName(); + Assert.notNull(zipFileName, "header.originalFileName cannot be null"); + Assert.notNull(header.getFileUnzippedAs(), "header.fileUnzippedAs cannot be null"); + + for (final Map.Entry e : getUnzippedFolderImportServices().entrySet()) + { + final Pattern pattern = e.getKey(); + final UnzippedFolderImportService service = e.getValue(); + if (pattern.matcher(zipFileName).matches()) + { + LOG.info("zip [{}] matches pattern [{}] for [{}], will attempt import", zipFileName, pattern, service); + + service.execute(header); + } + else + { + LOG.debug("zip [{}] didn't match pattern [{}] for [{}]", zipFileName, pattern, service); + } + } + + return header; + } + + protected Map getUnzippedFolderImportServices() + { + return dataImportServices; + } + + @Required + public void setUnzippedFolderImportServices(final Map dataImportServices) + { + this.dataImportServices = dataImportServices; + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderInitTask.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderInitTask.java new file mode 100644 index 0000000..2ab58af --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderInitTask.java @@ -0,0 +1,93 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.task; + +import de.hybris.platform.acceleratorservices.dataimport.batch.util.SequenceIdParser; +import de.hybris.platform.acceleratorservices.util.RegexParser; +import de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.ZipBatchHeader; +import de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.ZipHeaderTask; +import org.slf4j.Logger; +import org.springframework.beans.factory.annotation.Required; + +import java.io.File; +import java.util.Optional; + +import static org.slf4j.LoggerFactory.getLogger; + +/** + * Task to initialize the batch header with the sequence id and the language. + */ +public class ZipHeaderInitTask implements ZipHeaderTask +{ + private static final Logger LOG = getLogger(ZipHeaderInitTask.class); + private static final long DEFAULT_SEQUENCE_ID = 0L; + + private SequenceIdParser sequenceIdParser; + private RegexParser languageParser; + private String fallbackLanguage; + + @Override + public ZipBatchHeader executeZip(final ZipBatchHeader header) + { + header.setSequenceId(getSequenceId(new File(header.getOriginalFileName()))); + header.setLanguage(Optional.of(header.getOriginalFileName()) + .map(getLanguageParser()::parse) + .orElse(getFallbackLanguage())); + return header; + } + + protected Long getSequenceId(final File file) + { + try + { + return getSequenceIdParser().getSequenceId(file); + } + catch (final IllegalArgumentException e) + { + LOG.warn("There was a problem getting the sequence id: " + e.getMessage()); + LOG.debug("Exception whilst getting the sequence id.",e); + return DEFAULT_SEQUENCE_ID; + } + } + + protected SequenceIdParser getSequenceIdParser() + { + return sequenceIdParser; + } + + @Required + public void setSequenceIdParser(final SequenceIdParser sequenceIdParser) + { + this.sequenceIdParser = sequenceIdParser; + } + + protected RegexParser getLanguageParser() + { + return languageParser; + } + + @Required + public void setLanguageParser(final RegexParser languageParser) + { + this.languageParser = languageParser; + } + + protected String getFallbackLanguage() + { + return fallbackLanguage; + } + + @Required + public void setFallbackLanguage(final String fallbackLanguage) + { + this.fallbackLanguage = fallbackLanguage; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderSetupTask.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderSetupTask.java new file mode 100644 index 0000000..2452d29 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderSetupTask.java @@ -0,0 +1,86 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.task; + +import de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.ZipBatchHeader; +import de.hybris.platform.util.CSVConstants; + +import org.springframework.beans.factory.annotation.Required; +import org.springframework.messaging.Message; +import org.springframework.util.Assert; + +import java.io.File; +import java.util.Map; + +/** + * Initially setup the batch header. The header is used throughout the pipeline as a reference and for cleanup. + */ +public class ZipHeaderSetupTask +{ + private String fileNameHeaderKey; + private String unZipDirectoryHeaderKey; + private String catalog; + private boolean net; + + public ZipBatchHeader execute(final Message message) + { + Assert.isTrue(message.getPayload() instanceof Map, "message.payload to be of type Map.class"); + @SuppressWarnings("unchecked") final Map unzippedFiles = (Map) message.getPayload(); + + final String fileName = (String) message.getHeaders().get(fileNameHeaderKey); + Assert.notNull(fileName, "message.headers should contain '" + fileNameHeaderKey + "'"); + final String explodedFolderName = fileName.substring(0, fileName.length() - 4); + + final String unzippedFolderName = message.getHeaders().get(unZipDirectoryHeaderKey).toString(); + Assert.notNull(unzippedFolderName, "message.headers should contain '" + unZipDirectoryHeaderKey + "'"); + final File unzippedAs = new File(unzippedFolderName, explodedFolderName); + + final ZipBatchHeader header = new ZipBatchHeader(); + header.setOriginalFileName(fileName); + header.setFileUnzippedAs(unzippedAs); + header.setUnzippedFiles(unzippedFiles.values()); + header.setEncoding(CSVConstants.HYBRIS_ENCODING); + header.setCatalog(catalog); + header.setNet(net); + return header; + } + + /** + * Set the header key to use to get a reference to the original file + */ + @Required + public void setFileNameHeaderKey(final String fileNameHeaderKey) + { + this.fileNameHeaderKey = fileNameHeaderKey; + } + + /** + * Set the header key to use to get the name of the folder the file was extracted into + */ + @Required + public void setUnZipDirectoryHeaderKey(final String unZipDirectoryHeaderKey) + { + this.unZipDirectoryHeaderKey = unZipDirectoryHeaderKey; + } + + @Required + public void setCatalog(final String catalog) + { + this.catalog = catalog; + } + + @Required + public void setNet(final boolean net) + { + this.net = net; + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderTransformerTask.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderTransformerTask.java new file mode 100644 index 0000000..c199c73 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderTransformerTask.java @@ -0,0 +1,122 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.task; + +import de.hybris.platform.acceleratorservices.dataimport.batch.BatchHeader; +import de.hybris.platform.acceleratorservices.dataimport.batch.converter.ImpexConverter; +import de.hybris.platform.acceleratorservices.dataimport.batch.task.ImpexTransformerTask; +import de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.ZipBatchHeader; +import de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.ZipHeaderTask; +import org.springframework.util.Assert; + +import java.io.*; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +/** + * Transformer that transforms all CSV files within the exploded ZIP into impex files. + */ +public class ZipHeaderTransformerTask extends ImpexTransformerTask implements ZipHeaderTask +{ + private static final String CSV_SUFFIX = "csv"; + private static final String IMPEX_SUFFIX = "impex"; + + /** + * Default implementation with {@link BatchHeader} to delegate onto {@link #executeZip} + * @throws IllegalArgumentException when header is not of type {@link ZipBatchHeader} + */ + @Override + public BatchHeader execute(final BatchHeader header) + { + Assert.isInstanceOf(ZipBatchHeader.class, header); + return executeZip((ZipBatchHeader) header); + } + + @Override + public ZipBatchHeader executeZip(final ZipBatchHeader header) + { + header.getUnzippedFiles().stream() + .filter(f -> f.getName().endsWith(CSV_SUFFIX)) + .forEach(f -> { + try + { + convertCsv(header, f); + } + catch (final IOException e) + { + throw new UncheckedIOException(e); + } + }); + + return header; + } + + protected void convertCsv(final ZipBatchHeader header, final File file) throws IOException + { + final List converters = getConverters(file); + int position = 1; + for (final ImpexConverter converter : converters) + { + final File impexFile = getImpexFile(file, position++); + if (convertFile(header, file, impexFile, converter)) + { + header.addTransformedFile(impexFile); + header.addOriginalToTransformedEntry(file.getName(), impexFile.getName()); + } + else + { + getCleanupHelper().cleanupFile(impexFile); + } + } + } + + @Override + protected File getImpexFile(final File file, final int position) + { + return new File(file.getParent(), file.getName().replace("." + CSV_SUFFIX, "-" + position + "." + IMPEX_SUFFIX)); + } + + @Override + protected void buildReplacementSymbols(final Map symbols, final BatchHeader header, + final ImpexConverter converter) + { + super.buildReplacementSymbols(symbols, header, converter); + final ZipBatchHeader zipBatchHeader = (ZipBatchHeader) header; + final String absolutePathToUnzippedFolder = Optional.ofNullable(zipBatchHeader.getFileUnzippedAs()) + .map(File::getAbsolutePath) + .orElseThrow(() -> new IllegalArgumentException("'header.fileUnzippedAs' cannot be null")); + + //For an exploded zip the $SOURCE_FILE$ parameter is actually the $SOURCE_DIR$, so replace + symbols.put("$SOURCE_DIR$", absolutePathToUnzippedFolder); + symbols.put("$SOURCE_FILE$", absolutePathToUnzippedFolder); + //Also set the $BASE_SOURCE_DIR$ as the unzipped folder + symbols.put("$BASE_SOURCE_DIR$", absolutePathToUnzippedFolder); + } + + // Suppress Sonar warnings - Overridden to make public for testing. + @Override + @SuppressWarnings("squid:S1185") + public void setConverterMap(final Map> converterMap) + { + super.setConverterMap(converterMap); + } + + // Suppress Sonar warnings - Overridden to make public for testing. + @Override + @SuppressWarnings("squid:S1185") + public boolean convertFile(final BatchHeader header, final File file, final File impexFile, final ImpexConverter converter) + throws UnsupportedEncodingException, FileNotFoundException + { + return super.convertFile(header, file, impexFile, converter); + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/interceptor/HotFolderRouterChannelInterceptor.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/interceptor/HotFolderRouterChannelInterceptor.java new file mode 100644 index 0000000..93f3ba2 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/interceptor/HotFolderRouterChannelInterceptor.java @@ -0,0 +1,87 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.interceptor; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.integration.core.MessagingTemplate; + +import org.springframework.messaging.Message; +import org.springframework.messaging.MessageChannel; +import org.springframework.messaging.support.ChannelInterceptor; +import org.springframework.util.Assert; + +/** + * A hot-folder specific implementation of the {@link ChannelInterceptor} providing + * archive and error functionality. + * + * We intercept the hot folder specific message channel, operating on the same thread, + * to capture the downstream processing of a {@link Message} and + * direct the message either to the configured {@param successChannel} or {@param failureChannel} + */ +public class HotFolderRouterChannelInterceptor implements ChannelInterceptor { + + private MessageChannel successChannel; + private MessageChannel failureChannel; + + private static final Logger LOG = LoggerFactory.getLogger(HotFolderRouterChannelInterceptor.class); + + private final MessagingTemplate messagingTemplate = new MessagingTemplate(); + + + /** + * Set the channel to which to send the {@link Message} after successful downstream + * processing. + * + * @param successChannel the channel. + */ + public void setSuccessChannel(final MessageChannel successChannel) { + Assert.notNull(successChannel, "'successChannel' must not be null"); + this.successChannel = successChannel; + } + + /** + * Set the channel to which to send the {@link Message} if an exception occurs during + * downstream processing. + * + * @param failureChannel the channel. + */ + public void setFailureChannel(final MessageChannel failureChannel) { + Assert.notNull(failureChannel, "'failureChannel' must not be null"); + this.failureChannel = failureChannel; + } + + /** + * Invoked after {@link MessageChannel} send() and + * {@link org.springframework.messaging.PollableChannel} receive() calls, + * regardless of any exception that is raised. Allowing + * us to direct to {@link Message} on to a success or failure channel. + * + * @param message the message + * @param interceptedMessageChannel the channel we've intercepted + * @param sent whether the message was successfully sent on channel interceptedMessageChannel + * @param ex any exceptions + */ + @Override + public void afterSendCompletion(final Message message, final MessageChannel interceptedMessageChannel, final boolean sent, final Exception ex) { + if (ex == null) + { + this.messagingTemplate.send(this.successChannel, message); + LOG.debug("Message [{}] sent to successChannel [{}]", message, successChannel); + } + else + { + LOG.error("An exception occurred during downstream file processing for message [{}]. Exception [{}].", message, ex); + this.messagingTemplate.send(this.failureChannel, message); + LOG.debug("Message [{}] sent to failureChannel [{}]", message, failureChannel); + } + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/jalo/CloudHotfolderManager.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/jalo/CloudHotfolderManager.java new file mode 100644 index 0000000..0a5a54c --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/jalo/CloudHotfolderManager.java @@ -0,0 +1,32 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.jalo; + +import de.hybris.platform.cloud.hotfolder.constants.CloudHotfolderConstants; +import de.hybris.platform.core.Registry; + + +/** + * This is the extension manager of the CloudHotfolder extension. + */ +public class CloudHotfolderManager extends GeneratedCloudHotfolderManager +{ + /** + * Get the valid instance of this manager. + * + * @return the current instance of this manager + */ + public static CloudHotfolderManager getInstance() + { + return (CloudHotfolderManager) Registry.getCurrentTenant().getJaloConnection().getExtensionManager() + .getExtension(CloudHotfolderConstants.EXTENSIONNAME); + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/spring/integration/file/CloudFileHeaders.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/spring/integration/file/CloudFileHeaders.java new file mode 100644 index 0000000..6983068 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/spring/integration/file/CloudFileHeaders.java @@ -0,0 +1,30 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.spring.integration.file; + +import org.springframework.integration.file.FileHeaders; + +/** + * Pre-defined header names to be used when storing or retrieving + * File-related values to/from integration Message Headers. + **/ +public class CloudFileHeaders extends FileHeaders +{ + + private static final String PREFIX = "file_"; + + public static final String LAST_MODIFIED = PREFIX + "lastModified"; + + public CloudFileHeaders() { + // empty to prevent instantiation + } +} + diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/spring/integration/file/TimestampFileNameGenerator.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/spring/integration/file/TimestampFileNameGenerator.java new file mode 100644 index 0000000..d357753 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/spring/integration/file/TimestampFileNameGenerator.java @@ -0,0 +1,34 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.spring.integration.file; + +import org.joda.time.DateTime; +import org.joda.time.DateTimeZone; +import org.joda.time.format.DateTimeFormatter; +import org.joda.time.format.ISODateTimeFormat; +import org.springframework.integration.file.DefaultFileNameGenerator; +import org.springframework.messaging.Message; + +/** + * Extension of {@link DefaultFileNameGenerator} that appends a timestamp to the + * end of the filename. + */ +public class TimestampFileNameGenerator extends DefaultFileNameGenerator +{ + @Override + public String generateFileName(final Message message) + { + final DateTime dt = new DateTime(DateTimeZone.UTC); + final DateTimeFormatter fmt = ISODateTimeFormat.dateTime(); + final String timestamp = fmt.print(dt).replace(":", "-"); + return super.generateFileName(message) + "." + timestamp; + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/spring/integration/zip/CloudUnZipTransformer.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/spring/integration/zip/CloudUnZipTransformer.java new file mode 100644 index 0000000..dc17f2d --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/spring/integration/zip/CloudUnZipTransformer.java @@ -0,0 +1,283 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.spring.integration.zip; + +import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.springframework.integration.support.AbstractIntegrationMessageBuilder; +import org.springframework.integration.zip.transformer.AbstractZipTransformer; +import org.springframework.integration.zip.transformer.SpringZipUtils; +import org.springframework.integration.zip.transformer.ZipResultType; +import org.springframework.messaging.Message; +import org.springframework.messaging.MessageHandlingException; +import org.springframework.messaging.MessagingException; +import org.zeroturnaround.zip.ZipException; +import org.zeroturnaround.zip.ZipUtil; + +import java.io.*; +import java.nio.file.Files; +import java.util.SortedMap; +import java.util.TreeMap; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; + +import static org.slf4j.LoggerFactory.getLogger; + +/** + * UnZip Transformer, unzips an archive to a working directory and + * returns a message containing a map of the files within. + * + * A rewrite of {@link org.springframework.integration.zip.transformer.UnZipTransformer} that + * adds additional headers containing the root of the unzipped files and the path to the original + * archive. + */ +// Suppress Sonar warnings - this is mostly spring code copied here to extend and fix bugs. +// I don't want to change it's structure as it will make it much more difficult to compare to the +// original in the future. +@SuppressWarnings({"squid:S134"}) +public class CloudUnZipTransformer extends AbstractZipTransformer +{ + private static final Logger LOG = getLogger(CloudUnZipTransformer.class); + + + private volatile boolean expectSingleResult = false; + + public void setExpectSingleResult(final boolean expectSingleResult) + { + this.expectSingleResult = expectSingleResult; + } + + @Override + protected Object doZipTransform(final Message message) + { + try + { + final Object payload = message.getPayload(); + final File unZipDirectory = getUnZipDirectory(message, workDirectory); + final Object result; + + try (final InputStream inputStream = getInputStream(payload)) + { + final SortedMap uncompressedData = new TreeMap<>(); + + ZipUtil.iterate(inputStream, (zipEntryInputStream, zipEntry) -> { + + logZipEntry(zipEntry); + final String zipEntryName = zipEntry.getName(); + + if (ZipResultType.FILE.equals(zipResultType)) + { + final File destinationFile = getValidDestinationFile(unZipDirectory, zipEntryName); + + if (zipEntry.isDirectory()) + { + //noinspection ResultOfMethodCallIgnored + destinationFile.mkdirs(); //NOSONAR false positive + } + else + { + SpringZipUtils.copy(zipEntryInputStream, destinationFile); + uncompressedData.put(zipEntryName, destinationFile); + } + } + else if (ZipResultType.BYTE_ARRAY.equals(zipResultType)) + { + if (!zipEntry.isDirectory()) + { + // Check that the zipEntryName would be valid if we + // were to create a file for it. + getValidDestinationFile(unZipDirectory, zipEntryName); + final byte[] data = IOUtils.toByteArray(zipEntryInputStream); + uncompressedData.put(zipEntryName, data); + } + } + else + { + throw new IllegalStateException("Unsupported zipResultType " + zipResultType); + } + + }); + + result = getResult(message, uncompressedData); + } + finally + { + if (this.deleteFiles) + { + deletePayload(payload); + } + } + + final AbstractIntegrationMessageBuilder builder = getMessageBuilderFactory() + .withPayload(result) + .copyHeaders(message.getHeaders()); + + if (payload instanceof File) + { + builder.setHeader(CloudZipHeaders.ARCHIVE_PATH, ((File) payload).getCanonicalPath()); + } + + if(ZipResultType.FILE.equals(zipResultType)) + { + builder.setHeader(CloudZipHeaders.UNZIP_DIRECTORY, unZipDirectory); + } + + return builder.build(); + + } + catch (final Exception e) + { + throw new MessageHandlingException(message, "Failed to apply Zip transformation.", e); + } + } + + public File getValidDestinationFile(final File unzipDirectory, final String zipEntryName) throws IOException + { + //noinspection ResultOfMethodCallIgnored + unzipDirectory.mkdirs(); //NOSONAR false positive + + final File destinationFile = new File(unzipDirectory, zipEntryName); + + /* If we see the relative traversal string of ".." we need to make sure + * that the outputdir + name doesn't leave the outputdir. + */ + if (!destinationFile.getCanonicalPath().startsWith(workDirectory.getCanonicalPath())) + { + throw new ZipException("The file " + zipEntryName + + " is trying to leave the target output directory of " + workDirectory); + } + return destinationFile; + } + + protected void logZipEntry(final ZipEntry zipEntry) + { + if (LOG.isInfoEnabled()) + { + final String zipEntryName = zipEntry.getName(); + final String type = zipEntry.isDirectory() ? "directory" : "file"; + final long zipEntryTime = zipEntry.getTime(); + final long zipEntryCompressedSize = zipEntry.getCompressedSize(); + LOG.info(String.format("Unpacking Zip Entry - Name: '%s',Time: '%s', " + + "Compressed Size: '%s', Type: '%s'", + zipEntryName, zipEntryTime, zipEntryCompressedSize, type)); + } + } + + protected File getUnZipDirectory(final Message message, final File workDirectory) + { + return new File(workDirectory, message.getHeaders().getId().toString()); + } + + protected InputStream getInputStream(final Object payload) throws FileNotFoundException + { + final InputStream inputStream; + if (payload instanceof File) + { + final File filePayload = (File) payload; + + if (filePayload.isDirectory()) + { + throw new UnsupportedOperationException(String.format("Cannot unzip a directory: '%s'", + filePayload.getAbsolutePath())); + } + + if (!isValid(filePayload)) + { + throw new IllegalStateException(String.format("Not a zip file: '%s'.", + filePayload.getAbsolutePath())); + } + + inputStream = new FileInputStream(filePayload); + } + else if (payload instanceof InputStream) + { + inputStream = (InputStream) payload; + } + else if (payload instanceof byte[]) + { + inputStream = new ByteArrayInputStream((byte[]) payload); + } + else + { + throw new IllegalArgumentException(String.format("Unsupported payload type '%s'. " + + "The only supported payload types are java.io.File, byte[] and java.io.InputStream", + payload.getClass().getSimpleName())); + } + return inputStream; + } + + protected Object getResult(final Message message, final SortedMap uncompressedData) + { + if (uncompressedData.isEmpty()) + { + if (LOG.isWarnEnabled()) + { + LOG.warn("No data unzipped from payload with message Id " + message.getHeaders().getId()); + } + return null; + } + else + { + if (this.expectSingleResult) + { + if (uncompressedData.size() == 1) + { + return uncompressedData.values().iterator().next(); + } + else + { + throw new MessagingException(message, + String.format("The UnZip operation extracted %s " + + "result objects but expectSingleResult was 'true'.", uncompressedData.size())); + } + } + else + { + return uncompressedData; + } + + } + } + + protected void deletePayload(final Object payload) + { + if (payload instanceof File) + { + final File filePayload = (File) payload; + try + { + Files.delete(filePayload.toPath()); + } + catch (final IOException ex) + { + if (LOG.isWarnEnabled()) + { + LOG.warn("Failed to delete File '" + filePayload + "'", ex); + } + } + } + } + + protected static boolean isValid(final File file) + { + try (final ZipFile zipfile = new ZipFile(file)) + { + return true; + } + catch (final IOException | RuntimeException ex) + { + LOG.debug("Error testing validity of archive [{}].", file, ex); + return false; + } + } + + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/spring/integration/zip/CloudZipHeaders.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/spring/integration/zip/CloudZipHeaders.java new file mode 100644 index 0000000..8362dc9 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/spring/integration/zip/CloudZipHeaders.java @@ -0,0 +1,27 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.spring.integration.zip; + +import org.springframework.integration.zip.ZipHeaders; + +/** + * Extended Zip adapter specific message headers. + **/ +public class CloudZipHeaders extends ZipHeaders +{ + public static final String PREFIX = ZipHeaders.PREFIX; + public static final String ARCHIVE_PATH = PREFIX + "archivePath"; + public static final String UNZIP_DIRECTORY = PREFIX + "unzipDirectory"; + + public CloudZipHeaders() { + // empty to prevent instantiation + } +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/spring/messaging/support/impl/UnmappedHotfolderChannel.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/spring/messaging/support/impl/UnmappedHotfolderChannel.java new file mode 100644 index 0000000..b4ee921 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/src/de/hybris/platform/cloud/hotfolder/spring/messaging/support/impl/UnmappedHotfolderChannel.java @@ -0,0 +1,111 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.spring.messaging.support.impl; + +import de.hybris.platform.cloud.commons.services.monitor.MonitorService; +import de.hybris.platform.cloud.commons.services.monitor.Status; +import de.hybris.platform.cloud.commons.services.monitor.Step; +import de.hybris.platform.cloud.commons.services.monitor.SystemArea; +import org.slf4j.Logger; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.integration.channel.NullChannel; +import org.springframework.messaging.Message; +import org.springframework.messaging.MessageHeaders; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; + +import static org.slf4j.LoggerFactory.getLogger; + +public class UnmappedHotfolderChannel extends NullChannel +{ + private static final Logger LOG = getLogger(UnmappedHotfolderChannel.class); + + private String fileNameHeaderKey; + private String fileLastModifiedHeaderKey; + private MonitorService monitorService; + + @Override + public boolean send(final Message message) { + + if(message != null) + { + recordHistory(message); + if (message.getPayload() instanceof File) + { + final File file = (File) message.getPayload(); + deleteFile(file); + } + } + return super.send(message); + } + + protected void deleteFile(final File file) + { + if (file != null && file.isFile() && file.exists()) + { + try + { + LOG.debug("Cleaning up [{}].", file.getAbsolutePath()); + Files.delete(file.toPath()); + } + catch (final IOException e) + { + LOG.error("Unable to clean up local file [{}].", file.getAbsolutePath(), e); + } + } + } + + protected void recordHistory(final Message message) + { + final MessageHeaders headers = message.getHeaders(); + final String fileName = (String) headers.get(getFileNameHeaderKey()); + final long modified = (long) headers.get(getFileLastModifiedHeaderKey()); + getMonitorService().resume(SystemArea.HOT_FOLDER, fileName + modified) + .stepFailed(Step.FILE_ROUTED, null, null, null, "File [{}] modified [{}] was not routed as didn't match any configurations", fileName, modified) + .end(Status.WARNING); + } + + protected String getFileNameHeaderKey() + { + return fileNameHeaderKey; + } + + @Required + public void setFileNameHeaderKey(final String fileNameHeaderKey) + { + this.fileNameHeaderKey = fileNameHeaderKey; + } + + protected String getFileLastModifiedHeaderKey() + { + return fileLastModifiedHeaderKey; + } + + @Required + public void setFileLastModifiedHeaderKey(final String fileLastModifiedHeaderKey) + { + this.fileLastModifiedHeaderKey = fileLastModifiedHeaderKey; + } + + protected MonitorService getMonitorService() + { + return monitorService; + } + + @Required + public void setMonitorService(final MonitorService monitorService) + { + this.monitorService = monitorService; + } + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/tenant_junit.properties b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/tenant_junit.properties new file mode 100644 index 0000000..96084f2 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/tenant_junit.properties @@ -0,0 +1,20 @@ +# ----------------------------------------------------------------------- +# [y] hybris Platform +# +# Copyright (c) 2017 SAP SE or an SAP affiliate company. All rights reserved. +# +# This software is the confidential and proprietary information of SAP +# ("Confidential Information"). You shall not disclose such Confidential +# Information and shall use it only in accordance with the terms of the +# license agreement you entered into with SAP. +# ----------------------------------------------------------------------- + +cloud.hotfolder.default.mapping.root.dir=test +cloud.hotfolder.default.mapping.header.catalog=testProductCatalog + +cloud.hotfolder.default.zip.header.catalog=testProductCatalog +cloud.hotfolder.default.zip.header.net=false +# The system auto suffixes this with ProductCatalog/ContentCatalog +cloud.hotfolder.default.zip.mapping.product.catalog=test +cloud.hotfolder.default.zip.mapping.content.catalogs=test +cloud.hotfolder.default.zip.mapping.store.names=testStore \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/CloudHotFolderIntegrationTests.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/CloudHotFolderIntegrationTests.java new file mode 100644 index 0000000..5b55945 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/CloudHotFolderIntegrationTests.java @@ -0,0 +1,440 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder; + +import de.hybris.bootstrap.annotations.IntegrationTest; +import de.hybris.platform.catalog.CatalogVersionService; +import de.hybris.platform.catalog.model.CatalogVersionModel; +import de.hybris.platform.cloud.commons.services.monitor.*; +import de.hybris.platform.cloud.commons.spring.util.NeedsRunningSpringServices; +import de.hybris.platform.commerceservices.dataimport.impl.SampleDataImportService; +import de.hybris.platform.commerceservices.dataimport.impl.CoreDataImportService; +import de.hybris.platform.core.Registry; +import de.hybris.platform.core.model.product.ProductModel; +import de.hybris.platform.impex.jalo.ImpExException; +import de.hybris.platform.product.ProductService; +import de.hybris.platform.servicelayer.ExtendedServicelayerBaseTest; +import de.hybris.platform.servicelayer.config.ConfigurationService; +import de.hybris.platform.servicelayer.exceptions.UnknownIdentifierException; +import de.hybris.platform.servicelayer.user.UserService; + +import org.apache.commons.io.FileUtils; +import org.assertj.core.api.SoftAssertions; +import org.assertj.core.util.Lists; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.slf4j.Logger; +import org.springframework.messaging.Message; +import org.springframework.messaging.MessageChannel; +import org.springframework.messaging.support.MessageBuilder; +import org.springframework.util.Assert; + +import javax.annotation.Resource; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.slf4j.LoggerFactory.getLogger; + +@IntegrationTest +@NeedsRunningSpringServices(roles = "integration") +public class CloudHotFolderIntegrationTests extends ExtendedServicelayerBaseTest +{ + private static final Logger LOG = getLogger(CloudHotFolderIntegrationTests.class); + + private static final String FILE_ROOT_DIR = "cloudhotfolder/test/"; + private static final String COPY_TO = "HYBRIS_TEMP_DIR"; + + @Resource + private ConfigurationService configurationService; + + @Resource + private UserService userService; + + @Resource + private MessageChannel hotfolderInboundFileHeaderEnricherChannel; + + @Resource + private ProductService productService; + + @Resource + private CatalogVersionService catalogVersionService; + + @Resource(name = "integrationTestMonitorAssertionHelper") + private IntegrationTestMonitorAssertionHelper monitorAssertionHelper; + + private String copyToDir; + + private CatalogVersionModel catalogVersion; + + @Before + public void setUp() throws Exception + { + copyToDir = configurationService.getConfiguration().getString(COPY_TO); + Assert.notNull(copyToDir, "copyToDir cannot be null"); + + runCleanUpScript(); + createCoreData(); + importStream(getResourceAsStream("additionalTestData.csv"), "UTF-8", FILE_ROOT_DIR + "additionalTestData.csv"); + catalogVersion = catalogVersionService.getCatalogVersion("testProductCatalog", "Staged"); + } + + @After + public void teardown() throws ImpExException + { + runCleanUpScript(); + } + + private void runCleanUpScript() throws ImpExException + { + importStream(getResourceAsStream("cleanup.impex"), "UTF-8", FILE_ROOT_DIR + "cleanup.impex"); + } + + private InputStream getResourceAsStream(final String path) + { + return this.getClass().getClassLoader().getResourceAsStream(FILE_ROOT_DIR + path); + } + + private File getResourceAsFile(final String path) throws IOException + { + final ClassLoader classLoader = this.getClass().getClassLoader(); + final String fullPath = FILE_ROOT_DIR + path; + File file = null; + final URL url = classLoader.getResource(fullPath); + if (url != null) + { + file = new File(url.getFile()); + } + if (file == null || !file.exists() || !file.isFile()) + { + throw new FileNotFoundException("File not found: " + fullPath); + } + final File copyOf = new File(String.join(File.separator, copyToDir, path)); + //Make a copy of the file so the source file isn't deleted + FileUtils.copyFile(file, copyOf); + return copyOf; + } + + private boolean productExists(final String code) + { + return getProduct(code) != null; + } + + private ProductModel getProduct(final String code) + { + try + { + return productService.getProductForCode(catalogVersion, code); + } + catch (final UnknownIdentifierException e) + { + return null; + } + } + + private void ensureHistoryIsPresent(final String key, + final int expectedTransformedFiles, + final int expectedAttemptingToProcess, + final List indicesOfSuccessfulImportActions, + final Optional initialStep) + { + final List steps = new LinkedList<>(); + initialStep.ifPresent(s -> steps.add(monitorAssertionHelper.createStep(Status.SUCCESS, s))); + steps.add(monitorAssertionHelper.createStep(Status.SUCCESS, Step.HEADER_SETUP)); + steps.add(monitorAssertionHelper.createStep(Status.SUCCESS, Step.HEADER_INIT)); + + final List transformActions = new LinkedList<>(); + for (int i = 0; i < expectedTransformedFiles; i++) + { + transformActions.add(monitorAssertionHelper.createAction(Status.SUCCESS)); + } + steps.add(monitorAssertionHelper.createStep(Status.SUCCESS, Step.HEADER_TRANSFORMED, transformActions)); + + final List executionActions = getOrderedInProgressSuccessfulActions(expectedAttemptingToProcess, indicesOfSuccessfulImportActions); + + steps.add(monitorAssertionHelper.createStep(Status.SUCCESS, Step.HEADER_EXECUTED, executionActions)); + steps.add(monitorAssertionHelper.createStep(Status.SUCCESS, Step.HEADER_CLEANUP)); + + final MonitorHistoryData expectedHistory = monitorAssertionHelper.createHistory(key, SystemArea.HOT_FOLDER, Status.SUCCESS, steps); + monitorAssertionHelper.assertHistoryIsPresent(expectedHistory); + } + + private List getOrderedInProgressSuccessfulActions(final int expectedAttemptingToProcess, + final List indicesOfSuccessfulImportActions) + { + final List executionActions = new ArrayList<>(); + for (int i = 0; i < expectedAttemptingToProcess; i++) + { + executionActions.add(monitorAssertionHelper.createAction(Status.IN_PROGRESS)); + } + + for (int index : indicesOfSuccessfulImportActions) + { + executionActions.add(index, monitorAssertionHelper.createAction(Status.SUCCESS)); + } + return executionActions; + } + + private boolean isExtensionLoaded(final String extensionNameToCheck) + { + final List loadedExtensionNames = Registry.getCurrentTenant().getTenantSpecificExtensionNames(); + return loadedExtensionNames.contains(extensionNameToCheck); + } + + @Test + public void shouldImportCustomerCsvSuccessfully() throws IOException + { + final String testFile = "hotfolder/customer-00.csv"; + final String expectedUid = "bob@job.com"; + + // Given our testFile is a CSV expect a conversion to impex + final int expectedFilesTransformedToImpex = 1; + + final List indicesOfSuccessfulImportActions = Lists.newArrayList(0); // Our transformed csv file will be executed first... + final int expectedAttemptingToProcess = 0; // Can only offer attempt statement for zip files... + + assertThat(userService.isUserExisting(expectedUid)).isFalse(); + + final File file = getResourceAsFile(testFile); + final String monitorKey = file.getName() + file.lastModified(); + final Message message = MessageBuilder.withPayload(file).build(); + + assertThat(hotfolderInboundFileHeaderEnricherChannel.send(message)) + .as("Message not sent for file: " + testFile) + .isTrue(); + + assertThat(userService.isUserExisting(expectedUid)) + .as("Expected user to exist, but did not. UID: " + expectedUid) + .isTrue(); + + ensureHistoryIsPresent(monitorKey, expectedFilesTransformedToImpex, expectedAttemptingToProcess, indicesOfSuccessfulImportActions, Optional.empty()); + } + + @Test + public void shouldImportProductCsvSuccessfully() throws IOException + { + final String testFile = "hotfolder/product-00.csv"; + final String expectedId = "123456"; + + // Given our testFile is a CSV expect a conversion to impex + final int expectedFilesTransformedToImpex = 1; + + /** + * See {@link CoreDataImportService} for details of executed impex, their ordering and other optional impexes + */ + final List indicesOfSuccessfulImportActions = Lists.newArrayList(0); // Our transformed csv file will be executed first... + final int expectedAttemptingToProcess = 0; // Can only offer attempt statement for zip files... + + assertThat(productExists(expectedId)).isFalse(); + + final File file = getResourceAsFile(testFile); + final String monitorKey = file.getName() + file.lastModified(); + final Message message = MessageBuilder.withPayload(file).build(); + + assertThat(hotfolderInboundFileHeaderEnricherChannel.send(message)) + .as("Message not sent for file: " + testFile) + .isTrue(); + + assertThat(productExists(expectedId)) + .as("Expected product to exist, but did not. Code: " + expectedId) + .isTrue(); + + ensureHistoryIsPresent(monitorKey, expectedFilesTransformedToImpex, expectedAttemptingToProcess, indicesOfSuccessfulImportActions, Optional.empty()); + } + + @Test + public void shouldImportCoreDataZipSuccessfully() throws IOException + { + final String testFile = "coredata.zip"; + final String expectedUid = "essentia.data@domain.com"; + + // Only CSVs are converted to impex and our test zip (coredata.zip) contains none! + final int expectedFilesTransformedToImpex = 0; + + /** + * See {@link CoreDataImportService} for details of executed impex, their ordering and other optional impexes + */ + final List indicesOfSuccessfulImportActions = Lists.newArrayList(1); // essential-data.impex + final int expectedAttemptingToProcess = 14; + + assertThat(userService.isUserExisting(expectedUid)).isFalse(); + + final File file = getResourceAsFile(testFile); + final String monitorKey = file.getName() + file.lastModified(); + final Message message = MessageBuilder.withPayload(file).build(); + + assertThat(hotfolderInboundFileHeaderEnricherChannel.send(message)) + .as("Message not sent for file: " + testFile) + .isTrue(); + + assertThat(userService.isUserExisting(expectedUid)) + .as("Expected user to exist, but did not. UID: " + expectedUid) + .isTrue(); + + ensureHistoryIsPresent(monitorKey, expectedFilesTransformedToImpex, expectedAttemptingToProcess, indicesOfSuccessfulImportActions, Optional.of(Step.FILE_UNZIPPED)); + } + + @Test + public void shouldImportSampleDataZipSuccessfully() throws IOException + { + final String csBackOffice = "customersupportbackoffice"; + final String testZip = "sampledata.zip"; + + // Only CSVs are converted to impex and our test zip (sampledata.zip) contains none! + final int expectedFilesTransformedToImpex = 0; + + /** + * See {@link SampleDataImportService} for details of executed impex, their ordering and other optional impexes for extension {@link csBackOffice} + */ + final List indicesOfSuccessfulImportActions = Lists.newArrayList(1); // customersupport-groups.impex + final int expectedAttemptingToProcess = 40; + + if (isExtensionLoaded(csBackOffice)) + { + final String expectedUid = "sample.data@domain.com"; + + assertThat(userService.isUserExisting(expectedUid)).isFalse(); + + final File file = getResourceAsFile(testZip); + final String monitorKey = file.getName() + file.lastModified(); + final Message message = MessageBuilder.withPayload(file).build(); + + assertThat(hotfolderInboundFileHeaderEnricherChannel.send(message)) + .as("Message not sent for file: " + testZip) + .isTrue(); + + assertThat(userService.isUserExisting(expectedUid)) + .as("Expected user to exist, but did not. UID: " + expectedUid) + .isTrue(); + + ensureHistoryIsPresent(monitorKey, expectedFilesTransformedToImpex, expectedAttemptingToProcess, indicesOfSuccessfulImportActions, Optional.of(Step.FILE_UNZIPPED)); + } + else + { + LOG.warn("Extension [{}] is not loaded so importing [{}] will not work. Skipping test", csBackOffice, testZip); + } + } + + @Test + public void shouldImportRawImpexZipSuccessfully() throws IOException + { + final String testFile = "rawimpex.zip"; + final String expectedUid = "first.job@domain.com"; + final String expectedUid2 = "second.job@domain.com"; + final String expectedUid3 = "third.job@domain.com"; + + // Only CSVs are converted to impex and our test zip (rawimpex.zip) contains none! + final int expectedFilesTransformedToImpex = 0; + + // first_file.impex, second_file.impex and third_file.impex + // SUCCESS follows IN_PROGRESS, hence off numbered indices + final List indicesOfSuccessfulImportActions = Lists.newArrayList(1, 3, 5); + final int expectedAttemptingToProcess = 3; + + assertThat(userService.isUserExisting(expectedUid)).isFalse(); + assertThat(userService.isUserExisting(expectedUid2)).isFalse(); + assertThat(userService.isUserExisting(expectedUid3)).isFalse(); + + final File file = getResourceAsFile(testFile); + final String monitorKey = file.getName() + file.lastModified(); + final Message message = MessageBuilder.withPayload(file).build(); + + assertThat(hotfolderInboundFileHeaderEnricherChannel.send(message)) + .as("Message not sent for file: " + testFile) + .isTrue(); + + final SoftAssertions softly = new SoftAssertions(); + + softly.assertThat(userService.isUserExisting(expectedUid)) + .as("Expected user to exist, but did not. UID: " + expectedUid) + .isTrue(); + + softly.assertThat(userService.isUserExisting(expectedUid2)) + .as("Expected user to exist, but did not. UID: " + expectedUid2) + .isTrue(); + + softly.assertThat(userService.isUserExisting(expectedUid3)) + .as("Expected user to exist, but did not. UID: " + expectedUid3) + .isTrue(); + + softly.assertAll(); + + ensureHistoryIsPresent(monitorKey, expectedFilesTransformedToImpex, expectedAttemptingToProcess, indicesOfSuccessfulImportActions, Optional.of(Step.FILE_UNZIPPED)); + } + + @Test + public void shouldImportCsvAndImpexZipSuccessfully() throws IOException + { + final String testFile = "product-with-media.zip"; + + final String expectedProductId = "112233"; + final String expectedUid = "raw.impex@domain.com"; + + // product.csv and zip_media.csv + final int expectedFilesTransformedToImpex = 2; + + // raw.impex, product.impex, zip_media_1.impex, zip_media_2.impex, zip_media_3.impex + // SUCCESS follows IN_PROGRESS, hence off numbered indices + final List indicesOfSuccessfulImportActions = Lists.newArrayList(1, 3, 5, 7, 9); + final int expectedAttemptingToProcess = 5; + + assertThat(productExists(expectedProductId)).isFalse(); + assertThat(userService.isUserExisting(expectedUid)).isFalse(); + + final File file = getResourceAsFile(testFile); + final String monitorKey = file.getName() + file.lastModified(); + final Message message = MessageBuilder.withPayload(file).build(); + + final SoftAssertions softly = new SoftAssertions(); + + softly.assertThat(hotfolderInboundFileHeaderEnricherChannel.send(message)) + .as("Message not sent for file: " + testFile) + .isTrue(); + + softly.assertThat(productExists(expectedProductId)) + .as("Expected product to exist, but did not. Code: " + expectedProductId) + .isTrue(); + + softly.assertThat(userService.isUserExisting(expectedUid)) + .as("Expected user to exist, but did not. UID: " + expectedUid) + .isTrue(); + + softly.assertAll(); + + ensureHistoryIsPresent(monitorKey, expectedFilesTransformedToImpex, expectedAttemptingToProcess, indicesOfSuccessfulImportActions, Optional.of(Step.FILE_UNZIPPED)); + } + + @Test + public void shouldHandleUnmappedGracefully() throws IOException + { + final String testFile = "hotfolder/unknownfile-00.csv"; + + final File file = getResourceAsFile(testFile); + final String monitorKey = file.getName() + file.lastModified(); + final Message message = MessageBuilder.withPayload(file).build(); + hotfolderInboundFileHeaderEnricherChannel.send(message); + final MonitorHistoryEntryData notRouted = monitorAssertionHelper.createStep(Status.FAILURE, Step.FILE_ROUTED); + final MonitorHistoryData expectedHistory + = monitorAssertionHelper.createHistory(monitorKey, SystemArea.HOT_FOLDER, Status.WARNING, notRouted); + monitorAssertionHelper.assertHistoryIsPresent(expectedHistory); + } + + +} diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/aop/BatchHeaderAspectTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/aop/BatchHeaderAspectTest.java new file mode 100644 index 0000000..d0a82a5 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/aop/BatchHeaderAspectTest.java @@ -0,0 +1,334 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.aop; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.acceleratorservices.dataimport.batch.BatchHeader; +import de.hybris.platform.cloud.commons.aop.exception.StepException; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistory; +import de.hybris.platform.cloud.commons.services.monitor.MonitorService; +import de.hybris.platform.cloud.commons.services.monitor.Status; +import de.hybris.platform.cloud.commons.services.monitor.Step; +import de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.ZipBatchHeader; + +import java.io.File; +import java.util.*; + +import org.aspectj.lang.ProceedingJoinPoint; +import org.assertj.core.util.Lists; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.mockito.*; +import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.messaging.Message; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.hamcrest.Matchers.is; +import static org.mockito.BDDMockito.given; +import static org.mockito.Matchers.eq; +import static org.mockito.Matchers.isA; +import static org.mockito.Mockito.*; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class BatchHeaderAspectTest +{ + private static final long MODIFIED = 1L; + private static final String FILE_NAME = "fileName"; + private static final UUID ID = UUID.randomUUID(); + private static final long DEFAULT_SEQ_ID = 0L; + + private BatchHeaderAspect aspect = new BatchHeaderAspect(); + + @Mock + private MonitorService monitorService; + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private ProceedingJoinPoint pjp; + + private Object result = new Object(); + + private ZipBatchHeader zipHeaderResult = new ZipBatchHeader(); + private BatchHeader batchHeaderResult = new BatchHeader(); + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private Message message; + + @Mock + private MonitorHistory monitorHistory; + + @Mock + private ZipBatchHeader zipHeader; + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private BatchHeader batchHeader; + + @Captor + private ArgumentCaptor actionCodeCaptor; + + @Before + public void setUp() throws Throwable + { + aspect.setMonitorService(monitorService); + aspect.setFileNameHeaderKey("nameKey"); + + given(pjp.proceed()).willReturn(result); + + given(message.getHeaders().getId()).willReturn(ID); + given(message.getHeaders().get("nameKey")).willReturn(FILE_NAME); + given(message.getHeaders().get("modifiedKey")).willReturn(MODIFIED); + + given(monitorService.current()).willReturn(Optional.of(monitorHistory)); + + given(zipHeader.getOriginalFileName()).willReturn(FILE_NAME); + given(batchHeader.getFile().getName()).willReturn(FILE_NAME); + } + + @Test + public void setup_shouldReturnResultFromExecutedMethod() throws Throwable + { + assertThat(aspect.aroundMessageSetup(pjp, message)).isEqualTo(result); + } + + @Test + public void setup_givenMethodWasSuccessful_thenShouldLogSuccessfulStep_andIssueCheckpoint() throws Throwable + { + aspect.aroundMessageSetup(pjp, message); + + verifySuccessRecorded(Step.HEADER_SETUP, "Successfully setup header for file [{}]. Header will be passed down pipeline....."); + } + + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + @Test + public void setup_givenMethodFailed_thenShouldLogFailedStep_andIssueEndMonitor() throws Throwable + { + final RuntimeException ex = new RuntimeException(); + given(pjp.proceed()).willThrow(ex); + + expectedException.expect(org.hamcrest.Matchers.isA(StepException.class)); + expectedException.expectCause(is(ex)); + + aspect.aroundMessageSetup(pjp, message); + + verifyFailureRecorded(Step.HEADER_SETUP, ex, "Failed to setup header for file [{}]"); + } + + @Test + public void init_shouldReturnResultFromExecutedMethod() throws Throwable + { + assertThat(aspect.aroundInit(pjp, zipHeader)).isEqualTo(result); + assertThat(aspect.aroundInit(pjp, batchHeader)).isEqualTo(result); + } + + @Test + public void init_givenMethodWasSuccessful_thenShouldLogSuccessfulStep_andIssueCheckpoint() throws Throwable + { + aspect.aroundInit(pjp, zipHeader); + aspect.aroundInit(pjp, batchHeader); + + final String message = "Successfully processed file [{}]. SequenceId [{}]"; + + verify(monitorHistory, times(2)) + .stepSucceeded(eq(Step.HEADER_INIT), isA(Date.class), isA(Date.class), eq(message), eq(FILE_NAME), eq(DEFAULT_SEQ_ID)); + verifyNoMoreInteractions(monitorHistory); + } + + @Test + public void init_givenMethodFailed_thenShouldLogFailedStep_andIssueEndMonitor() throws Throwable + { + final RuntimeException ex = new RuntimeException(); + given(pjp.proceed()).willThrow(ex); + + expectedException.expect(org.hamcrest.Matchers.isA(StepException.class)); + expectedException.expectCause(is(ex)); + + aspect.aroundInit(pjp, zipHeader); + + verifyFailureRecorded(Step.HEADER_SETUP, ex, "Failed to process file [{}]"); + } + + @Test + public void transform_shouldReturnResultFromExecutedMethod() throws Throwable + { + given(pjp.proceed()).willReturn(zipHeaderResult); + + assertThat(aspect.aroundTransform(pjp, zipHeader)).isEqualTo(zipHeaderResult); + + given(pjp.proceed()).willReturn(batchHeaderResult); + + assertThat(aspect.aroundTransform(pjp, batchHeader)).isEqualTo(batchHeaderResult); + } + + @Test + public void transform_givenMethodWasSuccessful_thenShouldLogSuccessfulStep_andIssueCheckpoint() throws Throwable + { + given(pjp.proceed()).willReturn(zipHeaderResult); + + aspect.aroundTransform(pjp, zipHeader); + + verifySuccessRecordedWithSequenceId(Step.HEADER_TRANSFORMED, "Successfully transformed header for zip folder [{}] with sequenceId [{}]"); + } + + @Test + public void transform_givenMethodFailed_thenShouldLogFailedStep_andIssueEndMonitor() throws Throwable + { + final RuntimeException ex = new RuntimeException(); + given(pjp.proceed()).willThrow(ex); + + expectedException.expect(org.hamcrest.Matchers.isA(StepException.class)); + expectedException.expectCause(is(ex)); + + aspect.aroundTransform(pjp, zipHeader); + + verifyFailureRecorded(Step.HEADER_TRANSFORMED, ex, "Failed to process file [{}]"); + } + + @Test + public void execute_shouldReturnResultFromExecutedMethod() throws Throwable + { + assertThat(aspect.aroundExecute(pjp, zipHeader)).isEqualTo(result); + } + + @Test + public void execute_givenMethodWasSuccessful_thenShouldLogSuccessfulStep_andIssueCheckpoint() throws Throwable + { + aspect.aroundExecute(pjp, zipHeader); + + verifySuccessRecordedWithSequenceId(Step.HEADER_EXECUTED, "Successfully processed file [{}]. SequenceId [{}]"); + } + + @Test + public void execute_givenMethodFailed_thenShouldLogFailedStep_andIssueEndMonitor() throws Throwable + { + final RuntimeException ex = new RuntimeException(); + given(pjp.proceed()).willThrow(ex); + + expectedException.expect(org.hamcrest.Matchers.isA(StepException.class)); + expectedException.expectCause(is(ex)); + + aspect.aroundExecute(pjp, zipHeader); + + verifyFailureRecorded(Step.HEADER_EXECUTED, ex, "Failed to process file [{}]"); + } + + @Test + public void cleanup_shouldReturnResultFromExecutedMethod() throws Throwable + { + assertThat(aspect.aroundCleanup(pjp, zipHeader)).isEqualTo(result); + assertThat(aspect.aroundCleanup(pjp, batchHeader)).isEqualTo(result); + } + + @Test + public void cleanup_givenMethodWasSuccessful_thenShouldLogSuccessfulStep_andIssueCheckpoint() throws Throwable + { + aspect.aroundCleanup(pjp, zipHeader); + aspect.aroundCleanup(pjp, batchHeader); + + final InOrder order = inOrder(monitorHistory); + + // Verify correct odering for zipHeader first + order.verify(monitorHistory).stepSucceeded(eq(Step.HEADER_CLEANUP), isA(Date.class), isA(Date.class), eq("Successfully processed file [{}]. " + + "SequenceId [{}]"), eq(FILE_NAME), eq(DEFAULT_SEQ_ID)); + order.verify(monitorHistory).end(Status.SUCCESS); + + // Verify correct ordering for batchHeader second + order.verify(monitorHistory).stepSucceeded(eq(Step.HEADER_CLEANUP), isA(Date.class), isA(Date.class), eq("Successfully processed file [{}]. " + + "SequenceId [{}]"), eq(FILE_NAME), eq(DEFAULT_SEQ_ID)); + order.verify(monitorHistory).end(Status.SUCCESS); + + verifyNoMoreInteractions(monitorHistory); + } + + @Test + public void cleanup_givenMethodFailed_thenShouldLogFailedStep_andIssueEndMonitor() throws Throwable + { + final RuntimeException ex = new RuntimeException(); + given(pjp.proceed()).willThrow(ex); + + expectedException.expect(org.hamcrest.Matchers.isA(StepException.class)); + expectedException.expectCause(is(ex)); + + aspect.aroundCleanup(pjp, zipHeader); + + verifyFailureRecorded(Step.HEADER_CLEANUP, ex, "Failed to process file [{}]"); + } + + @Test + public void transform_batchHeader_givenMethodWasSuccessful_thenShouldLogSuccessFullActions_andSuccessfulStep_andIssueCheckpoint() throws Throwable + { + batchHeaderResult.addTransformedFile(new File("file1")); + batchHeaderResult.addTransformedFile(new File("file2")); + + final List transformedNames = Lists.newArrayList("file1", "file2"); + + given(pjp.proceed()).willReturn(batchHeaderResult); + + aspect.aroundTransform(pjp, batchHeader); + + verify(monitorHistory).addAction(actionCodeCaptor.capture(), eq(Status.SUCCESS), isA(Date.class), isA(Date.class), + eq("Successfully transformed file [{}] to impex(es) ({})"), eq(FILE_NAME), eq(transformedNames)); + + assertThat(actionCodeCaptor.getValue()).hasSize(8); + + verifySuccessRecordedWithSequenceId(Step.HEADER_TRANSFORMED, "Successfully transformed header for file [{}] with sequenceId [{}]"); + } + + @Test + public void transform_zipHeader_givenMethodWasSuccessful_thenShouldLogSuccessFullActions_andSuccessfulStep_andIssueCheckpoint() throws Throwable + { + zipHeaderResult.addOriginalToTransformedEntry("original_1", "transformed_1_1"); + zipHeaderResult.addOriginalToTransformedEntry("original_1", "transformed_1_2"); + zipHeaderResult.addOriginalToTransformedEntry("original_2", "transformed_2_1"); + + final List transformed_1 = Lists.newArrayList("transformed_1_1", "transformed_1_2"); + final List transformed_2 = Lists.newArrayList("transformed_2_1"); + + given(pjp.proceed()).willReturn(zipHeaderResult); + + aspect.aroundTransform(pjp, zipHeader); + + verify(monitorHistory).addAction(isA(String.class), eq(Status.SUCCESS), isA(Date.class), isA(Date.class), + eq("For zip folder [{}], successfully transformed expanded file [{}] to impex(es) ({})"), eq(FILE_NAME), eq("original_1"), eq(transformed_1)); + + verify(monitorHistory).addAction(isA(String.class), eq(Status.SUCCESS), isA(Date.class), isA(Date.class), + eq("For zip folder [{}], successfully transformed expanded file [{}] to impex(es) ({})"), eq(FILE_NAME), eq("original_2"), eq(transformed_2)); + + + verifySuccessRecordedWithSequenceId(Step.HEADER_TRANSFORMED, "Successfully transformed header for zip folder [{}] with sequenceId [{}]"); + } + + private void verifySuccessRecordedWithSequenceId(final Step step, final String message) + { + verify(monitorHistory).stepSucceeded(eq(step), isA(Date.class), isA(Date.class), eq(message), eq(FILE_NAME), eq(DEFAULT_SEQ_ID)); + verifyNoMoreInteractions(monitorHistory); + } + + private void verifySuccessRecorded(final Step step, final String message) + { + verify(monitorHistory).stepSucceeded(eq(step), isA(Date.class), isA(Date.class), eq(message), eq(FILE_NAME)); + verifyNoMoreInteractions(monitorHistory); + } + + private void verifyFailureRecorded(final Step step, final Exception ex, final String message) + { + final InOrder order = inOrder(monitorHistory); + order.verify(monitorHistory).stepFailed(eq(step), isA(Date.class), isA(Date.class), eq(ex), eq(message), eq(FILE_NAME)); + order.verify(monitorHistory).end(Status.FAILURE); + verifyNoMoreInteractions(monitorHistory); + + } + +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/aop/FileUnzippedAspectTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/aop/FileUnzippedAspectTest.java new file mode 100644 index 0000000..2d7d786 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/aop/FileUnzippedAspectTest.java @@ -0,0 +1,121 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.aop; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.commons.aop.exception.StepException; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistory; +import de.hybris.platform.cloud.commons.services.monitor.MonitorService; +import de.hybris.platform.cloud.commons.services.monitor.Status; +import de.hybris.platform.cloud.commons.services.monitor.Step; +import de.hybris.platform.cloud.commons.services.monitor.SystemArea; + +import java.util.Date; +import java.util.Optional; +import java.util.UUID; + +import org.aspectj.lang.ProceedingJoinPoint; +import org.junit.*; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.mockito.Answers; +import org.mockito.InOrder; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.messaging.Message; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.hamcrest.Matchers.is; +import static org.mockito.BDDMockito.given; +import static org.mockito.Matchers.eq; +import static org.mockito.Matchers.isA; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class FileUnzippedAspectTest +{ + private static final long MODIFIED = 1L; + private static final String FILE_NAME = "fileName"; + private static final UUID ID = UUID.randomUUID(); + + private FileUnzippedAspect aspect = new FileUnzippedAspect(); + + @Mock + private MonitorService monitorService; + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private ProceedingJoinPoint pjp; + + private Object result = new Object(); + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private Message message; + + @Mock + private MonitorHistory monitorHistory; + + @Before + public void setUp() throws Throwable + { + aspect.setMonitorService(monitorService); + aspect.setFileNameHeaderKey("nameKey"); + aspect.setFileLastModifiedHeaderKey("modifiedKey"); + + given(pjp.proceed()).willReturn(result); + + given(message.getHeaders().getId()).willReturn(ID); + given(message.getHeaders().get("nameKey")).willReturn(FILE_NAME); + given(message.getHeaders().get("modifiedKey")).willReturn(MODIFIED); + + given(monitorService.begin(SystemArea.HOT_FOLDER, FILE_NAME + MODIFIED)).willReturn(monitorHistory); + given(monitorService.current()).willReturn(Optional.of(monitorHistory)); + } + + @Test + public void shouldReturnResultFromExecutedMethod() throws Throwable + { + assertThat(aspect.aroundUnzipped(pjp, message)).isEqualTo(result); + } + + @Test + public void givenMethodWasSuccessful_thenShouldLogSuccessfulStep_andIssueCheckpoint() throws Throwable + { + aspect.aroundUnzipped(pjp, message); + + verify(monitorHistory).stepSucceeded(eq(Step.FILE_UNZIPPED), isA(Date.class), isA(Date.class), + eq("Successfully unzipped file [{}] to [{}]"), eq(FILE_NAME), eq(ID.toString())); + verifyNoMoreInteractions(monitorHistory); + } + + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + @Test + public void givenMethodFailed_thenShouldLogFailedStep_andIssueEndMonitor() throws Throwable + { + final RuntimeException ex = new RuntimeException(); + given(pjp.proceed()).willThrow(ex); + + expectedException.expect(org.hamcrest.Matchers.isA(StepException.class)); + expectedException.expectCause(is(ex)); + + aspect.aroundUnzipped(pjp, message); + + final InOrder order = inOrder(monitorHistory); + order.verify(monitorHistory).stepFailed(eq(Step.FILE_UNZIPPED), isA(Date.class), isA(Date.class), + eq(ex), eq("Failed to unzip file [{}]"), eq(FILE_NAME)); + order.verify(monitorHistory).end(Status.FAILURE); + verifyNoMoreInteractions(monitorHistory); + } +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/aop/ImpexImportAspectTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/aop/ImpexImportAspectTest.java new file mode 100644 index 0000000..9e09022 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/aop/ImpexImportAspectTest.java @@ -0,0 +1,189 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.aop; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.commons.aop.exception.ActionException; +import de.hybris.platform.cloud.commons.services.monitor.MonitorHistory; +import de.hybris.platform.cloud.commons.services.monitor.MonitorService; +import de.hybris.platform.cloud.commons.services.monitor.Status; +import de.hybris.platform.servicelayer.impex.ImportConfig; +import de.hybris.platform.servicelayer.impex.ImportResult; + +import java.util.Date; +import java.util.Optional; + +import org.aspectj.lang.ProceedingJoinPoint; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.mockito.Answers; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.hamcrest.Matchers.is; +import static org.mockito.BDDMockito.given; +import static org.mockito.Matchers.eq; +import static org.mockito.Matchers.isA; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; +import static org.mockito.Mockito.verifyZeroInteractions; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class ImpexImportAspectTest +{ + private static final String SCRIPT_MEDIA_CODE = "scriptMediaCode"; + + private ImpexImportAspect aspect = new ImpexImportAspect(); + + private String FILE_ABS_PATH = "filepath/filename.csv"; + private String FILE_NAME = "filename.csv"; + private String OPTIONAL = "OPTIONAL"; + private String MANDATORY = "MANDATORY"; + + @Mock + private MonitorService monitorService; + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private ProceedingJoinPoint pjp; + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private ImportResult result; + + @Mock + private MonitorHistory monitorHistory; + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private ImportConfig config; + + @Captor + private ArgumentCaptor actionCodeCaptor; + + @Before + public void setUp() throws Throwable + { + aspect.setMonitorService(monitorService); + + given(pjp.proceed()).willReturn(result); + + given(monitorService.current()).willReturn(Optional.of(monitorHistory)); + + given(config.getScript().getMedia().getCode()).willReturn(SCRIPT_MEDIA_CODE); + } + + @Test + public void importDataMethod_shouldReturnResultFromExecutedMethod() throws Throwable + { + assertThat(aspect.aroundImportData(pjp, config)).isEqualTo(result); + } + + @Test + public void setupImpexMethod_shouldReturnResultFromExecutedMethod() throws Throwable + { + assertThat(aspect.aroundSetupImpex(pjp, FILE_ABS_PATH, false)).isEqualTo(result); + } + + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + @Test + public void importDataMethod_givenMethodFailed_thenShouldLogFailedStep_andIssueEndMonitor() throws Throwable + { + final RuntimeException ex = new RuntimeException("error Message"); + given(pjp.proceed()).willThrow(ex); + + expectedException.expect(org.hamcrest.Matchers.isA(ActionException.class)); + expectedException.expectCause(is(ex)); + + aspect.aroundImportData(pjp, config); + + verify(monitorHistory).addAction(eq(SCRIPT_MEDIA_CODE), eq(Status.FAILURE), isA(Date.class), isA(Date.class), + eq("Impex didn't run successfully and exception was thrown. Ex Message: {}"), eq(ex.getMessage())); + verifyNoMoreInteractions(monitorHistory); + } + + @Test + public void impexSetupMethod_givenMethodFailed_thenShouldNotLogFailedStep_andNotIssueEndMonitor() throws Throwable + { + final RuntimeException ex = new RuntimeException("error Message"); + given(pjp.proceed()).willThrow(ex); + + expectedException.expect(org.hamcrest.Matchers.isA(ActionException.class)); + expectedException.expectCause(is(ex)); + + aspect.aroundSetupImpex(pjp, FILE_ABS_PATH, false); + + verifyZeroInteractions(monitorHistory); + } + + @Test + public void importDataMethod_givenMethodWasSuccessful_andScriptWasSuccessful_thenShouldLogSuccessfulAction() throws Throwable + { + given(result.isSuccessful()).willReturn(true); + + aspect.aroundImportData(pjp, config); + + verify(monitorHistory).addAction(eq(SCRIPT_MEDIA_CODE), eq(Status.SUCCESS), isA(Date.class), isA(Date.class), eq("Impex ran successfully")); + verifyNoMoreInteractions(monitorHistory); + } + + @Test + public void impexSetupMethod_givenMethodWasSuccessful_andFileIsOptional_thenShouldLogSuccessfulAction() throws Throwable + { + aspect.aroundSetupImpex(pjp, FILE_ABS_PATH, false); + + verify(monitorHistory).addAction(actionCodeCaptor.capture(), eq(Status.IN_PROGRESS), isA(Date.class), isA(Date.class), + eq("Attempting to process [{}] impex file [{}]..."), eq(OPTIONAL), eq(FILE_NAME)); + verifyNoMoreInteractions(monitorHistory); + } + + @Test + public void impexSetupMethod_givenMethodWasSuccessful_andFileIsMandatory_thenShouldLogSuccessfulAction() throws Throwable + { + aspect.aroundSetupImpex(pjp, FILE_ABS_PATH, true); + + verify(monitorHistory).addAction(actionCodeCaptor.capture(), eq(Status.IN_PROGRESS), isA(Date.class), isA(Date.class), + eq("Attempting to process [{}] impex file [{}]..."), eq(MANDATORY), eq(FILE_NAME)); + verifyNoMoreInteractions(monitorHistory); + } + + @Test + public void givenMethodWasSuccessful_butScriptWasUnsuccessful_thenShouldLogErrorAction() throws Throwable + { + given(result.isError()).willReturn(true); + given(result.hasUnresolvedLines()).willReturn(true); + given(result.getUnresolvedLines().getPreview()).willReturn("unresolved preview"); + + aspect.aroundImportData(pjp, config); + + verify(monitorHistory).addAction(eq(SCRIPT_MEDIA_CODE), eq(Status.FAILURE), isA(Date.class), isA(Date.class), + eq("Impex didn't run successfully. {}"), eq("unresolved preview")); + verifyNoMoreInteractions(monitorHistory); + } + + @Test + public void importDataMethod_givenMethodWasSuccessful_butScriptIsStillRunning_thenShouldLogInProgressAction() throws Throwable + { + given(result.isRunning()).willReturn(true); + + aspect.aroundImportData(pjp, config); + + verify(monitorHistory).addAction(eq(SCRIPT_MEDIA_CODE), eq(Status.IN_PROGRESS), isA(Date.class), isA(Date.class), + eq("Impex is still running, will not wait. Maybe consider setting config.synchronous to true")); + verifyNoMoreInteractions(monitorHistory); + } +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/ZipBatchHeaderTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/ZipBatchHeaderTest.java new file mode 100644 index 0000000..1d5111f --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/ZipBatchHeaderTest.java @@ -0,0 +1,37 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.dataimport.batch.zip; + +import de.hybris.bootstrap.annotations.UnitTest; + +import java.io.File; + +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +@UnitTest +public class ZipBatchHeaderTest +{ + private ZipBatchHeader header = new ZipBatchHeader(); + private File parent = new File("parent"); + private File child = new File(parent, "dummyLocation"); + + @Test + public void unzippedFolderShouldBeRetainedAndSetAsTransformedFiles() + { + header.setFileUnzippedAs(child); + assertThat(header.getFileUnzippedAs()).isEqualTo(child); + assertThat(header.getFile()).isEqualTo(child); + assertThat(header.getUnzippedFolder()).isEqualTo(child.getParentFile()); + } + +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/impl/DataImportUnzippedFolderImportServiceTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/impl/DataImportUnzippedFolderImportServiceTest.java new file mode 100644 index 0000000..ef0268b --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/impl/DataImportUnzippedFolderImportServiceTest.java @@ -0,0 +1,98 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.service.impl; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.ZipBatchHeader; +import de.hybris.platform.commerceservices.dataimport.AbstractDataImportService; +import de.hybris.platform.commerceservices.setup.AbstractSystemSetup; +import de.hybris.platform.commerceservices.setup.data.ImportData; +import de.hybris.platform.core.initialization.SystemSetup; +import de.hybris.platform.core.initialization.SystemSetupContext; + +import java.io.File; +import java.util.Collections; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.runners.MockitoJUnitRunner; + +import static org.mockito.BDDMockito.willReturn; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.eq; +import static org.mockito.Matchers.refEq; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class DataImportUnzippedFolderImportServiceTest +{ + private static final String UNZIPPED_FOLDER_NAME = "be24ef21-cc29-5d71-d7bd-93c35baa2d3b"; + private static final File UNZIPPED_DIRECTORY = new File("/workDirectory" + File.separator + UNZIPPED_FOLDER_NAME); + private static final String FILE_UNZIPPED_AS = "file_unzipped_as"; + private static final File UNZIPPED_AS = new File(UNZIPPED_DIRECTORY, FILE_UNZIPPED_AS); + private static final String REQUIRED_SUBDIRECTORY = "/import/coredata"; + + @Spy + private DataImportUnzippedFolderImportService service = new DataImportUnzippedFolderImportService(); + + @Mock + private AbstractDataImportService abstractDataImportService; + + @Mock + private AbstractSystemSetup abstractSystemSetup; + + private ImportData importData = new ImportData(); + + private SystemSetupContext expectedContext; + + private ZipBatchHeader header = new ZipBatchHeader(); + + @Before + public void setUp() + { + service.setAbstractDataImportService(abstractDataImportService); + service.setAbstractSystemSetup(abstractSystemSetup); + service.setImportDatas(Collections.singletonList(importData)); + service.setRequiredSubdirectory(REQUIRED_SUBDIRECTORY); + + header.setFileUnzippedAs(UNZIPPED_AS); + + expectedContext = new SystemSetupContext(Collections.emptyMap(), + SystemSetup.Type.NOTDEFINED, + SystemSetup.Process.NOTDEFINED, + UNZIPPED_AS.getAbsolutePath()); + } + + @Test + public void shouldTryToImportCoreDataWhenFolderFoundWithinWorkingFolder() + { + willReturn(true).given(service).requiredDirExists(UNZIPPED_AS, "/import/coredata"); + + service.execute(header); + + verify(abstractDataImportService).execute(eq(abstractSystemSetup), refEq(expectedContext), eq(Collections.singletonList(importData))); + } + + @Test + public void shouldNotUseImportServicesWhenFolderNotFoundWithinWorkingFolder() + { + willReturn(false).given(service).requiredDirExists(eq(UNZIPPED_AS), anyString()); + + service.execute(header); + + verify(abstractDataImportService, never()).execute(eq(abstractSystemSetup), refEq(expectedContext), eq(Collections.singletonList(importData))); + } +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/impl/RawImpexUnzippedFolderImportServiceTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/impl/RawImpexUnzippedFolderImportServiceTest.java new file mode 100644 index 0000000..0f4f6cb --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/service/impl/RawImpexUnzippedFolderImportServiceTest.java @@ -0,0 +1,116 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.service.impl; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.ZipBatchHeader; +import de.hybris.platform.commerceservices.setup.SetupImpexService; + +import java.io.File; +import java.util.Arrays; +import java.util.Collections; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InOrder; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; + +import static org.mockito.Mockito.inOrder; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class RawImpexUnzippedFolderImportServiceTest +{ + private RawImpexUnzippedFolderImportService service = new RawImpexUnzippedFolderImportService(); + + @Mock + private SetupImpexService setupImpexService; + + private File unzippedFolder = new File(new File("root"), "unzippedFolderName"); + private File unzippedAs = new File(unzippedFolder, "file_unzipped_as_folder"); + + private File rootFile1 = new File(unzippedAs, "_file.csv"); + private File rootFile1Transformed = new File(unzippedAs, "_file.impex"); + private File rootFile2 = new File(unzippedAs, "z-file.impex"); + + private File rootFolder1 = new File(unzippedAs, "a-folder"); + private File rootFolder1File1 = new File(rootFolder1, "_file.impex"); + private File rootFolder1File2 = new File(rootFolder1, "z-file.impex"); + private File rootFolder1Subfolder = new File(rootFolder1, "b-folder"); + private File rootFolder1SubfolderFile1 = new File(rootFolder1Subfolder, "file.impex"); + + private File rootFolder2 = new File(unzippedAs, "b-folder"); + private File rootFolder2File1 = new File(rootFolder2, "file.impex"); + private File rootFolder2Subfolder = new File(rootFolder2, "c-folder"); + private File rootFolder2SubfolderFile1 = new File(rootFolder2Subfolder, "file.impex"); + + private ZipBatchHeader header = new ZipBatchHeader(); + + @Before + public void setUp() + { + service.setSetupImpexService(setupImpexService); + + header.setFileUnzippedAs(unzippedAs); + header.setUnzippedFiles(Arrays.asList(rootFile2, rootFolder1File2, rootFolder2File1, rootFolder2SubfolderFile1, rootFile1, rootFolder1SubfolderFile1, rootFolder1File1)); + header.setTransformedFiles(Collections.singletonList(rootFile1Transformed)); + } + + @Test + public void shouldImportFilesAlphabeticallyFollowedByDirectoriesAlphabetically() + { + service.execute(header); + + InOrder orderOf = inOrder(setupImpexService); + verifyFileWasImported(orderOf, rootFile1Transformed); + verifyFileWasImported(orderOf, rootFolder1File1); + verifyFileWasImported(orderOf, rootFolder1SubfolderFile1); + verifyFileWasImported(orderOf, rootFolder1File2); + verifyFileWasImported(orderOf, rootFolder2SubfolderFile1); + verifyFileWasImported(orderOf, rootFolder2File1); + verifyFileWasImported(orderOf, rootFile2); + } + + @Test + public void shouldHandleUnzippedFilesBeingNull() + { + header.setUnzippedFiles(null); + + service.execute(header); + + InOrder orderOf = inOrder(setupImpexService); + verifyFileWasImported(orderOf, rootFile1Transformed); + } + + @Test + public void shouldHandleTransformFilesBeingNull() + { + header.setTransformedFiles(null); + + service.execute(header); + + InOrder orderOf = inOrder(setupImpexService); + verifyFileWasImported(orderOf, rootFolder1File1); + verifyFileWasImported(orderOf, rootFolder1SubfolderFile1); + verifyFileWasImported(orderOf, rootFolder1File2); + verifyFileWasImported(orderOf, rootFolder2SubfolderFile1); + verifyFileWasImported(orderOf, rootFolder2File1); + verifyFileWasImported(orderOf, rootFile2); + } + + private void verifyFileWasImported(final InOrder orderOf, final File expectedFile) + { + orderOf.verify(setupImpexService).importImpexFile("/" + expectedFile.getAbsolutePath(), true); + } + +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderExecutionTaskTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderExecutionTaskTest.java new file mode 100644 index 0000000..1f9e80d --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderExecutionTaskTest.java @@ -0,0 +1,87 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.task; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.ZipBatchHeader; +import de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.service.UnzippedFolderImportService; + +import java.io.File; +import java.util.regex.Pattern; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; + +import com.google.common.collect.ImmutableMap; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class ZipHeaderExecutionTaskTest +{ + private static final String UNZIPPED_FOLDER_NAME = "be24ef21-cc29-5d71-d7bd-93c35baa2d3b"; + private static final File UNZIPPED_DIRECTORY = new File("workDirectory", UNZIPPED_FOLDER_NAME); + private static final File UNZIPPED_AS = new File(UNZIPPED_DIRECTORY, "original-file"); + + private ZipHeaderExecutionTask task = new ZipHeaderExecutionTask(); + + @Mock + private UnzippedFolderImportService coreDataImportService; + + @Mock + private UnzippedFolderImportService sampleDataImportService; + + private ZipBatchHeader header = new ZipBatchHeader(); + + @Before + public void setUp() + { + task.setUnzippedFolderImportServices(ImmutableMap.of(Pattern.compile("^coredata.*"), coreDataImportService, Pattern.compile("^sampledata.*"), sampleDataImportService)); + + header.setFileUnzippedAs(UNZIPPED_AS); + header.setOriginalFileName("original-file.zip"); + } + + @Test + public void shouldReturnGivenHeader() + { + assertThat(task.executeZip(header)).isEqualTo(header); + } + + @Test + public void shouldTryToImportCoreDataWhenFolderFoundWithinWorkingFolder() + { + header.setOriginalFileName("coredata-00.zip"); + + task.executeZip(header); + + verify(coreDataImportService).execute(header); + verify(sampleDataImportService, never()).execute(header); + } + + @Test + public void shouldTryToImportSampleDataWhenFolderFoundWithinWorkingFolder() + { + header.setOriginalFileName("sampledata-00.zip"); + + task.executeZip(header); + + verify(coreDataImportService, never()).execute(header); + verify(sampleDataImportService).execute(header); + } + +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderSetupTaskTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderSetupTaskTest.java new file mode 100644 index 0000000..3171344 --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderSetupTaskTest.java @@ -0,0 +1,114 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.task; + +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.ZipBatchHeader; +import de.hybris.platform.cloud.hotfolder.spring.integration.zip.CloudZipHeaders; +import de.hybris.platform.util.CSVConstants; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.integration.file.FileHeaders; +import org.springframework.messaging.Message; +import org.springframework.messaging.MessageHeaders; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.Map; + +import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; +import static org.mockito.BDDMockito.given; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class ZipHeaderSetupTaskTest +{ + private static final String HEADER_KEY_FILE = FileHeaders.FILENAME; + private static final String HEADER_KEY_UNZIPPED_FOLDER = CloudZipHeaders.UNZIP_DIRECTORY; + private static final String UNZIPPED_FOLDER_NAME = "be24ef21-cc29-5d71-d7bd-93c35baa2d3b"; + + private static final String ZIP_FILE = "rawFile.zip"; + private static final String ZIP_FOLDER = ZIP_FILE.substring(0, ZIP_FILE.length() - 4); + + private static final File UNZIPPED_ROOT_DIRECTORY = new File("unzippedDirectory"); + private static final File UNZIPPED_FOLDER_DIRECTORY = new File(UNZIPPED_ROOT_DIRECTORY, UNZIPPED_FOLDER_NAME); + private static final File UNZIPPED_AS_DIRECTORY = new File(UNZIPPED_FOLDER_DIRECTORY, ZIP_FOLDER); + + private static final File ROOT_FILE = new File(UNZIPPED_AS_DIRECTORY, "root-data.impex"); + private static final File IMPORT_FOLDER_FILE = new File(UNZIPPED_AS_DIRECTORY, "import/folder-1.impex"); + private static final File CORE_DATA_FILE = new File(UNZIPPED_AS_DIRECTORY, "import/coredata/folder-2.impex"); + private static final File ESSENTIAL_DATA_FILE = new File(UNZIPPED_AS_DIRECTORY, "import/coredata/common/essential-data.impex"); + + private static final String CATALOG = "catalog"; + private static final boolean NET = true; + + private ZipHeaderSetupTask task = new ZipHeaderSetupTask(); + + @Mock + private Message message; + + @Mock + private MessageHeaders messageHeaders; + + private Map unzippedFiles = new LinkedHashMap<>(); + + @Before + public void setUp() throws IOException + { + //task.setUnzippedRootDirectory(UNZIPPED_ROOT_DIRECTORY); + task.setFileNameHeaderKey(HEADER_KEY_FILE); + task.setUnZipDirectoryHeaderKey(HEADER_KEY_UNZIPPED_FOLDER); + task.setCatalog(CATALOG); + task.setNet(NET); + + given(message.getHeaders()).willReturn(messageHeaders); + given(messageHeaders.get(HEADER_KEY_FILE)).willReturn(ZIP_FILE); + given(messageHeaders.get(HEADER_KEY_UNZIPPED_FOLDER)).willReturn(UNZIPPED_FOLDER_DIRECTORY.getPath()); + + given(message.getPayload()).willReturn(unzippedFiles); + + unzippedFiles.put("rootFile", ROOT_FILE); + unzippedFiles.put("importFolderFile", IMPORT_FOLDER_FILE); + unzippedFiles.put("coreDataFile", CORE_DATA_FILE); + unzippedFiles.put("essentialDataFile", ESSENTIAL_DATA_FILE); + + } + + @Test + public void shouldHandleUnzippedFilesBeingEmpty() + { + unzippedFiles.clear(); + + task.execute(message); + } + + @Test + public void shouldReturnHeaderWithArgsSetAsExpected() + { + final ZipBatchHeader expected = new ZipBatchHeader(); + expected.setOriginalFileName(ZIP_FILE); + expected.setFileUnzippedAs(UNZIPPED_AS_DIRECTORY); + expected.setEncoding(CSVConstants.HYBRIS_ENCODING); + expected.setCatalog(CATALOG); + expected.setNet(NET); + expected.setUnzippedFiles(Arrays.asList(ROOT_FILE, IMPORT_FOLDER_FILE, CORE_DATA_FILE, ESSENTIAL_DATA_FILE)); + + final ZipBatchHeader result = task.execute(message); + assertThat(result).isEqualToIgnoringGivenFields(expected, "unzippedFiles"); + assertThat(result.getUnzippedFiles()).containsExactly(ROOT_FILE, IMPORT_FOLDER_FILE, CORE_DATA_FILE, ESSENTIAL_DATA_FILE); + } + +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderTransformerTaskTest.java b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderTransformerTaskTest.java new file mode 100644 index 0000000..2c13e7b --- /dev/null +++ b/core-customize/hybris/bin/custom/cloudhotfolders_2005/cloudhotfolder/testsrc/de/hybris/platform/cloud/hotfolder/dataimport/batch/zip/task/ZipHeaderTransformerTaskTest.java @@ -0,0 +1,119 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.task; + +import com.google.common.collect.ImmutableMap; +import de.hybris.bootstrap.annotations.UnitTest; +import de.hybris.platform.acceleratorservices.dataimport.batch.converter.ImpexConverter; +import de.hybris.platform.acceleratorservices.dataimport.batch.task.CleanupHelper; +import de.hybris.platform.cloud.hotfolder.dataimport.batch.zip.ZipBatchHeader; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.runners.MockitoJUnitRunner; + +import java.io.File; +import java.io.IOException; +import java.util.*; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.willReturn; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; + +@UnitTest +@RunWith(MockitoJUnitRunner.class) +public class ZipHeaderTransformerTaskTest +{ + @Spy + private final ZipHeaderTransformerTask task = new ZipHeaderTransformerTask(); + + @Mock + private ImpexConverter productImpexConverter; + + @Mock + private CleanupHelper cleanupHelper; + + private final ZipBatchHeader header = new ZipBatchHeader(); + + private final File impexFile = new File("raw.impex"); + private final File csvFile = new File("folder", "product.csv"); + private final File convertedImpexFile = new File("folder", "product-1.impex"); + + @Before + public void setUp() throws IOException + { + task.setConverterMap(ImmutableMap.of("product", Collections.singletonList(productImpexConverter))); + task.setCleanupHelper(cleanupHelper); + + header.setUnzippedFiles(Arrays.asList(impexFile, csvFile)); + header.setTransformedFiles(new ArrayList<>()); + + givenThatFileConversionResultedIn(true); + } + + private void givenThatFileConversionResultedIn(final boolean result) throws IOException + { + willReturn(result) + .given(task) + .convertFile(header, csvFile, convertedImpexFile, productImpexConverter); + } + + @Test + public void csvConvertedSuccessfullyShouldBeAddedToTransformedFiles() + { + task.executeZip(header); + + assertThat(header.getTransformedFiles()).containsExactly(convertedImpexFile); + verify(cleanupHelper, never()).cleanupFile(convertedImpexFile); + } + + @Test + public void csvNotConvertedSuccessfullyShouldBeCleanedUp() throws IOException + { + givenThatFileConversionResultedIn(false); + + task.executeZip(header); + + assertThat(header.getTransformedFiles()).isEmpty(); + verify(cleanupHelper).cleanupFile(convertedImpexFile); + } + + @Test + public void buildReplacementSymbolsShouldAdjustStandardVariables() + { + final File rootDir = new File("parentFolder"); + final File subDir = new File(rootDir, "childFolder"); + + header.setCatalog("catalog"); + header.setLanguage("language"); + header.setNet(true); + header.setStoreBaseDirectory("storeBaseDir"); + header.setFileUnzippedAs(subDir); + + final Map symbols = new LinkedHashMap<>(); + task.buildReplacementSymbols(symbols, header, productImpexConverter); + + final Map expected = new LinkedHashMap<>(); + expected.put("$CATALOG$", "catalog"); + expected.put("$LANGUAGE$", "language"); + expected.put("$NET$", "true"); + expected.put("$BASE_SOURCE_DIR$", subDir.getAbsolutePath()); + expected.put("$SOURCE_FILE$", subDir.getAbsolutePath()); + expected.put("$SOURCE_DIR$", subDir.getAbsolutePath()); + + assertThat(symbols).containsAllEntriesOf(expected); + } + + +} \ No newline at end of file diff --git a/core-customize/hybris/config-template/localextensions.xml b/core-customize/hybris/config-template/localextensions.xml deleted file mode 100644 index 4956f8b..0000000 --- a/core-customize/hybris/config-template/localextensions.xml +++ /dev/null @@ -1,340 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/core-customize/manifest.json b/core-customize/manifest.json new file mode 100644 index 0000000..d99dbb6 --- /dev/null +++ b/core-customize/manifest.json @@ -0,0 +1,3 @@ +{ + "commerceSuiteVersion": "2011" +} From 09f94b7646f5a1ed41608de0ad304534ed21b5f1 Mon Sep 17 00:00:00 2001 From: Markus Perndorfer Date: Thu, 10 Dec 2020 13:28:52 +0100 Subject: [PATCH 13/24] remove envribbon --- .../hybris/bin/custom/envribbon/LICENSE | 201 --------- .../hybris/bin/custom/envribbon/README.md | 34 -- .../bin/custom/envribbon/envribbon/.classpath | 16 - .../bin/custom/envribbon/envribbon/.gitignore | 2 - .../bin/custom/envribbon/envribbon/.project | 23 - .../widgets/envribbon/definition.xml | 24 -- .../resources/widgets/envribbon/envribbon.zul | 29 -- .../sap/commerce/ribbon/RibbonController.java | 23 - .../envribbon/envribbon/buildcallbacks.xml | 27 -- .../envribbon/envribbon/extensioninfo.xml | 14 - .../hac/resources/static/js/envribbon.js | 23 - .../hac/controller/RibbonDataController.java | 21 - .../envribbon/envribbon/project.properties | 1 - .../envribbon-backoffice-widgets.xml | 8 - .../envribbon/resources/envribbon-beans.xml | 7 - .../envribbon/resources/envribbon-spring.xml | 11 - .../resources/envribbon.build.number | 9 - .../resources/envribbon/envribbon.css | 32 -- .../ribbon/EnvironmentMetaDataService.java | 5 - .../ribbon/constants/EnvribbonConstants.java | 26 -- .../DefaultEnvironmentMetaDataService.java | 40 -- .../envribbon/envribbonaddon/.classpath | 16 - .../HybrisCodeGeneration.launch | 24 -- .../envribbon/envribbonaddon/.gitignore | 1 - .../custom/envribbon/envribbonaddon/.project | 34 -- .../org.eclipse.core.resources.prefs | 2 - .../.settings/org.eclipse.jdt.core.prefs | 394 ------------------ .../.settings/org.eclipse.jdt.ui.prefs | 75 ---- ...ringframework.ide.eclipse.beans.core.prefs | 3 - ...org.springframework.ide.eclipse.core.prefs | 39 -- .../envribbon/envribbonaddon/.springBeans | 14 - .../cms/EnvRibbonComponentController.java | 24 -- .../responsive/cms/envribboncomponent.jsp | 20 - .../envribbonaddon/buildcallbacks.xml | 12 - .../envribbonaddon/extensioninfo.xml | 12 - .../envribbonaddon/external-dependencies.xml | 22 - .../project.properties.template | 5 - .../resources/envribbonaddon-items.xml | 13 - .../resources/envribbonaddon-spring.xml | 43 -- .../resources/envribbonaddon.build.number | 9 - .../cms-content.impex | 8 - .../cms-content.impex | 8 - .../cms-content.impex | 8 - .../web/spring/envribbonaddon-web-spring.xml | 34 -- .../constants/EnvribbonaddonConstants.java | 27 -- .../ribbon/jalo/EnvRibbonComponent.java | 25 -- 46 files changed, 1448 deletions(-) delete mode 100644 core-customize/hybris/bin/custom/envribbon/LICENSE delete mode 100644 core-customize/hybris/bin/custom/envribbon/README.md delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbon/.classpath delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbon/.gitignore delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbon/.project delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbon/backoffice/resources/widgets/envribbon/definition.xml delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbon/backoffice/resources/widgets/envribbon/envribbon.zul delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbon/backoffice/src/mpern/sap/commerce/ribbon/RibbonController.java delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbon/buildcallbacks.xml delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbon/extensioninfo.xml delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbon/hac/resources/static/js/envribbon.js delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbon/hac/src/de/hybris/platform/hac/controller/RibbonDataController.java delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbon/project.properties delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbon/resources/envribbon-backoffice-widgets.xml delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbon/resources/envribbon-beans.xml delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbon/resources/envribbon-spring.xml delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbon/resources/envribbon.build.number delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbon/resources/envribbon/envribbon.css delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbon/src/mpern/sap/commerce/ribbon/EnvironmentMetaDataService.java delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbon/src/mpern/sap/commerce/ribbon/constants/EnvribbonConstants.java delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbon/src/mpern/sap/commerce/ribbon/impl/DefaultEnvironmentMetaDataService.java delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/.classpath delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/.externalToolBuilders/HybrisCodeGeneration.launch delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/.gitignore delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/.project delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/.settings/org.eclipse.core.resources.prefs delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/.settings/org.eclipse.jdt.core.prefs delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/.settings/org.eclipse.jdt.ui.prefs delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/.settings/org.springframework.ide.eclipse.beans.core.prefs delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/.settings/org.springframework.ide.eclipse.core.prefs delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/.springBeans delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/acceleratoraddon/web/src/mpern/sap/commerce/ribbon/controllers/cms/EnvRibbonComponentController.java delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/acceleratoraddon/web/webroot/WEB-INF/views/responsive/cms/envribboncomponent.jsp delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/buildcallbacks.xml delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/extensioninfo.xml delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/external-dependencies.xml delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/project.properties.template delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon-items.xml delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon-spring.xml delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon.build.number delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon/import/contentCatalogs/apparel-deContentCatalog/cms-content.impex delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-content.impex delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon/import/contentCatalogs/electronicsContentCatalog/cms-content.impex delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon/web/spring/envribbonaddon-web-spring.xml delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/src/mpern/sap/commerce/ribbon/constants/EnvribbonaddonConstants.java delete mode 100644 core-customize/hybris/bin/custom/envribbon/envribbonaddon/src/mpern/sap/commerce/ribbon/jalo/EnvRibbonComponent.java diff --git a/core-customize/hybris/bin/custom/envribbon/LICENSE b/core-customize/hybris/bin/custom/envribbon/LICENSE deleted file mode 100644 index 261eeb9..0000000 --- a/core-customize/hybris/bin/custom/envribbon/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) 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. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/core-customize/hybris/bin/custom/envribbon/README.md b/core-customize/hybris/bin/custom/envribbon/README.md deleted file mode 100644 index 32b6d8d..0000000 --- a/core-customize/hybris/bin/custom/envribbon/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# Environment Ribbons for SAP Commerce -[![ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/W7W7VS24) - -![Ribbons](../assets/ribbons.gif?raw=true) - -## Install - -1. Download this repo as zip -1. Unpack the zip to your `hybris/bin/custom` folder -1. Add the `envribbon` extension to your `localextensions.xml` -1. Build - -If you want to add a ribbon component to your storefront: - -1. Add `envribbonaddon` to your `localextensions.xml` -1. `ant addoninstall -Daddonnames="envribbonaddon" -DaddonStorefront.yacceleratorstorefront=""` -1. Build -1. Update system -1. Add a `EnvRibbonComponent` to your `FooterSlot` \ - (check the demo data included in the addon for details) - -## Notes - -- You can "click through" the ribbon (CSS `pointer-events: none`) -- There is a *single CSS* file that controls the style of the ribbon *everywhere*: \ - [`envribbon/resources/envribbon/envribbon.css`](envribbon/resources/envribbon/envribbon.css) \ - Build callbacks take care of copying the stylesheet where it is needed -- If deployed in a CCv2 environment, the extension will **auto-detect** the environment (code and type) -- For on-prem environments (or if you want to override the detected values), you can use: - ``` - ribbon.environment.code= - ribbon.environment.type= - # development, staging, production - ``` diff --git a/core-customize/hybris/bin/custom/envribbon/envribbon/.classpath b/core-customize/hybris/bin/custom/envribbon/envribbon/.classpath deleted file mode 100644 index 0198d13..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbon/.classpath +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/envribbon/envribbon/.gitignore b/core-customize/hybris/bin/custom/envribbon/envribbon/.gitignore deleted file mode 100644 index 36a7830..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbon/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -hac/resources/static/css/envribbon.css -resources/cockpitng/cng/css/envribbon_common.css \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/envribbon/envribbon/.project b/core-customize/hybris/bin/custom/envribbon/envribbon/.project deleted file mode 100644 index 8134e5f..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbon/.project +++ /dev/null @@ -1,23 +0,0 @@ - - - envribbon - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.springframework.ide.eclipse.core.springbuilder - - - - - - org.springframework.ide.eclipse.core.springnature - org.eclipse.jdt.core.javanature - - \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/envribbon/envribbon/backoffice/resources/widgets/envribbon/definition.xml b/core-customize/hybris/bin/custom/envribbon/envribbon/backoffice/resources/widgets/envribbon/definition.xml deleted file mode 100644 index c7e6798..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbon/backoffice/resources/widgets/envribbon/definition.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - Environment Ribbon - mpern - 1.0 - - ribbon - environment - - - - diff --git a/core-customize/hybris/bin/custom/envribbon/envribbon/backoffice/resources/widgets/envribbon/envribbon.zul b/core-customize/hybris/bin/custom/envribbon/envribbon/backoffice/resources/widgets/envribbon/envribbon.zul deleted file mode 100644 index ff9fbce..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbon/backoffice/resources/widgets/envribbon/envribbon.zul +++ /dev/null @@ -1,29 +0,0 @@ - - - - -
- - zk.afterMount(function () { - var meta = document.querySelector("[data-metaholder]"); - - if (meta.dataset.environment && meta.dataset.type) { - var container = document.createElement("div"); - - container.id = 'mpern-env-ribbon'; - container.classList.add("mpern-env-ribbon"); - container.setAttribute("data-environment", meta.dataset.environment); - container.setAttribute("data-type", meta.dataset.type); - - document.body.insertBefore(container, document.body.firstChild); - } - }); - -
diff --git a/core-customize/hybris/bin/custom/envribbon/envribbon/backoffice/src/mpern/sap/commerce/ribbon/RibbonController.java b/core-customize/hybris/bin/custom/envribbon/envribbon/backoffice/src/mpern/sap/commerce/ribbon/RibbonController.java deleted file mode 100644 index 20c6f13..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbon/backoffice/src/mpern/sap/commerce/ribbon/RibbonController.java +++ /dev/null @@ -1,23 +0,0 @@ -package mpern.sap.commerce.ribbon; - -import com.hybris.cockpitng.util.DefaultWidgetController; -import org.zkoss.zk.ui.Component; -import org.zkoss.zk.ui.select.annotation.Wire; -import org.zkoss.zk.ui.select.annotation.WireVariable; -import org.zkoss.zul.Div; - -public class RibbonController extends DefaultWidgetController { - @Wire - Div envRibbon; - - @WireVariable - EnvironmentMetaDataService environmentMetaDataService; - - @Override - public void initialize(Component comp) { - super.initialize(comp); - EnvironmentMetaData environmentMetaData = environmentMetaDataService.getMetaData(); - envRibbon.setClientDataAttribute("environment", environmentMetaData.getCode()); - envRibbon.setClientDataAttribute("type", environmentMetaData.getType()); - } -} diff --git a/core-customize/hybris/bin/custom/envribbon/envribbon/buildcallbacks.xml b/core-customize/hybris/bin/custom/envribbon/envribbon/buildcallbacks.xml deleted file mode 100644 index 3047026..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbon/buildcallbacks.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/envribbon/envribbon/extensioninfo.xml b/core-customize/hybris/bin/custom/envribbon/envribbon/extensioninfo.xml deleted file mode 100644 index 4152338..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbon/extensioninfo.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/core-customize/hybris/bin/custom/envribbon/envribbon/hac/resources/static/js/envribbon.js b/core-customize/hybris/bin/custom/envribbon/envribbon/hac/resources/static/js/envribbon.js deleted file mode 100644 index e890144..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbon/hac/resources/static/js/envribbon.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -(function() { - var ribbonData = document.getElementById("mainContainer").dataset.contextpath + "/ribbon/data", - xhr = new XMLHttpRequest(); - - xhr.onload = function () { - var container = document.createElement("div"), env; - if (xhr.status >= 200 && xhr.status < 300) { - env = JSON.parse(xhr.responseText); - if (env.code && env.type) { - container.id = 'mpern-env-ribbon'; - container.classList.add('mpern-env-ribbon'); - container.dataset.environment = env.code; - container.dataset.type = env.type; - - document.body.insertBefore(container, document.body.firstChild); - } - } - }; - xhr.open('GET', ribbonData); - xhr.setRequestHeader("Accept", "application/json"); - xhr.send(); -})(); \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/envribbon/envribbon/hac/src/de/hybris/platform/hac/controller/RibbonDataController.java b/core-customize/hybris/bin/custom/envribbon/envribbon/hac/src/de/hybris/platform/hac/controller/RibbonDataController.java deleted file mode 100644 index c348de3..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbon/hac/src/de/hybris/platform/hac/controller/RibbonDataController.java +++ /dev/null @@ -1,21 +0,0 @@ -package de.hybris.platform.hac.controller; - -import mpern.sap.commerce.ribbon.EnvironmentMetaData; -import mpern.sap.commerce.ribbon.EnvironmentMetaDataService; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -import javax.annotation.Resource; - -@RestController -public class RibbonDataController { - - @Resource - private EnvironmentMetaDataService environmentMetaDataService; - - @RequestMapping(value = "/ribbon/data", method = RequestMethod.GET) - public EnvironmentMetaData getRibbonData() { - return environmentMetaDataService.getMetaData(); - } -} diff --git a/core-customize/hybris/bin/custom/envribbon/envribbon/project.properties b/core-customize/hybris/bin/custom/envribbon/envribbon/project.properties deleted file mode 100644 index 8b0eedb..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbon/project.properties +++ /dev/null @@ -1 +0,0 @@ -envribbon.application-context=envribbon-spring.xml diff --git a/core-customize/hybris/bin/custom/envribbon/envribbon/resources/envribbon-backoffice-widgets.xml b/core-customize/hybris/bin/custom/envribbon/envribbon/resources/envribbon-backoffice-widgets.xml deleted file mode 100644 index d50c9fa..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbon/resources/envribbon-backoffice-widgets.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/core-customize/hybris/bin/custom/envribbon/envribbon/resources/envribbon-beans.xml b/core-customize/hybris/bin/custom/envribbon/envribbon/resources/envribbon-beans.xml deleted file mode 100644 index 4b786e8..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbon/resources/envribbon-beans.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/core-customize/hybris/bin/custom/envribbon/envribbon/resources/envribbon-spring.xml b/core-customize/hybris/bin/custom/envribbon/envribbon/resources/envribbon-spring.xml deleted file mode 100644 index f68ce40..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbon/resources/envribbon-spring.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/envribbon/envribbon/resources/envribbon.build.number b/core-customize/hybris/bin/custom/envribbon/envribbon/resources/envribbon.build.number deleted file mode 100644 index 3fb34f8..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbon/resources/envribbon.build.number +++ /dev/null @@ -1,9 +0,0 @@ -#Ant properties -#Wed Mar 06 16:27:46 CET 2019 -builddate=20190306 1627 -description=envribbon -name=envribbon -releasedate=20181129 1417 -vendor=hybris -version=1811.4 -version.api=1811 diff --git a/core-customize/hybris/bin/custom/envribbon/envribbon/resources/envribbon/envribbon.css b/core-customize/hybris/bin/custom/envribbon/envribbon/resources/envribbon/envribbon.css deleted file mode 100644 index bb07776..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbon/resources/envribbon/envribbon.css +++ /dev/null @@ -1,32 +0,0 @@ -.mpern-env-ribbon { - z-index: 10000; - - font-family: monospace; - font-size: 24px; - line-height: 1em; - text-transform: uppercase; - white-space: nowrap; - - overflow: hidden; - position: absolute; - left: -6.5em; - top: 2em; - width: 20em; - transform: rotate(-45deg); - - opacity: .7; - color: #e8e8e8; - box-shadow: 0 0 1em 0.5em rgba(0,0,0,0.75); - - pointer-events: none; -} -.mpern-env-ribbon::before { - content: attr(data-environment); - display: block; - padding: 1em 2em; - font-weight: 800; - text-align: center; -} -.mpern-env-ribbon[data-type=development] { background-color: #a1b56c } -.mpern-env-ribbon[data-type=staging] { background-color: #dc9656 } -.mpern-env-ribbon[data-type=production] { background-color: #ab4642 } \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/envribbon/envribbon/src/mpern/sap/commerce/ribbon/EnvironmentMetaDataService.java b/core-customize/hybris/bin/custom/envribbon/envribbon/src/mpern/sap/commerce/ribbon/EnvironmentMetaDataService.java deleted file mode 100644 index db7969d..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbon/src/mpern/sap/commerce/ribbon/EnvironmentMetaDataService.java +++ /dev/null @@ -1,5 +0,0 @@ -package mpern.sap.commerce.ribbon; - -public interface EnvironmentMetaDataService { - EnvironmentMetaData getMetaData(); -} diff --git a/core-customize/hybris/bin/custom/envribbon/envribbon/src/mpern/sap/commerce/ribbon/constants/EnvribbonConstants.java b/core-customize/hybris/bin/custom/envribbon/envribbon/src/mpern/sap/commerce/ribbon/constants/EnvribbonConstants.java deleted file mode 100644 index 0b5bb83..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbon/src/mpern/sap/commerce/ribbon/constants/EnvribbonConstants.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * [y] hybris Platform - * - * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. - * - * This software is the confidential and proprietary information of SAP - * ("Confidential Information"). You shall not disclose such Confidential - * Information and shall use it only in accordance with the terms of the - * license agreement you entered into with SAP. - */ -package mpern.sap.commerce.ribbon.constants; - -/** - * Global class for all Envribbon constants. You can add global constants for your extension into this class. - */ -public final class EnvribbonConstants extends GeneratedEnvribbonConstants -{ - public static final String EXTENSIONNAME = "envribbon"; - - private EnvribbonConstants() - { - //empty to avoid instantiating this constant class - } - - // implement here constants used by this extension -} diff --git a/core-customize/hybris/bin/custom/envribbon/envribbon/src/mpern/sap/commerce/ribbon/impl/DefaultEnvironmentMetaDataService.java b/core-customize/hybris/bin/custom/envribbon/envribbon/src/mpern/sap/commerce/ribbon/impl/DefaultEnvironmentMetaDataService.java deleted file mode 100644 index de75fc4..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbon/src/mpern/sap/commerce/ribbon/impl/DefaultEnvironmentMetaDataService.java +++ /dev/null @@ -1,40 +0,0 @@ -package mpern.sap.commerce.ribbon.impl; - -import de.hybris.platform.servicelayer.config.ConfigurationService; -import mpern.sap.commerce.ribbon.EnvironmentMetaDataService; -import mpern.sap.commerce.ribbon.EnvironmentMetaData; - -public class DefaultEnvironmentMetaDataService implements EnvironmentMetaDataService { - private final ConfigurationService configurationService; - - public DefaultEnvironmentMetaDataService(ConfigurationService configurationService) { - this.configurationService = configurationService; - } - - @Override - public EnvironmentMetaData getMetaData() { - EnvironmentMetaData data = new EnvironmentMetaData(); - - data.setCode(readEnvironmentFromConfig()); - data.setType(readTypeFromConfig()); - - return data; - } - - private String readEnvironmentFromConfig() { - String env = configurationService.getConfiguration().getString("ribbon.environment.code", ""); - if (env.isEmpty()) { - env = configurationService.getConfiguration().getString("modelt.project.code", ""); - env += ( env.isEmpty() ? "" : "-" ) + configurationService.getConfiguration().getString("modelt.environment.code", ""); - } - return env; - } - - private String readTypeFromConfig() { - String type = configurationService.getConfiguration().getString("ribbon.environment.type", ""); - if (type.isEmpty()) { - type = configurationService.getConfiguration().getString("modelt.environment.type", ""); - } - return type.toLowerCase(); - } -} diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.classpath b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.classpath deleted file mode 100644 index 74ebf0c..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.classpath +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.externalToolBuilders/HybrisCodeGeneration.launch b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.externalToolBuilders/HybrisCodeGeneration.launch deleted file mode 100644 index 1a81ee9..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.externalToolBuilders/HybrisCodeGeneration.launch +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.gitignore b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.gitignore deleted file mode 100644 index 8d0794a..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.gitignore +++ /dev/null @@ -1 +0,0 @@ -acceleratoraddon/web/webroot/_ui/responsive/common/css/envribbonaddon.css \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.project b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.project deleted file mode 100644 index 9edc4a7..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.project +++ /dev/null @@ -1,34 +0,0 @@ - - - envribbonaddon - - - - - - org.eclipse.ui.externaltools.ExternalToolBuilder - auto,full, - - - LaunchConfigHandle - <project>/.externalToolBuilders/HybrisCodeGeneration.launch - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.springframework.ide.eclipse.core.springbuilder - - - - - - - org.springframework.ide.eclipse.core.springnature - org.eclipse.jdt.core.javanature - - diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.settings/org.eclipse.core.resources.prefs b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 99f26c0..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding/=UTF-8 diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.settings/org.eclipse.jdt.core.prefs b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 2da223c..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,394 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.codeComplete.argumentPrefixes= -org.eclipse.jdt.core.codeComplete.argumentSuffixes= -org.eclipse.jdt.core.codeComplete.fieldPrefixes= -org.eclipse.jdt.core.codeComplete.fieldSuffixes= -org.eclipse.jdt.core.codeComplete.localPrefixes= -org.eclipse.jdt.core.codeComplete.localSuffixes= -org.eclipse.jdt.core.codeComplete.staticFieldPrefixes= -org.eclipse.jdt.core.codeComplete.staticFieldSuffixes= -org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled -org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore -org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull -org.eclipse.jdt.core.compiler.annotation.nonnull.secondary= -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary= -org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable -org.eclipse.jdt.core.compiler.annotation.nullable.secondary= -org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.doc.comment.support=enabled -org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=ignore -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.autoboxing=ignore -org.eclipse.jdt.core.compiler.problem.comparingIdentical=ignore -org.eclipse.jdt.core.compiler.problem.deadCode=ignore -org.eclipse.jdt.core.compiler.problem.deprecation=ignore -org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled -org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled -org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore -org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore -org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore -org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled -org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore -org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore -org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=ignore -org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore -org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=ignore -org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled -org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=ignore -org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore -org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore -org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore -org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled -org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled -org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled -org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private -org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore -org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=ignore -org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore -org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled -org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore -org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore -org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled -org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public -org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag -org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore -org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled -org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled -org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore -org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore -org.eclipse.jdt.core.compiler.problem.noEffectAssignment=ignore -org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=ignore -org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore -org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=ignore -org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=ignore -org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=ignore -org.eclipse.jdt.core.compiler.problem.nullReference=ignore -org.eclipse.jdt.core.compiler.problem.nullSpecViolation=ignore -org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore -org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=ignore -org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore -org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=ignore -org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore -org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore -org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore -org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore -org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=ignore -org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore -org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore -org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore -org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore -org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore -org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled -org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=ignore -org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled -org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled -org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled -org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore -org.eclipse.jdt.core.compiler.problem.typeParameterHiding=ignore -org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled -org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore -org.eclipse.jdt.core.compiler.problem.unclosedCloseable=ignore -org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=ignore -org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=ignore -org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled -org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=ignore -org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore -org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore -org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unsafeTypeOperation=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled -org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedImport=ignore -org.eclipse.jdt.core.compiler.problem.unusedLabel=ignore -org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore -org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled -org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore -org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedWarningToken=ignore -org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=ignore -org.eclipse.jdt.core.compiler.source=1.8 -org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled -org.eclipse.jdt.core.compiler.taskPriorities= -org.eclipse.jdt.core.compiler.taskTags= -org.eclipse.jdt.core.formatter.align_type_members_on_columns=false -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_assignment=0 -org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 -org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 -org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 -org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 -org.eclipse.jdt.core.formatter.blank_lines_after_imports=2 -org.eclipse.jdt.core.formatter.blank_lines_after_package=1 -org.eclipse.jdt.core.formatter.blank_lines_before_field=0 -org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 -org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 -org.eclipse.jdt.core.formatter.blank_lines_before_method=1 -org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 -org.eclipse.jdt.core.formatter.blank_lines_before_package=0 -org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 -org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 -org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line -org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line -org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=next_line -org.eclipse.jdt.core.formatter.brace_position_for_block=next_line -org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line -org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line -org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line -org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line -org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line -org.eclipse.jdt.core.formatter.comment.clear_blank_lines=true -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false -org.eclipse.jdt.core.formatter.comment.format_block_comments=true -org.eclipse.jdt.core.formatter.comment.format_comments=true -org.eclipse.jdt.core.formatter.comment.format_header=false -org.eclipse.jdt.core.formatter.comment.format_html=true -org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true -org.eclipse.jdt.core.formatter.comment.format_line_comments=false -org.eclipse.jdt.core.formatter.comment.format_source_code=true -org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true -org.eclipse.jdt.core.formatter.comment.indent_root_tags=true -org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert -org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert -org.eclipse.jdt.core.formatter.comment.line_length=120 -org.eclipse.jdt.core.formatter.compact_else_if=true -org.eclipse.jdt.core.formatter.continuation_indentation=2 -org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 -org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true -org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_empty_lines=false -org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true -org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true -org.eclipse.jdt.core.formatter.indentation.size=3 -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert -org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert -org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert -org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert -org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert -org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false -org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=true -org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false -org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false -org.eclipse.jdt.core.formatter.lineSplit=130 -org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false -org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false -org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 -org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=50 -org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true -org.eclipse.jdt.core.formatter.tabulation.char=mixed -org.eclipse.jdt.core.formatter.tabulation.size=3 -org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false -org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.settings/org.eclipse.jdt.ui.prefs b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index 9bcee55..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,75 +0,0 @@ -#Tue Feb 03 16:09:22 CET 2009 -comment_clear_blank_lines=true -comment_format_comments=true -comment_format_header=false -comment_format_html=true -comment_format_source_code=true -comment_indent_parameter_description=true -comment_indent_root_tags=true -comment_line_length=160 -comment_new_line_for_parameter=false -comment_separate_root_tags=true -eclipse.preferences.version=1 -editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true -formatter_settings_version=11 -org.eclipse.jdt.ui.exception.name=e -org.eclipse.jdt.ui.gettersetter.use.is=true -org.eclipse.jdt.ui.ignorelowercasenames=true -org.eclipse.jdt.ui.importorder=de.hybris;java;javax;org;com;de; -org.eclipse.jdt.ui.javadoc=true -org.eclipse.jdt.ui.keywordthis=false -org.eclipse.jdt.ui.ondemandthreshold=50 -org.eclipse.jdt.ui.overrideannotation=true -org.eclipse.jdt.ui.staticondemandthreshold=50 -org.eclipse.jdt.ui.text.custom_code_templates= -sp_cleanup.add_default_serial_version_id=true -sp_cleanup.add_generated_serial_version_id=false -sp_cleanup.add_missing_annotations=true -sp_cleanup.add_missing_deprecated_annotations=true -sp_cleanup.add_missing_methods=false -sp_cleanup.add_missing_nls_tags=false -sp_cleanup.add_missing_override_annotations=true -sp_cleanup.add_serial_version_id=false -sp_cleanup.always_use_blocks=true -sp_cleanup.always_use_parentheses_in_expressions=false -sp_cleanup.always_use_this_for_non_static_field_access=false -sp_cleanup.always_use_this_for_non_static_method_access=false -sp_cleanup.convert_to_enhanced_for_loop=false -sp_cleanup.correct_indentation=false -sp_cleanup.format_source_code=true -sp_cleanup.format_source_code_changes_only=false -sp_cleanup.make_local_variable_final=true -sp_cleanup.make_parameters_final=true -sp_cleanup.make_private_fields_final=true -sp_cleanup.make_type_abstract_if_missing_method=false -sp_cleanup.make_variable_declarations_final=true -sp_cleanup.never_use_blocks=false -sp_cleanup.never_use_parentheses_in_expressions=true -sp_cleanup.on_save_use_additional_actions=true -sp_cleanup.organize_imports=true -sp_cleanup.qualify_static_field_accesses_with_declaring_class=false -sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_with_declaring_class=false -sp_cleanup.qualify_static_method_accesses_with_declaring_class=false -sp_cleanup.remove_private_constructors=true -sp_cleanup.remove_trailing_whitespaces=true -sp_cleanup.remove_trailing_whitespaces_all=true -sp_cleanup.remove_trailing_whitespaces_ignore_empty=false -sp_cleanup.remove_unnecessary_casts=true -sp_cleanup.remove_unnecessary_nls_tags=false -sp_cleanup.remove_unused_imports=true -sp_cleanup.remove_unused_local_variables=false -sp_cleanup.remove_unused_private_fields=true -sp_cleanup.remove_unused_private_members=false -sp_cleanup.remove_unused_private_methods=true -sp_cleanup.remove_unused_private_types=true -sp_cleanup.sort_members=false -sp_cleanup.sort_members_all=false -sp_cleanup.use_blocks=true -sp_cleanup.use_blocks_only_for_return_and_throw=false -sp_cleanup.use_parentheses_in_expressions=false -sp_cleanup.use_this_for_non_static_field_access=false -sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true -sp_cleanup.use_this_for_non_static_method_access=false -sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.settings/org.springframework.ide.eclipse.beans.core.prefs b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.settings/org.springframework.ide.eclipse.beans.core.prefs deleted file mode 100644 index 7f9d66e..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.settings/org.springframework.ide.eclipse.beans.core.prefs +++ /dev/null @@ -1,3 +0,0 @@ -#Fri May 15 12:07:57 CEST 2009 -eclipse.preferences.version=1 -org.springframework.ide.eclipse.beans.core.ignoreMissingNamespaceHandler=false diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.settings/org.springframework.ide.eclipse.core.prefs b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.settings/org.springframework.ide.eclipse.core.prefs deleted file mode 100644 index b3ca37e..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.settings/org.springframework.ide.eclipse.core.prefs +++ /dev/null @@ -1,39 +0,0 @@ -#Fri May 15 12:07:57 CEST 2009 -eclipse.preferences.version=1 -org.springframework.ide.eclipse.core.builders.enable.aopreferencemodelbuilder=true -org.springframework.ide.eclipse.core.builders.enable.beanmetadatabuilder=true -org.springframework.ide.eclipse.core.enable.project.preferences=false -org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.beans.core.beansvalidator=true -org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.core.springvalidator=false -org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.webflow.core.validator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanAlias-org.springframework.ide.eclipse.beans.core.beansvalidator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanClass-org.springframework.ide.eclipse.beans.core.beansvalidator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanConstructorArgument-org.springframework.ide.eclipse.beans.core.beansvalidator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanDefinition-org.springframework.ide.eclipse.beans.core.beansvalidator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanDefinitionHolder-org.springframework.ide.eclipse.beans.core.beansvalidator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanFactory-org.springframework.ide.eclipse.beans.core.beansvalidator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanInitDestroyMethod-org.springframework.ide.eclipse.beans.core.beansvalidator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanReference-org.springframework.ide.eclipse.beans.core.beansvalidator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.methodOverride-org.springframework.ide.eclipse.beans.core.beansvalidator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.parsingProblems-org.springframework.ide.eclipse.beans.core.beansvalidator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.requiredProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=false -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.core.springClasspath-org.springframework.ide.eclipse.core.springvalidator=false -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.action-org.springframework.ide.eclipse.webflow.core.validator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.actionstate-org.springframework.ide.eclipse.webflow.core.validator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.attribute-org.springframework.ide.eclipse.webflow.core.validator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.attributemapper-org.springframework.ide.eclipse.webflow.core.validator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.beanaction-org.springframework.ide.eclipse.webflow.core.validator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.evaluationaction-org.springframework.ide.eclipse.webflow.core.validator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.evaluationresult-org.springframework.ide.eclipse.webflow.core.validator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.exceptionhandler-org.springframework.ide.eclipse.webflow.core.validator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.import-org.springframework.ide.eclipse.webflow.core.validator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.inputattribute-org.springframework.ide.eclipse.webflow.core.validator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.mapping-org.springframework.ide.eclipse.webflow.core.validator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.outputattribute-org.springframework.ide.eclipse.webflow.core.validator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.set-org.springframework.ide.eclipse.webflow.core.validator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.state-org.springframework.ide.eclipse.webflow.core.validator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.subflowstate-org.springframework.ide.eclipse.webflow.core.validator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.transition-org.springframework.ide.eclipse.webflow.core.validator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.variable-org.springframework.ide.eclipse.webflow.core.validator=true -org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.webflowstate-org.springframework.ide.eclipse.webflow.core.validator=true diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.springBeans b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.springBeans deleted file mode 100644 index d2c5466..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/.springBeans +++ /dev/null @@ -1,14 +0,0 @@ - - - 1 - - - - - - - resources/envribbonaddon-spring.xml - - - - diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/acceleratoraddon/web/src/mpern/sap/commerce/ribbon/controllers/cms/EnvRibbonComponentController.java b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/acceleratoraddon/web/src/mpern/sap/commerce/ribbon/controllers/cms/EnvRibbonComponentController.java deleted file mode 100644 index 89cf56e..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/acceleratoraddon/web/src/mpern/sap/commerce/ribbon/controllers/cms/EnvRibbonComponentController.java +++ /dev/null @@ -1,24 +0,0 @@ -package mpern.sap.commerce.ribbon.controllers.cms; - -import de.hybris.platform.addonsupport.controllers.cms.AbstractCMSAddOnComponentController; -import mpern.sap.commerce.ribbon.EnvironmentMetaDataService; -import mpern.sap.commerce.ribbon.model.EnvRibbonComponentModel; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.RequestMapping; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; - -@Controller("EnvRibbonComponentController") -@RequestMapping("/view/" + EnvRibbonComponentModel._TYPECODE + "Controller") -public class EnvRibbonComponentController extends AbstractCMSAddOnComponentController { - - @Resource - private EnvironmentMetaDataService environmentMetaDataService; - - @Override - protected void fillModel(HttpServletRequest request, Model model, EnvRibbonComponentModel component) { - model.addAttribute("env", environmentMetaDataService.getMetaData()); - } -} diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/acceleratoraddon/web/webroot/WEB-INF/views/responsive/cms/envribboncomponent.jsp b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/acceleratoraddon/web/webroot/WEB-INF/views/responsive/cms/envribboncomponent.jsp deleted file mode 100644 index 549835c..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/acceleratoraddon/web/webroot/WEB-INF/views/responsive/cms/envribboncomponent.jsp +++ /dev/null @@ -1,20 +0,0 @@ -<%@ page trimDirectiveWhitespaces="true" %> -<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> - - \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/buildcallbacks.xml b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/buildcallbacks.xml deleted file mode 100644 index 55035f4..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/buildcallbacks.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/extensioninfo.xml b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/extensioninfo.xml deleted file mode 100644 index e1c0ac2..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/extensioninfo.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/external-dependencies.xml b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/external-dependencies.xml deleted file mode 100644 index f5f88fc..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/external-dependencies.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - 4.0.0 - de.hybris.platform - envribbonaddon - 6.1.0.0-SNAPSHOT - - jar - - - - \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/project.properties.template b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/project.properties.template deleted file mode 100644 index 27dc1e3..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/project.properties.template +++ /dev/null @@ -1,5 +0,0 @@ -envribbonaddon.application-context=envribbonaddon-spring.xml - -yacceleratorstorefront.additionalWebSpringConfigs.envribbonaddon=classpath:/envribbonaddon/web/spring/envribbonaddon-web-spring.xml - -envribbonaddon.css.paths.responsive=/responsive/common/css/envribbonaddon.css diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon-items.xml b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon-items.xml deleted file mode 100644 index ee9f31a..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon-items.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon-spring.xml b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon-spring.xml deleted file mode 100644 index 9660d74..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon-spring.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - B2C - - - - - - - - - - - - diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon.build.number b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon.build.number deleted file mode 100644 index d057b4b..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon.build.number +++ /dev/null @@ -1,9 +0,0 @@ -#Ant properties -#Wed Mar 06 16:29:21 CET 2019 -builddate=20190306 1627 -description=envribbonaddon -name=envribbonaddon -releasedate=20181129 1417 -vendor=hybris -version=1811.4 -version.api=1811 diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon/import/contentCatalogs/apparel-deContentCatalog/cms-content.impex b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon/import/contentCatalogs/apparel-deContentCatalog/cms-content.impex deleted file mode 100644 index 4bd7080..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon/import/contentCatalogs/apparel-deContentCatalog/cms-content.impex +++ /dev/null @@ -1,8 +0,0 @@ -$contentCatalog=apparel-deContentCatalog -$contentCV=catalogVersion(CatalogVersion.catalog(Catalog.id[default=$contentCatalog]),CatalogVersion.version[default=Staged])[default=$contentCatalog:Staged] - -INSERT_UPDATE EnvRibbonComponent;$contentCV[unique=true];uid[unique=true]; - ;;environmentRibbon - -INSERT_UPDATE ElementsForSlot;source(uid,$contentCV)[unique=true];target(uid,$contentCV)[unique=true]; - ;FooterSlot;environmentRibbon; \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-content.impex b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-content.impex deleted file mode 100644 index 69e17f0..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-content.impex +++ /dev/null @@ -1,8 +0,0 @@ -$contentCatalog=apparel-ukContentCatalog -$contentCV=catalogVersion(CatalogVersion.catalog(Catalog.id[default=$contentCatalog]),CatalogVersion.version[default=Staged])[default=$contentCatalog:Staged] - -INSERT_UPDATE EnvRibbonComponent;$contentCV[unique=true];uid[unique=true]; - ;;environmentRibbon - -INSERT_UPDATE ElementsForSlot;source(uid,$contentCV)[unique=true];target(uid,$contentCV)[unique=true]; - ;FooterSlot;environmentRibbon; \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon/import/contentCatalogs/electronicsContentCatalog/cms-content.impex b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon/import/contentCatalogs/electronicsContentCatalog/cms-content.impex deleted file mode 100644 index 2647c01..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon/import/contentCatalogs/electronicsContentCatalog/cms-content.impex +++ /dev/null @@ -1,8 +0,0 @@ -$contentCatalog=electronicsContentCatalog -$contentCV=catalogVersion(CatalogVersion.catalog(Catalog.id[default=$contentCatalog]),CatalogVersion.version[default=Staged])[default=$contentCatalog:Staged] - -INSERT_UPDATE EnvRibbonComponent;$contentCV[unique=true];uid[unique=true]; - ;;environmentRibbon - -INSERT_UPDATE ElementsForSlot;source(uid,$contentCV)[unique=true];target(uid,$contentCV)[unique=true]; - ;FooterSlot;environmentRibbon; \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon/web/spring/envribbonaddon-web-spring.xml b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon/web/spring/envribbonaddon-web-spring.xml deleted file mode 100644 index 5e748a5..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/resources/envribbonaddon/web/spring/envribbonaddon-web-spring.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/src/mpern/sap/commerce/ribbon/constants/EnvribbonaddonConstants.java b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/src/mpern/sap/commerce/ribbon/constants/EnvribbonaddonConstants.java deleted file mode 100644 index 67200c4..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/src/mpern/sap/commerce/ribbon/constants/EnvribbonaddonConstants.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * [y] hybris Platform - * - * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. - * - * This software is the confidential and proprietary information of SAP - * ("Confidential Information"). You shall not disclose such Confidential - * Information and shall use it only in accordance with the terms of the - * license agreement you entered into with SAP. - */ -package mpern.sap.commerce.ribbon.constants; - -/** - * Global class for all Envribbonaddon constants. You can add global constants for your extension into this class. - */ -@SuppressWarnings("deprecation") -public final class EnvribbonaddonConstants extends GeneratedEnvribbonaddonConstants -{ - public static final String EXTENSIONNAME = "envribbonaddon"; - - private EnvribbonaddonConstants() - { - //empty to avoid instantiating this constant class - } - - // implement here constants used by this extension -} diff --git a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/src/mpern/sap/commerce/ribbon/jalo/EnvRibbonComponent.java b/core-customize/hybris/bin/custom/envribbon/envribbonaddon/src/mpern/sap/commerce/ribbon/jalo/EnvRibbonComponent.java deleted file mode 100644 index d8d33bb..0000000 --- a/core-customize/hybris/bin/custom/envribbon/envribbonaddon/src/mpern/sap/commerce/ribbon/jalo/EnvRibbonComponent.java +++ /dev/null @@ -1,25 +0,0 @@ -package mpern.sap.commerce.ribbon.jalo; - -import de.hybris.platform.jalo.Item; -import de.hybris.platform.jalo.JaloBusinessException; -import de.hybris.platform.jalo.SessionContext; -import de.hybris.platform.jalo.type.ComposedType; -import org.apache.log4j.Logger; - -public class EnvRibbonComponent extends GeneratedEnvRibbonComponent -{ - @SuppressWarnings("unused") - private static final Logger LOG = Logger.getLogger( EnvRibbonComponent.class.getName() ); - - @Override - protected Item createItem(final SessionContext ctx, final ComposedType type, final ItemAttributeMap allAttributes) throws JaloBusinessException - { - // business code placed here will be executed before the item is created - // then create the item - final Item item = super.createItem( ctx, type, allAttributes ); - // business code placed here will be executed after the item was created - // and return the item - return item; - } - -} From 3a67522e29c6807d77940b1766eafb0a46dcca9f Mon Sep 17 00:00:00 2001 From: Markus Perndorfer Date: Thu, 10 Dec 2020 13:34:10 +0100 Subject: [PATCH 14/24] Squashed 'core-customize/hybris/bin/custom/extras/envribbon/' content from commit d1ed838 git-subtree-dir: core-customize/hybris/bin/custom/extras/envribbon git-subtree-split: d1ed83876397ebdc7426a6341fb5e59d3d9fcf79 --- LICENSE | 201 +++++++++ README.md | 37 ++ envribbon/.classpath | 16 + envribbon/.gitignore | 2 + envribbon/.project | 23 + .../widgets/envribbon/definition.xml | 24 ++ .../resources/widgets/envribbon/envribbon.zul | 29 ++ .../sap/commerce/ribbon/RibbonController.java | 23 + envribbon/buildcallbacks.xml | 27 ++ envribbon/extensioninfo.xml | 14 + .../hac/resources/static/js/envribbon.js | 23 + .../hac/controller/RibbonDataController.java | 21 + envribbon/project.properties | 1 + .../envribbon-backoffice-widgets.xml | 8 + envribbon/resources/envribbon-beans.xml | 7 + envribbon/resources/envribbon-spring.xml | 11 + envribbon/resources/envribbon.build.number | 9 + envribbon/resources/envribbon/envribbon.css | 32 ++ .../ribbon/EnvironmentMetaDataService.java | 5 + .../ribbon/constants/EnvribbonConstants.java | 26 ++ .../DefaultEnvironmentMetaDataService.java | 40 ++ envribbonaddon/.classpath | 16 + .../HybrisCodeGeneration.launch | 24 ++ envribbonaddon/.gitignore | 1 + envribbonaddon/.project | 34 ++ .../org.eclipse.core.resources.prefs | 2 + .../.settings/org.eclipse.jdt.core.prefs | 394 ++++++++++++++++++ .../.settings/org.eclipse.jdt.ui.prefs | 75 ++++ ...ringframework.ide.eclipse.beans.core.prefs | 3 + ...org.springframework.ide.eclipse.core.prefs | 39 ++ envribbonaddon/.springBeans | 14 + .../cms/EnvRibbonComponentController.java | 24 ++ .../responsive/cms/envribboncomponent.jsp | 20 + envribbonaddon/buildcallbacks.xml | 12 + envribbonaddon/extensioninfo.xml | 12 + envribbonaddon/external-dependencies.xml | 22 + envribbonaddon/project.properties.template | 5 + .../resources/envribbonaddon-items.xml | 13 + .../resources/envribbonaddon-spring.xml | 43 ++ .../resources/envribbonaddon.build.number | 9 + .../cms-content.impex | 8 + .../cms-content.impex | 8 + .../cms-content.impex | 8 + .../web/spring/envribbonaddon-web-spring.xml | 34 ++ .../constants/EnvribbonaddonConstants.java | 27 ++ .../ribbon/jalo/EnvRibbonComponent.java | 25 ++ 46 files changed, 1451 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 envribbon/.classpath create mode 100644 envribbon/.gitignore create mode 100644 envribbon/.project create mode 100644 envribbon/backoffice/resources/widgets/envribbon/definition.xml create mode 100644 envribbon/backoffice/resources/widgets/envribbon/envribbon.zul create mode 100644 envribbon/backoffice/src/mpern/sap/commerce/ribbon/RibbonController.java create mode 100644 envribbon/buildcallbacks.xml create mode 100644 envribbon/extensioninfo.xml create mode 100644 envribbon/hac/resources/static/js/envribbon.js create mode 100644 envribbon/hac/src/de/hybris/platform/hac/controller/RibbonDataController.java create mode 100644 envribbon/project.properties create mode 100644 envribbon/resources/envribbon-backoffice-widgets.xml create mode 100644 envribbon/resources/envribbon-beans.xml create mode 100644 envribbon/resources/envribbon-spring.xml create mode 100644 envribbon/resources/envribbon.build.number create mode 100644 envribbon/resources/envribbon/envribbon.css create mode 100644 envribbon/src/mpern/sap/commerce/ribbon/EnvironmentMetaDataService.java create mode 100644 envribbon/src/mpern/sap/commerce/ribbon/constants/EnvribbonConstants.java create mode 100644 envribbon/src/mpern/sap/commerce/ribbon/impl/DefaultEnvironmentMetaDataService.java create mode 100644 envribbonaddon/.classpath create mode 100644 envribbonaddon/.externalToolBuilders/HybrisCodeGeneration.launch create mode 100644 envribbonaddon/.gitignore create mode 100644 envribbonaddon/.project create mode 100644 envribbonaddon/.settings/org.eclipse.core.resources.prefs create mode 100644 envribbonaddon/.settings/org.eclipse.jdt.core.prefs create mode 100644 envribbonaddon/.settings/org.eclipse.jdt.ui.prefs create mode 100644 envribbonaddon/.settings/org.springframework.ide.eclipse.beans.core.prefs create mode 100644 envribbonaddon/.settings/org.springframework.ide.eclipse.core.prefs create mode 100644 envribbonaddon/.springBeans create mode 100644 envribbonaddon/acceleratoraddon/web/src/mpern/sap/commerce/ribbon/controllers/cms/EnvRibbonComponentController.java create mode 100644 envribbonaddon/acceleratoraddon/web/webroot/WEB-INF/views/responsive/cms/envribboncomponent.jsp create mode 100644 envribbonaddon/buildcallbacks.xml create mode 100644 envribbonaddon/extensioninfo.xml create mode 100644 envribbonaddon/external-dependencies.xml create mode 100644 envribbonaddon/project.properties.template create mode 100644 envribbonaddon/resources/envribbonaddon-items.xml create mode 100644 envribbonaddon/resources/envribbonaddon-spring.xml create mode 100644 envribbonaddon/resources/envribbonaddon.build.number create mode 100644 envribbonaddon/resources/envribbonaddon/import/contentCatalogs/apparel-deContentCatalog/cms-content.impex create mode 100644 envribbonaddon/resources/envribbonaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-content.impex create mode 100644 envribbonaddon/resources/envribbonaddon/import/contentCatalogs/electronicsContentCatalog/cms-content.impex create mode 100644 envribbonaddon/resources/envribbonaddon/web/spring/envribbonaddon-web-spring.xml create mode 100644 envribbonaddon/src/mpern/sap/commerce/ribbon/constants/EnvribbonaddonConstants.java create mode 100644 envribbonaddon/src/mpern/sap/commerce/ribbon/jalo/EnvRibbonComponent.java diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) 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. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..d02adbf --- /dev/null +++ b/README.md @@ -0,0 +1,37 @@ +> **Archived on 2020-02-16**\ +> I recently switched jobs away from SAP Commerce development + +# Environment Ribbons for SAP Commerce +[![ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/W7W7VS24) + +![Ribbons](../assets/ribbons.gif?raw=true) + +## Install + +1. Download this repo as zip +1. Unpack the zip to your `hybris/bin/custom` folder +1. Add the `envribbon` extension to your `localextensions.xml` +1. Build + +If you want to add a ribbon component to your storefront: + +1. Add `envribbonaddon` to your `localextensions.xml` +1. `ant addoninstall -Daddonnames="envribbonaddon" -DaddonStorefront.yacceleratorstorefront=""` +1. Build +1. Update system +1. Add a `EnvRibbonComponent` to your `FooterSlot` \ + (check the demo data included in the addon for details) + +## Notes + +- You can "click through" the ribbon (CSS `pointer-events: none`) +- There is a *single CSS* file that controls the style of the ribbon *everywhere*: \ + [`envribbon/resources/envribbon/envribbon.css`](envribbon/resources/envribbon/envribbon.css) \ + (Build callbacks take care of copying the stylesheet where it is needed) +- If deployed in a CCv2 environment, the extension will **auto-detect** the environment (code and type) +- For on-prem environments (or if you want to override the detected values), you can use: + ``` + ribbon.environment.code= + ribbon.environment.type= + # development, staging, production + ``` diff --git a/envribbon/.classpath b/envribbon/.classpath new file mode 100644 index 0000000..0198d13 --- /dev/null +++ b/envribbon/.classpath @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/envribbon/.gitignore b/envribbon/.gitignore new file mode 100644 index 0000000..36a7830 --- /dev/null +++ b/envribbon/.gitignore @@ -0,0 +1,2 @@ +hac/resources/static/css/envribbon.css +resources/cockpitng/cng/css/envribbon_common.css \ No newline at end of file diff --git a/envribbon/.project b/envribbon/.project new file mode 100644 index 0000000..8134e5f --- /dev/null +++ b/envribbon/.project @@ -0,0 +1,23 @@ + + + envribbon + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.springframework.ide.eclipse.core.springbuilder + + + + + + org.springframework.ide.eclipse.core.springnature + org.eclipse.jdt.core.javanature + + \ No newline at end of file diff --git a/envribbon/backoffice/resources/widgets/envribbon/definition.xml b/envribbon/backoffice/resources/widgets/envribbon/definition.xml new file mode 100644 index 0000000..c7e6798 --- /dev/null +++ b/envribbon/backoffice/resources/widgets/envribbon/definition.xml @@ -0,0 +1,24 @@ + + + + Environment Ribbon + mpern + 1.0 + + ribbon + environment + + + + diff --git a/envribbon/backoffice/resources/widgets/envribbon/envribbon.zul b/envribbon/backoffice/resources/widgets/envribbon/envribbon.zul new file mode 100644 index 0000000..ff9fbce --- /dev/null +++ b/envribbon/backoffice/resources/widgets/envribbon/envribbon.zul @@ -0,0 +1,29 @@ + + + + +
+ + zk.afterMount(function () { + var meta = document.querySelector("[data-metaholder]"); + + if (meta.dataset.environment && meta.dataset.type) { + var container = document.createElement("div"); + + container.id = 'mpern-env-ribbon'; + container.classList.add("mpern-env-ribbon"); + container.setAttribute("data-environment", meta.dataset.environment); + container.setAttribute("data-type", meta.dataset.type); + + document.body.insertBefore(container, document.body.firstChild); + } + }); + +
diff --git a/envribbon/backoffice/src/mpern/sap/commerce/ribbon/RibbonController.java b/envribbon/backoffice/src/mpern/sap/commerce/ribbon/RibbonController.java new file mode 100644 index 0000000..20c6f13 --- /dev/null +++ b/envribbon/backoffice/src/mpern/sap/commerce/ribbon/RibbonController.java @@ -0,0 +1,23 @@ +package mpern.sap.commerce.ribbon; + +import com.hybris.cockpitng.util.DefaultWidgetController; +import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.select.annotation.Wire; +import org.zkoss.zk.ui.select.annotation.WireVariable; +import org.zkoss.zul.Div; + +public class RibbonController extends DefaultWidgetController { + @Wire + Div envRibbon; + + @WireVariable + EnvironmentMetaDataService environmentMetaDataService; + + @Override + public void initialize(Component comp) { + super.initialize(comp); + EnvironmentMetaData environmentMetaData = environmentMetaDataService.getMetaData(); + envRibbon.setClientDataAttribute("environment", environmentMetaData.getCode()); + envRibbon.setClientDataAttribute("type", environmentMetaData.getType()); + } +} diff --git a/envribbon/buildcallbacks.xml b/envribbon/buildcallbacks.xml new file mode 100644 index 0000000..3047026 --- /dev/null +++ b/envribbon/buildcallbacks.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/envribbon/extensioninfo.xml b/envribbon/extensioninfo.xml new file mode 100644 index 0000000..4152338 --- /dev/null +++ b/envribbon/extensioninfo.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/envribbon/hac/resources/static/js/envribbon.js b/envribbon/hac/resources/static/js/envribbon.js new file mode 100644 index 0000000..e890144 --- /dev/null +++ b/envribbon/hac/resources/static/js/envribbon.js @@ -0,0 +1,23 @@ +"use strict"; +(function() { + var ribbonData = document.getElementById("mainContainer").dataset.contextpath + "/ribbon/data", + xhr = new XMLHttpRequest(); + + xhr.onload = function () { + var container = document.createElement("div"), env; + if (xhr.status >= 200 && xhr.status < 300) { + env = JSON.parse(xhr.responseText); + if (env.code && env.type) { + container.id = 'mpern-env-ribbon'; + container.classList.add('mpern-env-ribbon'); + container.dataset.environment = env.code; + container.dataset.type = env.type; + + document.body.insertBefore(container, document.body.firstChild); + } + } + }; + xhr.open('GET', ribbonData); + xhr.setRequestHeader("Accept", "application/json"); + xhr.send(); +})(); \ No newline at end of file diff --git a/envribbon/hac/src/de/hybris/platform/hac/controller/RibbonDataController.java b/envribbon/hac/src/de/hybris/platform/hac/controller/RibbonDataController.java new file mode 100644 index 0000000..c348de3 --- /dev/null +++ b/envribbon/hac/src/de/hybris/platform/hac/controller/RibbonDataController.java @@ -0,0 +1,21 @@ +package de.hybris.platform.hac.controller; + +import mpern.sap.commerce.ribbon.EnvironmentMetaData; +import mpern.sap.commerce.ribbon.EnvironmentMetaDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +@RestController +public class RibbonDataController { + + @Resource + private EnvironmentMetaDataService environmentMetaDataService; + + @RequestMapping(value = "/ribbon/data", method = RequestMethod.GET) + public EnvironmentMetaData getRibbonData() { + return environmentMetaDataService.getMetaData(); + } +} diff --git a/envribbon/project.properties b/envribbon/project.properties new file mode 100644 index 0000000..8b0eedb --- /dev/null +++ b/envribbon/project.properties @@ -0,0 +1 @@ +envribbon.application-context=envribbon-spring.xml diff --git a/envribbon/resources/envribbon-backoffice-widgets.xml b/envribbon/resources/envribbon-backoffice-widgets.xml new file mode 100644 index 0000000..d50c9fa --- /dev/null +++ b/envribbon/resources/envribbon-backoffice-widgets.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/envribbon/resources/envribbon-beans.xml b/envribbon/resources/envribbon-beans.xml new file mode 100644 index 0000000..4b786e8 --- /dev/null +++ b/envribbon/resources/envribbon-beans.xml @@ -0,0 +1,7 @@ + + + + diff --git a/envribbon/resources/envribbon-spring.xml b/envribbon/resources/envribbon-spring.xml new file mode 100644 index 0000000..f68ce40 --- /dev/null +++ b/envribbon/resources/envribbon-spring.xml @@ -0,0 +1,11 @@ + + + + + + + + \ No newline at end of file diff --git a/envribbon/resources/envribbon.build.number b/envribbon/resources/envribbon.build.number new file mode 100644 index 0000000..3fb34f8 --- /dev/null +++ b/envribbon/resources/envribbon.build.number @@ -0,0 +1,9 @@ +#Ant properties +#Wed Mar 06 16:27:46 CET 2019 +builddate=20190306 1627 +description=envribbon +name=envribbon +releasedate=20181129 1417 +vendor=hybris +version=1811.4 +version.api=1811 diff --git a/envribbon/resources/envribbon/envribbon.css b/envribbon/resources/envribbon/envribbon.css new file mode 100644 index 0000000..bb07776 --- /dev/null +++ b/envribbon/resources/envribbon/envribbon.css @@ -0,0 +1,32 @@ +.mpern-env-ribbon { + z-index: 10000; + + font-family: monospace; + font-size: 24px; + line-height: 1em; + text-transform: uppercase; + white-space: nowrap; + + overflow: hidden; + position: absolute; + left: -6.5em; + top: 2em; + width: 20em; + transform: rotate(-45deg); + + opacity: .7; + color: #e8e8e8; + box-shadow: 0 0 1em 0.5em rgba(0,0,0,0.75); + + pointer-events: none; +} +.mpern-env-ribbon::before { + content: attr(data-environment); + display: block; + padding: 1em 2em; + font-weight: 800; + text-align: center; +} +.mpern-env-ribbon[data-type=development] { background-color: #a1b56c } +.mpern-env-ribbon[data-type=staging] { background-color: #dc9656 } +.mpern-env-ribbon[data-type=production] { background-color: #ab4642 } \ No newline at end of file diff --git a/envribbon/src/mpern/sap/commerce/ribbon/EnvironmentMetaDataService.java b/envribbon/src/mpern/sap/commerce/ribbon/EnvironmentMetaDataService.java new file mode 100644 index 0000000..db7969d --- /dev/null +++ b/envribbon/src/mpern/sap/commerce/ribbon/EnvironmentMetaDataService.java @@ -0,0 +1,5 @@ +package mpern.sap.commerce.ribbon; + +public interface EnvironmentMetaDataService { + EnvironmentMetaData getMetaData(); +} diff --git a/envribbon/src/mpern/sap/commerce/ribbon/constants/EnvribbonConstants.java b/envribbon/src/mpern/sap/commerce/ribbon/constants/EnvribbonConstants.java new file mode 100644 index 0000000..0b5bb83 --- /dev/null +++ b/envribbon/src/mpern/sap/commerce/ribbon/constants/EnvribbonConstants.java @@ -0,0 +1,26 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package mpern.sap.commerce.ribbon.constants; + +/** + * Global class for all Envribbon constants. You can add global constants for your extension into this class. + */ +public final class EnvribbonConstants extends GeneratedEnvribbonConstants +{ + public static final String EXTENSIONNAME = "envribbon"; + + private EnvribbonConstants() + { + //empty to avoid instantiating this constant class + } + + // implement here constants used by this extension +} diff --git a/envribbon/src/mpern/sap/commerce/ribbon/impl/DefaultEnvironmentMetaDataService.java b/envribbon/src/mpern/sap/commerce/ribbon/impl/DefaultEnvironmentMetaDataService.java new file mode 100644 index 0000000..de75fc4 --- /dev/null +++ b/envribbon/src/mpern/sap/commerce/ribbon/impl/DefaultEnvironmentMetaDataService.java @@ -0,0 +1,40 @@ +package mpern.sap.commerce.ribbon.impl; + +import de.hybris.platform.servicelayer.config.ConfigurationService; +import mpern.sap.commerce.ribbon.EnvironmentMetaDataService; +import mpern.sap.commerce.ribbon.EnvironmentMetaData; + +public class DefaultEnvironmentMetaDataService implements EnvironmentMetaDataService { + private final ConfigurationService configurationService; + + public DefaultEnvironmentMetaDataService(ConfigurationService configurationService) { + this.configurationService = configurationService; + } + + @Override + public EnvironmentMetaData getMetaData() { + EnvironmentMetaData data = new EnvironmentMetaData(); + + data.setCode(readEnvironmentFromConfig()); + data.setType(readTypeFromConfig()); + + return data; + } + + private String readEnvironmentFromConfig() { + String env = configurationService.getConfiguration().getString("ribbon.environment.code", ""); + if (env.isEmpty()) { + env = configurationService.getConfiguration().getString("modelt.project.code", ""); + env += ( env.isEmpty() ? "" : "-" ) + configurationService.getConfiguration().getString("modelt.environment.code", ""); + } + return env; + } + + private String readTypeFromConfig() { + String type = configurationService.getConfiguration().getString("ribbon.environment.type", ""); + if (type.isEmpty()) { + type = configurationService.getConfiguration().getString("modelt.environment.type", ""); + } + return type.toLowerCase(); + } +} diff --git a/envribbonaddon/.classpath b/envribbonaddon/.classpath new file mode 100644 index 0000000..74ebf0c --- /dev/null +++ b/envribbonaddon/.classpath @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/envribbonaddon/.externalToolBuilders/HybrisCodeGeneration.launch b/envribbonaddon/.externalToolBuilders/HybrisCodeGeneration.launch new file mode 100644 index 0000000..1a81ee9 --- /dev/null +++ b/envribbonaddon/.externalToolBuilders/HybrisCodeGeneration.launch @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/envribbonaddon/.gitignore b/envribbonaddon/.gitignore new file mode 100644 index 0000000..8d0794a --- /dev/null +++ b/envribbonaddon/.gitignore @@ -0,0 +1 @@ +acceleratoraddon/web/webroot/_ui/responsive/common/css/envribbonaddon.css \ No newline at end of file diff --git a/envribbonaddon/.project b/envribbonaddon/.project new file mode 100644 index 0000000..9edc4a7 --- /dev/null +++ b/envribbonaddon/.project @@ -0,0 +1,34 @@ + + + envribbonaddon + + + + + + org.eclipse.ui.externaltools.ExternalToolBuilder + auto,full, + + + LaunchConfigHandle + <project>/.externalToolBuilders/HybrisCodeGeneration.launch + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.springframework.ide.eclipse.core.springbuilder + + + + + + + org.springframework.ide.eclipse.core.springnature + org.eclipse.jdt.core.javanature + + diff --git a/envribbonaddon/.settings/org.eclipse.core.resources.prefs b/envribbonaddon/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/envribbonaddon/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/envribbonaddon/.settings/org.eclipse.jdt.core.prefs b/envribbonaddon/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..2da223c --- /dev/null +++ b/envribbonaddon/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,394 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.codeComplete.argumentPrefixes= +org.eclipse.jdt.core.codeComplete.argumentSuffixes= +org.eclipse.jdt.core.codeComplete.fieldPrefixes= +org.eclipse.jdt.core.codeComplete.fieldSuffixes= +org.eclipse.jdt.core.codeComplete.localPrefixes= +org.eclipse.jdt.core.codeComplete.localSuffixes= +org.eclipse.jdt.core.codeComplete.staticFieldPrefixes= +org.eclipse.jdt.core.codeComplete.staticFieldSuffixes= +org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnull.secondary= +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary= +org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullable.secondary= +org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.doc.comment.support=enabled +org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=ignore +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.autoboxing=ignore +org.eclipse.jdt.core.compiler.problem.comparingIdentical=ignore +org.eclipse.jdt.core.compiler.problem.deadCode=ignore +org.eclipse.jdt.core.compiler.problem.deprecation=ignore +org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled +org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled +org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore +org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore +org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore +org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled +org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore +org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore +org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=ignore +org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore +org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=ignore +org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled +org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=ignore +org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore +org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore +org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore +org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private +org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore +org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=ignore +org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore +org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled +org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore +org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore +org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled +org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public +org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag +org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled +org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore +org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore +org.eclipse.jdt.core.compiler.problem.noEffectAssignment=ignore +org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=ignore +org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore +org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=ignore +org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=ignore +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=ignore +org.eclipse.jdt.core.compiler.problem.nullReference=ignore +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=ignore +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=ignore +org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore +org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=ignore +org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore +org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore +org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore +org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore +org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore +org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled +org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=ignore +org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled +org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled +org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore +org.eclipse.jdt.core.compiler.problem.typeParameterHiding=ignore +org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled +org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore +org.eclipse.jdt.core.compiler.problem.unclosedCloseable=ignore +org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore +org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=ignore +org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=ignore +org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled +org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=ignore +org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore +org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore +org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore +org.eclipse.jdt.core.compiler.problem.unsafeTypeOperation=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled +org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedImport=ignore +org.eclipse.jdt.core.compiler.problem.unusedLabel=ignore +org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore +org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled +org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore +org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedWarningToken=ignore +org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=ignore +org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled +org.eclipse.jdt.core.compiler.taskPriorities= +org.eclipse.jdt.core.compiler.taskTags= +org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_assignment=0 +org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.jdt.core.formatter.blank_lines_after_imports=2 +org.eclipse.jdt.core.formatter.blank_lines_after_package=1 +org.eclipse.jdt.core.formatter.blank_lines_before_field=0 +org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 +org.eclipse.jdt.core.formatter.blank_lines_before_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 +org.eclipse.jdt.core.formatter.blank_lines_before_package=0 +org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 +org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=next_line +org.eclipse.jdt.core.formatter.brace_position_for_block=next_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line +org.eclipse.jdt.core.formatter.comment.clear_blank_lines=true +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false +org.eclipse.jdt.core.formatter.comment.format_block_comments=true +org.eclipse.jdt.core.formatter.comment.format_comments=true +org.eclipse.jdt.core.formatter.comment.format_header=false +org.eclipse.jdt.core.formatter.comment.format_html=true +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true +org.eclipse.jdt.core.formatter.comment.format_line_comments=false +org.eclipse.jdt.core.formatter.comment.format_source_code=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true +org.eclipse.jdt.core.formatter.comment.indent_root_tags=true +org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert +org.eclipse.jdt.core.formatter.comment.line_length=120 +org.eclipse.jdt.core.formatter.compact_else_if=true +org.eclipse.jdt.core.formatter.continuation_indentation=2 +org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true +org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_empty_lines=false +org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true +org.eclipse.jdt.core.formatter.indentation.size=3 +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert +org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert +org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert +org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=true +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.jdt.core.formatter.lineSplit=130 +org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false +org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=50 +org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.jdt.core.formatter.tabulation.char=mixed +org.eclipse.jdt.core.formatter.tabulation.size=3 +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false +org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true diff --git a/envribbonaddon/.settings/org.eclipse.jdt.ui.prefs b/envribbonaddon/.settings/org.eclipse.jdt.ui.prefs new file mode 100644 index 0000000..9bcee55 --- /dev/null +++ b/envribbonaddon/.settings/org.eclipse.jdt.ui.prefs @@ -0,0 +1,75 @@ +#Tue Feb 03 16:09:22 CET 2009 +comment_clear_blank_lines=true +comment_format_comments=true +comment_format_header=false +comment_format_html=true +comment_format_source_code=true +comment_indent_parameter_description=true +comment_indent_root_tags=true +comment_line_length=160 +comment_new_line_for_parameter=false +comment_separate_root_tags=true +eclipse.preferences.version=1 +editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true +formatter_settings_version=11 +org.eclipse.jdt.ui.exception.name=e +org.eclipse.jdt.ui.gettersetter.use.is=true +org.eclipse.jdt.ui.ignorelowercasenames=true +org.eclipse.jdt.ui.importorder=de.hybris;java;javax;org;com;de; +org.eclipse.jdt.ui.javadoc=true +org.eclipse.jdt.ui.keywordthis=false +org.eclipse.jdt.ui.ondemandthreshold=50 +org.eclipse.jdt.ui.overrideannotation=true +org.eclipse.jdt.ui.staticondemandthreshold=50 +org.eclipse.jdt.ui.text.custom_code_templates= +sp_cleanup.add_default_serial_version_id=true +sp_cleanup.add_generated_serial_version_id=false +sp_cleanup.add_missing_annotations=true +sp_cleanup.add_missing_deprecated_annotations=true +sp_cleanup.add_missing_methods=false +sp_cleanup.add_missing_nls_tags=false +sp_cleanup.add_missing_override_annotations=true +sp_cleanup.add_serial_version_id=false +sp_cleanup.always_use_blocks=true +sp_cleanup.always_use_parentheses_in_expressions=false +sp_cleanup.always_use_this_for_non_static_field_access=false +sp_cleanup.always_use_this_for_non_static_method_access=false +sp_cleanup.convert_to_enhanced_for_loop=false +sp_cleanup.correct_indentation=false +sp_cleanup.format_source_code=true +sp_cleanup.format_source_code_changes_only=false +sp_cleanup.make_local_variable_final=true +sp_cleanup.make_parameters_final=true +sp_cleanup.make_private_fields_final=true +sp_cleanup.make_type_abstract_if_missing_method=false +sp_cleanup.make_variable_declarations_final=true +sp_cleanup.never_use_blocks=false +sp_cleanup.never_use_parentheses_in_expressions=true +sp_cleanup.on_save_use_additional_actions=true +sp_cleanup.organize_imports=true +sp_cleanup.qualify_static_field_accesses_with_declaring_class=false +sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true +sp_cleanup.qualify_static_member_accesses_with_declaring_class=false +sp_cleanup.qualify_static_method_accesses_with_declaring_class=false +sp_cleanup.remove_private_constructors=true +sp_cleanup.remove_trailing_whitespaces=true +sp_cleanup.remove_trailing_whitespaces_all=true +sp_cleanup.remove_trailing_whitespaces_ignore_empty=false +sp_cleanup.remove_unnecessary_casts=true +sp_cleanup.remove_unnecessary_nls_tags=false +sp_cleanup.remove_unused_imports=true +sp_cleanup.remove_unused_local_variables=false +sp_cleanup.remove_unused_private_fields=true +sp_cleanup.remove_unused_private_members=false +sp_cleanup.remove_unused_private_methods=true +sp_cleanup.remove_unused_private_types=true +sp_cleanup.sort_members=false +sp_cleanup.sort_members_all=false +sp_cleanup.use_blocks=true +sp_cleanup.use_blocks_only_for_return_and_throw=false +sp_cleanup.use_parentheses_in_expressions=false +sp_cleanup.use_this_for_non_static_field_access=false +sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true +sp_cleanup.use_this_for_non_static_method_access=false +sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true diff --git a/envribbonaddon/.settings/org.springframework.ide.eclipse.beans.core.prefs b/envribbonaddon/.settings/org.springframework.ide.eclipse.beans.core.prefs new file mode 100644 index 0000000..7f9d66e --- /dev/null +++ b/envribbonaddon/.settings/org.springframework.ide.eclipse.beans.core.prefs @@ -0,0 +1,3 @@ +#Fri May 15 12:07:57 CEST 2009 +eclipse.preferences.version=1 +org.springframework.ide.eclipse.beans.core.ignoreMissingNamespaceHandler=false diff --git a/envribbonaddon/.settings/org.springframework.ide.eclipse.core.prefs b/envribbonaddon/.settings/org.springframework.ide.eclipse.core.prefs new file mode 100644 index 0000000..b3ca37e --- /dev/null +++ b/envribbonaddon/.settings/org.springframework.ide.eclipse.core.prefs @@ -0,0 +1,39 @@ +#Fri May 15 12:07:57 CEST 2009 +eclipse.preferences.version=1 +org.springframework.ide.eclipse.core.builders.enable.aopreferencemodelbuilder=true +org.springframework.ide.eclipse.core.builders.enable.beanmetadatabuilder=true +org.springframework.ide.eclipse.core.enable.project.preferences=false +org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.core.springvalidator=false +org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanAlias-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanClass-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanConstructorArgument-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanDefinition-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanDefinitionHolder-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanFactory-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanInitDestroyMethod-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanReference-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.methodOverride-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.parsingProblems-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.requiredProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=false +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.core.springClasspath-org.springframework.ide.eclipse.core.springvalidator=false +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.action-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.actionstate-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.attribute-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.attributemapper-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.beanaction-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.evaluationaction-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.evaluationresult-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.exceptionhandler-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.import-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.inputattribute-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.mapping-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.outputattribute-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.set-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.state-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.subflowstate-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.transition-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.variable-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.webflowstate-org.springframework.ide.eclipse.webflow.core.validator=true diff --git a/envribbonaddon/.springBeans b/envribbonaddon/.springBeans new file mode 100644 index 0000000..d2c5466 --- /dev/null +++ b/envribbonaddon/.springBeans @@ -0,0 +1,14 @@ + + + 1 + + + + + + + resources/envribbonaddon-spring.xml + + + + diff --git a/envribbonaddon/acceleratoraddon/web/src/mpern/sap/commerce/ribbon/controllers/cms/EnvRibbonComponentController.java b/envribbonaddon/acceleratoraddon/web/src/mpern/sap/commerce/ribbon/controllers/cms/EnvRibbonComponentController.java new file mode 100644 index 0000000..89cf56e --- /dev/null +++ b/envribbonaddon/acceleratoraddon/web/src/mpern/sap/commerce/ribbon/controllers/cms/EnvRibbonComponentController.java @@ -0,0 +1,24 @@ +package mpern.sap.commerce.ribbon.controllers.cms; + +import de.hybris.platform.addonsupport.controllers.cms.AbstractCMSAddOnComponentController; +import mpern.sap.commerce.ribbon.EnvironmentMetaDataService; +import mpern.sap.commerce.ribbon.model.EnvRibbonComponentModel; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +@Controller("EnvRibbonComponentController") +@RequestMapping("/view/" + EnvRibbonComponentModel._TYPECODE + "Controller") +public class EnvRibbonComponentController extends AbstractCMSAddOnComponentController { + + @Resource + private EnvironmentMetaDataService environmentMetaDataService; + + @Override + protected void fillModel(HttpServletRequest request, Model model, EnvRibbonComponentModel component) { + model.addAttribute("env", environmentMetaDataService.getMetaData()); + } +} diff --git a/envribbonaddon/acceleratoraddon/web/webroot/WEB-INF/views/responsive/cms/envribboncomponent.jsp b/envribbonaddon/acceleratoraddon/web/webroot/WEB-INF/views/responsive/cms/envribboncomponent.jsp new file mode 100644 index 0000000..549835c --- /dev/null +++ b/envribbonaddon/acceleratoraddon/web/webroot/WEB-INF/views/responsive/cms/envribboncomponent.jsp @@ -0,0 +1,20 @@ +<%@ page trimDirectiveWhitespaces="true" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + \ No newline at end of file diff --git a/envribbonaddon/buildcallbacks.xml b/envribbonaddon/buildcallbacks.xml new file mode 100644 index 0000000..55035f4 --- /dev/null +++ b/envribbonaddon/buildcallbacks.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/envribbonaddon/extensioninfo.xml b/envribbonaddon/extensioninfo.xml new file mode 100644 index 0000000..e1c0ac2 --- /dev/null +++ b/envribbonaddon/extensioninfo.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/envribbonaddon/external-dependencies.xml b/envribbonaddon/external-dependencies.xml new file mode 100644 index 0000000..f5f88fc --- /dev/null +++ b/envribbonaddon/external-dependencies.xml @@ -0,0 +1,22 @@ + + + 4.0.0 + de.hybris.platform + envribbonaddon + 6.1.0.0-SNAPSHOT + + jar + + + + \ No newline at end of file diff --git a/envribbonaddon/project.properties.template b/envribbonaddon/project.properties.template new file mode 100644 index 0000000..27dc1e3 --- /dev/null +++ b/envribbonaddon/project.properties.template @@ -0,0 +1,5 @@ +envribbonaddon.application-context=envribbonaddon-spring.xml + +yacceleratorstorefront.additionalWebSpringConfigs.envribbonaddon=classpath:/envribbonaddon/web/spring/envribbonaddon-web-spring.xml + +envribbonaddon.css.paths.responsive=/responsive/common/css/envribbonaddon.css diff --git a/envribbonaddon/resources/envribbonaddon-items.xml b/envribbonaddon/resources/envribbonaddon-items.xml new file mode 100644 index 0000000..ee9f31a --- /dev/null +++ b/envribbonaddon/resources/envribbonaddon-items.xml @@ -0,0 +1,13 @@ + + + + + + + + + + diff --git a/envribbonaddon/resources/envribbonaddon-spring.xml b/envribbonaddon/resources/envribbonaddon-spring.xml new file mode 100644 index 0000000..9660d74 --- /dev/null +++ b/envribbonaddon/resources/envribbonaddon-spring.xml @@ -0,0 +1,43 @@ + + + + + + + + + + B2C + + + + + + + + + + + + diff --git a/envribbonaddon/resources/envribbonaddon.build.number b/envribbonaddon/resources/envribbonaddon.build.number new file mode 100644 index 0000000..d057b4b --- /dev/null +++ b/envribbonaddon/resources/envribbonaddon.build.number @@ -0,0 +1,9 @@ +#Ant properties +#Wed Mar 06 16:29:21 CET 2019 +builddate=20190306 1627 +description=envribbonaddon +name=envribbonaddon +releasedate=20181129 1417 +vendor=hybris +version=1811.4 +version.api=1811 diff --git a/envribbonaddon/resources/envribbonaddon/import/contentCatalogs/apparel-deContentCatalog/cms-content.impex b/envribbonaddon/resources/envribbonaddon/import/contentCatalogs/apparel-deContentCatalog/cms-content.impex new file mode 100644 index 0000000..4bd7080 --- /dev/null +++ b/envribbonaddon/resources/envribbonaddon/import/contentCatalogs/apparel-deContentCatalog/cms-content.impex @@ -0,0 +1,8 @@ +$contentCatalog=apparel-deContentCatalog +$contentCV=catalogVersion(CatalogVersion.catalog(Catalog.id[default=$contentCatalog]),CatalogVersion.version[default=Staged])[default=$contentCatalog:Staged] + +INSERT_UPDATE EnvRibbonComponent;$contentCV[unique=true];uid[unique=true]; + ;;environmentRibbon + +INSERT_UPDATE ElementsForSlot;source(uid,$contentCV)[unique=true];target(uid,$contentCV)[unique=true]; + ;FooterSlot;environmentRibbon; \ No newline at end of file diff --git a/envribbonaddon/resources/envribbonaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-content.impex b/envribbonaddon/resources/envribbonaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-content.impex new file mode 100644 index 0000000..69e17f0 --- /dev/null +++ b/envribbonaddon/resources/envribbonaddon/import/contentCatalogs/apparel-ukContentCatalog/cms-content.impex @@ -0,0 +1,8 @@ +$contentCatalog=apparel-ukContentCatalog +$contentCV=catalogVersion(CatalogVersion.catalog(Catalog.id[default=$contentCatalog]),CatalogVersion.version[default=Staged])[default=$contentCatalog:Staged] + +INSERT_UPDATE EnvRibbonComponent;$contentCV[unique=true];uid[unique=true]; + ;;environmentRibbon + +INSERT_UPDATE ElementsForSlot;source(uid,$contentCV)[unique=true];target(uid,$contentCV)[unique=true]; + ;FooterSlot;environmentRibbon; \ No newline at end of file diff --git a/envribbonaddon/resources/envribbonaddon/import/contentCatalogs/electronicsContentCatalog/cms-content.impex b/envribbonaddon/resources/envribbonaddon/import/contentCatalogs/electronicsContentCatalog/cms-content.impex new file mode 100644 index 0000000..2647c01 --- /dev/null +++ b/envribbonaddon/resources/envribbonaddon/import/contentCatalogs/electronicsContentCatalog/cms-content.impex @@ -0,0 +1,8 @@ +$contentCatalog=electronicsContentCatalog +$contentCV=catalogVersion(CatalogVersion.catalog(Catalog.id[default=$contentCatalog]),CatalogVersion.version[default=Staged])[default=$contentCatalog:Staged] + +INSERT_UPDATE EnvRibbonComponent;$contentCV[unique=true];uid[unique=true]; + ;;environmentRibbon + +INSERT_UPDATE ElementsForSlot;source(uid,$contentCV)[unique=true];target(uid,$contentCV)[unique=true]; + ;FooterSlot;environmentRibbon; \ No newline at end of file diff --git a/envribbonaddon/resources/envribbonaddon/web/spring/envribbonaddon-web-spring.xml b/envribbonaddon/resources/envribbonaddon/web/spring/envribbonaddon-web-spring.xml new file mode 100644 index 0000000..5e748a5 --- /dev/null +++ b/envribbonaddon/resources/envribbonaddon/web/spring/envribbonaddon-web-spring.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/envribbonaddon/src/mpern/sap/commerce/ribbon/constants/EnvribbonaddonConstants.java b/envribbonaddon/src/mpern/sap/commerce/ribbon/constants/EnvribbonaddonConstants.java new file mode 100644 index 0000000..67200c4 --- /dev/null +++ b/envribbonaddon/src/mpern/sap/commerce/ribbon/constants/EnvribbonaddonConstants.java @@ -0,0 +1,27 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * + * This software is the confidential and proprietary information of SAP + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with SAP. + */ +package mpern.sap.commerce.ribbon.constants; + +/** + * Global class for all Envribbonaddon constants. You can add global constants for your extension into this class. + */ +@SuppressWarnings("deprecation") +public final class EnvribbonaddonConstants extends GeneratedEnvribbonaddonConstants +{ + public static final String EXTENSIONNAME = "envribbonaddon"; + + private EnvribbonaddonConstants() + { + //empty to avoid instantiating this constant class + } + + // implement here constants used by this extension +} diff --git a/envribbonaddon/src/mpern/sap/commerce/ribbon/jalo/EnvRibbonComponent.java b/envribbonaddon/src/mpern/sap/commerce/ribbon/jalo/EnvRibbonComponent.java new file mode 100644 index 0000000..d8d33bb --- /dev/null +++ b/envribbonaddon/src/mpern/sap/commerce/ribbon/jalo/EnvRibbonComponent.java @@ -0,0 +1,25 @@ +package mpern.sap.commerce.ribbon.jalo; + +import de.hybris.platform.jalo.Item; +import de.hybris.platform.jalo.JaloBusinessException; +import de.hybris.platform.jalo.SessionContext; +import de.hybris.platform.jalo.type.ComposedType; +import org.apache.log4j.Logger; + +public class EnvRibbonComponent extends GeneratedEnvRibbonComponent +{ + @SuppressWarnings("unused") + private static final Logger LOG = Logger.getLogger( EnvRibbonComponent.class.getName() ); + + @Override + protected Item createItem(final SessionContext ctx, final ComposedType type, final ItemAttributeMap allAttributes) throws JaloBusinessException + { + // business code placed here will be executed before the item is created + // then create the item + final Item item = super.createItem( ctx, type, allAttributes ); + // business code placed here will be executed after the item was created + // and return the item + return item; + } + +} From cd18126208d68caa4fc04070c0e45cd1bb13d264 Mon Sep 17 00:00:00 2001 From: Markus Perndorfer Date: Thu, 10 Dec 2020 13:42:28 +0100 Subject: [PATCH 15/24] add fulfillment to template --- core-customize/bootstrap/config-template/localextensions.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/core-customize/bootstrap/config-template/localextensions.xml b/core-customize/bootstrap/config-template/localextensions.xml index fbc8876..13f98d2 100644 --- a/core-customize/bootstrap/config-template/localextensions.xml +++ b/core-customize/bootstrap/config-template/localextensions.xml @@ -8,6 +8,7 @@ + From 6f1f6d7fec50b9b176045a0866d68031f6ca3c30 Mon Sep 17 00:00:00 2001 From: Markus Perndorfer Date: Thu, 10 Dec 2020 13:42:39 +0100 Subject: [PATCH 16/24] Squashed 'core-customize/hybris/bin/custom/extras/hacvcsinfo/' content from commit 8e8b4a6 git-subtree-dir: core-customize/hybris/bin/custom/extras/hacvcsinfo git-subtree-split: 8e8b4a6ecffa34fc888b359ac4feb0d7dc44adfe --- .classpath | 19 + .../HybrisCodeGeneration.launch | 23 + .gitignore | 20 + .project | 33 ++ .settings/org.eclipse.jdt.core.prefs | 394 ++++++++++++++++++ .settings/org.eclipse.jdt.ui.prefs | 75 ++++ ...ringframework.ide.eclipse.beans.core.prefs | 3 + ...org.springframework.ide.eclipse.core.prefs | 39 ++ .springBeans | 15 + LICENSE | 201 +++++++++ README.md | 22 + buildcallbacks.xml | 39 ++ extensioninfo.xml | 20 + external-dependencies.xml | 22 + hac/resources/jsp/vcsinfo.jsp | 38 ++ hac/resources/static/js/vcsinfo.js | 5 + .../hac/controller/HacVCSInfoController.java | 47 +++ lib/.lastupdate | 0 project.properties | 19 + resources/hacvcsinfo-beans.xml | 18 + resources/hacvcsinfo-items.xml | 22 + resources/hacvcsinfo-spring.xml | 33 ++ resources/hacvcsinfo-tab-config.json | 13 + resources/hacvcsinfo.build.number | 10 + resources/hacvcsinfo/dummy.txt | 0 src/hacvcsinfo/YhacextStandalone.java | 53 +++ .../constants/YhacextConstants.java | 26 ++ src/hacvcsinfo/jalo/YhacextManager.java | 129 ++++++ 28 files changed, 1338 insertions(+) create mode 100644 .classpath create mode 100644 .externalToolBuilders/HybrisCodeGeneration.launch create mode 100644 .gitignore create mode 100644 .project create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 .settings/org.eclipse.jdt.ui.prefs create mode 100644 .settings/org.springframework.ide.eclipse.beans.core.prefs create mode 100644 .settings/org.springframework.ide.eclipse.core.prefs create mode 100644 .springBeans create mode 100644 LICENSE create mode 100644 README.md create mode 100644 buildcallbacks.xml create mode 100644 extensioninfo.xml create mode 100644 external-dependencies.xml create mode 100644 hac/resources/jsp/vcsinfo.jsp create mode 100644 hac/resources/static/js/vcsinfo.js create mode 100644 hac/src/de/hybris/platform/hac/controller/HacVCSInfoController.java create mode 100644 lib/.lastupdate create mode 100644 project.properties create mode 100644 resources/hacvcsinfo-beans.xml create mode 100644 resources/hacvcsinfo-items.xml create mode 100644 resources/hacvcsinfo-spring.xml create mode 100644 resources/hacvcsinfo-tab-config.json create mode 100644 resources/hacvcsinfo.build.number create mode 100644 resources/hacvcsinfo/dummy.txt create mode 100644 src/hacvcsinfo/YhacextStandalone.java create mode 100644 src/hacvcsinfo/constants/YhacextConstants.java create mode 100644 src/hacvcsinfo/jalo/YhacextManager.java diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..3d134c9 --- /dev/null +++ b/.classpath @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.externalToolBuilders/HybrisCodeGeneration.launch b/.externalToolBuilders/HybrisCodeGeneration.launch new file mode 100644 index 0000000..6934dfd --- /dev/null +++ b/.externalToolBuilders/HybrisCodeGeneration.launch @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..83ff396 --- /dev/null +++ b/.gitignore @@ -0,0 +1,20 @@ +#generated by platform build artifacts +*Generated*Constants.java +*Generated*Manager.java +items.xsd +beans.xsd +extensioninfo.xsd +ruleset.xml +platformhome.properties +*testclasses.xml +build.xml +gensrc +eclipsebin +velocity.log + +*_bof.jar + +classes +testclasses + +resources/hacvcsinfo/vcs.properties diff --git a/.project b/.project new file mode 100644 index 0000000..e96c5a6 --- /dev/null +++ b/.project @@ -0,0 +1,33 @@ + + + hacvcsinfo + + + + + + org.eclipse.ui.externaltools.ExternalToolBuilder + auto,full, + + + LaunchConfigHandle + <project>/.externalToolBuilders/HybrisCodeGeneration.launch + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.springframework.ide.eclipse.core.springbuilder + + + + + + org.springframework.ide.eclipse.core.springnature + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..dc0b35c --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,394 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.codeComplete.argumentPrefixes= +org.eclipse.jdt.core.codeComplete.argumentSuffixes= +org.eclipse.jdt.core.codeComplete.fieldPrefixes= +org.eclipse.jdt.core.codeComplete.fieldSuffixes= +org.eclipse.jdt.core.codeComplete.localPrefixes= +org.eclipse.jdt.core.codeComplete.localSuffixes= +org.eclipse.jdt.core.codeComplete.staticFieldPrefixes= +org.eclipse.jdt.core.codeComplete.staticFieldSuffixes= +org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnull.secondary= +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary= +org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullable.secondary= +org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.doc.comment.support=enabled +org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=ignore +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.autoboxing=ignore +org.eclipse.jdt.core.compiler.problem.comparingIdentical=ignore +org.eclipse.jdt.core.compiler.problem.deadCode=ignore +org.eclipse.jdt.core.compiler.problem.deprecation=ignore +org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled +org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled +org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore +org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore +org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore +org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled +org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore +org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore +org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=ignore +org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore +org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=ignore +org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled +org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=ignore +org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore +org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore +org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore +org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled +org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private +org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore +org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=ignore +org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore +org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled +org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore +org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore +org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled +org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public +org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag +org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled +org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled +org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore +org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore +org.eclipse.jdt.core.compiler.problem.noEffectAssignment=ignore +org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=ignore +org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore +org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=ignore +org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=ignore +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=ignore +org.eclipse.jdt.core.compiler.problem.nullReference=ignore +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=ignore +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore +org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=ignore +org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore +org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=ignore +org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore +org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore +org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore +org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore +org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore +org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled +org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=ignore +org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled +org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled +org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore +org.eclipse.jdt.core.compiler.problem.typeParameterHiding=ignore +org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled +org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore +org.eclipse.jdt.core.compiler.problem.unclosedCloseable=ignore +org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore +org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=ignore +org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=ignore +org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled +org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=ignore +org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore +org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore +org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore +org.eclipse.jdt.core.compiler.problem.unsafeTypeOperation=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled +org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedImport=ignore +org.eclipse.jdt.core.compiler.problem.unusedLabel=ignore +org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore +org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled +org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore +org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedWarningToken=ignore +org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=ignore +org.eclipse.jdt.core.compiler.source=1.8 +org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled +org.eclipse.jdt.core.compiler.taskPriorities= +org.eclipse.jdt.core.compiler.taskTags= +org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_assignment=0 +org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.jdt.core.formatter.blank_lines_after_imports=2 +org.eclipse.jdt.core.formatter.blank_lines_after_package=1 +org.eclipse.jdt.core.formatter.blank_lines_before_field=0 +org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 +org.eclipse.jdt.core.formatter.blank_lines_before_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 +org.eclipse.jdt.core.formatter.blank_lines_before_package=0 +org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 +org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=next_line +org.eclipse.jdt.core.formatter.brace_position_for_block=next_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line +org.eclipse.jdt.core.formatter.comment.clear_blank_lines=true +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false +org.eclipse.jdt.core.formatter.comment.format_block_comments=true +org.eclipse.jdt.core.formatter.comment.format_comments=true +org.eclipse.jdt.core.formatter.comment.format_header=false +org.eclipse.jdt.core.formatter.comment.format_html=true +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true +org.eclipse.jdt.core.formatter.comment.format_line_comments=false +org.eclipse.jdt.core.formatter.comment.format_source_code=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true +org.eclipse.jdt.core.formatter.comment.indent_root_tags=true +org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert +org.eclipse.jdt.core.formatter.comment.line_length=120 +org.eclipse.jdt.core.formatter.compact_else_if=true +org.eclipse.jdt.core.formatter.continuation_indentation=2 +org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true +org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_empty_lines=false +org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true +org.eclipse.jdt.core.formatter.indentation.size=3 +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert +org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert +org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=true +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.jdt.core.formatter.lineSplit=130 +org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false +org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=50 +org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.jdt.core.formatter.tabulation.char=mixed +org.eclipse.jdt.core.formatter.tabulation.size=3 +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false +org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs new file mode 100644 index 0000000..50f3889 --- /dev/null +++ b/.settings/org.eclipse.jdt.ui.prefs @@ -0,0 +1,75 @@ +#Tue Feb 03 16:09:22 CET 2009 +comment_clear_blank_lines=true +comment_format_comments=true +comment_format_header=false +comment_format_html=true +comment_format_source_code=true +comment_indent_parameter_description=true +comment_indent_root_tags=true +comment_line_length=160 +comment_new_line_for_parameter=false +comment_separate_root_tags=true +eclipse.preferences.version=1 +editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true +formatter_settings_version=11 +org.eclipse.jdt.ui.exception.name=e +org.eclipse.jdt.ui.gettersetter.use.is=true +org.eclipse.jdt.ui.ignorelowercasenames=true +org.eclipse.jdt.ui.importorder=de.hybris;java;javax;org;com;de; +org.eclipse.jdt.ui.javadoc=true +org.eclipse.jdt.ui.keywordthis=false +org.eclipse.jdt.ui.ondemandthreshold=50 +org.eclipse.jdt.ui.overrideannotation=true +org.eclipse.jdt.ui.staticondemandthreshold=50 +org.eclipse.jdt.ui.text.custom_code_templates=

QIZae^ybF(S3kJ{XWU*`yYN(c-Y+9noUl2%S}zJFMN`2_WCaP(_+5({Lb;c zBN>ghU0+Kr611W8lyzpD-}?Ay|77~gt9!3p-NRYVqNjyj%=yO7#@pBTu552)ovvs7 zrjSGWL zLRuE5NpGt&*vc7ifBezucrqA{ob9A(Per$O`WkpXnMpBI@{`%g!~Oe%-T*Q;T@;gr zynE};(Oll%>TM1-?$5)?_;k3jJuSR13S%uxVvH?I9|9w)FA89`2#K))Jf=1-eAb%S zClV2}S~QtUBjZM#&hmL=5yosg=Nu@6(yOQ?W66L3St3Mc0bE%Ut+mQvfE*eSu-33B zh@hb?O`JRHMggF3UO)jYJNB~JuPE@jS#K3Uk~L0SPJzeQiru!IaA-G)5bWMn_mf zG18KdfUpi-T5{&&F-KR(rVnp~6;Z$veOs+{svrzVWKBdr1+g-(ZRq#Q!MIj2p-miE zC_PkY1=Sy+Mp^+v4B&`VmnJ+^6)VX@9o(%Db0TZ6%$oDwO6Y`^F;?&%S9^641w<8y zln_7_VGxCtA$B|cm}`n1f|P(3jH^v;w4a)R5u#K~!a=MJlq5!C1Q)4@XhbnoAs{G< z5kb#57YQub;!rfyR6-y?LL?xHtO$ZSIkFMaN|QxFU?Nw%uKC=*w>}U@n=H@+LIfsn)`Yh7tdm4mQiCF+L*YV_5Eq@_(Y^t@MEkH zDwl(x4dVkEId|mdM2>=1-(6kE=?WpD(L*%VNc;zB1gchOB2OxNdHQ$?DEtTcINLTf z>9R4XFy`L2M9kIi5gG&9)?~E;EUQrCwML-9ch4Ne62)j>1gxpfqJRQKxRRH<#4;-< z8Bq=1JLjBrF_jl8Ggn50#6o0_HRMSZ5x~e=t5RwJZ0gET8cHC^-o1JI?ia`7)7fB@ zzV^bimv=WTd4K@Gfd=;u#}|iv(vbUwHy*?|n-!%CV6p^5SR`o2^F?=Kc>iSj!L3in z#}k?Ry^FhVzICJ9>yhbNQXXcN>^MoEiBo`FUhUX<6KoSY<`%>>Y;29X!@yp#4Nlu9_yJ+N%| z($ne8^atbl!X@eFckch>C+|#WldNNY|98K8`O=;s8)taIHpvvMg@q$xVImup7GAqq zmy~^37!&tG3uG3P)9vl;`Fw^**4elp7e)Cuw?6&f{`dd$fBv8T$HY4IRe_?a!hy&b zW6zZu{+c)7qkhw#&wT0A>z#WI$p3PehsWqyejU?_vp~t?j;Xyw;FlcRm&9-UYL5V7 zBpK}&Ss)8>~{M}CL(!JurLrRKv@=LQ4mr$NmFAnPR&#T zb5Rx&LZ{QQ#(0i~-jxQyhoI3tjwn)RMU_+~8bl$mhyqw+3>gsh!DF+)B8n=DC_>aY z5TZpQ1r@<6=e|LNMRj?(V%7FwTRIVG$yytsLCru06qj~Fsp|bE=~h4O*}?b!{#*a$ zfA;-^!Xls9G(DY9reU067VEdPn;uRkKlt(AnBRHx`RA_zhr4(0y!+wJkMG>=neN5i zoom;w^!tM-p|&nF)}?8>xiRW@ddymiq$ai2hTzLGpUtPU*~z_ocauzCc=`IR+n;~- z;N!{SDuvu7*}>6Czc<|IcjvQWJX?TElmCys_YSk`JnsYFubp!1R7?YA&;bG+G&^~R1j>k>C*V@J+f_S#ml)htS45hbyLo#;d# z45rdr<-Y_}ZZk#zY z+gffX9w&`XQ>H`Rc1tU%4OZ*E)rpcxyW3rAHrt&>WoV2ls%2u4C0aMToklZJ8b*gI zlcSY{@i# z>KZxY#2wW^pyJHAi;K_qNg7keh4A7eIdSsj!s0@+(^^`%5Km57B$TnR6t-ifwKABLq3Xg% zfB+W^kTOFNAn?2-O|&(FapKzkd^1LS%=d&yj8RItGuHDwN)TO5Z_!$-l;Vt|v5s_r z6sh0@h|UMsJ+hucBo-)wYfxN=OdN|rr%B?PSY?dh9QwqDlz`G&2tg9)hAbclJK$7PaIHo26?Pv%D2ql~{YfVlSDasyHTICrrV6D};y<#r^wC;YAXANSe zVR0GYF58QeVmM@t>2VMU6^y$XlCw*2&MZZ)R&n>1Qab$wu2eJ-;u5HLV}k{hOe}iR{(`88>~e8u#dK|l1v4eXZR)Th86yWln{i~ z)bUFZh5je@D7&Npjtio1w(#{+bL~p&AZx9$CXZagoGV8zRmWj=AMB~)5V0wxSFWDE z*!arB4?OYMi(0dg31w2m^ydA0-}Uy_Rei~A@;e{<+`%Ug{lpKxclXu}oG~t#CIDJ| z^uK-bu_vDW^b$89%OLk=w4jY_FU9(m}Oe(hu5`@y%q@1DCo zA*_M9ZsWH;`lo;O<;Q;MmwxW%>vw_e0QEEpe(cA8cA#4R$shgD|M=ri{K;n?{rzA6 zxn0{gKm3iye*Tv}x_#%SU;MeBni;DDYNJyN{A*u(?ALzxV+USy$DOy`^vnP8w~xPk z-U4_5wA+R@1}%Do8Ul91^w>M!_11U1^Pak2wnkY~P&(Dwv*+*qzee-QU|Fb_?tqv@7la4L_=U@7b`@i^rRGKkntzrMy@4e%m zH~qjr`<@LW1I8vl{j>l6vtNDerAIz3le83ssm4T;Yp%cj>T7m=HN`|i81QYjmwrIeoM5u{!z{PKejefD!-9UcA6AO61Y8?IJRNlKXz zu0{b$|DN;N`gnY=_&HyhPw@}q2K8+fO)v(Qk~lU;j-NXI@)?&WqtSG`U6rJzFsziz zLWm?uv@sTtQUhKd z3FS2IE^exiY~H#3U2l5r_L)hpTHUy#fhO86HW$~AOcPHC5~x;lX=#a3zI(@>iLt3x zV+oO`v1u;0YvbiDTQ&_2)+r-O8qP$yTp@%C&a2f5=R8egK(q#U;At7BX{41zBokv} z+qX_1e)(d(a?9q;BaOyv-LH4L?ThmlhX;lOKTM3IL=V;j>xnJngLmC<)m59eb-LZ- z$%WV4dehv+Wx;IR5FAW!r~TU{Lu31t@+mZC&4 z!F3dag@M6xN3rE@6NCw>d~(A&!f88-kG*{E=!seGE8u*`&aGC(^9$$8lT*THohVjH z2_ZP=)oOKUXsFXxBkLv-C9m5z(T>_vlf$h>^ZeQQ;el!?@F@3(M=P&+&2eaH6QYxv90YbR%mAr6xc(~JzL$9J_BiCg*|~v{p;Ec3ZE8@)QM=KYAE=imK+Mj~Z%Sfg5rKB%w9}1^u`F-% zTqvXO3yXwOs!V2}7{@UUOG0>@^Gp}O7-I~vC#rX*37m1GwQB+)7w}U~(xOF@bcmVAIQxyquD2r4>;R0?yJF7^6U4bM7wZY^rY!bt){D zg%nzANbZ23O+m7w&i%nX0Q$6(#qGtJQx;B>nTz2ioqXZX+F$-TMu6>;Vr49|m3^Ia zXY9Y5xkTII5V&9tClhd=v-jYYT_Wwv87-V3RwX#Dntm7kURGoFv>gezgrOciDPBDU66l3PI zkjM07=%g!gvxA-gre~@9Dy@n#JQ~n(huk+{mh=@4m@f>MPTjFLcXaOK1Z}n?v}OHC6lce$;Qks|4Ri_0ISHCdl)ycb!ch=R-bwO`q;018(& zSmn~U#=5xHB~9{Boc?bAQhvC_HKbZS>xABA34OD*Y|Svn!b*{t3*#+PsR6)fLvs7V z+%ACtWJW=Sz?f%*z!htiPXm?U!6#pO{L$xcyngS#-8-r!e{Q+`=)o7i_{ejmdhP9Z z@ArvKp)%hE8rCf17NnL6DB)b7=Oq@xP%suHT7TwqPyX2_KC@@ft~Y$})|r_No)D)_ zo__Gbr~lxOKCMx`?au3D6bbGDg=?ERRS-u(L8N2kW6 zB|ruDLh6MEm?ZH0(X*fW`~x3)=j*Bg1p-76DuPy*a({Tk_{6*3_NF9G4W#Wf{o_Bo zf5XhwZ3p&of{ehHt=r3$vZXLFHuB#0yj`FsR#V0_0ztTL&u*|Fm|rPZ-gx&N+a?B) z21uaO=^i?K^f&(R{|cIa?+4yZz=GofybdFCM@D!N;ekWeey3pcl`9(kNnJ!Z=Ignwdblo z`^uwFJpSZ$*IgGSih1E@zVKHmunP-~xuu3hU=#>}Gw07Y<9Pe_?LiQ@0**0G2+;;9 zV?XjkKLX7A%g=tEp!jFs{{zDnjtIuM$%eIPfqa{X<5$4!Z*|A5T_=5OJDdWh*3LIt zhmM`>CJI4FtGa0tr)kOa2P##M3**2_mQDPmR?=vni*gVO#tRp81E7=wLP}vN2!brW zfq=GFTJ194IAb2;{eBtl7Nl)fAPVl=PACCtm5v9h!*}k#=IZSmH?FIBM5ji!qc#r$Wpyeg z^E}H)lBOq5of4eC@15_y`l_p~(FQ>q8+gGD*Iqw4KH>*L>68Q4+6)cWeLplt8Djvf zHVV-a3f22^}IDjKO)%9TntN!zF!Zk7N5AOJ~3 zK~z!u+{NY5$r-OiUp_rMIX<{+_jake-Ly>^aSZS<43$!07;f6M>FCijohTg|8A9mX zbp5s0UUOC2)z2P$c4;Bpv11!c62fp~xI8^sKlGAG69352;{VhPG%UAuosTA|n!UK3YQwB;M_p~u54g3NA+l@QR4ScZoKPx+=*E%9 zMdY0rpJ8i5FB z!Dy^wBA~I_XisD|4M<^?L1SJ*7(*y$41qX%2*Ei5#4=Svt!XWbS>_RjPX?;vH&JnpBA9s&8oPM^_OaeAOiZbFkvkh zEqDKcK4N^~u(0Cj_hm^yPMRo41cgpvWdtUmwYhWN%JK5$NqNOfW$mjm##(UMnbvBp z3+uxSAO=e=n^<%Spr8?$MQYGm26m`k9U7=QJg654X)I&CPQE|WH;dlvGg0Vw*!|Y} zSSS3vL{ph9vOT+jA`+0a^wG2m=H|7$KTb#*w6& zUSM*D#W9^1KT>O=2&OV#Ir;L?y36h{~vsQ=&x z-W_tytWwHQ<^v&uSSj1Yq$BmpJKl8XZP#qIR9WDRmoCgT-v7ZL{KmtN-TV62j<2f_ zQZzQ4QN{!x93KA5&wlZmT|4hQa6Mtl8m%os06(Yz;Zob*{pjyM|M=q{{;3~+?|ttO z6g{8Xxmie)#6mpd(EOszIh z@&c{3u~s@FH)5P7oj3*po)8`voN;$g)Ye2YNs`2crD?6Tl&-o`Rx7Qw){GFJ2|=03 z#m2ovb3SvAEV{cQ0JsQ# z>$L$ZebfMeF=A6K1e+Wiz5T#-*Y3S)T|F#$!sDWy+Hz$eER~|D8%~D45L)ZS#igVZ z-FWrh{Wt7K6?LNKVq@vV$(JqK>vr#99zOrVGlPQz<6{$^7u0G4)*^sGaCZW&jWR}; z%N4=>G;YL6rxb*NA1bMvtr!g(uB}t18;HtFhfeO>zl~DLL1?Kv?dG1{+oOcffBA92 zSt3J&Pf!SP7#+`M;VZB;Caq^5MEc5{hN~yF#i0Jv zYY33jn>L?4JG-#d5Pryn--!}q4CmZh13($$#%gPgv6c(YD6<5@Fid2slyatkZVh!7 ziB7TatOSiQp67AK`8qm^ptZR?p13%@!WYS19n=}@TkEWnIAz8f#(1q# zRn28*hoF@fTolDXF zn6GG{xH@$bGO0DbI>>KTphI?4$y$HCM1OI`L*eg#p?GEc|DUkXk16I1HCUBY4E@|) z?BU_Ka(jgfxbI1;pOxQvRv^|6l6Q+1=`&F&(1hHb0bM**fpGU{r}Zy^O2yqIT57eJ z7f4A60JX-K(Rhi!_bs>Iee1OzN6INhUE+Wyp+o~9yOyiFT7 zP|!-s0744J7aWZ7Ilb}58%9P(zx>dnT?L|Cjgkbd4Hz+r1Y#&PjA+J;HZoBX(Ut@5 z5p9!}AjacVTL1$dCpzt->IzT-wID{DgmFfMNR*@$DK&t$T=K0|BO`<3Z{kTMIrwMYdlw}+`QLGJ|I(_c`FF&$p$JTq^@+Ltn2W673 z025I4me=2L^`2|K@Rdgn9XWROo*knDrN4Ukt6ilHfmXZu=;Ken;qKcuZ{B$L_{)@g zM(f$x^JmVU+kfD;N~Kb81%>cjB`W}#k)s3Ucir>m4}I{xfAN{m{P`z7b>ZRyWgg)i zC^1gX`1cwhfHf|gR|oC?gM&gY`I>)&FNM0*X}x&(==qC_(qNkESV;{w3`5`dDS(nn zrc!Hd&>CaXG*w!0A$;F+bSPJCE3H#0wbstyzzOLQQ5&PIb;N1Gg(n0fbX786e}OKt zqPFL@0T0LyG+liFTMzdBfU$tXPIp7=CPikOG2|RoJ+!N0onp;?! zotyJ~PZ=vbzdkq=gq2n&Zgrb!nkcD#PpqFDuh)XOyEs_$ui7@Vb>oyEM#mkWG2sg> zb*s@t)RkJfo0>QwNlc%4`pDx?Ja=w(K?LP)s*jyoJa@ivac+qMPgB+IMo}CqrJ^XB zpP!$fpKrI@l+yJZC%5m|dg8?K=5piW+M5DBH zr%IAU?M_?DxIR$Zw&SXc3(aH4PS0If1mGpVLM%z5m?Dj$bh*)HOax)rYIjqq33Ip= zI97{0PZ*`yNtjCyirS#~Uxz9554U~a_dEf8S70VzIYf5T9C9AwXA zu8${cSoQY0ueGh|-F&&IKnj?kP%ud)jWq~h&>FPb8V3;;m6-d2`NV$Zwagd*Sgi|% zLjPLOtDX7^JU8Tby>tOa6oZzczOp&fex)J8iuty?7je#o5DxNi&vgit&OcRut|z&K z$lA}3=ufv<{YCno+XEnqev%Zzc>8LJfr!O%=_Mfc1xBs{UP&%ed$ns1<%BbLX869S z1OWq}lsP;Ia?zU0Bh9Q7C~>e?A<0ovDW$a1#^`>@!{5+ExyWbf2TfLO(3f_xV$ev4 z%|k~Q4`!U3>odl!8_=i!n@s9)pf z)*jlw2_XPTp0dUP0Il^LW7uPyGtS+#&jl}Ma}PqmEo}YEv({P?r3IbbwE5tR$G`Bv z6V1qLwkb=gukAHkW?p;C-bxvi?SM%=3aAoFP-~-+rm0m@_`y&ji7#r+MSWo|85$eh zy>B~kOF2zbick}L*t6Xon>SR#@^jA}LP~+41vJJ_H8<8Hq)cc@8gX%9iF3iZM;Ld> z-p1&1DL8Q8rdGQ(zqDwq5}Z8$+zZpwldpf>?O^f9(Zhl=tIe~|JiT#hYTK5LfGYI3 z0!@gOaa0b&B(c*Q*1!LK_kHD|#~=FI!B}cP2pOeXqeq!0JVlZKTEbaaK`%h=M^dNS z5bkLJ6uu!OwYD8eODHm-3GJpjlEyG$gx5932yXo_u@=N&CuSPLg>H2C)M>9;A6hq9 zj2{?fZeofE+qTSn?}t9{!l5I-{@cIB!;(Sp{6J|!nP8kBKk;%D#jknY>&mr3q?B+D zlo94}MuuzQo8I{5ZmiGE&J7RLcW>Kt2_R1 z6ASb{K6p)xV2!80y3Tra7}7U`A^s+n%Bx)dSA70l27UQ|u*Sbj ze|MRk28Gbd*=?h}cya#F;iIiithAL{S!+w>%D}*Y&xO_28mo;aj9Nr(3<7Y@!!RfX zA!7`UvBqfY+!v8iCPZdh#wcUVo$5CCfn%I=M#-wMTdlP#=wrS_4O(u?> zI{4HxFFen}kTMa5)k=9Ni4YVMnl~4gqISEvylkW#9U89qL34h7xv_Zu!nw2O&JGO? z?%1&vt(u)ZpQf?aS}W~&zO$fHN+wAX$5FQ%wOXxg+$z&J?s86r;7Jl|tC!-XX42|L zEv38V3K^d$OBKgSgb1}-eZz(gR%@e^ZnyK~voC!1%U}DQkNwHfGv_DPPmhg{-E#YF z8#ZnvO!$7OIxxgMztd@Vx?RurM}~$6>lLs{P`vHHjkn)&6+l}Hl>c+KNePLmdF*Y(XT&l0++|m12};d>oe<(bxGDHu$8^kFZdsWB&0d zrD#zpMJe@tzZk6xA)FIo)^}6Z>#rR9k(2J;~)b^QK5JGGm_j@R~ecsy@g~#DaK5g&lW1p!J z7CjCTjF-bwwNe(GP)aCeG$XA*j%xLJ0U%;7dC*2HrIglLZlp2&#WY%6!9oChg&}{w zB4l^|f*Nose9#9xtq4!eI4t=G=s!;gkd>^H>|?^pdShjgLtstN;ga8E7e!wuQM`Qb z)Xn!;-?@t`&WOt!O|6LzU@tlIn`~D)%fCO{70JWjDfb{FED-`OMga-Ud{T2gE&}6# zm|=4?i=`p7(4^&_to<~(yd247RQ&@1XE9jZjEpgvG(BhD=GU{yp9P%L0_x5=>X6~N zjw(e70W?NYLMf*V&=bO@o_D>W#;i3~FlNDdBNM_bVU)}G?i;TD^8V{T z`rkis^PP9^-@S#IR1gF-3X{ABueL&+Y{?2Ph41tx{d3$PH;xhW<`(H z$eA#fS?VDq1T-^>DgE8=eDe#ZkNt;V`<>B=iMwvUg&_d(a+)jPN}}esM*Mk&wdY%U zWkP`UgM+XBH7>PH{+0!q@G49nSNXZFjVR+c0YlfEDfF_svIb)HLyXmgP)dC?04SMF zDau(w4jwwWa3Kn?)JeOEZ4hItycRNH2&SMlu|SESOoHv|G_`slEZ1qk4JvD-Qpkuz z6RA|98T3P+`-n&=bJ{J+sL@tRDHx}O8o(4R8uYl()&QjlsEjh!c#H=^@SOEcIgM4y zIR|YDc^4S#QBF8jQX8~{Q3+^e!WeV5=DCoVAOdF|Bg|-Hw5F6IDs5GUnLY zH5a#*x}9`x%k(HmBdDF67>-5;51lxDY<_9yy1`DnH8VNED1Yj?LtlIPr5#(RrYDD) zABpg~JLZU_=2d5jEU2-TpRCaFv$1Vj zECV0}1XJJ)Mxh*poUt@bGZKNdQtK3~F~%ZFr34oa%p$4ggg9;vWsFnWvDS6MTI*Cw zha)KWM6F$5gb+diWrPunMr#FWxl%!E!GgBNC_@;v2nZN(PfE!NMQfcAuNzQU)RZzn zKxH{ljRq)at*tf`DOhBjbLs&CSQqUq2r$>bSg=3=5e+rg7{^N|86gO*wZQt&grZIY zbcPX1DXp~-!Z{;w&hivV#uzIFVVb6BE#ur5p0(DvR7hj3MM4-LwFVIr0N^YmY!*#; zKkMEVOoY|RnP0RrIg1<&)`-N|WQim(hv^e9p! zT>!0{<+x*Ktp$QWtkR~Rn^2fOKxJkb<>{ z#sUCvkr8Z;J`q2YG{NdMsrG7ufBEWIGJsv`xe>~ZBV9YjG;tROs!VN zFh)41TBAGh02rmjB@h`jU@cGrXb5sgh$~pSK!~+DyToND0;1`0MskM)q=IX$o#rk} zI|a)DvMLBOwyDQNUU3kDG#^uDn2YlRUPU&^JWaEf0{iK7mns+5rZxjDI4Q+ok{}_( z=~--%_<*@@f+am~Hq1tnrR;a(=9bMrXrqn7cQ$r~b4%RS^9x;r7HkJvWQcfwe+IU<5rh>5~?s{Gc ziHArS0ZI)Z2*KOd`~0IXK6&)8m4pD7S}7~vaM%9VzwQ7KO&Ku=lrjpaj0{3=>*kGz zUOM!)H{Se>N1yQp+dMPF2;6+b4bQ)L_`>|s;UlM#IKBGnt0|$3vLue(tvz!+M$0H2 z7#w{6d*AWYGtd9>ul&X@{QI8<8W^Midc}~tnBQiB!9B&GP=Hfh3$qw>6poBZL?L zg>d-Di5FfxlqRXxN=j*@E(fI`2%K8Mn#}1yqmAN7OBHy27=&CfL}IK}MgtOKjSE*} zLO238L5l>e$rZ(f3L!i$oKV}{qnsGQ%~UMxJMzF|r(QUAc>Bhgfzoi``SVuBaqRm+wOSh*9HNX$ zDZAa)Li4=GOO;AF3lK}9ZTt%tmOk~VM<+JSt^cmujJ2IkyHXB!?cDz8!56;zji+zE z@w$>Y>#7!rVn|VT!Du92-T1AoMr~ZDR?x(PBM5Y-pX2q#RU1RKa zY!C#2@4H2zu-VHf@q}>7Xx?2oPx!(pw3x|r&ZU$QMvSp?7=jQ*w^q-uC}$$luD3?ZYrga+I|;9=(9N}#`W%-Iv53V2?hXIRIB3~)*6!* zKtpl+HO_4~FREO(oTn9HpZY0#&BEU?O;gYFE~S{c;{v&Q#Ter_p{_yAnnemgvVp&A z)P)c<|BkDQK!l6|PjlPFwI<20V&x*eqH&d+p-?eo9-{fple#DkrG)1}pP0A*&fGu5 z?$5=@!a&l|1}<|0L>QnSz-@An4##d|sT1f`@@%6a+}bcsG6bZ3T` z)!3PmVvX@WS=G1q%Sj6AE@Mm^3kb|T7*_-RudtMpS8TJfN8ngZkG|CA@Y4ANu5>|N zMFq+TdW8u^&#k!6$l(=P36~>szVZ;|iX-C{K;a+t#tJ&28}U*hK!DIp za>g>Ck}^g)cZ;RYkzbN=fq@in=b(K=!U(NZhPqKwE0wO@Ieq=^scyF&X>WFxeBv*@ z^y$xjWBt^`Roe!QPRaqf_bqpC-!wrHEpnw&;nUyv*!>sJouP~iFR0e)XU?4$UZ9gG z^f;r`YRefl5HyzCNg8k4GHtchMu*(&zJB+;Z@nd8zENNinUB*OCf1J*%1)Deo{~s_ za3-WqgOG3Ew)uT71!?F>kt;J z4QIsW6i{cSODWwnGxj|nc>90)mH+zL&p$XmIf+P86_M3J!G-V)psx^_8XfuhfBi3s zNl~Y02@xJJQw~_FWEhr4Muva%hrjRIZIfJ-h*h0L|M6db@%}G;`N5m_y!ozMdd!#n z4sMhqk;-+W)&KS1eE47d^Pl|O=e}^m{#%VZKm@18MoWU6Jay*Q12+*ut_rfp!>aULumVfT2|J9C-GpJGoBRrwByxd6tI|fbo zI|D4f?MrVa!Xnwvmnj^;H89pF3up+NZ+0Jj?Ag<&&r7Y-BuV0~AB2^1l@TswDz&m% zA~!g(00k&}fyV&CKs~>?K{Q5dt&spFL~CP|W`c9hEub-48v_=kQmK+gYtDJ#`JD42 z@zG|X-&RU#(fT<_c!gOkC5~$A`k(%mqc>v8cd6^cGY|o=81NQqYD$SQ&>tG_?C~-- zxYm@?a;a3W3|fOhSzNPs`{c&ao37hsAyrCtyWJ#7YPG8HI7{eaJ34;)?Cz~s1)kSx zwv^PVBD2kCY;wcy9Xm${YDv^tSYGn{V02_`Vr+77Xi#futO8;e7Ut@;kqsL*Nts%! z5HL+s-}e#04+51Y1ZX!(PG6XpGVZ1_WN6R|PK6)LFE$O5QmJIq$Y;d&*u}P)oo}sQ zKRz=x9!F`b-8yrj6PC&RBSfN*R$a zF1{RwrGkix${L!C(@#V9PnXw_CaxE3o@*_{4sNFabgg*B; z1G#Z>V0z+q?jL;oxs#fx!P;mjM70zMqGwwjK)KXxjSkl)r`9(b-Pwzc#&TS*q{8DP zBQ>cygve))ytsaRbaZTpARR1)>qmxa)p98$?M|y5%T6S<#d_7Nmcwt4>QIP zMmb|Nqd>YbCZ&`VQ*I|TkgZlhn0F3;{Wp!myCGGocubNcE*~Y)8VWB!LSUt!x@ei4 zz`^~m8@wxY&Z$%|P8nmqPbh76I_?^D?~>0&R%pvz6ruZT&!&O)BI|Oe0*YBP4?RC= zyE+81|3x78GPF5mqlmXG5?lI>30H|sUl|?lCzeu5*Yvi{O;~!lo@tso#R}w>5Dpq} z+J|DEpIh^Ss|SA}cHNkDZ+)h?Fr( zv%HNyBj7dt{t$>>)qiV4xS$rX5(J~eLx|Rb^QbocCnwD^JspwXSTq)mJLpm>C8aUO z;ne*q5(ifmatWF{qT|Z;7!e7io5Y>ZC8@Glvcc zg&kuAxMa&6gVfI#{{DuXP)4J$34b5A&dZ_gmW%3 z^CrTb0~*cnTBl(af;&1x@tHYiV7)V^7XRc=zHsv8C94IIdi}`Ix`AN#)gyP_y>Fq> zJ#^%>A8N)>ODqK<6tv`#ky!X{c5?c4BtE(G4qu+EN4>l*`&! zO}wMW&S@F%+%e;Mf#-WfN82ar2d>_D-PVztwolx#cjGO)){oZ1ZfBVbW(cL6d7L5; z-}gB+GaE)4%S-c1(NoVJ+qq@h6O15UvukU$6h3$4#EF;BZri$LcxV_b5+Fhd%mvsa zU*5ISR!47n<7@A|_pU$x^cT*Yog<8gUYH%So|RMq64U-e#)%X>9vt8Ubv7|ks#R>Y z=KEnl86${3=R3A;*|lTa_U&7DZrgOrjn{tv_k35o*?jnGk0P)&N&y6=lrgGY@~_#o z^WL|<`7b_m|1&QfHb_z>tub3SO$R>xt1mr}Dk7Ej{ZbOAj4*=`Yx~ec4~3q;W9ufg z+V}mtUVHPxV&jpoKdoiw)|;)lg5Y`3P12X08mC7v`E1* zv1OVP#A;9yzDFs=qMdL7x(GfOzUOhuNG}B)t+h(^8r}ZVs?T~Bi{_yx?(L~Vp`V=G zk3{sdi1R&9RvFi4`ZYw*295E#7#$v=K!o7iw{5)f>YX=Vebr#4l*DnGrp9OhdXhM~hJu zaZWu?NU1pYD&?AM&?sf)QZ)=qgb+r#*1FMXHXF-(cI{M2_w=ck0c@N^ohVvbSQs4{ zs+LQwRx3&p=6Oovx!DWWr0eSCq0p<8%k#_8#g1)DsMLpz(XCd407gk1MV(HkrBrH+ zQYsaK4Gs>RJ$rUxVWHcND5aB=6AKITTB|fomzNt#S;D;erRMNJY5V5&&Z?DCl0??X z(ZTBW?b|&sTsOKdO_FA_F*3TY*^Z8!I4k^e5SHV(tz}d#vDeNseJAe52k#@Jkm;eN@mY5WDM6B#a zvJ;u(r!FimHNsLjGF-3MtCS+5QCb^B;dzB)0^{6TbdEFblSQuPaux73P1h@Y#q30E$=*%e8XZqPAcPPt88G3ti$veliq<53O_m1nhGz z=sz0??K2#4$D*I8k$*5_l^dcUSOjCNLbUx4bNmQmks?qa6o6uHZCyb|CTo}u6h6th z7h3K=ko&D!k|jjE8uX`^A<;|m_$J0r1YT)q@d{*wZ@E5sg%k41c7>tvoxgdE5<)XW zTmm%bBw}wgO^O($RTc@j$|1HdDzbOyy5ufK2%*dcDLZ=wn!yf5b(=Z#00Cr-5&(o^ z7-AXAQ|<^bN-3kLEG5o;8VGfy1p=8Cj#z6c1I8$0-b!O9B*fY0t{_ctj~S$oK6BFg z!!uiV2IX=$X%NboXGNJ(#;WD2NfSzmG{89v0#6V`YpgMp6GCV=iqYDkYH-I*S3mvS z;g5doPk-V^J~&VwFiILjfbpev`t?Vju@>I+`a8;gS)(?TNFHbw27%AOLxNgsX3_Vn zE()7_o;E2(ffP8kljB1Jg9Cr|>CY`R;KpnB2udhe5B0W98y|e+sct9!;Jfd!#xO#G z5Jss>o^xv0E8S`)$F|Ni@)dGUY$|Ni{X8_gy`pHgZG1qv?O8c5%Pq&=HX2~>ok z0c`;yr9cRvj4`1SX^a#MK}#^HMeb8fI*qL}>+98UVL1ZQa~mqoAL@Y+JoL(OCnhZX z?)Sa@*=L^q^ylt3$b|3%k8j^RbL;ijeg5IEe&H)$ee3IA+m#BqpK1gzc<{kT9)9E- zZ@S~a_AQ%?R>TWmbL(}VzyI+sedQbb_U=X1tqcvPO77UU$@9FA|H-EkjT4g-Xi}j5 zB|s*zz!RYJar}{A{!h)u@-Kem-wsqt9^+C05}uoR|oce&Gj z;rOvu6us}ByBkUS@#ml0w`~fQs8vu7@zI(hrv&GlLscbXn205nZgrKAu-ctR;jDP34tXf8EJ z2M25QYCzz^QX`7us$VVzfs`sJ*IIG9*p08=v3{`T>oje(JIl?eo9M-MbnwXW;em4K z`L%HH?CDeI&pf$n`}Ea2cea=2{eVr3lxx-L!9hQ5MeS~c*wo;Ks>;W~;Mq zd^9Pu%0PPf^aWv;UpR^=svfl^pVezYx83x^%KPtqO}EuKzmzCxjWj3E&y7rNXfzrN zOAUlgX)1#t7##YDj`b369x6!7()m+vAvVW6GCKH6{!TSlXTs?qei<<$7pSs=8U-* zNR{&l7-La0AqbQZN(dtq0660ovT3kuotzHE5#u@MnDUnYs&u9@=TczChQc`NIi7_Gw9Q0855f+(K#g)Yww=26N zYpq2Kl&-)Fvh6RfSm*4Oplc`hHKG zn?upI`odq;X*(f9nr1Fk?uhulU)){_`AH!{ao-COg+~E^P^1KCjjyP1;b zd8<0=0;^h;>~P7NRea9Oi8ep`@Y3Z6`ndgCYgcrG_JAgi#j`~evyA){0jlpmLrLEutzM_9|LVNI#Ut0`};NFJ^L3jatqLV!_# zTwO-MlI#v%;Lwhbw>I|HPx4s>D8MD5xCI}<^LRhu)`=fTpYLvV%eIOEDP(~FfMA3m z{iHquNQH2V3J`R*M)|U80EiGA2mrMIJEc1T?Y>zt9^cuyYwf+O>Wp_D-hK1X{dywVY&JzUCsCpzE0HBRiYz&?f&7S!*a-||(2x8| z{shPXBt{Y-2@prWVgyJaM~ECLv8{+AtxzJ_9GcziCVPDS`i*x!Lk)XaD?fHs-MaU_ zN41)iEJ5!`AYPw)&$)H#RPDXix4z*c=N5+ri01#9G zP>Bc!Z8R9tIu*byG2~~@KYi_!pL*dpe)G3RqwLeqKee^7lBI)Nckcbp7yt03m%jfi zzw-0v&TV)bh{y^H5+E@M1|}4xmF7%@gn&>ZiqS-%U9d>9zP_@tzWTer`^DAGjVG>M zA@U@wkU#gi&-~us|L=xL`s}mM)&NcILIhFm*{U%C!H}}vZEP<8;xGT=fBpCW$9$G^ zIGQBX`9&>5p|O;T&m2yR|ND2pmOwBHoDV_@&|f&S`r#*^L?q`JfV0Guj3^<~Q~+PQ zdf8c*7v(UcM)J_CzoBAb??h7%P;YH6|FysNGymm(|G$=%^&xQZ{Ve%+{?4y{^Tw_J z=70G0!-L85A9-qNaeR1q_|2DJ{RjWc|91KE#eetj{@a6I>U?QKc>2jJRWjpI*Ik{?et3MB((kzySo!+js8$C;!=hb$Gb@AN|_j zd-mET>nrDMsx^m@WocO!S|>lebKzfTR>BYek=vr=N6t{d23Kjcln=%ov{Iogf#CL? zyI=YGi??_839`JbSVU_*9*&sB`zAvXpk*kSH0`BXmZqA>$1)5U0etY@IZc!pBP^A( zA%r^A9cn(XR@!JyMC?5WjvflJ=i$K7BfVu3btiaTv2mOeMmzczM~E4bQC!_t_H~ED z+$yna?0`cz+ppz5AR-4REWIq-*w`4FaQ*V;Q%_x884swkh#4fBB`>SoITzz0dcAaU z`Anvg?b~106Ja6}DZNltm8~oXSzKH)Mg?}v_R{(5Z@ux_tFOGgc4li{Rv&ue@k^V_hkHAS zR5`9(wS74I#IskQx$^k(AbIQEH@^A$d$;a~Lpv8Pt~`F}i6^d3cJCkT?hh6hS-cOf zvc)(Xlft~1A=1X?W`alrwkieW%H_-V4=icyr@hH^cH{P4M{2Y<7!OlI_AYqFdErVI za&hx&Z)0(JZJ{?x;mVb3XEqj!e0poTfBx*bxvxxbbbe*LLpQ2?HaXlse`c$+-uv?M zxkYOS_wL^9XPFP2Y4_8gd*(}DyZ?=s-gx}V`Qh2|!s7DuV4MBU`grAMe)7}*@HfA_ ze>kmdX*BT8z6ySK|9}yUGHIGFEia-m!_fedm_h4oZT0Npa<#I!QqJZkH3zn$gnE(` zv;6R&c;}t_2NMelZ{4~xOcxYFVssH)Wo-a4inP)uO#}6R3qN3k%Ba&`?`;VsFMA&KGVlUb%)wR}jn;0$n03veNcC8Vcu-3ZZQ7J~? z;2FU)m)2^iyF?d!?CL>Lck&S*-AspwGH9*Q#_&a|lOqw^Kic7CV0#C3HRs)Nah$PB zr^#>HJnW8?KJmL7aF=bR7!fcM(q6Eu9V&jGrGGuP0$? zU7wD1@^CzP;W$^~sC+$6muNK(Cz3J=(T9^B3W(}tS1Aafp_^WW2+ATrmL$uIi#o<| zNPyZ(K%&QFOkN;D?66KEJHdy*A#mUj6E04%FqnaXg^uzX2v2$_w3cM?6;0I*!g%@( z6{(}E7l2tv9Scc4icC7$cpp2}M*smtxiYn22c9AboDP79#pj98(9_{`0@ApB)w^OB zP&nP~pGFWKC|fvIv3ww(g-4G^fWlvbbKTI%ppBN5BNh_^qSUh6jwHE`R)`v4XxIvM z+CsgY$N!5)i2x|7iRwWR1W*cuMIbcpj6#Hpbo?U`DK#;M8sc<3V#lNvMxZ^e@>mn% z+WcXNb`UHK)KV-65Sinq6^_(`2-E}>qr}-ciG-zL|7U*k6W)F4_rLVzufNz|TI%@% z4kr2HV*eL^;S1Lbq9zwr(D}zy6zRo5N8y zn-}-*+;Lc{ zKXK{V)#dR62MdA#$iA2!-nsD~{QH0J6Ce9f2-au~0zf1PE_kIhGq*G0W7ChLy{-Q7 z!-KBn1PSwlPvnmx4Z0GQAGTNjK~775lA}E_c6iup|D^Bvuvale;{GwRMpvI%$F_?` zV6Sl+<}bhf`mJ~F4$J<&E9UteiF!$@6;;lP4=A9BymKyi&%p~X>9lV$qqOJXyayB# z2;NuTd4gV=W=TpcadxDUM4<5Al8{lU(J{M$Ltqr|gHg%}dtf0jN@u9GkP9Kk!~(DY zu&{LwB2!F&NF~ZBB$l9%;$(;bgAX>iZuM5r519p^a69`_F>lU^^|ySu|g7tfwq8D$F@X!MIq%bQ#L z_Rb9~-1)VYk38|%%F>e0^Y6X++NRo6I#g5Vc%BUs>!yZeJnFL$2nAnN)0{Yr7W(rt zc<@YmCpY(Y%B2Bb-Wacp2c@m1HcawL37%hBnIg<4d0z3#M*ou^K7Vm@974IhvrUMF zwT@}AKO*GC@e*ev&f)g038V&7y>)IgQDo=&;o*E|XImRuSzrCd&uzSYck+q*V!rugjY%GTMlfibT_k|~9fsG!jg`#oXwK^DfN zs+tV5wAbr-YwvE~Kb-6<4g32u#NJ_5+}XXIY3L1y_qMl}#{B?k6)X#-=`c+~q78rv zLCUId-YKO~k*jRH9R$ER7ZrrHsdK%*U^Ej+lZ36XwJ}qWh`1rl8)K}sAp~V~RhG_s zA~FWkEaMO=TQM^#LPfy`7eY~%S(YVf;)5qeI!UbevCp>NCqy6;nA0S!CKCYB+8Cvx zznx{StfjibKt)OsCB|51fe=J&u&7ZhB~i@J9E3fGz(Fe&6IG(}!X$>BBc+T|MO8+i z&|sVeV-P_=rIhzhkVt6-=)IQ^1Zw(uoc_mY4IpZzPY@XtDG>?GbY!)71Tng;X@rEZgQ2*FuMq*48goI6 z6oam0pz)QcJu71VLmTQBf(VDmM~!KnElL$}B59HgTgQ!)qhk~iAtXd%7GY_+_{L}u zm4FBbXdSsuw0T{Hd~=|!zaKVU8}V#lTt5YfG=MM%QW(L|PK$kPGwMP=P2^{%6$L>t z0MZ-udV^HNYXBoiA_&AlK|qP9I%61PL@ThwPQHrpY6v!j5IhUlk-vnolV$({h}I-^ zdRv59Vj^0NEJUvlh?iW~qJmGEVj@zk;-NW@go3EzP^xJe1QA$5>$MdN_#=R<=Hf-g zbgcmlERFNGk6h(0&qBDiUTY2*gam~DI7gA9qN#Us1mvDWI;%LT+os$NUPMXGIk+MNR+suEO7Fe4(PBKVAPJ*~CAs$P14 zD2A~iGIkQ(Bk3U?aF>HXc#KKWD2JQbNaOA(BA|4@NbW1-a75b8qh6-@SbCtReySMxi#^VREpSA0E!HUcG2tp7s#MR36^G@!rd?zJBxe zy(Ar;+1h&HsdJl~8)=$aYom+x&hBJkVR2<;A$ZGdiGVo(QZs;zdnQV-q!5TurF)b4 z?*4T1%*LX!WK8AQ^ah}kcW&J5X}Nsi{Py;?N|JtmaPR)M2rZ6>yx}mybwvjAAI2l1V{bxucc!f3K1!XKDa95Z@>AyfAkx_bL-7Lp6l25-#s`u$c*V_ zJqhfsb>7DcqjEN{DlY+v)_Nn8BuMDIcfrTvxvZ+gaxMtt!EhlP=pYkU5+DgU?A;2*0jgm}6a%bbM;W-3h=Y3I?M5K@uk|K(tiP)b6 z<{0PenM+r-Cm~Mx;><8s_5dIfd9olOKr>ww5fzUWCDPX~^gQ-rxPz z=bwH8e2(a=swj$F69;dZc{VQ>msYXg$NgP9o9+nxvu}Qj^7-HTxt}Rq_41o{{@@$m zfAxE>pV=7x&AKP1G%$=+z# zOH)0a9PaJy*x=XK*Q?Tg^~G;}{oAkfhl@Y`$qzmKRD2>G->JhOi3);q6XxitLcfB7?u!{K+|c=P^#{`SqC z_ijznbo}1IoxPoTX5fX7U-|6EuNMc09NhT}XV0EJe{isW`}W-n=PxcUElv)0R~J{g z3U9x2!~M7X||*zL-xY)9G|p>a2HRtfasB#=YVn{nkIJ=G*`3&wOTUeR0ss z4kqr`|BpZT`dfR2^*!=0JoWgcOPjXZ`^nEfzqv3l;&*oUw)YO7dFDe(Cn7i+FO+39 z9uGtC!P_r?>5B&kdlxTWxP5o$^0miq-M#tJcW;nh$tyoA_UAJ^@h0u8yn1MOIf6NxG zswzzqb{-J5*7LF;MM;_(24De2-g_2NO1a>nX|1EPK=g7|`dG{gGbd@UI~$K^OH6!h zO%`K+eq!n4;M?}5yD)Z>AY!~Cb(B-_9C}~F=rSb;^NepWHF1U@+}f570nW+ily5hR1+uU_1I{=-i$ zWl0ZVm?gthjYgyKc--&z(=<(z1c?YKy5w?TSJ`=(&XI|S5ic?Dstb6BMCn#qc!KKE(tnO_E`$@`DKv(o z@IIVPPdxb>U;4_U2J;a^;V+@;;lw%%r)?BP0wQ!k1Zf=?+dC?b)S%H8Hvc$^kw8Qu zg-C(hB%#(73={!Kh`F!Pe=!7ysE`zpfJp7-fORAcDMG2GSTXge#u@_yM4>Mq&2dFg zQ=2!@0t%Y2vvCp;GAKb*q}G>48!L;?J#$SMl|%vsl7iq3fDE(2lgrCxK1W1t5=0Ix zUhK;1Xk&B5xsnun=TWLu>kmD7{_)4oRNiTm7;UH$X7=71qr7*lyp5GKA_AY)cv9i=!udc3EmP7EQ zsAsacJyd0}I2vwku3B5TvWmR5oJUojy@Ze?X_6#D7+e4mYzno&p{lAD$!e|aYr-%h z5Jv7$^k0n1h}IyjOT7lDb>qTqdRzVVF))V;R0@^lG%Kup|IPQ-7VOXd^iN&BaNcOD zYzU#+-`^h&`bhZZ8*eM6SC-ec(i+oBB{|_AeB+z{?Du~E7k>QnS&|*(llAqLa&|DE z>^}43&o2x|!jz?>*=!QLC^A)5frv(|6{cJJPOMbz(QL5hUr;P7xV>4kFtaCc{= zuLQ&-W;h&%;FB~pCPTz5%Yyesk%!=Qk_G|N$@<#b!Op!*!{oOoowtds;!lEm9Gmf#US==QE6QdLz5 zAx%>eNs=Tg=Zie&H0}1=Aq3xHp0_mnXj3AABdJW_v zsEIY+>O^VOC#vzf7+{pI=P!ou!uAs2i*434>JNhaR^aOe9YDnfPfc<{ZTK;6c|*|Ip;*o zL9G9zAr!>(QUANX02)GZN4RlxNu0_xKmid3k(!fRvqWnKj|fHm%ZXRkZ`&0RHh&Kh z;~UnvJyGkv7<=`OL)j^yrCZs825Gen3NSVS9lWL$I~;ZI9J`DYXu|3K|8(fd=`_j{ zg;w`MZPB_e_vdtd@@NG92vB(RctAgZZ8#)$kp+l0vBx*X)|s(wE#Wk6p-zjSRvQ5T ztQ6JZNpdu3ZSp8(?uL)ZkU!)jA37u z^NeZ;QWXZ#@fU%FBfC=@V*n|H;B9G))`}3pB-&b=5^=CqsIE6ohz zD?()N0nynC0J02d2M7Ue1O}kL%#pu^!~p<2*RJ|1MV_WnK_WZd${w@|KP>% zeEaplsdM&Vx{u7`g~cREilPX@f)GHWQGMl{u%u~{XpMv%goS|+BQKz;Dr=Qe!>pGo z?XB}1;!M){V7(WSMCqi7wLi+rRmuk+LO=nHgaQ!{iwvvQd@g3}wPN+CDv#Riz+5MB zu>=ksLfMh|To{c+$@bEYUU zCR<)!(;5#C4@oJlGp)2zsFVvvtvqv)|vwgOE@m7 zkKT>Zp&(ZI5!#C;h(r|48l7{Yp}WWCFj^!+9WZeu=8rS~G)be;e0g%%(PA+(YTrIZ{u zt80x~+aQB>|LxkTbPv8==j*T!rHnE0Y`4;t_T^0gWQ}G=f8GnGK-}~7a z*@u2+))t53p3)&0LPZpFOpb9SfP^6;03z6ARv>dXDFIOcB~ILc1XQG&;gRic-T5;^ zUF^n_7Vob6c4l)I1u!jUhL92I==mjwWYqDR@0oq zMWCdUnhY^!5?U9=7NBXJAWs7UaNLgZ7;U8EDE}}^g%dHQf2=9vBTV5Dpz!GNVA?a* zn%fxA2v7&go`S<0#PA6BRSi1YfTT#EsfI@*(8$6`bCI|swBb$o;3R;s=geWZ@ zKvdf^D5Zpuh!{jcppM?5;r<0Yjv&YpGl5!vV~iGPovaBLJP~PygajbbeTIVop^oY- z1O_%n1<#2|JO=;_))|wqXQjXxD$4=^jY-&>Xz~EU;+cRF)C`P-iPDJT*#m-#cm=SE z0E|4?tv`rpR3d`RniLU8s6Z(sK!H$m`vJ59U<6W117cL4A|}B_V+IU9ASz{y01&X& z+Igo$2K}L(=SFD&blxF?NmA=VlJugfrHDk6&H%lW3>Oha7y@gpNGV%YL?obtcmZS% zS(=0poVD?5XeS}w`>HC_EQ!q%qA&-RK+2@4j$z9Rl){?-f+7lmq97bFNUVVXu&#vi z+01B#wU;P!@CcYDrp98liiRBzBjh7uzu%9A@B5_apC;7(2wV3bD0%o7)}sIL0ZV^o zJ8`SUjpHU}zJDQ&oPbU{iu~p_;r7%Xd*jfR>?4i0zc^ZDZ9l2NHJTc6Ko`+@ziKa9qcfH54+YOVW& z(aqcUwhFtlv^c9=V$8fK{^|ewMfvO}o`3G6%gal-&@&O9;cT%gg4%~ zJ)c($Dk9F6trYf(qUeo!PhNlg)$iW8bLZAi{Y#%54F~gseEa_Pn{T{}{pG~aC{4=B zW~tdfv|b|8&EEU%?d|z0ZEal`3`60hKNyZjX#(cl+R`w?+4Nv>u zMP60q@A%F?JRa_6i`k}8G>NLX1~SXmnX(bw*j*EiEk zNm1S#F0E{A4kb9pvbeZ7==WBZ`)R7fe3u0ilU%#JHSQ)yfdEFc0cmoNA^c+uMq3OZlq}Q^3bv{;*)`+ zv0&(uBaZPGjyp#}$Me5AP6mP21o2^PxbBA)=BPdBqN@+H=x!wsHC+x>djYg5q(|*& z*Z1-LJeZdk7dBTGh6VsQV!Q2q(P7fnqb?B;24-Of5EO<`=Oi@TTL40e^$&IE1hpKp z?&Jl93G2lkSOi3A-J!z>BB;i2q~@L;aUB|Rg0vQA4JgyNP6U?j3-Ez*W zgZQ*V#~3IXf6`v&2-p%J8lwZ`Q*50R*%0;hd<^NtMyD75PzaDDI>O%V>ZuSEh*AU% z*i1+|P2wLSz*uv{1tYpG1Q1e6At*Vfi)-x>PIxE?sm@PpKmi&eK#Wra!n794NdN?- z5Um}NjL}+a>#P84MM^LRRmNQ^1ZE)uO%Q^!y{yMf>=98&D~_r_APJ~Q2eB>xv##tV z)TX{lM?sk)6~uSXfBZBdo^Tc)yi#Peu3S)xIIu}HFtf0?l`)1zyt7IhLWm|t@nfQ3 zRCjpC(VQWKpb$}EnNN)B0Y;Cg2(SdBHM3MzWfFym!MQ9;ojpRB8aE_x!lboj4z5y4 z1rhP0C<(y*h_3Rm??snHr39Q$bA#Ud{F%Gw~Dr0Jm7*Q9D|F|8zG4bC!1FG+hQQKSM$OTcDk z=UwG&N;*x_MCrgBnhxJO#~i&5j$Mrs(YDw-)s|ZjIC$@+skU46q_Y6FL#-ov!f`IK zB$RmeNTShRICtUVxut$mo;$M^T!q0;r-#A&EX{gZZ=RRAwZrjvWp#CVY1yLt&iCJZ z@5WnCU%5KUmh;)c(&Fm9JNJ!IpZxfTMw!{!-4)<|Z>UrPs1O5U%n=M(VnPUcF+H5@ zYMm^Mh&gDTD5Z)#56rz@@BZ%Y&F#shi+*`g6u{=%iV`U+cmC3)&8>5@$$_nGSrkj- zk+_=_u$L@U6%uOefvT{xy}!SAINs=+L?epx<+Us4KJomA4<@tKrBRh1_^Qe$vn1)w zJbdr<*Pnal@m{~5rN-KM+DJ%3;PH68xwfK!jW$HuXuZC&Fx(n!EG^}Q-Jj0(4}!DW zhdKMw`4WJP!PV6zlb|-qq^Mqds$Qb z-J!ZtDk_6cs>GSGv5M%2v~Vgku|0=v&_jzEwJ1aDQW5{N{we{iwM3XC zNh|4Z$qwDwdtC&wZx1qJPw=4F1vq7JaI_H%9GLe0c@aR!Lx^BAANNbV!M7`c(?$D$S)wBXU#+Xv1;iM@ech|}mh;7|; z;-4mA0*+Nj>n=k^F*C5lWwQ2VR5hR*e7y-Ntl#u#3lV6R)*~*T2kc_NT}ZNicLV_N zuF^^=lLnvwNIFp}aW<5}8)5+<5s*NDo~54K1NMf)*>v95LsAIH)>^GI1jAItk&af0 zro@#MGm^p>gw7n8Ly{y)D~%9B@IDxA2+3MUx~1VARUTQdm*+E0%9zAfC5jl607zNc z#3&!UQA)Iqby$*S2xOf@#W506M3OYEsw(CK^|O9etCu=4>6{VYCk7nFEq? z&JP9y79Y=CRTU{^CuRtafpo&mK$Mu&IcE~%06{Oj8VXLXX~e2m9xKdjBJ2Qv4|qrhfQeYYDfJfPMS+?XSQ1^37X& zf=VD*TTJJN!_lap_U1*-&TC^F2Vh36Tvb+8)l0J^N#d#zI8dD$!`9lWs=%l;%Z%12 zBEm!@guw^vUDP{78a5$$_Kh($)@3xJF{YPh3eefgOCVK8mqkErfLGjj|H(&nlOII$Q`}Ff4`|e9`3fAG zcJ}9!!-b{AEbWUx@Bt}gS(atlY&sjHt4NW#UMV7@RU}A9$~qA$t#918dGp>rCB5LK zm!+34oV$GS++Y2vPk#2tfAU~=yRfz_3L?6F>t>3cZE@?ye!yfpE6OTlJ@eXYuRncd z_2T+wp3ihY0rZKM>yKSJn9he8Y8Av62z>eSmEZi`Kbp_;$$ajD3*I4Ok|etalPq0W zUtfOgvB#Ddl(nHnw2deL03ZNKL_t)X&!&fm!tTa9#gmuU4iEJ9#BCquv#C1V-CtYM z3fQ?aNs@U!U0GT6!4^ev>;Cquuitp@&g`)(m#NEjmh(~H zkTJ`Pql5YU-MxJ0?%SXI&=ZfH+j{55>x$Ikc=g)lD+lfl0QZ#y)I_+pvINy$QI?(+ zDU~EfAZV?Sa59;E^{aoB{Mg5@Uw>i-g?Bt0jYs1pQd(&ojuz&wxO4AymG*>mk|Y4o z>kX9F^Z7hU`${Y4T-xttSyovax8r*KL}KQ^Y^_y9(I_E?j3h~7jM>{gaL&bPc5Fwf zp)*8*Tf7sEF-4w>NSda-GzEaNEV^x88$}QyiO94kBCT}rK3?JR24v>6m&N~Vdy*J% z7!?`qj2(_g(8b0Y75e(d!I&D$4KX1!jwH-1J~SM7F-8kWQB^}@5YY!8J3fkhzzzba zlro@Qhkej8{7>AB-MoOP4QZSjkD&}&n_#9p$Iu>(HYejSyLZzO8wKc;uf%CU0klp|HtMx0L{vs&WH2aD zCvgEJ0c_1p;x$IvoVY=b+XglN+qpaHix9AD|KDKra{5|&;J+U|9svrE9zTGgfFfKQ zsW#g0?u1{(MW;zV*QA&O2j4Q*;*F{y)XROHFpMIE0#rlYk%bOq{Xi#5DOAKFL70e0 zkq?28VoB|VrKoCvoR9&C02OErA^}i(X>Dt)l#Xiw*2DLjLPd4ANeBc0S`i+{UfcGt zF$!i7P^t$=z+{LFfH;TVCrU|l)7J?i0iqY7gxWnS6vZIXKvfVxP}=lkVWYr+K(tQ} zp^S_GLeiQ}$cOxo?F-D|6&RHy~eIsr;u03Z(lNt$>8P{y_G zu~vZvAdsRE0#G!9LmL8WKtu!Rsv>@~ETBwQc@V6N4;L6wMb%4c6fhGI1P}m2J!#a8 zEw@b(0K0aUVF(~tjRXiBtWqcd0YIa{81F}MXNz))=#fF7$OS-^SSN@HGboin1WZgNH{9oN)KS zu8g9ll<gx0&#**+=*1d2-MEC-_$Fn9>06??H|CCpkW1*B0C5@QraAPN{lWpw472rEJn zHcCbCqDvfO5axO+3#gD#lZpW(6#cJ=$S99kS;r18UfTG`m9rmuY<++l8Oq8|i*kE= zdobve(Fe0VsO;yTetvyvV?I6HpHE(V>-B~4na@7^gkEAm4hDvh|kvs+g4wS}Gn zSXx}k^ZCL+KK0z0k6*hwfA7wndvEN|_6sN5JLOwA>zsh!O~)qB%`dj zat1fja@SV-^WIm#bw_Yu2I-r34qtz}8V=ucq6!-_jn7hY@=GIK*~na)e2d*gmumUexW&#Y`-y>RyX z-?MMM`3_UBg8l$>Uk8x;S2y&HTk}bttS{rrFhKy(dRk7w6k6*fQ-l6kQ*U};-+lY` z%iq4gvi$DHUI<9Cx;%XDnd{3-8>_=X;Badv{O`a0#iDZ8E^MtYtWMLkpUJ|a-aD8= z@B|uIlQ#2NIi1f0z-XN%i8wFJmGj1E#GtkI&c#&7Xp38VyFWc-9|H5-Re(59y;N%g z#DrfC{`Y(%VV2>?jwtW!#*y)=YC zfTUFP4gkX3Rnc(?5%WB6O$1phV@#H1rL71wYN)JFbv=-e3?mdEW$LIqBoL`8OGKiS z0HD^+RuG^mg(w8iK_ZL6xf;bFqSnRG=#0=*Rmp*oDDDhx=N!#n+p4MKQ7$ZT9SW99xF$FlK|d134x4JjjwHFFKT1r z0XrLF<#LMSaIAlB#Suzr7T**FJRIu_D@zN`7&WqrL5abjOiyV8NGudMeqIDc0>DU2 z$^&`<>s;xaB|V93AI*4h`}`{ss^uAFAafx@X`H@nF9(b2rR%v7&$MG2n&w@g}>bAT5AywAw;r3oQkz1xAuln+H@&@()hTZ5bL(=gBD8$ ziKdLPnU8BaDLM+2Q7Zln5cmXFq9HXL_4N{$Nlfb zN&ON0xzpe2pV^@P12@tqM1T)_`3Kvm{zRIB9}t4|7Yigk`d zM+12ud{Gp^2i=&TwO>IT9R&{Utg__{*H}PP8^sxBoB+%5N4xw)E%J#^&CLV5vY#%( z($PCWqfZ5t;h?v^G(LA`)p+_^!oUzJtG{{GH( zIW1p!<|9dx&1~g$a_Br*KUx@1CWn>vAZB54AyU)B@wNzuEwoOYdxJz`~7S@lzBOKb_kH9 zy*~3nRaJ>j&Yj!n^#{}30^=Ju?(ghuuWc?~zjnsvOZ#`rckkXQ9Z%-7C$3%m>}P)L z$xCbZ@7}2PtjepRD2t*vL}BK&fqv{0&wlj7Prm)uJOAW&zr4Hu^-=G+%jeD}iQ&LI z`+LhvOF`VnpS?WHlI3xB>B0+dymjL+FW-FYem_YFlHh1#ZTa@y>BJSQtLv+43j)FD z#OUl`Rw@m{-mu>v2bMH57cQRp8~?`VZ@zbDd;9Ln>LQZ#`srxguUxgWv$wx{Sj_}T zFE6e2MsCP~KQ1s3CcAVrbb?7X+uT5CsXkC+L-2Ol^jNdmEDZGu$Fvh?0# zJ+8!7P@o#Be=GF!-g~HD8=oX1P_?;Wp6BseO_GG6?$smZAqE2(qoI>5*i;5B8M{uK zu3dGT^oP1K>0b5#AQD+=aAbOq5?vLXYh6)^$XiE|AQ52;W+y%#Pi(W5Qc7v>%Nj0e z-ZOFmy8E>>W_3ptq2mUP?dGMla#h7lX_}Hsy!Vlq)U~odA^Y#r_2ay~-8i&1@l}y0 z5)C2=skJkBU;)rRQ{y9zKSlgTPUleQMwuU%CBn1oD@)^n zF@yq0h@?m<=qMV9gjs^H5@6=wgZJLM;C=ASN8w*01fZi#m_u|x&?HQ=(Ij_NGLlRFFW?bd4I{ zHH@K~0gyl|sILm@?qmqHfmz4M01?0k?oLerKxri{R$hZO=tASl*<9+_+~eKdGDOQF z0f88jA<=z-q4lneK*zDj$p=U$PE}KX(JQ4#fWo84kMco8G0wNc-a*?j>m&nY|nY z0JVxb)~c$!b)&4G7(+x=Re5HubrdX=Wf`Y-vEMi`7IWTtcZ3(TA@D@Rp;i}1K%u25 zKhQtIJJ))V#QEDP>MwL{$s>Nz-Vtr9sdD78Wk1iBh=_Jm{yrUN7p{nY~IA zM5;iP0<9B5s;XRRC8gwfzA#=E!F*mgUlFN|^^H4sZ#&PQ`ozam0_ITK>ehR=mex1s z#bozjn-v`#mf!jAJ1>3r?Zk|dz9}lVKbe+Z(%v8loL^m97(t?u*-d8?P@?LwaOn33 z-g^-|I5^nb-MxD0g2KtyzWJ>@Pkb2IfO%DM?v|HEYpbihVX{9f?%&Q|{r>IX-G!}% zD_aW~#)pGkr@g!P@2xHmuV2~f_dx03gPYGvndU^w=p;$f!C-W8ZLqPvGSG7M(%CP3 z;U~WOjo03J=jPf%Z@geQ!0!G*K(UoQx3)a&_wU|*Pr=eho_=ii;LsKJdvD&lq4w5R z20a7AKFxv&k}oXwy|><%RmJ!39gN3|XE)aSy`fS%%S>g>lTTf_aPdNA^QuaUV(NWW zRe4^{4rdc!+S<5q=idFvq}WdP^J1=blB9i}IRO$Nk$O6prYScH#M%KtQLrIKinPv) zaey2t@kVK*4JqOfu)hC7S=F~gRaHe%AR;BEJA8(y$L?q_>#PT=1p=yJ-?RdXsAZ@t z4XCjpiE0IGT zP>QUz@sNCDiP}adwAz7o%pSRn4VO$F2HAJlc_LC;K~zA9@0ww^9ddX4K%^SalyCx9 zjTl57m)M|?(f^`b6vf|Z&qh1fIm+f}7LX_^>FNbepd0O)(|)w}yY9wPc7N1W!gpWZ z)_B4DXe9_D)bI=bq%}`>g3_Hr$3Lm)SkNPf04Ss)Y0)zW0Dhl=&=@<{CJ9Z1jW&;8 z+}c`M=o8!E5Co7Av;eYTU?2tzARbP=@SdIb)_WI15D-8Cj_hBJ2#Qbv0w}^5 zJ7x$JArWbc^n=<7iU>fkai0K0O^7N=lPF>b3<0xSLhv-f6AmK;}_*jd~o z;x4&oWo2zBpb9HNve|6)O4`_rrbp6950aUl^c(a?^jq|z7n#XqrU#iuYE3sqvI(+@ zCiX(DS(W?UBEsFz(Zh*|jJ%muD1cxOX{>87SfP-4Z`@ei&-u=`I6z=xo6?zQX?MoD zs}`m4kL>9(FeQ;D;}Z}`l>iztj8n64+>lL8z>SZRqX7`m6wE6|; zu?(1*Q>?qa9J(Y3((`|V*sQ`$OMHeH5E&hh2-%@S0^|NQj3XPJ@nwKQ!yC7%7y;RF zpD1BJ*};hYOb2MAe4({qSlV6stHYVS0?@^Ms7bVHnF|ff0$+oD@Ep`&DO>};8RU8K zXqVuCet;0XQ1pIowENBJ6)$30VBf%~Whi_l*zpZo;;-Mw{!8o%mtEZ7?dN_2^TI#e z*Agwoyqs!*FP=R8*{?o&`1B}6G?CP7Hmj=26vFfQJfxURbE{g%5M%Vjqhet6U`-+x zh)pC(qPf-+7gb+;wYI3xC`}J}*8SP%*+1Z&*XGKvE z!EiV{IXRgx=EKoIREnZFI5>Fxc;xX$>Hbs?rm-Em>JID;nCLC=GCiL zr_N7t)qPO>Ahe6`jgk+cZ$5tV`G>#x zDD%8|Wg{frKRiA;e72SiNd-Ygk`lxaQ;c;TrqijaBJ#<}$(8MGgu(1IzV*gVv6`Kn zo=j$C1a(ZAb0^2Avr{-a*nfObPG{l9&E1>3I~YS~fbw*)nAh>(-b3&GYr8ks zMjHq20_LCdXwtS{W3olp^HW zDDwkmpZT0frqh$7qh~+(!QXuF%U{&>TqI?gPbsafuboWipZxt#XD2~Ze71MExjFjP zuRfeD7OogA%1VKq%QZD40VXV~ikY)41A){e6tE&lRdxO#-5B3U1f2O8Vw4m)20+d! z&vU~ax?zLQGJ~1A``kG;o5sFnLz~DT7E+jHnT;#^)@beKrWVI2O#`CltYj4ZJkP!N zmZJgYz^s1o#wn_?gK4i;;b!A ztq*X|uYQ@BwzT}Fl-Rj$iRj!=`lAth4?6%mXV~}!$dVa>d8`;N%$7~^@JuVI$F70#7R&)Kn-imN5-zH^gj zD@@PFaC8f%5NVsRDCUUxwF@9YBuhBRi}8*1mDS8SsUi?IDGjWOA|Qe(spXV|f`D-r zAc-nK60MRZb7WK{5C$c*qzq@3D>FGyIU@mf?g`kcdfO9bNE+JzH%HZs9W#R_L?vQI zWF-4V^ByNg$BbxF&`d;9ibhFE4g8d~jRT6R3Pceh1aK*dst_SF*C7Fbv^k#b)$dV_Ym2(pp1V2LcFLmgPQU zBvnWvqJl(GB&1l^6(bFcVvyycYLSgT&qZWWmDXbvd116?YX+=x6;%@+ciH36a*3Nd z8^Da{p=Wb#{Z*gj+^)=>Ti7}F@0rusg{Go;PdV>gon$eaKY28N@3kvGc>f(qwUN6; zq$u*LDs8YFLa0hYpPihX%**oG{(c?myLWGCD(kS=+k3qCBwpSH}lOxyv`#R#(Qw_1%pOkLITv*KfSGvbMQ*c=U^3 zPWK<*|H0dTx;ichb#--h5v#-5X+0?cu&S)d%-7e~eU6jUa%XGk{mpp__a2`f@_MYy~7HMATjm@1wR)`=_HkpO0PSeS3 zZF9J_J*+}3@?x0B>(|!5_~*sWm0QJNkWvaU3#AD~P3EixiW2<8qzMA$9`1`~8r`3_9!^i!Q>gFyzWIv5Pln0R)J4=8C6gw8(uiucp*p=^j&$y1y_Kp;iP1X%r=>qREO=Bqarb1j2~vLV`oz+M}<& z>GwyC{r0Ok$yb2FtC#TrJL+6aiA0FJEu^X%qo}6LV?QJr04(XIU%aX+F?8{c%;rD@ z2-@f)Tni|7PRo``L%1aSZ=ciD#O5M2fxSqQ8uX#BOzwl(4V94z&zmyBWh=$fS9sod zzae6@PK3>zK$kvOFESvOs8g3ho|nQ02>6vugy+q+FS4UM6X_-D!OOM5`mK-9&%7?o zPvLhtqy86reN#*UUx0tV;3K{nOz<*o{8Gr)@53_nk{49ZBS5xZJ)S)Kk3av_2mkz= zqmxNJ4_*Kes;W}e;c(cvwMmmDBdT?%%ewMe=9tlFrz)Z%swkoeQKYKt%x8I)L#y-Z zs0TKY%d#xXv!?TD*GvngH!inx&aCE^6VVZ@lJ08y{@U0rzgDA5OGZFMW|Alu@WJJU z4iPm;Ur}uJkf_8uy#3}ISGG1hS6kcLi*li=v)Rl(A;x%gbiBH;Y66ff^J|+MfAgas z?e1(I9_=lvaB_0+uYdfbfAhn?Ow;mUu>ioLC_v+AG!jXZ$w_NmWg!lWA#qt(CzBZ< zy!ZZhMl0j0t}~?Zc#Mei`C>j_nD^V{^jJ0SA3Qra+#lq_!simFPai&Z=-#<|cd>}S z`Rwxt_uRGh{QWns7vq7;Fs-<^U)z~(u3x#bZEXTEFt8-?-k+SD&gYBUw{NRzQ4}tN zG|=shah4~|e8lm8`1?;>=0($VI?b4q(yW5PcyMKFZ8n?z^rsIO)oidzixi>B(fVy1ucxhCoM0N8c%i!(zBt%<8&6T%_so@mud^0LqM{VQqCd82GL2 z&FQ>;uy_2)rw^+-`^)cK=S&7`#rn?rqi6Sr9s%O@>+7SH@q95oJvsG`d{#Vu^lSi| zlbj33>@Y7l&j~RSYm!(ls;W$xABLdYn^!;n=%dMGdT?+^m_2x~7ef7`AOG3r=2jWz z`Kb8#^M@&k&oTw9V$4}Zp{|3fbku_;DS#CbLySozX(Q4x`hbn)&1)meGWMQ`7=ekb zD{hkO+g-aEQ}noj*4}r`#L;JQFZU!w~rIBKkyDvYD!aR@j|H65e~H+j z`BFHc+d0m5G*xo0TXOCHc1M1Gb=AH$q;sZ#^I3*3wR1JY5>?PF^E*2`8^dDYNf82& zCKN$nR7F(;MU_T~V4hcIlP-X&XyJ+}NleM6?}UPcY_12Oi0GKSBZ6S|7>C};BO)YcNCXlaGr1vdcw*|pAne;Pk#~6m33Gad|6)&v@iqj2 zfK`DSa6?f0_5bp`@G?c}D+7gBfWoU6^lNTt2~k8%bJwVad+skuK+RlS1yNB!1+~TF zI|>|X>gtA;rYmO*JwQv&C8kDHCV~KrJ=_$4IwzqN6_nTn49)X@CK)`_JH<{hVLtD+ zQ4%(vXdJ3W_|T#l&C*5MnM6SANxR(tBTD z<5_N@`ag7r@t%(rcqw?|c^Zc$<@U=rnF4}6Y^1gKg=mp%7R*q@q4x)m9)Tydt{n6)7fB8?J9v)8S(>VcUgTW${h&UV$ ziK(orkRlL5N{CpeP^ZYmL-roYAcmC0JfBpxhE&&;2O6?>NJg~DkON2+LlvqhiM-35 zCjrsaayG#TSrK%R0um0hEJyavEfyuV!$SZFDTWl$Y|@bsz!4*0!zrMqa}d=CVzN>K zbi|AtB%K+$m|k2O;)OGW71;p=ZiKWV7A#Lh4r07{WBcv5UIU3++gqbNU(BavS=DvD zzP4)Fw=v4f%KFB5Je{51+k3jbb7ieqoj!Yzt*`Ap-5YxU-S^)o(&K6}o6nsqyernO zuB@)CF3J*BR!3{YY*f|LlosCS%tZD6o7+22PiG%}x%cexeo8dTS9dnu z+BjcdT_26cB8iDs2CEg6h@53P5hGHb=OL6;y`W51^MT6?!tAfVd-MPK^?r;s68M~< zk|EO|bFrKr&+7eW$C}c$;o!#3jn}vHt(}c*!1MX+==5;BKN=2PF)D_`;jqZ7avrLw z&tU)fq@FD@?-^umWmxT`K>>=j%kYiYc25rv_n#i!d$=EyXn8U!XnW_zFFyFi&7FZ# zaea6F?v3q({ezp=S5Kc#)*KF2u73IXm#Y{z*4C>?Sw^0{;{qj;sK$8+wE}q$sV*m{ zh*=KluLk_V&+y{%JXz4_8))d3JboS`0>^OewPDT!-Lu@0eR0t)VB! zl&ZQ;)~h0D%L*=v!rD%wDvXK&03=CCC8Vf8Igw*BE`arrswy#>yBje1EJFYbYwR`Q zNJJ@0N95^R!IaW)I24h^V$n>S(G=%EM6O|~Bk5T$Z9$cUt!kr*g#t;Un4%;HK+dI< znt?=5B5qBxA`l}3A!1U2BmzoA>|E#Ym{Jqj;F`D6c2M7H@`3vheSeWO(7|Yq(41W* zq%QebLCA(LgsLh@BncuBvZW+KujfH#Rcb*2RF!rfBwcN0^au0Iwjc(pf|f=gjYa=? z$$(w%uJdoyRXzL3UgO;is7IV#A7bp@yz3a7d`(q6%TqM+g<4CfngppS z3r!uXUBS1!kE^Pr#4VkqOVeD6t6bXtRD{VJL*}eJxO{tC+Q$_^8Ipnu6{#WBFk3CE~6bl0fmurbi@r^nC&vEFd;KjLuW%~CI-X&w87#GTRF>6FpUF;hPz?D z1uB39!WhZe$&d&F06G_X8SBfSFc0m&_t37WJMA2w|dn0q&2Cm29fkfyKKbIby? zwV~V2Q3-*1QNkdta{-*m2Z37f9srRPxKXBQ+el;AgSD^#P}AsQLV{MwX37jeIA=@< zh=RtuI1^CF`9XvYDqkRKc(G06(&YKYriqtw8SI<&`qj%j?H8~lF3dLd(s}sT8(Cvx zkkQ*@TQ~@tv$otCE_e3NYa!uzjW=GVi+O3<#0!`o=NJVq(JBL;%Y(Fu=wy$-`UVL+Y`<}*n4nk4rO6v1h^D<0KFWfE)f(VX0ii+r>D!+Ji?7K0HWm$N#AUI<%#Ze;0qV7@SIhnR{fCd$`P0SX>dw`iY46$I zd^Rh~YBCqz6fRz}5OI;&BYkp@}e*&$#Eb&Pdc%@=hU z>iXdLB&IaVM;q(AA3l7x`1oEi(8*$P`}MomHpZvnR1lf`>#tuQA?OUJA?+PbQ;942 zV0$CqT3^}T+(x7jssvQ{AqZ}4Y^Ib#h|amXuIs8K1oS*PInC<0J}Ca;d#`=Am#S(q zUL7gvqFU6YAjMf(2F&vD7)4Sgi^G|$`iBqqaOfA+Vm6&`jAshEy1sJl`tGnOs&bB) zqQ;P5Fc_a6PqsJ4JKLL+vVye8vSP8QhK}EUefQbHae7w8#JNwaqv0p_4?p_+U~PPD zXFDGcv)ems&kpzV@lBQ4t?eOlt^$S6zxd+*V109YYb;SEQK%{j;q>I_=;+W7)*ORp z91mAM{Nw{S82xA8yL)YScWYx#r}O-^Umx7M!iY<=FLQ7ec^nrNYnXbJQ`YmnOF2_0V1-=x~FV~WvEJ;@Sd zr<(w!CLvn{0GVCax-d~^B`7JWD)qv=RZT~b8HYkzBMj$U3{lS0yz#tubr&abaWAk8 zMWbc)t!FzsDmw#q?OMZ23aL&KiJLNUDeJKlN|*;tCmHLBBhJDyupyqF#o3ruA2yKk zC6f{nfeXU1i)B?mUBZx_ltgT*_Oe)c1I;KT5EV$7AH09}_K)Acv%NlyDWNzgm@7mj zh187Ihzu2JzL6aUqFC^1JO8j<60{9uKw%)yP&h2O@hl@k&&15m%J1f)6H-eVM)FF; zR^)?o#7v~fZSYVVvc~N2qO)cnX0kuH)*+?mK+LMF+NBgxE*zQw_Ol-|pY?+&~C$LM!TfOp+W$pW`DK+<%|y1{za4E z2x{?B++g39@6Z6vBIo=IdV5KOLAJXZUlMXA+U-~^InAtIvBNlw&9KCvvjrI&HUtuq zw%)f^y4xq7q1zp<0hjnMUNlPhR>lwyqKyc~F+=XqY_F~ksRMk2td5<-X}5K_*rB@FdO7NB*Cb*Md2?mZwX zVjXH@86-)nirVxoE!VWsEiV=e=Uhicl9WOSmgwD>pEdkn>=(q%z>oj{Q%cSeAjX)2 zeW>|m3y264?rg2>Y_6@Zjjye5ktR(FZ3>1JdBfpw&HHjb53^Ya>H6mG*bk28PY+}8 z^C=C7qm`Aqt`GMQESxOMGVcaQHAX(y9OU5Aa04WDs&IA=!hGqv<`tO!C? z&&wE|9-TgUc6j}bch_>{+->Y!{p=t9>E6SK&-Rc0)!%&o)@xU#Itg_|g4b`|kucn= z4;~$y9G}*qLXBab%9E26!i_A?tacR;i`CfJ*r=*%I-M3p5kiQu9uCK85uZMOw6&Fw zH?z?&yL)Tr$&(c8xIZfoj~A+LSY%NP?{lAJ8tYJ(kN5U99xsBr!59z+4qv-D2vH@* zo$c)`chl)&ILu;%GBC4*0I`aL@o<#oi+QL^N>ICTK@N)oZrxbTvLR@x;y(WP-m|AC z0Iz30)0jpBcj^HWZf~t$yLS73{@?%ZdpB2hZ(jR{|L7V_nx>!|%P1Wi5)%xw5Vrqr{ZBo!i?DT-SA$Wl=>dh%pi%A$#Y1 zmURPadw=ho-QjjfZAJja7_E)BZZpNyjWJS6gp7!ir1Sr?_oO_tKcf+_C3)uugF)N* zL-&V{^WWG*LIb84jN-iqL?Q$|(>j@jguxK~RF@|7u5GuPHy6EF0xhk#OcYybfC)GH zj)q+v#!_ly^EWCecyUnC|M|07k!qij(b4@ zu-5xw3VmMZ#ZT{!zqjC@BV~58pL3MP%Sd*%FfMsupOZ64WBX#aR(H-{$aZ}0OhLGy zjA2o4Y-T_D!8`B1zN^(75VM>FRar?e3M4{yjE)slKphdb+K>)m@7wgA8RBR%r9*7GdbrRqs{+17|tXu9i_$ov-244rO3;9 zuXIBVsFTmMk_7N)x)QJ`3xzyMGib8>6zBa#Kp~}s04b_?hiGx~+;Mpt?S-gQjx8HV zL;^-fSri~-Qca4OA~HwOq>wQp0yg@KB)a?Qf|m*bE^qXIN9Up6)qXWE0O0rAfahO2MdG*Q zN3|==*QY;dE23!yCbkY~3Q44@!~I8lpMCxqBgHDE1nh7+pU&osMY*tb&tej+nXh6r z(qqBi86N>uVp32PRKhyci>lNZvwYy3N2I6{QbI>aC{bccs_Gr*K6C8M@KZr3-CKK-lqtR$GJ1xrv z5qs~w%N_X?X3p!pj!&NL{nN)E?;lS7{IBZOLFNZuSSIu8bec}*w7Y%1$l%~)GMSdh ze022m@Bi;#>M$H0SCf;{v);LTYh%?(sOR(9)4it|979mdyDyW zeJw9A7ln|dT$KC!$8`;p)2dw5q;7qEFrDYqlljK__~hjH%P$}P`CC66uZ;3R_Tb@z z^|h7Vt!rhu$eaK=MgM5;u#6{lsEIkx{L1Qxi{hQTuM^1e@#(z>5BCm_M{BE-*=#nQ zWb9zTioTpjMJAvWqZuM}{Pyld!MEltbUE^AE~ZOaj`W3U6Os)~_2on{x}aH;8a-$2pc$9yjA{X4sX zC1pf6cJ90_L)sC6W_r9wtO~XSwFo@NL^8(Tg(vZrNud zMm61wBg)t@gLCAav)i2rJ&`6s1cv}*vFN}^lz*9v4qk z6LE=l1K4{a>zRd?5~zX@i#bL#)*I-EP|}4DB}5cbre<;}sDdEv9jl;{1c_6U5F;W8 zA_7yMRaGqtNi>QE;7H0zfN#hj52A{M+KksaQi3+rX6!JFCRF+S*u0TC00Mv* zToFx-VCFMGrj6ta!2db4q6>Z`YVDC2ff|^!7d6=mH!i0M^nH?k$AjBTn)z=FQ+V&m(aVs@=doHb6&j6`P8)_B*oCB99KyJ>KLb_A`agd786R7u7V zR#g!K&?G2YcwQYag!vbr{PW#gZ*7cMs-T3lwY6oJ#^muShPs^IfBIxRTrIL;9cm%@ z4}bTQuvq-(fBECx?cJkid)4}SovIX!1Z!Sg(c~B1_z@A!sj;jU0D{O_=5t@Dx>%(} zH9tH&JU%*xC=$}avx7UkccRWm19yFQ?Y(#2{&zq6tGC~{Ng*Kxw$%g=gy7!J3xSk*J~}v_&K6Y_9zA~c#;rk~t!-UdKc1aD*_+(BJ^ty>{xJsF z-MyaY`Sz8~&wlaGyZhJl4gjRlXjF&z^s@)Q`SgJwuANS%d7dfg=Gy8z*RJpGY)ns% z%ety+Swu+ldQkec@%Y*CL0wkp02Cy}7=rVzFDq!qZVZT+Vgv+2?k42sanKnvr<6Pw zgy@`eZT3M&G3dJD5DaZGzc*yZcK4QL*^S?udzi==_12C1_Smd3ZcG7z8r-eb`+%x- zGD|C1ci7Ikq(VqZ(-K{Oshzg^Kmd{ofdXNWBqF5Lfg>@-UIMpve{VyP{&>Ho^e=D0 zL``$u=>=j+Rx+8HV%Pb1RfoN8RaN~+?~a1eM`R2VvZuIzWknld2(%Wq9e&ZLuXkud zhho^9FKrW-0xKPt#IBb$%qY+uKlI!&`e(k+3+N4*E@va2b+(oqaA7LY&}~GZT{FQ{ z@2dUDll@AU@zEaS1vKF$v#$_9B~>B!{AcgJetT!tr7|I*0y1G#^W9`5^`3};kewrT z(v0}ezI`{;?|V-m028tmuL#s)>I7i_G}Z|SNX;L*lvN~f4HFJ+BFKm>cyY!iUXos3 zEP%Tuy_FDMG`a#CJ~qWx*CVt)olKz8&IwJ?0~g{s?W-Z1TRf_mpN0TxTSAa@SOp^@ z3IYQGD0(LXQH7HrDJ2bNtg5K048RCVn55O4yaEVb0Sd2P-{5s=y1_+T!5+s7(c}+^ zgi45xs0nl+aO|K*u4^L}&tPmsBqo7`(0vLxWB^UcJejl;7`E~R=yTpWSicQQ(=LX+ z$#sM?OTzOZ4!th|y@N5TEnwq1%hX%J@dX3v?x>(!gTAFMw?X3d92M}l!y;Y^N_c^H z!_wjX7A<{~71Te{OGoN-;cLhRImQc4%x^>M_=;b_m%R!Ie{gb%uYhk}{<^=U#AfMq zelxKDj8M~Jf%Dn)voAjX?B0XvJXDj4$(ie69YP%gIT{QGExB4#N>x?Gl!jT6d!La5 zqJSDj8=nHu5Mzi@5k`68*)vidLQDxA3qnd#$Ed2_H%XIKs4aFL36n^Sv5K{*4!rlo zq!3hsidPh{&?$&9h7^tCjct+LrLwig_-B99%=FG1xkHb{+hlPeD1ceJ#}J_ndXOZ9 zD5{QmbA9dl&c=A)Bvzv$_s;ulEU9wNnR~x6x*g-QgVUe?`k&r=`@2dkQ6C-bNzni9 z-~YGo-~A4U(y?1zUptx{IZs7V3avl)}7a`UB8+$sz_Z`gmiLpERyovudIyC zuK_XEp&EtASj=Wq=XOJU zLLfU=*1q@F^=lg=4YfoO7l}YrKmGj6Pd|U~qaXkH-Mg>F`O%|C59#S%U@wF_SGTf3 z@$B&U>gvwQa4h7Qp$zlKPad+To!zU*bTXMERW8FyW&f~R+bItx^Z6nm5@+t_?VFE} zX5;Z{jLCZj(1(wo{N|I-k0*<*;SMp+rxPOBy}Glpy{@qi)j|Y9kU9b@=UI_b$b42( z06<0vO;^@H19mHRQh6i#5!+y!Qc6WpSi1|Y8Gh5TGec;4hPtlvEbD{}omW30Ic7x= z6+l+i)Y>sx*NTYFdwXX~ofMIjB&C?=d6s2{K6vjNDh?q?N+}@|_JRhwv2)Yjx2y;I zj+Pl&*R?%X{gFPjQUy^#rp7|Tv4}<7YnN+i9Ev6qqW4Yhy!CDWI){b+!e~?WZo6;z z9X+=H`KDSsB*ohGe#LdR(ID6dbwAu4l6_O}y+r9BY99x=)TFS_Q|J^i9Zu9Kt?azD z3Y6G^I8{|OJ7bfYg&lljo-f+oKT8bROS2W0$`Z8*jq}*_l3+*LtlcKKp|3DK!=Wzl zbM<_h;LArms352)ynXl958r>gU<|S4_p)=2e8VCmaVAYL{Tx7-SV<(9x|*^NHP`jS>gkB(%$ZtvF(E`PE=JoxoaP5>n{3I(byL7{o1ni zFGuC}rjm|W-0EK%Q*=$Lppshh@g>#;q5`cYni3L0Oi09C%t~{`0hka}iBQbD5iy~N zDib(GfRq3jAT<{5t>aqzoT9b?^7x{nt@miO0d~Jjap)JDAY{eUZmsk(>!2~=@lz7Re>sz6X*h2Ts-t%j5@-H6wi$8R! zruk;yy;t?eYj`N_C5QH(FFOxB{42QW6zHq*mw!DwRaG^c%>ckC60_OtvoAjvrdxOJAi2}&+kf?MIR>Z5M9-e?pUfv$ zH?DY}<#}G$p{^?;sH?i9g?G6foA=(z*4b<}pUv6`nudccJSSC2F9ReO7&p-IbkKTX(JAd()-zAvW)j>Hu+}Uva zox8vO@c!ZHd~H;|_x7Ffc)UIyhB}DKY&K6R8tEg?v$9;w=X2E>5ng}e=Jw8&gZ({F zan2o0XQ#80h+|BU5nVjrB`C?HGR|o8{c>DD$H+R=oa?P2N z%M>K05NerBrq{3EeDAHBS2jk2-Iejm;Q#!OKR*rl-tFDnw{QFiGFAHQ(=T4Te)V`d z;mjW&>>VEN-?(|>?r1B{9-K~RWqmwe&rhba$pVgM^YPloqI`1i{{8pgTptXIyKmlI z8*VFTQ55rPaqr7}BKYoi-XE^+)^+WiTVG!v3e4XT%T!n?51)0$SI#bz(O6wyCuNPa#GXsp~rTnaiDo*l&r?%ns_x zntwt{DWw?6xjfGSz=Q_O9M4PfJ0F16Hj z0M2`M&g7q#&CxkbwWp=iu$?R5nFxp)y&nKV6OY@S{6O|A2Y*{d;; ztHYw5GOA_Osi2A`Nihnu^NtBIR#8Pj5&{yaieOjitAZ%1Qh%P>P4S+i~NrPM%VB^GMz6*EL7Py%qkOyC$mm06ilRh;ug6za-KPg_Tv zbIfNkKUP7;Sf>cicc6gUc5hCNNQMn23snZoZaG&FD3LoOCot1_UYwB^*!!Ngi_JXA z@C3p$PNSM46v>cJaLfQr+?2vu3?JcTsN{0*DwiSXOC7k`IJfpcD56Aed9Ttwa{Sd; z2J{Rm`a96lX;~U~ERi@a{y?8DaWNLLPiuT}8-H#`F{d6lhxcDP$?x;@p9gs$E>9{h znnWU^wuKfb^y|N`JYcvi-U7P`OaJdL)!Na8#Dueqv}AwWt6v7}U{I)N@i1xZ$h ze@J@dQmNQb^s7T@4m0xe(TP9F5%>vi&D6iKYR1W2%^etQP$6%9e#Q5)AjAuVX;2Q z#}X3(4vP^Hr$|Xdgj3P7@FR&5LYac*elU}IGC3WNhJrd66p|Py9xZ0#a6Dd_OlHTE z!!phe4i6tcdV1}2kB`0S%+lmF#szj>Mt{+oAxn9u6{>EWk`hmNGk^ONJn>Ui+< z+2LRO&0Bx+&aKVW^_B7J@yX%w$X7zP-CPz|+HndrxNjN5vvV(y+U^vg*|_OEx&J7l0x` za9T~L(;vKlXLH3J9UNTQ+FnGwa`nycza9VX@BZJ{cK?((zPXuYzSuviqt9`m_rJKG zQhNQ?Eg~w*L)si4PhB>~!3fK;N{R1(Hd|X=AC1PJJa~9KfA{)eZ5`s)+F&>wq?D$! z>h9e;ySuaE7r%b%t*b*_3viGZVI{9;C-uQe9Ok3?xO}olPmfM<0E9@Ki1VY9BhH8D zU8N~80LXYaLPXQxSQn9HnbE}R7(z<3#lk{HLI_!wIp^l{xpS_Jk(o1cIdCfLQgJvK zK+7Z-kvz|BJYH2*rie-&$RZ>PVogz1xm|lZ*rIE*yMeqF7}g;NO(6zMre$DF37sSF zKqN>)$Ere(BVmj&sd!{X6j31cjt#$1)%kpGc!X)!MUqGYP$mKtWn^=F)?|*4&bc=G z&i)~jEcD&)v&g;C5*uIUUziq1Ji5D^5eV*t}k0VqI7(Y7{A z_po2@ppZVO(aKvI%|%sJZGLB_AOsF#K^6VrZY`wkP%cxB?e|nsZteY0CFRJc{v z5UK!SP=yrgy4{@FWzr%G)=P^@kmX?pNxV2LV!+h!VobszB}fop&}}zAkqYVuw^GD5kOEjtGC94SVfbd00WW|B#9A02_*&X<+~OSl(c3W(UbsCCfKD^JE(fWjXspkRb9qOS31lZ2blGGL^n>X^NA=2XCDn$YqV zx(BS2Hqcpau;B>jc?bTCkI)6iw9ufmEwQv-iD!*X$4lq~&;7)K^X%USO<2lk=o$QU zmSqSpRB>Mhz5+boiLfsXSo(WJ>OSWiDjNQi55Zp=e_iU#zt-1$nV;|SEG}5p>JhNE~L#Z)Hw_GE+(@%s5hetL`)Lu5P$RWr$7JsFZcHLXOkF0 zpd5{~KcCNIjHA&g%d$EID@{TO2vFpCH}L8HEh>tjqE)O3DK9bvuwaP3Uu=vq#ptkU zB+MhqS&R%|lvLL>g3W_{=OJ%vuhk$ir5F<#+0+&Y)y_=r%-T)N=TV7Br6GdBc|};C zjM|*8*4VrooC?5jWqk9>HO}2+ez=~|gZuX%JPyBn@cHZ4Z)|O@#CldukCcl%%c`mh zA#81Jx>h9K9kjdyQuz4_*A zS(dZQ4v&xL^LY}1gp074&L(9g6B+Cs%*Mmvm9@3u5D^!7F)GXY6y(~*CXk!W=T+qO zoYzOWdOsLuo9n|GiccReX0z!cO2l;c+Um+^uzPiTFvz?^k)SGrqVV4D@9%GIZC$;3 z_2A%O|M0M`OYeM=^7ic;Dg7|SYT)yuWBV-wlicdd%@bKZi)$wpxWYg*N%6Pn3JQh(0nCDrnr4C`_GgU3iQb6-Ox4Eu4 z1;muvc-Ll(IUbMex-QGoTExL%(266-u!9&QnM)#(@!{=ZZ0L@Nh!|5;1yQN^FHWjSafe5>{dE5}RF@^&=cUt73!e(A&@orPrQutyvvSIA@ez6Qb;0@R1`sw5FI#=z=-BZ);J{)qGJb6 zQQ<6`ed%j46C*MKfdYzRk~A-+`D?^FL{Rn23Zepx(D;2Ts1n%Ciw$DZCXh&5mkJRw zL1*32OqXJvda;pb{uRsPlS_&*0ctXLx@Sbsa!)LgT}3H#Aq7<>Km@2m1hs)sa||ll zVt*FU(0DiqK!2DC{?I|&>QQZ zwR~@@D^ReCJTfyAQ|n&VNs*iG0<^2PopUO>B+RyUu49I`cM){d>y#3xA~QI48K-)l zLcF=Nc4a(bz=a@+{`vR6mpO^`RO+c)8HW%|_FNQ&f@;#O_3eC+Kdm0j8R}T3YP!8X zp3hHbg?D?<8kJliQWgrAf+^)&km0cMAG%EI{=W9 zD9~a)PZBfY!@~pb{mzwLCaA0GXaDfv+39gM)~6?rjka4^V5*S2@o#^W!(y!Y_a z58rs}&aGR!9{I-ZjhNE*&L$WB=GM;2aMk&Ic5-u|&jeCw@SZ++*TyQ8qO zx+X*?r;`-jcsydlE;es>V7%2*r5qbT%E2MmyVE zd7hVLS=V({RjaG3!$OWv<|p%62&#&c`P66r)~#D{{<-zrQh|aZLY^0c!Qk+4R+iC?INE7d3)s%wt)bD^zgPP3s3AJNkpX<__V{Wrxy8%q! zkn-%gZaIS;^kDP><1E+%sH!e=&r2)lYZ#%Q7yf+PW|MDp^P4^p)5n5SN_Ocxb(kn9 zNFQD~7hAyGUD>Z}=i1oIuDurkxKx$c_owKiMg0RXvrJ|NKtcwzG{NWWO|55E@1y}U zHKa>B2_UOOcl+wrD5DVTJkQ&YRw5-+n;-)@@*Z0kMNl>tM1x-#4yw>M)#?sL0Fpuy zO^A_%BmuVO;^v~N3JM>LzZX8-{eGci>FAW#M+01~B!Cfp3$9ijGXRxqwcW9rkI zJSxg1CGo{qQse$~1P27;>WDO%3JMB9iiQ#xLqJ7T6xveW;C@NM$yg4S*`ck21X%~s z{@cDLSr&ORA51)Bd9?m(=eJaNMKgE>D7<=o%~uyoV;#PzBD6$<2IT`lkd&Nb=h&GQ zq9z3Hl72eBeKl$j>`$s2> z`7BC|*=UqPs_S~OSOCDv%8K`XQI;XaC~3Y}fa);MsY!{!zAZc;)*&pa5&#{sC(gZ3 zB2kh8ScqfY3doBrH|46R*-oqRNCTv(l7Z`}lbuA_G|W*_ND)*Wv2Q1~eQ9ymlZOxh z!K%{u|FidIO_m(lnbXsnGw6>6{C^RBVD`#E~>h`4cYW)=!)vWH~Xg&8a> z^R96t+|T*Ww|GZtVRje7*Fr1X)HBc5qS`^bWnxY1{p9k_=J(!v+f7Gb-Mc?=`PB>C z|MmOtpyZjI5=oLI*4mAYjc&Kw?R9r|cM+-ATA8Jzyzn_shQmYW95`zwpJua%&z}C( zPk;Jk@7W*x{tuN>QuPvAYv=NfjSbJmbXK(6?Q}XDjYdh_noNfM!C+-&Fd3&v5fbKk z-tD$#>FD_QaCLR9C~_jadF}e2{@?eX9F8yTjh`JJMpG3h^2a~^;mRjpMv?7wlkIEU zSKqw3*4J9}*4hP4aUt&LMq`s(Sk$s}IynbN<2y?0(|6-Ci_ zJRXfkN>S2Ey!V@%>nHc0k6w%m8;vK^+}Y7&MhbrL{`bCkw2RsmvuT!l0BE;bleBQo zp^gDTq++Clzoh})+{-P-SqP?HiIx@y+9iW78Hl}IX>2$)~ zthJNLL=f7o7C{(G=qQeTp84RgSoN7z{K34Bt&ukt6qoLUhheH(l@Bl6pMPW>Ndeo$YCXU&B|MiHzaUZF}ILe^MQ!9Uig6%&5}~D{1m4)pin)QM?*@3+p}woMn*=nW>|_&XAU?l z2t&~IQ!}xW;Jl>kW-duM8MK0%SGL}{d9|g4G>}oqBvLt)5h5v28qhec5eQKSKq1i7 z*t4+nzyM4jgwXWIDK8%Z1}Qlef(+sT2q}c>FojqWw1AF5I6Mh}00{#F351LwaEx9Q z5&#nk0@eVSCahu^%dsO@{|Z!ta)b8EheXaQ09<)dlvF-I1VO1ND|JGw;5)zOweuH|kG3I>DXm|}M z{1)G8RYDb|7y@QUDMcW`wS|a4m{3PLxG@G)(kn7cPgPR{mlWVNi=n|F2y=O;!hq^! zz1e}oDTYGz$MV@qOM<1lg&4>xcP4BHR7*LQhShb{9?rLkuQ&W#8V)a;M=l0RH{W5{ zt`+1pCp z5ON2+_k}GyNKq6;QAAM`$FX=e)l9E;ar45tD?D=?$Ho{0)TpL5^UQ+ig>7N;qCmvh zM8+6}$UZp1AbAFZg?EK_L}av9Sk~)x69NEUymi)juSh8(g;Xbj*9&IZN9Cc`!D=Qc zq1&n9gIc3rm-Tg|c}?Xl3$d(dt*EzeUVrcXyVvhtKi)q`XX9ve^6uMjT;5y}mkra2 zuL9~8b;@YTZ?%)Zr1 zj!%wkUbK=#MKtqb+7}Ox-Q`~E+U0E@_28rN(cbaxOYe9xUp+gxzVnt?KbwwPrWM7l zwr(FB>^^w%^rL(CuHU}3y|Et0Et}fa-s%&1cJJQ9gN%wIy>xMXXXgU)%uey-WHy}@ z%-}t10;3h9AroaDW|Q0t31H!^){v9$(>touC4X8 zHjf@XszW-~*494x?7{Qrds~}ZvsoS)GZ+j;!=dvsp5>o?`MBF(jY!XC>B_~e;cz&c z&8)TI$g?Z1TwdQF9d$c>!h`87&-dMkUnX!rt ztamG3>`v>1LSqbgAO2Yr*MliZ?S>Gn0Ykexe=U$K%VHC?+U+z=r|GO5-Xqotg#o;9 z&QcfULB)9oe5MVv7Kg~_3q0At zRbq2aRz18VKeju`Teq*gclY+i4rn7*m{0+FL_%T(M4&)xAOlJR5TQmS1dT}IZ6I@o zBsF8^?6w*;6A{peKwiKH)`tKKSjU0O;=B-nR?2zrJp+J}(u{}*xje`vl7@(ybm=oy z<)Q^O^g^W(G#xcKE`eQxi1aFDNBEYS)SmFQEd`4>_C{#{6z2g%Dgv zN2>8S5x1zt5C=@80MRqB7guT|D(A?C`B?~y!EauZe`|;G*SFVz!at&8t##GYF#u?7 zkV>urfdG(JWV8lh9ViRTNT{`fhD|_i!B}5ZwV-i%(pUisVL=Z21tNjqV!Upsq}8eM zK8i4r5~x7aM)J@+9|(z12|=~SHGB}yXsS!1gvhy2!g*STgIT zZAy?E9}deGBoeYnmS=^thLqM?S9W4yTtfh!A-6?V z6tOX}iGpK7T?p1e=()85qE$!?0|cyN?P{Cxx?T_Ik}MLNC@`FB0GEi^b6s)HPxXq} ziHJcq+=}8KzW?6uzW4T%=U@KhZ~oK9_SV|^%9TqSKYZ_PRM2ThKmMmb`oVYKw6jsPwPT&L)*55- zyeN?x_RhH%FJ2^3eDUJN>2#_TF?;VEQH(%Dnj*8m|7<)SPbTBhXxQ(sy1W?lyYGGf z&ChoK;wL}-qPVm1{(pC8eWm^I`LGjr52l9?9~^x3{K(^|T}0QfY^-#Zm^3@G)}gZ& z5qrJCa6IXEJ4$I`OiVK9uDG3s{Ja16Ba6|K{i8gc{=pBvn^|;@yWQ^9 zt5?_7)`(~{8Y!hB)4hN1@r`S@lxE<_Gb>VFl=C1IJ>NgxSx*KlgP<4K-`^LJ&CShD zr(^S?)s~JYF_PN+WHcU_K`Tk>39!+LQi|EnW-f{%MA_ZlZMS*=Qsh30I^NP(_aE&a z44*vN-MMgkV{`D?=ZDApd;R{k&5ey`Pmi_MS)O|bN`*#Gq&oLPlSD*O6j6011+;>Q z0{x^`=7;vxdLM)jq390=3Q#RywN}5`E=Ey=ifmzn9wE)MG);9BDXpZ!$U>7@8G?93 z4A@8cJ_VL~Eze3-sfu;ei$n{?2V5E>h7Ky+CxHHSzCcaM-ySGxe^u8qeKvbKBb-jv#`KiA~E+zsK!xE zKE+a$rkvg&YPm?Gs5)=Q3tviokei>bIo%0|q56dq@r|z)1i79GLBo_$glne;VOCmS z+}?Wg=9QI}Nt6{s-hm-4z)SVKX2{XJB`b575kNtRZvaFf zg~&`ufL=nhES3f?Pr|M4Qf;IVTwuao&Kw9YFwy~=c8_Pa z!PSTLRn$RkTTidp`!$t^u()xGFfQsh8V`~RH^KU8!Y5cN6u$NiEa}X@seeIJa0qqg z-RW1UJpUUCx9T^IkBDbApJ%>!MMII&U89t?mMj^WM+eYL+x2of(R`V3-q7is2ZXNs9^1X1QjpHrvJ-@))r#ZTI~Qg?wkW)FK>;4xiJ~Z+ z_bft62|(s-mgmUQ(osZOkrIHkC^R4=dXUT(X;BbBWK22C0pK$93mu{dX780i8~_JI zVX@w0rHE$XJk8j7O)AL0DWp`|!n<8;-&R|TPs_LEwIz-#jTdJwl-Z$(^<)* zR>rr~hxfnw`G-&b&A<4=&Gjv#(s7#ZA5J#b)<1aXomc~yxYg=Ur&Fah66VD;w?!01 zz^Kp|ldP<*v^vqj;R`#PS)E|Ji^Po1d&Yd0X4A~Wy~jsM_u^I3u@Q=rJGU;ij1@b3 z|DEq$xp>*S*))5$(rZ65y)T|l(s91C-TCVefAPir&ef}zw>Q@hjt}!9pG@e*{^4*u zRGKFzlM5T08>?$Yp7&RJ@4kI2Zkg@P)s2-k1;u1MdHj5|f0VNK?Abv(x0xbpDea5t zIGv6iQqo!L#n(4`-?_H_#*NGU!P?WOdmlf1_NynyhZEax4_fWcWO!iv*zR?dQP#S2 zmPID%bi4gQ^x&)GC(j;itgj+wf6=xC#}^4+_)d)>}>GQPMqKrP-E%p&3r4o07S`uNhN zH-RYkQ&OtcNoLtmrwtpcgKp9ukEi=bM<8l?G&zDJk22^b$D`>ibEds2MG>2X0KIo6 zjx(DJVq_v@2`~Y(*T(p2gdogiFsT55x!wz@S$eS`SLym$TRt{4&5g|nmr5FD4ElN$L?#lC z)rKU{q{p9;=p6#f5D<_-3pj1$&gIqXD=l%kGsdW-Wi*NL0^nFcP>?|jDL|zu$Q&p{ zLy54~8Ua9yvrfu3o}FjsnI%Y$N`iWrrLx)Hw9zU|rMHJ`4?KMn;~O%3;SAp!oyJgM=koR8vC23vwvt0+&aG zfsiW);^3Er0*G~}q#zQoZ+s~gzqm0MtbYf=;+=)XhcP5ecraH81XR9~B=z-jPDy!o z?Np-~XX;^I-(CX>za2M6q=G^T5tRa?!ipC7hGAb|1PIoNLJWb!n zuvbBeNHoG2zP8zu(uQX_c5w+}sP-KRMora0Xtw&_xQ%SKY_$dcLNi;188`pY_~Gll z2>_OJ1iv-)pkZApFFCd$n6a!js$8@`S(0Uqz(V@r%Uj~k1Qa-9@w)|Xc@kG z^6YOu|8nneT4W;3aby&6VO`< z0=6guqqR(qQ%Yfo%c9a;)0>S$6Nyqs--5%2(FcyRFqr+grCTts4`0Pmyl*60J0bc(^b#pG+o6lCra_I(l|+lorM2=3p?0LF?%(_l`SV zqg8@p)7(=`oldm1+P-sTd#xL#*-#t5w$k28-Tu*NblTjSUtE;P^qLa~Vb7S?bn-{z7Xf~VdK7aD`>GAW!(X;(&D~Z$8 zk57j8?mgb!AMb2jn5M^tV~L{qf1vF$1xV z)YkU;yT9{ByWQU2-i}C3$JxPfIW(fMZ9Z=L~`{#dS^;R`4-~e3UYq8a#^!K*AUSJaFg+ zeCgoEP|Dz;bo)aTl#pi$)$jmn7DL6CmXdd^%J!<3X`LeBpXG>OVZosbmyk+`gj9#T z5TQ~UeK|S>M5XGw2tYt7#nvfOij)=KWGa;vn4cSCSEd7%)n8DyVriIFc9H<)w26b} zpPuK|VM-dk`w3KO&NgCar>p*5wRkN^X%PV3sde2yd3IyyuYt_grL-#V+i zHI^i|lzIR#C)%CqQvm13I-d4WC|z?FXV<5R1K7YO=Gl|;Cc1ics-hrHy(?MlW|7Xw zi9G8qQ=`wN`o6EyNuKKDzd?fI>EO&)dC}&Ge$n|7PRILweJ339kg9LF$zxocZlB-! z;`~eq8}L&4=9wN^e~Yw#eC4M670Gh)cPvtv8%ja*hi?gFob{#SnX%ue_VqKYD_GpC zoWrMiA^;F7H!pBB8vo?4fA;15ud-CEwQ(G`+wH>I*=#nQPV+47w%Ul8Wm&LDNJG{@ zs};1|&bd6#>jb-C-WL4KLhf1=MYW8JMFhopC(KC{w@e&IkB$)H?<~T zWV;W)yu7jU$N%h~y?OmodU$wvaQu9Klx5lKU;yH0S+==)fr#Qb!fH54L@b`!5n->_ z>vp@$Vl6z_9jeZ3=X&foOHd3(MX?1l~ zfFC`2@aWNlx9;9i-idIh(+Te+O=rhPhX*G|hbITtr?+n1*uJgaf^?c~nIc%^R)6w^E!jSCNxjrH~Yy?tv7qTXaO znNIS^bZ%U~xv{bFXMgr*zxw>a>iV{Gc6)nsZEa1H^m^S$t3UbEpB{~8mSJ>q!o?fJ zW~JAA>y2xKKF`yvu(=n}(fVeu*H5e~Rt5uMWi1hN+>Hi<)sKGpvx9@(2M@k{Q zUJpF;U_~RXt*sej(&6x6ck>WW%FZ#E(mj&N8etaF96P>v$NIqRH5 z1n->)&xHe_Ctz1|zZ*TnLVMHTzc-d3qM&dn$IgUEH1Al>TI;07MCy@7BaIahn{+Cv zX=)N+UHArmJtbAYA|yC3037@A3y=sxA zG>b)GAf`ya_x9a)-@e<4AW7mne}o7Hkmvc~gro#8piUuLP3DxJdBYzdyr!XV^?v~p z@%5$*1i)St5-E(7LIx^FgM=lApPR~;g>nx4QVur&s0unEqUy080GqLqXU^pjcrFdW zDxhuI5u;`$EL^G#vSe;5EO3efT%Q>GK=Fv8<=>@L= zh1a)ld#shN(#opr1pq<>LZwNoun>Etbglfa7iBu7Z%3MQ2x_>FPQ~X^1I3ufC?YLQ zzo~SWg}UKqkw(XV#`a$W3N<(FwAdcb$#iT23Sm@$i`Bzv@BL-JKzUgke-^B;fF^vS zHnLu)za6Hqgkr$2XS;Z2xA~H1`{tzjWl(8OR|Guo<^I;8gk@U7nHcpqhZz3;cpSXS z*S93PIrnbWe^@6_opnDEISuNchp;Tgg%V)y{qbb{)1UwHvoG%3Leg0tbo(NbSGR7f z9n$PW(1T+y2mvO5M*KT7LzT)N4CG>^V`Gd`1W;JZ&KYCabKzZ<=g#|15+zX-X(J%E zG8L~=2{GEfVoQ}GWC21o*Nul-oOH$xNwLUqJp1y&_|m4%-g_%}(-0A}9goL(=2li# zwARL$PPZ+>hX?ymWclRy$3Obvo7b+44tDd=@Mw}B91U48HfA=SFhdlz0f0y;jd`9u ze*73fZd_{4$ zZm0i;KmKoi`OznNUO2nb@3%bi*4D<#YRBf&bUKN&iXtG>+SnL4U*tJz6%pw;YLgPr zUaWok>`4@xSvo#C+UvDifgV4dPTBiTr;|_eSq6`Hj}NEgtQ$08ZI5p%v)6JJ~?$(4a)9c|Pf>4!3OYux0 zaF6B#&6;sY2n<}O7|P3tg^k~!2m@mcd1NjnRo+TuK@n8=fS^udNt2DZOQfg_z zuf1#*M$L^9uC`!+#(}Tc9*hk`$EBU6dI&BlBbq;-8H(|>Re^JkPypP{*5-HbT z@?T0`u*|InDi{IlX&=l9!qv@I4@BaS9A8smg=@nCtj1~eA*FhPfXH=$R56>&hnGk= zR9*&^N}-lKGgl!jC7=*A5W#&xg3+)vxQ>8z&c_1CP$f8&p0d^bJqvnf-vAo<*D&pV z?a25VQ24FBnKB^~p+wsSm;-*S6a{)AGb*JTyaOO2)$ll6NKdR(#OJiwFWtqLXXa%y z(v%MX!ug4eHO2aDPX5xK0aaP>^4@i6A9{HY+?@QMgC^8<2R5y7Pru2Rzsh-K$tzPE z;IyyAx9B;S4*u6ZThlGM@o;(dmtMGc)w2GEVda0Uo5oVdeqL{X3LiMj2UC2lzd0XI zfRLee#;ooYP6qG2_3q&0Qnif%HkT~SMMNyO_k@r4nMUNgmN~hy~toxnL*4herD{Kp! zrVhV+_zVOMAt4%L085KF&vrJO?(ZKMquixJDFwjZbDkH|S?a8N=k2$yUfL01g~~gJ zs0!z!DB9jw8I5e`_KnG8{A`y9(2xweNw1}BK1-*Q@npDvGJf#%sMkX-#)pS{=yjH* zvn)F}8Mtx=|b%0rCPmiq|(f+ZVRBSG&{6 z;l=H3LY1Xiza#Ixd-LZ%|1eV6U+W(q9)9(FcVo3P9FIrClUAbppd8zz)ftV(mo|EF z60!9n9!as6;qdsax9+a3UTk$tUd)_z-Z}65@!`=(sT((L9G(ondirAjcsMQcEVXG~ zFw1a~3MwL<71mkXjw4OzkusYzbJ9u(DX?L@_uxb24N56r298vzeMMo65fJOV4=E3d zG#Ws(-Z6Wr8W9o6ZDEWN1SiZz9%2rKePL~xoC?gIk%&ctKT)YJ2)Tx*+Ql*%V<$s=YE3epiP}Toe*@uKmX{g); zsxgfA!bFN|&J?pThLD`KWu^llX|k0eWiUka-iM&sdc<8?If@S!5*X|fS(=&xnDgPO zxxO`71M}qtU$$}AEqcwiXktLB3WHcei0WU~>oY7lH8K-6BoB=@M2ja$6Pa2dr8bA& zm9=&aWGtv7Uw-o?LqNoBZ>($$+IBkPZm+JH>-^s4B&Y_b&Z^Mn2BM__Ss;^e2nyo5 z0hiLtP=RMc0MH~N0v?%g{%zI`f9Z6_1oIGg1fCb{3)fLSy1`l@vRnoTh%7=sh*GL6 zD!oGm&8bHE35y5@r-kt5s*fZ9ge(97jmOI8iV(QE-~@nu!ziJA)ZBxq`PGN#34l&% zDFH$3AR!>bmjWjdZ0?)ipmutVEW8F3e(R4lsVXfYxECNHDMeZupmkGAMLfXz&!^8d7aq1IxG`NM-F!y%5sio7;K49i#G?$(Ul!WN!6 zZY9Q;Fq`w0qq^ka^FIXnbl=ZQ#%w;i+&VWHmNW{Ts z8yFBy#?y|WUVp{2Ptz1Y1urT>TwPs@|F5Hx`K^KqBzO(oY`wbMC!tY?Ov}-3a8U?V2*UV-FB-t==J~k?_ce7yBau- zG_yw1MK*~d-Rrc(;pGe4X+9o}_xr6jh%@LD4GP(Nw|n?}oZG!&(Oc>Fy6xlR;r?DR zo*gBzTHhEj+wZ<{`{Ko`hr{FNyU(-flmMJ9u3x!!ar;7^kC~Yi5kXO8$H&J%`L%@|og^Ch=-^;HNi$ZdBratl{pPJ3+wn;!iJm?` zI+@HSnTuKu5JscX#>QH!l}slp%Tpv+TOYJL@#mj^{^_U5-Me>(!;_WO!CsN@t=P&n*3xkbNeTw+t=3Zz|YdjdcU2tsnh8lA5I6IcBkD# z1X3ct@LmlDeQjWE?c&PdXmz7=JbpSH4wEENN{vP%@BPls&fdx4!-MB0i7yV;i`1PA z(@sxkxl59c1f zJR#GMCB&cr0C-_lUi{*`3k^QAV`fka!>k^Jy{iZEIIr*q!v6XtOaLsa{u2zwtG3U$d8jup6&7vmHw zKqMf*ijN=?(quw5NBspUr7Ffmlg+`*B|RaiT~U#Dr(+tI+uhSNgc@FH)!ypNsn%X&3dOt1*-sF=-evG~XUJv5zzTF3#B+ zk+ebOTCI3{Yc=8m3n$VIRaUKN@a)Rre4Sx%>Rgo?L~C$!y!SqM#>)Ic3d1u2U;z)o zrxBSw5-KDjAw&crB^8IGG)+eVDh~?~36|E3Sdok8Z8}wE4dJ?BSxWyddwmzE1dZPi z5LUK~0a?K2r>b2UgHWgu+*v()rH3u;(h&g|`BX)@fPx_K!pNz16>X%rHAo-8fB~D~ zIU?2=*YURrk9>W54JiDU-fH|6p|s3Vgo=XsjR!`h2uTZKEnFa4&^v^!YaxgsJTpOv z*9nuruw#YAI{4QvqSv*z(NfnsAA^^|$g}Jfms{m#_|M{Y@{+n?4kDZy{h!BBSWt5* z1qi2irgIv*xqHIW3%*<|@U0iDS4zHo>5IOEiSP|L0yRw2d;^4MV-Me?8($LGzh2@O zDKS-S37+erP&d^tM?=mMJDfog6!1;>=w$&M-;g~~|LmL_PbT-jdN>@9XEPiPQv_0q z3TMN|an7~dZ4_|UIq%r}JkLFI5+|V@3f$c?%8savbqvART5F}Dl6Te-YvHDiZY3>E z8eFJGq%QjNJfF>Gq$rregg(bP=e(1O7-gOF?4vjit_Ok?_@cFyU2~}k`~?p{0i0#= z-ZKaq0>mc3Q%TY0RN;zq#&bV8M6GopP9{_AwEzGh07*naR0L2fXDx#otga}fnFT?d zvnHZmzdz`&Wmz_xO;%P`!ULbbc;Rez`O0;zO_rvf`FJ$C|J9RruYYl8C+r2vC?ti5 zQ4}XFmFMa9_I9V!&eE(XvLtDDI-Ql3l`P9_o-3R7<5dp?ERMx_$g(0yq9T`e60NQD z3vTTnJk6CpK01mF^}DSso90FC#jS2__t$;gR(W9$4i8@Ja(jR`Z(rNm?A<^avF78?YM9>o6W$d3Sc<36OLKMM<)lLee%h*&E9w4T|F92k4{q7 z?StW7t4J?ytQ_v{Ubt`}j(V+jOJLTerv(Y2E2`x=Cv? zo{WoWD~jFJ=}5nE{X6^n@W20`|FN^S!^XdPw{z>x&hhZmqgjq=t~fo|_jm7X85501 zqxH4ztgu=etxdb#J~*5J$mZr|)XrZ#JSmDIuyxw)w$^%*r#aZ2OFJ;QIMnqIv2P>1Mg@77j$uoz#RUR`gZPs2uu$p7aTs^nM zn3E;=q4rQ}x(_bxER}spNvaHtBE}MBkmU{ajP;ELDinT79o*} z0@=zrhe+BGvVc-3K!gE~tXBhTtum@6I{<)p&KRvi1O{`6c+^^3D7)9N_yo~b5V?dO zLM^xC_y|>4W;ijzy4oxb8w*vbdmtjEH8a*{Mcwd+Wp@79Y661|M4)c?VPP;H%Dy=R zVm`hK2|glC--Mc^R=w6TpQ{{Dy~<5#KnDP8>uXyZYpzI1k|0j=-UkLsWpY`2j4cxL zah{&uB;E(75?k2%;LKa{X8t(?C zz(G?7f`AmlO%~ZG)o#_Wg06spYG_p-O|0>^a0aXn>1Tl z%wP=xUd@t&c!4QYhMWOP0FT0FoL5S7f>I*^?AzDduWzpbh2NfTLu!~ng~=TuB9ca; zh$!$8C|Ixr5^vdbQwiUd(GLKgU4VT7z&Qa2T1SB3eOSmST*V^bUDJ`VL`K3^dZY`~IToetSyYoFcRFej z&(ht(w^m6)R{iyXE&Mer0H!_|QyM5^4Hmm!;_ zB!%7j`>vex@e!pOEC+RfJ^EinkW5UxGMG-1>03eps7vmyj1^u|)r$~`<8m+aUl}9MVIrhUMMUhx3 zVlYO5ptU}%63%-T&czofT@@Kp3W=HXJZBI>(gG}EZO+cA08s!c69GV0csAS?`wXf%aGIQJ7Tn#j`^c+}_;k_Sf#;|Mbb@`~CLd!j-LbxZBgJ z%dJD_zI^fEMtn)@mY)ohmU{kt^wsm>Xk<~MH{Q&huj^*fvv$OK z(I=avd-Y7g<37RC26F0=%j&~)y18P+>CiIU{<;l8%~^fZ8nGI6`w=p2?%`MA_H}2S z$jPQ9|0kNc*9^<`9obKJ9b&9Zk9mPS;-))2b(~PKr+y?Szo&=G z_iOF^7x2BK!8);@+xg6;Js}NY<6L!W*P1k&y2wIGM0TcTKyQbW1-KLCj9j4E($vcq>16We3Dy(wv6L(dbMiYggk%k0SzzF7?wd}#wNYRWP(!?`fSCjx9r!)bix6&OUo zvVhn$^B;U8d2G zT(<7*H+m#jw7g15+*V-wfiB{nMFX=H`GifaYLIH6?Wbg4)u;01)Q)QPQp-{f(UQtAQmDw-G43d2%-)K zst6>xN~Ji5l~rFLX}4`cj#{Yx{(@t}u=s)__C1OsX(Qq*7DZxJ_0Ls>HhN+}kn12i zNNqfm>JGk0ytznc83tM0c^H#ggHQwcE2e5N1_gi|{v-D7Ue82P6`8O0>|aEIj% zd2tZqXiECf#4bNz7Fe#L38z_y&tiC~w(nMvC=_CAL=f>Uxe6_Te+Y1BvGdXXEiTMw zG|fHlUMoQ0rj$zZ(fY?*Q>)Q{64t}S0Yvo| zInS)OqUEkkyQS!ub$m9W4nFsc%lp;KYB@74Td#smT*g9EHrr%x zEi_h*2mx@-#kA5M;GkW!0zg^`wVEDf_rEovrLD)5g@MeMB&X){G*q!qWT}GBCy&>c z&S*Rmur(=?{bQQ!^F2CA%&7W&$8l;&(GuJQ!=@VFZ=|k@fK$WxHO*0c=OpPj@Q9b- zeQzaLJv*r?rE$9=x<&7E|9T}AIffdhMgVFo-sQxi9&maUG)z7f-ank7ws6voeFs6J zk%~`UOkw*u?1$?352PZ?PsrK!^h>sz7>MbMSToq9O4tu|;L|eJg>cg5(o_Ne^$2=Bam zA2^4K!)ojZ-6=A#L)LA{E{S2A%Cg$8-7c9F^Ofi(n(8O5!dH1tX zZ`;+lalowHd@2(!&H(*&uF|u~`QJz9yNjW%E$3D5x03@C!@A5ZFE^nHT5Ml8ArT=` zcSbcq9F40a=8CJBKPg@MjOlKug0DRp1+Rk z=NK_Xzz8ly(f1eajfJ!G*T11V$%TtEy^q@OSITd%fe(+y?=N3Oy+oBvr-3$e<^BCz zFu!tWY-n7nEg;X}Teq}UL9hC@>iXMlT@g7e>~Xr{ZpZr#Ayxo=g6X+`+uVXQ`?Z&l zG>8&vKGt>5=;)5f3b7aPemU_DwAh837hvR_?kj)y?bfoi0`$=TWOvCblTyuC z*0GZmu4$o_u&cRM0t~qEUXc8BW&WAMK{$vjXV>b%k;`{XuQgzx=6i%*ebo#W0#SA(MXq))~%A52~3{`~LpuDQN^B_k2(5HrLxLwwu9<@V4KPbXk_e z_;U<)bt-)5J`HarAy*@`3gnh7#xJ_()WL*kuNNNa;-H|^)u1nGX`!h`i5o|qGGma) zW}@jen2&kcX9}jI_e8tSNS+$4uPc{k4X1yLkw)>#-8Bj*{8-xe5{~2~?hj%lCs zyKHiUnxhznj_IWif{U@bms;5$UZwFlBcj2<@fS-T<2rF)9buw>%QuLq~9Ctqi<`gV{5u0 z4_SWPPOxA`oWiSl`5lfOkSp?de)F2+eJ7_`%iQ(#-`u^ufFY}K6Y6(iB7ec;jf)z) z@Y&^dJz=G?!{mL|t1dRJ!s{{mDF`0L^-QZ?4Vyv}wB>ML7(lH`94W3VX{d`?-|eYH z(V}49j7}Eajd5FQG76^^)DVqU`OW!=Bu#cxMe3j-I!>!&K0NjEBQc}Mako1me9ZB-8}n z`;5J-n`U`^$@A|6Ti zsD0}vd)W&0#SnSCXd?4_?>=5~{5~@Bj(8{#+k4nRMY$7cRoZU$ZK?RMoRLv zd~U4i+fgVar$2ZQzPH%n8s=wUH&f6My zH+#GLI=k4BU?!&_CYGc|J=Bqk^u2<2nY3AJ>p(HBtOhSm?+0H3uL576G1gA+MIRu{ zxfwEcT(2JIZ`xBo9jb4GVFLG$^m<>F^d{~wlttbS-rjmr>0?&?zLtlJ{oac54wd0& z8V2=`nF$a@_9;ynF{HZrkYBu9T;gGn;!ZdjY`*lk9-uoNmzc8izgzWkyf%{F|LP$Zr{lmzBKww*YH5aYh;xltOvc zBHXxmd*c;Ns|AO0yQ}h@mr%^%({3NC%`|rbz#4fa)Dsd-j!c;dNXLzm3H#SaB^$&O z1zT?#Qxw2y@mu>#k;XGEw>)fZ#=8;&)c=dE2z#Hghnpqw1Lo9VR(je>9~MH%ML@ez zK9SlxdE$~DrwrhW+pZ@*t(c;L4wKhJ zgh5Tq*98==p)#^BE4g_n$Z(X2{AE-h^MvHv}_(Xhx?aMhF5*~#WlbO$C*#9aQZbEvYhjvfrx^dIT#y*R^httvVvRk4OJYz zWEI85$b|Q515SDa6b=@GOE-Gel$$KWtrXa8z@TX?KAvwmt)^rN(w1rT0D&W(zDur4B-Tnaqw6skZ=VW z9|z;PnJx%7sD|W_HnSYBIHR8~$y>EFE>%=8SCanwRQ{y-BTNHRklZ+*3Faf)POk=8 zY+V<8pu-Y`&7Fzcyxj28$XL+0%_dh7h5r@lML%G}B04gsv@2tceomrGXWp%t*gAwCV&5=2E?|{RV*=W8z3<#4(h{6kQhwCVafdvEvO$?_h-frysc3)?tw#XUIQB6y_sB*Z)Jm_3 zyl!+Gr#w|V>j%R~lpb3DF!tnYBZN>Sm_4nZ}VKSZCr zO`KL%n@Kz!4OZ9%z9QD7wjf}}@a-Fds%lP~U#C z?;>y8-qmxR-@an2-U?ji3X)CCLLojkR!c1B2E87W!IA}9)lDt#TfZ>^+40fh*mWx0 z(mVx8uxoH0=W(Gbx;*f3&7ggqLvyNG>lY)e1;fKS2d6B-HYCBdOXv3?JSbR#WYwtL z*W1d1kJO!tv{|9#6XQ29>|nRiIXHLC+wmNVYJ}Dlp*@4Ikh5g*x_jmKgZ!7s_lJGp zpnP-$)Ia9l8I!5_i%<)-_88ZunWnz1+rpYTx5Rtf8cI1$|HNhIP@ zER%}<$X4%NNr4tSf=IYnKjNr>q-~}|WQJ2`f|a;=_eHDoDN6o2PU9z07G6QHu?n#; zOSu5P_LfYHlqje46wbO81rk_OG8Ho6xAXL$0TV_P;i)vyrpBwYa16Uqeuvoy``P_W zPG#;!3hksC*Xs7oTreM;`)Fe-V!qde8@BL@E7sKUQ$hQ4_d{-qKWIgKE}HPP*N9Ub zl_XhL5%u`0WB65oBDwKHDB{1;`V|h=+n+GQ>na_vL%$>I3Nm9PLKKlLx2S)5GeP*J z%18+*B>aCF)eQ7Uz~EB;pgjXwmTq!qEek4sX1vsO1pmv_#Ya#HvN+>k#&KgYFF@ol zd?j{f9D{G5h20t;{XQu^Gk}kQ_fvdNOGuGxYhrq`Za0&qYcP`yjk0Kd5|$FELSxEo z#+r?p2!#swni?{q{)kNX=FJV5DTp>#SA(&Ev=PbSy?j{Ugj$R7q2&()pHm#b9lMy&SZq8UiQLUZ7_7Q^}%sPOWz9 zeG1Y!JodwI|Lbvsr>6V8_vU?W`*nabUkN?>==2XUslr`)C7cfpp+Y9~38CcZIDedh zNWq0-(Pn)gwuMZV(XW0t5|6Tf)@h~hi~a~N$1GI_#a7wJ7J_JU0dJ(YIs zd1su4et2W?*dL2z*p_kO!BJJp2{~uio1ul6iO=5`XNqz(K`m zL(}n}2;@YG!Z`a^w}rGMg8}Z@+U-M7-~?eAZm84p2Ti!6}|j7 zSXyMt8I9cgK@H_>uAz5+1{iU%AEGf$danO0!emkdw zK5fg7zbWmLgMZ8|8Mj|0o~i}t1o3KmAM-`03u^WGClCMXa^8LlmZ+omln;1pFBiFA zr5kVL2o2~ZlW-_#^5GzjU+sHz>ubER6dzJPp1ED~d>>tctoJnQ;_T+GwPgvQ^Tbe} zUqM2T%mv!rj~6HP&yBm>9@pDZrTS$U)s&A`wnh(fkMCm|n}?bmp4qUX>FB`?1LN*qq?n>$N`I zya^&v=$pBKkkC2?g~2c9T~yj9A|x~DSev_=`K}U^kda`gStjEz zv{TaL@qKrn%Sft|!^%`Bj~y*h#!7;fL7vEqUW0i~tCw&4u5S&* zx853oS4jDxd%?Ww{!>^ln=Q2iCCuD9Moz}o%5C0mzpJB7M}I74;<3>!Utk{ui^i!L~b0DClKgHu&?CxnRwTh!YAC>k6}`j zvp&On7j6l0h7;N?`ll`)8Vs!6m+5U`nRPDIWnuK zi*^2mLlWruZo*NGiK5P#1eEw@;R<$ebi|r5=ZI!sByZ~A2`hormCu#cIEloJ>f(Q?_y<=`$PRHbR^@Dw+-s-H~7tB%*1=h+r07!O6wIY@aGI)Ue&U`V zNDb{d*Ob~~qBhy4BKfTLn;zgGBhd*PI>&09z) zYKAHGd_&;kAzRx+#6Muf!Kv@@dWj{c*U#CRFH-^ez}!nBEa7!T z8S*c8Kg_G+v7Bl83Wnyf)*1Kua}Yb)JA_R`?R!A0klOL0_GaO~R`~(<8@#Qat!-1e z*wiL#B5m%EM@{FOLOwh3$LVcb>wxWveB$p=Cy?l^(yE!1v?x zCAy(_&+kuzV7w}zM8?4UvxI{PIyt51Ib>sX{j-N$^MRNLFH*kOZt0erUV-BsFQn7E zyjC++!GKFg;X>HrU(>PcM_e6oXM9uVq>sI zA^5El-qh5<8O2aB5pMBUR6G!Ydt?yxI;r*h2KpKuA*JR{0zPPglJW-(MavK;W^hAQ z^VQJVz|hH_TM+p3(rlm`cmyAYji#w2U3~%Pi~AVKM4N1w3}pyncy`;b%>BKjJdy`~ zyP%+o*5zJuOgM2i6x<0(N@l!WyxMBLQ}OSo8s;GstO86~h%g$tt_n(+S@?T%m0<7l zr7USPtG=%`cJmJJ)I{OX>ga;nXMg`w8|6Fpnl%fow$^0bnu`*m^<_2DR!85mvM{dq zD-D19CZl5a<^u;#&+$Hv8s0|(W$A=CYticf>J`RH7fS~^9#E2=Ijd6)5{C4XTAtPh^W#5Nf?Qq$i39tPMq!*Y5ifIUp%OhJqVQAR=L%K*ijP0QA2Itt`$TdJgUm5Gd(&=)R%vB_0eygIHj5vnzl%IVyz#Dr zhbT@o)Pkl-6cwh-Wx6A!xNZ#2xmh7k8y#6%fY`6nzqt!NF*qy? zUcbtddg{&9%!IONm8-98Md}AFHgb|ES0)JVWrc;Qzx`@LZ%5+{Ud1^0 zTvN`gewE@~jb0UaO|U<_aW~#rjVj}ugcq#2Su)79I~7U?ht|lFh<1L50q~$%%E<&( zAe!v>TtVVreJml?wBpoUSXLD9bK;ub`_zNfcQx6WF)0?h4-%TkWzp-cX!TFE1@apVrB1;YevX9CM)m17BGY2IE`9kmi zcGHdCbcCy+NYCNE=n5H}c);@U$6BLyIR)q$%d&%a`4YFLlF2w@6}pL2ju;6paCxiY zt%I_UU#`ZddhbT99Q>e$w&y+W`H){U_X#v$NB=$SseqFq?KOw)GWvGXEw~><& zVG}{H;%_&*YEKSgOi6zFO`rYOz>Cz)Ujf%|O=P}z-*%1to(4M4<9j_`TRULmeDZi$ z?S))=-d~!O*V_YM_Vjn2k#4>1dLDd@lMj1%g+&ieZ@d;K5(^G)p_ag=oJ1N6;5})3 z%iD>2KljJ0RNDEr^K}o4y7QQ=OPAe;>-@K{`-MB{_KlHK7~c3!U!gAF`vZvT^~v?r zxpGo0VpVdLGOMWX?j*0{#yZ)T&d2a2k+=C4yHF#WSx|-Hj9H{D%0Gz`&$`W3Vb8*Y zPYOyoti*=x^@{gdMf94X!fL*@YrlqcKOXv25DK`1nT5Kk-9^Q9I<3`yA=f{ViK3=cMyQql6D(&lKhnrtE?V? zU_vRcO3OrLD7!2Xm9~9pPYUR-q-_A%_DQ%~!`6hu;EQdGZ@FEKsjpHkYZR&>0;qG&t#SfbQE?QIJC^vK?Gr zgL^Trx(qFzZIBJ>pgA%MttH@Zw=$BfyWn*Wj1w&d(=m z%y6CNHSeSbr_nmj?%I}(&bUG#g-S5BMU=LtK3#T3=kOISq-8FBjHm)qA3pq}(@s2*+5Uu5voa z`*p^aE*ST>@J4)Cznt+P*xn3R8nYF2=Ei$eecff{PpO2h3r1Ys5jtrs9yl8l_~xGZ zA^baWhgK{JBi=$Emu@{JEQelsD>Z;?ZjtMO*)ZmpJtmxtIpJgw5Y0Ys8q(f9`7;;U zK7EACxJ9FgXn>&xJ;;)awXlVgD{qm^o~*B)L*cT%=k*Z#U$AUgb^Mc~%8)=NF4)x% zCK1f6QhmC)=w$l&%X5@8-}s$9=(~h$4#TdXdfv3lf}U^K?TGiF)Pi2InU4L>f@cw2 z{`s54m=4L!zetRNi}{lJcx*jyDE(jfGFxkf_98E^%L6?ZmCO%)&tG^AU4|nTfO}jG z-gnu;ugJNcIT7&b3MGPcK!K@uca1+Qd!JasYlOszD=-MG?B5qDqJw?lxit{#lMfGu zYeHA(e>G~$N8wsgB$TO3nC^28meuZaB2WlySJ8j8U!0$TDhX_h)FOczqwT@0-L7Id zipjTBbZfA4(nXlK5Nz^G1N@2RgJM|dDqMJmmwKOvCL=yN!Mwm8VGSsPMU+x~Fqe>) z0pUtiAo%~*JYx=>itS2XAAL|T%#Y~#JHl0Vc^B&w=d;0FYJVL7la)=Jwzasc@ zhDPH%+Z>^yky!mn8J*Zs>sC>rlaH;w*@DK;lXZ?7H%IcUI0`#6z~HJ=7@+X;`gmx3 zO&cV@Oo-5^$1OE>dtpES;I`^t+6ct3r&-3-l=df@F+z|PCixI5>m(=FrN zWYMo?-+(}``^En5*WblOeub6g$+G@u+kg*A4SC!|*@C^7M0J}z-GTRSZ(xX4-9cy_ z{^h~n+?g2>(bqvP1*oQ4|GxZQscf!n#p9EmdHv2zJx>Ctik4B)-ic> zPS+Df7#lEoNqa=e7i$Bj=Qvpz_Mu;%GpRb(>nc zQZ`{cZZa(DOtMsI!d;1-dq0W0rr`1{1p`)j;x~^JlH5Xy)wjplH#Yy61kVD@{1qv8 zUeUqR0k15KqSeb+D2m9FI;)XUUo>k@DS*xexTMRk6N7JM>2V<6@$HN_Ga6pfD##RP z;Rl=}r3fz75IlXvpW8VD+`h^84gK%jxwFl>$ldvxg)d2dnr zFly^0J?E-2?Q|(=W%;U?2(MKAb!mwmzV5nH-yd@Kt>^5HZ0a23;lbK76TI&EVrS`H z_8MW=DLd_+DYP+Fr^!t9ceQmoGk$D4!2XLRFbG$0{?UtVAk<)u6M7Dw8JMkbwMsjg zh%@k!b4Nh76TIFqpya#dHE_)Ed_1A4+29~(nDs(}3-uo7e!Qz-fXS_~pCO%AGy2@F zJuU$9QlaU^8LYpVYW=CF{zygchc6nAaY<)*iQoKo@!c=uOI^Mw@ycZ%?`F~uX0_-- zk~(#`C*0m4Qhz=31vHyexG4n__naS#ygDKesJ0sf=|Z(+#1{=mR~sua!m}+w80fLW z&w&}yaZ%zQ`eo<}KPb*67;r19FS(;NFv@X6VVT9jT82@oX{O$bDDqY?3R+qsRA-mj z*uq!%C9PU)VEjO2pl!g6o;Zne!StBRebAi2H~XPgdiy=PjKU<_DH^}HtTNb0lYd_f zDy?6X9^_KQmNH3dNsC~Z)o`sQFfssGS{qi@v$PIvtXjTlP3GJ??5Jw=t7Ka?_1+#a zv7VpiqGG{_OC3XPvo$qSXYVbW1P1pW9_Z!PS636CRhXJ~QpY;TzMhrIAn5xu25 zTT@vjrn8w@pMvlHog<`+pH!KyN#%wS4)X(eW@g5%?ZnBTCd;I|(Q|j8Y_ag~H(#i+ z8rzI>S6e?>;MORrZ+6+WZYoq++tidDlRxV92TVeW;k3~c$U$h>eRmU2^q-VxzTa&s zyT<#}=KE0jU27d$j%yfv(LikuH%AT^-N^5)hXZo~l1Y17Me&D)I{)s0@$B7p|6IeK zj+xDllkrLD(haR6o!r``LoMo8_wlKbH#<9xas4w^_xAR}QSl;*cl6sFxhZZ8XU^|= zd3lwUl+HGL^N$)PPx~S55KsRlJJD<2_p`e9u{zP`n`G$DbOrz5@87*)%a!AFy0-J4 z+q=%DCv~Fi{mA$qdMQC=2%R&RqX+-2t?cYLh)GY$G}C=;E=5H|di_C}9Esz1hSSo=K7qA0U7(QJVY3Swc6qcaMpOZE?kuEbp^QiN%k?NG{7hC^?lKaI`YrN zXeCRM52!*~wjv|OmXo~9&AsL1cb3$r{m(w<{vDE?42Y+~N+1hW>Z@^Iq6GxJR!uKobj6Q((aWb9bYC<13iecD-iso z;#T8|D-RlHH6v2^)#Y7p5g7>5NJ^_Ykp9*zDw_gQeJK5h%xSX6m1kKtJ6MvcbE@n{ zhm+<(w~^r1W|ce7)%?)yUE+B4z&3|pIEnOu0u}}!=;`zAWabJ12p9!@YGy{+|LWw_ zxpZ7=L#Q)xRCb7_en2Sxm$C;o(V0DK`gL1FabfSBLmm+~mOod@Jr^Yqz7Odx>}ON9 zVa>&*cnyhAP3FFRv+!(B^YtIZK_}bt=DR<4g>N1XRT^UshMK%TpX5ZI_B;;3hI$Sh z|4GJ)`S`WQ@^O}5jFigS6mhz%s=-Imdrkz~lMcG2krd2*bbPiu<@6op{Ur!L11Yi7 zf@jZ=?_hJ7{B+Be`UEq1{pBlmhrHxd#o~uF9e+CcoPpnI^;E(U~yOFlGe;riYxfc%G)^$+WLQ+V2%> zGvSwWtzua;V^f(dw}N15?wK`vyy{Vzs_MBx-A^y}+tm$aUUns`CS<)-i>)p?IdLel z5n#eTEWpE%Hz_y*F8%B`#})4CN{TB+EsZ%|4F`0{y0-JD^qiS$Hc*nm=jg!P?$i-|8`(b*~oDKjgX-#Bm>&G)emmJ^fG84 zz{??iJ609WofqERtQs@Zws&$c=y|zW=$^cfJo^iAQD6Ecn~)0wS)(oiNQ50`K~u*X?byitu1K{>GlpSRIMy;vgDZA*;?lB^l?$wc&3S1af7->D`HE)n|kDc z*KV_yvI_=xw`OjVH{VWeZ-$q8FK4fn4LkhK;`~SwkHo=j zE_FxTg$!NywOpYYvwWc0@UP-g$jGXuIPQav?EY|o@OyB31*0{?E45){%^ORqbJU-~ z2_-xZ$t1VnDNfYV8trIgc9vnLzj6G{;?EB%VnVx^v)hUEQh>kIa*=7ueD1O`c}b08 z$P@&?5;9s`NziOzOe0rQNA243(!Ym9Bi;>1Fh8ear0u)9>2wk8TDrO1$Ff;Xk${5d zZ=O3zMFg|`a~uP)rDZfMbJ}UY;%=U!H4KjqO0HMk{~VnSc9eKf(og-PW$wc7L|n63 zIPC!uhRBo?_GPJXHsx8c&#ve=ucT+d3SD5|fHZ5Au<$8w&x*!wz9p^kSb(;qy*moi82SsFU^~XT zLf(o8<-m&L!D`mK_+)miCTI=m6me0+sz}_q# zLMMN93tNb6?*{bHG}=J5pGoqALT|qlXQ6~lNfQY>(>9Jh>#03tEJQBqI`gY4H+Qld8ydLM8(Ds;&Rhk2P8bo;qngtayC_ zct}ni^Wbv!lldbVd|Zo*sCnvqy73W$#)|MHIBP$RCV#N|9Tv_CGups9US+cfW2HEU zBV_}i2y0|68f@DPc!u(uK93(=I2%(#n-a35alU{5o+&gdF&;nqOj0(-zz*9dc;40N zd3dyUceY2nFqs0JI?r{Ienuw8Oi)siPPSGpYdSm)y}Wd8>|QY28};(4-~6s@_wlyB zzyC2douqR<=BD(0a`UOCaW&x7b<>?gz-PbP$w0_+H#I$vRIz;L5)-qDY0y;no9@%A zYVeD%Cha`>7>Ki9 zh8H|&9ReXmkF4wUzs~inbwYdEZ{;P)jQUvKRKY$R1%h1-LsZ5502=M%^tHtH7|hGf z3}(dof||FC%>>78XN#4=zuic`zMZKwF+ohjLs3D9cl`nO6DFp7;RocR)i7zPKaH;GZw{DAI)QR)yA;dC$Jx`*YSfVs+(Tr(u+%=-6&rm#*Pf z&|Z-1@G}i=F^RNwH<|z#wvjC}OH|~?hNgDGDnV~wTDRh2hT-RbRY0e$VuDrB=+Gm- zx)qqDN06+_BFo+|Y|B8Wfz~9%1XI4GhOsbtDPs`191pHZT6Yy&1pF3efO6bWru`Vg z9`^T#Ze3=j91b`4&X9^IWx?S(1V*V7w!qSQRqoS;J-KeRoQ}D0&X^kT!!#JNqK(cR zVy{Ew-NQxD(1;|mFh>{^)K6tj*(#YXgIs_C8QYdyvx%?r42eXxe0oio(`T8g*r(>lC7Y`6+^EfQ2qj~0zv8KtyoSDYj zXmc9(chcl7LmW;nGvQY={lo~*;>Nq(M|*9&xi1t3Y46b(I~JrOR~Jz;Xc+HXkwqA! zyEEPq+=0J@wj>W8m$X-$dDyP>#q&(YyMBF^GODqf6rbFd^ty+_gnyIEbjlud0qcaP zVke4+`p870n1jv=4p%WyF2pv(m#!IJSLK@QZl7!oIl*9U4@Y87co2|^3NAa`c?SY@ zgU2*DdJCV<&{M_9)5!{oQr&K@M3~^;&q1XK1MX2GgptpNAwo6L5Ps?Tp>OkN)J3+R zVLrqb(Ra~-5bXuz%_(s-Ci%7bHVK`%*r^4XIj84;WzGN?S^VbX1P)xai`9j;G6uUi1*hkF;S#ww;lRxZV=j5OOoe%<>!G`t;D7X@H_Q zzNbfFePrkQDv*74b_xwB*7Nu8-(@zSFu9m2DOC+k)|DU8wsOQjk9EJ*ba`EFgU{OQ zdfyUQ{dEOmC(jo1VipStrm~U=x;*W;^3E`LQ0Bb6aL&jk!@NB0RF;~OU5J$}^|OWH zGA1pnj)4AKtcLAwTZ>yJ&XC@zuT=?ihxW}4 zE1SjQoTSyxa~0<^(shA0P4`zVr^+IM0d~crxd&c6d@E@_xW_t9=r51)vHF6Y6cIk( z)V|+G&MW*r8Jk;*`pPF1BhJgyDv1p8JKUz3@!=x8d-m7-P^gt!MF0J}bn;=e>rr zkgyh%_H1eirB>aYuI(i6r02EcX4!J&dMopOzYF#9Am)ZGjee2I6H_eWP~Sp@H8&kO z!F4dFwLQuLX42DyR%BA)0^y-h#+uBzkDqXxK9oB+TY^%gj$2OqLrig?*>G$-t2j~a zK23Mhz*UC)JtlJ|TIiPL zr&uru^j2n<$)-1FYHBVp7Or+SZa|uUW4a>2WOQDXf;sd2BUlJ1>Sj@5jd>^?5nyBc zQI0#R-J0;Hh~XzRrbsi>@^ovu9oyFR4#Gf{a48h z_@Co|A7)nlcS5j>cE!TlCB*mf0!rPc2AAj@P%+t~u@BC_w z)z#sDNN1DLJyLXToP~*(iUr*BHeaIjJ%68x>NE69WScl}xd|4IOc**9rs3!`ddqk8 zr-5|jviRo=+ZGVd*Xv3RpY2J89)OmY%q#mo{mG#yOFfMa@`G)jEZf_2V^zL$SzH8UH)1G%ge z0=C~f0lME=XuOCs(FUj#$AE5eS&Jo7%wg#^q!CG!GKRdK7PCUYF0sR8F_g(WQqvOV$o#?apLgoW$8E`MVWR(BXf5-kO=C4T*}y1 z<*{RE27{GtW4o^uoFo@H2jhsP`I(LwRo#eyg3Q-&mjxzQ+EZx}H zSo4HHo6$k8Fzxdc3;A=0)X=4qO;tBdaSjbJbky7cXQ+j)j%2D2Z|F7DS9qT#uhSZa zC|M8*=^p*~H|81HQnwFJUQU6%GEtS;ju#>A)?)4s^g#AJ&|U*H+ZeRU^G?e&L$;{% zyIoLT?=^lORDNx#USbJ6QqPB+oZ9;L=1odid)&1qiT@<{_&wUh&ev{_nCtSwTraJw zdnRzJl1}9MsIC)R_-OKvs+dsOV(`dR{2S-iB!rJ3TW>WD8+BqDtO5I|-4GK$KX|#G{kGOtU^K~Qhr1aUVeifMNc6f1 z8-BcWWMpKwQ5{tAu+!H4G?wezT{NsAraTx^Z|sxmfL}o(_0kO;3>bL{E8-x2}NLMR&i7NpXpTU3R}aaL%wJ}XD}2}C6I-( zcm9910Nn5nV?_#ak{qedVD6^BUCQSmkRE}AfQgSUiUKv>hWB*c=V2N(E|qVaI&=EA#S1V?yPt)rGur1Ip+`>RB%|$6 zee!FoTgf|ovI><0k*~_t(cWW8!frmza|L{z&dlC@Z9)@AN()+uqGVET_0)~vuz_>Z ze`r(h@6P+$0gU-!asN*^VWo?_OFmM+IEs~daQx38CCXI!^FPDO-duu$>VL#eL(+%v z|7XPiyd06H#rdCOas2->Sj2ca`Tx29onk5^dk*hz)CQ$I#e`5FxTtpB&3j6#CaK*-rm_I)QBMgg@scJ|En~xk; zvd_;H`n^St{)9>V*ZZL#fJKZ7%9D+YVu*rC4Vn9?@<2{*g0SjEt6@q#ss5V)8i2(A zeuCc>4CAUy7)?w|B8I@bb^+HP{?y!I1ch(K7q8W2bCFXHTN)|9-|IjA8(4 zF^O12%naVUvE1sQ_RTkyj4H+A22N*d6ne1?3zGj_=f9`(p<;drApI|jqKFDtik%0@ zHcGd@1vF!K8>E&=psENq5C7ly|6f-K*cV5n8~|5Jv%62IPVzfhQetAxg>k~b6v0$6 zByj?!qY7l~BTN(B#?jqdVpOm}FkJ8)G?Z4Ytq>J;DR>E$cm?WV05T%{;E4qCA8V!> zemSVHL=y%LI6s{@nF3G@Uk1hjKw--SiG+Y8267-QJ~9P)MhtnKP~HR(1|an*5p!h% zhX|e=4ju%;mKv_spYjMG;mcATh6C4f5qSE*TFLq;Tf@pi-hgk%q-@2lqt2(5W7`&nV8W0?O z@PbGIYQeB6j*38L)I)-+Q=tTM1dmf;kjV@IzeSs%aKf>2V*5}D|mz!P(a8BORLp_j}Vnf5ZsrwtE~buUqGfu z4(cmZ{o)e7d=aK3u7Hq3Xl_!amr@EZ zRZp+jUrL$TpW_aY0LY}`W@G_i>$L6wQ3aG$dpX*GPuzeiKlP=!K~Moej7yY0hQ6TG zH5NWf1{8%a!NzHf%ScOWD**^2MO%EBrJxWTq@T?o6o=WvmjX_>f%(Xb2oA3J^8+Wy z5w-Zr$+4)Ms|veg2$6r_L})+LD!oY#F3PNl{RlkAE3(Pb!G&VK&llmf#l_8|C#y!THtp)bCkuzEIF`LOleIpT_BYe zRVqhe)zMrDj7fiIgfR8s)wvxhIYK1KRggK=!;5rk)%vJRqV`a^X!azKlgh^hEh$D2 zfD;l_F<^`dw6BP9AbPAUo%<&XYaDk-R+B~(5k5V6)?rtgIulS~;AdrjpjY2U!CT;i;t&%ynN>3ecLV-)2()>;e8LK$8#|oFA!G;iI z4p5;9(W6NHYN5;F8mDSDKkaqib&XYYH1EsG#0bZ^_=iIJe^K?8VQqC$w`g!L!M#9m zx8hLTp}4zyfnvp-LUDJO7N=;@;O-Q6cX!Rn`<;94y=VSff3ou=Yp*rOv@y6(H1X=P zl(IV2KdEzow4JfcKXG{Y?>S8)Oa6x z?+dPY^lmnmv+4k$CY}b~lvkWAhqP#J_-|1uT?%;Z%bA+F`emJg!ei{9KuaZtI1p@LXelZ{ClSsZ5WT5{%z*W^zWtlk|Mx~v!F7F7 zjEg8^9$EVIo5<%^AfWG53WSX-g(V(sw@#phjF2Gh5-n~pX{Vjq2f*&2LLt^>lK9=- z4Cd{7I zFQ;D1*3OmHProUvfuvc&K|x>shbf&uG{1bz09PtnN!MGY4q5R_RRSLZua3V`%$F+0 zc4D4_KPnGsyh+4Z@k6*$xG~XxjS}+J3Gu>sWx^?FRbe!QIN2p**6S&M5{GzQNLg^^ z5Enk+VK3Afz&U-7vl3&8h^I5TmWuo%CM`)51t0iZ9ZQ{1!!L>vJK2&Jv}oM2-9TZ@ zQTxnSUu7nv5p=v4M}8dKqMf2Do*f%$J9R^;s9NSW*O1|544+Yk*VKax#9fYnGv?D) zwv#FDW700wB#s~I13*PC1DSvGj0}}9jiUp5=z-`RH?k8cq#86|Ee5x9W#MFLS=$>7kRM8lJr zvZ1*{1z)r;sDM9$73+bTRUf+3zBG8OXJwS}!HWa2bcoKd&a=wOK@{H5pSSI3B`ZmY z3nNTj$Naxx6b|Zt(1Hkgib)tSSKrFW$PH|?L9~%P%;uV%lBA}FmE;r^#~ zxcP(8|h{R@E#7f&?zaxme^Gk82IaL_=rfki&yWDJt}!>}!PHUob50KNhuA z_lS52IpY;ei;7E{iAMC4AIdL;q6k|5EM24{Q>I%z;V9aHjgO`$mcsJ*ph%&lSm_VX zB~A@eQP~gtLKXrqX;D|VS(=MY$;H6Ir;UV#Fd6nU*zTJ$d;OAwmSzgfPi(>v&V;{( zDzhnHc-S*S=%*zcE~i$7~~)kO1t^MtXaH^TWg8 zaA|OhSsjc58?nr1dr}oHGAOX4h&VC}%Vg6N5aB_h04^y}kGXvZA(&_cN}q)Y>^AW< zu#J=yMha4VW_och|HY1cbGut`X#od-$=8y8*8AsrQFy2I2lpaXLY*wlqac8Qnsoe9 z@d2Td)KV&%DNZ%uz?hY*pZ;SCiX=RUQ#Im`TkKzCF+~!y0}WC@J(UX9pNX0bNoex7 ztm?nD9?hEQCsW5Sm96SH(TL#z{D2lX!a9Ifw*AkaYF27|5*m? zR2aXsGQDK22&VCNs3+LOY`t&YZa%J?xZY$$b(EwwhkZloq`EL^%6a;xp-k*v-(I$FF$(Y zI&R_HdL$Pk#!FSBy3eOA?k8gOFE-lsnNA%Xp`%#WC1?lo@RBBgslUhaL&#&*SQw(! zhif94tF5jNYY!K|p?=paWf2z_dlht4@)IH$m~WD~h%J8h8-clCPWsVrrpt8Y<$`nTyzF-WuE4)yg#B%Vm{*)5PgcpQj)^^t@plS z#uYk{5X2qE)@wnGzTW9x+qjkIeGJ>ToOzg#&;{sM)ad3HRYTAnzRcnzkkV8Rr@_)? zCLJV&cn>1$|7LWCxM4hvsuXz)lkW4Daiw zEJsb@sF*_IHTO@a(|rXQVT+$Wbp8BBXg19xfjrR?@s9#=jUs$TT{sKZfL)KevIw_> zF?4{RAd&>|jTw7b6NZ7vARemF2L7#LD&TW)tbkmYpx6}{T1)dVeX#=`gV`E1KU zpw;`x0IVIsNCi~GF$Hoe3T^<*CF=^(u3CPLBRu&pzp}k;h`ehvwZ$sp762`AR2f}=q97DLnSwU<(Mv#FR$Zp)*f_bn2h9Ce4D`+yn=6||+ z@#44fvNY*G;3d8N^6=rkCk`^k=D(Ns#w&8)Yy3E&ox{K&I<@Td`l|gtt^7L22AN;+ zEXD56w^+YD7ySItgZZ`+u!+MajI&c|p=0|17Zk>ha~XUNd44i}RuFk|U2r>fmDj`HcOz&6PkR#}{Gi2nx5Df9@Jn(6M79 zbb3DsxSqW8yGn!1i?L8Dq%I#`E5^e9Ixaa8EPX`%L5|LFC)nOzyz)AIP!K zga5HYzz#v@^-6E6twzFXscX&W<`;6v6!_ie^Fuk?OE1IwCispjDdjk6oP)xQx*qn9 zE?|4|%<)2#UGKT^#r<`d?JXwn?V3$FOXmkggw&R?*Y-9h1S#OM&B&*0feG?1@>(VG z^b3;qr+_tq0}(wvTpcw&??vDE`9$Q6OXPi4gd}Y}qT6W0@12Y7HHiH2t)}C;&`uHs z{2r4e@+R`yukRU~u84p&1|X*9yado3VnTjE2EfnIO@EFF5xLuVQ*QoB&d-yO9Ad`M z0R!j=A%6@CI2(vrfsp$=kdbM-v&05m_)W0P{)@64PIcG{-&+Te5Eyjf&US}l^@V2|t{w-(Sy>oDQ;_zsS2~4WMs(GCYnf;>GAf-3SasiKjfH%M!*DJhXSfv(#(g%A`pMs_IiImb zB^))UJ2sx>H;nLt5mqWs`ddLaBl{g<3d!hv_RE`SCYR3c?ks~1`tVjJ1N{JM%W*(#4-&dPtW zIvxAT=L2u$y7y(67s>icEo2MnBAc^46RL@*WW?lDYeMh8A&HoVVQuJHUF6Y12D)-foc&=#GC% zqj6DFK2J?=Jyk0k{!X8kiU3_Ms*zIta7e>*C8+d1Oq*PeIC)M}6nFrYnCu<9lYIEt zdI2_C^D#}+g~_8 z?lthA590Wt9iN?a#Bm+XE-Q88(6XcND-*A=NAGD=@m4L>Y$QD)FoU|e$v!0cpp6wf zAAc_PPs#wbyz9nJ5sboZ$mb;>eZpBQu(E9$@wF5g{<4Mvxr#|ejr%% z(Ba^$rqbK`X<{(IWAe}+4_$Jx^T6ijXxKGCVlC{FC@TL(e|vk6B?)Fg%FYq{ z2>?42@cpXJ5aY~Nt=1Ltrzut)q0_=yR{!#p{E#x8`gqMTmIH}8O7t`3kFfR zO;{XJL=`~sEQfjP4(aZ9TAbz74=?*YuZw|c@(5W3v!Cw<=gdFN|3K6|UMAdl-| zk}lS?mRGu*be1q_-IcdYiGe7pFysnU#sV&cWxlQDcS=cx#he9k2o)Re1-xHQ_@~f> zlTsO2lvKu76CjXr5a`H^1XH6tPIpe(?i`;(n%VBFPfazE0ixH7k)^+kb+4PX*Zt2Y zo$>W)#qW)^jV2lXVMUDi$A6`H)-LUq_v*yNC$)pk?7xQ^=BjS*w0NLyL(t&Yq z+vXo*NZEy-aZT0GuecceDGLcV$bEBjuK#l*<(p5yO>Bis+{X-2@j?fS*gOZnM_#b; zU*B1_fV;&>uxs0e9A(uBN+114f^kQ>fR{tphxMnHy5fVEY?RNrvRHsX?tJ*8!k?c) zZ1|R*{?*s~!bT8zTQbCvzMn0JgZDk!KT=pYgIrBQYMrNhGH@o+Kl=yr%rla~rTa~X zLT75et%_01pht@XK{j~BXzEw=vwPnjZ96Gp$E$da9>>`X#ibdyIO)rzHowE7hZ992 z76()w{d*I6vTWt{*>OJzI0|P{h{9G)cQ-uH%JDnMX^a!OAF;1tBjGT6Tq=5D%Ye`i z`H~Uwnv#5J@V#q7Y6HFP2COesSlg~9nH16w?b0v|H2~1!NfrL)7*_4}8GG4Jzl=65 zV4OZI2CNzzQDne{yoP0!3g0ZyD1&eJ+5F$L7?j_OzpC6F_XnWDw*_5C8tJxg2SFay z-F4?imEVSbCJ%d{vVCmeCFm#8kX}BFs%Lw>PpgS~Fp*;OEUK6oU**G^t z{#fr$Mwj$OusT_m*}?>&4uv!00&*Q!(^0>>^>Wc_a(&swSG`j{;Zb$vX1@|u)8V;! zIeq*Q4nCffGQQrSUyq=ru+VoWeEdvXxs0B1R_su~h-WH`*GYNr$=&(``!cE+Z0{1m zmsW_r@%>Ju;%@^}3>~UsDvHzNF@^8amg(;CQd>KjjU-=4MYvzek4CjC%W5{(7H9O< zD!N>Y8}l2bk$mU0uz5G01`cZee#f@^0Ut7&0cf7Pcv%Yg{Ks~-dSSz0%5$Qm^Y$|p zZ^JpIhW-&cLQC(hA(!$Y`9;Sg~Ey^qrh@9V; z8cP-W$Zka$2EUKFgS;KWA#=O+Safb9?&)Q9{y7NKHF*EOWB-57ea{fK&Zx~44BUCe zjg~Ag|6BH!-^i!~4;c>Zq6R)S_->CsORLJ^t3ZeK#@2R%yK4Mh$xz~2Bjoa)Y!LCD zrNeAKVw|L@z4`lH_DMA`-;i=!&FGW)_Og=Tg5#3k65cG@4)Q!_5rV+n$4VnG3sF=Y zIhTPvXLv%F&eqe1NC1b)i9lc{ph&>b76C4?mbptnlpKRzCnr*Y%8^)=i>v-Oqr#fo z+#^et=hu}#&D=$(*JMdNq1Z5?6tJK0c^o#b#-eWIcdqoEa{bmHO|k3x5XJIUHKm|J z&v`hOGfv>f@3W#UkIPfL4RwkJrN>u#~1Y>G_AifZ3SHy81N%2rDh z-@;*GtJmiPx1rD7m>ArM;cO;#6_Er}Y3%vN_qTqLw|<-#OfnL|SM))eg{x?H0RKmG zTLEO*;97AT#|X)>v?Uc3qUOABl){J%2}%@;Fl3a7tZ2xjgOuMCEkuKScc(?p_^J(5G}?8ZyCLYQc*%=K)6mB~L~TqV^W)8!(W zB?0raB^o(I#sc_I@@=;+Y(eq$zeNSYIT>6Bb=RN-cEh3N!X4z+?bmwfd{@i2xp4DA z{fXZruHy^6EGYfUdh)1|Z48V5g8LDDLUuw7Q^F)~5y9OiH_n|vSaIR)@DbovPCncfQsvm#&| z;mbk^%4NAw*N8l+?JJa)k!V=@khjbGQ{;-KlYVYrQHIzVWux5*K71iuQ|9DU(blTc zX|A%i{kFVYZxrw}mpZ#tn+DpHT?zR?LZa-3PNX7iBg&#@VHE=61bU)}valw>V^>z1 znTG8oV&K&QcMF}rc<@vif%#8SKa0G)w)3?=zP>uPVcs1J)2fY7%0&#+Qo@UgD*i48 zzzo2P1;y{kX!)KgEcowL|L`EUvB4Dd1>e?VDFsr=#4_vsz3hv`iO|v47xWrQ-rg=0 zfgI`DpY;oMkqtB$_fh$ZD&hcs@uHh%2O(|?5pGz6ehu&!A2e4IRfs-VFbAs z$MO~QiLsSsWf=nQcDA;*58sg(`s*i!)|QsMj!M$Bv@}t~0$z8Ls!t4kucW-5p6&#j z*mT>AJBoxeH?=7I4~7r;sVZ+9jR@bnx=uvFA3SUadkN#$6wIBrAGHE@yG#3; zt2tK@$N>jx;Hh9{HE!e6=lOp%0!qqCcIqKkhM1Z&*C(hE52R#46=Xbbs~Cv|YT4>y8_W<9fP}T;s0)_xqM(MM1iFN(KLa|w z!JjG59f(xq;YLO$li5OF;g1@k zZH*}Y$`wx@^?8k;aSI2CN*T%q?|Fuvv zq+x($j2oM=8O=+^Nir-UAFuc9Ea1#wIS47 z5x@v+EZ~4ag_qVk3{C?+w_j16x4)Hkhakyrp;9(ZXL8j2h7m;uTEIll(GS6fE=%J} zC$47?5zQ;7EcWpa;)sR*jw`hL?cbrPi@Uz*L$c=VSrBRS0^CU^~( zI&5SjU0}C$N!@ocI3aNxpAfk*EMhu7i5o}+_(m0j_$n&c!!ku`J{n=O7>_GfJR{Zz z7$~jM6cwe=Ffs3`INn~BIY3HH)L5D!Y!_N&H?s%U;&441(SN%6G_wQL-&o3jgvJ>NP_YrE?FNYUu)~Hh z!Rz8uAd^}Q62lyl3wxFOPre5=HZ}_148(oLQDHXtlMprt<U@$0 zTA&00jRM{pA2y6L$F1;L^d382I-6~0!((Ibf91XJJY2jO?L_V@DSBTON(H=)x|$M_ z3OR31Z@k|hh`eM>xB3LaVYBMrzwg9}G`SsNH-%Suy__|#`*|ACCat%+k9Iuxd%m~b z1XHwGTopQPyj9^bY0=}2=ZQECZ%aw)fc;kf`=tMxp8a@F*aeGW9Upp#0bVjRzD`1; z|IbUmGHrO!u# z^@zo=zJw}C_+r&1421#3U;zPuxd>-oAB6e|M%SM6XY|mhjj2juywO;F{^xhB;&@eH z9ghtbIvS{Gy!ve%V=y*a#791MQ+ZtdR_#ik-1?x!7_=5_wGO9=LLs@G^btyAG-`2EY^t2yf@8vv z2X7DAR)#2E$@ZJwh#y11_0F$#!`8OBUF+<>_qtJ^@`(iNHk1~OrrJFDi_H0HErn(X zZ2%bnI=s3xj@VM2d1MKH85409D(OfOHBz{PMhBeDS-V4_1gd z>_(kN0aAFciXJsnU{&NNVy30=Pz4Bymy?ixApgqgfGp~;LtZB-o#wivSdO&1e3en(FS_h*KSMTMsw z{Y)9`{|XTG>I*)?Ob`pEJ1o8l-jg{8X#$Di25KdWVP>SQbrEb8e;a|~2n2^n7W+M*cP^Ct zcFlEi&C6@}SDybdoru@vgy7eeI+xy6ZQ}&wrRoWnBAK_xK`7gH+lEr!XTSd<*oB(r zf%Nk-3R8eI`1W<<{(MO(R7)m;nMU||WrI|3{_?U{Bw(|fT=@DDOwRv(Gld|xhMuX4 zp2@KOn-rmi=bY1pozqIErE6M{Cum3{-S-TfU|j zQ3>Xw@$Ao$n&BwvK){zK&(7QXy6bkydGR61Vgz})9<1kQdsb8py-?er+bi2aq}XPN z`+DnkaOelvQ3n`IZc@WmH+9Xt&gNBLTT{{!X(SaOWj+%%7I$;@*Rw8IPdly6A_agTt_!75w4n4%A2#%6(dN$}m;Q8Qw9i zAHpNpmL*;pvSfCAYAQPT;glrz7OSc`yhehqC+BaBAxsHPcp|=cEFB9Iu@6ytY~v4lso4Jr48NdlBcgl8fcNQ-7H;#;Vy#eb$AgaefKH z33y!bu}BtUkEm1{b5+DeC-)tg;<8sIu@uo1?FLk@wz9n^Ql!ElA0=Weg1kOpR|+r8&g~ZuvZ`3ZMzIpzQX#EU!L|L@L(utCk8Ch~C~d~Hi*T8cU5^GgDgqgv z#NK^?4roIJGi~W;HiI`~OIGz~6w)sp+)r;N09 zG1IRv%Xcnm2t{swz{LzLw$3|$Dcc0vf}#eBS_+_QVawCAE~DLC9|il=>$Tu0WkBc_hGa0Ye{M8K|`c@RQo^c;yhsy5ioQH zJ&J&>y1cxcMBp~p=UlE>O+11EIo%7g-T@tX5RZULPnG;jpppTYY<2}zA5d=7q>Z&c zv^~r(EEsdzrzUeE2gf$?IO@u03|m~^+{hu@qeq-`eUwOi=bYagO0ZCl!dh2!4Chqlp<-2 zTpst^MX@>Yu%40+<0nn$CpL~bJT9ML?9D5D(l8D;?DgLYv^VrP%g<@Ch`RZ{t89Fp z+gtHC6Z!sX5%*5hH+}Di6!+2Tvwh#@=M>8iZUwQTBmkH4juW;TFp12E3}!iaro}++ zl#-`<)@;4xXqeEhJa&1=RHXW3M<*cqTVzHzz&d!!%0`qCTt$U*1PgQ8%1VL=urfib zIy*aJhcoffy!#{#6VG81WaR7h9`5+kSeh<5J`h}Xtm`|tP{X9)f7>F0s(~wwtTJ8H zSKNk<)~`GK0o67m6e!IENJ*2|!Tq(YH=HVm8{LJDt(a#drEUEAYy)!ABJAAb+ zu7=T^ClQ7j7IjpbUD77B@wXhRsk;`?*YqC2uiU3vr`d7xeP^ZVLchbCi*Th)yF0%% zh#;HS|M{>r8Qy+Lr;fhqLS)A67;kpb0g231$5POa|ei`%#*j!ZOZ%5XS-xBE2A9v=uDLkj2#8nVJTe0tg;k$a*NA*OzvLpx)cZiL5J$RL!JZNU^m$;#&`y6| zixHN_CHw5rP{k!!t1M+H#{p$puwhoW8w@In3Gna7wv7+2vgf8?j~JcEWA}KJJ>t_V z3m;HFnRm=#-^%`2A|(miP=02pp_T6I+MStI-TGIXaey9AEbUrQ{B^eCqO;QkrLLk< zYAF0@)6GXi&FK2+q=r=3tu_+&@-xn)lcl9)9@uMw9P&6wm+PI#qMXI!IA5s?rA<(x zO(NlO_OmRKajy6IoS%$x%&~+#(#riuM|&k>9`kl{2?ctr1R~LUMyA%6(S=)9 zC0l%A(r#3E27A)&LJfIKK^j;}|Mc@S35jP-zr6vb(VvMXxB!`faCxUPr|;)`UJn=R zkVUpmj)o@c=sHQ*HaOHkHF*$>Ns71_HH}VHgfNR4AJ7m8Nhsy)i86-uV4Z<6B~!K1x38i9P7_VwoAd;7(R(wJ2ATC*z7AiH z2l$(=d!GLd!wR)TB15wYGHB{a<7vP)L`;}w#E&Bwc+4a!nh>;Ckx9iQbrkZivxEdm z*z=y|2s*8eH2P#7jJ0~~FL{;yHA$RTBsTQCX-wm@2^`9=4W1%|H`F!CCaAaILdIgR zMX10^00PC>^|4_WktHeW=3%oklB8FikN827RK7|HwTWT1wEBj+1Iw*OW9$|^mA&~? z81yVf9C{wSe?rM^X;cV-p}AV}@zWF~e~>}qYShsdQpCvU>@8}#A>tHz710NeBUX6& zu&4U?Z9AnIGFgIOJi~t|XA5~3dQG1DG0k6ioj!R%xA3+8!q-&MForIH#b%40Fsg^b z-U6i(svQu|tdARuC^`IQ@1sn{mCYh08aVIivU49o(&V)C$8j(+d|<>ZhJr@dOg*0M zyw%;qU9*KYP0GX6s*UV|R^Ov8%CAH<|(q1xHk21{Wk zUGDEf4~9&&GG4l_3Ic2E*vRsI?LP}&$J=6A48d=$!&DK)Scfo!G%>`SCYymqT^!VM z`3>99FyN!TP>cP`d1}Jjjl2kx`p0;izTc`H_I6)*xS_g=U(Z)tl*Z`-F5k$DXOA*7 zGx=TjaZ{3!DewJmvY=Qax)2!v48#iRb|Hlqg{H_4ynZR?u`)B{aUG!T48$-oGoF8G zM$rP}vYmvmH1zCI+y76EZ2Jj(qicGl?_(uS{LL z+Tf`VM;Rar6%YT0_kTI{Sa)1RqgC^7a52mBV##hZUxW0uRHQ@fdWIwkVnqB4@2bf^ zxBI;Wr5PD(E>zHJ9y%=6eRb+ZA$Xd2`IrDehN|Asj!5PZR;_4k_#A(iJM=c&y<89Q zS=Vj&zP5)$=T>Ginkvk#Nz;3R$QP@kx*Ko81K`oC)e^7)(V8Xeov^Qg zB2>%QK#adp9)y@z}l9g3ns+~Dz><_40xaA!)GL)!ElhBGWx^3rD8Ft=8LAi1} zc5)tgVu%|3M3pjVU?R}*r--d$K|!oowm^_>IwHAj{kiP3M*PM7>9ovqh=4%298;c; z`BE?VX?92X-EqIK{yNdY9gxbTfJz%jHeiZ`1&2ZdWVSCt)^WC}q%;}sj6#`$rv_9a z;L|Du69vXol?2nn26A~P=Wyr8S<}22NjDCzeV6^JZLP2BZ)Eek)YHj+%fht+X6wa> zP+ArEm}_1&K#!g4S;wT;X{O18W8gpRRi>kOr2HqGoJ&XPFfloSl4KOK>f&gET`_I9 zjYjG{A7(GSrO5pDD0OpdFgFkEJT8GLa{rtM8O>ychra@QzN*;_-qpMhD5X)YME?<8 z#+fdw&cGCTKUJs!zYHF1Jl7Np1;wx89}ecs^TEc9#_NAV0Ko%;3Bt zt*VN*8p`*V@*0*>SZLhv8to1*Vm!>|JTd@Tgdlc-fYLMwPu4Mqc#NRG&a zD3em7s)B+>_S%;t+a+fOP{*=h>~*GOnt?*ZPr``!G_Vp?E$q~eB9Ry9kalrMbnv0g zZoY+--+_p%y1M$SqoeS*M`!4F z{ZekMG;H&jDV7svVv3np8zB?)P)uhxgBb^5A^56KM2X>AsoF(nuzVD+Gk8%%f5Q_{C3uvWqXs62X$lP|%y!yATK=g__tm zI*U+tfQljrSz3Cceju`-D103`t2|Rr9UEO~Jpl~q{7#NX?xN^|O-@U_XJxxm1q*ow zk+5kD!0O2nEBY9?eQzq^Bj++?q5DEAC2j0YE@C66>aS~CAZFD0twN0M9}$^LdW?Y# zwkaoD3W~eAtM}l&aM7_HT4E=MG+(S+@ic0cIjC24A)brz9Q=ZIX4qZN*4Y6rK@`_S<0Y zK;GMa#=<^}6?N5TO=$ph+Q)&P#3IJ6>2x*VWliMyY=@2i3uc;{8cs162vs5RJy8B& zpM>>duFVQ^6`SLOi6UO8JSQswkP!&RTT<+qWtij>SnG|OAoh|L$}nhjA^0ojh@mfo zohX)tAR{P;ZZYY5F_0a{b%yEy<1JT<#90ZboVQN-@b0BYXw` zjFC_+x_ICgq2L#4!+W72URp>Fg1$1Z6wZ&N@{1Gpdt{0xZwAW)(k+YVo7YjJ834s zOIh_g;3fCn9OT`&?k}9FtFShvBU^}~8&J;vmx2)?=9_sq`uEF?uVvNDoQy2gHchN_4$xJik zNSv>Y{CwniDoT|}2_9$`D`89kltV5YGpB!ZO@!?ST9_8j4gQ*q+dDli$sX{t>X>)y zNt#B+2NJ>;mdJLGVBD$yB0bWbopl9tQ|Qd65-!y_lUX+AMRTxoQPo?VP~R$PP@6|1L>0rJoA(tbN6O0f7I&d_%TmT@F6#k!=7F%aFtjqrJOvb-%t1>DxiIIm zZG}zRar>$27fy?s>Vok~h`RcsR^rLJEIeO@oy%GL`uC`CT;l3=fq8Y^Y(O1>p}s)3 z%0G=qeZv(sd22;oSjhAAAQ>ha=9g;n-vE^M^vSNSOWS2zVs-!>h#|B|7GAXHLF|s6 zWkMP66L+)iD2EJy7_DoFzAI649@VT#I#GhUPK@wojbaRR7{FXAqQ(62rcO*t{$Msc zo64jool-&TYbNCVxkx6HHim33J{H|;i1pBQAllpWD%CT!T3~95Z+Fc9L(m*?WTb4p z6g#XApngtV)}$$dIi6aQ(HUj7!2j-yM($|UWtRIu`QsTMx=lQHP|}```sl-g(_)M7 z&O|F$1)A>?))KO$v^o3?7AsfczrOkM2~&4C3<-M~VA!%t_N26E!FF|9CqGoJBs?6^ z{)~IUz-O2yt?zX)`KFXpf59aqC%Ga5neyibJ^QTv?z0Y&)|%X$Wcg z%KCTz02eju+=)MQ_Iwis?nFw1Ma+~1^k;& zeqf%2470sctUmHfl>6WfTK;3;2PyP1D_J|bzw_gSg9V+=N*#TEU{tE=ZYcy@2Cj!m zAt=A!S*8T}zcIbsGTzhZ!S;(vhGPUvnLsIgi770GN&h&13gMRLZ0&)G71fU?Cm9VF z*SAQVw}CfJC#-!Jy+8BRwru4jm`ta4>>8ku75#?@h;(#5U+SF{@jM)j;(dF52Yen-sU8{GyOPyfG zFZQjXVw%dYO-SkCmaf-Anaulse~5s#&|Yhzda*oG;5X7uPa(r0_iM1441=WEft5`` zQwyJq6HCsjn>e}&T|VAYO$`)CML*<5yVDs9+lwVnePn?#m?K2N8?8eXcwvJhXF^F0 zOBE=E2CHc?6eHz;;EkG;s8QSs@4~p{dyr-P_hkLYJEy0qnCUb(7oB~Q*pZ&wvM!5$ z{aFg{ep(uVayEOM2o+^tzWyxLGEgr*WD~#(1qFN z@j_?ta=V!S4=+HJrMT1d&#;_~*kz;sei|>)!00?$KLj{J9>j*O^F4YReeDEBR>m&_ zW=O=b*ny3RD*9IOz(5p)Fj@QrB6xW#4`f}W&W6wgOKB9CLlu=!i+5{|in`8*)W&W| z$C;y&+eEr4e67{!$HB$ccR%=yi0PDKjZaqJb71N%=4iF1W9r$=E0Bo@Wl<3+?1gIk zOwyxM^lS%R#o-f!nPC?j^_$KF+$yc*-XF2xcBY2ISx^Z+9W%FdbEhfm)%y?rWVx$n z{g_sMxCN30z#PVtNHGsj&(q9T*J=tYsEE?$gdul7Rjy7=@D)MGngb*lEUT2LvC;Em z-bb`MiKP;D_{Puy%^U9+?`=d}tm&Uz>NsdqBlPVPe*gV@doS2IO$K^mPZpINV-BsI z_rI$!<{F>?aS@~?`$Lc(s3@>tx`wcd!qJKF!wOD()^3=A({(vKjsyS7W-~H~CWPwG zJ6{m76F9BDJ=NsowJ-a{qqp zmf_%wkk4O*WlEGyodJt-_Gpmu;&$+(C-`m7{P{_06rXGr>@>nJ!3O?rrLBEG^=BaL zqQ649y*Gp^IWT=$m159d%E;3#xpZ) z%%<}v%hlSOUtj0|fb5s|OgI^j)&bQ`qJm*rGbBZA_qaZ8Z3CV4db639BJgzz3FPg8 zP55>w$v%xaozq{j=J*(A-0`ADpEuy@gZUYOQ>R@Q5ndvCNU$=NiYNt|=u`)*g+_MT z>+2~K@2S22v(rVjVawakvLd8^_v37g8_i(w7`MzUQN8PF;lhxm? zOl)BGZB}ffQsI|8upjG|pw_cZ5wl(pY)m8yp(^iY>rz_cbl$Zme}0pvuIaIgzK7_= z&(01eAUYgjRd;%)U%CC{@9GV|zm*iKyx#$YVTm!OB`GJZi0Y%f7oAXM=*nUhv>?e! z3>~vd<_KfXo7WPiCQr8`1?yO57G=ItswvSgYSzK9ae{NhWl1u4X}A}w0nR(I&z*b1 z+dMymBL5^x6FHhiT1YdXsg+THDNNC`1-ytsfs+Gu(a1JSs0>)DvcvPRqMrK*3+^zR zy<31aB|m6;^`Hys!ddRZ)SLeUEja^QDEj~~K}}xXw(2aF0huyTWC*`|EH-&9A?n=F z9qe(j)w>3L24Fjc6z9K+FMms*_f#f*-y|x2lV^G4stXtW+Upu7h&ig?Cl(6;Sn{>`VE}+5P2infnd-Av7L|84ntf%4jrH-&c5rjztU`^ zHAD42qj2$d-Y=C&U`qweE=EUF`{VPq#cX1aiwxPFM;2IYFg-KVviVj;o?DB63xK6K zy3FPWu~Qc-K3{9-?~hxqytfesi{b*jO1RBS`#RF;qg#|P=(32v`0pB10TAyQ@;D{5 z<+l!JjoZ!I^WrCkZU(X{KD4*K#v{N7!!K>-&8hGQWVnevap?~5>Ze|5KyI=%}rYMNJ#MAdIoS}CD zIvYt{hq&m%Vew7%&h5`w$gDv;_ODM=I(Qr$18SAtPe!O6)s<-xZM2FCKk$IEiv6#_ z>7JbXY`XdZvzlCWQwe#Y4rzw^U}c8GFX0I^fRMy)Q&vXS31Tvo5oPgGoP~=;0;xO| z=3H5;n2EGhP|_ScDAn!n&_jcwe@`!Pcq0F8J7eel{-bYtF3|CSMfYYE|5w-=rq|f zWFZi9g3^#bb7)3K!W5<3vS7@yw`6U!(s3lqo@+?Z{@1#sf^YwC!B0JeVA?XvRg0`= z0w21#kNk-VA*doG&0O%<@R!|8?*R`Gg#$1-AA%eJNbx!P^J|4dAV_!{)TPX;{qdi(%ns1foDwExIe>`HW{T{w{&yBVMf4vw);jC} z$=v7belO7OYoWDyJR*G+1A(nm4!r*1nc@&y2Z6cee^}Jl3U=~uacg}koHp&RRD+p< zddir`vs|>%xLQ$tS52p7^B?4z3i-fY1i@YGfR;>ExYG^KKoOq$u0jcV>de<-ebvlK z#uIrnGHbO04D`aCU8gnwp&P?qab<*u2}LRX&N*4xRs>KiUL-6Wmlp`+9J1E8TmI(EhZY7G%B zg-D6Bex5$!9u$pEZC?hvNJREIKNC7iLD+$Um;U@xlg)>1B5-}r`0BV`21W=XRbNie z;6pJ6Zov_&jv*n>Q5!fXrz7WCUB9}g-5(*~b7G$ohk;Q%wuf5ryj00E;(x%S>RC3Z zUexteoZoo`4>%1Wi89d+-aX{$ew@MgN^)FL%l(}AX&O&nPrde+iHToaG$60e zi~WK8&byPc8=u8*^7>Dkr@>Em%Pn&sI2`Qo_@xrGNx;qb`w^!9w&Qsu+^)>nev>33 zbT=`gNAP{{eQI3H7pdw5!@!AlX-niQ1)UdXbq7No7 zbN$Aa^=76U%M+&H=1W+BPl!f+AAl#&whXLM`I$oh&>lmvxT`qL&TS3O1!IK>#ByIs z2KxH?>eSZa<#jZ}jWSJH8V=25D)@vc5!Zt}~iv4kJ1G{T?G1X>4;v*LS1|mPQ1BQb2 zh>_s+D*UejDI(dgJS@i|0AjQm1mk{XrPbEf=~Ro*6rlM>Vpcest{tXEnVd5n5SfB5 zjLL!V`>>MMi4B=>E8Ac%4s=i>u>jC$U>Ob}5GeVmFR#PK2T=dj{kwpUoLobGR&;Hc zq*Ijv3bS}Fa_}GTEo0;*S!_&N@?Y8!jLAU_9W40_oy{z3 zHCw}2OdJb|#7$ubEEu!Cc7!#`%=$Pr)IyF9IffwP71neOISu8y4Ei7wy`BrnZl?}1 zk<3^^!s0@TT>~Z)13}6UqN=6PQ9mB#tk-=NRQAZYAo#g-?h3pA#u-sB0GemCON{)XM_ z44?fq6I7W-5*s6!qFfD^9XeubGSlV1fKzjokYLdw2un)k<&a5Fy$@YBvQP~{Y%D{q zQJaQ>ui_i0$f8?_`)?C$3nk}>)f-a_+OYF7z4kA(Kp7&dZs@CE@;1>&+An&|lyTE% zG)L(-GNvrxHH??hNK(d&t5&1{f{F59smYO9A9Ej-lXDRk#P#bJ*&wF?gjg7?zBm}) z{4yiaAUC6pa?*=ZQ~ziQ<8!c?TWHQxmXlU<*2ZQDuW;a3O+o_k>E4PtU~-FmvuYPn zweuddfe=wM`0}f(9L3TUxWlBUl^j2$L+fnbV$)~?mavskk;6(r$Us#cLThsF9apU; zG5|PBEZiP>l=(sulVDaPGAoq@_c=Ta6>(RxS`2(1^i1lejt>MhhL;42BpXNUIHOtV z3tj=5h}O83Wg2%BL_%1H-JQtSTfrgv*(Nj`XOL=FnNqIEN3KeGz((zjg}SLn7^*Cm zhWhL$OXa>d35L^=T9}xnM-;D)Mni363!UHkP1t0aaShwdkX9PSLuKSCcHU9^r8sH$ zi6y57iqf3}Gm41lmi-vqTI5sH-F&40&q6x>Npc#a#-mX}g3NFIp%<;zv{ZVQJG7^` zGJPBwB~w5?O$mObhr{t@9gL|U=dR_DV@N9D@SCa-U~qSbh^^uWBYHhQSPk9rLyjE- zK89wR;Q;gqrB%nAzD`Lko2%qN7PAgpQYD-Mii1jSA-z|@F`%T=az({gX?WA9^cg1l z@$bbKeH9BvpbmYgb*h=0Rv9rtMcoaantDP%7kRg_GLKVc(-&WSh!{NMp+^AOR8$fzHc=tP8h~gs z8xbyMVS>weUYeY{U*SZP!*XzlR!apJwst55`G=r!KY9#pkH0~E5P(W;@%ch@Llp<1 zCEcYg=lI^N7_L4imD*PL3g$gnsSvb71ey>z-AvDXhL&LSdodj0n zV~L;u0xPLfAkBT`_3FF?(y(^)N=I#yA}bJjc|18D+0x)@DT)gT2p{FWIPNEQZr%>I zq8~|-&;`+`R~9P6G3>JGG@R)YIm#OdMEL#{GNE#?D+tj5Sg^4WZ)to$f(*E-3e~b1 zrb-`QWgVfiIA0d)m(;R?R)U9dCFM9Ru#QR*0k0JUGL|Of;Jp$DFM8N`mT0Ri6QRtJ ztk}=g1O#Tr6NX%66DKc6A>_yF2hM)P_?8To7h z_$et`xT=GY!;s&pOcW*i2-8*|(o}m}*1Pe558AP@60Fkd6-NP|l?PGkwk-eHYehk_ zc~oU*k=NbFDq*B1QDP1{UXH1$agl#Jzahyi5b**1oQmSm4Aj5_7P%IUi_ieYQi9Lq zVrjXo((;%^oBjlWRn$Ix@99y0EQGSv0YNCr2^+HYqg!#mQvJP)R6up3RUFmj^@ORk zks0Vl5i@9CD|3u~o?OYsS(U=b`!%3|(|lN8E+IWTFY!mvTb!f!TM!C79p~&tE?+kW z!e2?2fCU_0?%(|K^yo9tpB!;)geq!Ln>v6-rWiR{n7Fx7xJS}^9kvt^loS~%hPj1? zi=#@WL_~o3W+bu-Dl#GEPx`vj%)3}C5^c{7p3*_*BqP#@i*CGqRmZ_!MzOqO4O%Vza=xK76LFocfCbLe)NReyDxdVc4yAS2-{tCHcONJ%Ns< zMrlP-an#Sa(5S*dir}?SNuXVi$Y%u*!7fq^ zg2eV+7pRXy2)6F}DlkbHGm`+O35X)#Lj<(B=;`kg1iC{ZVLUpD}lpO7!y4v02c zqB;t}%DSkj1g~2VDC3B*=<|{G;#i!H|8zC7V)zU&O|T`VlFu z!*aODkr%z5Q5R)UlwaHGb3!_3rvQZ7J0rRqn37s|A*Tk5r;3syxew0?L*E z5?3-aJ6a1w;D^QNrQK+#2|8$#Y{|+Jp<&8FVLB?dhP|EaGtw+_YOBnwz^~b1MStk7&L8oh8MBw$M7{ymyw}q+KOR^`|Yr^9Do{Hk5Lb4$99Y>N8lN)RFI>x zKc2~m3BF2C2MCesV$+u^oY2r(S#^kH5aCIdDDf(WI&OT=TO|I}9mYTyP{ymzc<|_k zxh40F-7&s%JtWNj8!#YhPnt6P0C-Vee47 zBl`S~s)oj|+ZIKQUs?Yd3DkBBVtR3EWa~s4kw=Wo0`})0awc~2?o3KC@+AUaqMcT> zu(7(RQs}=kMg=@5*6G64*G(NGHuT@_7FL zIq<)u6QXSfit<_`i8}NThv&|c4 zi5_2s40gp>^JNJ!b%jS3g z3>&CqIu%;!I@jQTN=!!bKgAxi>1G1)A@gMsbMawmwIG5(0(LGec{zjtxB&p$lT^f& z$-w&l=VB3G|68r(bpJK3|E(y*&TiiSTMhqPc~N8Gvj2Pde?NHs-#`5C{{~wAw|D-h z?*99;*lB1{|7YWW_L*n>-|G6`I`03U8U24Z{&NzP{D1BI|F5FpfDKQgdR{Z60{JN- z^bq|4pnU=kxurl_jS~8bge5%=4g)YS>rhzWxEss?Pyk-&y2zLU2R!s^>%R+B;@`!Z%aOOm*++V0G231l$RRtl?u}W8DPzoM_Jv+x9}$@ z9{|(|9UbkH1`)`dz1s5+#YHbZsdz6y`;49y#zlB{cZwR$HUsEQBYb;G3j7(G9BW!B zDKgCz2XH9JQj(V>x?HD<}WJB}&Q_=l#*2=t}M5Rc|)zLF0u zuP{2pkjIsTF}C1(+w_)%9A;27J720${!&yh)#w!s22hWVl* z6Bj6G)kTyOE_01z(UK7T(24$(&LM)1RWP^Y;XsGz?D!JzT)YS0Y*2Y!wUuXDtkC-t;Wq2+;yMel$WNB!rcDd!HSnqjC`M3SfsKVWCi1 zpirPw^ifo;eni7m(TYkDL#KWZIIf{6oEpN#P!b+SwJ89$(4ECQ?f))(AaR?=Mwzf^ zZY9OEqBCB}x9gq~%*$MB+D`NbaS?Mngy)HN4Ba)`b$3+#LTb46HHs&4DY=yPVDB|Fo4pe|gVmMA#P zaG~ww*!4&iF5$>9JUpf?Ru2cMj0My}pnmUo((ZDmnq3St+h`jK&bDRMp=$cCv@%T=i2<+fOVkn**cWl6 zIwk_&BU7hEh^C<9{FT;2_|y)=Xx?h#%H=xXpb^O+loXW%emH`hRag{~OwYDr2mp#I zUr>p!-wt8b6#m8P?~T0i_F20<*OX|4guO!L_lFoh58ZL3RE+O-sPRfiA@x%Bg5;)X z$v%C7m|xxN3vvZK9h`Rsbjk3*K}>JD&mPHue# zz)(6sJ=6A7S-TL3VTxoNieb(l!6xD=hyDb2_iCcYg=cjADqt_siX8LRYcKf1pf?f_ z4Y)z)#6MldSf@y;J|J}w_kiE^avoN8mn#&1(!bPsjjzbs0OCH_?d*toS)L9^dMOnxt z5b%JDK{a^cLk0~oaex)NC`i#p4QjzqeqqDE&7?%@oIVFx(M0Q1m5lL1B z2WlyLR7`oP#t<-vHf>0F<~AmGnFq(G1|opZdVO*dOyHu7eo$oRmhXoAq>lQpC$>F! zlI^GY%F;{1@Z`k1!;`7y67!PZk-sNu@0>G!Qhb#qpBUyAx<7)t2FJR5dOCV^mwfBY z+b|>z6xVOM4Se9v73YQ?ZRc-60aDd>GgK`@WjG$Y;u|Xtizfch2^}*>{O|h66gPfj z;J(eil*?TO>-wN^ca{Fxj%o6H9f^IKJ6i1&g!S)ux247nCZj zeyJ|wvh07_^RRk~NMhx5@(58pYr}rNPEg4L4>t<}b+3-}1bg(lnecmuj0%vJs)2sG zvo>U5sLDl?TEwqXSW&f*{)I9^hGuqPIBzUcN3->2exfxoY#IioYQS@58~3+t#1QKu zl46pQRb?|mk_t!*>2g&r#pt~CR2Ey` z;Sf&r!6=U?yPhm3Ft|^;d0t=|m$R5s$Q~XsRpqikUPu#Jr*kz2Iq>s_iB23@ z*nm(`27e;W$~7`gH-j}4LUiWURcv1_lO-Y3Emm!g)d0 zi<<@1#yL60IWUh@y=zGH4eg+EnvVa@ePjMg*Uhvr{C)``Jh%ID8X_SnVPa0{T2qq= zPfWt|ANagmGVT`i(BbIH@2ZF>*+WNd&)pn;@L7Oc_xT*W_$l$KDK~dqNGQz#)zT~I zYM_HQguUl22Qk z0WO=g@A7D9-egAQK(F24EB;rr4{122{+_;%#)k!h2V74FH5r>XX^*X+}iw?4f>l zIH#$0hCELsgbgwkO#mspfca@AEsA<4(L}tW10Be{0wH&Jd?5ttveM_u$Yt6>olnqZ ze*R(JX$Js(hLv}f-qZD3I&{B<@;A*vNiI+-Dk@}W0J^~GyXqmt8vS1la{+=BYY>Q$ zf{>4}k#UWZzZn3bO0(A?%}Cc#V{bRiU7{#UoYBq^nsrIwD`kSPE30voI%2l_JEz4B zgj`5H9=f@@C>S7|zRxe$A&-6uHJ`3Z+YAdXNrGRiZE+ixHL1F^P4v*`>tJ*`r`&x; z3e7t?^E6xzcD>kn|Cc@4TZ5gBfkFwEi_gPRqKk_il_zz4HyfgJr6TKL?QhA$%5O?y zs3D;T3$iGEGi>*Z53L=*Y`y=`QN`PJ|>)5)WLmTD46lSW5hW4rC7e}Ne#i#)`%laLg>@q!4yt(e{= z$>m?qGf&UUM957E=>)=HEYUu1&_Wzv=EvbF_`jhAM_n z@YbsM$c_ivuc@VP?sNb;cjr(WGRtauexpW8FhBAr1>VeE9n-8mS)w!v6l)SS2FwS( z;bl<~I$GT$cc@+)Y+5{DFQE0l!NHAfRbPa>vvF7;ZjeHMT)bAH?%rnbC?gg( zqDW4=NHHRn@erCSJQ7O8 zKCrp@^|z7|Wh3K7k(Jll{d?}7$G^PCw#_@QizlCNf5BiDUfWABV57t1R+@M>6|XK^ z1Xa9a+ER4#4S0-Cc3nsao)KZj_f8UX6ywu~?z>SpuZa~j@uCRH?Yd%-!8hD4tjZH}H{AJILd5C#rQj$jL=Hq?BxZ7&~x0g%@j@#2T0diK=*( ztSy-BlL~;}gg337u0CACZJddyu{M@q!|^=u1Nn8p&v$4hHy;Sa4f#1Y;?!bwRi@Q6-gLS(KICO&=##~@z%SSH+}_rK>j zu<$ie84~a0Zp*NVn;Ptw@BvH}U3|7`({Lq&r{tUnr@UvuK)F8_mRBQI4u!NXf zW#FP*W;Z@IqZU~+ZYBrXz;Z=^*x+byu5z&!+C-%eL6|s3qDF$i*KEea%-)U#`f_eu zBA~v$E+gRw868zwKJ8_d!KlN+*Mf%G$Y@iBLZVqUT>Ut>E}IbBY9_ zEMY*sZnTVP?~A3Lbo5XEzHIU$Pe;r5!0H>tZO;k^EYrkMO_R}xcW>+z8F22Prh3CV z+#hDM?Y#bV~d~=Ep1RkJQ zR2=9u?x{@mibgEZyDzePwX-}8sWm&W6&6ByCEFl;r%%52! z^xf}yZ607z#G@pXyeMG9t5Pz3V7Rg1j9E@!fAD8~rtl#{wdfj-c@e$47&f0R3lRlp zpG7|tK^QXwgH8<6OypZ$?*M zEQ_j(Y__pb=1eO1zS))!A2~qNRZO+fTLr3OhSQaSbkT0LilI5UwIXpQgB1VAh%ZWG zK_Oj%$$A=Pwt@m{_aVZnwLvExg?_%oYmcQ8eRD=wTV4G%mUzas{*+hH zN^}OeyQ6w+rllEl3kBW`XwpiGy{U1=j{6W4@9r)#sRcXm765B&Ym7`k6>p|ZViv9q zdl#?K*5Ih(e{q))Hh)xky(!WZ!AX5+Ti@7tVIT6siU_dz1nkoZErLvtlTQJQd%Z zuH0SP=tu=TaIU@d)%HBW#EpfUzfe03$dJ-3eSuDmQyYZ*n-pY7 z(SK(aLt|n*-^AC|c>;hQgR1Yh^_=Qp_+go}+!wE*q<{$ew^JnFsdP}2ZT%Sd!@N=E z^la#Hd6oED)OU7>iA8tSz*!aIfQk1Un0vC+Ow79Vn4~(|E^T)WB#`NBPCN?ylFRvUCxPlpxEB&4j?%a3qV0-Kj?=NA_ z_2`i+Stp`361BsK&tA&QqznUJ6SI%Q67OKAk3b}59{?o+2 z*EJujJWnoQpQbWdynRsWPdm3X-UfjF1=&rNqKA z_5*nWDGOMw#5!K&#-W2G1hY0&^u&#neT05m06&5b0Sz&-Tq-0z@b#aWDGhMODJ|lNLgZ#iSz|-?_Z{1!fuYzj&Pb^^yz7Vy# zx7|2G>HKGX^M@~3MP0|#%LcUrU$X@$6C-#6Uja+~^7`fkDoP!KFx44=%GR?a)-;-B zg&cu|M1JOY@f)QVhg+}QIzKnuucDSGO1!Vv zH&}@f<6Tvpm6xr3smpTJWi)Mf%K_b3B~RDmNyq6#w(s`Am0R%c1FPa@&tv2Ko8W&A6CTuO$8KFK8Y3?68tt7T z`gZOQ>^%jh>S z-zKn&m70ap?u~uXf*9|5vSn$bWCwS%0j&HXt;qLnVF2@wB&|%bz09A;9z7RDlzA>X zd+lOa?NXa5kgo4`8()m#EV4AKe@o;? zkrM@6JH+xiaW11Jr14Q`1A8Gkm`48Duk@;kE&m0^j6wLea6AEo#j4Q~Zp)uH6f@1p zen)bC^ZPqm5jVrmrGV$`O%;VohqwIU^cw=L9I>L6xIKaq^^smrNUVEg&1 zycR|HgF`|o3Ltb1u7te_-O}x6+k8j;(Jv)b9pzCPG@^=oE)L6=MuCz z3^b-Tej11v80knJ+2m{Vfz8+R{hR2yJzjfUeQ|WL_6_7Ud~LSof06<6pGsoQ3)IeV z$^QB2*NRV4Ds##gL8G`l>(sfQ4$F%+Vw8y^Ue4ouXjC6i$o;!1>JCLi{JqEzjnT@> z$_ugdi+WcgjL&V8*=`+~(^1T?Ns!-Aqtyu$*JVK(3BbC;YviHpxgbwtKAN*|?{%`q z@W=z_K*s)ID%c;3*n-Hz(uc(Ml}^UDTSJ)8hEJ zn&hZyo&?`sW4ClSEYfyfoGh=sJWCzu5Bc`I0`c^C#!C?0PDZRcO_;o_7boX;eY)sl zy|HU_2+>lPGa;3?5T=?ZvptV!y*4BZHd6e=(kPo@pHeN}xuCOxJv z9?75OY8iaB(J1BlUUkAb_0P7qc#dY$ai^uSf-FcyfsVHk%oX^1H+yqs!lc6jCwDn> z3QY%EJr-Ga}3ui^HHf=lMa-Bp)rDqQIpZ@OQ z{@Xn2N=Nj(-^jmx{^-mb;axY%B9Zk;HIHV!pE+**eBk^?-kJM=pDV~OMvRU1q z+H|5o(<5{D>s4GauLZdl=h-N87*OLaOHkQ`Fatq;?AIUiJ4dz(1Fk833D0KRd3%o* zR|5U10JMK=M4jW}Jt2zGgVp3UKu}LAsLT=w6S4G9ASE!rxZA7r%>K5&W zPn9EyEP^vd>H_+TM+YCuu5KrvG35?9XJK>Ku$}9O2mDibh%Z05J>#!%$Zq~qW5{!~ z&*|gk#PgOE&cpo6`b|i!0}Ji*QDS0)R8@1_=LO%~*^ww+7P2^Yjn>>Yk`kA39qOF4 zw8^nO8y#Ulw$c57qirkcO0UOQjg3*Bcgv(Q!@tt^&Gq&Sn2iS4@@?`QTUghXuxNsh zGb9S7EC3o^d6EUH+ioY$zsT;+7Fw(t^^ANLDZMXa)i8~VxcnfLcN@{F<$*GFlY0w{ zrpqR*MLzi6Zk><)^WAqDIW09LeaXoO9kj>KdoK^##CF9^lg|gw*H`1w$!|_pI{jP4 zpU>>_@rd6@EOmGVIC)ub*9-D=T^=l5&s8~S;*}tPhQ&g#!3;sD7Xi$`T{T>*6=oo)499X=wt8eh6T-=sa9 zcHY3M$z4gJpe)hHo(+5-D>^km#mQ3lz8;55@PUy*6S5~^1kG^=XmEpIHTXQV$%LGJ z3proX489GXL+;a2~Ni>?i)x_TvcsSk@FyV*RXE3U2EF$Z_hVGOYe}gve8gCa~7dYrDn(N z8|EEe#WblDt2RC`s?<4T!JD)dh^DCgF>2hQWf3W-pF&G)eD*X3Df~RpK;_S)rR}iR zgL6lt>Nj6FQQbx1g_t>0aDUrU`>Le;%nToK`9**5X9A)z3A#?8WmSLzRgOh>SQKA^ z45-xRV%%sK{;JxMQ%Ci?GEigs)3jQ4yTkGas~Mr#81_Fb>I}+y;(~o@R?{LvQFMKr z(tRH{XnKu^gw0~P7qdns6#*~MMR*D4^W{ZykLN?r(VhP!`~EA|C>Y&iV1BQBRo{@e ziSw$CmssOVO;F~K$1UGBxs&g|vFu7m8@`&}&KxvhyBz*R$}1y3GE2EQ%XJ-uCAXNwkN#qWx#Wo+?%FgG|D=QhsJqSMDBQ`vtp1VL1)wjFn_;g-KA#)S$KmS z+p`7;#(fejd8hwgSu%LgKj^&%?zJ5ifHXd;qH=Gn5+~6cs*Kt^ql0FmzRCV)F}jRj z@feyp5#n@OSTfW1yKRPFkZ;{yvT^_Cm%AUfa3!;&A99YW^Qgu)8rcB^sY0@u(udq&4cP{BgW8w`3s@+r%oQSxrY<9j+2@XCtlatS% zYWKSS{o`DouMKg(IjMa)aeKKweffP8a(Uf@&~Lfv%MRHIm>_?GKe#=PJwGMaw;LLa zUv2c>L}MhMRDWUI&AmuJFof7?{B(8NwMR_sCHy6F6BUcKwIeMjPj3tYX8+vj$iOFM z5BbAUA{Pe|zDM6=(y;fXV|FkK>CxA(mKXW;e%@3|d!nisO$EZ(=jKAVoF?Y`N7HN8%u(1jd= zKJ$Z<%5t1?c!G{g6fqPJ^pwh6I-0t?uE06+wF^O)_5zYAkr4x{2Hp36BNUTaru}&- zhyo_L9YTWKeSKXXhUczlG4N@h_iERkB3@3+aiXbxPT(C~!4GF!w{srCEwyf%o0pp% zK6yP)Q|>O?KEbCg2t@Kc+br7D^GT3HG{Rv0jV`vSF79&* zr_|I4K8sj$UcO#mw-8d#5BBGY^F2*ngm2ITiM3xF^P!QmvJ$hDeJL_9U0bAl-4VY2 z+N0mG*5~-3sd%6mF+w=nF@fuER0kAO1?}Y`!=uSmFb~q?j9V2ezuZZBI)_qu?0GAZ z&X)Xcl%f@bgO9O`t=qCxr0h5@?m+u?6JZ)%T^b(!xqQdmdj8o}mitri#SssDG=0Jp zCiW7cX7%McuXj1>Wz+sbm50p^)@s>BF)2veZhX!uO~w7l*BKJ&%XTV8x6F6Mp? z*C?YIEZA=5jCUX;hCK{ zZlbwLlq23B?z=zz;srTeXGPp0_d>av=OhX?R;8iY>;e_+1(6Ht#(bJl@VhfHUgA6M z5sC#{D`Q-q15sM=gX(XKzsQ}q8}ifH{&Qc*~f5DgzN$y1>d%$;pafwDwwli7Y-479VG zup4jl$j^V6?%OcacMiFlHMs9`-`s)u3fz{3oN4}vFFwyBe?D8q54j(ns4)#V*;|i^ zpsu=H7D^gvtTaY28at(Es)A2xLw28TB){zT-J^dGd9kBCK7JQ`p0TS+&T@5G@-08) z%-t$Pwl>q?!;L* zfA~!TtbTKSgWd%{f8GqaW;KwL@cfbL<~SoK5boJUz@izT|RvTll05^e+x+3@3_ajGH2}H*w{FIJi(X6yg8Nn zXuMpd5`2;9^Wnq%caM<~*2BX?`rCnl_tx_QpTtBxVU>u;FVZHrkc-)Yr@rS+44>1G zsY-NXPN!ra+EdA;)rAGeWp9b>I*+1$kH$>sOi@Mi4+we~DTgUs1YMLDT+g_>C`!ce zFE;nI8Jx|dl~?Zq18D)pa#~l_j&<-GJPIACFi&20BG^ABl(=0ornUY5f2~UD9xcDEZl_ z>E|@0E%T2wBJ=V+0)mzsM_+)8SD4?J6u;Vb$M+1)uAA3&E4FQabxxtfquzCaYfd@x}<~VZM0e z0&xY`9yF8E^mlH`1x&oz?>X&1;b`HqI|e*#d;g9D4dKrBwmd7;JIaNqrYsJoEP{JN zg41`<>HuM%^JI_`P}&k%-LxF|9C8h>QcmR*Cl>$Rb@IjuVaD_g^`(&#yE>HPY=jqS zQiNEj69rg+``Z2~;LDpG86JP?M7052=cH0$XIv7khg2uI;ho=IyEN}w6>YY30NDtO zVg$#a>n6-`hFUStq0j`|2JEDg7lN57m4>P<3H$|n3PVLRdSK{=oW(X0DwZ# zaKJ|X8pMfLKE@G=iz?7d`Xuy%*UG~+xO+%M zfU=#OUt>P68eOGc^|2Jkj`A^h8dZ<^Lagiul?)F|rA+s)h34ny=I1^L%}XM@_dm8q zA{OTy^Q+|wybp$1lkuc`}(GH15Q_#Ry#t@_BWoDS=C31bwS*}8;IWi zvJ%Qkm*>k%_|>qo1mE{G$aP}`9T^?15cQOP7*SHEHu#YpY30Z=X*KTE#1>Xy!&(|9 zDq|I4Burhx;+kF@DD*QBLKF_8s{KE)0OzwN86LnE1F~GZ4D;i|JYJVm=b9Q%z-Ery zO7La5n5f^Rk-AuVVv^#B}1Z*X}vIYuPqM z%J+;S@lD{}<@^op(_PQ~*rCtOaM{4az^AdkyUU^Yh=_rRjM)r?bECM}dUq9(`=p~! zw&}_5dptZ`z3Ng9ndoVKdB!;Xpx;*C6mFxLFWKW2u$$Wg_dnmd8|(h|`HK-)f@){eHPy*?Sk*M9l%&NhE{&wsazjZIgH1WbpQpvI|(xqWxNo$dRj``-~V zQ?9sQP;fJJU0RsYMMNZzZ~W87j!vAGhpI#*mR_Fmr54~TkNeS5;v!UZ?Z?%#Onr+- zKiTX~yKXcR{%wD|Sqpi2xT}&76XW{Lp#WCD_)r<-FD6*oC30@Vn?3&P=j^`c2T&tT z%0=McE}taxlhZZ7U`*)k#dD;-7<wNL1TX zNn=ePW``3R~&*y1*H&es{|rz9D2RNI4Zef83BSQszY2X z2wi9?8PZ_rOuF_D*Q{H$a3R+7g;dMImeb0f(!S@pXBlt4hk}%)+_r5~@NCSN+M}YE z#np#h*2kq+sv$pfUkwa)wg-8@T)^{a;P`{I7 zlG_t5l#?AF#u5o8p7#sG*8di~{OcHK8@0j<ep2H7YDI;ytonhyH%6{RQ) zXn}^mg+zJyCY5L%bpb^Ttvvb+^bv@+i;@*0=`IUYK|FZimi9>xDzK!syH52H2~ObC zLA4?TTpco$c?nRe!e{J}W#cf9NO850D$X5&fPtCO7BLrM>esZda~yE!W?X#4RwYx{ z+Uf%i=c-TU690OB+-byrxpu>QKKVmaRaJHD3J<&pxXJ7B75!~@=ZVUe<{+4-SD)SL z%%U7ESN!K1=46g5Irg4iCOlGNOWuq`9=v;J!;j!7FCTjcJaHY~{=m*6VwOflC8I`j z+pIQ4u<{xC7$EHBp>b4HDuz2%sXyNJnvf6@qoM=q3dD3dOQj-(UXI*CL@5$_UPeM1Zmx6k11~3S_*wo=+F#Dyz!Pl8 zLg_Zn)(u;7ZDOT-gU|jgPX01_fH}3`nMs7)-#SoUj$Lf_xicWQT)Vb(9Dk^63UD&e zUw+CMAfK?3T z%>5!=*pS5P{ya2UK(Znw8uU=zvcPH{d_Dxz2(hic*;soi;$l`7@5<0?iqlEgukY?| zZ|b_+FUxm!bGv!qlzQ5aZn^gEyn!=Y%S; zBvN;DX!l#V|6LN`VnLh$e;A;JC5_y*DmDCAJsnZe%Xl5lCaElcK+)c2psKEdr_-_) zIjY1o{PQag1p`4rfx{{pO5WXY%G;_*DzKP##KYU(aJN;VkS8JUVAr~Nmm$`fd?5gG^U6A{K+Goa^k{YVMhwR?t5#mN*Q*h)xtnuSq zG-2G428lqoxydVVcVk}R)~pfuXN!!1n(Goq7in}`k&#<_^XzxX$p^`I@pDbRHqCqS zzP(xKG?GK4yl`2RXU~P3d=v9HE2s}2^n;=b45G@)(e?X@#XP^YMX}}&5k1*Sdc*%oL!k5}QV6S*1;nSqYy|lL373mh+5+p)SwKeUK1t$f zHx+}WjY$b$+=qhN=3pR+Nl zo;*-U4)*19y-OzP81OI~&*gN#dEM8_7d>7QDq9w@e6YqU>g$!&;zPd(jS2fMcMYOz zA~i5YXXj-oG2G!gfp;z*?%9iID=!_xJU(~CK zM_*qtzZYj8%e0I$kupZ`Vo+`OTX zEr`yS@_V-F>1n#V9RjwjzFZ*CDKGzcUK*+(eHOP{=V>=k!q+&5A*c?po-G>2K&S_FZL)un{z#@zq3(Yv|5eQ9;cGFr;_!Ih`v z$&SZNGRS^g!6#^z_^RW0%(J<9n$zxl>-G!|H!b6pcpdcbwlDvA?*_3}I>?ZRr(k^A zefRmApJdAQYV7M*P}<_HdyJATX+j$g8l~+K1k&#+mb2|gI;w1DWr(KWSv|M!EcP}6 z?BeP|N*{P0Z|>~oQtj&fazD_My{+8SVmqjrFV*4UvwOQ$mtos-x+3}R-RtC$kTZ-B z_m}5ywLQUZzWzTuIvU#A?k@6!Oh|0?wacbo@tx4p&=r*@MVC!GAQ17Zj!nr)Nf52e z`=B+4rVs5aW5NGwUmj0iPJ8Yi$5<;Xod(8kJwy`}x3xcE?9+Q{?bqfkb*TKepoY}pL)Puq~-5`rU>5LW}i<8Rz~B2ohr z@gy+WJXj~%QA6X-JRb=RioMRTrv)VGK7VU+$6T#RUNo#+xcH8PAulS+NcR_)IYtbD z-$~)0!1wkWo$eqa%OwJ(Oqi+yB5l$OGuCXr?*Hw(X>Ysq6bq2(*_=?>r8yccR{Dlv z1$hI61XwWQtkAl`y)k{XdU|@g^1*B^$O1YkfKE^DJ!!9wMb_>#?{7m=nX&YDVf87= z-&5Uk+!%?3!e;vDzGh;k*aBDpMv4W3XQ;#iy&=<<95z}3g_NP}R?@tBTDAi#Tr&9t z0kps&xgg^%6g|0$GPE_zLIvNN6$}8nU8ohLKtVboW)x5aVL+FTkwbNijFhutaRfxl zvFSHjJAU7soaqf`rz40PK(?muq&KP)&l@5iial*vQ<-nr=nLVtWBlN@qlyEhZ2sq! zqJq?=$@Ezc()!N<%?}g_~VR`;OX+|qWfXrvW{xp8^5!i@8gTX4`+4Gb?aB$ zjI{<9OJmH$6FMu$2?+)B^D0HxAhGuzh5#avcw=Hc`ws$aC}21YI|M7vE?tQeBZm3c zxczp3SZGH7?e_>eKcEF#^Y@Z5Il^o7d(W**wqjJ-s&U+Ks71wSU(4-eK#-Eo%jHV4 z5T=+U?%cPabIiKc*>3{Pf=P0iEvKt~$JcAYw=3PY!eUfJb4t&62N1hs%6!vRO~(8e zcwP7P&hCxmS9j-%Sl(>SFWGrs|9H*UR6y>TF<|%Ti+n!D5REH?C^FD{LMn$N@;{;wrPGoQ?2{%Ur@!YTqLGRLXmjU z+VaU;eqjlTu7|-Y#>=7 zoD5L6D0(oKl!`eHH6%M(K?M>6A1jsPw}3X@1-xw>ytG^bfIm3#E^~o?*_{r)supQf z?LYvV*ddTMQRQ=BM)*qzdG^63Wx1~=4vJ8S2*zixs>(_X1u2Cn+VZ!uSX{2J zQA?2QWr$D~FfX^XI;>j7aSR+1xI#`uM1&Rt08IbDLbbrDhWiYJTuFN^nsNCvVY|19 zb~WZ0J2_>M5x6ft_`b(1-IPX&KKbT8fBJS;P&*L4CnO7F?@TF;y5oY=koKSt_G4yV z?V%>;g~;jn2exC|lG$Eeb@^JcBhoIM4FZ#5Rm0E148;-&lV6a#AA@0Bv?7Z^yux`y zO!2f#E*A-)7n-0<-0z9FKg0p3QBy-0V3Adby}50ENJL zc~pl38i$jE%b%EN&>6C(Oc}m#07g6-F|TO3NE9}JDSKW-uByQTCxk2qk`pflNx&Lm zqT&oS!yuu3S3A0L=-E}f$Y1Qz6%-c-o|@wbllyE+037w@@Nn1SbC0qOba#BT&}~{( zSQuU$m=aVMXHAwCU*e4+Y5XoDTpMdxg*`SqS_Y9IV+dC%~4G@~ybvTo$?ksSX03q2{I zl#Lcb$B-9`u95Mj+AN;l%xY{5x))f`G%!*BE_n<(Ii$7tJ2#h2TFbvUCdVcq224I= zu@xZjdWc2OucGCyjN>-IxSwZh0- zt<~|xDdVA0mVa{@puWS>^_pNj=pqgOVsojY=mFM2<@8~3>DSWiQ_GYCXRza8LGaCb zC*9th*^y&cB6CefA)cz&4R*_{A|U^H^M`!~%x-QssI3L>4h`4`Cr_43=xK3&5Ftn? zFs|tSvTS0cHv3xrU^W6y6e@Oo}qP(a?Q;qPT*@^(!n$vtj2&8gojxIuxKhWCQ+TPmoQ<2c~l2Z{Z z`7(jdQ9Rg{2(_^zkUsb+4%7Gicfw1-FC43e1~iFY&)JC4uGLj~<kE~z3>@Z|C zz7#pF{)}ao#VJrdHGQ&q`t$obVU=@TqCGhHaB%P?P3P*@`di~V%#Re`4sT9A4*Tq0 z&kiNMnogb^3=hR*tw>X?xcs{$!zt6;;P2-aV86SQ)%|GqY27*tL5z7XpYgsb?U;t@ zsM;|d(thmKGS_R9Z>gw}K`_rQ*>s;ag|eh}6@6Z8VkTms!6x>`=Cs3^sK&PJckgYQmPmhPUeXdbs{{+(gIxw!$l z@H|74?k@iPne*Li?!ZvrzFoNXs#>K^8lop*zdf40*WfE6e$K9ligqYw`t1fkEY;Dh zbw8y^-j8g|?&22)wE15Sdhl?@qF{C1uz&aP<*~i;FoKPgY%yYpkIPSpn!6CEvBVHm zsn6pj%<(}7qv$>hn@LHdqw}^)OSwmeJRu*+yQ8#%CoIm9Bv(pK-|`KDnlI5yb{ysc ztmZpD-(eP*IOi-0?{=vXXg07~)jK`yik*qD5t7!Vmjb!z$qj$2T=3tO*0rSljc%GE zO}vgoU9$ieUH#~O;~ONc%=ydw4`~fRWxMZ9!P)M;RS~1UA4f-!z%;M7d=x%&x2srR5J%7wp}|N1wg?f2kM7^J!z~?4Cs8{TS_tR z8~&nfb1MG3^0;(-hBj}(Z?ac9mT0v`QO{Kx>SHK?VhB{gVcwlK0*)I-J0%pqBo?BQ zb@2oAa-*c+-Kqe9XEt{btfDLnDAV{v1V}DmF_#-W{d@L01MvdL3oI=GLhF&(mTYv= z@d-~kIS>?4J4-o6B=DUVY*XtRkAmTLKnfi|#I*o=5kkf)#fWQDiotQDjdXkZc*nyg zxcCp>OTbu?D$vXAPH43J&_8%)9qT#el&?Ix;(g-jf2bf{RO6Qw~~-DglznJx;pVmCO$U_%h34} zmsbPDro!L3&TDhL=xN-frtVXoK?kHbtCk3JQfg!Hx?|EfAomQ}+cPzzvvA`1e7B#~ zDQa~b{zWOQTVw-5(V_SoM}-0^rv0dFzc-+%&Ydx<4zoE(iwAQM(OJt*Zj)1GhomEk z??_TY4BgBOQp-(*xjKI&<^oY5^Lg{bD9w(R;w$gpnHS>Yt5FAB>@V!>Y}j1@o!$n71eAn+u(ahig%1(%IQvwZ!M! z(gY?==Pk`sUv%AS*J0qr^iX%e?t_1Wn6h;VGVJ~Qq4RIwleB)8{f!L`Vzbod#H1+C z<JT7V7_I`5lbV!JyRm|C!D zQ>(oKQSkzobT84q)Zq^W`6Ax%K3M{BQ4H)U<%%}jb*wj*A_0Pq2Ln#K1YVzqb3|om zUMsL4<-ge~y|JbDKMYwFPR9Wa_a`oi?gpk7!_$d!nJG!P9?BoM8H$chm5^z_}aRJVqhNuf~rhx>HN%%)ZXr22_Xy=-)=E023GSIIJ)h@Sz*Rd2QSG8LvATMr zjebsg`6oqN3fNX>+{`laCm$+cGeQWJhZa-H%B}4yQ-~k^VgyfiD6tg=cpPd5hgp6Y zq)%{5&J%r24$S_riW{3#$}PoTciadh+F`^p%oO9`3NCAl)ua&aDwtMHNpGw-#x!pr z%Sk3S45P)7Q|LZt{hgQSY$WrBlsn!ES%R%eqDiEwLoz@}2$;tW0oWjv+0Kvh$(3Nl zFz7eFca=Nx1a!sveKE!^UWbB*J#(ecuv*_gd*wuoV_ySmi>!{jCJs9C4%h8HSL~c? zuS5%)l%QJc0%uKrFkFA0P`e9>2*}L%_rMnHHROQGmC5Ns!2tep((C`yR|DzI5{Ru{{HGzS!K50 zN)B~?h-Q_4T~#x%-)@(3_z1^JMnwZuCe#;~moFp$P>RVw*(`f$@=*Hgn0LKGMR-gY zMOIL}n(G7WA?oRzQi=vf93Xx1zI5kW59&MA4c(OFtS3HvZdnL0gkw}>wQ-)OYOs$~ zzUX0dakYBY`KCMI%*OtHhoea4LK8Mvwqf&r>|(@2)ArBf!nYn!v!-hB*OvUB5=84($#F3H_Br~cKp*v0SsKc= zHl{Z$D7~KX81cRm{(pZ}`8)q~XUpB&cnlIeq&qX^!lPHrL}(Z*jlEJ$t)73GSiXwK zBlUgiw7HN5SAVrIiJhLFB21gTxSSvizF_unWsVG)eVl{h_Erni$#IKWOHW?mbJj@5Q;m_Pdw$h|PP zYo(xeDQsP4@>$m3t^NtK_2)rAo=<@#iZDkcKL@6-?R?_?wN^X7Sy0UC}J zZ^yPNc@~FaK?t1za)PiAoE^n?zHoKogF)m6*KCv-L&~+`VU?8EUG!a>3BkNwPcJK$ zNX1Yx;aII`d>k|->nMdTB?gbHW2rvGf*Y`fco&J{Z6(RDTTJ&vvM*y9sWie3a>V3b({Y78}1PI)$i@A$SZSSzVdO76-vH2wPK=xU?=vlyG0eqm-HL5bM zh*U&j%FY`jqVaSH`CAZd8jKT)B?hDuLSeq7)a1<)l2=$Pex3%#i-#2It;XHsme?f9 z@6x`1@AA{@=}2WEnor*YF>=K^D+aIxw5=`H~VTB`of z;V5>qs4!|OE>U^B=@JO=ySEWVA^F>Rpq6Z_)=EIB)gVBP&Cv50hP$-MqvpTRHoWkl;-pO)u2LCzsdI=Hq?~?rYYjtF# z;f>^-g8-;yt?hFAb`%+V`mlycJk3%RL?R6)zJ{b+eEWKLppknm@%LAF-&P;JDjuHN z^T+9U&E^voTF~S62Cc~Z?e*Z@f>m!5=i};ozS}=#YK1|Mu$zg5 zHKnKPaU&g{zaCH4k`DuEb=11kq7#XD(Z^obo44mm!Mr2?wxW}qoQ^4Jk{Wd6xr!pc z#7^CO{gF48q}PReg^*g8*^i{Yprqh z%jM7StVtamo%@HQY26{;LeU~^m}ya|erl^zM>yiy$Mtv5H~7>2;7jLcbmsdib{*I& zMF9Z;Arq}7}eQSX6QP7IT6-gpuw@GI-Go?*3WHxOP>ZEY~}ncTLLx&cikOdtH#)~ z4BYy*&Q%&S)!7s$wZ$<)LhX3-SaiGwv5mC}iPKmm&SAgvwRV5_J4;Ce*b$e9Us33h z*+`1dl@#5ZT|aWXA8tFadRyQcJjC3Han^Urq`hS0(A8_rUNNE%Kvo+&v3v~Il+4zx3b;gibJKX98 zH-y7Nvj4>~s&Eou&@_G!R2T{*4+Uq(fI$%DvQRjL!W_4%Z8<&$DQ3FAQJwyuM zV*$9s@dRE~)XHC|Wvrba3Lfv0W)|%2&OI)A_C@@yX|d-Hu1m?-Z5>e~F^Z?>#>BYf zNNQew4B^O@(#tU2i!s-;n#jrdLDbW!izdf(p@@U7H}xGYc`4Mj8s*bN$gPF8#Yn8Q zyqPgBUQy6v%Yy4dS5wo2Dt6kY4+so^r}5cdh3JQn*UM|uV_5L=RYfv$(&4}IaH7Pqb*Fzn-N#}Q z@OWnW)XEXGW@lMoe6v%qV)gfLZ}>Act0mRrbfKo8si3a{Q|(mJu8GI&s7184Xh&JC zP@)_6&)M18bea5V*VEdeWWailRoeOa_x1flFCUAHJdPEe9F!>X zE^XRZ2COm-$T5$n;8Y>d5HE-i+&r|&GOqLX@c8@peCws4_c)j1(pK~&EOq>NVtTp~ z+R|1pPOTzwe-!8CZ|UuAo{vBJg|W1hHD+n-3x_?^8i$1*f%)|DC+ALI7W;oXc(yTLcrD;wCw(3a?zDinS@3Z0r{^ zxm_25ycE4sYEVJd0b^V4A5GL6_xcQOAsOE6Q2<3;6fb`6i`|*X`h%7u`sV?;k)OHo zQnYW>CTwDNn12?Kkxiam;LTjF!5G7xkV^*u(bmJ+WfL^!lrx_BQR%P@9A)&7kSP+B zFxj*y(#xAnzq@x{59?o69|Z7w>ta?A;z5wHUw(h?kIy6PZXc@5NDtg^UVbS4-9XXv zT2v_D!9FAyvAyw)e1;Yk7wl=ZCNl@+90x`&d)CwO%xzOcE#v^6#dzFw?r0G`QvFTQ z(hq<7_aeAsV~ZE0Rk`q=_g0kXBT&xB3=c28m$GuV%CG+?eE#q0Aeil4N#X9xY_qLt zl{miM1_Q5SNJx~97CsS2uG|!y;4Qjr50M$8W*;jF?9+&n05>iPdFV)pas>J`&<_n0 z(B#YmsI*~K)u@2NGv{m*i#0Ea)PX84wH8vyhvD4`oTw1&O9eZ->NdqD2(W4)R?eUh zZ&Bto8agdBGBTzwN4^O_TbvulhJ?S zfDHXLl;Y|7f0zOtQZy8m|VX_~QqI`^UP_4KIX(69ypYxG8 z52}AS9=PnVF#tQeiio*sn>TE=*k8?iU$o!qjUZi z*eII66FDv)Y94jk*Oc_BJYMCmx^S9@fKhML14|Q#^937jg@5MHnCavDf*bMp1Znx0 zt+>#}#whg+j5enT{VvTRsDDbaxcEO_$(^0(jei&okliNXRO9sh{EB^j$HdM$ZOrdW zn}V7kVE4T_e-4hoV#g%4cwV6@k*UrEwPeh!-p`*G&oAjWMaM~MLoGK>S(f$n?er}i zZ%p|(r9newKvoGIzcdX}VT_NewR3BSs$^ zuBTJdrdKtnj9L5H;prw4@b}Ng@}ELDHIE8`}*a)?^)Y^h`v!% zm3#F{Fsz@xZqV{~wmCvSp9xP3vnFD>#yI$sHEWC0I^UFh(pRLCZYE43r?#f%`o0SB zt3Y>_7RD4Qy?3Qw>7CDb%P|=T$I#1VR{Y}cu50!)`0)#?k~%nrQE^@xuBnp(>IJZR zWdBg~2qVJHAU|9P14JSc?*V+$f-T+}_6pM$@6zuh4b5CPvMa<4ZEQ&S>Ig(Sy==R!baDx4y`&#=gf*XOU_b@sE;qG3^}!>5Vp z0dVq4NE#d&l2h6qvI9;LqL?iElk9Sf?W8O4kN?xAW|@y{<_1CKV_wJl3(^DLOle0k ztaoyCxU-Il_=18ze`o(5Ap57}u*sutwr<7SLBSsu_h!8|G5YTWt*Zf)Z!@wb1XPzQ z)_Hg1l6d3kI_Y&i-8WD$2byI{$uR;jfwNpid_H|(oY}N@yRL4=;hS>+8Ka5uVHa37 z_5IU{=nM!0q6l0mhts1F60kE6(xY-yXg;i>V3?xF52M*&m_lB@)E(q~3`aeSFPtW1 z#7UeU7LDx(Dl&jg7JL6sr!_ylvoTeoElzVFO&CJKnoUNQS~|ZE-mU&#Ht`{H;32?xdERUD3TUfF9Vfku`^{~ z&X(cB*W!v9MuA2Rw;L)gd=4|#02;G*61^N{GE^SJN7Cn$H}m{u$`^4++KQnrTGpytP0`xS3| zs+tAsbRZ$OD4!Osz~?rCMN>S^P>L{$Pr&A!6UtSZnllaV2iJIY zq5vA(E0v~sY5RnqoVYrtdX1*{IrYEYiI&rI?oQ8{HFbQ2eB1K?g_qeT|4?$|Ve28t znm#x;7mwftTA%wM!o8_Snz;W|l1oVS@F5QcG6x zlsn0F|%yhcCRNPx$!6JTc+Nr)1%FP zsqTD7NAYsbHk4UYz7-mi5n-bQu*)R1Y{>{+;wb8Bc6aB=6%V@BEHE%JI3&Nm>*_TH zA@a}4x@_YH~oxR2+PRE z<3=@WRNn_ZDZNa3?!!iW{KWjSnyVl-ecRUior2Y_yrga)9w9OvZiHek)2eFA>@kmq zM*8#5HGAG)FT+b8TaPq|Ese#tlG@7{-J62Q^190@Up0ZB>vGe_dP35{WMZi(DV1{* z>@O0(k%tDX$_oGUAihRBpihnB8RF4<0X}~`wcZU|04%Cp1$1~iLo;m zb=Y>u@_%a25CjaoAT{urM{lbi`8c|tnpL+U<$@<%xT0wM({@~E>QhBiE`Z0Ht1}kt ziXO8D_iy`q~7AXbLKJh_@?iczKncb4LQcaXSVYZ$DPLorsFuU^_L{hlz&PsR$Y+5 zG~i3gX^J370E3!zUM0WXV$#$V=l>b9XZMJQs9b1%m1svtxbR3Hzelds96@V&>A(@= zN6()8Hu-O^vipCpqmpiP#i6-6Heq{HfMK@RFsulWX$hKoGJ--`DFaZBhE1U{pnUk! zTCvsUHU`p5Dd*hA{sJxnwK8Lwl0F0B+1=2&v)UH}q zBS%8`(1ZoMDz9+IJ!+Z_1-Yt)M@SK!3e8jY0(U4MnKNoiW+?!gs=ZZc|5b#ys?Pmp<~&vA^I_SJ&cwAxlTWFUMOWGa>E=gTQ2<%mBg> zD%uqKL5eA$DXlZ;6FVVcnw%^nSOaD@G+yCdFV^UH`Q zJ2OJfpoX}pmd=~9B}KD<^z&$B9V(D`mK7sp0-k*4R>~%d=7C_7e%B8oJ4~G+s!nX; zxAav=O;iaADe=o2#Y~C67u?)+9tJfW=G-ws9{R0~o&fyEv zYR?Aqkb5zmx9)_ZhRwghVo_gIbIz` zP%#M!xyDDOj)s{xYHHuf76k>0B!vV19SIBXQW8%4c#v(qn8$Ed4wR0dAO>XXz0`|{ zDn>8P(NNZaDHAB_KiBR9a-|`aLniB4zB0o% z40^!3Q^fvP*KwnxpH_`k;h!UKwgP@$@Si@Q+*kUNI1e3s#XrSHVdKQz`?A8k>c<8VKNJ_ES?d0mDJ7eO5EBEQ`H_9DN?Oz{;u^w}2GaF8sMXN(Z3R;BiRS->#qo z)8YyT|4!9!Rn-*J#Z%wI#zz~sPhZK{h z&rBw&B;icf`#YFYj69GS?sOQumyd!K@s093Eic-$MU&1nrN(0zjH>V!(Epkpop9Zb zkm+qdgpDlhOKeU|Y^eEl_8t41Mvf`r`1d+Yy!J4SRFabH=Ze%>+tl)yn*y)NDV4!A zbqo~nXK8j$=*+hk{p|uCwz&iEx2PU_J;L9HC#3h9d7F{3+)+wMY0B`>5=?V- ztW*$>yPdS=gqZ|yQRpR`u=F2`_wkz!N4m~Z$}wGTQ9pQoDaFqQ9c(%9Y^Zjx+R;$F z_ob~rlB$|tMLPpPJGr7ItBye0CEA?RJ*+a9q%5+YE)4Vx3`{-bAqct!bqc`TF#eb= zEr~XJ18B4)`JK_y;vYt9pG?F%J$9-jd4sAdg4m|{jIOSQq3*x)E?lSCF=85mj=yJfcxWVo z_5%o{^(GRXkE-kH8oS${qyWStpy)E&LQ+}1>Z`j|9chB9_f`dsi;k|NKswjh;qa~5 z4I3SzUhY5lub$g2R#p9@8o=MDZN7YMy4{%|sekc_2zI83{Y#n{#sCqX2!SZt#o?iv zS^?nP^bj%%X`EP{95z(iZ1{788A69d_wvM1LBR^sTmKOYEegyEo0_!+8!PmY4pXU{^G5Uksf0q03UU?meB<`e+L7BX>l4JfH0Jp$ zTgn@^CQsCR+<(GVrZXX$8D5ws`qV=T+Bc&Tf`%NLQ0%KBziF@{=b_{px`sJ4L*=# z*E>dw2gcdbylc$?Dk5I!qRDFU)STKZG~S?CVdritqrt!-DcMwU&e0y>hOxDl>9Akg ztT0}!UQ+-(eh)<66VHeJY3{0K+)ZRos9HFD!G*x?BxIs3Pb4W+J7jt6$J`jSsa6s9 zpwbkVHG4R$fy-OteJ#qanT4@MDmf6C11zSXT@Z?i3C*>GgofLTE=rpL7^>1rLH46w zaaJ~R31Pjz4oVwNM8=e5k+j@OaBjJ&cIv@_xN1QlBRvLJdaR|AX7Ob4SW`9u$|rJG zDTxVFTmyS8bG{3Q5IYo4(~k=3Ft6IY@)Dd9WJpSZ{AV}KHWI7XiUe7^4W;?En~`GX znb!@_ezQ3;b)q;(u0BrvHdmf-(fduV4V_E^w{%*9cQH9~M~)58iHx8;hMJQ`4&aN~ zrMdc7mz4-c2@PydL3+A=^%Q6ZV$UtjDXf&aL5zvRL;_I6^eRu$n;%5MGWdGG`mInx zhB`$$pGt>(bf0k@IsxNj@KKj<8sks~%Qc>N5(Dqy5o!Vk*Dr3dsQgbl9Xu};%lLD2 z7HLxV%l0}F#ugZJl*?20-#3sa?9leoVG+nYH(pe=BQM~6tLy%EeGCm>kQAg?Cy5{Z z9PCjdtHtOUzCApwox&&hvAL+mUVegF*%7+PXn&L6i@NCutpw&^B0|iB*GK;};TXQF z_)?&?L9M%UfPGhO^ysM7WtMtMX1-q0oGJ8p&}Z^E8hk4GfE55P11rqa@@(g;CZ3Ly zUXDI(^&tCEjtdRvk{kJ1eudE;GaX?%m14U00QE6vA? zRJ!vU`}+fa?yhYj26z!?cV?b$0aMLaCjWjvjmyW)rrmEXKRa6fjW3O6x$cq1`6sRC z;ByaV-_hZY^3%E?+G`mY%>>Jp6{K4A9S_QL#&b3?aqRt_Ey{J2VCyGKWp~H$yhMDHtl-|Y-Md`w$h!Ft z8@!6lCg8iXsHEE*ofm0S4(o5w)+s~WR*N?%#5_<5)`DYdL}qHYBzy?{vj0)sFyb2w zs$+%chgsbOyl*)}a{#upoqs~8$LXRloC)a7RDaIO29f)s{Kg?>IRiq-dkN8+rJnc0 zaO*#&-=v1M{s^o&Mw}kho*dw*w^prpY4hVF>UmkP`kQoU?7i`rXPJFd zu~0ud*5ETkI&#vB`FXW93es`yFxZ>w2{5aOoRI(`7b5m;jI|+0eKlqh9zz}OE z;1UnE=)baG>RcG;q8$;ipN&`9`T--I^nKsvpS=2(UREwl?C#f+Fe)5r-bk10UdTH4 zLD}_ap#+;wyKk893d zJm~u^)bC2XbCdG-;vXza=f$FNr&yhq8Z;aP$vtSed_iBcESpWG4b#$v8REAYh?-R& z)JFgO-7GSkxp|p{uvkI`^5w@cqgnhOGec36!BFlP9#hq<4&S!g;%{8fmw=|16P5QfwJ?s4GOU5f(}T=j(MQj5QUjs-6abGh+2@;x#BRanh;6aceVNsFl#87+GAz{j?Tyr9KoCHltIp_RX zT3CO)%*D(H;IRjvf@>eFs%a@!(!65F+d|bH-sH#h>-^h;E5K6Vh+?&E8+&yVgefyC zpp+TA)Fuj08fN7nmDabPWf$laQLa9Md#4$Aq3cw0oqg7#jNhC|+%75bByK?WSeEzR z5ETiKWH>ly_BtcKeIdw8UWU*QF3gvuskGvCDGyPbJ^t z2hwFalC%=`<1ytr@oGbMxFxFwM+zMDZj&1f45c$dA5)!^4^sq&>KK-eHMe7NsqMsw zm6^Z5DdeQJicZV_)^h@g>}ap*Xh$VFIqA#Evz z!ZiGVQ|P<$^#i7g5$qem@Lnm7Qx1ZC${RfR!F82n>8?YsK8e#gArE4!R^ zTcs3jCR>upZGJm%;m*6cF<4>2$2o7C@6SVb^zWTA=TxPZ#ar6%ngt8zw!4H zISpUjJ&WT?vV%4*mAKzOuYhxW=2)a_7v+#^mwrpb_1+#r?(j_^gKgI4D60ynBKi{B z!t=UQqSIs?&!kSP)<`P1BB8YWchz(?J^e0G0lUvde-IfV#&NVyqt7co7*xM@0wI9R zF3Gmodh|9z6axSh4Im)5_Arc`(&(6ZG@d+r3dog0F2Z1~j=(RCwbIY={`kut`iOkl zXrCPxYi;$d%(vrfrvi7b;`$AMbqPetYfTP$TMC|;o~F-x_}9ncENOQlE@YJSaKG-e zi@)YySBY@iJ941yDLGxy)AD^rEKcC24qs*uKwlf1bn0_z#aBc}=Y187`fWFc9J)E_ z@;O)3nuOf`wK+fWKmGbNjv4%vR@50Jk#Azi<*uwp94jA;u*=Ao9pMHKrRV)}kKYpd zg0C_g&+Yx-Q%yIC)rR6z4!^9Gv%#$CQVeuvke_=+Ywcgco?;zPyYRL{BR36ef$zZYbP zAJ+^hyoB5k5-=Sp3JL*$s{!$C0aIIL{QDqHc8ao8WUoR7yXhbi78ZO;*sSnuy6VFX zNhaWDk;69?`G;3OJ$RD4mPn6NDxC*^83iL_;=8VxwO2<#*zr|>#;t&TJdxGrAJ0b4 zFUO(ZJ&4C+Ps=KE9o${hV&FT~?M#jaIa8{~vsn@QUf;b|9-gdIkGprSZx=SPb*K1) zc3@9e)!QaFgpYYcR1$F|pVgHA9)p2X?(8Et`Oh<H@7Rzs3M4a&Y-*6Yx)0LMpb6P{N2T zlQa8V1Mg&DD#+Z_hP~_gNDxNmC{F?eAZ2)43kl)pr8TPoC}^aIi`MpS3>>P3u`~c) zzb7M>YXE4i6{;+yC|DuOOKA=M79;9L*F%!scnafK0c|`|L=X*B^RON#xSkQf#J$tS z1}8oWagcAmTN-JB75h0|;7H8t(8Ixu2BT zAD9gc#%Mpm{%p7DIL`pGgF|vA(<1wcKbsmt5^|yDI=JH-ewQBuuY&Kq*D+hO&s68LmZs!ZEFv$aRXrV zVqP;$&qXJALQ-;Q6~ye$embI*m%c6ft~^NzVeCB90hEY_&f4fj?)>M;Oq5&i%*;%J+rfyG&>S=5HSckG&} zHv=RLYPDt;Y{^;^sDBI6JjjTPwt4$JZ6y_M76sfSJ>Dj*31>h2ee=lw#%k#KQL+># zfcv50WU!>@4TpAq0~(IZ0n?6z9ZPNkW>3PlGGEb~sYRp3UAh-hUK0LK(+_Fkx1*$! zPyfPA?)2_QWEXb{oItgkAG$DzEHKf`KvF`UARv#9w zSIb|TBc$=FQGLv)O0{T7Qx}C2BPO(oE3rJ4P~ZdB)QlkiB|jk_r@-VQ7K@=Eyop0r|l&JRIUqUc0wp&?VaJI2*=T(&5O7iJPg zqkaXNcDaM8P!-SB{DOkt99u%=*)nIPnq5dFQonAoYW};hpri<+6od{iG@+fwOpi^M zuG6Nxlk;I^n}AkrH%e-;Vp|xM;vIBjG=+!fvvq2$o7J)8}|VM(0I$|Wp~Iqzj@H?apevr zTD@wK^(|3A!H!TEhGXv$%c9Tym;y4RD}{_m;S5YAqiL(SsZLDF@xcT9h8-I)#MpJy{`g1pJT3JfC!O!>Hnds_Bbdn!*=EUlpNQ%KY$U)MGhF zdAW^6`3D*y88D>M_?+7Dix)fT#GkzW*+c|daWNJdJr_MM7s*5j0qZls*j0lTD#ySx z_=QFaJ&&UR3>-iMBxnEgkm;$RY7zk?4cjEb6_@HSStF>EVJWmJ?V{s-MyvBit3Yh; zE6;S2K2{mt*-eTj7@C^B5QE)d1c)SFoB%cTKxi9JWeQdz?mGX0WXZ{#IrTW95n0FQ z;)MW`&aVszV!C>4m+N zLUN%Plf~t>WDV|EkZSmT3=vy7Mn?#v8AkE|nF5-!wmA_D>M@bBrJiE$MeC5`UT35V zt5JaC4L7_<3>kPUAjtCjtjP-0H%}cp)=9#Rb%baNLqg! z2yY>m&UCOjICg3Fx&Bk>e)Vrn^zaeZB~(zBm@71gtrTLeOww^%tx9tLh|<3JdB>Nk zG*y6DWD*{46CqM<3eFlq5R_IITlHO%cIr1hlq+>@*m8C{wzGC$=@Wc1#$fe*S+6fs>pEfuYG5JaP_;2w1P!G4jFhoJ@n_g ztZeDuRh8}$+h1%}FC(>4{<*Hmw}%UGB5m!i3VD2*noLPPF&iuS@wa)VWk@~xju~fA z2-31Cf<#3wt=FwC*U;rC9D9egU*R>aY2v03v1WU2HWM!@antm0GB_E6OAexBC-jA4 zo~^tzBLDI1TayjEzL?#*SrZq^A9eY+H(fRwXHuDS^VQZMWn!$;neT1<{vO|7u2`?t zrNjHvuQ%OKw@=?PX*wTHOrEy;y8n&RU^*TyliR>tS0jESWiGHWpqIY0Mzv92t%vf) z2XXGdIsVBBh%~m=ZofN8$0X7eF>E^wD)~L1orq(`v8%BZ`&s+)zpktbtz^h~PL$ zsshNIon0cOBt%fTwEP|zuQg=MX746b#H5cA`gt zJBvV{5JGrGo~l6`lg>qJ&aGT);B}Y7B^Uch7x9U$1!8SC6>OIe_fBK}Z}CC82h*?O zl)in_V`axEBVf`Kpb3dcd!jGS6grij`T0GD*+4G$L=`Q$;?-AxExfU7;n$NOd*1)w zm#RdiHr5Ao#UC6At4-St@NR5_C)_ZsgD~cSZRBnMGiyCf7GG#BEr%SAjqi{>YfSRl z{EfbD9(6D+5n~++Hf=FkDdRCPK0Be=Q1X?WZwSVKu--HdX!;8?B&Ydm3jmFM{VLo( z?>6+shTE;u44FF9_1IT>ii>MbTE~pUObz1Ubfgs!OPkL0Hx&lUy@t09%0UmMndwDh zc$oFY1iBkASzCi|m-YVo0R0UsGPYFVwJlapq(CO{?ukwZi$PqrXXOZC0_A}@~j zS)3Gd!>%-lO~CBMUn_XJV{jIe3>wv`b6morg59h!Ys(XjgFYTk)Yu*B4_;M?e8|EK zx_^n5ILrXDVJ14xY+Ms+`Ro$$GxY@`{h2sTQ}i%X^GYO$b)4-UgR;^Zw>ln9KA2Dd zq<)>O!p&fvrfN3lP#?`*?iJ+n@5~YPk1%yUb;XB0ozcZNMWVZgE01@A-Fgw&nqLF% zIQZtD@dkFnAs9V=dkYbyu)ta|2AUtfXia0nJF@O)YEMhS#JMf}7{oCmZ9YhfOTJZZ z!iF(gJBZ_4CwY5D3GCPvAx@V2g&F9kjNp+1`tns-O*v%7xnU##r`3V~!_-+YwHa<( zIKiC+DQ>|j?$#2VQrw|fad(H}h2Y-eUfdmu7B61hp=fb;xjAR%-nsuEGhb%Ue%D%i zJt>nwP~PD1%6T)Z1i|p-VteUwruuy4n!n$}{`r=X-yIp(m-B-kL#kfj_ z?fz@mWQAA9r=ky2aW7e~FB306y$zoK<-Gix@V}las~`NASo3tqdm-JeriJ z<49X43A*uZ`qx`V2>l$XCcVzg2sEY7s&o#2!NEKOiy=wYG`?uUwF&uS1R zGAVUoei{*8@Y(26{nmvET6+v%7pnsp?b#-q@7OFUn|*zws`S?YFXq5dpSy(l+s`2T&D->fnxX4VqYCrN<>hKNOD>9P{6$6 zs<^u5g-od^r1O6a^zx{lcP&95G6h-JS=cJ#m&KR0M^ztsZ%NKp6n~LZVH*6p#C6vUp#?=bzL#0ilx!nI;TjT$9ARZ*=5Fvv1PiuSk%PFdB z;}F>sK4z=X^fPwdomFm`MxEc^kEr}C6Cwae6l3(->{t+iaMaK`9a^jW_`Z*>@%<%Y zMh0-ZjoLe3YZFSzIzS?5As{jUjn808!F!z5UCm_Pob~doh<>^v613zYaBdLPIY&So z6xiN~f-H%!{ijkX_D9zj%X|Z|8c%x>)4}3f9IEWmfQzIYtgVeKDp}^DHH$hu$DvCT z=Y~bQSfw|o?XPREPnNF-fBU0OUmgQ4wsKwwB%cSx9*P4lwO_TH;QRyyg*6c=uUq)# zO{Sw^mnc3VqDDP=5^VH<6!@n8=3FE$Ys;D3q)TR)Q8qkmMVcobgkar}oaq@N#Wg1B z2iNub|Y<-(Y3!USUzvP@lckxekh;UZkJ(x`|`4;`drSwHO`r|_N% z4}L1FPeU_Bl5V%Vuq-hYoZg0W^p_Kk>~cM4HCT6u}H6 z7DQY?QOC2d)bgWI_di(j+&*RiPnf$SseexDXo$h6vbjNOrBQ1u1_63pe z#QWF>!BOy5&pMTt-Z|{hXyQ~bIwG0cXNVoP{1n5wEh~vCvUQe!3)y>4Jp6BBQr+|) zU7~ow$2SBr^xAl@Q^s=toe$ccfxljFF|fO5G_VNbRoscBYntsynG@kaC8tX)B?vVM zm?pl|d^n7x>dltz_y;5R-nwf*eFfgZ*Yetdz=b|?W+Vrt@-~TvywiHRT@%(&x#$fi z3}uNcLSZEXRKR;AFiB#(Yp27afQcv_mtxf8x{e{vpX!sY>p7Rki~OYxGy2AXv+QKi% zF)1I25sV?vpqPxG&Phim^5%!2)6t+q1UIp>=4{5bh4+n`l*>5U%-+#ru z>Y-CC0BD)fzx#*pw!3+5RJ6U{gLQUgo(*gk@horOgm&4==`C|i@9|a+X2ESyI~KTM zQK38FZ@|T;NllUl@6LYWmw*3w1!siaj@v#A8i?8P8(5K2&w$&D%gWj>t>Rr{xh&N!#x2lNXC%-lnTz%FmB+*hGb2(X zf`GY}GJULzO~-9CDGrlD;ks!Fz_dkh9y7jRK3D93ju2HU^&WXrd2nFWqvAVTbQLVX zly4kYsZ9^%Cn`K>Y=i)+v|NSe^SCu}Sf;DD zDNQJoP-*NI(`eO76k1cKJwC%n$MFtCF4t(AFdJP$DHBL!aAxY_&+XxQ<)J>QQP$k+xEBMANYfVc8*ZYA{iUIZj6eJ zK58;Lw$D`bv^_LVTJC6^BvQt;QP5u$nm`AP$7@&Wu=P(yPbikayW>+tk*%=uxZFq^ zubqFWDh`_c|4cYC2HX-~FctEeUbINre~BHaUfZh=a0D=|GacNMhy8NT@3G`2xS_fs zsgJik4LV|AEOBxH#Gs`nP;i-2OGDD12rwtZ0P;=lMu8vJ`?PN`1LYL(%m%N|{VY7bc zt$zR|a0l16&UN!fTIYzn((s$1Gdg}5{CsoS8$!!<6ZC6tjO(qO0O?g^V!{j-UbJwj zP?1|v7Co^UK=UmLu@n{p3qb1+8n%X_l=O_($B3?_?X)*GWob${npUX^8Ywcj&EX}E)2--PpGjgDIzcKElU4Qjqq?k?;ORbbdn z;%d{|3GNp2JMHMa#vvRgo+TuUOb*PZIu-VM8bkQ%6o6CfCdu!7Qn86e&NeHrRmu#{x-r}p{OZ|l$$+C>! zgyJv<3PBO^xuF+wUDFO@&@|&|>})H3k<7-~bJgc#$AF(0QA86QuECw_scCu=k?zMv z9e&pv=bvtsPG7HxsOY}J5v9SXxXMQFU+;2*PQToue*b=G^m6f?`Gdi%vj#vX`d;jj z<24HRh>}94c`Z`*0(GMPV zIA$;iepf#kG}J@~Va>P+P=7H!Ezn~a!{?xdm=ai!7~s68&#{I0Yc*wvieK! zm(+nMx}+TuMQBO16q?kif&#R^7q8jlU6I}j%==dF)gpG*5%^Yru->5#cP)@$MdHL` zulKsxe~Whgtmb(pS>Sy|sQhUQx^F?cEzy!$a<@tg>v+9upF%cLb7wTN_cq&Q7y~LQ zA}94gQp`suK*5R!!jLQ*m-CItKmj7xU1%d+h5_lwbieY$xaX23Q(9r=BRW_(nq zKSN>$nw+T{In`v)tSckMiNIN-kJc1OO>HwE1uH2FvKcvB^vN*WXg6N2|5J0oPR7C6+WDpOdm%+1 zFRxso>)QECqN8V4>~S7`cpw>LEsc|LmNghAC1U~I9Jy3 zE``IKs)aJ1Jk{PC&s&NPW`;n>kW;V*P==sGEU`=(cn+NK5wP#zN_MQeCJO`z|Q~A=wpceV?{?*cnKPp+;SaFR`o=9N@%rl{L!3hE~+Tnpr<*9{2jghR9HPz(TM2xDar}29Jr6T4=Mr{A}iVe%%B__$c ztJK;jPe|u7QGZlH9yEhLas}LT)N>%*I|R!c-@fEX4GGW)&XQ*)Va2vsE+sVa@47%5NWZpu=K_+M zLIYAN#2YxO5;HRtNT@<6rPx;&oT8y+JdzuRuAr$(0svUcm({T4*y>@swWU@qZP{Xd zt#)U6{3Kvrrl*u$?l6r7h=D3Zxna!8@J<|Mnj(JGb)Cx$R}_ftoy2wiG}-^h@|$Qu zF!Zj-#DdObS4DH}k)XXixSC}z6SK35g)S0uM2?3JXZrwBBUunY&S{%)NS=8bKF!*_ z*hvKwxEt+5=Qa)3&#CEkEX0nJQzwdnw(M2F&5taCreB!`VlgoFZ+lX2GGD@%<6+0u z)SJ9Si|>zw`)aN$o8B5bw29sTzvi3dO1yzW+(L1Jz@mrJXR7) zWtaX+lX|>MVgaa;GQH6J%p50?8AO<-+ij+&L{hyxrHCVu>$Hl8TnYSJXI z3c-p@$3s454LImm4_>}>Q@=%7`4lP>GXTSdLY~vyefC-Fq`}>(>F57 zKPO5`fh4c%gM#3s;#Zf@3^7O4=!UT0u+t;E`HvF}e8$dI!1@gcw1Z(751ZtEy^t}Z zUN~4bd_DbLfUt;uXj8C)VrmX0t6_&1QkhTXFO8@;EPN1o|9iQsosXG+m7s_l#3Y9T;a1>$~&bKih8tsXa(_#kX zFasszNJL#b*zEUw?s)6#&$$+KuPT(j>1yQIVT?p$y8D@q9)Plbu}WZryO z6@;h~+KiQ^@l6$KyKxG-5Q>D43)$#=nqW6p0Qt zj)23>=aCU}F}T#Zt7}l4tW{134hkyFRFmL?xb$WJ!+@kCO(wnFQ1VgfJj_ZWBPC5h z<7A539%cRzi6{G+V?4qufy>gujMpXp9RjF;kk$a9E|{50A_%FMV!N5*Z4tJy7}7UTj(Nm7o2}-OLCj!EbHDPxvk^imaMqR+uq3ku2y_I9J=GNz5PJJA}-gTS6E>XN% zRF9*zKtxK-?%MRvb7|G-OCJ@iTTj@(!F{jm!^;-KPhD$v{MPWb$cEWGK|@pXYz>eK zTO>(^2=8goMR}cOx`yRBkZNmpZy!vu?^cz~KKjgsHGSQfM0GhzU8tpr)LHXaRpUE% zMqQQ9OLoey6jwEk;+gGY7-~*za*1f-)l%5Yh$u-jrD!`0@i_8$g^X@Uv4LPw8i&#p zFGAcr-WakXMAggp|BU4wm_K1G1*af??fulCf`kvGm86s4?$Hx!RVc*x?HhRWU%Pjf zBG*Z~%iJ72urC`O7?GIIY!Cys(hEXFM&y-3mH^d1r3fYpd`av)BCz_d(t)jm`iK{? zYP9(UOnjn&qVCgh0-39-n{(*u<9+kfqWuR$f0A?hMTf3ZmtqGy4<6I!dGj@DPp)eGkZ%JgnK|E>l)(tHY#Ih1UJChiBlOM+00cx zIl9C`-r@ebm~^t%;oED`YFG)=e}kCNThQxCx#pQT{x_V6D8pg;V6t&7DEj%nIAqu%#^YH}tc zigMC-z3)B5lytgY*@!|+^llS3Ahl3L*m~Xn7WXwS;JT|yYxNT@W#n*@^85R>+n2j( z%kLxC507F`mKpy4Lc~NnU$6f0KtD83wy6IXuD!QM^nHYtTTBpEpg!AVjqY9l@9{G+U;P%| zSL$yOLqf%65Cl1?LYsWjL2!JBED-`I@`J)6t ztP#U~w-f>Y+JJ6+5vcMJENwC$#GUH3rx626qX2lFl26BrOSL7Z4L`E*Hhzv~rb&l| zg4(N1qHj;K@ZkF}^T&DjjIpBV^t4umun4pYv}%RpxykFOuts=6>N)(NM#y}SSUr-t zH9`a}Bn!NO(39XTf|I%`mT0FdOD{* zjkpX*S{h_Nvrhl^_VVRk8>wiwlH^6( z_zUPd(KWf~`^42QBsbHV&c7%VazlB#`6*4PFqbbtMMiHk%CNjS=q(>d!%&L!2FS`} zqFHkL)Xxt8-*9;Bk>TMjqRWR!viv=J=V5!U0;_7lKp+V|rwqAu4MWTcVQ#kuzE-da zoZKEeKCB8v7p|F+cR1E)XrP$S{6NabkO@r^^;iB;t0)>UJ$=luF0$+)MaN0|>-g%( z!}BxeIT^Ns`-QXs548#_GZ~683%4;P%{4#HTy^8AdCSl$eQXD#)BEJUcQ=H_b(sX5 zZ&S-GxKf-I6wgvzOE4Hvtut+nRk@0YT0_W++A!+C9u&4nZheldUHiM!}V9Srf zl?McanqhYQNlkzaicZVS4@Djxm5=Bj67VjG2f=PFdj zs=?GewE5|&@}uWRtj|ee5921PVCdQA?7d4pNskqm7-$*Gc}O*k#=h-*d(%2+-s1UC zn@Y_4V&&)A$>Ztsfp!-`@cq=k#htkNgZqAD?Wd=I#bS4xR5@z_PR`Dh^ySve{MO{} zrr}KL>@@jAhkEbxqko5EHsoQty|R~*76P`r^=Xf1^Hc$MBSvoJRb&rbyNc`0^(0(m z@s75`Hbo=XyDqJC7DfVc8p0nmnWrj03CH!&1%{_W@}#-Oe)R|_ezK&1k2Na>%1IIz z`O7xvQ6!X->=GAZP~k*kPsn9#hRTml^`e8<&!-*f^dnU~wdObP8J^vD475E9f*e3} z;bustg`kkFLezJory6~tOcJKVe_;e+g%(l(J3J^E?^3eBe6fhdY2!D_o8k7RAcS-% z4Bt~sLu2)KhBxDW*2h zA#eZ2h<6F>_nHg`Lh8D@#M11_4(cr@zK!_kHq*#2Hw{C90133P8RuW6mpFook?%ck z>v_=8YP9G#Y*a|QsRwxfxWz6s9xXPKe<9P`jph|51cT`mLUEyVh=rG7sE74OyunVT z<5V0`j8H+xL9bdWkt}*|VWo?e0Fnjol=mihk<-E@;xQUoIvTVocs?-0^XtDjON^<59{%&Zc^>jnMbt-*_ zV)8E$PJB%UmvNFnL{qo9279!!B}jT2ER8u)@)QdzKGXGxTtrqko6via>IS9bWnb@I zrb>eNN%*IXf=c_Gdpl0pIC6>>fiWRl4Y#8fl9LsT>2)XvFH^w09Z6Ql7RHX8I{y3= zT>h&cbMwNq^$e@&Pgx}t391Lik2kiD_0IRo#X*o;l#hnCN4n-+Va5M?r+tbO(Po9B z2gaEQK*$;&5{}5q!-J7j9^|Q0VjvY^0fy-@qZN@Ns3Y@!eV93%ZPU{}v@rl;Xdlk& z+myZ0)6K=8reTaJ3(isnOTC4G6vPQ8g{zKrgL>yT(TEP=4mf|kMxonJ`}r25i)ELz zEWBUyKmvn%CF5XHAX*Amv{oA;lD;b*h`rfXuRM6(D%>4IreO9A7d+i^@+;3;`)zqb zWGMuJjGCz|AEPWaB1|Ys&|aLSbgwpj#LwoBFk}NOO)X4+*$T^KKeAI25Thy?PYeeJ zmNoUv;d}3`{GILDd*vj@VQ4-?baUZnudVHjNal%H2371}Qsr^wC>J)$bV0~>j-2&2_uGA^*I{j=ZJ~Gf7nblm z`}i2ye9k+cnWnrdQe+DUhA%Eb7h475?)#Cp@?Uh2D=L@ft3Tv1hK_&4DIu$-|A9y* zwQsgk!77g3?K>ZL4e5)&#{!HAB9}2RA6D-T?sgD?Rn#^2^t1OEdI;0{yA^QZ>sRde zDBZmo0H})*9M(ARX@Wk znS#o!m^gUN`|RuUv*-Hr&A@I+<@fiOva;bLJ1&BxP=X2lEAB}jUM9!&_BRDb9sXSJ zvg@Z_*4{t*+1hUPk9_|`mh^dFc`qs^X1LDbpsDnb6pkDLN=JAnSbBqJ^I_=-5b%$9 zX^2F(83P;?If%GE$i##)jLHWM>cgtAk`eluD1=CE8H$!|aN_IUamFMahrv=d)EG$Y zH51*SMhy>%4B;@#ERx6I;ugQ56=F1&A~3NctkCA} zTdzzI3L!NoBDe40TEgWTYDzAo%!IfAFO3OQ>64hXO?u z9=UlC?s|TGMZ_rX0t2WeJVq5SFQRe+?l;%r^q%V2Sd}-SyU-XDHi;<^&74g>TDMdm zT3;q45gl8>)U-@a$_`~$B`_#$w3{3T$OQ$L$!TDL#vp+}_W0OEE?38ve%*h*U#YHq z$dZP~l^g}5y&YYBms2`cyvMn@Ohc1X%8d~sVJ3h55zUu{)CWGEfBhI0^D&Wj;$6i@ zF`-LoI`rPfWYl)7KoQf))Wi%lP|_eym3p(f(zftNJhY(Uk^)KqElAIVY4YH+*;|3+ zagNV1>5D=Hj+)!4OBhH5)brMHXIIp{04#Uu{%yJ@liX0wjTFVL|IQH%l@`5qFI5&a zNhy2?iu6%C?56>XJwKSm5(|Jf(1%vhh2eWfCPxXN7D}o{9rGB@@S0{jA63FKE(*@g zMKVxZEsbo?@Xz#k|Cnz1v14CP84IPz_`_s55$!<2%uFIWNm)ElC#nqXHw$$zOYT%S zDW6G6pJ;J^I!%V~kb_p9p$ zE5VzoJmGa2@f&PQG2e~=x2wO)w$LYaa3Y@tQPDO9{g|+ z{lC$_E<&f*;RP{c$A|N~QCn1B?h1~_D$V&EZ7L7%UwTf)Z^r9v%7qa&T-u0nqI$jg zuS~=AdlTJC|3)kKJ7xx|?DcREZYKXV59>xVW{`@vcyIIVKz&T7?Lz}z(me=Y2KO*Ib zqk-#~=r0|iFHRb>d4xlyoY;6yuBOHFRNEcDzW4X|(+|Lli%vH<56uM}*I&-#0+#%) z&Z%CePL=otQil{6w?41VRO7@!-8e_<$tgZBYlN=-^sC{^q*B~-t}V$h{;iN#D%~)8 zx#*I|rIXBkng6?6JSIr!adg31_v)|4^U<5y#El%D&aa!Fqe?-mn*bIj2(umrn_RmS#6{}& zQReNDo&~K0gj=qt6>T4eG_2)@BC?$Hnk03mIp3lt@8lGC9rc~+`7Au#$iLC=`S-_+ zAZ8gJ&FQ}U$lTmWXslMK2O<;{Wg*iy+|3IvFDruV&f?77vq3`23ePk=TDX}Nc2h0h zu=XA7r<9O_>m+46Hl27E3)f`aFSWQREqhgkvRfdYy+C1?H0?es77GaYOhB#4Kweoe z{FA}c{nz!jvzl?6D;Jc$VM3(ua+IJ6dE7+iD-79v9RZ3Zcc2RN$SG7x8G67?0iFbi z|8#AqCI453rV0?Y791Y& zUxOKreQc;F4j@`8Jv*YG^*?fJeG(uJW|;PXDvYZcsXrEd*W!^z{`RJ_7tAUXk4DPe zfVZqOVfqep>`#OAgaytFxi7=Fl00k-aJ+=wa+}SvmPsIpWJ-$bnqrN}o9k&+j6%$- z>xaVf*HOz<*&E3ZT8Vh%Nh93jBm3R?as(RAwF&pNL?57-_;6CL?8O?GTCVFmuKc*m z)${1jb{uAF#QX?Xth7f7uha7=F}eUt-%BTd1$^Uq%#W+9%gZZk>9bMusE_%1S=SCL zZ4?AJx3`q<{2v|z&Sa+ zuRc4LJ^t*SGB^$UoYFtfY@kYW&z$)QFTw9Gw-a~8q2PYoL3=lp5F(U_X0zWy?G6Eq z%HaqhjtB7o5U^LFhu^az51X*T>VUjULur%fD3I#qrdhJkI1g!z3{8V>QS<3qSzP(p z@$d+vGV1eY$D?PCsE=?~)8MoC$j6$C#a6AUGt~cKISh^_pZgnWlJ=2c8fooN@w$37wv>agoS@! zk~4RDy);xUA=Fhc6|ex`c+Z{QUcwQx?+rClLUW7Wzg5@DcO8e*eaZ$#4M21WmasL^qVX0(}u5z`3GAKnTz=w^p6%xLy|i;Zx@?`cSKVHO<- zpqty9@DLzRRNs!vzYb*yh@S5Vh`u#48*)>fhTyouR=J>vX1mz%V?vxw%DSLI(TccU zbYiKy$GI04n4KmqEw>2AD5SE>Q))4iWs`Pzc$QBq&R}?n^bjbms{{mX1M%iJG`eX3 zbnjoSnUSdD^T0GVk&EyaUfg;MO{4 zB_A3Zf05-(zeLk88?({J^jqt1$;ret(Z9%6(;A6xF#R84p}x7@gj^)3m5gz;%{~Dq zcVbx@v0yt(Xf=F1=xGQ3ntcfS$z7Tt!>?ivLkV_6w`>kXAYcu`UV<0Oe(;HBh|LZn ziLV$<)2i{BpUMLM;(&k`NH8-iJ516aJ=bLa&`|FMXm3dLI?50QdLE9_v^}SCE|M3z zh(ig7p-Er=46krLGhE!8evCo#ELBHgLMbWbNl{Wd$cp+CIAgU^AA!mgk+45Ug8(pEJ_@dVLk~r!oz0je?xexIqsLYlv zO$;_S_g>ETy&w54y=*Lmz@WNg5%I^Y#*edUbc^*H>DZ@_YiwmUi@fY3lF_$=_@_B+Ne|3q#b?B6hGUMF=u2CRACIZ$r? zJng(*_rD9_x7+DBf8j;=b-q@|DqpbnWXw+<`_Q{N*V|m56|))h6Q6uURr7k+uziAu z76wY_5&Y+4a^S5dT%6|Z5$`twCO`rOs!rLyRe+Hy*oMrhzA0~mHh}cMi7y)UF@!UC zes%p)h}T1#aA&Bn>nE4XX6*gK%7=^~kysMFpB2R=EM-kb$8^!2VwH<~+I4->+kAVA zEB3sd)Ump_?Aa{#y5Adqf493TQpIFzXBjR#e|mIuOhN8f>Zd55hea_z@8buvTG5KbdpOgDU%LB1;Ty`euwE*4D!Tm>uiC94E-I1bu8*e}P!%PNba zHl0#wb^#+h+?aV7z)a6^$&;j8MhO2D!H21gyfUxQ6<=8$FPzV%b)(>c)`>c`!?NZI zk1*+=nbT{JDo4wABKqxC?#|Czrw@%;tgdQ_>y%Fpr*l_Mu^W4XiQx(q9}Sz>ctN() zC_xehTyJ9Ib5+xnaAnB05Dd^%k!pyg>U*qIG{@G~4haav_HU!s3aiTc>&EKV=H?o0 zI-%118tT@|qe3HfMc8YWM?9Fdn997l?#ZSCj(zMH<4`nqVh~e>DE3?el})0AvjPx- zG=hXV@^b2NgS;_X=72OdH1kL`_vd^q7)+WMR6+_6ya2?npd}7;WK=Pnwj?e5(UhQs z(0>&(#t7B%Pk6Wgi1+??Bx0KZ*Lw+7rx!3$=-fnktI9f54L=f(&u7T&ZHYSUm4EiurQ);P?l!P-T!Z~a7K`M;m@sNQ$LrP?#m^3>M2#I;4Mm+FL)RwxNF|V)6I~v=n%N}8U z)avu(Ex0xvJSpOa1C-8hi~*{t5D@QvA&w?ql*Y>?CQciHR4<2R#&NNmjB*<#OE>D* zx#ImY;itg%?cjcex2aw9pia{CTEZS-_Z!2+I!Crl@^#>UX#i~e`T zPmT3Eb-Ua=(>6`}-_7|`(LRG#*2P#Z?VP-lsZLTl_ZC&T2&@&rX=8Hqn<&9@rRh(? zWgq3`=pg`nO?7&N6uriXB0Lt<20#1u|IGq)ABhs@NxHo~x5Fr=Lo!fp=im}m=GozI zF#i^!yWFJvt$z{{c)4h1>T2oBbK9BD@p96O>$u*kd1c+XQho5J^$6bXU~^DuD*`W? zzJJuN-W%z!t9t05q@g;ZvP7=0b$$7??laFN_T}Pg;5b9sQ1r`Thv(^f2mDe)`L`$) z_GurnMy1i8uDj{i(xKluuTN23_ZeL)D@4)WHoovOz5ChgiBt2!??qoW{LRrA;(vQC2nHO>ywjXY1JTz+lA8 zHj|jmQAYe$?`BiRx&+e z(AqyI_evA?mO8UnRr+f0i9#TkrJDyV)R#{?-*A|BR>44gADPo3k>8opeB6q(+LBHy z)>B%hW)L$(lp(a_go<7iHO#7EM@IK_40)J=#U6=k=K8KutIQja^9KSc-yv4^PF z!_(IzG4tBv+edr5WzZ-=j|NACjK68hpunF#qwQJ7W$_$y0C|W~vFspxRX&KSMj<03 z6L7R!X)k>YuNUuHY2{y7qAtwc&!o+XkV{{PV#b36&tPu~V1(SYK~cRzL}5nEoF?`r zky-rM)8GHJR;hW?SF&Yj?;uvFex3F&vF$}h-jFg;@Wu@6GqXZ7E<;=8tJnHkl_Fn^ zP@~QI+pGqSY4zUGm=5x`c|MtX5omxWZxuTw%^-1oFxn@r8D*oOjePun>P=V2?|rFQ zD+@>cw9RTNrmt;(d2JHOs~0f#j5g-o_qYM-gn;*ajI|%BJU^6XrnP>BUIkSo0`7)awg4#QSR z>82)u=5x7SL5lc6akcopyrgTzv7MlW; zUYQy_Rv6brrbQ<vvPXbFE{x7Qc3J{~4^=ey=Cauv%#79?jGI&I2h=Lw&tlJR!;nSUa`sx}11f6j^`n$P&3-8CT39 z%KVOzmX3HKg_fHoMC+km@G;67*@+oU4%Hk(YT&lbm&5v)%lZ}rM#(HYo*-I-NGB<; zwFpBR`ko!b@=Iag53NT;R*v)stM9X6HB;S=$@#xx-!)%UjqSy`#u(hr+ix?M9U-e_ z35VX}R~DX@Umrql z*B<9SIj%qaqVLsn9-U@Dsu4B`9<8I7nQ4|$(p^lLg~SD+bKdK3 zFZ^{03=8_&2vsi4ltTIzBtp7-{nsXZv3L!_KIra(DAzjf$DeKOzqFSWb*Q~>xi&WS zwdEvXlay>l3=<9W(Isq^B}YUH5)tJ-B_}n11pCqGX_~~)(zDE9 zm{ydRRk4^D5zvGCiQ!>X76{8ooqc*)8F9_}X`Bo#vPK9)C;>5v1d@d2kIUj|0UD6$ zJVyy>uoQZzVquw5KHbGv&sN+SJTNLz+A1jqGBt!#VFg&j?(})}Pemoc_>Q8!4_l^s zMDg0eRmi*zirn05GPUA%%FJInQErkAHz~Fwof`!?q|t7q)&kK2i5f5gF4F*p$+vy1 zaZawLBwGpuMrpxM<5pND6hD+E3B<=Bq?{$edBN`4Z?N2O(7L4L&QTJ75aK+`te*BW zczj@&WXgYkexhAo`BCO+7suB!8`LdCWr~$Y^BX^- zx*Kq9cW%HZ?f;H1e_1&|*pQBo9TZ_;EQTBtB^! z`aS@Ie^F&PQ}LeyB{ka3WQO5C9x0J1$Nm-K!u{rhHJtLhOK37?(L>{@H8Jsdc~S|D z_rL$2v(y~Mlv!GQr1*Bv$O!neiLF5W=VO1U+yiOxfDwi}bx^6^o`-Q5)G1;E@%)!i zsWD33g)}dZv^p;k%6Y7|5eS08qPe6c)HGB~3FYk3ROC%8vCV*RdWZ@ap=N|)fyI8R zewbYTn{+0K4fD;?kcin2CcKcy5;+1%NypKdk^1x9fyxSExstz|uC}=LJ{4-_B+#pA z*|=D$0Ok>I!`R<-Lyteq$W1<}^fj?@YQTMz9i!)+ZDs%B_KsoQbr_sa@-a77Zg;Rw z$ICe9R>$uId?^~Gq(K;wcEI1z^Ep;=nIHaAm>48WVrZbWd)>J_H#4=gy}Xo-8(9m? zqKc7Oo_A>XdDb&Jk{!}?tE~t*x($CW(nKaAh$eqf(+t$5xm+t4Hg5QGJI6O^al11e zvf3e=^D-k@=&?km;ODsg+j%XA`e)(6sZw#FmH_9~ca6fVEqXzVn1u$mL$x1V==LSi zdF!VC$!pkwXiUlM$zDt&Z@7?xd(B<(2#dn{(b9BP!OV z5-xdFvm>EMEqlo#=_%7eRlYE}K9iVO)BsOiU0A>i7I6ZP=Gu`XG>f2H>f8CN^EYw4}tb7&cFQ+B>JkVm}ek8L>gPrUt-sK-fz z&zWa>f#dSScp-`a`4bRb#!OX%063OVN1RW?L>dGMR@U%u$V4BS+hsH{wz8Qk41h2N zR;>6r&vIpxZ#u3msw!Vk7~~dp-&j2@8a>a-2AuEJ-R2v$v{m)TYvUo~*Us2=igygcLNDX#xkG-~V1mq?%xf*}q8(^BF2GsJz->Vvo;Tnm)tT?W$wSMvSdS1F4fC~m> zJ7#JG(&e={Kw!J89h&NT4Lo<=P2^AWVRJ=nqF*CNa&mOz3D^19q27nGF*&*wBa%17 zO#4p)Sm^_)lEE*E*D&@);GbFRT;trpT&sw^IcGYN(|CNjDiP0wlAp;($)-s`^gomn zVX4w`4ty4E7g~J0l2XzD3u9!9?m*<=%QB3x|42vwv9SMRJ$3Q1_9(^s)~E2_jIE4z z4M$b|C2ojv>HZjx;ODA7fO$*{PDc-{O8mqA-365O%KX80b+=8#wH}-)wMR+$_Suc;xe za*=6{q|e7iPfM=6mzhht{pfk(w-<8z9S*wdczn9s-`Jvhz1zH9M_p87FqKpv(j@!S_$+q3eST>fm5ljvX zSo1tSdoA>N)_;84kT48yx5d1>{~5?S=GB?&qHFWlr|Y8N(~lb1^0aG(ZlpiVfi4({ zW-&?;N|hCQV};rTqR~JZY+l&q@!G||gJ#HROQj+#VdmQGm~ne5o1XV)O{Di>`pGt1 z=`=)j$11<0+uaLKuvmP{mDFJQGiGwqd$Yyg#L%Gt_qf0Q0vl&8=Ejvo(4COM(PSsksgRxz}BmZWF-?B%J znMC?yuTA~^AYq>0JNwRAv|n%Z;GC!2dRie)QATy;`{owQ1A^mrz4bBRYBpXC-b_}! zDZO2HyOMgasWJ<-pQ2v%`@@3LR#6~8&X|-NQf#W?7`|N z0FsuL)znv_*GxoGo9YY!mS_7*S_6emWG3*W(PKF3dg*)>d22Yn&C0(#`KFak0ejb?`yWfqFp)K?_gpq&q}k$+?@+%1NgRpnyivI7-t zfSt&xZF!Vr^J9;9cav!IXkL>>0*DE5#e_F&HA`SNgGBsb+SW4|6^Z=qyE#kXwp`Gu;9%Z{ae zjQQl&MmuI)P#aH1Ll^}6=O9GT<12ugiW3IbYJ|`HgQuwBT&|dDw%w7?)OE|*I;KO% z^V6+8AIp;{uFTF%Ym33S)M_Ea-Euyen7`M}Yxhg9$7ZKkZcIFevCr*%8s_HnLTR2~ zyNiRhx%X!XR712EOGZI1=6$uZ(V6uuH}q6(YIhJ%eFY52I2IYS71 zC&xkR;ISE-f7vRV+GwV224PrHh2n774l9;1GlFRcumJ%T3zUmqwZ^X{UVkcFAHFb{ z$&V!Ad@!*gUO|vL{pI5DRd?77X@GVd4?c1jI54~w@Wt|6*_i+E^(Pv9hrOY|)_e+q zjiu}&)89!m0*IAKItD;LNEv$g#6NB+N@d-^Ge2{GxoEgB3k>Tu~W#i$eUOfMj@VMXL2m4)!M(R%y@5kWx zhjYRXb{9l7J?(!15e|yK_#~;^$MJS!r$bzf%@z;d+I!^tjJE9K0NBA2b9_J$po9|( z8|9Nd^l-pPYziTQyiSQ#V_>>d{4yk`V0DjgKHpqz^=@EoC_z`F9W!{b+W5Txg0WSZ zx=k3syr0m7U+Z&5c-j{lNq8wyI4`q8%$X@=Vc8)2|~Xa2dVs!hp`2 zkc;%Rv49U6HZnDZcJk-w0LKPK#j;$#5T{-S7MBJ=ayEs;Nj;PZ3o>(v!{SR&4mUTz z#KX(Oopxj=rNO}sO(vH_TkwQBZr(mWMdag9@nG5hSdi9CK}*l*3@6GPWk%w zeo-1NO!{ZlX^Bw!TS)#it9gY$Z2j8oV)&-#y9XlwIan^qA%=R2Tv!T(TLDFpr8;BW z(9Nti7-7vChGURQ3`$i#gV75Pc840uVJtnD!21u~0p{Ac-MkmNwdR9swX!(m+nfn|Bb@EniQ-r9GO zFPZdwRT=YOLxN6i_Iv*D*9oWhb&u}Xf6KG$X*D&DUnk=*MI~@6s&bS@y`$+rzU@>z zdwh*U{Of<;{n{b+2tC7$U&j0&Ti$OG`_=qC&cTkl(7wexS1;8M`}|++Q)DRgIy~<8 z8mv{KLFPMCV*XtQ(llXY^{m>1B^coOPp%~*Ieg(mP`W?YWvx-^Oz^V=fK$Ld*ssR8 zRk45-Mcf|00i+!q^Lq7NSvquzMw&`>CQ$$G6A>mt=#Y1d2OquV*^=(#;nc^Cu8%$! z3+t8nh1v$*-#QO=A!^ZQoa zfA9pM>ubvcQbI!6^<$kb)n8ip=-E8REC(?V`i*8o4(&66Tpep2w$vH-xt_Wo1}n?6 zpwsMkYvu700%t@aLi(EMEWZQ8-$@LuJ`Mh^Wc{$8i2X+`Y#l)Nv%m`P%_IN$Mtqy1 zIqD}WHfhRo^xkms4O6_h!T}_tIK?^j+2B@?yM(hzuLcCM_7=GEG;X}v+wsU~vmZX) z7M*=Kq3i$~xzgYj&a!lGK@t-J5x0pFhm-D!DIBnx1deWA-JxRDGDKx|b z*F7CVd}NjxDbVH0;t!$+1X?7eNs~w*5}Zv0u&j|!&*lTA4kizb0z;&h67XO>A8S&_ z>8GM2*zm`^Er2m9B)jAXGszqkmxt?Su>~JK0#F0DE(C@u`8vn~3mqu|UKNjr63C51 zQ*ucL$;>AaqN3xCHiPVO-(j2g5H(hr8KMSg9N5{%Tf2Dw`u=49Ua`M?WhuC^@pO0p z5#&Ik`AeFc5J;iF%t4B%5x88u1-^Iws zilF9TuKJsGirhR5&m1cf(w8Au-)mE=vrux-YS4)9O%gvOH#GZrW8>m-e0i;X-3$*G zi;m0l0ZDyUC)G18%|tU5Zg?pAP(919Mw|cCS(kIgMqo`$M6cPQ`$pN$kfQT@J+1ND zFVD}Cq^oxa^LBEoaZi7g-AK@DU~2{PxVjbel>D4e@N_i>(|)VZ;hRNl+}1RWl}n5} z7gVakn;{M?494q2kdbu@5V(4-uAasLKq&fpi~txBgy;BCEK>tv4pFsuv=KPMmjQne zDF}J0kej-A6Vx0XN<;u%W5v`%<-Acod zf0B9okKg`GMHl89sr~yqLOXTc4#_M5_Pb-Rv~&Gf!-Yu?t3R;T)oQ8&s8~nm!^q34 ze&>VX7|Gy1cXV)E>+Doo*c06FZmr7r=h=4u@8U^V_}u@3f(xLq%p&lYPult8)MxPl zB7Ajc01(HTHcb9sMEa67aU>c;@}Vnp#NyX;#rXZ#-iTIhys-}O`^D^`>~hwGYu8+1 zh(ZQB11ue98GZqyL5$>pNv1bjRF}ed4k|UP_4VI+=>Ylxk+Gso$*T-lUK=UeLOjIQ zJ(U`yX%iFjVBh&^b7#*ww^@uYarS9wYTNebK`{aOwhN5vc#G0$$Ssl%-yGlw18J~n zu!wC5L(Odz-l;-N#F3Ra;67Qfap${@MbuNQX69^B))pEEx}U)jrW{q!7#92-Q7eHp zzQl{D7{Q`Mp1>l<7QmO{qvFM}u$s!Q`z4v2nA_$%l3nNA258p>uXyqo5P-7dUa_03%# zP?2KCeWb3~lc06~coqq&=BCjeC*u-&yeo&rZl@i>+XEPW@Bd?%j5fd<2-XfElXH%)*Frca?>ljnWuC+D@YA0*)tw>HqpE{%5+q(tH^3 zN4qWa{b1pAY5jmY7RvqJ2zKjo7W(x7<5j@doqfAxS=i4U_6HAZJOoX>C%-TtawHS4 zg9OfiW2FK7A-RvCeOVS_o>lrUC zUn$O_`%{9@X~f24+-fw2L=Q<`asUv**ee)s(e~)2yBJ+!d_#Z#=H~uaNI48!?Ko@| zUZR3=L{gG9Y&v9Gvt#J$3c&D+jrAe+iAJiFKCx-rhG<$}JhoQ=D(!>iwmbfv8cn}I zjgsKeCGI{s7wud*PdnxUt2a)%&wcJQ=gzZM264atF0?|NV#&^o<+Lhobxu})9dKfh z`&j6pZ#5b1%yH1|^;ik1FxnpDvi@BXnH+mrn&*4RA71nJfa&jVSIVEo9_D#|dp5S_ ziC{2pwVQtv%6~qnm!pKrmY!3NlbC6SaxKdRI%%yewQ^zV6CKOGfi@XUcKoUt4%@-$ z?0}`j!d6U7Xjk-Tw>R?SL!ruJFO(Zhc=f|g3mJK!%B)K`--7#^zPaeF?InHXS zHlC8dH$Ds1zTEb9#Q*63>g>pgN%}XZ<&ca9=KpE|HoPvbcCXuwpck~Cqrc<%Y`mD? z!`&*S&%SUxg=js2dmg1<`}1Ja@nWE-E>yF(vu&(KPiOyN~1~~5Ae}7eYu{m*G9LnS?ni(s*2|dR|M%dhP z(%A0z$U(Dcq-E5~j-1=R>87R))|X!!9sZI#&;6y-_4J|}pL4vAJ#!m21lAW=B63`B z-N=e*F*-lvAA2$p!f%3nEx8U|s;Fm8e0Vq*_U<-dqv@z;yk@nlXm?n>`2*@3_sm^% z^Q~4>xL~e9Qae;JG)*XVRDSqP!NVj{?;tf1>#?!FWk^sTAf5Apj2Z`vgyCG09!3&D z>ClOM#*P<8S#+)3du36ODSJfvySdTL7w%uxABw(W#C|!7Mv0J(2>F*TqH(4>C*y)6 zN)(xq38DUe4Ky<|A)@+EJC|+^tz0U-I{~-Lz0O%K3%711sH45TomUj5W`f$IGO_HA}7?qkidTjRC@xD*#qMX0{yX{FnqaoWxB3q{Tq%q!EvFE%y z`7J;G%ACR-cbT6%@mJ(;R`$wc!c+e4E(2D7v#0Pb!y0Ylm(}j}X=U&@>*u=@vR8o1 zw7$oK$IFG3RV?LNa#0JLPNYl^wzq^Nm1GFDr|X63z)rvUV2np82FX>(sNCnDnmx`_ z-M%DTippV9Q)t!C>@iC{-)=dYl-#&pnwXBl+|2$iH(wgI2I-M71|Sti^yRE=e_gNY z_)j!x6(#&Q{gfHofM>t@k%ArNLN9fI(QgsqpZ3%y5k9>9o@qyf+Ld!X{)D{{%BGx2EYaWgX zXp$SQ77z>fPi)#Hjs-eDAkmjikb@jJrk1`jqJou3l~w=O`1M-s z_3qe_Lgf3Fl$-n09sAo6d&ln4&FSjx@$TT@^8Um1bDl^XWTmFk5K!Pmw-xCrK*D1# z5fLy%6UxU*g711OjTeAynCwDQe3lOg;!AHZM-G3$C}E@e;|4x8IS4P(TIf-nRNfR6 z^16EHy`0$~6nl>Rq?emJ^s!@<7d*Hk`u_At*!}SM+(Kx3_&Bzy!tks#o1ORJ4T_w1 zbib~4`#$fzZoaR-L!||IAH8l4_VeCPdV2@8H(%abjNcG^n><`a?k765_o=_bE0yO_ zj+ZoiIUAJfm$votdb``%*?E1wKQ;Ra0_|jHDVN^g--Ca2S{pYR#>kc|xUW~d@%$9{ zVtWOgiyH9CgHiDFaddb5t#Ow3@d`6H_a>e4^r-cN^VuR@FLz>Z!lGT|=$Q!n;^N|4SNCRf&h-YgQc7YVxc~Lgb%h5# zA`I(DwaWh;Ek9iegTfo4_kzaA04^(4Z{6>=g z0+aruAv1Hgc$t{Fo`l%s@zkbDY(R%ZU=^|<$Bne4M!XiJg6aOzeDh9J3(wYuHl(ve ziZb{8Y;5paEPZchSf5WTb0X{cTDT{K#Undj$`cK*Mr@ymq^Gb3LDUeYsqdZ0`0`hX zBKX>CfQ(lha(xv)ZcKE_>0$JUP{IJ>t)^^AmSAubbs{QYhKAEKe1jC1ia-Gl15cAj zoJxF1OOq&MSj48a0l@89y)y{JYcz@=uE=?osycCWKL{R zhGbQY^8xCJe>_}WEG<2^a^ucZvYitD z{&?oAv6%e&x|Q8T7$rXYYN6!<_VVF`P3V24AVU)!>d{JA3N5+2#ltErEB=>`kXQ-9 z-~39`AWu~|A|Cbcp@U_MrM7SBpQn2W;OOX(EazAwTUkmpBb#hf3_3HGueBR~`#&WQ z8R~WWTt3aJv%$Rex=ybh4cRxQfK*KX$O7ptEU+&CDYpdjm_*^~w ztBHR*X<(lackgTmmA22CWdQv za{ja=eU5hH`%G5{S6lAs?*-jX+1L~;)U~NwMPsjnpJswbUc;}G{~~ZyT|qLYplLzr zloYw0V&3m}6VM6RkgO8ttC2-4B-vAGhD^qtNLq=K(2$ubC@k*uEZ3vz^hE`oDjKk3 z!Ih(IZMdnOth?w|YF$ckY!xf^KBxk*cI@)Htj71xfa~RN&@E#y{M7A#r--V|bkhE| zvy((Fybp{RcJn>&gsN62*~b+dB1~s_0MqxrU$Wb)?J{Mh8?&e2HN+eGe1ocBvkcob zV-x!1T!V|`V8t&Tr&1eAl#|mATm(~+JO%(|@&RbY)iH`qjgle40SI5SF)x^>JA{XR zk?#=+C;i!8YlS#IZy#&DLLlSOu{ z^Z1du1B8uGTBdP7-Vl7%I6HYElk4aiz| z=*F&P7gITS!kNFi$@B?kYni`F^{d$i7t0}fCKupKeE~_%#kLpDp_-3yqc9FkPZzfe zUKlQW|97fD>**Ha;b`pjEuU$EDo^{H7yss*Jh#7|CyB&Z^u(u%ti2(8b5$d?HHMLP zSC-+R2BP31x{g}GX(9*G z0xVD&R1W`f@GHAivZY-dIq20OcvS&mgste~%XCy|Nfa5t>;J0HHAVx*txhfd{Lk=* z5iQNR;^8JM>I5!;hMTsugpfZH5f@HacTeLW}DS)v3+gnN8Cu6gh9zfN<*S7x8gsR?*>^n31jW_Zq9 z6BBY=)K#DK?9`!x#($5{c(?mUloXDu@*c@MOIy*3=kMg21dpcoScn)zuu59(2f_TD zDLL3Vf#)b`L_7uV%F|Gl zc-zM2PyRU6Ft&U7S_HMBX(vBHU#;1nIVkn^RAcOWdpomTG-Bc9{!-ns9~K%+)++)BR3& zk%a@tGLdrO{7gx&#rOeCkk_j*>2%J-WWbGARrB+Sz@#`0FV8yHZYb&;JPInmO3sX2 z8MMTI*q%l7ettHX|HtydjaOJ*Eph-Oax8=13KG_j7ax`_sVC%~-Pwqh z;P_T3WGe?&YF=_B!C6+yiK3IhtDBlF%_5WQ5t``C-R?*0gT=_pl5NLGGnk@oU-$Qb zjFd4+b}GWQY#_n_p`1fN@C4^UE~$@~2k7{v{e+|hz|Uio71n&?2$8j*>}tz*s671< z8IYqh^AA(PE4OEuIo?|}37loe_{j)Br>zk+T%c>QOg26fEPpU1Tqi_HH zye95wKEwPz)WI-ArQCX1ca)z_N(Hk6IF$QRjO3zi0&j@-3RygS-~HQFi<*eW4EGqkxA)vHJ?;XZV|Lu^SkWSRCxU_zVZ zEvgxv<&roGfwUu16irMZjzsySl!%Os@cZ9zsc6#)(}J`^C%A|b8)(0lBN8W=uqy(^ zx!^76typJ_q{X2-#u0WMQWO}tJS@lsYtI`BAvjzp-^|+VXUJ=*Q&~q@`N29#Wvoth zP6BPqou;1C6a1XjX6EHg$*xT+Dkjj}llymP2kh_Z?tE2ijnWiciRF!#A60M_(_53O zFdvFAJ+4_lXHdR33Jyz>L92J6SpLG`?d|Q*JPXcNE>*MdJevrZCMPGiuA7I%&$M@) zwlk)#xOW<`iM=nEGBNP@JY4irc0EGuRu5f+B6Lrn>rhMkOB%bsx4@%iJ!{-~4w?RD zUS3|RN)3vV#v@10-rVQ2kwqq1_c$^l!Jb&um0RutP;4EI1uY!*g5swjlZbpc>4+$# zLQ$Qx;%gyT`4%9`w=o@is#y&BQmX}Pr9zY7ZrN`k!^hcqoqlfqj(!4mMqQpRGi>oH z7=}J+gjDlh&{0ZB#6BGNRSc;Iabi_ zKS7%)RxZr9H=iSHid@CFtD1O8B;QX_wMI>t=l*|A$X!oK@b5~{7b)!aASl&pQZV(@ zdh_#53?Zzb66up{YmT))UJBUq#HJUjjHM|q7=Zf1vT_m*YP0l(*<>amxM}d}hXvn1 z{eV^QSLT z*&7f4dX=+mg0DN)1B`266*s+m%50T!nCOb)XoTT3%`D~QQSARkkR|@TfMB_)?Yc|gpJ4sFiNsJdqDVhYt^$PP?a)8X`7*TXtQ7sXqwSX}2bSBak zAjE&@pJ2g%BFktos2M@jMMz(Bd}aXXb>jo!*FN6yOPmNBjrRKH{%fK5&71)DF+|tX zQ)@8Q6?nK}H+u7>L`)35G6=&R>5lY7T>96&6@hti;o|$^;nhdDHUInmF6%54eq*)_ z*#0u&9L~O@m)kM_I>fI}P}5hMnAnOV{cXDge9Sj2ybZt5U+5YEq-de1#>9Q-apP6F zsQh_0jbIsRb6Q##xH$V-AQK}j41OLhqb>guvdUmV8Gr{i{+H+n*DYI^jX0vOVqZhh z+g)#~ey9z6!~0rag3^r;Lo|T}Z&KV2jq*q&p}ORtV+z3%$EK0)SMzaU@cduHfrST; zwjLX6U0rcWwpcY~hi4-o7R!N0WV39bW`o1=>gCV(XUg--#UB+2GNjo!ARJufyRaCfEuyhn zyctD&BBIY&a2eP{KUaDxlk{A;ZmP$|_Ko=mmOR{WbX&gEVMrHb0wEDPN63I)=Sk|| zjMmO}{l?Q9sx|MjS$gsF4WGa4goq4?$V!3gqmzO(+;*_?@^F79uVlD_yf8NQZwqr( z`Q}BGX37OG##chg7Ar#Ul@?34j*>lH+6?9=ETEq2Mld^OS(gV#{IR17`-W_S@@mSp zkK_C4aSLH7R72#Gq#+_~>~nR~V9jpydU8EwHCy8EZ-o5>QSQucc|081h}L!ta#Z%a z(y)UJE_LXz?$r9hy5rykS_+qg)Q8m2BF?9DBR zEk_FOdKjt6wCcpbXz;c};U3`#;z$Aa46x^?ST)b2L{nOL5Jr%x?>e2C8G+&`_9Y(FY6m>$G369d-qQ2-!94u3x zZm-!>upp$VD2-5eN`_ecMY&W3<9LcvL+s($+xv4k(t z)5E4pR(}$~=NQVrXg)a8KM9DG9_Wbykm`;U(C%H*W z_5{ch0QSWtX+vl=i%$^(Z1bZEM+pMk1|Ap_@C161sG{(sI;B&%Xm6Y`GQWE917nlX zc9|3g05g~S!GF`2SpPNpTkAXj``>Q=`A)dwo`irFvJq3tqb6L5-}l`tg=@tkOYW_v z!tc$TWgS;PKwz@?KOd&|nEuL3eS@8|g9~WnG?tb|rKtJDjm7_4(L|O`5?*14>X0L# zcNxGxoPWAP+b13zlEbLAOs3QCCTk+E2VDDg4D~Vc;&S}mc0-!1y zNSH&-Sy1|xY1weZ_y65Rc_K9r(BEZKyu0T#DSA$yj*-D?S*nfoOrHw0GfabN)^47vkvI|EuG}z7@xttGQMk;_-C{>o{fh(2x^k7*UU`vG)4Ipv) z79cegjIshZ7quR&$E8t^rZ@L2JDv}qGLf8oY?qjMTmP)ei>+A|B#0%!M{CaQqQ_c7 zgbxycDVenQI|q{G-uNO`xIXTDXkM;=isYX*IhUUvm!@T>gX|U?T4j?(F+q|%OeFV2 zyv^JT)VZnDFHsVtb!QMQgY~ZJ4N>7$9hbF^;fo593kEQjRYp(1@I;M1_bELd<^+9kiCM^I4GoYRKEK|Zp<^|nJ!EL2gNILA)~2v zxi5V5vLa@~E}0RVuB5-ef7z!mf-sHn)OMmb_{fzH+<-Uh+}1dHs=}sHQ1X|>^Mh)|-c$QFL1C629% z+x|O}Quk6{L$uZq0|7VV5bH!vzSsi(n+zX^6mZLI$+-P9JUPRLtx&p_eF_!=X@LkJ zj?9I0om{MJ3NfIEt!i=8=aKZZBcS*@OWTY4=SjObeE&?0zOPQE1Lwb{{IPuBjr)X-xxT2g#*`m@UbYzGR~WOrZ!f<1Z5b3|k1|q@eOoI$WhCh;N?(p+;iH-) zNRbeSfx9SLbb1UA2odtDGo>>Stf~g`OKBeDe*qEwp>ZGlTBr_D>qcGSK^yM7Vk=**ZS{f;kDJpxj-h)-(7U+6ZFa1=7!)6 z@3E)|uwj+f*lfe~V{b1c)-Xzm`xcyIPD6;^ou{I$*K)epyi!-psGhQ6WY29xu5 zbaaaOI44(P0Q`QAOXl_9ZfK;Y3Z>h49skizV}@ZaTbJ+M(@1CXM>pTEQZmW9uWvUZ zcb-DapJ%A+JpvmXlw-@An)2>T<8zX=H0Ft@E&j>`Vq)QEO^yqD*poOO2Y@1`P*) z7NQ0QRz%3l$e?EgM*kdMg5ukd!X(-DgJMFO(7mG2&->**K(F8G){Wp=hnN#;_s}a^K-uo+26jr#(34Ana63R zK(X2660T&Os>5>(`?!LVAWJnf=VnuL%p5o)u?sBJ^GA{rla9i$3BQfq*a~JCV%xUd zbVvaS$o}aA8Hn4__gQ$2O_ekl_tR7;BPc|kHAQWP3y6=olB1bo$kLsYBjBp4Xk-4p zl!l9OGFmFL6bNEI$fsl=(bMbyQ;g1Y6KHJ;ODGHc%~(`d(Oh*$u^rZ#Cvp1yc4r>y zIEfNZ&~^JB{Ot#v(?tJ{mDqdl-~9#m_ut^bubhJqxQfK5@fIUAfZe%H|L41`8o%rK zXUyCe6-jX}#kX)0i-Db*&a|p;dtS5_oNfcL-+FLG++hE&7T{~Pul8wS__>_FlDV`M z6`V>4O(sXl96=h*2Sz^yylv757!083ZaQ&opkyLhZGGSPveO_BTNoMa%P;dWooO%+ zQJJPuKh*emsIYAZPqx{1{}&xgtnsk8!trvc zFhq(Z-XivB&L2jfh2vhtFAifiYDnw)(@ndM(?Lni0*gFVO*7B{VUhzholikd@4`iI zK)`P$+0$oiVj_u$%K>N38-_#Jjjap;QiB4isF)LgR2qpNj|B91V6k9%HR-T5Wq7Fo z_;WGLNI~?fdz~P9U6(L233RwXEW_bcZboeCK*~>4c${M}jIx<7Y3)BZh5y_VXI&gk zJo3MLUfxwmt3A09Hcm<_=9a0PLq+vd<-0P z4O^`kfw7FMjhDDJ;j^88J2}d+q$$?Kd|pPJ8ninUPLJsot;aPN-2@Y}Jt88+VM^4U zHPGSF=Fl>*6B8m)4iGGcKb4t`2WD$<7gwE^7ce8~)>SVd2ln@BJ3f>~NT-g^LEn5; z|C}&ph`Jy`B^55#C!Cp>C_y?n7e%6MkF{pI;Wo$-1Y#CrON^aJ?3aJs8{R%}>gXUq zbYUB}-h3&`jDChM39OCUEsmu19MN^gbJu-J=`=4*Mb8c-iJ2^*8^xJUu({{8?+J?M z%n4+PEJcFI==1$kPGtaeE+Ar9QrnEb(I!^SlNBTik``y<9*m)c0ZO+bQ9~@nMaqH*{0z9bgp|k)LO#Zag z3ivdG}8cwO7~n@F8=1DKebiwmRz%6aR}u zmPunSsRGX%U^Y=V7*V?xkC;QUnORVGxP)k}LK;lV-_6(*y)8=`L}~=Y=$i)B0&79G zRB+@J73N7!z|AncFR)ElADGkQB1*qrt0IounE=q`UXV-=gFOC^=pz2;A^hr8 z<=~~eyZMcVAP~ZY)?@^P|2P^?J+H3Wiy^sg+Y zd|VtX%YA4X1+*&E1tWI+Qy<0J4%1^o7$jdAcLq@?ByxNgEmQDR{{R*zjvE$0RvVOX z9s5}gj~}#sPR)Q7n8Lx36a!)|EKI;Hkxx>s4@}4dreQAA(gTr@QZ+_r6qV}#S(x}P zMsrbTMNL(0iuv5Cyze`{U;DdOHhftRA<4;`n{|CiF}MKt7f5KgK?-fFbr>YsG}TO; zG1MZ5IeXrnKqXzNIwvp#>U1{lH~r7?axNiyj?*H zRcOUtuk&6TJD@N|v(=Jyg;Ya#H-Cm=d|W%!_%!?YSd8p@rePrL&TwCn->Bz7=(}Q< z*;%6OTa)z51F6xdN~WorSsH7e?D?=VDV^-Pv3yDVi2{7C)HhQg_A#5{9C5lD!}a@( zfF=e@4*3LRxiJ=nPLxh_vSYgpp~4qEtbAY&mjws(q>9~uKQsihXbI@)%QPJti0jd; zkL@8(4=RW3fcxFKS@tV`(Eo_Y$ZB^VU!H4SwcBrKAw=7WY0pM3aQ+BG668_&iJ8g0 z>YnX;-gqkng^n_ew)qOBC2#R}+9gTwmKMTu)7>6{%^_b{pFrz+$lN&+Bt}zWz&VvD z)X*w?CwPE%vfLvTEd7Zx4nhC$MJ|E<0>Sqs^P^cQXa8j%nyMn4JDgbaCHF5&JAL%A zgBro4Iv^Gp`-eOp(nQR%Z`xS-sn8g84_2Y6{4mNVnNW-vdbsKkIrW(~U0}3ZNV>;& zvi@gMb>>lM+l_dg!A$rw0ONhL>#ZQpDSP2Kt^1Wwo_z6Rg@AVCo?(M{YXN^-(+5h1 zd-vJ>GYik>qz2^5f z9;pG$lYrA33;E1irPzEF1X*FU(%3tAH=ljg9Y|9)K39)^PXG)Zw6jeSB`%*HP-r!X zXn|#^uvpYVNIfT3p%x?+j@9Pru_Wjr-esmBNwx-)g^rUDyq>^)mZb zWb^I#;S-Ue>~!P|IvE#DukYs~!ia#vBo~sHp|B%3ODY;PS%(0{sNBO$g3KXqe>3EPkHQQLrhlO)|cCrm^d$s%Oj_q#|4MjK4~2+RQsK7h(*gouOaf2iQ~h@ z+*42fa+|&KBgtqGV6dW+KqBmoo5i$_q5O0e7r0NywZ-HWK|C zegry}x|OV@@~P%6Xo0l14W0d?!jkfaLV|*A0%AY1<1jEcx_m!?8V+3@9narhpEE7$ zS`XT*zwAvu-nQqQku#^?PwL`B^mb65##+CJ7o<*8@xJaZ7gx{G;mXi%!I&TuWfT^q zCngq@1jtnjaR80QzN~FOw`@L4Cma|3($5wht38+{`P)&J$}+L#nsWdwINU^ zxNp0UtVXw=(tr#SI={QSqu3CZ2)5pYvZU?#Wvyuo^ zs=84`Gr39XL}Fx@r2_^ekO71 zBa;BHng%@Y)=bVWAIdB5(Lj?E+sW{QY4{9B5}pZBD1lVJT~u4aOgH>TmYpWE15|__ zdjzu{Ei7sRq1ob&-uMOtsP>fODfRk>@)ZfcS8GQE_|wd*H#Rmu*b! zv4bJrcc_Z?@^1(H$0d>5`v6o*B)6AzZ%>fv&(>BGmnpy7%*j(cyYPmar>_vfOtJ7 zNG%jIA=@HEinx4Kl0bg!vlra|uZmI&44FA}B(=8G<~%W+>76u={V_5uvi3mJi>M1z zD}z{#2W}D7oB`5u0i|U6W`<3Co>=fP&-yTgKTeUNy8MZe=DMJ9b5%66u!c+$<3`>0 zC@Z3Kz!Gy{F}2zJJlIXrw2tuOlY+zjaD~W5=TE@R1GCc z27xHdLV22CndOf5-2A5fvFm1)+2ytCIbp5ZVj*D>`$dP%+iWM_=CcN#jlAraIfK~w zfyz5S` z`DymKy4fO8K}FD)u>cb9=qf!}KhW{DUnfT%wG}1?y+x)XaA{bWDb6^A1bq#=M`H9d z9OO0F@*dn`(B63{46FN(|2`SNa85Q(w(UA`8Eea~wQL(F+s4AlwpI(vtCqE8FT1<{eO))6ejk0G zeBRgl{o+XunncIjp_}+24ZwUsTd~EVY;LR?#&R1wG`fKs6%`B{jx@Mfqp*D>jf9Ja_%>&hETauhu zX6Ci4LML5|nf1s+LY|BnxaDd3+P*|^EbnHgyhZLKC%-Z z1X+YllF|M4Pg*SS=pkV zS1GS5+bG!2^79fHAzAjZ1JZFMKff2S%WtJC<61nKYxHL7|3*8 zvm&)2cPGk|oDFmIh&UF7v5h|;561R;vxml;$T(1$nSIPg|!hB*D^L{p&-$k5C6C*|2{7C#)>-;yjW6wLEc z5;7z>@wK_V3c(vNCpD-lZlhG`Bq)U$94(2L#QR^;f4z;l0}Wro+ObwTwv@SeuSy>e zHU`@qRjrGT$e`mE{PssgzS8e13TkZy+LNlm6i#0WwAbeoY5Zm4><}X68{+K4HI;M- za<5c_*Dbvcnbq8IWNPPDF1xR$meMdhNf;?%HnsOSjxs%3+(rHQ>(|)Bi-U5WCj=^Y zUx}>zXZ`!zoNy7ph2AO_nx?{$3JO8{UkC!o>p7x5*eaJ1S*7?0YzjZ%mcGZ%@TYEViPfjEB=Vu}y*;bkx5y+`+$xWhU$>v=iqYk771O>((dn!sfaR-`t|udUtgT)Je_<;91u2_0*~YD z`!eiXTW|2d4cBI59(`VDC-GmnUqRxqV9s{+sKp?STP`nE@Uc(TYeWKG99d9o!y?80 zEYQHUP3&{Yx(KMcU2(!U{hFX*r(?9BvEyM$nnwPxV9NNDy zfD;0w{xx&2&##535YkDR8z18Zyh4$NUi< zL_Knr%$_5#DgLxGoexH+NPEU0nU0xUwji|y#Mg$l+sA$o{pC=lT2lFQuRrDAH+vkC z_pE2)8ERofISYV1|4;~CAP^x0E-A&-K-1^-IDj}jPaT;e{A&nm*{+Wx?+S;*zoNYJ z84Hv9RD05FxRT&(p3zvV3fM&Gb}1O95ptQVtQ}Jew0{U zh&95Ajh=6PHV+#!63*r$fKD1P`Cf-}1T(8I8GL{H{!>=`IaB{A42^2j?azA(9+|@= zV`F}Nf8xwj&GPOQ5SU~30pzZLbXwmH{aVZ~|3B%TF*Ezl4%@xl2l@)4?2wKQ{QVd z@669Ky!%DDKPxaLg`B#5y_%`KB57aWpv6xm$rR#8q(E*JJ){7r!0fs`dH!?5GCCGC z?0mh|8;GR;&^~LyY64iZA$yx9m4P)bU2(peS7tt7at;6 znPLpz&VGDQj3V33jTWs}_^*yyU0^%f{`VjzWt3qIdKX(xsp{;k`r27uZjB;{0FNje zveT~s#Z#f@$-1D@!2TmKqc)R}IHrv41Dd=qo{V)wL{b7E(kPe!fK4U7>1VY^daiN1 z>}UIAV)s3uq|XbI=7(+94pnEcpRv&H#h1>4bH5mb58#e|1V9?uss(RiBxe6;1AQgz zOYBSI@hraa>k7wu-`k$==F4DY;A7}t?^9rD3Qz63wDGGyHg(vG!iuD8@E7u&@M;b> zZ)(E-zUZF~84qXQP7Si%buiB;_W2npJ5HW=$F)hI$a@a(uugA@yvZ$=%NmF%Qi_Yc zY((QL+2~66Twd=}%-3b`;d1SC%7jJnxcMg+vmg7c2>5H_pi36gN8p-Sxdf?R zPRdKtyTC0GH&P>XK+qL}>~<2#g&fm;*-A9%r~#ZpPB!2iTWbsttuza!O4Lk2cwPLs z+W}YHlCp!)x_#e`$cM4dt9KeT$Jw@;IfuJuTshN;4PQQ{9BMBdb>^#-y9NylG}vUdoDH$gCyf1Fla%M#%Q;kr zQfsTCB1KmA^dm2-n4LY}m_JbO`SR;s;8~yFbL89j*Q>whJ%K)Wxh#lcj!(@6oxLkU zh{m$>+B#`jT1rzLCs?R}a%=0UUo|f>(iK0GyT8(Tu$8wehA?Hh8aU0;cNws+wAR3E zh4acRROV8?d`<_0nL3K4hu*ip4~l3(8j`^nAAWZ_VQ&a#pQi;s4!(R5Lfcul5OyD^ zl2S53z40?j|Hh$Yj!X;2K7arulcLCJNWCT9t-xir8f+wt@ZPm>cq-hJOB32If4hl< zy->50OQ8UZFwuhvfJ>=YaEhymFlulv77D^h%<7M5B?CVeXOf>xJJdLmPY}fL z$c#o^2%)go^EASkpK1kKZi;<>OE8fIZ2#xE>2sGi7c(yLe48*e&0*E#{gL_`UKK2n zym8^;xq%hFJYzhQr7V_I_xn1@7Xzo&upt(etyBFST4M5UOMAwAd`r%ZQN3e(kksNj zrqRE*Mezv-vcV7Z4+TI*uN(K)G)~OG1|~Cs&uJyQL%)r&qa^XsK%8^vP#c+PT>#ey zTN8R>Jt{=WF&!=TQ#-(C-hGX|$&+t_F&X5_E^Or{qQLQ4pgJa?Dg6V;=Df0*n9RdrokmPj0t4qA@LznVeo&q?dE|XzC#wA6P3L1SuNWrKv zoYm4m#vJjrM;}m`C;w*}LulASvfNqw{pM?O-Ee%} z)|P(MA`pe=?h>6uGL%cx`FJx?EQ$XyjFngYrz*LRC6~kbq8APce8B)PaYQQ(^CUup zDq2@tYLu5&6-yL@)J8yPo+McAz~;_>(yiW5o9u;9K=3=Ke?*tqYmL1|1WS2ujx&$L z@MJq2p2M*5u~pv<8mS2ql5Ao(wF9JvgO99{{IWeR27WdoqvJ60nNA`ZEt_PiBAWn! zq~OJ;oMUpF;SfqoHU!bhf|6xbDnv_GLM+)UW*>b;GiXw;z|Sv~l!5{Mr_O8~FD2)VIihonR$?yN~vKT=4X3 z=YD*MN6|7PQTc;F!{ZFVk^+>{l&*=;P*kho8dc`IOEC~G{@f~-M-W*z_)nx#l*;|` z`QZWOd{W}E-uu$)Bc8F>aZSR>PH6e$AqiXRd0+ee;nlbZ_AOrvfx#l(4dY5HJo7Lk z`?4K>ImyD}C)FUKAMtB=S+hbkk;q^x=xDWaXbKWHn3>xW_O7HZpO8b6{B8#>hr+Ta z>1YeCpfml-jo&}fDxUPydYz;34ha8f{agfJX_YXM=_Xzf^K<#($Fe1^mZ)&2yNi#W zj=PSI#PjSG(Ni(9S?2jU+v4=yt=04tVNnH!BrAS!^e=?MJIl>Zbs&$@rifF6e#TSV zx6hu2u%j*dZ>=hw-H5soM>Dx2OYkACQsj3@xz{6$&4Z5rM+?wKk=l0ld>z?0J+LYC zYF25T!4dFxAS2NJX5bvL&uf3ulcInoG)@r|M zC6<@EK4*R9^R7qZKvyGS=OCcg-bjW$ZoyTbi&z+|$>`{)EV2>&2f0>W8EHtB;Z#88 zlEu%{UKrB&GWNNXuYh8L0p&^7Py_#{(d9%?8wm&o5e~dN3+fp5a)tM0xQN)n(b*)z zW`yV_Kqwjh5LJw+9jb$4{rJ42JO$5oHc$r*F&J~67t4b->o>c<(kvH9Lla*IY_*SB zc={-1A@*|`Q@I$RPT-106>fHZu{A|H*;U|s`cTqD7!xj-5XN4=TRM@+JLc06%k@Qb z|6uX0D)6$#_+>Svr%~(Sbn|7S@80-rIug5JlD-X6Sj$kg@GJascb}mLHusdwRMG>l z3J$B99M`?oZDI<_PBP=Z${q+6)z5`hW}{V9z@VtqP}H54j+zz^*tqV(QlR_WTQFsC z*Y(q^nudEhFA4K-jmA(!fTOM{Aq}58mn?1rt3D?JAJ1UT*E|?j2I@T3uBMWJ<6Crr zB}0+SnELFfx~nDB1PTLK6n+*?T1KZYX@H}y|H3==brFO-6f=@w-c;J1MglLHK5mf0 ze^N?h^mbLHD^l`g#jH<-T=&@oi;`YToZr12t{-q0@3{s+&KCm!%wHA7uh3Im+9av7xLrLpQgT!8)q{s&YrYdiC=csV?CuCtmCQ4~ATqR!1@9 zkQ3!1xM30(3Kaj)u4q~ZH0HmN#DPi5|1F4q24Tj!+8QZl z&LS=hP!70J?Zu9pXFixSA5R9~S*^w9I3qBw#ZKdCjh3NAL@)pT#3TQ2cQ4%jFQJ?3 zGdX-r#2|)4j(y;AgNz=zs&Coi(-$RP`V>rf3ybUEI3ZvyLCg}LyUx=X*<(6L-PbK# z=seN1#qZz!-`ztdDQR9>Zb-P)pPXsO;*~pp#{VGN$7; zW3bYFq%qfTG35BDW(%r;x$ISq(&^&LNE=fjS)iP78}URgHRLbBn>I;2hWrs@TH|b zwkp(q^+hQ~Cr?hr<#+UF$gqYCxPr`MhJp<6W=6PS;Z7*)w#W`tWjX-By>xZ8u?GqklFi}nZ$|i zEQAVfz`nW)T+$K>gc~7^{wkp97j@eLY7lTpTZt`t@x~Hz5AR z&lzWY>{++(CQkj&+qJ}N4B_-tc}hq0{EY>TcMy35UV!u$mm3ze?KHoW(??7yYj!) zC1IihwAIJGl@BZcPRt_jEZt-zyH44!7*cSq{`ua-wkGJIks&1g!zEbrE>B`HRP%WD z*6zKXPLpf5c{W8DP#~6bzqc`w!$ziCkrjP*Uj|f^`}%NacBDcKCn|{~q;gzCM%S^k z$Ik2d5{b-$G5rg1$v%94CU>U(F-@@LsL7;Jxs}oevBd}_Z&PY=2+k!?1*)I`L%+{j z%nrq;bM5_(L)Xd%0wuw4y5fYc$EgVy1;r6k0qu1ER?~aT_4l?oCrvGoF=3^7I~B8N zaN98RX3RM!NukRe130|aCS(s>c{u(c>(|A1ZP1%z zi}6Tua+$21)!geg0;g1nco4~LG5BUQ(k1edndWV+V9*9nDn^EpC>l<*v6s4*wQ(-``W)utrlck=U9s*xC+Oayib~MJP;llzmwe zf$)NeJ})nqQUH_k%zu~89iB{j_Fl~Gb9|guEklm~6n@romG&6t*v#+A1pe~fNNOgO zN~8yo3WzNAi{j6BUjDh&frraKNiSOhTYtpT6Rxa+^jZwWH$^7T9Z%?8Ms-lx7VW<2VgnyXK67OqS#RW#Jm zS>=BRdT6YavY`g6t-ICmk{Z-OK)=m4!$C0vipjl@C3IRh-y)~z2IKEOXa@4zA^%~Z zzhv8B8wNX7*gN0d_SE_Ber0>~@8UVnFOYbeToiv(+i%?w_{Q+SNy1!M3@c7DoOBG5cw(y!LA^zT zMCh8*)t&tNp0+inyN&nY+f>FXgWZncI#_$RaS?64_v2s^jT1&{!q|4X7_{7C6Z%zR z9!qAR^@-%&!0Jj#>iVDe8ly9c4;5gaNsC0i$niJBbbjK`h_dqJ@_#0Q_m|%TcfV~s z$nbq26-EG2fe1%Z7`QTM)Zjr} ztyWo$%UFpjU3wm?y%{WsWX7V%=NFXBHf<&5mTS(fv<;&bn!y9r4!L1?6t`Pm0hSM1 zxIRTL?Q!|+f_S)j9Dw2f`_REGbmDn^j5vkR$6^x6fjRkAI%0?NSmj9ATAGN(iKvOF zigJg=ABtUi2~gqLiGgE5x!4N5R)fAozq*la@<$%sQWj4v=vEkxdxmj*8WMwoedwkjd1;wDjxDtgXDQ-V7Fp7D)Xyk5MjR7#CL>{CyB>9m2`XGwDOQB1G`^}Fx*-`b16 z=D>`9lbPq#isP5xAZLK5=w&aw!GQHnb6y>q@-Fy_BLEuEi~#neOz?YL?O*V0K9Lz}5W)8i-$f(#XgoS?A)teLG0Rnr<$Cs9n@Cp!u$? z@$c}E<7Qa=(IUk>c0s-}K;&!IIOBvVrO%fs)iafkZ_foUfBWw4`m&S@GwHdwG&3IA z39825{w%)D_C1B3iw3TxPleuuz0w`St%ObV84RCj*GF7Lg-61TE;vrvo!>4a9uGfew!xRrr+gjeq|3!Un3;w=?&Sa%FTRe$Xj88s00i5t$M1!LA? z7=$@bvy&w3U=<>%8;FHaPpv*sYqKxsBDKd%O$8%G{I6q24x)gm2)E>P%ZCVPqRpOw zwx>Y)`33*OLZT#gTSiq-aluH+0;3DlDOeR3O2TvMsoAk!dW13S8@w@GIM5|0Md(;7m+Ls?KS94`+7J(yRR$J_ z8HsYqM*qt8c7pn2D)%KypjJo^vrjCs>YAFDq#rC<~8Pcs`Y9oR0CwJgi$iVW7KZqP1Lw}m`=egzSiwCO4gHXpj zeicHAh?A(V@y^8VFT0svub%?dgPOi`_zDGFt%p7tYhqR&XXQF@TzXx?OTweTeuV~y zqY+-|K{nnD^~LY7d+Be;zmit@qaw%1AC66XEtGgyh@r?I^pC=MH`j*ywpqPxkruq= z-Q_RK&XwQiY`$us7(YC&AHoc!=B;|#TO`bnCE)?!_gYEl%zNS0-0N0W$2D!AAU=W-K6tjVc)S4J%-Y$X4e9DkBud| zyqw*<4jA0|^3DoT23bdReWJQy!NVu~Rxi-ZmY0qhB_^(`*Vo?ceB<036<@!nTb~v^ zPd4vf1A}28`mL-Ea*+GUd#ITkY$diE*@JyJbCSI0&fU=WoP&dd>NZ6kasTd)xmcVs zTjm0guBnOd1dI-X%6|Unjw$&7+v~Lv52^ZjQ6WhJIaW}hg6B`I3pJ-M=D~%~f%#6& z3*s+9#_wPG{PICb^v7vQ{+ShgJY*5vq7-uI~X zs?lY@f(t~}H4+yyEHEmYpRF1H`-I*5_+$D_BH?XlbTFRg1&cRmF)<`#{bqP-r;4JR zV?=Z-9(NKslgLth4ThyoKJdFI4BW7atn%BPT4oRY zCO{FOB&>^Fr}UoD-df^We>^-YI~Q@nKG8{neO9Z_>F+3VA(f<0juRs6Iz#Q!$RuUV z1vK(VZ^X9pHQ1NH1LcOyKVZ%{7mPo;68UpQl3I2A&!hPKp+ zbi3o;&mKy{;$HjfcxcHKIydXnDignAQuh0vUMXK*Jo~Pv-%`3ZeJ^LvU#=g7FFS>L zwj_nc7#Vy`JCA;|oU(BiS3pDXWQ!Dwt1-l0v*@`vs_;EHk&#SzN}Q9S7)HIq2Yc%C z9tMJK{OS7I9tP^l%`~W7q?O71yd11mT;APX+y~k&XcC{~s)7NV-K;+v0-2ug2TfZ;mXujjQPbBWRFS&UbRQt@!nFLui3D03R zaqG!{NzgR_#b#?VBTD$d_W(%ZmBdqw&;%eD?q~)Vo{tV(yhWV!!L14M`lIQNL;O{v zaGq33(+ty2R;RyWYBG%oa1D&v;<>AXp{H$VH+9_anM4C%=**+3DaHJ7#t$}$rU5h} zf=gZP?WyxZ#_^aaOHfMUED$Ht$);H6-Q?LH|K4YlIv9aMWL@Cd#SMpPyXBGMfF`z| zf5d-OphP!%G{#Sv^cRoUC_fIdoyA*To{m+!3);shM!$(a^@=?J7LjYivO%Fm)JW$s z{U^a8j%Se=cIA)1(i&eQzoEEvt74#^wj!S!RUgb6=#@E%tM-kP;DOE_3tn zqsV}ymp~ffW-7F#AR+*3fint0nZ4^pErm|w?+mVT0F27^>;kA5OC=pj+M^h4vzM8? z@;CyntfG0lLIiq73x6Vo;-{rqMj%L85rV<2CdbBKd8C_dvwbgR3k+rI^yC-lId9FA+ zjW4svRdicXL%7hY$B6HkQ4x?+<~;SDFQVJmL8zNDPycsco7(wLRIl_~r3_CDeDfIW}1#k0W~3GXX2UjDvu|@T-CqBea3_58-Cd)l`?` zbrt>-Ivi*Xr zushoj8Utg?GUVcPM6-EuTgrFwjPg*m6a-OI8jQ%Nt^Hm`qP0Dp6@80FX%*@*BiSk6 zZd+Y{l~SB##G~9Fhi=M%jm-}UU31sz`RN8&g3@cZJ^s^`<-p0rdUlk7aQ}TikRK0j zD>(^RoO%r67a7#?Q5#oIa^_dV?fO^>1JL&Z;S_Zih&D^+!hw#g zTq-Pm3MmG^Bu@38M3`yfW`Rt{YA??U*{x-_G003c(ssU>O;LkzFz=D04x^e?2p8=Q zT3%qMUF=3+!&^Y%^;l-9GV_{q5!rC+|dFQEeXi_|No$ zyZT}Oq2PZY^LJkEf1j&9jOga10Gnp)CMg+Pnq$r!4lKmw=l__}PLvi6HEpRGXxpPl zsS~LYEV$sP%P=~vt1L1nbMzcYCYBAD?5V1eQx<8TMeIxHhXn{=P&2q zp|Q`r0=&n{iJHeG2W>)k4I_{nBNmh4ZeNtv&B{eelatOD$sc|E!(T zsYMmyqbVc}F_&jf*2L40UmjN*FE){D+G#)Oa%ar7g~tWA6LDg1<(-K0v|qh+{GMTzfl<}e#Z4Np4>x`pB#%)>g-K@ z1tXQhz@`xZ2yMA645OF2!|Us6>$#r#dKLZg0y=2CIF@;Qq0{m4mp3BSzN@gcc(odR z3Xyp%R{>M`T%~L6ac9{VK);AQs>u=Rz&sC+saR#6r`eyV(5u{{a&@9&lAvH3`5}>3 zq6p?AGJxRuq@+$FIxQmkuU`|zK>%T^1O;2BVWN7*ah%yl@uY9Hjw&sTAFPzdis^$@ zRroX(+o~2|r=7cpkB5KD3Cm-w$T_AnaGb>prf>J($$-~c`2@NjF5l%xnwFo_D{DU< zms9#{r@FQI#D#`pB|hA5oC<7ozU(}Fo-6A;CTxU-_&T3u8cXB0KD0RL99}eP4VOpFuh%TJ^=#TJBId}~ zlh8LX{z<;oSZ4Y$I#pQ_mFd(g6JaKZr^l&z_ht}AET0Upza*?R1JyzM*BG})G}rmP zJr_r@bIwUpH_@}N+}%*O!)B=j`f@9=;Qz5K1NC`LFY*vc)~{VFGmOnAh~UPjgV(jg zkD=HrGj|j{ZxKHDHWrICda7EI@K)Nix4m7068_Ib%GxOUqGW7eqJYYoqrMr7B0MhP zR@wyN<_0zCqiX?!)gtz*;YQserGf)d52dEjE@ z?3>5S3IPH;v7!gz zSc39o(;aySkbg{F%>jT&m~zZNCF99bV^(7$l;gC6EGp1#YzlL{#eYsK^R(B8`p*_# z6AQA4424w#Ns9f^;sDSf;5t@{Yf6VO4wg;f2*zG6uQVE!l^H$qn2STaCtGQlCqQWnvD%;h`x)>gMGKdt1@kKk~SkhWOj3E7RP3 zm{T|bpm8yB1@Tyr{rwFm5P)PeSfmE>0cRnyz@=A!lk z)MqC^A?EN3V~CR&$=iv_wdVRC;v~`fQTYuiAU{qY1arc&uBe>J{|Y10PHCE2%doJL z@_p6(OLDvCyFdNL%TL(tnQ&_)67aI$HB>gFkd4DdkMEVmVQagR1u>H+YwjqWleg>( zSEQ1y&je41Sm*yHPzsk(QKektC?ctbl z3d+ZlxBDJSmtu}?ZvnkUxBiI(v3vN;V1tj2B*~|ZH%Z)oq#+R{gfy8aZYeGqE+y9+ zr~NZdI}QKH9O4@TONc<=XkwbttwqfIG3}>bmdwst888i1*|ObUw;EISp@n8PYO;{L zJx6jfRPrKTvH$%_92lu}zgq6JFVoARPup3-J;kpP|36xQCSuf2Q+3+3$RAFXvO{D( zr|E1~cedUv&<@kra(v&Rf@OLLU45rQXEp;dLRl;?+iYGruwiuvuN+QS=hdtYm^yqK z_+~z`T6c2;=s5@*!w-HvMvIn6C5pbUgN%QO8Ro{!Iz%NT1j>wlWa=8yu=>t@A&w4c zv3nZE``O4E4gQv@LVUK_SD+~@BBIYqV71p{4W|DYQUFd3mHoxsi8}x?51Jse^qx$-S~9EK#5Djwb=f9*#Mx+`rYtH`UiUZ?XC?1E}SLXK>9yn#orr^0~KDK~DG z*pOmYwW$Jezx&6R#dB@nfAR@uI&jv2%B)mTCi0MN8%k&$dgoiI%yVn%8{Wu6#%!2| zHfQSR5>&ExveQg6gO+}qmR$~W0HTv-;ib9W>&U4C04bdQHTmI}slVP8>=LzrPzE#gUDMtn4JiP&)okfHTV_Ig zi?PF{L2*@qzh8_8@Z84ZmJS44$3`s*QF8^PkrA$yDJ6V+yqyN7RG?aU!nRYwO-ly1Lk_xGnin(+U7brKfJOikODbm&{7QDmKEjk+z45}^ao zU*!9nOhXde9UEU%F6$jD2VRZPt&b?A1TEVSy5wVSOQWnm^|SHN3< zvvGd%ng~d+kwr_&{k>3jEFfj@%*{U^>luNhvCR3JK(Y%K5-cSOKu$y^q@D4bA6TE8 z9M0{J_^j6cuW*WiX!64-G91Wq$S;Nius@MC%Wc_&6S0QXuN#Gjb{fOIRX@t@~~Lc zv99;ue0~fHiWvROxcVO=774u>sD&=Z4m~77m9f}+oH%TF(3vXd4bEZ@K8Q+qRL%jw zBs&A8RZvCk_m;6J8y)iz8N?>BHcy3q<*#{r?aFJzI}at#)~($Ek5_# z^0FEhT2ZEYIPinQw}x}okLe-hTiiJ!QLKw!B^3&nMZ~_+{XTX#T$GoWXZkibH}}JA zyJz|?iM)KChr5ZPz8JO5aZ|c1HH@e+;awU9lY~rp%eYJ^q>{QLh{+D4)uYiPYUr3D z0X}l!rn#Sps1H-&DPi;fE3(hFblrQW4nH43iGm?Cv?^$3N3?tl)9it_uO-+Ufj+lp zE$ud`2CHoV`d_51Atkk6%aMAY&hiFV3ks&H4*f`eHp;{qV&{1(u;a}Shgs;rBV9WA zoo{U%%TJ3(tLgeje{%MEa=kkzJNMo1BrwwpxK6p#oFDYu)Fbfo4wwy=Tt?AX%Uu@} zhCD`re|FEH?#oWa6}Ca`R$|?BQ%QWz}?*C5TZMB};v3e!0B-8!7SBej6an)aT{r_%Wl2 zTN$2^o>5WLdVTJvZ`n@X{iCH2Q~6bAzE15m1TYL8RS07QbA5{`kC`Kk zaeSM_?z>A#ka#a4m1c42jqdXXy`9SU{bRv)c=;*tHvEoKQ~KTG8Fl%i-HQZX+ehD@ zt+$<>oWK38>$%-Ixm10x+}eKh?us4;ymI7WB?>VkG!|~f6z9%ICtmiT@Nk0PLuO?V z!KHSbVKTtKXD(YTGt-j9+5oWj_-&SuIjUQEacfd=VxM3N3+Bv>hYO9sGB&BKRDKtu zO)6JXjUxj_QzU;P}-^aaGaDXFR6rDs+E_fLu9GGw5m;LH<6{J27a5( zO-8PM)$!IN_1wwOv~uVV`@aXJI1SKrAK0><$G@ScusmmbAV>;eB>6rp1LyMo50F2$ zDWe*qZWtP|Gk8(}q|soyutGWL^7SX48{YFcs%S{WR6q68zr-X93`3Sun3SU3lnY+YJq6;F8zx<0is1E3Fd&{=S)QN597n) zp;lMR!tBIMx4AbcaS{hN~YT;e=b{kU&!W>$q1_Yn_bf<5o6Yz(&2@pVPyQr zS|zSX!Yiv=!8F8o^Pl3^N-QzqNGOWukF@)LYA0jUe%6xV!YLt3D8rSKF@>e@T-ni} zAX~ny#Shu?W3HQ#kN1%00HLHugicX$3r&l_Y%l??(i0Fvu(p;B4!#b|I$ zoVfN~UJqM6?kGz_KG+!;DkF1-s*RfX@G|4h$?0bEczichv!&CoI#x=M#2~7Ifo9ZR z)PNp6a>`A;I^B&Y#va!xt~M}Y5LLF1e8eb3c?txA_nOD^<>Ay(@u#N;00gm5)aSWw z$sVb~RvGV+0`0mP%stVZ*?N$fSrr5P&}0OCEq1>MrzL! z59n1)*<1-i^n%HD|8Ot0>c&Q!s-dWWl~yq!p)rgQ6vy5#R)&i;i!6#!Sy>e^FT1uH z5B>3R>homMzw@9`#89*l>d$tIp7H11SHJa-Tm7G}4|kWn#VQ%x$<29nXp?E-iWs96 z4TqMvb(wAqtEk&yu$cGmvqNd9;*u|tf?_mt;uUfQIDHv$2oWOQ4#Xfv^Jjz-B@y-W zW!R#g$zqm-9%pSCbpVqzTpjgaVhr4-80ZMMvd_or1C$9LyOIK-cqo5q{+tF5r? z`=Uc8)|&Ga1Kk8))?T_Cd-<)?U8WN5zx;X#2+sgTXE120e$|m(*#69@D62jMi5r^9f}QmbthRNVUALQBI;OW` zqPhOv-@HzCErKU??|@NlD+B-l2rc%D*S2zhXN-|Z;@mI)CblYZOOlnslM-&lee&mY zB>rrne;x|bUh4e=h|-U!b8ZJjzz+*)DcGl8TQ1M@ubZwBkBrxQW0UUSlH!UZd??)b z1cyI&WD(3|HV~hy7{Xf40G8%Cd=md*0SjjVXlSR+h)ib_&2`tFO<-gBb5XNvd#`hj zZwyV}T0M>2^!)uh*mJnCaeZ)a(x_`brT_`%0($XI$W^pN@9BL6B`SW{8``{o;dmR_ zd_3!Wd%1hvDW5KAU4JMRtN5w#)c4XeE?<8B@^g{0+kZcAgdwJG)A#raW#sMLGvGo5 zo3g_?;cfePL7?~YTPV2u{&N5AesCo4;xBdqI~%DSqaYGW83nJE+T^S@YVh!UXjRH2 zKs`ts6Mxj#IDK~%cdTA#>X{Qvizsb@2sQ~JyGjiI`Vhl}08dII7fLpg_`#c;vQGhE z)p+ALao_J0>0aWo{0CDXYhaJ`J&d5FRWZ@en=T$o6kkdGK-54D*-{`QvRBl>fJk9N zr0|kIz1qKeel_XD41V0 zNpRpV==+x^Q~Qqqq?mnrnV6KUXphygM1vg%`O#Laej zlD2lJ$QW{{-zy}kJ2a#4h}wUWqe&y4^72E`%6&~_E5$w`D#TjRD))S;%bw5_hY?8v z)X5p!R2x|}Q0fFM;89hV8(f8c#bhd?CNcUhVn-YEfFomzTmq8N_Ypb?kR}QlpxKaO zMaJ?rdij?zPa3iFExz+Uif^8b=%^F$0Ob5JL_F#yuh}qVbze%|J%*^Sp9(atLYf`x z8L`T2=yc_o=H32Lh`&(tk;Btj52wwcDRDadfJ30665?0K=hkGe(xl~8**2u?9)i|P zG7I`0zxuexkIK5MZ+PRcn-F2S-)g5#DDQ0TnBjmJOA+7t$Z6L zz|dKwg`RWJp^F!z%lv^1wIQ9Hc=CONu!ae%3CENcqWZr8)j%r009}maoU1AXjD*InN2)?7yw{XabJ}1RyH2`J zIuX+jSHKpEBX*Um{M47{4}X05{7LEo2+PV{E>_Q;Et|D}{(O0IanW|Ek2X8FeX&@c zE>8OnM4)L~(0*1B_M+?f=))&LbvCbY>Ro}iC)54gv%P~ER6cqk7YLn+fkZ?z^9I%Z zw;r6Go;_N;_~89>lOBmS4fmf}HgMaE^c{>C>0)P?@T~b5^G}_RVaxWTRMaDq#S9ltT`H`rm zU_eNSqJzCo_6OL)14Gcw~y|;ajV`7Fo}fr|Ficd!IEUxmDsuWzUS^S{VC_F%9?>H6bchDk%ZVy z!Psb0kV#a_D0MF=8QU~0w9!J^%Cyr;8)+qzwVBjX%QRS1EsA6}&=e_>07r?^&-_zFxchteUM-$S{Kx?yL^QbiugZS@s*E2$!o&Ufz2}}Gk0L$t=-&I@ z|L9XsU)erC8_lR{n!2i-sU#G6u|tKUC!~Vtvip%ag%}M;*+it*s*e81M<1VEnCv~W zHT}(h@tyD9_@2n^<$Shv?#jjK!R=dL_{ysve&pi&o;YM1O!Q*ZG1wfg0fY@zPO*|6{D#Y~b7!cdc$|b3m)sUUCQ*xw1-RU}f^<-93cCxwJsdmE#r^uB}NzwTzugQRGw=1Vj+QsPw z=Yu2mS>(gnI$LM!3{W^*e?54^kbDPsCOAki1TB%#dSYFy-phcQNn!|NXz$vt=S^@W za&l&52N~E=Ld>Wz{oG9n@B|J72Fsw&U)9zC$1o;jcz_Fege&>d2?TMHfmv)$L=jTP z1RK|VMdf69Coyrl<6mK#=1r+g5pje=_m+ERDoeOryjQcp8&$z&GO-R_<5 zhod>ctYmc?yhngi)kGIaC=>z`;!&M7^{OzJri#@zPwL$Da?%M>PQ8XnJ=(2zuY}ni zVl*&7n$}-Ly?u8%_;D;6MywrcBPlLX>)S z&9ow-5{L&PsTCf#!MeWR**+%{Qr9)3Q5Axzj+-XuEU{P>W=*ME&Y3JQrEZC)grjlq zC1K8U?g#HT^D0&+U6=Y!$StQJl5#JhDw>+Astj;d22$VE^{A@r{rz|2Y^$0e^=$~X zYerCj97<5QoA$05JQA64oRKsvW6**)5;X>sALDWxZ19Nygb>_4o2E9ST@rB!A`(JX zZ8gnwRL#cC(eW|InnDdt>&{a|#^Z5S1xwxA*RJJ0H}xclG{nN9swHc)^iRaZEIDP@ zETNgsrsvO(Sv17JF;sOEV$H$?cNZ3sAd9wROI02F7#C_x7A+NLI!zuJ8HB71&t|#r zqo-~;Ps`S_CQZRYtUyE(D<_Ioy}ftt_Q{>MU%!6yz5Us2Cnvi0_N}+xe6MPzDFjnK zo~Ql&oBMa~bg83iJa1Fm^|Q&WpKG7__Pl+sJK0j~Hgn@_tXIzMJ@?$MX+PVUHj^fB zj7-APuMEvZWVW^SUPqe9=G1-}EK9MH6aPb&T zIZ+t@)v3d!M|ps>|KQ$xAE)34{6@mYM0nl$t7_IPs${%Aw|+RK;uKg|(+W!8YPSB0 zHP-A7c3ZXjM&z(H8oQ=g-)F7z(431B$XJjL9}IkGgW!G&y75L#?V2ZbUuG>fW++>--$P6PA#ohOLWl~V%L#~?+6JS9t2hen4I@rz0jrpaP(oTX zB`2cX_bI0yxxn#c9Mor_dgju__g~o?(}Mcr*^WN>7(P=yn5~RzxUaX{o%Lw zzWB|zIELIFCFc&~VxmM6gxPK(Gz$mtK1@4h0>TCrKrRJjwq*U4?Y|-KeV^N|&pp^esK_0CqPC?N5vHgjm_clXVc`>-M3`XXm9$8Lc z-r3%|Ty0+r(><#=t13B@I2@LV;q1%?BGm*JA|n?ZOzOHIFRZ{_S z>MD`ZXfzMiV!jNszH}a@iAjYSYG%spu-?6cPnow-b;jda^LgYy6A|Xhkbvs1eDM)Z zrT9b5XKP9?QZ}``X!~qRyR*IR*>p0cSjA?deOo?@uIsw4J2^Qq&88XVb*M*Ut`WPF zV@Oa{031r=XAa8Qd&-j_qj59a8gK1PgE&`#1BW_Fj1tAo&6qhRO=db8k76B{8S`bT z11*n_w9C`+blJ6G6m&YRM96GDKTchr+MJeMY8RHeWnS!@+pe2gJ+rRwI8?4)HIvI% zpFDhT`R#9g@0D-AJ+60h0%xXd^ZD_7ktUO!ciy_z=K1AE&RsvexyZTM+O4-jEo0Yy z|LAaM=hEZNY?QM{JI)K|db#M9$0tn_>nch^b%<3}bAXE|k%K}NE?v2D^~$wtd+($L zmWwfBFv-s1BId51|58NYhl2(8eg8uk3im$VH|Y;t zb}r`A4W*#FHn=B*oW*2KI$K*C{Gb=SPVN}639}&wFkTvHg=$annCVtATnEf^?M-DsW8LM^wdQ1 z-ox>*&yL91SAj@C?bRJ=FLD1ueTd_0%G?w;NH-9OT!`SVi#BPWU=Vgy02R}@YW(z- z3m<#-(RBAZrGpPX_vF9+D?fel(z&XsyKcEy-maRes+#4pCt)HY5oRiPGAa1C1TdGm zGu$?OFyZcvRLOb|lstuV;bVW}1DqFM_(y-R9qZ|C^W7Wo@XpR7m(KMg{>qz2_4e^6 z9-XyauGIhj&p!T-zIEr1U%I`I`G5B7zxUt$onL(G&aFTA>No$bU;Nw)Ph9%Fuf6ou z*Hbk)*Ugs_g66C_hY&&xZiOuM;Hg#I2O!SosAkiuskGDp05gOr5(hzGFuM>3f)vTa za4KNsA_4&qJwK5ayc6zBNqzW?wfr_;Q2Q2 ziODQOwTP-ci~&H)J==teSF#h8yPR`jAQBN1I2a2FdqL1 zHI9-gp=K!?$TPGjHzIN;jxmUIC&#((x3;$WzGq^oYc&{50yT9I%CJ5Pg0Mo}vRf)v z*+C>Q+{{#$%e+UZg0NW?c{w)_u|x?~RaKg^YVTmTOfWZH%#Ui3i0Lt$AR6?33aaWe{4 z6AO942nJGTVnhi}q=_bz?W%5W-MV$-+U@y#355_t{q3$>E<1%bb+t8}jhp)9@bLKf z=L$6Rv;@M%N6)?Rk!Nnaeam`j7y9Uxb2o3jcjx%- z`K`ToZ(i5#_-8-;;)@@B_KUy&r*FM;XFRSB?%qCfBFodJxybG1(O8#@@rCK7**S^4 zJEiTN?cJT->CUVfPeW)pL=z~H6R9D)#iqLQ$lm$$v$x*3dvr3NFS>CRIrq9)*5_u- zs9c1AC~-VRaE_J72gds5W-ig0I6iO3zRUfGA zbnh`4kk~TBEV>+2=yjJEX*uolvF)11$ObEKC9)qD|_#IWIOG@ z@sNl&{{R3W07*naRMh3k&;9J@Uijd%)wbu9Qpy}cGub7gY}AaJ;u5qXBcSB@g4tGk z0}WxA11X}!Fk4n9((I6+mS{VC;4?4GZyx>bSN^;iZIksUZ6CUMwRcIT{*9Nfp}p|@ zGfyrKZ%h&X?sHE)U&*h(@%>xJ^51{ycmK=(_?P~tFZ}86{y+chBQL)2E1&uBb656$ zAcGr$jf{*84jIUSY%m#;shG&kU02eH2R`W%Yi;UOVkU}t zl$DE&h8%1k^g~Xo6lnr=YC>*I!am&lFvud@T@B^bP+~PtfI6}kSb>W0Avv=7h6n=L zUp|bjLew?WD1hP;&S&`<6lCmQc| zaW{tCr2YKfEBfx+GG9VXQI)8((s(ipflPZgfo4mY#3WWA0h=3x0g22Nv2Z0!(TuW5 zr-lm7OcVfCb9RG!&dHIrh)|sfWPLOaUR7jnOl39;g1IvB%KOZjsf=te_+qYkm%38v zr`7CCU6WgKH*$3|g9&VzIx{DUA;wtMBEn?kAlJYMff<%HtC_hKk1o$G+?gRDW)H%N zD5XwwVy+0rgw(YJR3YSU86~)zs!0fK%2fzCb(S-QNFcZoG;6kmNj(m+N?lu3!3COH z(H;cX9$fmiOvp~bY|4_AM=8HDA`Nm5^ka^G{6Tn+NZes7p2C2TG1_*SQW}rPU3QMO zz{(hTZU14}n1TVu;zUfuX3QKy$f^Z>7_KG?*|MsuDGQoWO@RQ1kh*0vS2c4F&JLD3 z=lIsE@4Wn-SM)f=5Zks>^FHVKVj&WVBuMLdKX<+6-c(&{CW_RDX{bm9#A*bvh`MvA zC^p@4E~9Gi@~*Ra&+Xg}Z!h=vZ*Rre9iP-{R~~!x>cySQyYSH^nvg|(18C) zMLIoTw!SG1xbHdFl>V|4uJ!4wGhv9mWhQ247GlQAXJG?4*f2+2&8|G*{2W z_K8V6+1mcrjpHzS=ck^$*!6t*LjBpT%a32W{LjDk(pL{}|C2v@>DT`Dr~c0`zx10f@<=ARz!TvI&nyQ&3$uk0YKp?KlUw3l^PSAFQhA)bMLH4$Gal$J8Bb zdxUBv+voeZox67@C)dON>-qSQO~Bci4V4ol29CkWv%3f(io?6bg0oj+MkT7M$sEj4 zgd>UcO33U+2F|cTm?a5rWVvUM2x~?#Xx5yvWz9xHq#??9>_jetU|=r?*;JCz|3QA*j}C*#S{d};3HwjNv;Q3DaXiwof1=bXAe3X6m?C`&mP))AS5 zhZ5Og#E6yj)-y{n##b}VWR{uy@Xpc6Nq_gw;*Ga%no?AB{c$yFdb3W+Mq77|PAnOr zZ|4h`&L-n_skGR?bZ+PT-fXrNrAnHQ+V<|4o-lJ$7YWW1o5s@4Xtvk|+LM;ZZ@hgt z9_?M;+Wy*KeD|qGpJ~&{jqktZX@6&S{u9q#P7?MWxis6IWnJ#=?b38oo1fd=I!-5j zcd`v>Mzhgm!Vwghst6Y+1Y&gqbC94p5z)Czd(XW8$*+Iw+Hu#Ss-&u~U3>HR)wixZ zb}3vwAH-M{A`)v&Z4>J*<-3Om{v$Xb{E)w;jaL7M@D%PdcU(2<&P6jnm=p>IOaaVJ zLWQkxdKRt71hye$SUWg8tnXW+v%Y$Om!GH2_=AEn0418Y$RV6~t&&(xc?tKviyw|& z+zYC$((yJT|9Bn9TDJPr^oP}*f>uWoG3@?t33Mfjoc_>sNu{D;5#%m48A-uSeW-(TM-#Zi=LX~^CFXrxGAdbf8FI^H5n6d=M;L9kCKnRQyTN4<8Ny-4C*iM#7 z#0H7PiEN!m<)rImDsuyoIy;oS(7&8m&25M>av}^s0!cv$*MypZ8g`mDIi#AdGeoR# zGYM>9a^u1fDjuT)odN7cin%ILir&GqyP0SAti^eek|JeIN}ZZ2l9@WPT2^-+?5~F_ zV6ce1-(AHw(S*Y1v2{Sx{mLUcLln-|**aTifWq1Om$j0X{AF=>p(+`84Rt?+%u8Sy zV!#|?0GSg^vKt%C-pw$5CV{Mt|l#wN0qp?4kzt{JE0@C)%A$@Y8AoQZJ`u~-dErED*3O}bGJ?We zb0zjDp>Y$-m&81N&A#jhKm`xl-rcTaopP8t;bWZ zs;urY1a@a6S0<{0a8`%8(5l54iXAc|0-1@srH)Lat7+2Qv!-A*H^wl6M@k18xjp$e|-T@|eB=5<|lU1raw4)^h7vOK!ec1fg=Q;RCW zbKf=1_~g*rz8{T7Dd%Yn)b|vEhhW4;lr@Jyq}-k?Yle15ixaPA=N3GUVCzppcZ<*% zjIHAox!dw)D_7^F{mv5Gb*mwa6FrqY2aAGz_eY0G*QO8Nk3cY`4Z8Jd%UXg)@2kw! znyQ&E`YOiY$-!k%d_buQoGF4y2-)&RA?U=q|`JNm~#-7 zPOYBof{}6y;TW66iKULe_r^Q7_V3=hbJ(d~xOAbe;_~pg9`EiS9>4X@yX_*4&8BFGv3=d|HPB|OJ5t`I0!rY z$4}8h>S+h7VrQHvF6KDe@1!7{p!<-Zdx98OAE!9oj~US#RG?G&0sKKkX>Bn`!^Tzq zn^~x69Eh0+ft?4Ef`Hf&EJTAC0cPwjo>|E=xe&=Jk-{-VoSs@b7Qr_SsI9@A)Mzjw z7*ZYx1)hKlTs1S15LvIWs>uP70g#}AJ^G3O#zRQ3KLlGKI57s-S*XJ@oZ-5XxhsfR zYKcPRFoac(@#cMs20&rWVIStj<&D`ev{k3d%PnH)9nCC|!8n_mTGoP=QjkcNE5Wpq zK(?G8FIDpRyg)0;BhEEaB)j9`D&D&kumACUlQ1XC@ok>YRVH{KLt!o<*Z_TR7=)=!Ewg2v`|HnVI35M_kZm_IzQh1 zi{Jm^uI4ZNvoBx2edpi#>8tJJ(!1|m|J;ig`{m&`-@5%<->S|(|LTA8%TM39{(*n+ zdtckSwEds{ou7T*lY9Tg|M*+4+zOetfCb6YOY3~^u4TT21kEAPsIIEZPh9N1lOX0w z^fDb;<+tW}VnbHsqUi*=N+je`UZ`6^ zQqI=dI$LM!3{W^*KL#6t3A(0II~%R}{;RThAjV>I=(BR!_VN@iAf-a%p(blsDT?kbMlMu0K-#SMkf-8{%?BtfKRVb2?=TZ`|_dp_aK*#76UE$b! z;XbSk6*gQIhqBVv9N;xic$jOgDokah`VcWunGRL5RhfT$5X-+<98|?Hv7*Jms!+ z_hK{wK$scn*1PZByngM{BUg7WU1D;M0)Pt%l{uRSBBoGU4h%D&a_}=b+|)h0s+$&R zZ_at3XsETREm8)N5JQ~AW;~hHbwh;3{CL*&(LKiC+QI{hn1#vAR?O4E98N@g2idu^tEH4;-7vGM5=gUZ+gj>+^_|fU0&+_3nyZ%0)q#c; z9jcLGder@I6aSf-W=?N9-nM?Ps*IW&j8FZjSKq@%)AXa^4o+Z^zVBlQQh=> zt{@^7G1VwhP3H#(&8Ufj)Gf1*fbe<^4-OBlvnW+IYui5OKrAHOYhQ;7#9f>E z_UPsBym|fYn~USLShQX0x3_j~EZ!PVMv8^C39VfQ)49D9_t)RK*)ME5ijnl%Q^vXk16>>gt@FItItEby_Jv!!_IjcG@U%mL`Q%~f__CEbL zetKtT`{ej&JgUu{nyBy)VyxZiY6?+AKmja3>Hb$f^JV&2 zIuO;Zt;yq$KX&Kl!T#+#AA0er=U@Cl_~>`vd+!##I~rY_@kF_vAjF_G6VHzh4-XIB zotS>$hqb{j`GK3kX3YJ)oaBvp{yjW})#8%FNw(?vW`kMbdaAirJh<7)3y#;J_p5(av@YCtM$;*Xvd(9?=Y)4Nw}IcZ>AA3R z^oFEMCN7PX6Eh8(hkLH3hh0a08X`f1ts@bPtvs!j!Lq}MDN-m|x(@2Idd_`TGoFpA z+1_4bcDOudkTZ2eiE1}Lx_h_TI|_8XfAhG{xf#PcPdTNO%uRx1vp)6iJtzk8?Q#9= z)k`(n4?KJI6Q6jxt}9h_P)aEva4cLn9{N*r5Qema6&nN0IVUA^sR61AS zs&S}CAjt@!sh3cUCTJ`I zd?GyY+zVEZ`Mo!h4ym0V)B&rG#+Uec&L&wfK@+ zk$QlL5*1Y=IT!QJdz^6wI+%Hesv@hEWQP(J>9{A(aaD)VTJq-Z1NQ9q1U;Ny04w2} zKX4d_3w1-=dA82h**aTifWq1Ou>pl)jAZVs9EVNCAklp_=slt9%w&byX9eeH;$bM^ zI^1q8vnN7;GZPptOcE(AmtgO;4H1@;rO0-Mi zdf|u0Sm?{zwV~oWby$oC2tn1nkn2p@6SZx?VHK}F? zBuK+`T~~|aLndW*%}GF-QWd1oO9>Q0kPw(qDnAxMax>Lj;wM;B&Y4D4Jelj!-Gk9| z`|kd&3y*CfySiDI+z2cZ44jiBk#1^Jjm*BU49d?^_*0^7*M^b(C%lQ3&Qs0WuG`w$ zYP-&WAOmH0{UG9CEDAJ}5iBhiCvdYc9gW6d213%z5o4*#WLn`8!e}y%O{3yQUe_a6 zIoMwu+&=CWscvG3HmFo^H+R@mQ)L+z4^_z!BhZipFT>hDlyz!+!Z5PYY{z;teq9!jO8q2}mgOmA! zB^1xQhvEeHZ9aYvMnG$Bz0(e?51Dhk zW^>1TLx{U zJV1!R>?pg$N}8~t3c5!twE9L@ia27h5B;V%j1U-V6qr<~IOt~}7@%Z;NJJILal;ADAXQf^3;%rs|pBd*DPTFG;dp1-oi zPhK2->?2Q)Mx*&+Q8zU)XUkzgjA#?Gaae)t*Nq|p90C)2h$N9UcdG3wQD!N|JLC<$0r!YN9^gV_3Qumi?4j^JFk87t6Mm^ zv^$-(^yQadxx$O5AG`S0fxdP9<}dx+C!V-=^Uwa|)!+Edum0k%eCFpr_V}-V;qbry zpTG2<{|7(+uYLBjF>Zh1rEkCd+702cZHf{$yICiapjn@J;RB<|Rq#16IAly1j>4^zTf`T%kBkv3e)nV-z}7mMoncz%31yZTI3oo5c_APEL!E6&>vWP-z$9K}N0 zEt4x3lR(SlD&*O6&Yk6+V5MA4eV^enfu_EgDb_JmK~m}iSAls|R=T^XrkqoVV+k>J zeGDNm1z1ik+?dd{Z8NQe!31JJ*vTctl2XAUZYHHMBO*YvnxbDUn0z`OscF|Pm-Ca^ zY(z$EFtsAp)s#}RsPqZ+mPfad&Se_K!0b>nvi7fG^5ZLO(rlJZ&8$x;R5je4c-{P| zn}K4G_T*@9t9kB&&re6y^3ZPG-aj}#&Yc?Zs0y0Y)k@rn)KxWZLQ|P{ZV0jNdb_)S z5QX3O?A3bWP0iD~ww!Z2>DxR%@$2v1{o1wH?=I8rt|_y5)}e)1^o-#)l~`2)|y(NwqsN8$(;D&8CJA+k;bsGv zaQY);?qo)Q@nERHpdZu*(K_*AgRy{3smSJgUpXSIx}KF`1dNGf(5W+wg#q70xyyI5 z`OGW$WVkiRkbDa_6Nb4vQ}O+GVmNZi@gs+jgSdngIkQKCC%9yb=8emkC2-K3bIQH; zlW?MKwk3^X@T$qk<|H8yJoTNr6-rJtePVa^?D@&%N&du#pL+Dlc9+`_f)m=llOQGV z0!$89GZrBNl~1!k3`4E}I7Coz2_zMfxe%0KV2MANp~<2yLEw(pPc9M>|st9-k9ceeZT<;$17*XwuEUCmc7?0xSqzFm#@4Ql4y(TCsv z^w(d%dH3dxUwYw*$E*0;fAo!)zV_%Z{LG8jU%hs4Jo@Lq{fEE$@BiHwp1-`k*ZijA z>#x6O6d!tOGuYHnS67~SN+h~s@&$@dM>#Jd#4R-bXh*#OHy}%t6LO#XWiOMs zb)Jx^JHYXN`^HONd3Eu{rB&z`6?c`9)6xVa&LDE{vkAqKDHd}(Ik5R5`b=CIMW8I%^kw zT6EblUo10^C*x7GySG#~cjDmeFckd^`8wW8VG7GIg=g0U&2S@!TPWpbx&Qzm07*na zRMOO$WnuJv0?cwE36t?yh|JVYO;v=YibOEiSjFPM=w1@=G%%T??=lxZGRs01L#V5& z>pNHoC6ChqqO2yN^hZw2Fb@)BHT^U*I4w?2#Cmdba}Lm))y%+Fq#8tG296^iY5z*w zzB#Er;!YvXa(YcMc5XvBG-&k`zi!FlA;z5Y(ed%tbe2-eDefaxotWqITieU!vg>-05QwW; ztR^|LWpEi{9%cl+}sM~x%jmWK?iVGwGf!t<|l3H z#!Wry(n%Pf-+uIRGD0>O7!>M;JbRBmB@}OX@DG|H-iK!1SLLrt`G=7d9yX%iq$iY- zJu`_A3rnD4GfQiFIj>R>e289ACoMiEj&*<}Z0$KftNaElh6gC-rDjDvvmrs)WMQA$ z51=52{P27ey7$jh`hff9*Zb|_%A3`qO{0xxabAZe@;XFt^ZC~=ZAh^!rue72i4r$h zyc>y(;ZCuLI}}Ag$Agz-$!RUi9C8>D52}oj-c{>)+8HJKN`F zG=a!;cXt%)=U#aKBcJ-vbTW(PU-|t%dFQpT-0zPU2QR+xR5w3b`uN(d1-0Hzy9anyL5i`_dfs0FZ`3QvQFN4@7?!5cQqg1{WpH@Q?I`Bn|E8K z2WmM2#M#VdPd>VPypZTaVkN*hkCF{MtJCM^H7Gu@Zft>C(qW|I$LM!3{W^* zf91|ZQS=U`RFn(Ft8mjr0WkA>Lmzx~hhujGiW?%^imtbQq(Ll9BsLz#8Y&0}vM%)8 z-sN;m^=Lj{NNy|AjGl~~hiY$QD6zI&G9q_MMC7Dw>ZNj^Ts)l#j3HT#9@HeS)0j7k z5_cr5pQYmLX>L4@toPD&n=-B{*eF$9t_TmG)*b8x4n4jeev9-B!-buzocN6l4&0(vy&!`Tw^&;$4e|a>x{z0 z>ItMF0Vqe9n+&wB>P|xi{5RY^)e5EqT7!8qY?P zS@w9+^7!rO_N2aXL&qMLYDOE6W^ygWK;v&Ahr$I_;rLsf=fBlb77 z0qPEy^>GzHnz}8nwpClyeA z=d8K+DC1EBxH!Yi91^P#BC&8$EK3Czmx@E>U?&4PJTYvgr?z`Wa)arI6PsD?+J3P} zIjdk1deu7c`K|WognUmtz|trfU|#={qV-(3)3-)9sXKc(!|YS~n}^qgHfMgHU_}fPw1}E?CfPBOaW4 z?&B!X;Iiv0(%O*N03Fhbj2r>bf;Pd8NtobZCuK4s#XxE^Z37^ci0}~l5QT+3=RWl* z^@QYsreSgO+jqwCpf(+e2~81C{y+BKB*?PsJQMqebMEwBX1*M%Dys@L0w4&204b6d zB~cQk9xS)RRH9zY@#ml4-n_8--s^XM@k=j%{rk6$X7M!X0CKJ* zAUyxdXGa&#A5G?#({S^DaH*LAHOtDBKHNZ6md>7iAFTKZ`;5G$GiWbCK%{(tFa$)l z#T29`NI7RF^tFt<*vpNG5&gw5)d9IWL z{D88-5cDCD$ChFMOKa}MoXGknAJCSAAc8(C0RVvsFN&%rNF7K=^-3|i&{{0QAChT=frzMFB-{}EUGF%Kna{H zv?$@hV~yg=A-F10*@0(bCIE8;N@N;h>}K8UFvtEmGL--^7$~4a))YhlSJyWNgW=8* zN{j$1n#9B#6jj-VSv;H#nxXtWh+oB>+t!plRWK?;L>yYN+an5RlkKbSiVl28767G?}E?_;7QyN-Jx3-}_*V zn-p3wb~Pe3%B3qRWRkcyo4iM~qWZ9%enjVfMZ1ptHUT@BqppDt77F=(Ue!C3|8#?( zlRp3U6NX2*)k;aq!m)RUM@P)ewB+?`-^!^HKvfja-MkLaP9}TJpe`5==a0EqdHJQA zzwm{ZzW4ptlgT(CqbD|IA_itmoe9LU^xK!tIS|GGY8>7E{`B#K**kAPzH?_%H|LrL zE}h%j*ce?M)yh__HY=l*OBY7NhKJrN61G%1?&@+d8q}M9+;+`ib!GD$W}|Y`MVG{e zj+hwDOdPqYXu!C1MKh|S#1OiuiJi;42pM^1Bo;G724({*%bLg;^qhD=1QmdsIIs*d zB!ClPBw$F^wJFZx%CJ$ewu_^xkS>CnubVWPcPUjN>9i9~Ks;D!yf3;gS>fyy1A4(7 zIbox)z*T$Qa_-)H`@&wOb=+Z`G-HP+tvdTX5VNNsLH1@OLM8%2!fcN~$3X1z`sR=W zJ5G+&JeNfPqP#V!>cZ0=z%HZklYZ)|i(PvuSX=Dq);CdT#t1zd zkB}4ykS!bN86k0Q^9*t*0Oj;UOBPMl2tm=JiYHbwEQq)f>MmcnG<);SJLAVk2O8RB zA^_sD2ZbUaF$198+}gN#Zhdo=o`3d|L7dK0Js6^)sm1UYt6jnw@JL3=E`(Oq zIGZ0N)rIax5r9n%6so}spZy$_b-O>wLOFySVt|SO04aMAhpXOH$2(Nh36mCG2S#Ysm2 zWT_FbY`JZaGm?ND`GQ;lXbN5HMbH3!;VVw0 z1hRR4WTf}*?jJnbx%1XLYipz7~Z1?-+$_?K|s~)H7GR!thPCyPUAQo9Po7*WOGyupzH@|&~R`p+dMudPS=GcoU z0J8G{kf2{Vy`Tor3{=T+&4p{zOqs=oiXnKVLS0Dz<}beT{H4`z{qT)fKR7ZiQ~;Tr z15euDa6!8ODL9laxfs_`|TsRHH{ z5@2?OOvF7w$rrs1VRmUnrxp#s@>N#KwG&DQ6!Kv`WPofFL zfCNa|+sGnk{55a7_z?<1P&mAwWbQ{l!Nxb zh@k<2qEY@~5s$Nqz@+!E&k+fW@o{#WJZ=TqgBk*$8i6pV5heowU;?)OftN91T4Z0C z3KA&-se-C!M~Hg|MP^I&FHva3tCQoD^o(NuWhLiy|qmnY-BgCD;3 z{yY1xy!hoWe(r^bAHI5cWBc2G^3KD1dpFnY+_{yjH?P0(!QDT26Myx3y0GT%9UO95 zK6iybc>m4O@Rb`E20wZTKlt&7&%XT1wT<();{EOQ(a!$SQJbVc(HS$7xE5)6`O2qW z`TWk_xHCv0<>*5uU@|5^v<8eBJ*#72Gy+{D!WaP%W^V#R=<hCnpS77w6(P9$c>Mj|j3un3?C(w``DqLVFEqkTpyEKxU8g)GcM zqU@VMY+3#QYG^=+NnK_P0Wu#yz?P#PGwwk%=m|}W&<8sXo9Y3I z6A~Z*H8zYu3BbVI)7&%9>a5P{tj++1v--<}45ufh0Du}Y>);quK(rq3=YAdwpniaa zObq0ZIcGK_JUO=~42BNOBW-axa{jv5q_Z9EX4W23ICL^)h^|<{Jck39pX`PyIW;3w zhp2`sXq;qmj?L$2GchrjU8p=xJMN;cmE;WXJ+y8HqG-s@JUJ0ni2!J#5Ie&JVd~O6 ziGZmo7;`^#GeR_EuSQ+ac^gIXkG}Qot5ImIMCQe0s&A&U}6(gGf7EeOevZ44sT$P!~n>b zelQ&F?d_Eto9uiD-MpQf3YapZWpuy{0hox1O%j?ib4n2r*|`MTw!yI@MDIN_TdEs0qwGOkhq7-JeXsSsP5yvi?*?c-n3T08OuC7kTOsA}HmvIs z8COPwdRV!_X$mfNijqu3MTn_vnr4N(7lA=jRl_w`RtP96xFEA+3xM7XJ`)Vf6|+{B>kTb zl6-2^=u&{NL^qD-|JjvJRaG+%1&NrmgW(h3Cvy%!G*b`=voq~-@`+F9QR8W!{!fx_ zmLD%A4|Z&pY19+nKKWI6BIE)3>2M}~FS{(u`~%B#-X2W=%8WT(DBNrj0gxRk`zEWu za6|y^MC@-LG0NG|A$OrU&H}_#MUl)Iji=)-v<*e1R5!(NbyzpEb{+uCxnkZa0(rt= zQCvHJZhh6RJu|v-)*chM_>ElSN`5B#Q>|LVso^X z_7A5)fhbEBTCB{)FMi?rGwbogyLSdyfCnOAro#Ku_uKY{S7vaGp1~0!vPWY`07gpy z4$bxR07UG^0JIz+obVwSx22h?nM!XB(gC$bYN`ezDJiIdAc{f~jfPQ8)Ph1VCkjcu z0vnJiARm~48VH~o8i0@1q|DVM1yUmb?1%vsG?J+k1&c}y><#++j{qFu1PO>V1MMlP zh$-Y863F170RRYPbai290?T0s^h%MuFmhPz0yBdJ%&}M`nVA4NQs;O)bXI3|R%dkv zD4f+_3!JcE&@GR2q-i;QA|N0#BtU-RRO#wrKAWjRQk5hKz)z0t!83>@H4$z$AG_K_Ho3 zOxgjEnNNaAOrioPQb&XcnAx^!fan(|5$ZLV0H!VSCYBeN<_cE?&jBhN&m#U@U;p0V z*$9+0f{C(P3KTo&f&oH3Osq7S^R&aLh5)lU?2R8y=a)Y9+|`#pCF6Y_AkK~4fL0pn zq8;tWmE@tT_5#F~%`_QGK%&&P7UzUS#017F7H1Uai@Y`v1tbQZZ#6%e|&k#*Dr4-dvp&HcQyPd=RW@D4k00c~&BS0-Yn-ZWw z5|xxyIWa~qQdZBiBQp_^loGS+y3RS5J1gfMaqof;W~!p54gr~v9kDqsECCxGjwce6 zu|9shla$J$P_@p2X96QMM^uP%>e@j(l(=8HZ7_p0E=)RXI(e(@{>7m9HD6tag#!o} z{0&M~4Gl<*@zw{ozw+GWo!38j_5bP27~Y?jY|_SzTjk01ZZ z8!=*(8Wb2=37DCYn8^{U_l0wt>!VA?YBZm>^U#LWsz_04RThO$+8&0vN$O_plwE=B zjJz*uU)M#`B!vRG8LkvnBZk@A%(QO+vO7S&YV26N)2NV9!zc#G1)?tu*hJaMf?l7) z5gD@p8W2D*Pp`8hK%V|B8r1CW-xHC|KzmI<4DsmjFod|-YcE+JfCxXac|PTf2KGcg+cLQBSdjITRm~@z6yP}b;Dl?g0RYk> zD>sX)dLse_6)?jEA0rEr6p;~gcp^Nhv&a)o=)t8-(IFyLCCXWw|4MgZ@3!9)vrk&p zEW{7Ci0OUe8s_$ADGDKA0}=&Az--8mC)7p97cjR~l&S1F>%+5gaUOD&T+PUp+us?se`*?pG zLiC6S^SE9#<7x6~^&8*%;CpZX_bV5+_S>Dc(e@Aj?1PO_GauhwDXD7K-hX&6&BtbV znJ1ST9bdox-Z+fbaY*6v#m)7L=YR11xBLV?zIE@bU-{Jb<@5jSfBxFF8<$_ae(9ro zub*v1xY8+FA~a_9Oo)ig9ZvyrE-6qZ z9*QI5Orbm>02n+e2FR+z(>ej+j34F1XHnG{IYvxsA;u6Tq$COt+d)j)1qo4tN>G`o zjTJ+Z5DA4LL5kJ^s8Iq+Kngwq8g)j&&IUd!`yCrkfw12fJtX?^l}6+{35F%q&O3pp@{ zb9TH!z5%xhRRfFJAy=Loa4ek%%Y(HO3P#nxcmh`KrR(olxta^h^BC) zLaJqUgL4c(k|+@oqUOjj0%YQ)?Rk#81TrJ-0viNth`2(^VNxg21Ux+ySzNb1`#hfj z6eSTRQh^jfIxs9*AR%H5k+L*`$jqkW zi7V>;y}jXZZE$|%ohL+XJ1rVl)Dt0rb!xs4eWh;X>#I~Jhwc+smuyE}lP1-kq@T2MM;M%9Ik$0QxgD-sc=C{88 z&dxyx&^Rs~x(GrS$Rd^$VqqUT5wlW9tmmdu!_V1kvAD@*p3 zQNg}+Wo6_FB6hy22Zoq}0P)FL`a;P^Xwpi*<0N-r)rvMN+M#+Md3@wF2|-KnSlZU zRX(8w)zHpdT^3CfLp2z#7(k3s$$hfRk(Apxw54mx zLF3%OjJw2-ABT_c+`WDK!Tm=&hwZ$nT$t`}pBsMpXI{E^`9eEBEJY%Oo%{Euld7<9u9} zL$T`N!~OlEebb}b(JYQjhDV2!Z|~gwhrj&k>y-;U|K>X%#)G5g)6e>0VYRz{^}?Y) z*x%dx=>G0YpWFJ4@|W)3+1)(9vC)*X!|we0Xgcra-Hee9OfkLmna_OTmFKq_H6ToA zTmwQj@y*f!lT@a`!qF%@GNB=h=3##K}i@DMJNf1*sl1Pw2L~6aTdFnbe^aa3L>nR?y z6KtV$P&>_9Kv=q^_5m7abyjC}R%d|1S^d>dHBUUDkEye+FaV^?mS;oElD}i%yZ6P) z&nQJz0KuQ|tWx&Q5<)}^YAEQy3TLGy5+SA9Z~zXfQDN4J%tfavGlf<(iA)QcX*yI5 z37onixEG0iHr_Kc5lJ#Oepe)kM%9=-y^J;ty#@kHU@gO(OhCOYPL7~p1i*3Orj3?k zFAUIcx%y`E4VSA1L(_B%EPWI=r zcNAjSdf}BzpMH5fnbl>XT{HkVn3DHUIw7`4yRfn==Nmp!k^o_C=^y~mINJ^rn z2|}lmz&j!WVgZ*m*-C^+?XPW8)Q!r)6^Z9%_nRZ=> zF|}Qo&0MuM9E?_1hAYSzLr^eRH$_2E`{}qlnzeuq$$xUypHhl_BIv;oa6z*_Y2Nr3 z(pZ+}?LE9p`Nb)K5z*4A@f7_*bEA?2SWQGx5LqQ@HosqLt)GH`EMql+7Bl>lz1y)7 ze}*Si`|uhwHN)QU4Ni?p`%QAu*Yw`{87=BfGxgYlBEQm}>Ag&dfD9<4?6_y3cfIfAEifwQJLR zfA;NRg~j^Hm7o3W`4?Y+(I8FB!MPV{u($oY-(Yn`3ey<1jcaw$xOGBIU4&GJ8SJ)Q zQ&nYA&u21=lID|H)T20G-)O9A?(EMtYrA^mxw{|U`r7yJ{GBhouwJz*zIgw^&h_o{ zhuzVQE9Wm?+=Mhew|=E-)58b5pZ?6HtJl|##fZ^^TN>fM|P0Gxp%u8@HN3IMbG-Yr}|`j0)1v(skE?!$ffBP6jHHAIO~lj=A$ zA=xbGICSGMn|68>-Cn3>(I#p$rMW;Wpd@OLj0Bx>EsU&MSn7=(mxBAl5F9ci(pk{MS)J8codF7G_16k1JaHOESHbbAjR1Qa##2u?Gs^kd zhC~2j24V(={E4|esgV<)JUTX~1WGLcnh|R6hB&u1L?Ew(N|p?gngK>gd)hsSX|8@i z%@*Qy09r;L#6Gs-7ZfM6R7sIER8zC4hlG9W(`xjFJ6@#RVT$Er;A(Ew3c%CQOo8UZj zrdwb5g0pJ%V2nI~I;8#1AGPQbY^|7M*c;nmXL^3UK01IDQ6gxN5CFl7($EVK7^tX7 z(j=^cSRgSF8#zU0W!8Y_2GQH=9TUf8PFmb+V%I5zk$20<QHT z2$J)zG&3e*Wy9EZgLGZ69ATOe5#7Q|2hIv7QKt9h!H4C2S6ySDKIgyQ*uDO zc!|BP7?FS!ftNW8fU*cx>-)ys!S>(Y`hUl$^ZA_E<-0{viYb_LE5j8)noK6q6rFdz zNo;^To_CLT50Vla0i;h}_D`Y%pOid2r6KsqP=YO|?LGHP>A00gRn3xwQ@Ij38#2Qt zeVMAFl4jBZp(?2w(J3#6%q*~Fgk?Xar_(>r@=uo`dHriN(*>Gs*~ym4jO=vWud0cfprT=KA*|XPCiLADWUIPtWv@LWBTF4j%u*(;Eu0j3G-AOQ z!JHETJ<$aLnGq2fkZ?gX7ZWvd>ck zH%eR#S0-Kj!*6`_(cwS;C;!<$-1^cljjA--+;E1E-+o-xv(=5Qx4!+`&9#?Hk9Y5l z*8qaZ{=wv6(iXlfy#o}IHb1q*ND_GGeOVt)V^A)K18jwm+$#*;MRiI~@!M_^&om@T0CXY5kG)I)YpP=tUO*)bu}LXUV>XLVL*bp|M$ z)nB?Y7x!c%fmKn%e7)SfYR$WKTFmlEWdsD9Fz zNGYoWj;XMKh9Q3|?Af^mA_5Ilu?GGMnsKHk_tIQko`2PRau>ji{Nfag;EfOvoT58d z)>jMrSq(eW-QP>{QE6+1ttK0TBd1X?xywSpPSON8!SOWQEmnkQ8lXwBW5-x z*omg#$qN$IoFlYI8d-yBB2q{bn+0>Vtqvjx&UUEn(0f-k>A{#fy;vLvJgW%2RjgRgz_``hc6u9X8Vcq{=5L2m?H z`9XIuOWoL1Jo$(LhNW8@ZN5MszW(~dw_h*qX1y_rW-^cF1T})RnmUOJ01C;ZMNJH- z2tv|vd$d1hLP>Exon%Rdn8cLYY19})dpKAfIKQq|7#T2ivD@5O*?U|#R~VQK24psf z-CpVpn&dai@}cbPIe%knX;75R1);X>w653KJ4JNffkkFlaFIgCzL|AL3USyBKfH6l z9*(%ESBFDPacfv}v;=9ocegIrxm}SiV3fl?f&5-$GU3u>}ZD-{9qk18hQlq z2&{&L0x5?T!YOe$;7_^N{gm_u)IRVmui$)=X7OpiCcOQydwVy2>BjYH=QS+YojX6; zSl{1$u-hFD6(mld-=hCJ#{D+N6pUAZre;XM-W;39!l{{4_RbNq8jx?0sBl(Qs|J(< zL!CDRLL_!f?6VUFI^&`NHIo)JF`9a(3aY@WWQialdt~o5NPwgW?2#EIfN2YkO;}nE zU}(Zl3I_zNgsLdWhKMB0VBAL~X0baZFj7?o5s4~MHL6BbGto@27qAps)o^ZmV{d1l zW30+@25BTXA0K(=4G|PMns=BAm22Gsp&V`8SRikq40T zXZlc@e3BP1$)C39?FsQDF42c8AgK@-vNO#3AbV;n%XGNvzX`}$B_u$qxHMd}rEq3x1iJJUpi|ZYdEFQ-4LNh>$YKHjCj~VQV$QG1 zJ}YXrhz{v-@BED^$2&mI9d)oI`B=}#%Ul;I7y%e@L3c2y3Ixspnrf!XszuOo?4+G* zXmLJIvq{>Y<6bPL0gs|T3hrP|lQuml+BVu$xP>ZU6Tpil#?}#gBnIwtwk;qcIs<1w zV5nqNq*5)ZiGXBiKMJonX+1jBpje#Y31@XyXLSZBoYh|$rm#Fy9*36oJYfJZ)lAzq z)BMP{r^y*kjpmlTJ3HAJ^~$~zU6L)lgQ!Ojdabc843=(r)9|G^Valn0vH1$71cm-vQfPk^6g-$5r)G z>DLjRFA`cb{ef40#j2VFq3GpgMuJ-Kn{Ja=rqk;YS9r^g(XR|xfj(4JCAqn zfA5wDG6afmb!9jt}z5|TXY3<1shaNb?KQ)kKX@aZ+B;{U;xiVQN<)uN{}+qm{gNW z>;tgPL{dy4rC5~%0BhT}EbFXJXU6r>`k=0(V|J_x3+zbEjG2iG$6OSJ6@{4+069(_ zdRGQULSS}SIwUkP17jutOcL`+5CIU$vqx7D&^)vf<8(Y_$Ez!&x~{6CBGY+0EvYC= z4+Ioj1Cm*r;<&7vg3{#iy~<(Xi*7!N+9H==29m(}6U*wvf>lHn%VMwP973=$aKzy8oy>*!AGnnw5eLL=+%cfZmUf ziD(hg8;}{%B2L_BD^067aN91!K80@OvGq4fJso-i8b5Zuhs@9&@7H=3vccxDlq zx9#fch&b)+?7VRPinXeUf<)|`D-hTq`LYbrrqecrlp+8)Bg18k+cA=`q&vaMzB)(H z5ZaUP=~EaDxVT&L4tz2b4*FM>(aU6}!hpzmR+--%FaXh%h?p~1-*HTc45-SO-6}zq zlru>ole&8shQ+{s@pl>8LY!g80gO4j*8ojXb3Ch}0xBsgKH(*CazL8-=garPbm?({ zr`#6ujggHMmz`vONGNE|NhL$gshG5=l5;kLe79@3O$<8 zqvn{SfBFak1R~HZn*zX)R7D2OAjD(>yVL1|2fJR$5R{165daCU4F-d%SQ!rMrUIN# zrsk_^rc*97Cg)Z^{XhM0fBY~1;QP~Axv_eoDAE!!zjSUBb>2HhhQ%j93ghu?RM^;&9SE98bKTn;)W} zh*ZOR5+~n#|2{vrb*`BF`+xg|KYsl|Qy17CZVX1}FKmQ%JXk4LrtZzxe!O<>%Exyf zT)%etpZ>;w_?!RZ|8e`^{_56ndN})Af9s3emo`kMNDd>A1CXpdTC#7D5Q(^V*tA7H z2PiJr6&Rf0&@3Vw4WGpKm#_l%6s3OY^~Vogf`I*r!Ip*|%TvlC`FC+HTKa$56G949uVik;EY}f;U7F6It=G(d3XFs6Rs! z&g!hr>I_ggtG^Da0``3Y+HpU>c(7w{cy{8s{ulQ?KM8&4AIq>XtUK;0vYA0YUU-56 z@yVDYGd)T0BciANZ8^NY7e$&OqFO=pQnPl|4V$Cg?@p(&CXO>g2;`e;^r974rw`wP z^d4@WFRD`dbF+da0JqTU{&~d&Io%LJR1;W&1d;+3HI%iPK}@6(d|}Spcn%>TQ(aY+ zFE=lrD_0tsBn=RS{KkgvK0py@JFDtpz0v8ThacU(xUx}Rys82CVE^truco_iUj6)6 zn&Fn3BlJaS*3HdCwN*tDWGtL7!MrIj5t-+%kYjms}y z+$y3vP2P#E;r?DRsLEq)K~e`PfaW~U zXqrr;NK7fl5MxND=A1W!wrzQk%!~+|x{)N)$v8+_*-VTDVs>6gSsCNJ2WBP)cA{#k z&N=iR(IiHZBoZs~Dk(_B3B@(S#7EU5n==oF;NkUGjiaJ$s+?AlYu1= zGjNNJ0s#QkKyfM3&zuEVDD_1M+02q8B}iS8Ak)coHlI^W`#bvt*NVF7vml5NDbFZX z3E7X2<|4?>og@_tP#$SwD@woR+LQjT4fPzVq zM3k=y6Cx@QF%wZD1VmEmb2=B92Dt2hPVDIfhzmm2X%c~HPL?zP6*EMXY!c~?ah8)m z=Tg8R((Abw0L4?D6lR8onIdTR~3;h=FEjr9B69W+u6=s*_tJ6m60 zU%$F_X>IUeXYbtyk0ue?WWb)#x*&ndTOZ$k^Yz!dx8M8nXJ5GR@~7wHU9)2Q^Pl<$ z|LuSMfBqN$)!sM$4hj$OoZ9aS>!O9zNJ*w*ATMvGG@%-o?|J`5st#7~f;k0eGH@^Cn7g&$FSyz@dk;E`_r}shZ zrw+2jMPWfc%!-<)tg8$;W!pkf`~-pDs28;?Oaz`>qxqYX9mhi~*pfZ=XHUR?Cy}zn zZ~Fzjj4wI)vKBbT!t~?#_C##3Hy<&uh-B(Xxv?b9#Dg@dpt`l17Gn};>O=ApFwJEe z>9F$$olb(ZA`j=2S%kd~c3O83{ZxG<3?!XMP)*F>J^E@jwTvr+qC}<^tUim5Jgc)h zt2031to{nIgcF^P>s6;9W+#yXI}y$G({)Wx`#gHG)mP}HyR;ba*-68;zv%lNpAj(U z(8E*m;TQH>$LCB1?O^7(DyyGcBlmdrEeN3w?$CE`?fS6U9^e1&?C7m>xUs(SW#scA z0CG?j2bH1yG*^I3kqnb)YEdJBX%~S!mZdRSJEsr{K?_fYdNi@gRHjplQgHb>5gFU$RKnr)MdST>GILehj#zIogcxu74~oeuHL?X>!Y{ddH(b3es$DM z1Cb|DkqFSGkg!dzH1aN?>-CkYgjAG8)?hz#>C(f)qoYT=o1>LShkO6~AO8N||Ak-p znQK=Oq#Yk1v>{EBMQ@bi|I6N+1zDDy=VAYnd6s)`?Nz-@@6&@BV1NN<20K6oL6Cw- z!4ySFv=k;CQdnll4oOz{!3z6954OW0%OTs;gB1+Q1Zjp81OuXEfdpw%APEq}zRZ9C zW-xp2OYK#6IZNjM|9;4GZ&h{oU?C9>KU6++R9D}=b?TnXJo$hBw?u;pJ4c9w7DZf9 zterY>{@% z@o)$(6+H?POoOQanyR5=Gf>k!^I)c`W>yphGN}rh5tws~ocuZoREfwr=e-921_3Zd z2go7HcrT#nY%%ewNi(1#0HQMiiyKmHsdyo8wtIlP;%@`Lb5D(ITN{Q z=)nIkMly*&(-0cx+|K@_Qa86SKW-yx#5%S+JEL10H=lbg`1Qv>_<tE$ColydU($ z2Li9t{^zuq?<@-v>lzM&s)qrEv|j>%sxebnQi(#!&7I*92r3#wL}WsUgosQ8!m3VH zl$o&W(soS$17sFvJeq^NlIaU(ngvypWIJF)Do6wbf~Gh%CY_dphnNTH4-q&7Go&A2 zhv^K{-@UW+m>JXqn3@QfVXI&aqyiI$PHJP1IBscJMdFf^5<*>Rl3AZ;7ls@)w9*Or&vojQcp_cKzF zMoz3PuPzK&f@dP+AkLNM=5P$z@BQXyzVd}vazB4=d39}WFqcuNgE51%rAc#op`@&z z&y~S&p^r#SpoiD@>svdM5D>jnjT6Gn(XMI>QJOkVhWiu9iwa#cnkWqXiw*((XC z^!*9I=H7l4qQyGL)}k5b8*S``@fRA6XXuBXn9t{){P?H8zP8-!k4MAF!l{Q&Ztibh zeB|7uE}nVr%4&%eS~nTK|FKKI|I9bv`R?~T@%Y(L?Jy78rXd0Zp)?5(V{8Ti!mPKE zbSy~{VfUa;CSaDVRpC&g%6+Gh*&*hTvgQ!KV7dkAfd(d}McIM*$}F4l+g0Dmy>ljo z!~>G#G$0ncSl5|lDP{ncM1Ft~5e%Ki5=?b!HVdHQ0(5qv2&T>n7Lk^;Kwbl)2oS(T z(NP;=+`y=oaUJV+GHLvFRczO~S=o9UcB4$1y5^>Y45J8YKq`-e9*)QHI3CApM4J>g#qD&n@=OZ*TsoY`kE_Tyge|q?eii zzzw?=B9M56VBd{%zXm2Viy9gRK~R;}ih+8kQc*p2F`{Epq!4g8@e<6Uo9nNvu0H#F zpU5t~Y3a@H6csIS7$ysACt+h(s>x_~mwNO4wTDhDX7x9o2Ulk+bEAm;{Pd$si?_G7 zhU+($=libov1zlMLS;cjn^pjzD98!0nm~-As*37;Run}$u1=pkaba)YeE!P%#`Q^c z?e_X_efl%Z?x{DNZ^u!pp;=S6wX#<*Rc)Q~j*L)^0`ub9^5&iE_5NPrJ(Pun%3@8S zA&c5&c#29ZZ4*K(A($u{5@C$egaDMK^P;MTx(;oFZPsIUL>d*fB~T_KLV;u~#e~%B z^h>4g)%uGZrF9zTE+LdRYc@EJ7q2mL<^*h{%RJS9} zL@9kEfd$l+c6+;kGkCA%#0oLT?OAwPRgr`aUJ(SEC6iAu^(%A^{Pw6OC-F z$!<(P3pGP?v~>{864Jm5~RFW(d3MSkbZ?mJl6*T@?jP6r!Oh7@8Q6A)$E$L?AUy zbO!~&4pW$FEkLKssjDls)0a5sLyTZh2gxYw_j+U5FEfusHE3S;=XyPkZLj3QdqWCF z;B;Ye@uUCtQ@5@)moGj($SjX7VI-gkRy9pMfm4?E01aTYv%gi<>wDu@Z|-cyMVIGA zj`e6fG1u!46qq~(t?%5vea)BW-*X00i|EM(x824wt8e^UKlR!F>DNv?dHz@ax4-s3 z{)^v#?i;sCiPx`Bte53+V`+KG<+S4P?8)q@bLHmViW;3hb*9LBH}9;sfP=+1e&bs& z<`OfDb!h4cRSUzd==XPTEo65kd+c1+zU}NQ+jiPzpZ&r&KJ?Rn>D0xAjm`DTkDa|a zZf?B%Lg|EEG1=UD*SXVw_s8F#`z-9W+{dPAGS8qv1&=tEb_F*Al2UTTz;1QGfsUq| zkg92cgNX?!r5ko%@Jh1nJUkVr09lvCXk8-8;X{R)+(WLx=_Y<8$z^&Rx);uv2}q}G z1q3kQB-xo7s8|;&o%~M(fPu6j6+i?^L0Y7Yqy=`$G6MuAWkZdKXow0J(MRx9TVO}a zJ+}&oVj!X#1ly=tlwOdcuDPo8tK)TO&~?$Xk6*`ne)~>=$b-4(Zrl!^`gDj-U0&?D z7~86fF(?P0XC~6tlOl71;3<>nUBOFBi~G0kgvr=tB%!rXYp5v|k75y`XfO>RIzy#m zj7$>Rz_~Aq0svJdN@zoXwkb^#jlxVB&HIjG0K~+OnX^3K+27By%$tvGl)7p|&CK4p z7-N9|$>d&yh*DlXGn+(_pa5nlVisk7ZeZNYk>?i{dU@VX##`I#We85%5QCH~(oXK) zmW}OfE*p<_cDC0~UV0?fUP)Z*A_r zru%?1!fVvL%yTMo6!JF7E9BA&{U zWvaAK#hFt;Lm+krfNEwj1r8k8?{zh+rd)MOZh8pF1d)MUverjvw5Xy{g<0;hd;lO0 zIVeTZU_l``WHurtLNn}cr8cOzYy+8=aDfIWARd_bB!B+2u%>l= zXQ+@=38*$rqCA9o#i^iX_8m1fBTW$xn%;pF3C$cRfvKW8GBD``ep6)*LT8<+9SnqE z3;=3~r~*yX=6OlvHuv@(Us!Ic;U2~LvM*s$fn|Bt)>RdB?c9YT%O>MW2JI7X{lG7N z_&2Y-w*T0r$J)J}n!#nc>ko!a*w`L1agpVl$gkeq*`G|dhvQ(GV%fw6l4ii|rPBj~ zd}F^Ehp<~gZ?1ph^ji7w!!nYs*KT0h%ND6z;#~9C(8+hc`|?lT`ZxdN!*zB2pZzy~ z=YRNxFaGMsKE`FXKc3H_b!3iW6SqsxYfE#Jrrg;d_ZJuDmKMg7$=Qd_y#Ggj?`;;DCMw5B8W!JES5Yr~;s31ONnbi4sNBWxblkw7dZTEXzB1Pt8nJ(NN8y0FyB& zVn7zt-Xv{s94Hgc0yw}i;yOx`Q9FPFfg!@>a>cY))r>1WcO3F?JdVflI0h7s$MfQ|AEp2g(IZESwF5*O&c85)4~HD)zg|kvHk4m)BOR>-NVIB z_il)XlFwnLgzS0(*qJsUIEaOaDQ}7Pe0gzh<%w5szqnfL>E@LB0^ zktZ&{>Esei5Ya&aEKyA*l1LQMAdxk+jm$4BR$JQ=TPHzdV=*5R3M(6C&e;M6Nx|=sK_(t8JL~R zMO9*B8Zjv+)CdWrMT0g7QWS~KWebZ-%o^0W>x2yTxNukvh&;+Xt-w`!ZW-(|qbX_bfc4p}WozWw( zlNgL0h#~^0AOU+1txYBklw9U>)|Ym?j&mlYjEnKm4Q5c-JFD z_6`9>kJK2mgatdi^}uXfLO@W{DW=ffNHaS~xkH*JHFocj%p~a$C)^HI<0&r_-SqP` zpw9J?L@nJDA`l`(!=S_@5>;7+M2MIy2s0&s2*Hr16W6BqTRUx(BvyiG6xBrZ0MqVS zfP`s{N|!pBG%N{;PTaJPonkO8$kRqVv*%2CqK68)G@}U69W;l#Pt|D3L+@s2N{}?` zD$66xh-pk{2QGjBfPr$F)sQR_Z0f~0qr7*Di>_zharVH}5KV*$V+eIs&CSh=#Lex^ zepXz+dtE_$MG-)qS!g5Xj@X=YO;!66EyvhL`%WWh z0KGhuXm<@ZcR~}Ons^ZJIqMhYKsRJ_vq#~LkDR9yaP7|UPxhP3KX7qrv79@9Qn%aj zUOj+3u2KV$di`8DjN6BQ<|m&1)35)*M?QD=xnKQ<|KKk@{=RYqE{@GdPnTi<8S=J zAO45!U48T-{KQj_JhOY|)oY{YUU~Ib{;z-YpZ@GmzUd8b`0>B+o)7=hzdo^iVPmga zJH7h;ANrB7_1f?M`tSV3pZ$-EgRgl3oX~^CVhPg%bZKTL7_AFj znD!D3)O310P_YCoPH&+G>kuxQWjre&nrNC<9c-3jN(cb!Koq|b(bPKoW+XTylt9G8 zXP6|1!EUu2%p3qXmPCQ5^t91#x2$7?ruV%o!Zh6OPC6I3CA@ef2!SKA}IF|Ax;dfWgpb_OHWPf+s4LYYsSEV zo7Oz4nU(;W6Jx9<{`4sx-roMBKUh6|Qdb@h!wPn;dz zDo^ zI7dDUlc7pP(=02^l||75HVEQmJdTwHC*EiEo;Og2Dhz%96o5BtKt|FUh?=1x1%zI# znb`S4qU_vRSIgXBDGzn8D4~^?zxDF=^=p?-pBxSAoLqmtm<%_IYBYH4ye=&HT$aaN zeXU`4x`~#Jx3TPHwbj{>K?7$#wb~F9=Mb{;l08v zXh0Yt8hg$qOn~gw8|!;*o98{RLI{<_wr#V_XKY0^(!uJfhflrq$_qEI?kp~Fp6BLr zQ4@{*+(8V+$!3we0EM(dkr7D&HFXh*iG9~NRz(mtiy|4cP1sj;*jpkcl%VX9GeqY( z19HMlE{~J3b5Yxhq=jYzAz0n87_-lFQqq_;wjV; zB!Vdb8IUL#kbnw;5=#gY6f;*Y^k{QjI79Sn%d6jd@!B`P{OY+&C)Um`xuV(LYp&hc z{*$j<`O>q`1C)85i3BiAaS<~BXl6qw1|3y<*7@g|;L4_YeG)f-W*~v6fhBp1nW{wr07u9OCSZ_^6^}G{4@=Pzh$%$}5fdH| z63D0}%Mcw90|;Q2Km`I|G`5&x0#oXsm`$Hd$uDwd^+;0}4O0WKL@zS};0{DF0V8A~ za6EJ5OTQ09ltT#;sfi4TF4-$ElStU#-(AdoC2cRG$Cg%}3A&@PZFS%&BT=#&YWZWaR!HH8> zm8$jIKl+9xZ|+;ShVOlBWzp5+Rp_62XlHXL9|vj0D_h+NH&OPBLGJ_q=qjoX_pSf@zx?1=zxmp4eCgJmuic)LQj547M;SBsvsN^lv<2lp%N2}~LYQoC zj&9xDy?Sk{7!>o1MY}cm8$bOM&%AW|lV8960~a5C{_2&b)k_y2KGj=tu6O$SwfW!v z&9AP%efY$CFMjA}KKRjJ`Gdu>fBr&w@zJ$M-}Ii({QJ*-{u5t#*H8WhhKVZ~AOnj4 zLXgltO(+$pruZRBKwz3fpy^&~>h(JYE=oqDbS7(ldS>S3602TH6WGfr_5-2;UhLjwa;8l9>?PtP&gjnmyw=VIt?IKxW{z)zJll5zMBHjVIASj1#xOWX5Xfix)0Y+ zY*ReMcLhMb|9{?>yJlz#2zV$By$fzS;=SA%m5V8+vc~%}kN$MM_07@b#>(j*SUdTF zwjLnY-%D~|D(MtZ$&3v_YHgc{ghiP%V2rF$nxTc7VvC{%q5|mH(KNji2@(6JF6@5c z*%$xSM^-=dp%uTR`D*i~%fi56AIn#?df7%}s$1C|7OTDf{IU#*L^3qBfQ8R|AIxGp zdE`au3K1lq8DLT+6LcZon0)Nj$h%^G(6X$ZIQ@>S{K~gpz8*ILxS^~89R_`QXY$g{ zsF+*cZ0Pc-wNw3KfvoQ&cS3F3vZ9iA&Uqe(b}~_6FjGSXGc}PI%~FQFh-!?Y0%{Nx z2&k$W>Uq&95)E`T8ewdmW78-xQl1lH%4^H>oCu0MD|>|?L6ns4k>%NV5}T$405w5G z?;L=sL<{2Bn<){d9K@*52AR)`+jq9A$>i**lc8=HER5S{zWnU&?K>yu=T=XiZTD`i zEX_6Gw0E+6o+S6{ihv9Wz-uCL=UAu2+Uh~A51Fp1Ufqn93fVRiN8D|gRboLgHP7+_QZ zlMvW>&-Wyy%`ESx9%qR>(%CMg`K4xHgw#}R-6|HPD+VBHEr4SqLIMK?jiv}~bQUPo z*iNV&x5FK2n^@HXL|Kn>oJ^`ZOmI?#&`O@U+@pfVs079{wti>hr%_asRf483rn&<| zM3Gq6&3HTsRpe;BJPSQVfVHy^J^#{kU;WC>_R^Qt<8W?}1Sw%xvUSEQTGPDmFE@PgjL#U8`S{p@2p)Vuyxi zls=AG!omX~tr`8{uo>iRe@oxdu6?W~I;BEjl*qt9*xBg;prIX>y38zfrb&Et2^o;4_Kwrf0Xo_oAsQVZ%#@yFW{T83(x#yS(-dLDsmUc`stqk=pg07F;sD8v zu@lxm@Tu2Dh8T%KKvxChNtjI9qQ8Xoov64!91lk^^R7U3h>o3^il~|{uP$A=vbnic zt*xGxsJ)_qC`H+e0E;Uta}hP)lF_&xi&_{g^jm1#wx!G)P_N8SuPiPtEIf7Utc8t7 zF0E7}c~M?iDYWE*Rv(gW!3IK~a>o`$0wLxQpxuq$FZ}S|_)lJa^6k(3#z!~*;7h$f z{`v?1%DdnD^FQ_cZTjkq!;gLZ|EY$}0+;4>zVGJq%tD)yWsK}-jD^!&85@AzVSRo5 z?qB=Kr!T&F`JevJAGSKXzA;*ygHL_wi+9&AKmNp{r`DDU3bgRWFMka(d;8no_4r$_ zef5i9Upn#dH^2C;K`(pq$DaE9?|km&b7wET@6A|^teKFt5E}_mRZ>bQn2}mAO{gfd zBO)cQK$f->LS%N%8D8#OiYJYB>*UJ7gbG3 zcfr=lK4&BaBtml?or-iygz0)LiDyM=eY$CIb(b1)DA4!F0w+35JDN$44tSn30TN94 zl~bdsqfZy;$V!L6&GgG2mj4_%XdQbo9*^U3JdOc{!0w!RBW+b(YcQiIsE`ZC(BGf|+F;@E!Yg922wboQD z%RyR^hE1Jk12!wpo_y#}|J`q0ooxN(fAEjTZf=4ku^wb|#q!dA3GHa;(eu`J^yUWr zwlodF8!87Na75EsH$X&)RSZg0pz{V~VpIO7btMP@n`XU&oT)}8fB9t9?lmvoxqYXJ z1m-<0FP3#v?+rJf-M8ykx1PLo=IKjkL_j4tVTdHy5NPJvOvd9n8}tkmM50Br#F0+j z`c9AyfM!ITi^10J?qXhe?@iTtGL0JJpg(ZzBnF>aG+-){IUkx9!5lkcmN-p?G-!9m zF1CoKqDYoy83355Y0UC6f&w{0lPFElEH5Tiy|c4(a_z+8{9yCWo#pwZ?VaK6tGD}E zmS=;#o$>DG-SM(pyztoalkbGNrB-2o_vReBBI}h4OifkFq7ATaD{We^oD8gk)u6Mb zJ4DTyNo&93T6n$E^v|%q0o5Q9f&pK-a_iM=H!nQ(bQo96K;Dyg#oSzU4$Pn#pIse1 za{1EdzV`C^-SP6$=@^YjGT*h`fCLRe5jn{oP(%oTx}$XR0#xY^zNz0RX2!&ID^b}O z1IkKkTjBtY5F;vSQ)vuJ=mhkH83wNHccGp?f#&RI`DLpyqPrtZlWe#ax;77X@A2 z#ux<5Lu^2+UpCfN$QtUn)mHr8f;GOk9|La`LZ4JRYc>)eL_)!+Q-b8lMvC;#*pw{{zX zdDz@4da``#;cq;D>+brTZ6yK#03ZNKL_t*6JKz46Gi$xY`A0taC%eD*vCn5Tf9bIc z-}u&*Z@zfTInY1)%=`YM_dWj3w|wHae(Ta(-r$O!!d@bSh>C;&rYccYxoJZPqJn_V zIU))%7-(lW+D&#eEQtWk8c-&7-l6jbh@cE$A{JF+kam(bUz$GY1VQLf#%h`t>`X5!6NyRjibOHSHUv}+O}o9b^U%PBnC#k(T~eb9tL0f1H2^y_i%k^;eAypQTIYP0 zxjVORv)b;~ZfNx#?|k>-V6k9&@wsol@bax6{;Tg>cYX2c8;@R^nNa}s2W+5s-;6%+w zMJ7Us8UPKHtjk$Xhv6`lL`*A$NY(_$-nm>6iOjLZW-JP5Bu3yEm|JPIsidyrcz?XT zDb3h1H3krx;oTc|u72L?dUa`@m-F)c8BR4TIp=dwBhW5*&@35+%qFhDFv0a@1A;uHC$~Kd#H1h}eJ(AVdH(5otr4N}9H90YFvZP&5A?4#NH4 zf4zHs@Jf6j#U%ZU&f;*>{5ry6AV5m(T$-XPK%5vomcktnk(rqJ9*iU5ba1ax?m_*0 z@co$!LIP=|Llq!7YZ4M6niv3zCa!p*f~&~AdoL!5gC+z7r&gZ`pfJ5wB60@ifRnXE zw`miArm`Q%5GZZ9hDg9EohT_R$W(FaPhrV9;Q)F;ED(v%ArP7aV@6NN1Vl)5Ktex! zTWv;a)2IYUyyy=a(=vB4XJR8VBDvYUzZn8|K~roE_?LJXEK_6 z^_Tva^8fzu+b^Gg;;%pPjqzKazq9w^%U5n(y&5ZUPrc{`5Win{`OO=OTYEc{^d{ocYjYE0A)xeyMj~^OeKm)VHQH@ zj6ahLA&f9Kppqg()y&jfk$h)GqZo)I2ImbK5f~9nHHt_;4GH|3g{r0%$3#R-)GY_` z+`*=^H3wjTOf+jn7^0CwBIwLM(j20W9yN_MK>$GCS%Xp+cY+9D_X{=;^qGl!lMut{ z#Qio>2UPTp+Oj?wGl8iyng_l7ee8UQ7#=>t3zfbew)3x|)$b|mY% ztN2U>K*=!?rvoixtLg{yXNRLZKC`;5!TJF5U3G)I-$cm-HJ}MJyHfADELY$V)Jud= z<79$u)Cg#ZN*DsS0aP)|yyqBHG=d_Q^RjmG^iyv;`|8V|{Ed(N*gyPl(G?imW-@B3 zx>#84`?>MvR$C3*{g^K;uAzWwmZ!V?!xuMB(}VXrl*7v{^7v^9(oHA-utQSvdi z2;w~hSqhfZBx0wj-dY1FsG5kXn25Cznzo8!qUxM$o7#Km75M}J!9p8Mm6>B3EJhV^ zL?BpXIm|-s%rfuWxPvEChncPPdhXC4aO&elN*VmA8(%sHnah)7-6M4V-Q<-~~)VRvtWq`kb~)G{76 zNW!R54UNd6iXyW2UOHwCc<<}FCdcqyNFLzmA%5!fV&6GKbV{@`IIw>^oXNmUNh3w6 zJend3Q}}?85?cYiXXkwC_ojh__bY4e`Qm6a!vU-?#S~1Za~{pWD5^35#MD6UI0dG5 z4*-&^^^s_r`OuYB3Q4d*M9j{C0~7}ifjWc=J50e4ff0a^%o3}C0o72=*aQsJzz7cK zlg^|gM2LVMkeD1A127sfIz*S?22LK0>6u7}p&v+Wji~0xP>S4-clKm5*;S}KRY5}p zW_FH2L*_8HZD>Q&w2B31RL9EY(Chh(5ukP1pfIH5Xo3cg#?`1EP414yn>)MXHVmt} zs#+9m+DZYTZ3nWqI=8$t9>4XmvnTr5_Qsv3pMF~$jvA=vmik&NI^lr@Y{qp9jZoBR zu@K~~Vckyr8yaCr@ zvM+&7ojx&~44?bcmlv0oS5NeIcK1H>rI&vEUFTl;)+_IM>dB9P4)2xizdbq*4CyGIKibaxH}O82yXU}pOYozDUQ=#1iVd;mTk$K!Y$ z0}99E`^Zu_B&b6;WI&E^7(lQi1^MezbUSz-@2#B>@bwS{yZ3Lid`CKv2_Lz%djW)d zv&TBqZk%1X9er79C>Wra(bPr~3?O=97S%jo1|ZX%(0w<6Li!cD><3dcMH3k9XftN! zh$IRcBaBDXv=A(1*pUzlQWVo*L_i*y*f}z9L0!IR=Pv%}4}S3XzxK>)pa0Y&Z+&+? zu0qphYp3b#`4Ft$*m7U|y;#e5b4!<(W0^tbNQsOgF%&vkHH$ew24X{++H0DD5|DwZ zse&>w8u>hL#RkjET8(3dPhWm`p7U>ByPfB>a{5evt}L_i#OTGXJCk}eu6BxikQtE> z)iwd2DX2k21m`G(py{JXx!$StQwcE!k%;V61RNMxjIksV5oXS^3<)##&N)O-6^X%A5ix3XiJKauArt!; z>q%AZ@9krh_1*PL7az;Ya$GAD=e=?{FTlptq~815OXWkS{NpEDoe(Kc;>7Nb@++~w zQ0$LUxEhbi)nGjWcsh-Oi-E6MNkX)AMWg#sX_@Z1? zisNQ)b+v!~%;Mb}qZ>EwF0J^iSjApWv$T8ocDiTKpBm!j6pi!AQ#+Xk3sdxII%?R$_7!U7G-zz-S6**IRGy(v| zSt*nn`ACR_JRNE8WhUpC7y*;eQ8naGn77$PzP6S!pWM>ciuMU`$BO*x~fT4U4XpivfnA`zOlSX{HXE=E;T zjYcCRbxe8YV+aTsqJ$V!rN2;crhrY`)NN>p$!GJe9u(|1%pO|KrWiy>zbkP%(G9X}9amyT#2brK6Mca~HDgy(fFw zVlPsd)UV1X*0)~1xpC)P!Q#C2e(=fp*GBY(7wVxpGsaA}>#Z-pu)oCkzVj#7_$+Ihsw6EOS|Jo~e-aKw^!>bR!?ajaQv5%d2bZx$uS(GHBF)#!r zK*{oS*KI05P-de7T*hi-fNB~=EF^+~NHmEKoB^iP4*)<)_8W$^AhAmmNVN?C+GtT? zN|x>Fc>>oZf`DiO6p)O#U1+*0PsET0LSBa9FOC13@99r zZ~tkhU}Q-MyrE0YFi9k4Gz8?-DpT$J4!gtPePjVS0xJLrAc4xEk{i1pO3;xbX4LQ_ zXn8WKr=z3;fg_oe-|h@<9bVAInVA8N@A}?c3q@JkBW+$OICs9jTr^!Z`RM;p)0nuqn z6kwT?Ner#i;MhY!*tY2USXYy_agSVlXQr=x_}71Z`QQE6&;9Mw55Kh)L#VuNmf`kJ zsIh5_oj|XKxl3;xW@QC+kvRsG5HSj>qAIC!nTey8%{ycuO&SD?Am|aeAGa&Kq-j?_cPO<`4Gcf|Pah8LssiH$BzQ=6dzkH*c`Frv4tm$S3+Xm6n?wZXyss`WQ-ZEQZYdLmRK@`_DxVc14# zxbSgLMI-ieMAS)`3~6yb1}FfcMTW@SGn$JwaDdp3Kx+)@%X!JlMnk6U2!h1Qno+a6 z5q7u7yZdL(o_F34clX)%4f0qlMC5?`xzF21>+M_qi(B)(-eB$m_QZCIYVUTvc8i*J z_3pdtg~iraT17HqBbu56rs`H8x!}``K|QTS^&Uv-eiqN`H?i?M{2c%(HCUYp5t5M_ z$8j~kxj#O+NE*?(elxeAMee9=cJG*mCQ@(Ef8z0rFTb!|kMx^=dTY?1%g%XrN@yZ& zW|n0@rUcCB%om~&1qe~6hIguFpkzuGC^psx2uM`at-@`v7VZ z$f7n4qL@SwGZios(HJGE1r%&N83W+*!Xf}j+lIRJ9z+8ZRWUf{eGWWC12h!v^i~E4 zQ6dm_A^}r!e29)>sq&#zM0Z6l9@U0`MU+!FafRikF!DMH35 z2yNuNL1+~s6$m9$#aJiZ10qaq@Msn=*_qD*KnlJ9B{KwN1VnH!Flx~YGH8qpdFeAS zB?NX1Q6)&0`36BmqK3@5py2beZ5s8~L_wrpQC@GWiA~O&7!3DTx98V(n;_xzO)Q4`y}TRLo{mHpe3ErmzMwD{<1EU-7B z-K|D=v%k`x6PJDKinKMow3%Q zusSHO-Q3DcUqxKsj*E*cAUj`u;nkIerD9{$8)PsXzVf9PpMKZl^?1ME>%|a&EJ~vq zI4qbNgE;~rYa}?!9C)(M2?dEfBU=Ck3lW;iq97Q8MmEzPd;ur=)c4`;e_Roxo8s=B(_-6Xp?ixf#)Gemg;Y}tsFAb|nvAwU8I$U`0j z3a;&&Y3bUhhIyVvcx@C z3BZmhgQdsOS#Hx4+=k9kc||llGt)ay*Fe|tE;<+H)K76R05VT1NBg0*;?kvvsLPbQkd5? zn_4wHozHFe4p)oWbQ-Ig=hL$6g**dkwM){56hsH6+@&NW`7%&4Q#UY)fK17#y_3Bd zqd~?@1qNQ*qH;I{faF3KV+5$n!5V^D(??lAY*QOW42%HFL2);jA=KoGCjy8>tU*OA zM6H6%stTE!5I|Vwi-Y~cE1Or;EcaQSKai)uUZV~|$&I~(DyWB_ozE-zAF~t5} z(`@`xcs}QtIB@2rkEU&?>nciFhqhSnUAnY0nU9@ORn^VBuImQbjYh*Pb0;UKA(p4d zvz;piz}zy+9mW^|fSCb2B0vm)q=X>p%4)>Ei^|lXDyE94LO=z#^SYW$GDMqA$9sp< zgX+P9gZuX$F6y@I=i8UIF5e!ljYhGFL1L_9j=nc2GQ;Wo6rJ9hXUZ2?rDSw-_l`83EC_*#(_d+sSdp~ah%SK| z>9x#D=LG6J5t7=$c>*SO$yd=zfF5gapheg3%oMF8l(_0E*JYy12o-96IvSwwWUUYnv+1^P(shi$zrP zne&*{O>pe1YC%XY^KBE`Hq=JF(dfb5xASs1JEF(qdhg_9v1rR;L?9}$9Bj_ox@sT1 zbn8Y{;`Hcfv^6TS5ulDIM{mCMFt&&k42ambVr`HpictZTksOd??}#0dV`!=|VbAr# zUw{5uh{s#oI|r}6##I}t`M9pCIv(#Gdd&8lx$tc3&eho>)YU??x_Rdl|HnW3m6w0@ zcmDFzxBeQrQWovaXI}WsC;s`bzl_r`7-UCLrWNt4X43^1_`5U)w*Lqxh^>a-^(ktCzp}^&6jjW@mf*IE2lO{NQLhtwo|P zW;Fq*MDY1nzx`&U;1h3{fB?? z?~bJY&}VLWqqgbX6of}W*Mj$GxlIJ-iwV?r(7~0S(t1zK+u2m(o zWHMJ*3!<*`OZ^oyd+(7DkyOY~`}?d}l!g%q)^9E7?x zpUtyD&-Y3fHo;|9cqK9g4%WtYF=+>OJuCnA`rvwR_qf)UT4YtW7B!$oV}>O`p+mU7 zKgq)n+$+nTq~Igs(ZT-d@tEFsWicDu(c|7|aM-_g^i|-Z5odB&RgyWzIRaM2?dCUW#<1NPwy_nPi{=00{;1-ba6Qc=GmJ_YdEE zd-8BU9EI_C9)lJAUI~tlX0x8jqV=4CSv6f?5SPJpe#{w_{j4Z6awrmbum*(Hd~QK} zi9%7;2puF__T&T4fS_cWI&Wqcl@LPPwt1eLwIULuRExTvw@s^q;d*~2N5}Kod<;OU z`c4z|C5oy~V6A6=PBMRjWjB2OQ?yF`=$hnJNI?e&5Fw&>gh(qh#l+g~xc#6B8d$y0 z(lLRFkeJvJG7|$cxy(7|5IC_FQollkb!0!bg<1&@B z`#Dm=1W>X!Oe^G^f{rjDBprSHT?J1DF|6Kt#ZB8Dz-ONsVYIfzh;9+2Ra4cVF^Y(o zs!q|sLb5bb1rtMLbk0Bo*vKJg$ll;Irwk$!pfe%}MQ*4S=(aJpEm}k!LW(aL{r3(8=7jAfCx;S`1A?^oKEWb=RSJt z(|y%Tw?Fb@e`)^s(e&^bvs^tc4(1e~7>&f)$s5NOz-;_OTV>0 z!`Z>Zt?BQ4{BzIw8M#Y0Zhzwa_ka6qO`GFJdFjJ9p8nWN{hK@a)omILxg2p`7%prv z$GVb(J(*A2`Ds%xAg2#Ld-IFmIez!12AvdY2 zwr={pY_zsEshT(M9}J4}r5BzVpNx$bCnqOsLs!ox4vh$$p@xWc9jaOuEd&8T=bdB> zo|t(_cripkToV;wuGXN-n~ zshRIw5iKGpF4w8!w5_5sqa!0UW*{O5?9gW(ozryedk2A5Yo47$$3$#~k|robObm`i5@Pod0RXTN1yU|0;tEi-?u;;n1XAFc#{z;ZtrAv=v&q*rL3Ai4f~ptS z-;26T>+^U303ZNKL_t)ji@E?5F6sx!P(TApI@Ld=Ia#sh@V$HO_egMjH({Grcm$a( zGxom!2I*b*+VgIU-?b%kh17G83-g7d2V#&2=iH2z;JvNvB374LdoM1AK}xVN1TlyV zqUaQu$vDiy!956za`y!#54zCFK2K-ZlIJ426f%|i4+H>(={7&U1fo?djVem*y+K`TPIkH$OkTy8YMx{(oxDkGey{X}bB=mN zo_R-vDq?1_Z8gTsy9j{Ej18e}8)5`g=eXZ50n9n)y-(VH5fw9JkK`SZ0YVIm)8j|4 zACt@agVFkx%jIxG$pN#GN)uw!w4s@+afEO@Db|Os>eo(Qy;sP1u<5}fr~-o_D42A_pFfX*!VeZ)=!CUIv+4XxU;6qdUb-_H_O-32lL@=L zC?LzS{$Sv?r4|DZV|=1u^UOE?>Ta)8_Q`d$FneYrK8s@^HB3GG`dr<7pe`Co@Nc2yN4PVo#8j z-cXy+wjmhc>0~O$&qs0un+V@6VO9M zfYuQo(pz)qxj;-vWKY&gV)H~$;&)qANPvvV9TNEvKx)AhBrq8u5RSOAE5=GxfqAMf@1qhW7@z%_Lfn|Vf7_WF-b z4u0)l{;LnX@PW^M_R~9;b{69aLVh$0QRwo<+OXeeq**mRnZTvB?D^}P(}$0)X#TN} zzHoThzVasro5dyy;i_dolBUyPso z^v8_aW-;w~KaQb3S>RamV*PjS9Ueb^^V2tOysy}7XOrgsgy!)0Yhx2|Ays|< zV0`UneDl@2o9n~b(Rge7D$EolNUJDB5umDMvS`LtJ#Ff$H6Y(}S>dzHJI~ZL)L>R2 z6M8a75jDoBKmyLr^kxbGt*B?FykLcBtu(Dgqlj(Ow)H#)N&k6vh{)`S9Hs|{218-y z#It0_-uWRjdM3~4y4+EA$PB@;D>9!sWYnf@$vTLQP??k&yHg;kFj*3&=(28q5n&h3 zYKTls#AyeCf}v7puh6}mIDw6wtO%$Z1#z+$NmyYze381m*tDAw5LA#ARp|eFU!RM* zsEfL&3qaxj*Jwf#46jCO_U>-P&NZ2x1OWeZvOs!_y~C5NqZ67M7$jl2{Y8*+vvWl8 zZXo=`H-HGBt{?;q3yTBreKB?CsOe`6h3DT;_m1XDCYl@zyu z2Br$ANKDBAT|w0>wxGsL%XMI8#$=pf3>Kw9BF`?GmIOzs@dA^uv+tj8a zF(Na7s!5C?^FByW5j8OdL|nGJ)CM)cq;o|eGz(RI{P5xU?MFACdEdrx=<_0|VdgO_ z4IEJ{N<`1fz_~YpXj0GT#h{Ol8jVN_UKM<$jq^cyBftEqq8%(wC%TAb9dpjpbX#F1 zpTR%-ru_5U_&vD|pMd!gvDX`Y=_{|^-=BQs#a)bZXx(C3Pp4yM&Wi$xoTIYLpStC4 z+}wHnTSw#5`pwt(oV%R4414CiPw$q%1&Gm535_~(IvSv9Oau6{K|be14#Bb>UAlH< zcI#@rI9bdVz=jZVhea<#553wmaoaW$W51upww;U*{IFluH9B-IZyFQfMblPM4jvz5 zMZrkwo%4jwi3nyn7p0~HU`bm}c6uxA!+bt(nzk%^gF$~jTlmb4w%4b##%5CV@?qA0 z^l)EQk)HS`pf2yzEJlhG-iQkkM3Q5XCh(M0K_v{dv$feKvrIBM|C(+W94VTe~xUxii0#i7DmVU1# zN=Qpw4+zYN$uXM=C8tjAe&X||DRVc7_ObQZXGYASz)F#9b+eeH1@%?-EkH=Bu=5u$hT-v?Af5?6? zpU?lzzy8-B{pd%3@+W@cmw)-6Z(ZAZ`ubCEzJ7mmw9z)x-JOAmOeUw_`Qjh_@o)V4 zt1rL2yEeG8v9b5|ff&tZH3DpmdL~vkO;E_PYwjZ*2bPPnH|~@$`i9 zj2%tx?)g(`EB?K2e)|`{@#>D*@f&+TUd0z*dZsUYE@s+n9?vHL=89aT}?Ov`&8lrktL<3rc_?nzs$o7l$k@xy~nvCCJlUAnY>^!kJ0pckXYHaf!H&0#Yi zpDq?(`qpbbE{;yB#}5y0zIey6*S3bLZReU{4z1Lu&FR7Hcz?2gc)Dm}zi@+IUgUXJ z_{@8D39}NPdzU#R5CkF=V1X{`ggKFYs0LAIXaK~RWk^igpo%gI0=W!gJFh0kZEb2u z#Ow(vMu`#(m55ALRhij2H{#5B=X0NBT#BSq~R=Q5SUqC|uNEcy8I5`m7wX__HK_;BPvkm=!Z{w`atJ{0^<`-F<LQYTpB0vj~q0OWKXGDl;>c0Gi7&5T)nMo^ks5S7=WmYmYSXWX9 zi&e}9C$q)nJ5PT+?>{^~{CB_b%lBk*e|+@RrS-q_Ge2>8d*k)*ym5H{eo>ZXuk_4- zK%x>OsDP?zREwa7#%u^C8X-wBi5L-01SOg(LSm1n4EZMM|gKtL5y8n(!!rqbn5 znVG7Yn23s~sH$efXb?k?Hh@Nrv285`K_msML#SE}pw1Jtu&A5atXW?x#*@ipIvuU` zGxmr^U8JZnCFd#u&=?wG#$|+Ep68*i)S{V+LK;VRV2~-?;7}q*e#i=W*{pi>-V?7e;`o8_jq$(j`ofxpZ~)zU%$P+(Wm}kWLmU!Y}>XP zpE~D|s3?kTw0QdI%Wu4TJRR5H`o`Pq>-{1xP~%`QU}h0XW(q{C24;$g#Lmo2z<~g= zC0|tpB5uX!#mG3;ae@Q?)C*4y*RzAWlW%?N+Yb)!UD>^Kb8}ZAv~e*U4D+JL432R& zn=L9`G+{DbM3uU>qtk=3*PAUG=eU;_WnLEE&0_oL;r-!gP1P2}YisLF9HX{v1tuLp zXx27uRaIuzw(Werm`-QCUTgkpa(VJ(6=s$c#kTg*BMs86L4rm*=y$q9sf~jNUUc5hHsd zCQat@NzK+dA0`xl2+;u449zIT)GetBe};vZzOFgMWMX1SOrU!1Bq!!`1JZLZM199s zN&1Qu$DyiA9|bd5p3h+1nkboMK%P(~1ONtCnt?106wJ)~7S1NrXl7)Rp&@fg1V#{9 z1$K9fH$`85>-8_a^37LX-j4l^yN3sNo`3qzt=nxY|Mpk@?cHy`H9kJR{mgA_;7eb4 z`NJ>1z*K$W$38edp8VFY|Ka|t-?%;~?!W!kFa5&*@)Mu?sWmPpH9`mlbLj{(KdUuF z&PvvXkH;FL_FVtq8?RqmznNn^Iea+k-*kc^!#d^PF zhWX^+KmP28o;uwRI~z~^@JmXRp`TXm(X7#iHf;Enw_p8dFaLh))?T>zY&Jbnm0=rf z;I=mNjJ9SHpBfHbusAt}Hdb|Z>-py`r`gHg#c_GId0pm%V&E zfs8XWsG*cB%q_ambEui!*j<0>{_GpmFcT$=c{Xq^Z>rcf+Ve%*)a&abg1ai}n5Wa} z;r{*yZ(o|O7Y|PkXxhKLvEDS{>)(9yBR}~W<~+3HFsUEE{>Xx3wu8sV`}^bl{pq8l z=`6&7=bm?2?wQ#o?2IwXAj`5m^BJ@Eocqk!6fFe?d++li^WK4nNJ+#5&N(yFARva| z$bkeEKrmL9)pgz05g;P6h(u8{z@&LGLlkCt92eeG;kn4T=UkDwB6FGdNPxNJWtQb$ zQS!ni>>y1`oO8@b4D4N}IZE^io}WJ`hzJmr&cI3NND6%Bys!+XG;&Bt%#gfP2nAi| z9Ac!)X^QId`I96M0H~-CF>uPWxTuS|sEfJ)6fWuq(0Zr1`ozv&%4g3RD5mz@G~M{n zR?^}QcX%fbu(~2zM^s(Kmv@b`833QNyN9Kpf}Oqa><{mL+`Z>bclj>(#0RXy^gE*> zbY1{egR`h6y3{*hH^T%tpX{78iOWgXGTF%x6agZV0U`=oL=ZH!7|jA&1N9`%Cq;i< zvp&ooTYcIdA3E-d8f1)^8t*iz>wd{btRc2BdIWafe2^G~tz0X?sA|V%b>_f@cC@`d z1?=r?JzoyXlXCL*f8Tn?{})I0(MiN4?X|{05YOuQoy>6<9Rr(n?|)3t6KQ;iy9%n$*rEXy*_r5(2hz}}D&r-mK7EEgh)Mp3HC^mu>o_ND6u3A78# zGM9OB8474va5E>SzAGVvz+yUM7j-Oh%L_3`t4CD=1ZHxu zblg-;rsZHJ3TUbQC71buDvAPnPq}w%{ef-ICiQ5utlLSy$AdxEs6@%k2{5xGiEUo; z?)BTmYhU^5SMEQ$@0iNGaKvq0wO|0+w2QXR0d@c22!i-54-!@4+WJORjn#tCvOG7i z5T&Z?$#g0rd6r$;=^q{*&L*>>?6qw(o6mgSAFU1RR*#OSy)p-!c43nM3HGDTL}1l- zCqMzuH`mGU4G~hBWA_p0bj)2GL&6Tam*A42z(fcPL`2-#CN9wlO9%iFC18`B1MFni zM3kTmVnWBvh%QAgI!Uh}O1z5h7)wxQ8hcvD-B^)0y1ynB7<4d1mrj?E(R*{y zEy($hJOTtz-vt39a^jXC8mNMz#54>>XPF+p@7e7;w?23K)>HrBAN`Y8UYmUSr+?y; zAAj*PpZe5C-v8V`{O|tzU;5vFaeYw!_V4^|G1#&YPVc?3KFq%Hiboq_1K79D* z-THLA(JSBj*0=sW$n%%B(2vScxy;p71x`?PXKf97{*8l2m1cz5G|I_?qwS4bFWkBD zAAaNaW}F!yBePS76b#xJNSn;GSGvCQJ?5U{Qb8B7*7`4fye9x zi{|mPIjt6pMVQBvyR)yn`dXyyeZ#?>(dg!Lw{}MU;NE?)#W%n9MJR{ms6QGGCx^!| zYMC=Xb*b1KIb>`tLg+tt?Z#jE%)#{J`0&s$45Z599NYQH#x_BQxhH|VEL?wBpPobt zRcOmH-x~Eso(@ASI8%ipFURAPW-*#g=7Du%XXlwaPk;T}cO4s3HlEF6Y;Ih?`ug7C z8+YGon(NqvOOK8vNQS0uoSw|S_08886OkBBjwg#+E5S<1va&*K#IO=GK?Hz?2ptF_ zI>Zdw6FK6n0L~1|(3F{rJkRsI$SrMzEX%SYL&6YL;xaYaKt+8or^ps#+lClbRidbB z2S}-^sv-cAw5>RTg0WyM9Tnb{o(u1@+_8f^Z;CSW88@?Y^?Hg^T(#k1c@#odOwk4X!=Wx&T^x=60Uu_Gs{A7DRWYJclSC zyz6OYtFixC(+*t%<=G^v8wsBC^ZK5nv+j2PgqOapJRX+L#@0sP559I9%W%?i5z%{e z3SuS*(%oiJlSmPf0SJJ*PzyBF2ol(Y2wEH>C9y+8+JXcViGUu0%}!9nG0Nfy<8<=Y z>zO&*C>nyoVpek`Kw@+r(WUrwbEw@d9K9z}Q!$HGW9s``O