From afcedb94edd612624f1f716b8faebbaec297db0c Mon Sep 17 00:00:00 2001 From: Ryan Ernst Date: Tue, 20 Jan 2015 18:15:02 -0800 Subject: [PATCH] Mappings: Remove `index_analyzer` setting to simplify analyzer logic The `analyzer` setting is now the base setting, and `search_analyzer` is simply an override of the search time analyzer. When setting `search_analyzer`, `analyzer` must be set. closes #9371 --- dev-tools/create-bwc-index.py | 10 +++ docs/reference/docs/termvectors.asciidoc | 4 +- .../mapping/fields/all-field.asciidoc | 2 +- .../mapping/types/core-types.asciidoc | 15 ++--- .../mapping/types/root-object-type.asciidoc | 11 ++-- .../suggesters/completion-suggest.asciidoc | 9 ++- .../mapper/core/AbstractFieldMapper.java | 61 ++++++------------ .../mapper/core/CompletionFieldMapper.java | 44 +++++++------ .../index/mapper/core/TypeParsers.java | 28 ++++---- .../index/mapper/internal/AllFieldMapper.java | 32 +-------- .../CompletionFieldMapperTests.java | 6 +- .../mapper/merge/TestMergeMapperTests.java | 12 ++-- .../update/UpdateMappingOnClusterTests.java | 2 +- .../update/all_mapping_create_index.json | 2 +- .../all_mapping_update_with_conflicts.json | 2 +- .../highlight/HighlighterSearchTests.java | 12 ++-- .../search/query/SearchQueryTests.java | 8 +-- .../search/rescore/QueryRescorerTests.java | 6 +- .../suggest/CompletionSuggestSearchTests.java | 6 +- .../suggest/ContextSuggestSearchTests.java | 5 +- .../search/suggest/SuggestSearchTests.java | 4 +- .../SharedClusterSnapshotRestoreTests.java | 2 +- .../elasticsearch/bwcompat/index-1.4.2.zip | Bin 40533 -> 23872 bytes .../org/elasticsearch/bwcompat/repo-1.4.2.zip | Bin 36410 -> 20651 bytes 24 files changed, 124 insertions(+), 159 deletions(-) diff --git a/dev-tools/create-bwc-index.py b/dev-tools/create-bwc-index.py index a8f2b5b25a4..c0a51239b28 100644 --- a/dev-tools/create-bwc-index.py +++ b/dev-tools/create-bwc-index.py @@ -144,6 +144,16 @@ def generate_index(client, version): # backcompat test for legacy type level analyzer settings, see #8874 mappings['analyzer_type1'] = { 'analyzer': 'standard', + 'properties': { + 'string_with_index_analyzer': { + 'type': 'string', + 'index_analyzer': 'standard' + }, + 'completion_with_index_analyzer': { + 'type': 'completion', + 'index_analyzer': 'standard' + } + } } mappings['analyzer_type2'] = { 'index_analyzer': 'standard', diff --git a/docs/reference/docs/termvectors.asciidoc b/docs/reference/docs/termvectors.asciidoc index 1a759763cc1..7c8b546bce5 100644 --- a/docs/reference/docs/termvectors.asciidoc +++ b/docs/reference/docs/termvectors.asciidoc @@ -111,12 +111,12 @@ curl -s -XPUT 'http://localhost:9200/twitter/' -d '{ "type": "string", "term_vector": "with_positions_offsets_payloads", "store" : true, - "index_analyzer" : "fulltext_analyzer" + "analyzer" : "fulltext_analyzer" }, "fullname": { "type": "string", "term_vector": "with_positions_offsets_payloads", - "index_analyzer" : "fulltext_analyzer" + "analyzer" : "fulltext_analyzer" } } } diff --git a/docs/reference/mapping/fields/all-field.asciidoc b/docs/reference/mapping/fields/all-field.asciidoc index 137e129bbb3..d66dbdb5362 100644 --- a/docs/reference/mapping/fields/all-field.asciidoc +++ b/docs/reference/mapping/fields/all-field.asciidoc @@ -61,7 +61,7 @@ Here is a sample mapping: -------------------------------------------------- The `_all` fields allows for `store`, `term_vector` and `analyzer` (with -specific `index_analyzer` and `search_analyzer`) to be set. +specific `analyzer` and `search_analyzer`) to be set. [float] [[highlighting]] diff --git a/docs/reference/mapping/types/core-types.asciidoc b/docs/reference/mapping/types/core-types.asciidoc index 9ea2ef23d48..6226e73f543 100644 --- a/docs/reference/mapping/types/core-types.asciidoc +++ b/docs/reference/mapping/types/core-types.asciidoc @@ -130,14 +130,11 @@ is also possible to set it to `offsets` (doc numbers, term frequencies, positions and offsets). |`analyzer` |The analyzer used to analyze the text contents when -`analyzed` during indexing and when searching using a query string. +`analyzed` during indexing and searching. Defaults to the globally configured analyzer. -|`index_analyzer` |The analyzer used to analyze the text contents when -`analyzed` during indexing. - -|`search_analyzer` |The analyzer used to analyze the field when part of -a query string. Can be updated on an existing field. +|`search_analyzer` |The analyzer used to analyze the field when searching, which +overrides the value of `analyzer`. Can be updated on an existing field. |`include_in_all` |Should the field be included in the `_all` field (if enabled). If `index` is set to `no` this defaults to `false`, otherwise, @@ -627,10 +624,10 @@ the tokens aren't copied. [float] ==== Updating a field -In the essence a field can't be updated. However multi fields can be +In essence a field cannot be updated. However multi fields can be added to existing fields. This allows for example to have a different -`index_analyzer` configuration in addition to the already configured -`index_analyzer` configuration specified in the main and other multi fields. +`analyzer` configuration in addition to the already configured +`analyzer` configuration specified in the main and other multi fields. Also the new multi field will only be applied on document that have been added after the multi field has been added and in fact the new multi field diff --git a/docs/reference/mapping/types/root-object-type.asciidoc b/docs/reference/mapping/types/root-object-type.asciidoc index 9baeebbb448..fe16264b73f 100644 --- a/docs/reference/mapping/types/root-object-type.asciidoc +++ b/docs/reference/mapping/types/root-object-type.asciidoc @@ -27,16 +27,15 @@ explicitly set analyzers on their own. Here is an example: -------------------------------------------------- { "tweet" : { - "index_analyzer" : "standard", - "search_analyzer" : "standard" + "analyzer" : "standard", + "search_analyzer" : "standard_with_synonyms" } } -------------------------------------------------- -The above simply explicitly defines both the `index_analyzer` and -`search_analyzer` that will be used. There is also an option to use the -`analyzer` attribute to set both the `search_analyzer` and -`index_analyzer`. +The above simply explicitly defines both the `analyzer` and +`search_analyzer` that will be used. If `search_analyzer` is not specified, +it defaults to the value of `analyzer`. [float] ==== dynamic_date_formats diff --git a/docs/reference/search/suggesters/completion-suggest.asciidoc b/docs/reference/search/suggesters/completion-suggest.asciidoc index fbb87995d50..6a9220f5016 100644 --- a/docs/reference/search/suggesters/completion-suggest.asciidoc +++ b/docs/reference/search/suggesters/completion-suggest.asciidoc @@ -36,7 +36,7 @@ curl -X PUT localhost:9200/music/song/_mapping -d '{ "properties" : { "name" : { "type" : "string" }, "suggest" : { "type" : "completion", - "index_analyzer" : "simple", + "analyzer" : "simple", "search_analyzer" : "simple", "payloads" : true } @@ -47,16 +47,15 @@ curl -X PUT localhost:9200/music/song/_mapping -d '{ Mapping supports the following parameters: -`index_analyzer`:: +`analyzer`:: The index analyzer to use, defaults to `simple`. - -`search_analyzer`:: - The search analyzer to use, defaults to `simple`. In case you are wondering why we did not opt for the `standard` analyzer: We try to have easy to understand behaviour here, and if you index the field content `At the Drive-in`, you will not get any suggestions for `a`, nor for `d` (the first non stopword). +`search_analyzer`:: + The search analyzer to use, defaults to value of `analyzer`. `payloads`:: Enables the storing of payloads, defaults to `false` diff --git a/src/main/java/org/elasticsearch/index/mapper/core/AbstractFieldMapper.java b/src/main/java/org/elasticsearch/index/mapper/core/AbstractFieldMapper.java index 459c7162427..dffb8f30fb1 100644 --- a/src/main/java/org/elasticsearch/index/mapper/core/AbstractFieldMapper.java +++ b/src/main/java/org/elasticsearch/index/mapper/core/AbstractFieldMapper.java @@ -304,19 +304,14 @@ public abstract class AbstractFieldMapper implements FieldMapper { this.boost = boost; this.fieldType = fieldType; this.fieldType.freeze(); - - // automatically set to keyword analyzer if its indexed and not analyzed - if (indexAnalyzer == null && !this.fieldType.tokenized() && this.fieldType.indexOptions() != IndexOptions.NONE) { - this.indexAnalyzer = Lucene.KEYWORD_ANALYZER; + + if (indexAnalyzer == null && this.fieldType.tokenized() == false && this.fieldType.indexOptions() != IndexOptions.NONE) { + this.indexAnalyzer = this.searchAnalyzer = Lucene.KEYWORD_ANALYZER; } else { this.indexAnalyzer = indexAnalyzer; - } - // automatically set to keyword analyzer if its indexed and not analyzed - if (searchAnalyzer == null && !this.fieldType.tokenized() && this.fieldType.indexOptions() != IndexOptions.NONE) { - this.searchAnalyzer = Lucene.KEYWORD_ANALYZER; - } else { this.searchAnalyzer = searchAnalyzer; } + if (postingsFormat == null) { if (defaultPostingFormat() != null) { postingsFormat = PostingFormats.getAsProvider(defaultPostingFormat()); @@ -623,12 +618,12 @@ public abstract class AbstractFieldMapper implements FieldMapper { // null and "default"-named index analyzers both mean the default is used if (this.indexAnalyzer == null || "default".equals(this.indexAnalyzer.name())) { if (fieldMergeWith.indexAnalyzer != null && !"default".equals(fieldMergeWith.indexAnalyzer.name())) { - mergeContext.addConflict("mapper [" + names.fullName() + "] has different index_analyzer"); + mergeContext.addConflict("mapper [" + names.fullName() + "] has different analyzer"); } } else if (fieldMergeWith.indexAnalyzer == null || "default".equals(fieldMergeWith.indexAnalyzer.name())) { - mergeContext.addConflict("mapper [" + names.fullName() + "] has different index_analyzer"); + mergeContext.addConflict("mapper [" + names.fullName() + "] has different analyzer"); } else if (!this.indexAnalyzer.name().equals(fieldMergeWith.indexAnalyzer.name())) { - mergeContext.addConflict("mapper [" + names.fullName() + "] has different index_analyzer"); + mergeContext.addConflict("mapper [" + names.fullName() + "] has different analyzer"); } if (!this.names().equals(fieldMergeWith.names())) { @@ -733,34 +728,7 @@ public abstract class AbstractFieldMapper implements FieldMapper { builder.field("index_options", indexOptionToString(fieldType.indexOptions())); } - if (indexAnalyzer == null && searchAnalyzer == null) { - if (includeDefaults) { - builder.field("analyzer", "default"); - } - } else if (indexAnalyzer == null) { - // searchAnalyzer != null - if (includeDefaults || (!searchAnalyzer.name().startsWith("_") && !searchAnalyzer.name().equals("default"))) { - builder.field("search_analyzer", searchAnalyzer.name()); - } - } else if (searchAnalyzer == null) { - // indexAnalyzer != null - if (includeDefaults || (!indexAnalyzer.name().startsWith("_") && !indexAnalyzer.name().equals("default"))) { - builder.field("index_analyzer", indexAnalyzer.name()); - } - } else if (indexAnalyzer.name().equals(searchAnalyzer.name())) { - // indexAnalyzer == searchAnalyzer - if (includeDefaults || (!indexAnalyzer.name().startsWith("_") && !indexAnalyzer.name().equals("default"))) { - builder.field("analyzer", indexAnalyzer.name()); - } - } else { - // both are there but different - if (includeDefaults || (!indexAnalyzer.name().startsWith("_") && !indexAnalyzer.name().equals("default"))) { - builder.field("index_analyzer", indexAnalyzer.name()); - } - if (includeDefaults || (!searchAnalyzer.name().startsWith("_") && !searchAnalyzer.name().equals("default"))) { - builder.field("search_analyzer", searchAnalyzer.name()); - } - } + doXContentAnalyzers(builder, includeDefaults); if (postingsFormat != null) { if (includeDefaults || !postingsFormat.name().equals(defaultPostingFormat())) { @@ -803,6 +771,19 @@ public abstract class AbstractFieldMapper implements FieldMapper { copyTo.toXContent(builder, params); } } + + protected void doXContentAnalyzers(XContentBuilder builder, boolean includeDefaults) throws IOException { + if (indexAnalyzer == null) { + if (includeDefaults) { + builder.field("analyzer", "default"); + } + } else if (includeDefaults || indexAnalyzer.name().startsWith("_") == false && indexAnalyzer.name().equals("default") == false) { + builder.field("analyzer", indexAnalyzer.name()); + if (searchAnalyzer.name().equals(indexAnalyzer.name()) == false) { + builder.field("search_analyzer", searchAnalyzer.name()); + } + } + } protected static String indexOptionToString(IndexOptions indexOption) { switch (indexOption) { diff --git a/src/main/java/org/elasticsearch/index/mapper/core/CompletionFieldMapper.java b/src/main/java/org/elasticsearch/index/mapper/core/CompletionFieldMapper.java index b945f83cda1..05ed88426a0 100644 --- a/src/main/java/org/elasticsearch/index/mapper/core/CompletionFieldMapper.java +++ b/src/main/java/org/elasticsearch/index/mapper/core/CompletionFieldMapper.java @@ -29,6 +29,7 @@ import org.apache.lucene.search.suggest.analyzing.XAnalyzingSuggester; import org.apache.lucene.util.BytesRef; import org.elasticsearch.ElasticsearchIllegalArgumentException; import org.elasticsearch.ElasticsearchParseException; +import org.elasticsearch.Version; import org.elasticsearch.common.ParseField; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; @@ -87,7 +88,6 @@ public class CompletionFieldMapper extends AbstractFieldMapper { public static class Fields { // Mapping field names public static final String ANALYZER = "analyzer"; - public static final ParseField INDEX_ANALYZER = new ParseField("index_analyzer"); public static final ParseField SEARCH_ANALYZER = new ParseField("search_analyzer"); public static final ParseField PRESERVE_SEPARATORS = new ParseField("preserve_separators"); public static final ParseField PRESERVE_POSITION_INCREMENTS = new ParseField("preserve_position_increments"); @@ -159,6 +159,8 @@ public class CompletionFieldMapper extends AbstractFieldMapper { @Override public Mapper.Builder parse(String name, Map node, ParserContext parserContext) throws MapperParsingException { CompletionFieldMapper.Builder builder = completionField(name); + NamedAnalyzer indexAnalyzer = null; + NamedAnalyzer searchAnalyzer = null; for (Iterator> iterator = node.entrySet().iterator(); iterator.hasNext();) { Map.Entry entry = iterator.next(); String fieldName = entry.getKey(); @@ -166,16 +168,13 @@ public class CompletionFieldMapper extends AbstractFieldMapper { if (fieldName.equals("type")) { continue; } - if (fieldName.equals("analyzer")) { - NamedAnalyzer analyzer = getNamedAnalyzer(parserContext, fieldNode.toString()); - builder.indexAnalyzer(analyzer); - builder.searchAnalyzer(analyzer); - iterator.remove(); - } else if (Fields.INDEX_ANALYZER.match(fieldName)) { - builder.indexAnalyzer(getNamedAnalyzer(parserContext, fieldNode.toString())); + if (Fields.ANALYZER.equals(fieldName) || // index_analyzer is for backcompat, remove for v3.0 + fieldName.equals("index_analyzer") && parserContext.indexVersionCreated().before(Version.V_2_0_0)) { + + indexAnalyzer = getNamedAnalyzer(parserContext, fieldNode.toString()); iterator.remove(); } else if (Fields.SEARCH_ANALYZER.match(fieldName)) { - builder.searchAnalyzer(getNamedAnalyzer(parserContext, fieldNode.toString())); + searchAnalyzer = getNamedAnalyzer(parserContext, fieldNode.toString()); iterator.remove(); } else if (fieldName.equals(Fields.PAYLOADS)) { builder.payloads(Boolean.parseBoolean(fieldNode.toString())); @@ -198,14 +197,18 @@ public class CompletionFieldMapper extends AbstractFieldMapper { iterator.remove(); } } - - if (builder.searchAnalyzer == null) { - builder.searchAnalyzer(parserContext.analysisService().analyzer("simple")); - } - - if (builder.indexAnalyzer == null) { - builder.indexAnalyzer(parserContext.analysisService().analyzer("simple")); + + if (indexAnalyzer == null) { + if (searchAnalyzer != null) { + throw new MapperParsingException("analyzer on completion field [" + name + "] must be set when search_analyzer is set"); + } + indexAnalyzer = searchAnalyzer = parserContext.analysisService().analyzer("simple"); + } else if (searchAnalyzer == null) { + searchAnalyzer = indexAnalyzer; } + builder.indexAnalyzer(indexAnalyzer); + builder.searchAnalyzer(searchAnalyzer); + // we are just using this as the default to be wrapped by the CompletionPostingsFormatProvider in the SuggesteFieldMapper ctor builder.postingsFormat(parserContext.postingFormatService().get("default")); return builder; @@ -444,11 +447,10 @@ public class CompletionFieldMapper extends AbstractFieldMapper { public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { builder.startObject(name()) .field(Fields.TYPE, CONTENT_TYPE); - if (indexAnalyzer.name().equals(searchAnalyzer.name())) { - builder.field(Fields.ANALYZER, indexAnalyzer.name()); - } else { - builder.field(Fields.INDEX_ANALYZER.getPreferredName(), indexAnalyzer.name()) - .field(Fields.SEARCH_ANALYZER.getPreferredName(), searchAnalyzer.name()); + + builder.field(Fields.ANALYZER, indexAnalyzer.name()); + if (indexAnalyzer.name().equals(searchAnalyzer.name()) == false) { + builder.field(Fields.SEARCH_ANALYZER.getPreferredName(), searchAnalyzer.name()); } builder.field(Fields.PAYLOADS, this.payloads); builder.field(Fields.PRESERVE_SEPARATORS.getPreferredName(), this.preserveSeparators); diff --git a/src/main/java/org/elasticsearch/index/mapper/core/TypeParsers.java b/src/main/java/org/elasticsearch/index/mapper/core/TypeParsers.java index 6f06b4564e0..da8db331a80 100644 --- a/src/main/java/org/elasticsearch/index/mapper/core/TypeParsers.java +++ b/src/main/java/org/elasticsearch/index/mapper/core/TypeParsers.java @@ -182,6 +182,8 @@ public class TypeParsers { } public static void parseField(AbstractFieldMapper.Builder builder, String name, Map fieldNode, Mapper.TypeParser.ParserContext parserContext) { + NamedAnalyzer indexAnalyzer = null; + NamedAnalyzer searchAnalyzer = null; for (Iterator> iterator = fieldNode.entrySet().iterator(); iterator.hasNext();) { Map.Entry entry = iterator.next(); final String propName = Strings.toUnderscoreCase(entry.getKey()); @@ -249,27 +251,21 @@ public class TypeParsers { } else if (propName.equals("index_options")) { builder.indexOptions(nodeIndexOptionValue(propNode)); iterator.remove(); - } else if (propName.equals("analyzer")) { + } else if (propName.equals("analyzer") || // for backcompat, reading old indexes, remove for v3.0 + propName.equals("index_analyzer") && parserContext.indexVersionCreated().before(Version.V_2_0_0)) { + NamedAnalyzer analyzer = parserContext.analysisService().analyzer(propNode.toString()); if (analyzer == null) { throw new MapperParsingException("Analyzer [" + propNode.toString() + "] not found for field [" + name + "]"); } - builder.indexAnalyzer(analyzer); - builder.searchAnalyzer(analyzer); - iterator.remove(); - } else if (propName.equals("index_analyzer")) { - NamedAnalyzer analyzer = parserContext.analysisService().analyzer(propNode.toString()); - if (analyzer == null) { - throw new MapperParsingException("Analyzer [" + propNode.toString() + "] not found for field [" + name + "]"); - } - builder.indexAnalyzer(analyzer); + indexAnalyzer = analyzer; iterator.remove(); } else if (propName.equals("search_analyzer")) { NamedAnalyzer analyzer = parserContext.analysisService().analyzer(propNode.toString()); if (analyzer == null) { throw new MapperParsingException("Analyzer [" + propNode.toString() + "] not found for field [" + name + "]"); } - builder.searchAnalyzer(analyzer); + searchAnalyzer = analyzer; iterator.remove(); } else if (propName.equals("include_in_all")) { builder.includeInAll(nodeBooleanValue(propNode)); @@ -294,6 +290,16 @@ public class TypeParsers { iterator.remove(); } } + + if (indexAnalyzer == null) { + if (searchAnalyzer != null) { + throw new MapperParsingException("analyzer on field [" + name + "] must be set when search_analyzer is set"); + } + } else if (searchAnalyzer == null) { + searchAnalyzer = indexAnalyzer; + } + builder.indexAnalyzer(indexAnalyzer); + builder.searchAnalyzer(searchAnalyzer); } public static boolean parseMultiField(AbstractFieldMapper.Builder builder, String name, Mapper.TypeParser.ParserContext parserContext, String propName, Object propNode) { diff --git a/src/main/java/org/elasticsearch/index/mapper/internal/AllFieldMapper.java b/src/main/java/org/elasticsearch/index/mapper/internal/AllFieldMapper.java index e59ba964695..c2ebc1c9fed 100644 --- a/src/main/java/org/elasticsearch/index/mapper/internal/AllFieldMapper.java +++ b/src/main/java/org/elasticsearch/index/mapper/internal/AllFieldMapper.java @@ -304,36 +304,8 @@ public class AllFieldMapper extends AbstractFieldMapper implements Inter if (includeDefaults || fieldType.omitNorms() != Defaults.FIELD_TYPE.omitNorms()) { builder.field("omit_norms", fieldType.omitNorms()); } - - - if (indexAnalyzer == null && searchAnalyzer == null) { - if (includeDefaults) { - builder.field("analyzer", "default"); - } - } else if (indexAnalyzer == null) { - // searchAnalyzer != null - if (includeDefaults || !searchAnalyzer.name().startsWith("_")) { - builder.field("search_analyzer", searchAnalyzer.name()); - } - } else if (searchAnalyzer == null) { - // indexAnalyzer != null - if (includeDefaults || !indexAnalyzer.name().startsWith("_")) { - builder.field("index_analyzer", indexAnalyzer.name()); - } - } else if (indexAnalyzer.name().equals(searchAnalyzer.name())) { - // indexAnalyzer == searchAnalyzer - if (includeDefaults || !indexAnalyzer.name().startsWith("_")) { - builder.field("analyzer", indexAnalyzer.name()); - } - } else { - // both are there but different - if (includeDefaults || !indexAnalyzer.name().startsWith("_")) { - builder.field("index_analyzer", indexAnalyzer.name()); - } - if (includeDefaults || !searchAnalyzer.name().startsWith("_")) { - builder.field("search_analyzer", searchAnalyzer.name()); - } - } + + doXContentAnalyzers(builder, includeDefaults); if (similarity() != null) { builder.field("similarity", similarity().name()); diff --git a/src/test/java/org/elasticsearch/index/mapper/completion/CompletionFieldMapperTests.java b/src/test/java/org/elasticsearch/index/mapper/completion/CompletionFieldMapperTests.java index 0e0625d74bc..c3bd01e75eb 100644 --- a/src/test/java/org/elasticsearch/index/mapper/completion/CompletionFieldMapperTests.java +++ b/src/test/java/org/elasticsearch/index/mapper/completion/CompletionFieldMapperTests.java @@ -57,7 +57,7 @@ public class CompletionFieldMapperTests extends ElasticsearchSingleNodeTest { String mapping = jsonBuilder().startObject().startObject("type1") .startObject("properties").startObject("completion") .field("type", "completion") - .field("index_analyzer", "simple") + .field("analyzer", "simple") .field("search_analyzer", "standard") .field("payloads", true) .field("preserve_separators", false) @@ -78,7 +78,7 @@ public class CompletionFieldMapperTests extends ElasticsearchSingleNodeTest { builder.close(); Map serializedMap = JsonXContent.jsonXContent.createParser(builder.bytes()).mapAndClose(); Map configMap = (Map) serializedMap.get("completion"); - assertThat(configMap.get("index_analyzer").toString(), is("simple")); + assertThat(configMap.get("analyzer").toString(), is("simple")); assertThat(configMap.get("search_analyzer").toString(), is("standard")); assertThat(Boolean.valueOf(configMap.get("payloads").toString()), is(true)); assertThat(Boolean.valueOf(configMap.get("preserve_separators").toString()), is(false)); @@ -91,7 +91,7 @@ public class CompletionFieldMapperTests extends ElasticsearchSingleNodeTest { String mapping = jsonBuilder().startObject().startObject("type1") .startObject("properties").startObject("completion") .field("type", "completion") - .field("index_analyzer", "simple") + .field("analyzer", "simple") .field("search_analyzer", "simple") .endObject().endObject() .endObject().endObject().string(); diff --git a/src/test/java/org/elasticsearch/index/mapper/merge/TestMergeMapperTests.java b/src/test/java/org/elasticsearch/index/mapper/merge/TestMergeMapperTests.java index 3dfcd9f18de..7cf13d15410 100644 --- a/src/test/java/org/elasticsearch/index/mapper/merge/TestMergeMapperTests.java +++ b/src/test/java/org/elasticsearch/index/mapper/merge/TestMergeMapperTests.java @@ -106,10 +106,10 @@ public class TestMergeMapperTests extends ElasticsearchSingleNodeTest { public void testMergeSearchAnalyzer() throws Exception { DocumentMapperParser parser = createIndex("test").mapperService().documentMapperParser(); String mapping1 = XContentFactory.jsonBuilder().startObject().startObject("type") - .startObject("properties").startObject("field").field("type", "string").field("search_analyzer", "whitespace").endObject().endObject() + .startObject("properties").startObject("field").field("type", "string").field("analyzer", "standard").field("search_analyzer", "whitespace").endObject().endObject() .endObject().endObject().string(); String mapping2 = XContentFactory.jsonBuilder().startObject().startObject("type") - .startObject("properties").startObject("field").field("type", "string").field("search_analyzer", "keyword").endObject().endObject() + .startObject("properties").startObject("field").field("type", "string").field("analyzer", "standard").field("search_analyzer", "keyword").endObject().endObject() .endObject().endObject().string(); DocumentMapper existing = parser.parse(mapping1); @@ -123,13 +123,13 @@ public class TestMergeMapperTests extends ElasticsearchSingleNodeTest { } @Test - public void testNotChangeSearchAnalyzer() throws Exception { + public void testChangeSearchAnalyzerToDefault() throws Exception { DocumentMapperParser parser = createIndex("test").mapperService().documentMapperParser(); String mapping1 = XContentFactory.jsonBuilder().startObject().startObject("type") - .startObject("properties").startObject("field").field("type", "string").field("search_analyzer", "whitespace").endObject().endObject() + .startObject("properties").startObject("field").field("type", "string").field("analyzer", "standard").field("search_analyzer", "whitespace").endObject().endObject() .endObject().endObject().string(); String mapping2 = XContentFactory.jsonBuilder().startObject().startObject("type") - .startObject("properties").startObject("field").field("type", "string").field("postings_format", "Lucene41").endObject().endObject() + .startObject("properties").startObject("field").field("type", "string").field("analyzer", "standard").field("postings_format", "Lucene41").endObject().endObject() .endObject().endObject().string(); DocumentMapper existing = parser.parse(mapping1); @@ -139,7 +139,7 @@ public class TestMergeMapperTests extends ElasticsearchSingleNodeTest { DocumentMapper.MergeResult mergeResult = existing.merge(changed, mergeFlags().simulate(false)); assertThat(mergeResult.hasConflicts(), equalTo(false)); - assertThat(((NamedAnalyzer) existing.mappers().name("field").mapper().searchAnalyzer()).name(), equalTo("whitespace")); + assertThat(((NamedAnalyzer) existing.mappers().name("field").mapper().searchAnalyzer()).name(), equalTo("standard")); assertThat((existing.mappers().name("field").mapper().postingsFormatProvider()).name(), equalTo("Lucene41")); } diff --git a/src/test/java/org/elasticsearch/index/mapper/update/UpdateMappingOnClusterTests.java b/src/test/java/org/elasticsearch/index/mapper/update/UpdateMappingOnClusterTests.java index 1ac22f2e0ef..23c0df86c36 100644 --- a/src/test/java/org/elasticsearch/index/mapper/update/UpdateMappingOnClusterTests.java +++ b/src/test/java/org/elasticsearch/index/mapper/update/UpdateMappingOnClusterTests.java @@ -65,7 +65,7 @@ public class UpdateMappingOnClusterTests extends ElasticsearchIntegrationTest { "[_all] has different store_term_vector_offsets values", "[_all] has different store_term_vector_positions values", "[_all] has different store_term_vector_payloads values", - "[_all] has different index_analyzer", + "[_all] has different analyzer", "[_all] has different similarity"}; // auto_boost and fielddata and search_analyzer should not report conflict testConflict(mapping, mappingUpdate, errorMessage); diff --git a/src/test/java/org/elasticsearch/index/mapper/update/all_mapping_create_index.json b/src/test/java/org/elasticsearch/index/mapper/update/all_mapping_create_index.json index 60f3f523a6e..bda6b7bf684 100644 --- a/src/test/java/org/elasticsearch/index/mapper/update/all_mapping_create_index.json +++ b/src/test/java/org/elasticsearch/index/mapper/update/all_mapping_create_index.json @@ -9,7 +9,7 @@ "store_term_vector_positions": true, "store_term_vector_payloads": true, "omit_norms": true, - "index_analyzer": "standard", + "analyzer": "standard", "search_analyzer": "whitespace", "similarity": "my_similarity", "fielddata": { diff --git a/src/test/java/org/elasticsearch/index/mapper/update/all_mapping_update_with_conflicts.json b/src/test/java/org/elasticsearch/index/mapper/update/all_mapping_update_with_conflicts.json index cc5ad0ec7f1..893804006d4 100644 --- a/src/test/java/org/elasticsearch/index/mapper/update/all_mapping_update_with_conflicts.json +++ b/src/test/java/org/elasticsearch/index/mapper/update/all_mapping_update_with_conflicts.json @@ -9,7 +9,7 @@ "store_term_vector_positions": false, "store_term_vector_payloads": false, "omit_norms": false, - "index_analyzer": "whitespace", + "analyzer": "whitespace", "search_analyzer": "standard", "similarity": "bm25", "fielddata": { diff --git a/src/test/java/org/elasticsearch/search/highlight/HighlighterSearchTests.java b/src/test/java/org/elasticsearch/search/highlight/HighlighterSearchTests.java index 26be5ddf3a5..51134198f19 100644 --- a/src/test/java/org/elasticsearch/search/highlight/HighlighterSearchTests.java +++ b/src/test/java/org/elasticsearch/search/highlight/HighlighterSearchTests.java @@ -91,7 +91,7 @@ public class HighlighterSearchTests extends ElasticsearchIntegrationTest { .startObject("fields") .startObject("autocomplete") .field("type", "string") - .field("index_analyzer", "autocomplete") + .field("analyzer", "autocomplete") .field("search_analyzer", "search_autocomplete") .field("term_vector", "with_positions_offsets") .endObject() @@ -143,7 +143,7 @@ public class HighlighterSearchTests extends ElasticsearchIntegrationTest { * query. We cut off and extract terms if there are more than 16 terms in the query */ assertAcked(prepareCreate("test") - .addMapping("test", "body", "type=string,index_analyzer=custom_analyzer,search_analyzer=custom_analyzer,term_vector=with_positions_offsets") + .addMapping("test", "body", "type=string,analyzer=custom_analyzer,search_analyzer=custom_analyzer,term_vector=with_positions_offsets") .setSettings( settingsBuilder().put(indexSettings()) .put("analysis.filter.wordDelimiter.type", "word_delimiter") @@ -173,8 +173,8 @@ public class HighlighterSearchTests extends ElasticsearchIntegrationTest { assertAcked(prepareCreate("test") .addMapping("test", - "name", "type=string,index_analyzer=name_index_analyzer,search_analyzer=name_search_analyzer," + randomStoreField() + "term_vector=with_positions_offsets", - "name2", "type=string,index_analyzer=name2_index_analyzer,search_analyzer=name_search_analyzer," + randomStoreField() + "term_vector=with_positions_offsets") + "name", "type=string,analyzer=name_index_analyzer,search_analyzer=name_search_analyzer," + randomStoreField() + "term_vector=with_positions_offsets", + "name2", "type=string,analyzer=name2_index_analyzer,search_analyzer=name_search_analyzer," + randomStoreField() + "term_vector=with_positions_offsets") .setSettings(settingsBuilder() .put(indexSettings()) .put("analysis.filter.my_ngram.max_gram", 20) @@ -240,8 +240,8 @@ public class HighlighterSearchTests extends ElasticsearchIntegrationTest { public void testNgramHighlighting() throws ElasticsearchException, IOException { assertAcked(prepareCreate("test") .addMapping("test", - "name", "type=string,index_analyzer=name_index_analyzer,search_analyzer=name_search_analyzer,term_vector=with_positions_offsets", - "name2", "type=string,index_analyzer=name2_index_analyzer,search_analyzer=name_search_analyzer,term_vector=with_positions_offsets") + "name", "type=string,analyzer=name_index_analyzer,search_analyzer=name_search_analyzer,term_vector=with_positions_offsets", + "name2", "type=string,analyzer=name2_index_analyzer,search_analyzer=name_search_analyzer,term_vector=with_positions_offsets") .setSettings(settingsBuilder() .put(indexSettings()) .put("analysis.filter.my_ngram.max_gram", 20) diff --git a/src/test/java/org/elasticsearch/search/query/SearchQueryTests.java b/src/test/java/org/elasticsearch/search/query/SearchQueryTests.java index e9a6e768226..47a92b496fe 100644 --- a/src/test/java/org/elasticsearch/search/query/SearchQueryTests.java +++ b/src/test/java/org/elasticsearch/search/query/SearchQueryTests.java @@ -1665,7 +1665,7 @@ public class SearchQueryTests extends ElasticsearchIntegrationTest { .putArray("index.analysis.analyzer.search.filter", "lowercase", "synonym") .put("index.analysis.filter.synonym.type", "synonym") .putArray("index.analysis.filter.synonym.synonyms", "fast, quick")); - assertAcked(builder.addMapping("test", "text", "type=string,index_analyzer=index,search_analyzer=search")); + assertAcked(builder.addMapping("test", "text", "type=string,analyzer=index,search_analyzer=search")); ensureGreen(); client().prepareIndex("test", "test", "1").setSource("text", "quick brown fox").get(); refresh(); @@ -1696,7 +1696,7 @@ public class SearchQueryTests extends ElasticsearchIntegrationTest { .putArray("index.analysis.analyzer.search.filter", "lowercase", "keyword_repeat", "porterStem", "unique_stem") .put("index.analysis.filter.unique_stem.type", "unique") .put("index.analysis.filter.unique_stem.only_on_same_position", true)); - assertAcked(builder.addMapping("test", "text", "type=string,index_analyzer=index,search_analyzer=search")); + assertAcked(builder.addMapping("test", "text", "type=string,analyzer=index,search_analyzer=search")); ensureGreen(); client().prepareIndex("test", "test", "1").setSource("text", "the fox runs across the street").get(); refresh(); @@ -1721,7 +1721,7 @@ public class SearchQueryTests extends ElasticsearchIntegrationTest { .putArray("index.analysis.analyzer.search.filter", "lowercase", "synonym") .put("index.analysis.filter.synonym.type", "synonym") .putArray("index.analysis.filter.synonym.synonyms", "fast, quick")); - assertAcked(builder.addMapping("test", "text", "type=string,index_analyzer=index,search_analyzer=search")); + assertAcked(builder.addMapping("test", "text", "type=string,analyzer=index,search_analyzer=search")); ensureGreen(); client().prepareIndex("test", "test", "1").setSource("text", "quick brown fox").get(); @@ -2346,7 +2346,7 @@ public class SearchQueryTests extends ElasticsearchIntegrationTest { .put("index.analysis.tokenizer.my_ngram_tokenizer.min_gram", "1") .put("index.analysis.tokenizer.my_ngram_tokenizer.max_gram", "10") .putArray("index.analysis.tokenizer.my_ngram_tokenizer.token_chars", new String[0])); - assertAcked(builder.addMapping("test", "origin", "type=string,copy_to=meta", "meta", "type=string,index_analyzer=my_ngram_analyzer")); + assertAcked(builder.addMapping("test", "origin", "type=string,copy_to=meta", "meta", "type=string,analyzer=my_ngram_analyzer")); // we only have ngrams as the index analyzer so searches will get standard analyzer ensureGreen(); diff --git a/src/test/java/org/elasticsearch/search/rescore/QueryRescorerTests.java b/src/test/java/org/elasticsearch/search/rescore/QueryRescorerTests.java index 46015b8ce9b..9c60b1ac612 100644 --- a/src/test/java/org/elasticsearch/search/rescore/QueryRescorerTests.java +++ b/src/test/java/org/elasticsearch/search/rescore/QueryRescorerTests.java @@ -142,7 +142,7 @@ public class QueryRescorerTests extends ElasticsearchIntegrationTest { builder.putArray("index.analysis.filter.synonym.synonyms", "ave => ave, avenue", "street => str, street"); XContentBuilder mapping = XContentFactory.jsonBuilder().startObject().startObject("type1").startObject("properties") - .startObject("field1").field("type", "string").field("index_analyzer", "whitespace").field("search_analyzer", "synonym") + .startObject("field1").field("type", "string").field("analyzer", "whitespace").field("search_analyzer", "synonym") .endObject().endObject().endObject().endObject(); assertAcked(client().admin().indices().prepareCreate("test").addMapping("type1", mapping).setSettings(builder.put("index.number_of_shards", 1))); @@ -221,7 +221,7 @@ public class QueryRescorerTests extends ElasticsearchIntegrationTest { builder.putArray("index.analysis.filter.synonym.synonyms", "ave => ave, avenue", "street => str, street"); XContentBuilder mapping = XContentFactory.jsonBuilder().startObject().startObject("type1").startObject("properties") - .startObject("field1").field("type", "string").field("index_analyzer", "whitespace").field("search_analyzer", "synonym") + .startObject("field1").field("type", "string").field("analyzer", "whitespace").field("search_analyzer", "synonym") .endObject().endObject().endObject().endObject(); assertAcked(client().admin().indices().prepareCreate("test").addMapping("type1", mapping).setSettings(builder.put("index.number_of_shards", 1))); @@ -292,7 +292,7 @@ public class QueryRescorerTests extends ElasticsearchIntegrationTest { builder.putArray("index.analysis.filter.synonym.synonyms", "ave => ave, avenue", "street => str, street"); XContentBuilder mapping = XContentFactory.jsonBuilder().startObject().startObject("type1").startObject("properties") - .startObject("field1").field("type", "string").field("index_analyzer", "whitespace").field("search_analyzer", "synonym") + .startObject("field1").field("type", "string").field("analyzer", "whitespace").field("search_analyzer", "synonym") .endObject().endObject().endObject().endObject(); assertAcked(client().admin().indices().prepareCreate("test").addMapping("type1", mapping).setSettings(builder.put("index.number_of_shards", 1))); diff --git a/src/test/java/org/elasticsearch/search/suggest/CompletionSuggestSearchTests.java b/src/test/java/org/elasticsearch/search/suggest/CompletionSuggestSearchTests.java index 490bf0ee9d7..ddff40e8d5b 100644 --- a/src/test/java/org/elasticsearch/search/suggest/CompletionSuggestSearchTests.java +++ b/src/test/java/org/elasticsearch/search/suggest/CompletionSuggestSearchTests.java @@ -503,7 +503,7 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { .field("path", "just_name") .startObject("fields") .startObject(FIELD).field("type", "string").endObject() - .startObject("suggest").field("type", "completion").field("index_analyzer", "simple").field("search_analyzer", "simple").endObject() + .startObject("suggest").field("type", "completion").field("analyzer", "simple").endObject() .endObject() .endObject() .endObject().endObject() @@ -548,7 +548,7 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { .field("type", "string") .field("path", "just_name") // Need to specify path again, to make sure that the `path` is known when this mapping is parsed and turned into DocumentMapper that we merge with. .startObject("fields") - .startObject("suggest").field("type", "completion").field("index_analyzer", "simple").field("search_analyzer", "simple").endObject() + .startObject("suggest").field("type", "completion").field("analyzer", "simple").endObject() .endObject() .endObject() .endObject().endObject() @@ -899,7 +899,7 @@ public class CompletionSuggestSearchTests extends ElasticsearchIntegrationTest { .startObject(TYPE).startObject("properties") .startObject(FIELD) .field("type", "completion") - .field("index_analyzer", completionMappingBuilder.indexAnalyzer) + .field("analyzer", completionMappingBuilder.indexAnalyzer) .field("search_analyzer", completionMappingBuilder.searchAnalyzer) .field("payloads", completionMappingBuilder.payloads) .field("preserve_separators", completionMappingBuilder.preserveSeparators) diff --git a/src/test/java/org/elasticsearch/search/suggest/ContextSuggestSearchTests.java b/src/test/java/org/elasticsearch/search/suggest/ContextSuggestSearchTests.java index 206ba35b1ac..c8cdfeb5581 100644 --- a/src/test/java/org/elasticsearch/search/suggest/ContextSuggestSearchTests.java +++ b/src/test/java/org/elasticsearch/search/suggest/ContextSuggestSearchTests.java @@ -167,8 +167,7 @@ public class ContextSuggestSearchTests extends ElasticsearchIntegrationTest { mapping.endObject(); mapping.startObject(FIELD); mapping.field("type", "completion"); - mapping.field("index_analyzer", "simple"); - mapping.field("search_analyzer", "simple"); + mapping.field("analyzer", "simple"); mapping.startObject("context"); mapping.value(ContextBuilder.location("st", 5, true).field("pin").build()); @@ -972,7 +971,7 @@ public class ContextSuggestSearchTests extends ElasticsearchIntegrationTest { mapping.startObject("properties"); mapping.startObject(FIELD); mapping.field("type", "completion"); - mapping.field("index_analyzer", indexAnalyzer); + mapping.field("analyzer", indexAnalyzer); mapping.field("search_analyzer", searchAnalyzer); mapping.field("payloads", payloads); mapping.field("preserve_separators", preserveSeparators); diff --git a/src/test/java/org/elasticsearch/search/suggest/SuggestSearchTests.java b/src/test/java/org/elasticsearch/search/suggest/SuggestSearchTests.java index 96a241d5959..171c024fe24 100644 --- a/src/test/java/org/elasticsearch/search/suggest/SuggestSearchTests.java +++ b/src/test/java/org/elasticsearch/search/suggest/SuggestSearchTests.java @@ -175,7 +175,7 @@ public class SuggestSearchTests extends ElasticsearchIntegrationTest { .endObject() .startObject("name_shingled") .field("type", "string") - .field("index_analyzer", "biword") + .field("analyzer", "biword") .field("search_analyzer", "standard") .endObject() .endObject() @@ -251,7 +251,7 @@ public class SuggestSearchTests extends ElasticsearchIntegrationTest { .endObject() .startObject("name_shingled") .field("type", "string") - .field("index_analyzer", "biword") + .field("analyzer", "biword") .field("search_analyzer", "standard") .endObject() .endObject() diff --git a/src/test/java/org/elasticsearch/snapshots/SharedClusterSnapshotRestoreTests.java b/src/test/java/org/elasticsearch/snapshots/SharedClusterSnapshotRestoreTests.java index 14dc7a71673..894b09efd6f 100644 --- a/src/test/java/org/elasticsearch/snapshots/SharedClusterSnapshotRestoreTests.java +++ b/src/test/java/org/elasticsearch/snapshots/SharedClusterSnapshotRestoreTests.java @@ -1480,7 +1480,7 @@ public class SharedClusterSnapshotRestoreTests extends AbstractSnapshotTests { assertAcked(prepareCreate("test-idx", 2, indexSettings)); int numberOfShards = getNumShards("test-idx").numPrimaries; - assertAcked(client().admin().indices().preparePutMapping("test-idx").setType("type1").setSource("field1", "type=string,search_analyzer=my_analyzer")); + assertAcked(client().admin().indices().preparePutMapping("test-idx").setType("type1").setSource("field1", "type=string,analyzer=standard,search_analyzer=my_analyzer")); final int numdocs = randomIntBetween(10, 100); IndexRequestBuilder[] builders = new IndexRequestBuilder[numdocs]; for (int i = 0; i < builders.length; i++) { diff --git a/src/test/resources/org/elasticsearch/bwcompat/index-1.4.2.zip b/src/test/resources/org/elasticsearch/bwcompat/index-1.4.2.zip index 7d5e543485765a7387bedb1224aa418c19cbf1b6..1c654e012dd2615d6e964d7439f70bf4354db0f9 100644 GIT binary patch literal 23872 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 F{s&OCcdq~d diff --git a/src/test/resources/org/elasticsearch/bwcompat/repo-1.4.2.zip b/src/test/resources/org/elasticsearch/bwcompat/repo-1.4.2.zip index fa0d69453916a920db08155541dd0c7c171b9d48..1d8f9457f551eb46828c84ee1d4ffb3be348527a 100644 GIT binary patch literal 20651 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 literal 36410 zcmd431yEkwx-5#jySoQ>g1fsUxVr@n?(XjH?vUW_PH=*|yW1mc?RC!C*>5HLzWb{7 zq3VYu1tULQbN1J>yT_1|1O|Zu`0?@1|Gmf`fB45IPyieNTfsyKmY&`l(%n``==i_R|^fqc>C8MFQ~tM+|Hg1a|KnZ#@dfsOtZk}qX!n2c7XRlmNIx(0ss``UF`>m5Px8Av$+}E_VzdHH*C@WW;JbX`d=Yg+nzy8yPuY+9;Kae0|h5 zsnQh8a-$rvs_t00z@E&YY=DG{0I4rx3~4fbx-kLsCUR6}R-5s;-@$~ytULgs{whHH z(=RdBc|Au2JLqe?o4UUVq*Wbgz@LM>J{_*RgrKMz~rhM2)PD~j8 z0fbSGu}PLOhyf!L5F}i|lOEh^j{)ebjz7dnSx=2nYt3{^+!GPuYfjHrniA;lQ;yG5 zPEX9p6Bk~Qy*xuyw{DSfwlRXWK}RBR0|XfyOD1>wN4jbX4&U;wF6xyLzjF5WItq?> z7Mj93c3)@;aOF`rC1`;((&WbCUee%3(3Su)5s|)t1QE0VGBPv*kUt3MAKdjuK7SCzA9prAowhc^FRz$#RB00& z<-6w*Yo?t_(;8FDS}QCp3&_~~g(D?#fm&>cg5!b(v+4nZ<#d|T*mQcP(rCx*iCh6f zAM|=1P*6IFPV>Q0^@@C97YeAHKp!Ww=$q#eixt+2Ligs&mD`=i*Yx|xlYz6GFV*`j z2l4qShb^0P0{!FhT}S``W5`zn61hjy>EFKXERlX$2iZ-lQd)QN0(8Qo>6pWa0DvIY zNz;3DB;$Q0b^#>w6nl~+g%^q`zszVy6ngJ1cE5DmoT)H0IUi6zafz!}w5j5=?b5qI zBm{w|j35;S{@sV@F*Z0plCs(6zUEdG<5(QLRo9=U% zAfE3q&4)OPh6+;bbSzxpuF^-wM!YwZM{w9s35RvAS z+UL55d5(#=qnN`Il0n$^qXEae!2;ria5dptUfZXvof%iBDOJq9avwRT9TprK8hpX` zWZS?DZnEiX{yjIQ4TTJTa;k+k0=exS86+C))g8ow>w{f*Pc9(l1;y4P9p2d(S=m5C zKHe)^q8a#!VgS$>8d*zJ%e0tsAA=owZ0oE~8wHg5I21s?mL-eBQ9@&J=K<+PA(BK; z9R}IMs=&u6MNvl$yyKdG2qe!HD=iT@P@ZGRVNS?5-K&V}hyvw?BJ|lS_F>4=&4usS zi;y@GIGd{RwlW8^g2u3ujhU?IM5MV)4u%rBbqS8vuwhL>@eHna+E@UNz1A{U*=b?K zPdxvaD`~)SeSOPmnOok<2gyq#8|MZaE?JXf_TY`T8Nbr@;@#;h7#JXmlp7e?;&L^Q z(L>FZ{z4VV}kW6$K?)>w~_D`KqXn}G;?3@Q%H9oQ)Sw^4i$ z0A)sKPqNJyuD=Ks55t+oa1R2O!J<@)+J6bDGzS(*Xcbq>Dq3>qg(gM)DQHfY*giK319_F19`V1xEOGNX-}=lPDpY$3#@NtBYxtXT6^GL^3s z*TG7rxQRS*Up${g54ac@SzbOrp|-lYyKB-_YPUC)qgSHNTFXOsO@HrmOg@LOI|KL* z$CJH=A1N<(+fRuXAwM9hkJ8!A5OPK=TOGIZu!Z-6^?J}biu~%K-E!N{YjM!>`RLvN(?cax=W)k0j;mwIZ>pk)&q z=D%d{FnYVN}>hOVCrtDbx`>j?Nq2V zXKsuXxJ>TP9!8EqGUhbk&F;nMrk0ijndu^M?w)2Q)=x9OS_2EA~vhkmr+0U!dGN@_f87 zKpIk{kvipA+gxEDo6%b}_8snkFBN=poRlLviMpWe9>n2>N?I#Pvw`;)RDhGm%|T4z zqGtKX=k;})PM6BZPM0k$UUO%3D~i(DiR@Mae*uy10Gr-0v?-0SxI8xPO+rnQ(v&$?e)4+P~T8p?th zv%4Z}v&1wv;l)$cY;xWfDyvR!01HYl0O%B-mzTRyQaVWFJw&IY?lL1_z+;_KQhdNO zf_LDNdmbMaz7H{nP*ppUqgoI|AipTXd@*i4-XVRBmuwZV;Z@ z#o3S&fpu8FC@X=lMb^~TOsgcAa30Z6&Xs*d09DA_o*z`zIos!iZ}?KjhfvN{iI0}b z`xE zg)HF*lG>|<-ra|NTp^F(2WIo`OINkV5Fm>f4wcR3gt~RSi$KYA2H!@=q9Uo1kk6oJPOm(Rg_E?Ld(WpcuTc2FPJMRM+ z{DA0Wiy;Qv&SSTzAnRG->hTzY`@o->qUmv`0+ zhlwT1uB|TnT`8?~3aaE_Kr?vHw>`7VI-#hZ@DXXKCft7hy)A&U*}}-lpa!TQ!$a6b zA2G-{$?_fP<0=P>?1?MP?@qI32cwtU6aP2sPD#$gYDlF^m1YE(ez&8oMFq92UEaq{;xJ z%Y@jYL4>1YomT@^d(JqFR>yDlv3rf>eXC62FxHkx!q;k`7Iu7?!30Vva`wiq!3e!A zJ#ngc_K0SAuq0x-eFtPYt-$nXfe>UMuxjqr!V!Rms{C`&C3-!dh!H5EnrI9d46bEM zf(cxxbYVGp4G2p^#j%dP7e5H$V`Z5(qJg5>(2(W$#?? zJIAFP3rX)9G)>vQ<3`nSf{>dIw)wU+p9kL~I^cWmt5ufKDzi**Q9{f&Mvfrl?NkfI@;Cxc*R0K8#>W7MPqHO(<$*F9>l{Ms&Zyo0}3t2R{R+ibu zFP)h#jdoh|wbO#nOTO53n>Wv@4OeU5s%IZpGIxOqK+pj?U+B3GJ04FZr=a`MeC7=L zr~`%rQVXsH6#J~G{o<|Xbaq(E8jB~JSC49asMc+|#9x*ssJ3;*_W3qhj1`T;b>Z@J z(|6OcReT(`PWH&_Pg*tI0jPGNBu39d5>;cwUh8!!7o%(go=y;8Oz`3_Aj!y#IVA7K zVTwgFaCuU2F>yIrd7@Lfc&@)+jZk;pd1hYKJYF>qJZy)4C_x_?eK;s-Y*cHn)2%4` zz~;@bGhJMWU2p1JI8w&V^$;RAjmBJt+)A+*3XMg%pQqFZ#sa`LL|k>2y{c5tr?Vz& zfVmEzYV;YjcAY&2)5+3vcr0mMl+B{k;tTb{)5MK$!Y-Vu)}v-W7#yz>&iL|95{4fS z2E{jwEi)g=>5B&XUTcXz=JCNid&WmY)hB3LVBtY?o(eay9lF8rs4Jp&~-Xw6tKmh7`S9`WJ12~DwFSnjd~XWGd!UtSNtE1iqAl9^+5G8Rn|7_}1* zgG2Q5563)2((c#Yw8f{-(ee3h3R7hkZA~l3c_qV=y?m zB++2_9v?00qYTmAkPsWZ(YS<(mbQ=lv1&Pu zJ|-`)PadPm2a2t#m{{imC*_OZ#e5v&wsGgUc0b9ydMd~78f*V&Qgzi#-}^VL1omIi z$iG3V-8qQ~3Y`F8)Z_%rzODbIK(qNtOWp6PQWF5z)gXQ1RH7i*-&BpH+-OtN?AT?e-LX8Ce%)9(4P^}f14{dkixbD zZ)4_%t^W%vf#bJ`{La3vVf>H#`a6Am=!~_!sXzQ{fg(K>0_8O4KaKs5^t(0GKaCvd z7D}>qPyhfxxL+cp`zvJXRsK}-n5T>8)&l9Q!Am>+72m`N#dEJ$Ur^Licff%xKOqYe z)Aoh4#Yb2fJ)BuAOpfAeizndW68k%TsCoFUeqTMmQO@}``nI|_lPa?oX zT-|r|L4na$eZ0I`mf50Fg9aY-XuCiO?a0C5Hzd_Ay&-@F30myh{w*B7uv0n(cMZ3Qo`tpaRCpe<8I11Lkx!KoCv z-&4cz#W9=$dA2Lm-?rOA256Z#mUrwaCELA$(_P82uJB!`N;uph`bD?`BCfC}hd<+E zjZu8DVYwRan58AutZGpt4I@zsORt>T{xnu-Xue_D9RVKJ3@9?%V6uo_+smSOti`jF z!i#dP+B;QL_^y^?k1yKalvBeVQ!6Zr_afG;MH;KFza<`rb&iCpTd$at6VSm~)f*CO zQzW{pTYsTx7t6nw&>bujS3gDM5uv56d^8EOw+uNXHfoi#?;4WCnNj3Hr}?&Eu{mn8 zt3{MrLG;;Vx1k1YZ%f<&9uq;RQuYFTtKp`<0hF`hbnoZ@?)ZCsbK#dt-tX(@k3Eil zsoSqUNlrnx+Vyv+9xl7-sU!06Bu~Nn=V_^@u6S)PX^=AccptmL+qys5>IF0S_r#DC z#3p%flHd`ag9Muk5P|s!Nr;v3#WsPT$i+-mNhk@+nF=a{D&zYGFcj!WPoQ+D#i(?U zzJJp9!2?g`hdCDi2>S%_q~V8u|Ji~Iiq=Q6E0ErML-b=_Fg6xajt7vwR-ac3vQCP} zmtf5PVHc33f`KD|)o;~$;1RK;$8`g?HcZjyl)A*X?9tSNGSLONYv-;;DHSIg3KI!B)t=(Q$gQNzxmv;sf84AvN`6DSfy;IfM*^x`_#Rpg66+laE-F z>foS6`E0|Uw$K5Lg9l}sv}?@qbOGkU)ukK3dvx~ZEn$KOA%fq@yyvs!=ljGz0h&%b zzwbkczDMg6umL z_(7Bafve7_3=%c3JulZq?&^k3aBpcQXmv+d6J|eikb9el)5OUFF>;v~p*Ybl@Fk;B z^l=Ym=axt+wLVtrl^`R>5}YLuk0PW^QW?0Y;fN^0l1+B{cc>+wf~AG2R>nqFh)^{$ z@1I97zQTUPCA9cL;HtNwl~;E*8yTwY(euT)$y)mv`=7-FkB%+DUxk2Qj7q&<4TOJ3 zJp7B_^&b6Czw5|bPKp)ioF{*<*twW2Kxg^QM zKM^cMk~t@KMlxS+(6BLLptdH7LVUa2iyO6CBO&_ z?GNdo{;$$u-nMTE@h4>P7TmXEAOHXq-gMUAcO`xqSS^3hv{33t<*_?iZuZow^qjA6 z)mjP-5B3djd~KE_(6RsqMKXIq3MoRH(?Tlk3w=_QkH^29;<+M35_1>GT7b)hkDb&dXZh>xLlqSj5=uVIl<&3U-YC zQGI^#qQ+>wU+i_k^U)U-%`nnXU5{vSnC)6 zu@N>h<3uy)$~iRh!fkK>SREFV&Y}zrfRF6wG8NLL8QRXbBi3JcrPdnVT6jE7eYJss zzm-lRXgc>vpU-k^S*ZcBy<{gZ9$iH@hF*i>`F+*WOi2zvKET$S6SCAwlAcCKGu~NI zV;54CrG?W*p;l0*AKo!yg_cC88`ID=s%w(dPRT5(4iAk~LT`6(3{dCQE_*0neCm>N zmjNz#IDzXApDWxdTv+33yIE#sfiVsmpWR)_Q68l`P=9?G+<%y2GcxaTH#l6zh7P?X zVg2|`#dWqcwzhV%{B}vMb)bHxaZs|}e|}a}XqlL|?V_1tmH1efF-@&(e6FDP%zq7| zciS)^3OH;})!p7YZ;nHV$()JvVSIo_7TF~!ZgyN>_WA%?aAQVU~4vOqfH6P#M&mcxX zeN&h{fON*nW$%xk16_$?)594O@Fv;B$VXt$3p_`p;D(Uw+fHS>9zD_GmEW|UZOI<< zla!}$_Y#;a4ifr<$Hh&P;tcDg>u~Gb>q46}@mN_H z1^cIQW5aL~ks~ETniRKMdNk~5>@An;i%%8CziC=+JiO;knxu)ieD3i)RJz#ZJ)AvI z#68?@PHr$Ku5uhx+6AL`dOkcUBO90>u` zG;+;GZSNGXPU!1GOyax3Y9<WxC}{Opwi@_}n1C_z^Hi zwBq^<0|o`=ZmbtMu?v5P;Uh}pMtm>j2Z!7>jvx!IwKGHZI4&W})nz1+ghC3fr*iZK zO(KqUZIzpUKQ^zF--?JCZ42J>;`oZjkK8v;~)kzhLmK9 zOjV|)#ekD!i8472FpwmcX-$4mM$$1uqR$VELB@q+p?8p;oQ#~6{E@>sJ{CAF%+@w4 zRxk}`XA6Q{l!K#h5QLnZgQI&ewOI?t6Vl*xp8Qq+ih;R{CA4$ZEN+;;!M9?~&nFg2 zhSI6fM_c6#5A;;=3=lN(-CdPWB&Cx;r!lIVR;Mzkw%nQh2(_4jlAfLovi**s5J)$@ zIo9b}Do5TxG?jSgR-tA9&>U0>+1Q|l)%b0Xd&i4HBf6+fG@QC>PqBw0cb)=; zS>`abmV5$hiMi5nfVNWCjA%mjx#*%{kE49lj9NNEZzFM8KLJ!?nFXfDXMA{Q3n z+)Au3(a!h>{gJy-X!1Au3~o~wh{Fu>V?G-~iTAF_8WHC{J)TkB{V3RIPn?uV=AtX~ zEBglV&F5e2q{;z^g0Ep#-bwbVNd#A6Ti%^ha3FtkRY0~@IZHP@@8}A9YajgMX=mRw;YD!u}-vxE@$V{tCta z9+&^yO#JUsn?IXM#eP$ce?;JNV~!N%y?;DUKr)h1f*XwpzJ)PX@JejM)I~u0ekVRp zdPQ5RMR}M4jHJAnM14ar@h~D{2?hekhOoX9VRU@7{!okuf(~DSpX0!hseLC#s0R8_ z_&^qpv)=P~31owG?M(PWCE!maJpm0FIelWgVEzdYw%x5My|>_|>P-&+Js!V_#AU@$ zEsqhhHm<4jRZ%g2E=u4tqx({ApgxD&ppK=N(su`o0n~)#}C(plCH=iizRo z2=)h6sjtx?`Nll#2QtJkxilh6Z&pH_{6tJC~Uc3XD}jpbxgFjhO48;WP?qJLXpn z_9z4x?m|n>f-t04gWDbv>PQAt#T%6A(I#s9OYqf)`eF51ZIohVlED|f1fEWoGy@m~!9;GR_?7WGvOW%D{HcwI3S{_LAJGiN7 z!K-q+yGW1@JPd5{D*dtN&O{xGR=fLPy9|`*!(1?RIh_k>js}V*PZUa=2G(~Vr^ulu_qJ92O#tUemF%-U*2-Egy^H~$6*kcH$!nj z(04G20g2z>ODPPB2^>J-nl}=MvA{$#5uIe?^1f*a00aW}nYS1mEw9Kd^ z3j;`Ura}Txv<{sQmSI3u%a0;uBM=n_^dFhCACeLy+!kYz4UUW)KTQ-dRhAEj9KWl* zXh)ct7gdnJd~8f6%uFj*$sUjG8J~l#1HZ`_?jIpZN|#RKAwT3#B!(qD1Ni%4_sj74 z-x_u`^#AFMWCx7E_$?wSeDgU_YyYVDlVAT?@t3PoEyMc>7tANUq`w@XzrRv`pQimz z1V}Lar*SFxD?2)T14gh&>3?KLL2|V*fIk7#SVDaKSI+qN!2CW``*maaUv43}2jEaG zH3?9^(E~8lI`sd(S@tC;CB1`~E(B3Ah{L3Q>;-zyPdXfZJnS!V;x{2x`tj;Qr?0v} zz`^8?0*RsI7LSq6&Yx&U^w{8o5McNqT^1CEV}lVL@K1n5+jk-U{to(OmiBMmL5%|Dg9 zH`#)Zk%I`MH0{N}To&4;u z;e{;LrH!;%q>PedLX*Zz%V2{<=_7}X9WtQ1y{KECfDIzXAB4;n#V&s>r;Njg z6SdX>XtS5E&|43lr$M2RPc#iREvOtkmYVL+4{CQ&Hupzq@P5a2Jma+&6K9|i8~wXT zYmJ88UZNIF)`}h_1)<*=m*OeM3dOhgqj}KYhw?^3=^=D51G8vkL7IKDyr+)Dts4oV z-;(FA^5ZsV#~0cTL5qn8-vT#-k`2~2+dbMVl}t%lwIhFgr}_tu0vSWb;&-a{22`x^ z!h-wG%o#jfkr&0PHxCQ*<*QK`+e>s%Q4<|q=XAFHM;nV%F`61`>NNB3$k7tV=%G=k zhitPU7`vbv#lMn^yed*yFH&6fAEPW;qV#=Z4XGfvL^%hK)-$--x;MXr^YH6M%N%}8 zcds7@nQNT{+|uOLiMrni`_7mKAdW|pTT*~+R94ElQmb#A^Tm4Z<706u#U~AfT@A0y^8_6DiF-ETr5&kHJ)v_%EYow z0>VrV8F-=R1Y_RY&X6;o8T~!9n>}xkEevI=SU`?_Kohy!@Auc)D-Q?0=}q%!+F~)A zF}V%UBCoEv_uW%z?8tl#^DSkjQ1%Oy@!K~fj$vJ`tyY9%vb&`ArgtYAVYaqP3?Ye^hK0nt$OVkx5IE6vgDc;IN4M)p$e`~_3O(|J!wKzeE*`+t zo5pB3bIUrfiXTP2M^oe#biY}`g^lKx5E!XF;*I@x67i1#*C}kUZr0AAzxA zwdp&!l3Pbne`3kty!`aPlDEHSNrT@8O}_!;&(_Y5?Y9|!)E}n^R`@D^C`%0R{9}X| zagIg=h6tj!Hy^5{r3w|t1TJ9?+4C4jR=AU&g5hJI-+_wbJJm;^DVK}kAz=DBYxp9| zCkzfDMHO_JA_*9d&q0__<4x?o6)L?KZUMIzkRVbOp{TwBsDe+k&musK*5ME)zu}B% z@CrMl>hb4RT>kE5v!6W%NB5+n-w#v6-@@@b+4aA`dofD*vE!6{|6dwAYZ*=DxIbMc z-!HfWPTz*<)Gvpr(XVj%QNLeO!tun9;8ltAu#(Xn-JG0lt*761SmrStjJ%+x!TYnMg~<>5KH zO0{<%5{AA&sAd_ow5a7{@P(Za^Pz))Lv+Qy75Q{|yR7hiTIK??PHqWdcq1T~pyyWH z&^;j9{RlK%IgRn3`WT!}N>^9)U$hRUj~loXXA-_Ygr|I~cE^Kj*r49!eXt0ukrJjx zor709X2}$tERU6h$d}0ti$Wk(@?Yir~Go!Jbbx@<;l< zpabB{eT5X9AXU&D+$uH`d&w%Z2x8T?rSk*FE~pc$d7l|m7K1~YrAu`y*P?aDl}{G7 z-OwogmX!=758k3uaSYnFlmbvzUmb$h&8Ik`vqoCb@D|P{-Zpl&NK5l6YIkR&Fh`zI z$fpIb?~Wo2rvymBZE@mIV50;TKv5m>4W2m#gVg$Tf-EQOJ1YBE$G1pJLV626%4ZgZ zT{yfCfM#$LomC)2l1|1G@Q*7I+fwLnGzrVM$siL%@5Z4p-|fNy5LXbJql6NrTEOap#`fkPNqNPh$SzZb8LwOA$4VS z>RX8H#hH&`UD!Mm-kX=6yE|#yJbt3G=|=p zd?bLFHgW0=4Vnv~MQ@L+G{r&FipqAe!FSCWbTn|4LJRsdc51!xnW9XOsVf;(} z_($O{^ZF%<=HA8wXNq|&AgBn$Josrz5a)n|=pb|HBZ7Rf`ka=i2)1>7a{xgQO0Xm; zT$aiKq^*g+noarFKs*Uq?gVUsqH-#4wPGYu6eCCDbQ=Y`i+RpR$5q$W)Z3L7w$#^A zEKJ&Y><`CAxlI~hMk3RjjNgYER>A;yId|c4FPA03GTpzF7;};#GM1M#PZg!43IP#{ z^>i>dc6|Qyd8f~=L&WNFhcDG-(y`S=e;JlKio8T7ju0@L!fP(!wdv8v?3U^HyXw-y zr-hnDl1wi5E7*7(xZ}N0$L-vj8D{kjaAhOUueFlO0gD~uNm`9V%tAdv?J)voc9CIP zcw~0Z$U?ec7*dPyqY}AjUke~aYPCRjJMpluww)&J-Ky!ahI{N6B&VO$d+e{%R>b=( zXU(pqizEZg+0sMA_4@dIgVx<`W`vf%kYi^iN2q_n#^A$y{8%&x<%IopN3gjeiL$8+e3E7N~>B5pJ&S5Y4RH9Le0;8Sp+St#!!5@UpX9W8!P-GV1H;i5<;8! z3!7)+(*c+BgT{KCd{b4OL0kfDnktLR7%go%BBXcC`Gr~V6o8&RcM&@T9KByZF2}LJS(_qrr zI>HoxON?iL(b4QYT9Q~uO|g8W_folG5sa8|lF*G70{C8QYu061glo6@i^>a`6I-MQ zt56Ndhq(N;XPioKfPNAB)GR=x+M|;!Q@B@GAYj!4 zG`u$9)?dw1hcB##bBd;OpQ5KxU`X($APlvUO~OhhXVwJ;Fk zgE*L*NvA3j>5mcMf%Q=iQHT?%FA6M13m_N#DjC|CH7Dn>CS*xqkCQrRFCL3t4Gt8# zcTa^*l`>~|I3E}d>CW=uc4@Wkk~ffP|C^Ey!!1R?E*#4x!e9gU(P4H?L^39-hZ}HxiNZmexC%H{EAKfusnV% zT0bNVzg5kf37LI4-`pQOrKosF0j5#_P(_I>s;%rRp^Up}Jzz;+C*anY5ul zf|WvM4i>tZ9)vssP$T$2EG2#vfzNLncZ9-h0F@ZA7fgy|$gC)iVQd|troVy}!Tm$U zXFg@cs6Y(n;Uo#ZZEAmhbA?z^@_|b_Ft+ZYiYoB`A>#QKU`!K`r2zjK4?P~_jJ`Kp z`A5_I??t@nZ}IrwuUdCRblw8P!oLDTB?x7=KWpX`%NTuNKZ#a1fERN6x4r!PZ+rRw z9u~7-!ScfadfPMV!L*`Td0aR43U8&?PpFV3UH7sY?x%-DPDDgA22Z+C!*bqaYts_# zDJKUBxeXzZBgP%Cm~VTSjYLknJ|&q?B(tq#0|0p~N9f1?iPGBWbGkJ4t{0d5jyu!o z=+f=ZbJ#B4hX642kz?FiRT|p(cYUt)w%tYBP~kuTQ5**FBb6<+XAN!D4PT3_sVg)! z=In-{u?J8w*y^UfGnR-jCa@ib+g_V3D^%%DHylz3!izbn2N@cn5EhJ5kjQMNM0Jo# zllkR^FvsT=GfS5;#};5J%PnM-$kVWhtkt#e`%_>Ai2(?BJFyqIfwkqOk$xP`;O3`O zqS9)$Vl`I}C}QJTVE}1Wr5$<@6)D$ZE%nY>c*@et5-MLWO`0ji5x*9JU5*iU9e`#% zyWS5DMQr};6d`L35OA$NkQsq+VV(M{^DGEDQZ(YM z^poHC(nl4P;w8Wk*ey!zI~>ecRIoe?^g&evf8>KNVm(Bu7{e{#dKMB@rWw-K)%&)* z9J*4+Yw0=oan80_2aSRgW=lp{v|I;Wrsyh~9}`g@vGU4Bf}#rd(AWTpKN*R3Sks%r z2k8-nQO*nzOA)@xSAg8=_rxQwU4!jQW5I;P6_SyqQh#fniW756m}e;T~IU5{(YS@nEX+^$V>qH__7Y~YeRr&ss1dm~BI%I3ABXjECUP}U!)xcamXv66Xr z#Y)HB{IyP!Ea97Qt~`aBKO|DUFz@+$lUt66EOqIfoyWLhOpZnoyFDb2WRbpoKLQD@ zg2~qqf)GE!M)Pt?SBUj@AZ_{rnnvO4<*SWTz-R zS`k%HqL(7!p&SKt>(VG#Or$bGxfLc7oXIY=N>ryvy_7CtzLG2-xxE};T+1VT zAa`fEchb5;+ck=q!#9WAW#Zx*e8$it7Go!zFPGirj#^xrzmiNXn~tgkp0=#ew)T8= zsjsq}-X2>GY8E*;;yJIu!gSl8)NG4W{|@pvb4^`-iH?zq#meXr(*X^$Z-pK3R0iAq zxfHhhwGKA-Rs_56&8|aK`B3RDV-nD*;A;5Wu;D%R4D@2xX-EwXD6p{xWE$jEdoOSP|B(73hM zt-7;eMDT9zjcUw}&b5X&og}XH9_+I??Jl_~di{a2@2ytBx!L(Lg|b%Mshm8Yo8imY z1`^xwEFJvzEJ)(p5Q5c|zk_=Y9R+v8mYzi6D%bDfiP_QPD%Q{^j0lJgcNs87``cAh zOZD40@Dy*TkcF$;e4kQ)KnkQ!?mJ%aqXRWy<^d;kz`vLb!&J?NdD#6J8Atd`9Y`K(W$)S=)Jc)RNSa${S4pl61wh90M?0jnl)lXbw>%*-F;c?OZ zH|&lIrtsi60N@sY)((6P-Y*5QIWy|$8Bcon9jH(8g(EaPmtp#9NlE=8i+H2?Hr^0~ zLJ$OdM7&i9(^k{3C-TQ?1-O~?<-)1XFg`K79#)m|gA?DgbW=h}xR9{&6WqI}Wj}pg zgF3^j0db){e;8Z*JT&`JkIf02NG}JT)bj&7nw!NlS`M>ASivf+D{~@)O@~018{7Tl zw~q%OxGfe`nfd`SwybWi14f)Hvm^%M_3GnMuV^R&lGO?1RpH(mu%%N*FAd(BF4-4X zImaKjY9Y+2Mn?`QyQ8Sav8R|&X6%ZEEr#RUqje%%D32uSM7w(RC}zD@cST)WAGepv zW0E&g&%xBD4rzlV>UpTI-JT=Sst;sx2Arn{q2KnP7M2JUjw{Vg&(5$h2c)K`k2PeN zo1a1`w7EX3e(LX8o6mF9%uL6_n>7wB>^Hv3mbXlRI76}IURa|hBlb_x@K!)xU0Th} zX=4xR7lPQ!HIe_U!!Or-w4KaSKi7M*M{%QBR&UkrO)1UnqjDb@yqsz@o$`4ViJKR;3v9Rkz=<1=6otFWz+M{Qz9E^c%Z)Whlh za4zfuaEM2fM=-)Ml^?i#;KK$UNWD%5zV_2`g3R5=3{mocfZZn{J7OlQDZspQC$2S! zj`9RRzh_3Tuc~nKl)wYnh5&|h;O{GBmfb5nnUW=4!%WezdrklstQalEHfd z{%0lT8rRbMd;ielS9j~b6UOQN$9Mb{h=BdM_;z4P2p=^-m()2}+Fu(tz+STf@-}#}yvz)ALfA-@eG!YX z!o+8E1WLdZ6FJ-y%CK?{BnF;Ycv0WJ`|cL@K81|+9)y&Z2eolPYPZzAOZXvkDo zp7{;*|7q?l!>U@hzE6iDAR!^;qLCDk?(S|Rq`ON>QjqTMlny~@kx)uNKtj4D1ql&> zce>sCJZpLOa;@&EsF`wP?3eg5aP;P{Ub`G*&@|9)Da zL8190E!^Jvw`PvdQCN<@jz}x`FtODEDM8@3$AV73i%X@(fDNt)VNROwdS0=$9=UHf zUPF>@W1Y-I1e+a$NcpJdT|sRVcKSF4O?NJwQBe_obOCi0#;u+puFfD-mYxm@EeC^f zhU{zk1QJN z##V6<&`j$ztH89lF~FQ`!8F;Odgm6Jgh#HR0X8)cHb%%~V~ctmKb+H%4y$c);*a@w&Tr-@Lf=@r~6(o ztT)KAvDi%3Sm8%G(>bU!Z>MUfx(jpl*URHDeWZdjUB%?ty{7+o;5IvU=a}dV>B9El zEuUpHQNMJ?8TZ?v`K;3(eSMkz7dNGn@g=I7MPo|>Q!xt2He6C;W7l5Y{FaiG#|IjV zwI9#na?KV$vLyZ7_r#2POZuT|F}Yv_95w}2DfKPnJI17WF|2RY{JJA9s6dHS@Jt{T zD)V67{u0IlVgiv^r;U376wONV6hqnVR8#k|xST28ZiZ78pde@qwmwb{jLwhFTB2mT z^*T}qWl*IP^>XIS%XksBGCG>GA%RCQS#TR4i%YQY8oF@w>Pk1fKmAKx+z`)>w1-XM zqL1E--_*CxM`Q7PI)6c1JsTLaC>Il%F0>E>XwoT9GR<41KEHvRFcxv#x|XfaA%t}^ zSLyJh`J%ljg%hP__2N{gB}kAkif642-Dl|u-aR+>1Ui!~M_Xp}=4F{0EmFlmfh}nq zQxkN~`x~eU=;cE6sft*U&NL-jHJkyv`tzL#+;DzPUB_DzRd8(>=cVpJLWfo16P;H_ z{F5CXw;aw@ldtJkZ3P5!kX)+OwH%3 zA`^;SPLuD&R7cf2$w$^2TnoRZJOc6%kX0b#;=O&?v)d7J1UC$41TMZACeJr#uu z6v!RZ#Q|=1J&*zff13iFf1d(|9Dp{RoU{wqWe!7Xa-^^pm77Tj58ia5w@tm45f?|G z!DM21k`(^t?L=>c`=kblxKCq3&Km(!I_xA+nc5zi^GW6*!H9_i3AS{mGJYP}BddkM zy_Y7h1iajLeYa2N9p=y5xQ3gAW=G=!UwC!djNg^xOz~Tq6y0J;?7An4wjnIg{(dUg zjW>h&k%)G=Ar=VN6Y;tzs|aE61+Irdo+p#t!bkILlh^flj|7oDw=@F@(>XF0`>JL$ zj0-hdqn=HRpA@e>I^I@XJj*-Qv39rTHPdMAKcUs-7m61MdOKH{k#&WvfSh?DovW?%2&xX>SA46ng7od2>%ih1^Mf1h2(Zo^Qv^Hqp^7qedh8(=zT)IoTkN2 zB0T+pWEKO#i#VO=Mp@hmv!u{9S=(xgBc;}d)iR)b>^llh*^WD_^GTQ-}1Fp^Xw*PaptIO|l z04#4!rvLR8#!&NHKlewpKbl=3yMS4(e9JI@**9MI84fZ5l4Heh4}V;L7nmPnw0|7_ z%L^|u#3iRbVJMl-}1F1>1tqA}Vdv8s&FGu*V&A{@@c9JRn_(SYQP!#D5?uS) zsH(VBRg6>%`dlMKVwC#~c!7Q{y;0YXdW*4}#)(+@!|_C3iKD^~vs)svVTiMeXJ13m zwLr6=w7iRiG+GrgrPh2Teb~R%o z=K)^bKq$ui+qY&F3MK*x_0Ey-M#IF(8XZHVGYRkvb{?RZMI{`G6VkW6tMZKPmL-%4 z+N`R$!r$fC{){$X)%Q?1S$o@`l`8!XGIt$N& zZ(CdAXJkC4&jc5Db=F?lMA*)X;`Q2e>dWKRWXdHUntNbJsUo_(BNg$buOPN|7o-Z? zjugz~vS+S9mI{h;eeNu1So$jW!AOl?{m?hbp;N8xTNsZOcM=*&`^?$#w_o+>X5UwT zF0k{0tnut9OW@svk7xOqu;5|32)+hLn7u}>H;i-xfpi3~oGw1#4c&j?DSZr0|y;9~6^1$ou zt+wZhfZ#Tc>}gsq5*lB$1`z93XBba#w zKQyvTgo4fMq&%3%g$6fro1@~~2!zER-()yj`l;QDcz!7`@Jn^_dm#VXJ)jJy{o68} z`|kqsXBjR#jnv!Yc2L&y@PuM3{gNc%!Vk^vBn}}p8nkhsnPm8D62mW(b*ce*o?ivIry`90V#%5@Ge_$Ch68EhfEIk-@9A9`hN# z4)g6^LJRgw8InE~rkoDiyP9s#=2;CJx2vpJ)Mu}Wq7ex5JJq(?HxAl1+w$1AH7p@9 zeBiajj^~yzx1?jdyA_xBR!vFDq>EB2CMvq;4Q;eib}BDV6l?F*#*F`ZfuS<%wf))F z9(}?#$AhBx5xp}>JrX8%2mM7FCdN(AQLZJ*&|-Nw4n5Dnbg2!Z)wFuVTomV;ojK+t z*$H{`Df>@YNTD4$$Xn zwAMV!PW0E8L{>yQZ+EP)+wX*-9Ym^?^?JbzAL3_Eh9zv#;14(l+a^c{<8&Au@krb` z6-9sA){3G7O68BI?_p%$5l!3?U3XOSJ5rA1S2n?m2>+ZfYF0;Zj64_gNbw1M6FY(; z?z#odc7(LrPFPEa5aSWYTA9r>jce6(DepjKS<@#@>bsJzp%bgS*`YIfUzc?neRsk` zb=zBOJfl1kpFiJnBj`qcy|mlC`Iy4BI!4%UTq<|xH?(|jUnEM8mqxrDhrQlk z)xJ~5toa_azHdK7{K!iZEZ1QRPlvP_Dn69s*S;^N5VKA_R;iA-%ZjePkj(Sqj8IaY zgT2ES@YJ9TNXtw~Thkmm%#}W_fve1Y(`m$2(qFv$%;~#spp@3E`Vi%vu~FB`oanKt ziLDInl`upVYs;%2CJ{f9b0P z@d{PH!ynZlE$*|0&+2>S3NjS7`0@!MU7>4N8D8Pjr5pbj1P0pSPkl_IYo{6H{sa2a z`Yj_h6*NAlBC}~3*M!8lb~+FEfKQ441w$WeNTr0$9(fv8PlK`li;G{1X#6`B!~cB# z=JC4}1j`2VzkmL=-us7|PH)Mle;cXBwj0es{bhgIJcO$J&l~UGT3W#pm;VDB?_w15 zpY@7=KbW)>(roy(-??pO&HSGO4o@|=*Hsj`VPrRe!N@I?fmQIQUr0@DpF7bn@yK~0F!U9eXwTz-gQJ9E#q^iw z8`Dp}x8KEPS69cOKpNXG$MEKwn-q~HW|#E&BDec;WamnF%v5<&Pn46(lu^~__tTy! zZk1vyteXBH{K7Edm35n~@`CcMjgsza6?ec1^$$)iKxx;T?F4y~28a#=t_59a( z&sA_%PcMXLPzH?LzM{(@3div;N@s(<96SsL9m-i)49vKH+LH4{=JXd5{qh8LPB>7` zKWRONT|I(N-tp01PI=Dsv5n6FbzIQEo|pM@b)s!xipYuNXv0Gi>*$-QJlKtHttF}H zbtfL~moLrFM{Y#CDcEH|!%B>X+DoH8&Y!CESpPnq6C$rZ3v#K zwGy6udSAEdH{ERoNx83=a_7?`eiI>l;c>QrX1-6GCwjrUw$VrzDHU#ne&9G;Qhyb0 z+^(H>nt6>6xnloxgGamYMXVfZqa{mXW6R}$WlnV7vhv~TzUmo5q>moa!1o2@K{y2Z zr7Rm9mf%uJ_G^e@Wuokq2mE^HMmmVeLo&5SM4M#V$yr#8D+*KtduZjyW(M!>5mOqp z#WPWI5hqbu2_&;w$TI})z`+rRn6!N0nW;t%5-4!-zvRStt>V*6_VgA?h_1w%s2?KE zhOc^+cN#;9xM-DvXt8xcP?^HnF+~QYS`(-08X2$E@KV1+LK zma~*aUGW^s@GjH)dwA2g9=c?_(knwYvO0(itIA^H-ZN|OnKKgJj}$<$zk7QA*L zXzs0ceh^Xo%_oF)cXy7%G08b=Y&g|D@f{o0J=r`7xDyAM* zs8=t-MN|J7Ly?rc0N&jSd4^K`Rbe{c9i`jI1L4Xqd02V&lxRb?L<%#!Q+w19>xCNL zy(GY!)Z-5s3>3dhKQ&=8O^hhUGM95G&Gp7gA8mN*bR0UGVja;G+Xe z!fwLOT+h6*0g_9uBP*!C(^V{x$Y{zwC1P?CL(c`_ihA);9NQZZ`aX{>Tx9dT=s{OD zwIKQX!Ol~ZS;?d1YpO%kbD{dQMw?>|$FiS#-o7#PVwAKLE2elStQ|xBL3-5u)bM?#_9&D` zwL->G&gYv(r&>w(Gwuo~P$~~!Zy_W!XD`&?rVw`Xjuj*b$UHIyTh=8uH<6+_9D zamch&SS5aG85BpypBD(Pn&bL$&2+)2yFAg%Q`1BSHqy*X z@A!u0?E_nn&^>?qS@?o9-J!i`>>yF5Gh)V}J8BBWjhyk1SV0&VZBO5`$qZVaJc+Q1 ze;}hIKx5=LSTz{2)e$w`^ijv-)yNtzfl2p(dfl_akFrS~44j6g3R&V0Rjd_hCD25& zt>a3u^Q#wZ^yFXjcD_xi#=A4qT%BWO@pY5xRm-3{-PX-d&C&#H63v!jk=W0&`W}M1 z@hA5hqT~4su~y^c!zW|13{os7pM9nyt{ZiJfj{p^kHzaUDgi zBh!MaYBG^7T+$Mg>0yl8*+_XGhrSw>R`@|xZ{z!PJ`m0%USEoY1x6hPFODu*fEDZo-W0vF>K;!x)ztz0#~M$eP)iiJ5GbxK!d5Tgr`+` z8XYc1*ow7;nj-Vni-X_HJSy<>5&fRzO+VIK*rX!!ElNC*tkkCBawdQ%&tk}JtVR2zl zc0O5B-O^^e&`s&xM~>+@m}}M>Y2%Oa$_;mt>;9~1+bdU$$vIt++e|Toj|I5(T&dk-=)Y#P+hK-7ua;I!JEA~YS zk1W^Ax`>gC+*~xW4;dh{#e)O1fD&!|NnR3eODyC5k~q<$x2_0G## z-NG+xr&aavu2uRPVfdMH@vb5@U~hIl+}*>xA$zQjv|MIH#IXO%bkn;h($tYaFn=_? z{41FM!7XYQ&4wAoiXpLoxPd_>VF#G+Aatwe(Sbz7^Yfl&F^9Eq)o74j9@+|B-N4(; zSWn915WYmpY=3&>; z=RVzM5w_!Pg*cx_FR-e(;0>mkL(MbvYX?AmCSKxdmw5>{6(oE(>3`Qx8q+?ke7Vy{S1|YHj z^YdeA8Nj!HEbT8-R1Nk29Ek&gT>cgLr-Sl;&c%b^G6NBSSn8ktt-oI}n9Bf!m-1gh z_z_eeDC9q!m4CPF|A9j~6NAGe5dMDIfbA@-D~GiA1&0>^C9l7W2>=JoeqmcWq(?3| zy%ji%hC+vV?U2Tq;B;i5j{yoDP$h_e9n!G_obGcQDjm=qf{hL-{|-)%x&xICDEGid zhZIu>r)Pnn(g6t&*yxagq#R6C7U01Pu;z8h{k1 z1c$$7h6aZ@3qZ=~fy3SIL4(7b1RxdZz~N8Wp}}F!0g$q8;P4#a0P*jiQkYW!q%;~h z{3RzeILsLUQf3Ss-gh4w9OeW7snrDzU*duWhxz%3)cgU5pYTD0!~FO|>gRyNQ3asE z0W}@iatovy4LJOkAT&6jO#>SoQqlz+&J1kF|Nd441YTf+L+U+%!|lbO!2$IL*x-=k z-{A08DQIwD7#ub@8Ih+Fymsf`d2S#;ZgF}wGfW!4P zpuvH`7uevCQzPJTJ56YCV1@)XIOOOBI6OoP8XOqJfDI1W)C~>~(}M;FTD)O{Lw1XT z!y^r$!GYdU*x-;Im*DUsBWQ4-{}MJhWNR2WT*nj|9B34S4G!661rE11g9Znhu3&>h zHc)`Wcdekofp!Ym;E-Ji;BaIcXmFq>0X8^fB_AA4W(y4t)b(M5LsrAV;aqmm;6QC0 zHaKKy`6vA6aha6;-^2gy$Pu;+K_0h*UntY;GN?FWE7 ge+4JYd;Up=dCkZ`F&_?&7x;4toP*JL{rK1a1OB!j>;M1&