From 4e32fcb29f75628ae2c45e3a29fddff08d3a7e8c Mon Sep 17 00:00:00 2001 From: Ari Archer Date: Tue, 23 Jan 2024 19:21:05 +0200 Subject: [PATCH] [docx] split commit for file 6200 Signed-off-by: Ari Archer --- .../scala/com/twitter/tweetypie/store/BUILD | 60 -- .../com/twitter/tweetypie/store/BUILD.docx | Bin 0 -> 37364 bytes .../tweetypie/store/CachingTweetStore.docx | Bin 0 -> 40550 bytes .../tweetypie/store/CachingTweetStore.scala | 420 ---------- .../store/DeleteAdditionalFields.docx | Bin 0 -> 38030 bytes .../store/DeleteAdditionalFields.scala | 172 ---- .../twitter/tweetypie/store/DeleteTweet.docx | Bin 0 -> 38366 bytes .../twitter/tweetypie/store/DeleteTweet.scala | 221 ------ .../tweetypie/store/FanoutServiceStore.docx | Bin 0 -> 37138 bytes .../tweetypie/store/FanoutServiceStore.scala | 38 - .../com/twitter/tweetypie/store/Flush.docx | Bin 0 -> 37015 bytes .../com/twitter/tweetypie/store/Flush.scala | 34 - .../store/GeoSearchRequestIDStore.docx | Bin 0 -> 37639 bytes .../store/GeoSearchRequestIDStore.scala | 72 -- .../GizmoduckUserCountsUpdatingStore.docx | Bin 0 -> 37298 bytes .../GizmoduckUserCountsUpdatingStore.scala | 48 -- .../store/GizmoduckUserGeotagUpdateStore.docx | Bin 0 -> 37628 bytes .../GizmoduckUserGeotagUpdateStore.scala | 68 -- .../com/twitter/tweetypie/store/Guano.docx | Bin 0 -> 37878 bytes .../com/twitter/tweetypie/store/Guano.scala | 144 ---- .../tweetypie/store/GuanoServiceStore.docx | Bin 0 -> 37916 bytes .../tweetypie/store/GuanoServiceStore.scala | 120 --- .../tweetypie/store/IncrBookmarkCount.docx | Bin 0 -> 37379 bytes .../tweetypie/store/IncrBookmarkCount.scala | 92 --- .../twitter/tweetypie/store/IncrFavCount.docx | Bin 0 -> 37403 bytes .../tweetypie/store/IncrFavCount.scala | 90 --- .../tweetypie/store/InitialTweetUpdate.docx | Bin 0 -> 37137 bytes .../tweetypie/store/InitialTweetUpdate.scala | 31 - .../twitter/tweetypie/store/InsertTweet.docx | Bin 0 -> 39038 bytes .../twitter/tweetypie/store/InsertTweet.scala | 284 ------- .../twitter/tweetypie/store/LimiterStore.docx | Bin 0 -> 37223 bytes .../tweetypie/store/LimiterStore.scala | 41 - .../twitter/tweetypie/store/LogLensStore.docx | Bin 0 -> 38288 bytes .../tweetypie/store/LogLensStore.scala | 169 ---- .../tweetypie/store/ManhattanTweetStore.docx | Bin 0 -> 39061 bytes .../tweetypie/store/ManhattanTweetStore.scala | 231 ------ .../tweetypie/store/MediaIndexHelper.docx | Bin 0 -> 37146 bytes .../tweetypie/store/MediaIndexHelper.scala | 34 - .../tweetypie/store/MediaServiceStore.docx | Bin 0 -> 37323 bytes .../tweetypie/store/MediaServiceStore.scala | 62 -- .../tweetypie/store/QuotedTweetDelete.docx | Bin 0 -> 37122 bytes .../tweetypie/store/QuotedTweetDelete.scala | 45 -- .../tweetypie/store/QuotedTweetOps.docx | Bin 0 -> 37108 bytes .../tweetypie/store/QuotedTweetOps.scala | 33 - .../tweetypie/store/QuotedTweetTakedown.docx | Bin 0 -> 37202 bytes .../tweetypie/store/QuotedTweetTakedown.scala | 51 -- .../store/ReplicatingTweetStore.docx | Bin 0 -> 38448 bytes .../store/ReplicatingTweetStore.scala | 180 ----- .../store/RetweetArchivalEnqueueStore.docx | Bin 0 -> 37098 bytes .../store/RetweetArchivalEnqueueStore.scala | 38 - .../tweetypie/store/ScribeMediaTagStore.docx | Bin 0 -> 37259 bytes .../tweetypie/store/ScribeMediaTagStore.scala | 42 - .../com/twitter/tweetypie/store/ScrubGeo.docx | Bin 0 -> 38250 bytes .../twitter/tweetypie/store/ScrubGeo.scala | 164 ---- .../tweetypie/store/SetAdditionalFields.docx | Bin 0 -> 38004 bytes .../tweetypie/store/SetAdditionalFields.scala | 155 ---- .../tweetypie/store/SetRetweetVisibility.docx | Bin 0 -> 38088 bytes .../store/SetRetweetVisibility.scala | 172 ---- .../com/twitter/tweetypie/store/Takedown.docx | Bin 0 -> 38371 bytes .../twitter/tweetypie/store/Takedown.scala | 205 ----- .../store/TlsTimelineUpdatingStore.docx | Bin 0 -> 38270 bytes .../store/TlsTimelineUpdatingStore.scala | 150 ---- .../store/TweetCountsCacheUpdatingStore.docx | Bin 0 -> 40243 bytes .../store/TweetCountsCacheUpdatingStore.scala | 358 --------- .../tweetypie/store/TweetEventBusStore.docx | Bin 0 -> 38234 bytes .../tweetypie/store/TweetEventBusStore.scala | 209 ----- .../tweetypie/store/TweetIndexingStore.docx | Bin 0 -> 37257 bytes .../tweetypie/store/TweetIndexingStore.scala | 65 -- .../tweetypie/store/TweetStatsStore.docx | Bin 0 -> 37522 bytes .../tweetypie/store/TweetStatsStore.scala | 64 -- .../twitter/tweetypie/store/TweetStore.docx | Bin 0 -> 39328 bytes .../twitter/tweetypie/store/TweetStore.scala | 292 ------- .../tweetypie/store/TweetStoreEvent.docx | Bin 0 -> 38227 bytes .../tweetypie/store/TweetStoreEvent.scala | 144 ---- .../twitter/tweetypie/store/TweetUpdate.docx | Bin 0 -> 37272 bytes .../twitter/tweetypie/store/TweetUpdate.scala | 41 - .../tweetypie/store/UndeleteTweet.docx | Bin 0 -> 38586 bytes .../tweetypie/store/UndeleteTweet.scala | 237 ------ .../store/UpdatePossiblySensitiveTweet.docx | Bin 0 -> 38169 bytes .../store/UpdatePossiblySensitiveTweet.scala | 206 ----- .../com/twitter/tweetypie/store/package.docx | Bin 0 -> 36882 bytes .../com/twitter/tweetypie/store/package.scala | 16 - tweetypie/server/src/main/thrift/BUILD | 29 - tweetypie/server/src/main/thrift/BUILD.docx | Bin 0 -> 37009 bytes .../src/main/thrift/tweetypie_internal.docx | Bin 0 -> 43195 bytes .../src/main/thrift/tweetypie_internal.thrift | 705 ----------------- tweetypie/servo/README.docx | Bin 0 -> 36726 bytes tweetypie/servo/README.md | 3 - tweetypie/servo/decider/BUILD | 5 - tweetypie/servo/decider/BUILD.docx | Bin 0 -> 36701 bytes tweetypie/servo/decider/src/main/scala/BUILD | 18 - .../servo/decider/src/main/scala/BUILD.docx | Bin 0 -> 36867 bytes .../servo/decider/DeciderGateBuilder.docx | Bin 0 -> 37192 bytes .../servo/decider/DeciderGateBuilder.scala | 41 - .../twitter/servo/decider/DeciderKeyEnum.docx | Bin 0 -> 36677 bytes .../servo/decider/DeciderKeyEnum.scala | 3 - .../com/twitter/servo/decider/package.docx | Bin 0 -> 36708 bytes .../com/twitter/servo/decider/package.scala | 5 - .../com/twitter/servo/gate/DeciderGate.docx | Bin 0 -> 37113 bytes .../com/twitter/servo/gate/DeciderGate.scala | 34 - tweetypie/servo/json/BUILD | 5 - tweetypie/servo/json/BUILD.docx | Bin 0 -> 36710 bytes .../main/scala/com/twitter/servo/json/BUILD | 21 - .../scala/com/twitter/servo/json/BUILD.docx | Bin 0 -> 36944 bytes .../servo/json/ThriftJsonInspector.docx | Bin 0 -> 38835 bytes .../servo/json/ThriftJsonInspector.scala | 142 ---- tweetypie/servo/repo/BUILD | 5 - tweetypie/servo/repo/BUILD.docx | Bin 0 -> 36699 bytes tweetypie/servo/repo/src/main/scala/BUILD | 29 - .../servo/repo/src/main/scala/BUILD.docx | Bin 0 -> 37003 bytes .../servo/cache/ByteCountingMemcache.docx | Bin 0 -> 38115 bytes .../servo/cache/ByteCountingMemcache.scala | 183 ----- .../scala/com/twitter/servo/cache/Cache.docx | Bin 0 -> 39168 bytes .../scala/com/twitter/servo/cache/Cache.scala | 275 ------- .../com/twitter/servo/cache/CacheFactory.docx | Bin 0 -> 37998 bytes .../twitter/servo/cache/CacheFactory.scala | 153 ---- .../scala/com/twitter/servo/cache/Cached.docx | Bin 0 -> 39669 bytes .../com/twitter/servo/cache/Cached.scala | 261 ------- .../com/twitter/servo/cache/CounterCache.docx | Bin 0 -> 36961 bytes .../twitter/servo/cache/CounterCache.scala | 20 - .../servo/cache/CounterSerializer.docx | Bin 0 -> 38198 bytes .../servo/cache/CounterSerializer.scala | 114 --- .../twitter/servo/cache/FinagleMemcache.docx | Bin 0 -> 38307 bytes .../twitter/servo/cache/FinagleMemcache.scala | 149 ---- .../twitter/servo/cache/ForwardingCache.docx | Bin 0 -> 38926 bytes .../twitter/servo/cache/ForwardingCache.scala | 186 ----- .../servo/cache/HotKeyMemcacheClient.docx | Bin 0 -> 38634 bytes .../servo/cache/HotKeyMemcacheClient.scala | 109 --- .../twitter/servo/cache/InProcessCache.docx | Bin 0 -> 37463 bytes .../twitter/servo/cache/InProcessCache.scala | 63 -- .../servo/cache/IterableSerializer.docx | Bin 0 -> 37747 bytes .../servo/cache/IterableSerializer.scala | 84 -- .../servo/cache/KeyFilteringCache.docx | Bin 0 -> 37074 bytes .../servo/cache/KeyFilteringCache.scala | 51 -- .../twitter/servo/cache/KeyTransformer.docx | Bin 0 -> 36912 bytes .../twitter/servo/cache/KeyTransformer.scala | 21 - .../com/twitter/servo/cache/LockingCache.docx | Bin 0 -> 41115 bytes .../twitter/servo/cache/LockingCache.scala | 486 ------------ .../com/twitter/servo/cache/Memcache.docx | Bin 0 -> 37433 bytes .../com/twitter/servo/cache/Memcache.scala | 59 -- .../twitter/servo/cache/MigratingCache.docx | Bin 0 -> 38490 bytes .../twitter/servo/cache/MigratingCache.scala | 245 ------ .../com/twitter/servo/cache/MissingCache.docx | Bin 0 -> 37228 bytes .../twitter/servo/cache/MissingCache.scala | 46 -- .../twitter/servo/cache/ObservableCache.docx | Bin 0 -> 39593 bytes .../twitter/servo/cache/ObservableCache.scala | 419 ---------- .../servo/cache/SecondaryIndexingCache.docx | Bin 0 -> 37571 bytes .../servo/cache/SecondaryIndexingCache.scala | 85 -- .../twitter/servo/cache/SelectedCache.docx | Bin 0 -> 37856 bytes .../twitter/servo/cache/SelectedCache.scala | 97 --- .../twitter/servo/cache/SeqSerializer.docx | Bin 0 -> 36851 bytes .../twitter/servo/cache/SeqSerializer.scala | 10 - .../com/twitter/servo/cache/Serializer.docx | Bin 0 -> 38756 bytes .../com/twitter/servo/cache/Serializer.scala | 184 ----- .../twitter/servo/cache/SetSerializer.docx | Bin 0 -> 36850 bytes .../twitter/servo/cache/SetSerializer.scala | 10 - .../servo/cache/SimpleReplicatingCache.docx | Bin 0 -> 39540 bytes .../servo/cache/SimpleReplicatingCache.scala | 231 ------ .../servo/cache/TransformingCache.docx | Bin 0 -> 38765 bytes .../servo/cache/TransformingCache.scala | 324 -------- .../com/twitter/servo/cache/TtlCache.docx | Bin 0 -> 37448 bytes .../com/twitter/servo/cache/TtlCache.scala | 95 --- .../com/twitter/servo/cache/package.docx | Bin 0 -> 37065 bytes .../com/twitter/servo/cache/package.scala | 36 - .../com/twitter/servo/database/Accessors.docx | Bin 0 -> 38108 bytes .../twitter/servo/database/Accessors.scala | 151 ---- .../com/twitter/servo/database/Bitfield.docx | Bin 0 -> 37132 bytes .../com/twitter/servo/database/Bitfield.scala | 56 -- .../twitter/servo/database/Credentials.docx | Bin 0 -> 36899 bytes .../twitter/servo/database/Credentials.scala | 22 - .../com/twitter/servo/database/Database.docx | Bin 0 -> 39586 bytes .../com/twitter/servo/database/Database.scala | 201 ----- .../com/twitter/servo/database/package.docx | Bin 0 -> 36865 bytes .../com/twitter/servo/database/package.scala | 19 - .../servo/hydrator/KeyValueHydrator.docx | Bin 0 -> 38654 bytes .../servo/hydrator/KeyValueHydrator.scala | 155 ---- .../servo/keyvalue/KeyValueResult.docx | Bin 0 -> 40592 bytes .../servo/keyvalue/KeyValueResult.scala | 473 ----------- .../CachingCounterKeyValueRepository.docx | Bin 0 -> 37187 bytes .../CachingCounterKeyValueRepository.scala | 44 -- .../repository/CachingKeyValueRepository.docx | Bin 0 -> 43508 bytes .../CachingKeyValueRepository.scala | 736 ------------------ .../servo/repository/ChunkingStrategy.docx | Bin 0 -> 37161 bytes .../servo/repository/ChunkingStrategy.scala | 50 -- .../DarkmodingKeyValueRepositoryFactory.docx | Bin 0 -> 38867 bytes .../DarkmodingKeyValueRepositoryFactory.scala | 161 ---- .../HotKeyCachingKeyValueRepository.docx | Bin 0 -> 37759 bytes .../HotKeyCachingKeyValueRepository.scala | 74 -- .../ImmutableKeyValueRepository.docx | Bin 0 -> 36968 bytes .../ImmutableKeyValueRepository.scala | 18 - .../servo/repository/KeyValueRepository.docx | Bin 0 -> 38464 bytes .../servo/repository/KeyValueRepository.scala | 192 ----- .../ObservableKeyValueRepository.docx | Bin 0 -> 37598 bytes .../ObservableKeyValueRepository.scala | 89 --- .../twitter/servo/repository/Repository.docx | Bin 0 -> 38047 bytes .../twitter/servo/repository/Repository.scala | 133 ---- .../ResponseCachingKeyValueRepository.docx | Bin 0 -> 37996 bytes .../ResponseCachingKeyValueRepository.scala | 103 --- .../twitter/servo/repository/RichQuery.docx | Bin 0 -> 37276 bytes .../twitter/servo/repository/RichQuery.scala | 34 - .../SuccessRateTrackingRepository.docx | Bin 0 -> 38020 bytes .../SuccessRateTrackingRepository.scala | 81 -- .../com/twitter/servo/repository/package.docx | Bin 0 -> 37469 bytes .../twitter/servo/repository/package.scala | 50 -- .../com/twitter/servo/store/CachingStore.docx | Bin 0 -> 38009 bytes .../twitter/servo/store/CachingStore.scala | 112 --- .../twitter/servo/store/KeyValueStore.docx | Bin 0 -> 36862 bytes .../twitter/servo/store/KeyValueStore.scala | 13 - .../twitter/servo/store/ObservableStore.docx | Bin 0 -> 37068 bytes .../twitter/servo/store/ObservableStore.scala | 32 - .../scala/com/twitter/servo/store/Store.docx | Bin 0 -> 37555 bytes .../scala/com/twitter/servo/store/Store.scala | 93 --- tweetypie/servo/repo/src/main/thrift/BUILD | 13 - .../servo/repo/src/main/thrift/BUILD.docx | Bin 0 -> 36800 bytes .../com/twitter/servo/cache/servo_repo.docx | Bin 0 -> 37404 bytes .../com/twitter/servo/cache/servo_repo.thrift | 39 - tweetypie/servo/request/BUILD | 5 - tweetypie/servo/request/BUILD.docx | Bin 0 -> 36702 bytes tweetypie/servo/request/src/main/scala/BUILD | 20 - .../servo/request/src/main/scala/BUILD.docx | Bin 0 -> 36883 bytes .../request/ClientRequestAuthorizer.docx | Bin 0 -> 38520 bytes .../request/ClientRequestAuthorizer.scala | 172 ---- .../servo/request/ClientRequestObserver.docx | Bin 0 -> 37438 bytes .../servo/request/ClientRequestObserver.scala | 58 -- .../servo/request/PermissionModule.docx | Bin 0 -> 39332 bytes .../servo/request/PermissionModule.scala | 233 ------ .../twitter/servo/request/RequestFilter.docx | Bin 0 -> 37888 bytes .../twitter/servo/request/RequestFilter.scala | 120 --- .../twitter/servo/request/RequestHandler.docx | Bin 0 -> 36971 bytes .../servo/request/RequestHandler.scala | 24 - .../com/twitter/servo/request/package.docx | Bin 0 -> 37205 bytes .../com/twitter/servo/request/package.scala | 35 - tweetypie/servo/util/BUILD | 6 - tweetypie/servo/util/BUILD.docx | Bin 0 -> 36716 bytes tweetypie/servo/util/src/main/scala/BUILD | 53 -- .../servo/util/src/main/scala/BUILD.docx | Bin 0 -> 37140 bytes .../scala/com/twitter/servo/data/Lens.docx | Bin 0 -> 38599 bytes .../scala/com/twitter/servo/data/Lens.scala | 147 ---- .../com/twitter/servo/data/Mutation.docx | Bin 0 -> 39529 bytes .../com/twitter/servo/data/Mutation.scala | 268 ------- .../com/twitter/servo/forked/Forked.docx | Bin 0 -> 38128 bytes .../com/twitter/servo/forked/Forked.scala | 120 --- .../twitter/servo/forked/QueueExecutor.docx | Bin 0 -> 37871 bytes .../twitter/servo/forked/QueueExecutor.scala | 82 -- .../twitter/servo/gate/RateLimitingGate.docx | Bin 0 -> 37497 bytes .../twitter/servo/gate/RateLimitingGate.scala | 64 -- .../com/twitter/servo/util/Availability.docx | Bin 0 -> 37256 bytes .../com/twitter/servo/util/Availability.scala | 43 - .../scala/com/twitter/servo/util/Average.docx | Bin 0 -> 37975 bytes .../com/twitter/servo/util/Average.scala | 116 --- .../com/twitter/servo/util/BatchExecutor.docx | Bin 0 -> 39103 bytes .../twitter/servo/util/BatchExecutor.scala | 218 ------ .../util/CancelledExceptionExtractor.docx | Bin 0 -> 36958 bytes .../util/CancelledExceptionExtractor.scala | 21 - .../CounterInitializingStatsReceiver.docx | Bin 0 -> 37110 bytes .../CounterInitializingStatsReceiver.scala | 24 - .../scala/com/twitter/servo/util/Effect.docx | Bin 0 -> 37537 bytes .../scala/com/twitter/servo/util/Effect.scala | 83 -- .../twitter/servo/util/ExceptionCounter.docx | Bin 0 -> 38547 bytes .../twitter/servo/util/ExceptionCounter.scala | 193 ----- .../twitter/servo/util/FrequencyCounter.docx | Bin 0 -> 37373 bytes .../twitter/servo/util/FrequencyCounter.scala | 51 -- .../com/twitter/servo/util/FunctionArrow.docx | Bin 0 -> 37512 bytes .../twitter/servo/util/FunctionArrow.scala | 75 -- .../com/twitter/servo/util/FutureArrow.docx | Bin 0 -> 41225 bytes .../com/twitter/servo/util/FutureArrow.scala | 501 ------------ .../com/twitter/servo/util/FutureEffect.docx | Bin 0 -> 39998 bytes .../com/twitter/servo/util/FutureEffect.scala | 379 --------- .../scala/com/twitter/servo/util/Gate.docx | Bin 0 -> 39073 bytes .../scala/com/twitter/servo/util/Gate.scala | 210 ----- .../util/LogarithmicallyBucketedTimer.docx | Bin 0 -> 37176 bytes .../util/LogarithmicallyBucketedTimer.scala | 41 - .../servo/util/MemoizingStatsReceiver.docx | Bin 0 -> 37195 bytes .../servo/util/MemoizingStatsReceiver.scala | 46 -- .../com/twitter/servo/util/Observable.docx | Bin 0 -> 36988 bytes .../com/twitter/servo/util/Observable.scala | 22 - .../twitter/servo/util/OptionOrdering.docx | Bin 0 -> 36965 bytes .../twitter/servo/util/OptionOrdering.scala | 22 - .../twitter/servo/util/RandomPerturber.docx | Bin 0 -> 36963 bytes .../twitter/servo/util/RandomPerturber.scala | 16 - .../servo/util/RateLimitingLogger.docx | Bin 0 -> 37451 bytes .../servo/util/RateLimitingLogger.scala | 71 -- .../scala/com/twitter/servo/util/Retry.docx | Bin 0 -> 37753 bytes .../scala/com/twitter/servo/util/Retry.scala | 100 --- .../com/twitter/servo/util/RetryHandler.docx | Bin 0 -> 38476 bytes .../com/twitter/servo/util/RetryHandler.scala | 169 ---- .../com/twitter/servo/util/RpcRetry.docx | Bin 0 -> 37644 bytes .../com/twitter/servo/util/RpcRetry.scala | 90 --- .../scala/com/twitter/servo/util/Scribe.docx | Bin 0 -> 37398 bytes .../scala/com/twitter/servo/util/Scribe.scala | 80 -- .../servo/util/SuccessRateTracker.docx | Bin 0 -> 38857 bytes .../servo/util/SuccessRateTracker.scala | 179 ----- .../servo/util/SynchronizedHashMap.docx | Bin 0 -> 36720 bytes .../servo/util/SynchronizedHashMap.scala | 5 - .../servo/util/ThreadLocalStringBuilder.docx | Bin 0 -> 36803 bytes .../servo/util/ThreadLocalStringBuilder.scala | 11 - .../twitter/servo/util/ThrowableHelper.docx | Bin 0 -> 37211 bytes .../twitter/servo/util/ThrowableHelper.scala | 41 - .../com/twitter/servo/util/Transformer.docx | Bin 0 -> 39543 bytes .../com/twitter/servo/util/Transformer.scala | 227 ------ .../com/twitter/servo/util/TryOrdering.docx | Bin 0 -> 36967 bytes .../com/twitter/servo/util/TryOrdering.scala | 23 - .../twitter/servo/util/WaitForServerSets.docx | Bin 0 -> 37568 bytes .../servo/util/WaitForServerSets.scala | 60 -- .../scala/com/twitter/servo/util/package.docx | Bin 0 -> 36741 bytes .../com/twitter/servo/util/package.scala | 6 - twml/BUILD | 186 ----- twml/BUILD.docx | Bin 0 -> 37905 bytes twml/README.docx | Bin 0 -> 37035 bytes twml/README.md | 13 - twml/libtwml/BUILD | 8 - twml/libtwml/BUILD.docx | Bin 0 -> 36733 bytes twml/libtwml/include/twml.docx | Bin 0 -> 36807 bytes twml/libtwml/include/twml.h | 21 - .../include/twml/BatchPredictionRequest.docx | Bin 0 -> 37121 bytes .../include/twml/BatchPredictionRequest.h | 45 -- .../include/twml/BatchPredictionResponse.docx | Bin 0 -> 37441 bytes .../include/twml/BatchPredictionResponse.h | 58 -- .../include/twml/BlockFormatReader.docx | Bin 0 -> 37022 bytes twml/libtwml/include/twml/BlockFormatReader.h | 32 - .../include/twml/BlockFormatWriter.docx | Bin 0 -> 37203 bytes twml/libtwml/include/twml/BlockFormatWriter.h | 61 -- twml/libtwml/include/twml/DataRecord.docx | Bin 0 -> 37702 bytes twml/libtwml/include/twml/DataRecord.h | 108 --- .../include/twml/DataRecordReader.docx | Bin 0 -> 37234 bytes twml/libtwml/include/twml/DataRecordReader.h | 61 -- .../include/twml/DataRecordWriter.docx | Bin 0 -> 37106 bytes twml/libtwml/include/twml/DataRecordWriter.h | 39 - twml/libtwml/include/twml/Error.docx | Bin 0 -> 37081 bytes twml/libtwml/include/twml/Error.h | 48 -- .../include/twml/HashedDataRecord.docx | Bin 0 -> 37308 bytes twml/libtwml/include/twml/HashedDataRecord.h | 70 -- .../include/twml/HashedDataRecordReader.docx | Bin 0 -> 37340 bytes .../include/twml/HashedDataRecordReader.h | 70 -- twml/libtwml/include/twml/Hashmap.docx | Bin 0 -> 37494 bytes twml/libtwml/include/twml/Hashmap.h | 110 --- twml/libtwml/include/twml/RawTensor.docx | Bin 0 -> 37687 bytes twml/libtwml/include/twml/RawTensor.h | 92 --- twml/libtwml/include/twml/Tensor.docx | Bin 0 -> 37313 bytes twml/libtwml/include/twml/Tensor.h | 82 -- twml/libtwml/include/twml/TensorRecord.docx | Bin 0 -> 37083 bytes twml/libtwml/include/twml/TensorRecord.h | 47 -- .../include/twml/TensorRecordReader.docx | Bin 0 -> 37029 bytes .../libtwml/include/twml/TensorRecordReader.h | 34 - .../include/twml/TensorRecordWriter.docx | Bin 0 -> 37130 bytes .../libtwml/include/twml/TensorRecordWriter.h | 35 - twml/libtwml/include/twml/ThriftReader.docx | Bin 0 -> 37105 bytes twml/libtwml/include/twml/ThriftReader.h | 56 -- twml/libtwml/include/twml/ThriftWriter.docx | Bin 0 -> 37579 bytes twml/libtwml/include/twml/ThriftWriter.h | 59 -- twml/libtwml/include/twml/Type.docx | Bin 0 -> 36946 bytes twml/libtwml/include/twml/Type.h | 69 -- twml/libtwml/include/twml/common.docx | Bin 0 -> 37047 bytes twml/libtwml/include/twml/common.h | 42 - twml/libtwml/include/twml/defines.docx | Bin 0 -> 37000 bytes twml/libtwml/include/twml/defines.h | 36 - .../include/twml/discretizer_impl.docx | Bin 0 -> 36894 bytes twml/libtwml/include/twml/discretizer_impl.h | 22 - twml/libtwml/include/twml/functions.docx | Bin 0 -> 36937 bytes twml/libtwml/include/twml/functions.h | 26 - .../twml/hashing_discretizer_impl.docx | Bin 0 -> 36900 bytes .../include/twml/hashing_discretizer_impl.h | 22 - twml/libtwml/include/twml/io/IOError.docx | Bin 0 -> 37171 bytes twml/libtwml/include/twml/io/IOError.h | 45 -- twml/libtwml/include/twml/optim.docx | Bin 0 -> 37006 bytes twml/libtwml/include/twml/optim.h | 51 -- twml/libtwml/include/twml/utilities.docx | Bin 0 -> 36883 bytes twml/libtwml/include/twml/utilities.h | 18 - twml/libtwml/setup.cfg | 9 - twml/libtwml/setup.docx | Bin 0 -> 36796 bytes twml/libtwml/setup.py | 12 - .../src/lib/BatchPredictionRequest.cpp | 52 -- .../src/lib/BatchPredictionRequest.docx | Bin 0 -> 37248 bytes .../src/lib/BatchPredictionResponse.cpp | 125 --- .../src/lib/BatchPredictionResponse.docx | Bin 0 -> 38251 bytes twml/libtwml/src/lib/BlockFormatReader.cpp | 145 ---- twml/libtwml/src/lib/BlockFormatReader.docx | Bin 0 -> 38087 bytes twml/libtwml/src/lib/BlockFormatWriter.cpp | 163 ---- twml/libtwml/src/lib/BlockFormatWriter.docx | Bin 0 -> 38264 bytes twml/libtwml/src/lib/CMakeLists.docx | Bin 0 -> 37149 bytes twml/libtwml/src/lib/CMakeLists.txt | 36 - twml/libtwml/src/lib/CPPLINT.cfg | 1 - twml/libtwml/src/lib/CPPLINT.docx | Bin 0 -> 36643 bytes twml/libtwml/src/lib/DataRecord.cpp | 72 -- twml/libtwml/src/lib/DataRecord.docx | Bin 0 -> 37292 bytes twml/libtwml/src/lib/DataRecordReader.cpp | 230 ------ twml/libtwml/src/lib/DataRecordReader.docx | Bin 0 -> 37919 bytes twml/libtwml/src/lib/DataRecordWriter.cpp | 162 ---- twml/libtwml/src/lib/DataRecordWriter.docx | Bin 0 -> 37924 bytes twml/libtwml/src/lib/HashedDataRecord.cpp | 80 -- twml/libtwml/src/lib/HashedDataRecord.docx | Bin 0 -> 37387 bytes .../src/lib/HashedDataRecordReader.cpp | 218 ------ .../src/lib/HashedDataRecordReader.docx | Bin 0 -> 37969 bytes twml/libtwml/src/lib/Hashmap.cpp | 380 --------- twml/libtwml/src/lib/Hashmap.docx | Bin 0 -> 38622 bytes twml/libtwml/src/lib/Tensor.cpp | 191 ----- twml/libtwml/src/lib/Tensor.docx | Bin 0 -> 38230 bytes twml/libtwml/src/lib/TensorRecordReader.cpp | 323 -------- twml/libtwml/src/lib/TensorRecordReader.docx | Bin 0 -> 39075 bytes 399 files changed, 21878 deletions(-) delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/BUILD create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/BUILD.docx create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/CachingTweetStore.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/CachingTweetStore.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/DeleteAdditionalFields.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/DeleteAdditionalFields.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/DeleteTweet.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/DeleteTweet.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/FanoutServiceStore.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/FanoutServiceStore.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/Flush.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/Flush.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/GeoSearchRequestIDStore.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/GeoSearchRequestIDStore.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/GizmoduckUserCountsUpdatingStore.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/GizmoduckUserCountsUpdatingStore.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/GizmoduckUserGeotagUpdateStore.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/GizmoduckUserGeotagUpdateStore.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/Guano.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/Guano.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/GuanoServiceStore.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/GuanoServiceStore.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/IncrBookmarkCount.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/IncrBookmarkCount.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/IncrFavCount.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/IncrFavCount.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/InitialTweetUpdate.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/InitialTweetUpdate.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/InsertTweet.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/InsertTweet.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/LimiterStore.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/LimiterStore.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/LogLensStore.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/LogLensStore.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ManhattanTweetStore.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ManhattanTweetStore.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/MediaIndexHelper.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/MediaIndexHelper.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/MediaServiceStore.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/MediaServiceStore.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/QuotedTweetDelete.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/QuotedTweetDelete.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/QuotedTweetOps.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/QuotedTweetOps.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/QuotedTweetTakedown.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/QuotedTweetTakedown.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ReplicatingTweetStore.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ReplicatingTweetStore.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/RetweetArchivalEnqueueStore.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/RetweetArchivalEnqueueStore.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ScribeMediaTagStore.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ScribeMediaTagStore.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ScrubGeo.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ScrubGeo.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/SetAdditionalFields.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/SetAdditionalFields.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/SetRetweetVisibility.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/SetRetweetVisibility.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/Takedown.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/Takedown.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TlsTimelineUpdatingStore.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TlsTimelineUpdatingStore.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetCountsCacheUpdatingStore.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetCountsCacheUpdatingStore.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetEventBusStore.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetEventBusStore.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetIndexingStore.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetIndexingStore.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetStatsStore.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetStatsStore.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetStore.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetStore.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetStoreEvent.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetStoreEvent.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetUpdate.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetUpdate.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/UndeleteTweet.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/UndeleteTweet.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/UpdatePossiblySensitiveTweet.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/UpdatePossiblySensitiveTweet.scala create mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/package.docx delete mode 100644 tweetypie/server/src/main/scala/com/twitter/tweetypie/store/package.scala delete mode 100644 tweetypie/server/src/main/thrift/BUILD create mode 100644 tweetypie/server/src/main/thrift/BUILD.docx create mode 100644 tweetypie/server/src/main/thrift/tweetypie_internal.docx delete mode 100644 tweetypie/server/src/main/thrift/tweetypie_internal.thrift create mode 100644 tweetypie/servo/README.docx delete mode 100644 tweetypie/servo/README.md delete mode 100644 tweetypie/servo/decider/BUILD create mode 100644 tweetypie/servo/decider/BUILD.docx delete mode 100644 tweetypie/servo/decider/src/main/scala/BUILD create mode 100644 tweetypie/servo/decider/src/main/scala/BUILD.docx create mode 100644 tweetypie/servo/decider/src/main/scala/com/twitter/servo/decider/DeciderGateBuilder.docx delete mode 100644 tweetypie/servo/decider/src/main/scala/com/twitter/servo/decider/DeciderGateBuilder.scala create mode 100644 tweetypie/servo/decider/src/main/scala/com/twitter/servo/decider/DeciderKeyEnum.docx delete mode 100644 tweetypie/servo/decider/src/main/scala/com/twitter/servo/decider/DeciderKeyEnum.scala create mode 100644 tweetypie/servo/decider/src/main/scala/com/twitter/servo/decider/package.docx delete mode 100644 tweetypie/servo/decider/src/main/scala/com/twitter/servo/decider/package.scala create mode 100644 tweetypie/servo/decider/src/main/scala/com/twitter/servo/gate/DeciderGate.docx delete mode 100644 tweetypie/servo/decider/src/main/scala/com/twitter/servo/gate/DeciderGate.scala delete mode 100644 tweetypie/servo/json/BUILD create mode 100644 tweetypie/servo/json/BUILD.docx delete mode 100644 tweetypie/servo/json/src/main/scala/com/twitter/servo/json/BUILD create mode 100644 tweetypie/servo/json/src/main/scala/com/twitter/servo/json/BUILD.docx create mode 100644 tweetypie/servo/json/src/main/scala/com/twitter/servo/json/ThriftJsonInspector.docx delete mode 100644 tweetypie/servo/json/src/main/scala/com/twitter/servo/json/ThriftJsonInspector.scala delete mode 100644 tweetypie/servo/repo/BUILD create mode 100644 tweetypie/servo/repo/BUILD.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/BUILD create mode 100644 tweetypie/servo/repo/src/main/scala/BUILD.docx create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/ByteCountingMemcache.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/ByteCountingMemcache.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/Cache.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/Cache.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/CacheFactory.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/CacheFactory.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/Cached.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/Cached.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/CounterCache.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/CounterCache.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/CounterSerializer.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/CounterSerializer.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/FinagleMemcache.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/FinagleMemcache.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/ForwardingCache.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/ForwardingCache.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/HotKeyMemcacheClient.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/HotKeyMemcacheClient.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/InProcessCache.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/InProcessCache.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/IterableSerializer.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/IterableSerializer.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/KeyFilteringCache.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/KeyFilteringCache.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/KeyTransformer.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/KeyTransformer.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/LockingCache.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/LockingCache.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/Memcache.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/Memcache.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/MigratingCache.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/MigratingCache.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/MissingCache.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/MissingCache.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/ObservableCache.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/ObservableCache.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/SecondaryIndexingCache.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/SecondaryIndexingCache.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/SelectedCache.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/SelectedCache.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/SeqSerializer.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/SeqSerializer.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/Serializer.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/Serializer.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/SetSerializer.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/SetSerializer.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/SimpleReplicatingCache.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/SimpleReplicatingCache.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/TransformingCache.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/TransformingCache.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/TtlCache.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/TtlCache.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/package.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/cache/package.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/database/Accessors.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/database/Accessors.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/database/Bitfield.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/database/Bitfield.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/database/Credentials.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/database/Credentials.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/database/Database.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/database/Database.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/database/package.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/database/package.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/hydrator/KeyValueHydrator.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/hydrator/KeyValueHydrator.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/keyvalue/KeyValueResult.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/keyvalue/KeyValueResult.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/CachingCounterKeyValueRepository.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/CachingCounterKeyValueRepository.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/CachingKeyValueRepository.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/CachingKeyValueRepository.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/ChunkingStrategy.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/ChunkingStrategy.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/DarkmodingKeyValueRepositoryFactory.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/DarkmodingKeyValueRepositoryFactory.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/HotKeyCachingKeyValueRepository.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/HotKeyCachingKeyValueRepository.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/ImmutableKeyValueRepository.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/ImmutableKeyValueRepository.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/KeyValueRepository.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/KeyValueRepository.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/ObservableKeyValueRepository.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/ObservableKeyValueRepository.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/Repository.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/Repository.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/ResponseCachingKeyValueRepository.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/ResponseCachingKeyValueRepository.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/RichQuery.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/RichQuery.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/SuccessRateTrackingRepository.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/SuccessRateTrackingRepository.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/package.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/repository/package.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/store/CachingStore.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/store/CachingStore.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/store/KeyValueStore.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/store/KeyValueStore.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/store/ObservableStore.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/store/ObservableStore.scala create mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/store/Store.docx delete mode 100644 tweetypie/servo/repo/src/main/scala/com/twitter/servo/store/Store.scala delete mode 100644 tweetypie/servo/repo/src/main/thrift/BUILD create mode 100644 tweetypie/servo/repo/src/main/thrift/BUILD.docx create mode 100644 tweetypie/servo/repo/src/main/thrift/com/twitter/servo/cache/servo_repo.docx delete mode 100644 tweetypie/servo/repo/src/main/thrift/com/twitter/servo/cache/servo_repo.thrift delete mode 100644 tweetypie/servo/request/BUILD create mode 100644 tweetypie/servo/request/BUILD.docx delete mode 100644 tweetypie/servo/request/src/main/scala/BUILD create mode 100644 tweetypie/servo/request/src/main/scala/BUILD.docx create mode 100644 tweetypie/servo/request/src/main/scala/com/twitter/servo/request/ClientRequestAuthorizer.docx delete mode 100644 tweetypie/servo/request/src/main/scala/com/twitter/servo/request/ClientRequestAuthorizer.scala create mode 100644 tweetypie/servo/request/src/main/scala/com/twitter/servo/request/ClientRequestObserver.docx delete mode 100644 tweetypie/servo/request/src/main/scala/com/twitter/servo/request/ClientRequestObserver.scala create mode 100644 tweetypie/servo/request/src/main/scala/com/twitter/servo/request/PermissionModule.docx delete mode 100644 tweetypie/servo/request/src/main/scala/com/twitter/servo/request/PermissionModule.scala create mode 100644 tweetypie/servo/request/src/main/scala/com/twitter/servo/request/RequestFilter.docx delete mode 100644 tweetypie/servo/request/src/main/scala/com/twitter/servo/request/RequestFilter.scala create mode 100644 tweetypie/servo/request/src/main/scala/com/twitter/servo/request/RequestHandler.docx delete mode 100644 tweetypie/servo/request/src/main/scala/com/twitter/servo/request/RequestHandler.scala create mode 100644 tweetypie/servo/request/src/main/scala/com/twitter/servo/request/package.docx delete mode 100644 tweetypie/servo/request/src/main/scala/com/twitter/servo/request/package.scala delete mode 100644 tweetypie/servo/util/BUILD create mode 100644 tweetypie/servo/util/BUILD.docx delete mode 100644 tweetypie/servo/util/src/main/scala/BUILD create mode 100644 tweetypie/servo/util/src/main/scala/BUILD.docx create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/data/Lens.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/data/Lens.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/data/Mutation.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/data/Mutation.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/forked/Forked.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/forked/Forked.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/forked/QueueExecutor.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/forked/QueueExecutor.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/gate/RateLimitingGate.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/gate/RateLimitingGate.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/Availability.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/Availability.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/Average.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/Average.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/BatchExecutor.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/BatchExecutor.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/CancelledExceptionExtractor.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/CancelledExceptionExtractor.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/CounterInitializingStatsReceiver.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/CounterInitializingStatsReceiver.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/Effect.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/Effect.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/ExceptionCounter.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/ExceptionCounter.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/FrequencyCounter.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/FrequencyCounter.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/FunctionArrow.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/FunctionArrow.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/FutureArrow.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/FutureArrow.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/FutureEffect.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/FutureEffect.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/Gate.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/Gate.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/LogarithmicallyBucketedTimer.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/LogarithmicallyBucketedTimer.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/MemoizingStatsReceiver.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/MemoizingStatsReceiver.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/Observable.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/Observable.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/OptionOrdering.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/OptionOrdering.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/RandomPerturber.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/RandomPerturber.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/RateLimitingLogger.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/RateLimitingLogger.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/Retry.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/Retry.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/RetryHandler.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/RetryHandler.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/RpcRetry.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/RpcRetry.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/Scribe.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/Scribe.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/SuccessRateTracker.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/SuccessRateTracker.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/SynchronizedHashMap.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/SynchronizedHashMap.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/ThreadLocalStringBuilder.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/ThreadLocalStringBuilder.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/ThrowableHelper.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/ThrowableHelper.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/Transformer.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/Transformer.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/TryOrdering.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/TryOrdering.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/WaitForServerSets.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/WaitForServerSets.scala create mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/package.docx delete mode 100644 tweetypie/servo/util/src/main/scala/com/twitter/servo/util/package.scala delete mode 100644 twml/BUILD create mode 100644 twml/BUILD.docx create mode 100644 twml/README.docx delete mode 100644 twml/README.md delete mode 100644 twml/libtwml/BUILD create mode 100644 twml/libtwml/BUILD.docx create mode 100644 twml/libtwml/include/twml.docx delete mode 100644 twml/libtwml/include/twml.h create mode 100644 twml/libtwml/include/twml/BatchPredictionRequest.docx delete mode 100644 twml/libtwml/include/twml/BatchPredictionRequest.h create mode 100644 twml/libtwml/include/twml/BatchPredictionResponse.docx delete mode 100644 twml/libtwml/include/twml/BatchPredictionResponse.h create mode 100644 twml/libtwml/include/twml/BlockFormatReader.docx delete mode 100644 twml/libtwml/include/twml/BlockFormatReader.h create mode 100644 twml/libtwml/include/twml/BlockFormatWriter.docx delete mode 100644 twml/libtwml/include/twml/BlockFormatWriter.h create mode 100644 twml/libtwml/include/twml/DataRecord.docx delete mode 100644 twml/libtwml/include/twml/DataRecord.h create mode 100644 twml/libtwml/include/twml/DataRecordReader.docx delete mode 100644 twml/libtwml/include/twml/DataRecordReader.h create mode 100644 twml/libtwml/include/twml/DataRecordWriter.docx delete mode 100644 twml/libtwml/include/twml/DataRecordWriter.h create mode 100644 twml/libtwml/include/twml/Error.docx delete mode 100644 twml/libtwml/include/twml/Error.h create mode 100644 twml/libtwml/include/twml/HashedDataRecord.docx delete mode 100644 twml/libtwml/include/twml/HashedDataRecord.h create mode 100644 twml/libtwml/include/twml/HashedDataRecordReader.docx delete mode 100644 twml/libtwml/include/twml/HashedDataRecordReader.h create mode 100644 twml/libtwml/include/twml/Hashmap.docx delete mode 100644 twml/libtwml/include/twml/Hashmap.h create mode 100644 twml/libtwml/include/twml/RawTensor.docx delete mode 100644 twml/libtwml/include/twml/RawTensor.h create mode 100644 twml/libtwml/include/twml/Tensor.docx delete mode 100644 twml/libtwml/include/twml/Tensor.h create mode 100644 twml/libtwml/include/twml/TensorRecord.docx delete mode 100644 twml/libtwml/include/twml/TensorRecord.h create mode 100644 twml/libtwml/include/twml/TensorRecordReader.docx delete mode 100644 twml/libtwml/include/twml/TensorRecordReader.h create mode 100644 twml/libtwml/include/twml/TensorRecordWriter.docx delete mode 100644 twml/libtwml/include/twml/TensorRecordWriter.h create mode 100644 twml/libtwml/include/twml/ThriftReader.docx delete mode 100644 twml/libtwml/include/twml/ThriftReader.h create mode 100644 twml/libtwml/include/twml/ThriftWriter.docx delete mode 100644 twml/libtwml/include/twml/ThriftWriter.h create mode 100644 twml/libtwml/include/twml/Type.docx delete mode 100644 twml/libtwml/include/twml/Type.h create mode 100644 twml/libtwml/include/twml/common.docx delete mode 100644 twml/libtwml/include/twml/common.h create mode 100644 twml/libtwml/include/twml/defines.docx delete mode 100644 twml/libtwml/include/twml/defines.h create mode 100644 twml/libtwml/include/twml/discretizer_impl.docx delete mode 100644 twml/libtwml/include/twml/discretizer_impl.h create mode 100644 twml/libtwml/include/twml/functions.docx delete mode 100644 twml/libtwml/include/twml/functions.h create mode 100644 twml/libtwml/include/twml/hashing_discretizer_impl.docx delete mode 100644 twml/libtwml/include/twml/hashing_discretizer_impl.h create mode 100644 twml/libtwml/include/twml/io/IOError.docx delete mode 100644 twml/libtwml/include/twml/io/IOError.h create mode 100644 twml/libtwml/include/twml/optim.docx delete mode 100644 twml/libtwml/include/twml/optim.h create mode 100644 twml/libtwml/include/twml/utilities.docx delete mode 100644 twml/libtwml/include/twml/utilities.h delete mode 100644 twml/libtwml/setup.cfg create mode 100644 twml/libtwml/setup.docx delete mode 100644 twml/libtwml/setup.py delete mode 100644 twml/libtwml/src/lib/BatchPredictionRequest.cpp create mode 100644 twml/libtwml/src/lib/BatchPredictionRequest.docx delete mode 100644 twml/libtwml/src/lib/BatchPredictionResponse.cpp create mode 100644 twml/libtwml/src/lib/BatchPredictionResponse.docx delete mode 100644 twml/libtwml/src/lib/BlockFormatReader.cpp create mode 100644 twml/libtwml/src/lib/BlockFormatReader.docx delete mode 100644 twml/libtwml/src/lib/BlockFormatWriter.cpp create mode 100644 twml/libtwml/src/lib/BlockFormatWriter.docx create mode 100644 twml/libtwml/src/lib/CMakeLists.docx delete mode 100644 twml/libtwml/src/lib/CMakeLists.txt delete mode 100644 twml/libtwml/src/lib/CPPLINT.cfg create mode 100644 twml/libtwml/src/lib/CPPLINT.docx delete mode 100644 twml/libtwml/src/lib/DataRecord.cpp create mode 100644 twml/libtwml/src/lib/DataRecord.docx delete mode 100644 twml/libtwml/src/lib/DataRecordReader.cpp create mode 100644 twml/libtwml/src/lib/DataRecordReader.docx delete mode 100644 twml/libtwml/src/lib/DataRecordWriter.cpp create mode 100644 twml/libtwml/src/lib/DataRecordWriter.docx delete mode 100644 twml/libtwml/src/lib/HashedDataRecord.cpp create mode 100644 twml/libtwml/src/lib/HashedDataRecord.docx delete mode 100644 twml/libtwml/src/lib/HashedDataRecordReader.cpp create mode 100644 twml/libtwml/src/lib/HashedDataRecordReader.docx delete mode 100644 twml/libtwml/src/lib/Hashmap.cpp create mode 100644 twml/libtwml/src/lib/Hashmap.docx delete mode 100644 twml/libtwml/src/lib/Tensor.cpp create mode 100644 twml/libtwml/src/lib/Tensor.docx delete mode 100644 twml/libtwml/src/lib/TensorRecordReader.cpp create mode 100644 twml/libtwml/src/lib/TensorRecordReader.docx diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/BUILD b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/BUILD deleted file mode 100644 index 542f5ee81..000000000 --- a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/BUILD +++ /dev/null @@ -1,60 +0,0 @@ -scala_library( - sources = ["*.scala"], - compiler_option_sets = ["fatal_warnings"], - strict_deps = True, - tags = [ - "bazel-compatible", - "bazel-incompatible-scaladoc", # see http://go/bazel-incompatible-scaladoc - ], - dependencies = [ - "3rdparty/jvm/com/fasterxml/jackson/core:jackson-databind", - "3rdparty/jvm/com/fasterxml/jackson/module:jackson-module-scala", - "3rdparty/jvm/com/twitter/bijection:core", - "3rdparty/jvm/com/twitter/bijection:thrift", - "3rdparty/jvm/org/apache/thrift:libthrift", - "diffshow", - "fanoutservice/thrift/src/main/thrift:thrift-scala", - "finagle-internal/mtls/src/main/scala/com/twitter/finagle/mtls/authentication", - "finagle/finagle-core/src/main", - "flock-client/src/main/scala", - "mediaservices/commons/src/main/thrift:thrift-scala", - "scrooge/scrooge-core", - "tweetypie/servo/repo", - "tweetypie/servo/repo/src/main/thrift:thrift-scala", - "tweetypie/servo/util", - "snowflake/src/main/scala/com/twitter/snowflake/id", - "src/scala/com/twitter/takedown/util", - "src/thrift/com/twitter/context:feature-context-scala", - "src/thrift/com/twitter/context:twitter-context-scala", - "src/thrift/com/twitter/escherbird:media-annotation-structs-scala", - "src/thrift/com/twitter/expandodo:cards-scala", - "src/thrift/com/twitter/geoduck:geoduck-scala", - "src/thrift/com/twitter/gizmoduck:thrift-scala", - "src/thrift/com/twitter/gizmoduck:user-thrift-scala", - "src/thrift/com/twitter/guano:guano-scala", - "src/thrift/com/twitter/timelineservice/server/internal:thrift-scala", - "tweetypie/common/src/thrift/com/twitter/tweetypie:audit-scala", - "tweetypie/common/src/thrift/com/twitter/tweetypie:events-scala", - "tweetypie/common/src/thrift/com/twitter/tweetypie:media-entity-scala", - "tweetypie/common/src/thrift/com/twitter/tweetypie:service-scala", - "tweetypie/common/src/thrift/com/twitter/tweetypie:tweet-scala", - "stitch/stitch-core", - "stitch/stitch-core/src/main/scala/com/twitter/stitch", - "tweetypie/server/src/main/scala/com/twitter/tweetypie", - "tweetypie/server/src/main/scala/com/twitter/tweetypie/backends", - "tweetypie/server/src/main/scala/com/twitter/tweetypie/core", - "tweetypie/server/src/main/scala/com/twitter/tweetypie/media", - "tweetypie/server/src/main/scala/com/twitter/tweetypie/repository", - "tweetypie/server/src/main/scala/com/twitter/tweetypie/serverutil", - "tweetypie/server/src/main/thrift:compiled-scala", - "tweetypie/common/src/scala/com/twitter/tweetypie/additionalfields", - "tweetypie/common/src/scala/com/twitter/tweetypie/client_id", - "tweetypie/common/src/scala/com/twitter/tweetypie/media", - "tweetypie/common/src/scala/com/twitter/tweetypie/storage", - "tweetypie/common/src/scala/com/twitter/tweetypie/tflock", - "tweetypie/common/src/scala/com/twitter/tweetypie/util", - "twitter-context", - "util/util-slf4j-api/src/main/scala/com/twitter/util/logging", - "util/util-stats/src/main/scala", - ], -) diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/BUILD.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..aa206528804cf63039662212e261e1e7661a4403 GIT binary patch literal 37364 zcmagEWmsIvwm*!!dvJGmcL)S`m!Lr#2@Z`1cXtTx?(PmDxLc4waQA;_X3jY?=id9i zUv@uTRqH2f?XIf5yOiZ1p|HTfz~I1A(s{HiRSV;iz`?-AV8FmIL9Kcc0Q=A8_MeT^ zJsixP4Vc~SY#WmllvYL2zMQ>aC$k8XdP$&Sm+d&vIxxoJOIByx@ainFoXA5w+)eO@ zY0M~xz%a*Urrr4vuht25c{fq(Nl2a;7-VYYlS3AJ=dXWdKDFT4lZqpgU6k1+nj3_v zY030{H_Z*sx?9uFZ-fziCZ4Mskfi+p7EMzbqlrN>6bz>-GzJ}7oj=2q*FoW+u6i^= zv&-;lZ%o);b$ zx;oM7K2}G8GWec%5-6F+Jppty^<)N#FzM_aF_qpycl~#FbcHdL!VgQKhIezb3U(73 zej}(~xHLp+Rolg4l1DlCc-|b3B*=Yka)b1i`6Ly6IwXyRX#GV8yzVbhp7uXNui)Jy z`B&Y^Ja-oDxvU0!HI-*frqg>#A}T=dj{ErJ^@vzp{!UW3_j$2+eNSZUj{NHrmVzOe z@;|ERK`keG531e<1Q-}1=+nr_+}4?e`S-Ole)0n(8=Bvlu+#`uv3-+g4};B42_Vj&}+V2Po~Hc-n%XFecru~&PO?xLaHXbmnI zzQdo)U417=$2L9Uh5|*@ocfO2LX%XOVFPnekFNf7MyyI)(um$p2BjpZGy(k@@iVQK zix1N*00tl}-^3MOT-o}=)-C*Ar0KJav7hKstOL4QnxYvSE^h&ftRv>NgzUj|bXja` zCQjR9yYeT!@(bp}KnW!^LwCw+n8^-|0ba`n!Qz>g-S_)UloXR%o>LYs8-Xgm4%5WH zSZh6^_aC|UHNZgsfSvaB&_Uoz%&e~J96g^*MQc&Mn&*SVRwI#plSWkosJ`zGrHl%C@ zn}Pg7C_lwO9T(@^mnpKW7S*D>Lvb~9h2<}rqVcqC6v(7|Sad)A{fWa8DB|nUOPh;` z!7|ZH^1#EA2R_PA8A8o2mBR-*ZQDY*;#cV^?Hq3CvEi>aA+LU}X?rxiWb*|Q=^_XH zdOv8ax}RxITLZ&Rc;fm1jf4u$A*zz5>eiykz7>Ar?BuvP?Fwm7j?^52gp&L&Z|0<= zLNp)`ZcWd1129lnJ3KeHv&Q61(9iY!cC^p|0mYXnvdV!~gv8P2b3)lw5Pa4?c4_`-=9oG>WtHX!)S0@k1ouSI0 zOR+Tv(G47prpGGhVVK}Qr)eoyjd_vRn@n5~!#X%CF-(76K@r_(@G5FobnyQ6Y%VJG z%eD4?;5QO*^=^00oenkRSmnb%&DGk%Nb_{U!i-#8}q4E+^8$A5-$J2gR4Q8UK72$Fl zI;GFljIdPgcuo0-9p(x$p{gMo%4DJ^6A}UjQ@T^Fg9C|0T?0kEDC`_Ad~{c;?O6}ug17mbUnKv$F}7zXUBIBh zz*K4e{K2{boXl82zgibN(Bky_&X`PB0<3al^_)Fn1-PDbtH))U*;5akl1W7n!$8To z;ll({(}l4~AyAqRK3w}0P_9~`ONc!yfddFXYt*#H`Wuqq?wSu|ouECa zx%sm(N5c`^Q)M;CA$5`@kQ*z?;XZ4Q)Ije}R8&@tN>5tjFMKG-ivHC9@wfmiw(7$M z;9&qn){P3Gq<;>+ z=hT-;{dMt+e?!n2mtz*sk@LVdFIM->B!_^ePjw6^EZmUjLM+d^A_aQ+R=dp>mSsZzoxg_N$>f-CBm$mjGK47e=ezb zpRLB4Rzix_#(HE`!O}xU23_0tQWjY`Jr>KYE>?I?yj_?K@c~<*U0%{SiYb*;cz*!g zwvdu*^Lyj6D?O6>w$wOi(36m&TBot zbh!PFgq|{#l6_DnZrj5N;ey$)$berE)r(P&{H%S}7kplsf*-pKzi(j90M?SNq97A~ zWw@d$J^V@Av4^M%*?T9Y#j6!-J}8Tm)If~z=ZsEAc8yC5_ZZKy+Ws%XqWFh==WBLtbH9}=O^dVk zX^X6^sLr1ok6ia?e>x69>VW)p%qB@n=r4h|^DckwZbt~M&Zn8{&RNlyYaQ(PR+JsN z9D6U@V8h>bsIy5>mecojcT@nGgxYRa|A~CEe*6he!#2m#Wk-L%^`)hsC0lI&srmIi z^}W$6W7f+fH`PT`bkWipeXK@$TzApOc<;8fXU7Y=UlI06O!CyDKX!^(Is!jbUGF%t zXSYJm>ndX|zK;D>riFkK zVmKUh`rUz|4|U=4=zgQ)@)TjRzJwJIjOGwFW|#%>*ycT<)6F2zfYQf?g$gblmc1tzMQ=x^aUqi z71>9;`}LK&onE@S&^uUqCH_`oZ&PpGj8S68fA@~tCx^yvcJfwjVM73qq2WUSZzKdN z)@-n{IfkGmYRYj>y^MyKO(iKje@!oU=aQhf!puo+(x-}p4~YuT2(_(L19b?Ljd}K> zt=Lsj1&7jV@n7nAbRl#kXW~;ohU8>__G~A=n5=5K?5wca5?N1o?%h(X*9_=GhpJtg zH#VT)qB7n&JNR~UZ${|*0&9q1(J)UaQMBj(te_u-VFaalmkHU=ac^ujwrjCq3MT2+ zEs-L@URaZ2ROI4Sy7Gx9rZqkO=`g$gDz*7 zxYqk)p}zA}41ZD@I~?bg63u<%H96ju>zQgOzK6i?EdR`PR5^}71Pd6Lp$0S<>c4XB z{Mp0S-1+yy1bW&@*paUD>F)lTZ}j}bE;a~kc*-6u-j(p9S7&zZ8HWPL?5}U%a6iSI z82M6>iIQljYG{5ai?0*t%f?Zr+tbQQP&a>h$?@&5Jp&q%L}$F5uJiPFBX_mxooPN5 zPo7@21As4h-U1K%r|!C^*~zOf_AjRyB8$U-*N2$5ho{A}=wgxP<6VRMhxLp0l==3j zgV~=q?I9t%M;J^}1e9^Q+^YZs8(t4%&cz^t<-mtNk1IcPHf|pN#H8iWmEVjl#tJ zmcZrgVJ{tf*Ts)t6hG#sOdi#UoQh<<;t0z-y}wZ29u5h-H)2_R0*P|l^xZf?9Une< zT=(Jq_97xaDRiQ>0op9vdGSm85(9-PeW`s1-wmTqwAj7&Z2bp%} zoJ40lohRK~x~CKIj9*6potQjd_&h1D63Tb!Ts*owR@Ou$#bbPfSzf!=y4ss7#*+rw zeC^uTe7f}Y&bnT1BpxkPQ;7Q=H`iHEH-V{AB;GRFCuDB})eqe!z18FM)XDYFpLIik z=;>7WpWER(&o}VfQ$&Cs5$f&U0wqA*UGp(;@Y!A=OnPFEvI!IwC&2 z!7Lr^G3LRzzAvu_{T9A(FW2iYpVRf9YkZfB<uH?v;mF^S8gVh+o&i#+KTHS8xY=W*fJ!$R-y2l=F&pS3Mn%Dc)eOI0XM849C z!MFBMLh4%+Sr0>&e7tS~O@#CvxVqHc56BhiLi$H z7HY!~UQ;H;D~cWmE=l~cfW52drM>5Zf*@k;P21et|0$;=5}*~sl4aEq+Z-OesLk(+ z`*iYp{?m>jlX&Pmx;Hl2E!=l8Zz3aF*~mf)-UQ(@i*k*THOXgnvX~DtDl#P)s)-!s zL5zD?3}kXliyz?P72CQid^ZVM?ls3chOrhZI@mJu!BuQ8a++UC@l$of8DF2)tvUs& z&ISsW!)w?$Hf5Kz?RFB-3b-LZz^P^+P(k$`NIH@oCFBP&HtMK~$F6*)BZITt!0IuA zyDIX-3i41BMOf*eBSo~^sL0Bffm5YmzzA@NZ}ub2{9zyv6Ngri-BBLAMFjxY;T_cz zMN_=QK?_RgfF5BIzr=|Ri0yzb$o<{<3Dk-6uTH3KN&vXnU*oG9@u`@hSUeC%`eZjC z{)K(Q84n621&yQoBUBfJ77W7uN9dnaP^C0y)@1JgMR2A<0ct_`Lq&22v{~N&koX^{ zSkKEUoPZS2sJ{zyB>?GBMFV-oYWTrKipca|5}8QhXgm<%{!l%a;MR!N@q5(2n+lvI z8m3&^yD$y2`6YGdNxO(OU3|_SzMnCdWk*vFHX4TeOhwA(z_p;&8gmYul_kN ztaPxqKl*k1K5A3Mp!r6UB-(z5d08|`Kl+R-4*%`R0ZD?%W7-&vajldnb8~Qw^!60! zx|HdLJh^qzzV|VNnf6)4CARJJ=<6jknR%+`*E7*7S;KX?3_-^HVQ($4%j;Ea^ z<@g{DXL|gHDG#Fl2AhH_u~}ze9{whg;(nNQe5Yyg-Y(n2+n$fg7{VFb^OcLQx7%4u z0wrqUhI44m!VQz!DiP&aTcp-f0#3Vi9mQnpYwvp8kjgE+dcRZB+Q!j|`%3pfbn;zp z;`d8x-tNzCYM-W1MsY%q%NpDvp@!)-aJEa07BT`}UI)&Lln%z(H$D@Gb;yoosD2pF z*m{mH5em(XhB#wdWh-w_7~V;Msh6B@Uce-Gftn&jD0UouN))D2*D!oY!HV zYaYCzM4U}v1XnUKt9;C4Shh6S)0d#g9EYdwZyk27>R@O^(sDxAAKh<@kNWwcDX+@R zr9TNPYhar{Ebu2~v|qxSOh%Ki>G2Uq#+C2tc`o{5pmZuR=g}8fzDIZEAvwljl&MW= zxUD=#zbzi-MS#A1w`2P@4~5Tj5#=K1nUrZ2ZWLSRr!{02r>JvsOSG5$&O@xDoqY)s z9+mg`d|wb1T9`R|Kj+Ev=zpq+L8No20uOXXM)S5ByD6kAVo_+{mc#V%hG!%C$fsLW zF!taXqJufvPFjqKKJ4?w?SAlcFQjK3eYia%t@mD zIyQbE%r`|GI^h&oVGv}#nY?PYKM#{&xn|9aLK6_c{8ga2C80-ysu@FfzyL)Hw^adU zk%x_6IfilV*~yu+h@+f3SzYqnM|--#Bz>}aK#3$SsFi1+h|UE69XAa^fTDf6v% z8K>J_$#9NBti=0R!y$RQ#E***W&urqj5ZySUGv97gthd@BhjY9wLAj8UK-IGdSRE# z&NuzDJ5{4@p!Vdx*C_Z% z4ULu!@gIvU(=g5uBy*h0L2-FVIF>G-l$POU)Dq`;Yv@Gz`(_>6a}30)IOCBo64p%{ zd{tm1*W;;VyzSHv7teFpMl6z@ zVjCzK9Hol*sQOiulGg~|YH+ra9PTO@e!S2Cu?rX6u2krbvTrN7=SNXGu4b4$3bU#; z3rXUtM|a}JOy=TOc(Z70eh7qt)(%7F@FUk|8dGbf`BhcwErv-rDf3&>eHRy<>0Q#w z1IL!$G)YBQrowEaR-x>-)scO1S%&BjmAvA0J0*yk6}~pf1t)8&tF1Ck&h5tSMLf&0 zx=#Amqipe1!$i%LuhKlS9Eu+%dBxaw3lJ@AE$hR^8~*`9q~;%H)_O4%ci z?5$!1qf%f%eAHfyE_i@#@5+7tq-t~cjuHc3T2@ZgwUx|kicxx*jH#;P(Ri`3xJPVV zt!HD&Mgi|;xs>ScFzSvk`>hPcP6*GU*P_t=D}R~=VO^gZA;0Vf6qdF+CcvY5_gSd~&0CCA&Me)VQYbFP&UYqL`5 zj=jsx2)X{t4utQM6FU4O_U}_j$!;20=(tJJiX6j4c_K1YzcS3EK}lsvRu2qgvuecK zd-r-gs_fm-<1r!s;5VHBJ?Y$RKO1~rdzTMkhobuFs%et*X9oCV1?`l%@8fqz$m{J% z=7xdC&Xr-`K%eKlTwua#A{Hc_usJPXZBQ*1mCIKQ&djwB&ykplA>--Hz12J{xE!lm zBvrcw`5YGX-M_l0Qre4AGrFrD-x=<50N?Wpz7gS}3vct<3^upy5NuMxaIvx47d<{W zynHL3+;&HZ@|ylUi1>5r_B+HqRXJzk+R`$#=4g^eWp->fglmSK-D#ZMgO*CGes=q- z-sz)+Gzls$lTZQjDBH2Ctma9!#;!5)*-=*?%va(7&N&aD=c`!@0?f|CJL?i4*uDG#MB~grWBa?Wac9spd zp7=h+=Wsklt}9~~gl=f-ZQ&h8bz&+yUvs2$zC)0~fegzx;xJB;WKxkAW7 z8u5)l2ZYVGHGtR=Ch{==lg7ER`Vd(|Ed0=p^2>%a^;aG*UdJM55RU%=N-mG3upXoS zMqmJ@`(91Z#^=mkP>ujD>Wz%z05ctNz`h^mcnwKB%r@? zw#fONqJkNMgRNm1lC@nDDP!F|_{Do4m(TAtR0W=H>|j(^wnFeDIZ>XSD5*kyFVlhg zRbAe~zc%~iM{}vtKGS8kIB_cgl2R15E&R%gUsiV~=M4~?Wm50(GG`+5f*EADrRsEM zxgo`t!n5fv_#(!T)!=5!ZiT+JTOo`blw!-_*4j;#Eo(yfNH=4hi-RlCrtG5$>6aNc z$TdmSWg#5x-K5Lr8@lJeqdqd2fUP>d#=iM*8}Y4u8ENFWG*|&w1po@iLGqFA{3E>N zukg8lhadh941q8kD>auW zYg-)P>CqYWy##k-DO9=I+83iUgTTKdTbJ4e{bs)+-R@z=a!wAM1?xP>(+Xv#zwk(^ z(@cPJwKUhzP^pCTD3~XRe6DvkBu#PDDL|vJsIzuyRe>0Mo4nkX|DE&4l-#Vb^oxlQHwRHV$Xw5Yv6 zH-70rLamI+VVT0SQ={a!b&`!~@hi#v3W-QI0sG{ixGz6+uOFSSrT1yHhSiQPy{{T% zu}VWtCL<5?rpP93c9&hX$}B!5#i@w;+&yAIF%FePjYC+Kao=seguTy?RoiQsQ>(Mf zke$=Q4LrQ#w{OF=f7In5ni{2$&$VB9Op^jGD2PZ@&TCxjMQwcD03?OG%>j_v=}SUs z1gp#3r#N)HMlbWsQT>ss5G3xttJ zT6+1P8NHt(Mvm<&vucg;&etd_uAQFOdZfsi9XL3mg}7XqE{^a!zr9k2VqD5xnMR02 zpoc(+VR%l52MD;)0?9Pm-s_@)H9k(RErs45Ce z)M$C5`35+dt{M9I*`n#H*KgHOfP*1AxXo1c=7tbRG)V1thya9*_Xhx>KZr_V}>-s?<)l4uWJ zT#sM=KKKR-i%83LRyd1EK?*f6KVuV9IpJK>Hb8T?wi85n0$=h`P?=X5UAh11Y}l+o z=iEvUigHzUMX`v~^r4<~HSC1j;jyepO7t>Hvow21Sj$vN^pa1=yDFMImq8h-gAgb$ zB^pFdN@T$FZ*vGljS5md(YQhrQTF!e$|>iX<(_cCG}z#)bpK~IX-A;4&)fr#M}7uG zX0-k<#bXWk6RFDK2C$H1rzmX`;l#iQcYCLFR5>u8o1bwdz1dT3id|&_yV?WM+bD0xGK_X*~a+C$#EHpnWmPC4C(&e|2nqynLwfMf^DD(}_q$ zOH2^;-q4Yv6=g^(@SY~5dg_h}u^^r9k*fhNW=+rNPP3|$EV(yVLPJ9=2-2M`6qp8{ z*|mT~1)#O!x|rxotU*!wk`Qm^Aew{C zMOLpJ^Bf%{zBce^MMmjO$OM89#_2@M|VS`w8+iQl5)R~I@+$&fR zaS&9lW(&{|POu#2F~5#DBFNtJ^vr|}9(wJVsxeAe zbHFy5u?^;*xii85!H8>9#kn(K5|%U7W*xs3p@m|7^G^Wdi^Ze`HxXr&HbkpUt*XHb zpKv9wXGV(^&>{EQm-(AUit=<_m7>Kw+26jGg?{_)4bhf&^f@tOJ12DICj8U4)F=oN zbYZLUVf!8sI`}zwP}!^rGp+F?Vzg;!id*6AZz}htf2&j@X#lD0hyAS*3cNPeWVrRG zH|xHc1g;%|zYMs`6Xb}0!y9C%KanXZQ>eDQmNt@&T=hQO*SxuR4 z4DfF**Y7@~d|iDxT|n1Y<-aK6I2TuRG^!3ao!o*tS)oq(id@5V1G6;19cG8I`b+mi zypFB8A*RVrhV~FmmsRHIx7{Q>OQtfaDcQ{WRnkD-Vqlxre&)Q9ZCNt|4X81J*K$!c ze!$Gmc>L2&CMam?&mi9a8I&}+$8@uQIlvd@jB)UrDzyUH_FN$obNqgQFN))xX9vbX zg;eA3epdoBw1YXNyRpprOIk3w7h15L%s<+hsAT0AV46&6rozm9G&?&xf?Uapsjelke8a(t@Tq4 z)Q#r6F?{p71x|90mmLOUZ!lFW&>&5_VVlg5kFgh{|6|y1YPmnCF+kL?a=&-q6RjHy z$jQckP`jFqgQx|#|D^s-g&BeJe^6g^4ZwGV&392&1Piucl$-A z9njH4*?ug78A0J5s)Zs~GvJ_2ZnkaTAJ1)CJY6#&+PT|{@q3qD_^#P&4(TuQTbB_K zxf<*r%f-&dhC ztMcf=t!Y1&(Xwn~7ED*=q)}dp$i=OHRjaWR)u=B08`n)in^36(g>A8L^15d5=zu#@ ztUvsXc+H#_85-3w7!~Hy1f$4tW1|E%)7V3d=XYipKW-=mgGd1oE`Hr z*E#B}3oUZ-D}v{2kIQ*lIm(5E5PCVKvOrTv;Of5kR;rjz{q9b3mh-C>L=%U`Rn#o! z&(gAdW&po}O(!7hl(W(m8eIW$rr~nKKiTt4^s5z7t`)>&_m6|FCjM}LQKfD#27Jj` zvq^y9=dy$%*&(4B&Ztl6ekbzt-n*O%o@GZR;{=McD`&foRu9ZWrZ7Z zNuP9KKc$OuNcIH0CG#`(xq4o=Emr)?qwZbN=-}VLuDoW={xJEIv+|~EsBN}kzJqPi|Zq2SLK5QC&bb4?H zT7OgFgOKRenL(S?o8Z%fgM>ryS~5d>LGWB^84Pqo17N{Hm!%8mkokMgTK2&N`;kmr z20}LnQ{wQ0b{$)gp@d-KexcwWp;|~~6G>T0Xn4gcZ_GmCASO)V7+5=PxwB!jTT&Xs zaFhWW$Se-+F%}mP9Z$5|!6q#A#)2fy+@pFEHLx!7kiVBns1bk8S;$cEZDW5X zF!Qkk>88zAB`&C22)=%631Sf_5eSxh5 zU0|Ak;EXb^F98j?U0cwFC!<6|h^#SW9X*Cvte4WlPkJoLDUEGF@GH&va|pK(PaKvW zw-QW4+EcfTDOgj*rFKyAPRc;ZJAs28@waV(`e*X&a`gX7UQMTMSL)Xy;NF^QAWd~GFynXy|qX6ydAHZwg z^}FR8^;!}t78W-lAO+nG1cZ+EjmQhx*UW|^&wJhA0ibYLyR4sIO`_JY>*UA^hef{9 zttWG%B{&89nfcAtP0puX;G!MnT!1DO>0r&LN%RX1 zD{YC8(oIb)P;frK5C1$gnqk$k*m^D7p%bTRs=4>JqX%IL@iO!beUqZAI0`-VEN^Kr zSKqVlr-1JeSBTVI2VQ+jvJ=x_4ssLK5z?glA*Q(F z8D7p84IAWFHr-%8S$s;ALr{qw%ohWs~G0JY3SHRJ?<-63nvepWt+ zUwI#tyr2hoBt&B%M1DYO&Us7xM77geHfuKyK4w$zGouLH61L)k8pag|*c!&w@mKWF zhi%sGINW<%<7xS0Cid>zjN~#75sgF$V%%S(H-A#$ET{qyK}mp|m`b2MRB<^fn@65k zL}Wz&%AW&lsljm(d-vsw&$*q?tVL+HN&}tE+CZoC0<;QEt-si{tnDYbU<`tH$+>1j z$qK6ErguS#jSjqh)UaQ;_s(VJbi<(r24b5DB}}qI@X^f!{H0KU#S~y!YR5kx%j_j* ziCTd!OkXuNt0$%8o@KZy@J%*G9+ZqoKyRV9bd`q55x>gH~#Nqf^>~SAf2>Su8=z47wa~Us} zJ*R5}FqXJTa8N9sQyMIMO;}Qmt6YjYzoh<)!{t%MgW^LuOM5%ftCPL{d{)uNg?ghbN5;OoTG6o zBpdSP27>-R4?hC|SfnU2MwEKZKM?O-?!vv<89-7NQ;z*ie|uV%Gbsx#@&R4_{MfU% zItr83rT6K#;Ab@In>9XXkl=v-2oA_8g%Q-m zG2ADSjM|oyjLQE7?A}|Q6d3a_VCA;YX3@BlLtxm?*Ec}5qK*w-5$tDqru)1DQJ+pf z1YpTf5r}9uri{SK)lBFgz)=GTz?6iU(yjNKj24{x9fW9AW_NIqS)q< zC&0hAKcjt%2pmUHirD`c4C7H9hVpV-&x=Mt%NffsWwOV7iF z0XakeD(3&18`t~?lOY}2u^kjpescjXom-%avO|jiJnk<+M`7sIAHL$A?r8Z1cV6VC z^%=4gFiihIUVstM-g-A6!Uro%!d|IADi)}}7-3H57@CHe@kKwtBDRuMv{+KZ00B=4 zwM6gh-E|}C^ms8B+*dPNfY8UD14vx;r*X`y=tWWDG9qhqxjZzlpGKicCd^4vWA@2uuF#FoK}1mW$g%R6@Xqv`)X>mN9j|-NAl51P4NIG|1iy;a zjf%e%=mpLU5IIBmZMh@b42NJ^^5gQr^*ZjJ%#iSIB(i&f4?8B6f(=Jh#v?iqu2HA` zNq@lk7k#m*rQjAc$o&3x3!ps$ynTO=^S{ICAcuGFU#@Xb390=c@Vh&JZXS?W5k|4H zh}wd%GVzH?(v(bj4uz*@t)20sYK7c#$%Sqkx!7g&?<=>&qkw5xWIiWrEiSxVQC+12w(aY~^}?P_h~-8sK|O4%lMJ{DV3EoX=Xo%m z#R|pW+bpuqzeRc;L+T$T^zNBRS2OVpLE@!2+6Vq@vdep=L@pGgRO&Fne1lUAWIlfm z!GNHuz2tqw?obgmuxgHWfL?5c2JeV1sOFMUCDmVxPWIR-+*pdoONB>bT#RGqD1m^* z#KY<7gOa8qF5*DFf?zN{15i;*%U9&fPw4VSu(hkfIdW^t-Majsi-CwA{Tuf$+TurwbWDiYL$IRkvCn1Irx2CbJ#qhFO9RKk+1 zCdLB7&K^3LTLvc-DeyLQqbz?(Emi1IX;M#*g}>N&R3L5aCu_fBXBfY!8j}}ANle;% zoV9>y)G5Wa(*|R}#7ojno2szIx@33lWLj0OajuXjbqz~$Nlc1*z8JB{K^?Kpm#vT| z@7zz!$iQGuIW{*(#!J;sQ(O==HP1d?b&f-6KdG+^KJehU&||VRKSC;6!blx9-pcY1 z>m}vD1Ak_oHipW@4(c5t=LWg#J)AK9y$fh8{S_ZF#fGONt%Ou0fHb7D zG?R}Xlhge4X&J^{T&IxuO$rSgK9YIWl)b0YEMjB0>g+*YN>FaXwmi^I6a9t3a7@ck zKXht4Q8mI&@C{TRnQFeh{i2}pz4SZdd4RErIjE2T)Z}9iVJ|gy8*y6~)P)g(2iv;w zHVqT=%ZiF6(#+wpEuX%yB(i#Ta7FUzF{mx_zgHAO#KHSEDD4HN5|r7d4`LM+0u{EW z(QDuYo@`HOn15sR)X{;2q1G%);QFSm!+Mv=*UkY0VoXSaz8Z{lR^&g{3`+{DsXLUU z7RHV+3jSU_K4t&aC`&lE^rC39QBkmPm`A5Fx49HBZF~EVO9a2s_{5Okc5BzovjuEfoOZN?z!Bld(k_iHaVJ7Q`d$qYf`xII=ld>H{= z@w8Kr8w+*pH`Lf~-tTn-;Gr<#sL|wOn@TLbz>6vT>_vMsp7M=pf#ojZ!SPk;RwZD7 zQd#9ZT;;rA?l359IC?a7(h^eN9vid(=vys}3jKL%bvQ=A>Es}wQL#k%`w^s_N?BuB(^;dNuAbKfx1LgSq!&i>#>UmV@ktL9NHHLNr)TL zbi+DJIj^8t6`#I`fF51_5LW$Dm#pGuZr@T4GhrCDTcbqq8nSt=cpfT+7<2$ax+pZu zIdx{16G#NTI-Uo(r3mzu=5Y`LRg~~|W$=x?z+7>bTyexKf=3u^2pe0}rQ$?Zt&v3( zY$qP|uCTyd2r+1b+yLx2mu>y|Bi-P%GuWp4$_04r53V`Ic@W;md}6_dqQN*#n0LtZ zOH%_GwZ}yhI5huOfr$F2ir}6rBE@nQ%_?h`%76nUK4ks0=5Q43SC=Kh3o`L%daQR# zK}cii-{%&E_Q+VuGGZmo&(Ppv6BX=t7%+B8dfQ=a#ZxkN_8_FDX{x%(LeBH|=SIEe zpx7t(XtGzl)DEvoK1GpG2OesDdjspl`ql%s6D6J}dSfwiXmFH422X&-U4ltaVux#u zN;CnQo~G?pXLY=l-#Bc7&}`kX0&>n{W;cl!*Ns1-ras8R*Wb-3(N zSX*9X@N{UZC75(2CpgxqbocoWX2LjKXNsi3k2yLN1+1X|#x45E_ZKwski!u}1U_irG(-#~M|6P-YryjRNwIJ(I7Qu7EwTin<`5CqFXbBiO3 zEhZi4y&t(M?J|6tG{SjSY!DV4-CQ_U;w?gB2-cB^qOM56A3m_8{W*y0-SSzz^zovw z@ZGgLC?IV_hzzC!*RbQnN2NzNRs8@#lm((Pd5Q(OO&TRapg8p6N3uU17^BimCB8J` zIdg>1$bd32s8_7~6xQiU%v=$Q_2E{mC=SA#gpv$e9KnSgx-m=q1QZvuJ_~a2Hi1tD zz3Ga}PQ)B3jeso3xZ|JVl0#m4;Ge=%;P9|`LGp(B&vX069s#p_Twq|%)i7ZA|2(&^ zW%c=!l!b-4>E}O>@cS5~7tQg*7>SV?2|59$(uux{ZRKztMhU%t^?h~s=z8*LU9aRmzS~54J7Wz_NVtwGu|G~-X33%-P&JrrpMO}E}w2r z+pDWl&(3mgK}Y*HI#-1RnT&ASyE`k0n=;n-XI}xR87XcVN;#US<8DSgtHW+n#=N}G z-HRvtA6r+chV~XvAH z?L}z1mw+B#FWgpFF11EJ`a;#WzD0HqDHcFq-?t_MUpMRB)p4JK?g!>p|1+SkhpWPmGg8l7{Wq~mnk1EA*d zYBzufP`$XIX zEcN5X_ib_ApiWT8p15zXcyRR!m_p1)xcXWrL?l4WPa^o{@+`1Xao65ny~*T?T0UPr z`a)INU4bDXGO^G;@8e|Ax^!aMK2Pq&&QByaEmDZf?)y-)YKa0{K0N=@o_VuwG^)|f zlD)YpFg02FP<8#|%H-w2+o|>Sc9W#;E{*S+jqTwTSo?C@|7)f1?u>oi;gModCCpz- zbF&lY(f+Q@U7N_>?82&Bexb?iUafq(9E)>mN#yOKy7}`24&X`QmD#Y~EsiIRm=5V^ zyY+6A{C2wqmkO6rnN(kR+L2=g0DcYnt}RS_uL``7sj_DwaG6%IjPG`gUvnn7j}Z?$0V8o{C0ps)l`50$ji_ zmGv-%wWZ`-w9?#EYDpHnih$an>up8|g=)QBi&}Qhx@h#7B@f*0(=u}IJ&=jkgJR!*6|VFw1ulS45x$!d*i%Q`l8hU!)mn&C_bf??GrltkXy zH18M)w%y~y>d>1vLf7cAnVXF6_jk1Io2GfDGfs+|El)Mf8F>y^TKKi~EqriTW$Kj?@hG)xp({q2*57nryH>K`o9|oB z*gKkUan|Ee&`sFio|={y6U;)y+wL7ZjjG(n1%wlrp}i(g3LpZNY6=mwDVFr0E6{E0 zAQrIP^nh}bt5tqt0WVrT_`TAM#!(LM_qTl11=vIA%81hXu}-2VKE}Gfw;u|@sFB{1 zhu5Z9gW#<|w+ElR*MV3FZSwP!8_)v_5$j{}>&M^5>G>GtfVg!&R@wxHqNWb&pj!cT zke+}#VnH1>(k;*q|Aru3fNKVONhj#0+W9@`U(vq@xlh`G6Bd>HMrrsB{|Cz72mBr7 ze^-IW)eP;B`gH|@SANDGoDjyU84M*b2n5FU53PSmT7fuXLI;3`!Gng`{57lxV2`-P zD%JQKXB~nU>HBY-zYqAE=Njn-=s7*|4bU(Q(6HauP;8vaWgk&)uP&pXg7?Vw^r)Y! zWfMBUfZlVyOd?Fp<2R7Q$4pq7)6?|E$veo`#`O_!n3Q0k#<@|Ty~FotCvOOv z%3oq4%qm`6nLD>{E@OOtjvmZEjz9cZzJ9ii8odO#>CewjQnF@a zQ%*{(75M)Mdk5&swyj$@wr$&X#kOtRNktXgwr$(Cor>*LT$NPtcAazYefNC-d+%?% zWu>LHoj!W+bFI0@9Ba=tJgSk04|{{we;|eT2)))p9ei7i(SZ8wlztEeABM_RCG{vo z9!TmX^|0j+TnPyk+7}hK#F`iO)P_H<5T{c3jc^?CqPW_LWh3@30#Z97!h(Pvkf9P= zF;(^)2B$LpqL>&{3DYg&bgM3~z%MtTddC)qCim1(+BM|1@*wYia4o=pnxFOde#n#K zX`nFBdzi%c(J&70=Dgwa^7a-d#-DZU`=I^4bU4}g)-0gUfhSwZ@YcTZgOd@D-X786 zd6_LER_(4=Va#K%!`J(zeJj^Ep~PuO#6C5#fsewzfIvK>=IC^W`&50SCU@>(7PAHX zjRN+)lj-z0k@%OGYmYN1Pu4$|7qQ^%w7Hjk#Ts z4Q^Na9)7IBhwo;+j22BsT+lCWjRiwqaXIGSCcjv?DJ;?}rWG9CtluN32FOp~UaV1K zcuM3v`Q!a4-~`Q!!gYJ~EhH{r-$iuGkwdJ<*_RaZiS1?9q5!+HM*w{*0@|%GMWsqb;=BbEUFlf||_lWd!VYp=*!jo7!<7J|1Qzg(3== znkzX)sa;LhlZ17azLUHvyE&<-Ihh1cIyVcI)P5HWqh;ONaj`m=3!aOQ*6->l;M}g~ z$0$vm&694Xi%+2*OC4R6C+{yfhvvPCWgNw`=DaP|7X~~l%@d5v6_As=f^{DzclF!J zQ9F$1=P1wz_bT{-N^%A_n1o+D+}OAsKb*b?oU``YyHB(V%-X7?Xdr}bIJ!KQ9NLa| z-YbvcdvvGCH;U+cR$Rt-5KhT>sQBu1Jm*NNa?X%Hx9Z`8H;6P}dy&;4>gj@ft9#La za`seZ5&G61%mw6>Ba!H}1-~ap0QaozT>UV1b$>|x@s$3XJW^z+1vb7Y(TYX@Y3uG_ zU|--ljHR>R?>gpQDSybvNzvxDhj%-BN^$V&{K30};KjQ`{|O|Cd+HTwICG7K|Kx*- zq$!+;NBrpwE1}3_8PSz3^H9)n>;2W~=fv3dkFj>#q@Th_sE1y%(G$$f5EPj*q{L9+ zQeTKDj{MUfL6Jhu%#cJ!n+dR0oK0na2f%qJ;nm~cyd1>8WX7b1ElH7-W!*LYD2KrG zYIN5%Q*A)(!PcyHW=YmaFnW;~5gCb#tlI^-YRhV@yHhwd)qoCV&5KbkkDwyQuUp4W zg8`cUXwN3ULQY{M?|4KQ0Y6X$)B)0YHPGfM=FJ=m)XQ9SULTj2ew|bEn#HqH$GyvL zi-g3AxF;SOOjc#=Cr-diUNlIL1vn=KcYrDcd>*OT6C zSriSGyW${1)~|0aVWCG$)DT(Mht4`4m>2Q#4Wl#Ird!!Q2U(;-{1iH>Ho{!R>@VP%N zTX_)Llls()$0tNM+0gR3q9X2cG8#+i-!wwjcm{b_U)o2H&} zcoWJ>no-yDa06$NujTcL4rMx25+EZ2qh(jDe1$+)l;UXPKhVkywN|=T&Eq=66$w+_ zIli*DrO5{eb|YuyiyG>!l5kRtdo#1_@@xW!QJ?U=I0xi9u$kLQhigpuIG9at_~z?d5F@5oNIE0em8P_ zxv%;Y3|e#~v`w%st%yG%Zs561Ta;uPc?(l(dN3m=!&7PoeOQ&mImwI;MpTd>-KWFJaw zFK$9T8t_eSozmR{2ucTt_}c5vv|7HdNLB;hfX-X%aH4pGGMBib(u|UT#b}7qW|5M1 zk3O#lRbLBLKf@>05}!LCca}x2=WLL-X_0pbkI5CG`MLxciyl;DMW;%(Kj&$cs?j0M z+vdR#u--*OzFj?YF^N(T5MgnclK(>X9NM;8+@{{I!;ekf-9pjL{!+ZgqpZ!D&6ef0 z5YlE|(iX~Xc!p=WsRPQS4G~(|rkjM0YArQ_ElD;ZX`~mJr5go zFPn7G(Aj|29(JH2GsAK(o0N^6rX3uy%C8G^ zuFPUiQ!w*l|SS}*%rJ?d)W%$4rTXR`kI+wqWn9yeY! zfyM~2)t1qPvhP{J26UlT6uJa;!E=(TP67L)-9h0b_(_d;%1G?FXyx7d-T3i*p`{Xl~D z0^@FBP&6`;<|1Hdc=MT`tSM;Y1gQ1W}fbi>`=+9Ndf%@m+;FzD-B1Je&Ft z9NC3J0XhE`s^t~ky94s4by#{9Tc*wDa=C%)K$h{`T+eO59oYN=YhS~ z66HgnfZ%5OkyI3hxUxl)qH3zWE{J8Z4cv0m0Vf}wa=Lbz>^HCaQLgLKjdppZ4+#`8g+Ysqt9kb$r= z1BlCWc^2qqDNXw_Cjn=}e-F)yHW*OH6VVzz$*rdd7{4$WMJUw4-SSWA`D4sCusdvq z#m?zB3@Za;_b4_-bP^;^qIM5Qod3y3S_I6P!j(Zs8(jRO1)exCR@SH&Dd39=7HfM5 zb~IAJNE{rG;ScS_3M63v0&Fbf3oATveXjOD1LpgG9x!=)l3!!@PEXJGfVyw`)*B!z z;L>;b+Ierl@x(G zsgv~kS#XkI5a=WXn1=7iP{5FX-T*S;2Q9+yv5}#)xy>1!!LWzaP46ZJXCAihX13mT zww`Xu$*>R^sPc!sTY~@|!XE}1q`2rPOlrwv(N}NL%hcm-BoRxvDXR1xX&o;_?_;_r zjbqX11G4Kh+UFv|F(o+@H7CP)`p<{1Cv$ag167=hRfLdD1Kq{WB@li36WP=1b*75O zRT_wbKE4lL$ohWYhho#$^4=v8_4}ChKlunC4-<`5<&PoATh3`Sk~Z#B z;G}JTNk12N`)WnqzV1J99z0DcM2uo)V5DZ8VB(mZZTc|bc-YqMDp^?HzH)c_PS5O2 z%Xz%lc)u%UdsNF$1g3p~soU+=4_?cAuBSbDviRce@jmMD9>ANYAblazo`RdaTv}%; zZ$72LLe;QOyODJNYDPbJ8Md|?zQ!m(j$>e|t!bWVU>RNDutWqUu5n5wv#aY?3Q?Cg zbosZiwcXyeAAl>EM(egwV*e>?4Zw7X;CZk+xRAKTmtp%!%P~VSKzwa&C(kH>nD8tIPfH|}mod)Mr#%k!&VemguI@btC z_sKGo={z=yZeM3E#XR1}ScHZ3KT9r_!kmY&sT&SHmLYA0zq};VK6`pFyDO61NqaijKZ50c8ES;5R?x8i zsyyqyCo~vD_C(Zi=PkmoB|`-~2n$rHRigx2gB*TJ* zWwZXi%XgJUTtwLB8)<?Hxv_fp`zr{HJU&UBzu>H1bsiMxv&=*psVEwJF z&3mCq(8zs@S*e}ZpGRwx1KKmAt%LoY`_&9)PX?OHDZ&glazy12Gi$;eam=mwEWoOgTi^pv;qIsbH>oXh0{u8UOBw^FfP4_ zk+O3`XagsHSha;C&Q1`z_eQ0XDw@IlrijQ5x1b;#h!mkVQI+Rw-Ci3$A+`6_+KSib z$4<=5SJ9R)@gRA}G~j+mEy-?sLXNPQnc|MHZd?lA996G6&qAHhm_hYhQS@Wtise14U^`Bz8O6{w6n6$gN|knm(QCFE50Dh~ zXP<>Ug*T_F$FDy@5P-4kv2Al?E^usX~}$n(3iuY>Lb?>Ru&6!pbQhqmWZW5}o&{paD1pNgpPm|qHPXpdKZ zN?s(lb%sml-Ycsr0w2@sTH+kjo7T_L(-Ht5AKMZpVAGSH)Ci{cnF+ftvouif842 zLp+xQtU&#LSTSmJ6f$xIaT?Z`bZ_lL<~ccaw}CUVX5DK9*Y?F1$h{{1oi59IK6Bcd zTROVg&aMNjt8aGu2b#h3#yk6NgFJ`iiCUs1Pc9Ch1F*HVywSVo9(JvCkgbww|1gq? z9nQJC@+U6KoQ*^bf%-d^OQ^)gc>JaOk1#8Jo}=*vzs<|mBT+IXNoJ^$jdN->glkk! zN~hlkK#9szXs%cv(-{b6C$dniNam7_?vYJ+BF=%6iPptnnMrwaAva> z;p|8@lJ{~^F8CsiT2qNOWK*GFDdwn;S2U|DaX}X#NXz1Sh5V;xE*O(1d}- zOuok)3>$4Mh;Vj1Bx|Ya{c`m^MRi(#P0)tWV&y=tHRfW3Ai56m49IZyY$$qkn_-km z9U|va6c5VNaI3-SsBQvn zfG~!aiXn8WHIW1-)^d&k5d(-p)}~nvPZ4eiRCm{_M#g3Nqo^6Eim=GORkKKW97d(b zb)I;Yskg78^jV{9BoiYP*ccu%SR2KLi)NTR8U280Rj``4LZ0$&q7A#{hv@{n^rcYs zzNn?=EKUK5zWV%RZ4|q)2m~N_42I#8$?^<_jjA-0ab+3;&oEA?w4vO}q`N@=7PVB}A}YFJ9QokXNOt36%9{KXJxrV7P&i}w zVI2DYi?Q-7`qgqY#8Fj7eAjUHX#KX*9q0c|76;AdqgU^Xx<-I>9TD{ho4sDvd3NDG z{Gy+&+NsYi*ViB}NTv$I*ly;EG?k;7iD8W68g%vh(5v^=;2!?UFNiNK5-xfpgOv<5 z9N*|3w|vIbQ<7bwwTe1LV~Ag_5;r`=eBR7MYn+M_`4N5|Wx_4`WhdEe<+ja#fKt~B z)@J5Qa7b#QqBS#lV?)#9{YmzkRnfSaRaq!S-~ky}ya>6s@?(5|A(2pW3shuzUoNVo zF@%6AnUYa#00oW|s>LA@!V6_Oyr|M4X@$zjMWm@`rKC~308Swf+};g#bL(W zmjT=S$UpNJjry9%go;?C7gc`b#*}2a@!srdQsT6X{Syh52ztu&grXRE5Q?hOL@t^d zSv{2`x*2^S&BdG55ExA$nYo+AH@$PWIAJ8p&Snill)s+fh?(p!``|*eSN~6`lMqzK7s{ zkhi-c?_JzGR_3io6;7J9I_ySoF+)l zGys$Vwcu$fGYPpOm@M=ge*OM=}jL6vblV$Q01I`7H{5MVc-0u!_bS zn{YEo5N2m$P&U8WP1S3Btdf`0_#G;Dt2TQIp-isuVOc;rUrW+kJ4Y)WfiD~pS~$R$ zT^tF;eBoRVIVj##(h;=BuqRVe@6RZVGQyb0k=)ucD86kE!9+si9JQ(aIH2|~`*u5x z_<83Htbs2x?xqeuB@J?edX<-grn>+HOoU4)Afrq}d&csXagH}R?TTbgw46-2978#j z&*q(6sY<%osp@PN@NCvd4a>%u#;>*RZ`o_g4~k^Rlkh$(xj_+~lm6ZS5sVAP`N~HF z#VIU!+3*8?A7U?|4h>(lD3Np8F2(+8LO_~k$1%yt^CdLzM-^yOh|*O|@X$jfyxFLx zBv-uSlZk|!E;e{ZB+7X z50nt4@oj^6N1}b*&>hDyJQRd@5a_ZWdrpHyaKB#s!BJwrcn(OBC{d^i-$J7A#_?3W?^xadUM#d5{PGi z&@k}6#M|JUS`yq;&F=OhoTCc0Ad$p2?#1tP0_=-FWzZvGS(9Bp0-`EztaXn$T-nBV z^E6@q{m0m|c+z=CUx~-pMiLT)a4w<)|8S8u5`+TWQSyp)WEUV_k?8?JYqj#toV=!R z9-@nRy)+mX45u&*3RS-Ygx8;`xr1m4kTOh>>!4I2?oe~1LU{LG+u{5`YvKIq%zev; zh_Qli`^v-EcaXz`NPhWjfxm))@4~1Mw&UN4@vF-D4iNV&!UdXTYfpj}`b~cCA_&A) zE`~E%Ap7-aw^+=QeE9zgg69%@1HOY?VvhU;i1M+uerL;PlJ>*2V>?^`5J=$fKztFY zvv-iDy260>hVc#)cH;Qm7Ew)W=y5SFzbq1m3;5>|e;9&wWI_lr8C!&qO9Dmx0zE)X zZ*rf}`oparxGY?N=);gl9N7=3WS&qMcF1v*L3h}>3-EU>vLBO)Z^alPU%)RB4le&c z|M}lo2X)K8j0(s60{w-3fJmQI1-K0&9qH%!##bp#I+zWh@3NZ9{Z~AW zJ+wbw$c|ARAm*ceC&n8dV8U|*c=lgXNCSQiLH+HR;9Eh}9VBJu$V;-vX$a4!8ra{C zVF}fC8*=0|2{7Q_J(SbLK)GPtK~8IVpV0jww(hU;M-mf$5kR)`S=}cSj07@o@aR9a z_yqh4iu;d}g}-#1?ZwGw2bKcm5IGxtZ%9VD(J zU^EU8OHBZB6k*+r?wESnHvfPvAlzAM98!|yXa zJ1gZ22J(ZK1*icJl^fLeGg)JaYxVtlRNko{72xlS|LR7+M>V9>I;`}3Fu`P~Q5{+Z zr-5DDNat9+9fm&_^X=I?%`p}GaNWvc<4NK!IR^~v#(8e*n4=yjtV0GAI&C92K-D!9 zU%qT3U|EH6EVub`&MD4QEv9TWvfX0@0A#^upybnX@8f=*Q z9q=D+A{L~O6)$FBeI@vP3ll6MKq zIZ?Wj8)Nll>bJV7UD|@c*kk)@MYPYh$r>Li?;=(3fLoT4KhFI}3cTOav=TVNe}HlZ zEDz#j)WNuB-kmeI_lL6}-V6aE^~yTn=>TYpf`eAA7DVVdCy5u?obs$fX7XG!j+t3* znV!;V{QzQcWgU#Xcdl14kY=+hdTwIx57FF8x2cTDQ>#B<-lw+UVJ4iU4wM}6118Ih|*WVurmwwC=@UFt( z$rCTnGm1ag`wyb=1(x_gEK0H$sx=-5o7#Cy6^&483AIex!EtcrRL0TCcu*tM7>QUw z>}u@p&p~1rWw2VwUgN`bGdJV+&n(A`WC~loeSh8;kk>!{Es99S;0@(NmHBb#Lj+Ue z+apWO`19@9+3B8v>9fYi?oAy{Ea76(Sj;K7u^&q{aWLeIiWJOKuXByc85zm73>7)a zj0o*{hC0fq{IonJL`$%Px(I!MwsD^J!F10{dd>o-SA-P;-7bO_*5V+)AOBXN@gl@Y ze#W>^ZH~gMHc+_z3R(K}De@faMp4!@V3HQ!iUT_yhC41U?$*t47FIGtn3UQd%%!Fz zshOgp{1cKA5R&^m%^5|ZkcpXPv@GhkX5r})P!epz~Q7I`%#t~ zdn73wpMQL9B*2-ZI@^&^`dLwjic(KWUVOph2xGUcmMR?l_{jOY>Txksamcq1pLVh1 zV)$tx?t~y+UU0}iRveQ(l5*}<@L9$=vmgTI_)kfaN$41HMP=m%S?iz)cvy;b9)is}z|_39l*S{;ex{9x9j}bV69HbF*mIU`uqYx?7 zfgx673EnE{{xuBiPAyeMl~!rCV)9zBvvT`9*Kx6;HmL;8+txip$^xmuHOty-IUrpW zM+BscEM8D-h{weSlTv7-zSBEv4=wrm*-*5UTTzK$mN6!!G?Gy*uI5Isps<^u@RF0J ztW;8x{>6!d)vMW`n~Kso-iESB0v2c?cVP%|C_INXW~AO$QQo}B5v>87VU<*fn^}aL znz~jSKxtVsF-}+y{iO+o=$|YwQj!499E<+P8D|v80?c}sf<~-V_(>_eX$#g?=Rq$r zDoQ(QN`V^p-#8sdjuD-riE`O65y9#t0aMme6)Gm{qA6WGu5fpPr3t()8(CjizpeS$ z=YG}l2*o?@l`7Qm0lMxrKUaKMO=uNj+H<1u6r)gX3*0FuQwy0>dXfJHxJA;D)2>QR z>*mYu`z!8efbIvRvQa^H2;7nkbrn`%Dh2}>{k4f2H77DfopQlU;*?PEJ1JyN*f zj#H0UBr3(L;2$l=6*><06s!x%7isaqZGa#={6)ZXujwe61e)((1SpOnxY4mEoY-=_ zLBtef$;v`3#uJvZ7Db54h{~kJh2-6WpAH?B6Q#mh3N(e}C5&_vMg3nSXA+k>RlBsD zr4uYLkD48c$E^q-as#s?JFrc@GMU7ZJxp2rMXK@v(LXydn+6-4dqqe-N7eFZN70t3 zY@aUDIPGskHsJp7NdX}IWk_i%D1eXDT2?TtJ6}x3{JN;KHej5%d!%R)oMD_RO#v=R z+)pswOH1c8aG>FiTir`8B?h`qOIZ77e|+omswOT8lUeR4hh@m@i;s_Lq{zJ4nx%vz zxpsc0Afuo;C&-x#0Si^wvn>o%XG?o8F^27mfDN@H@P&?YFY|8RDOc}7;sbU zHjWDC@|`@`#h+Xj&|<#I+oDRFpcV6?v&Hh~CCO4b{kX80ft=4FoYIu@^*P)SNiTfH z77Gwx+1gQS%;NrhQ<#qx{;eUUcX5X3uL?;M<3>L*J3k6=RP|JEvRMM!Mp{1!07L9K zL`>SEvpz>myvPtGx`PmpZZTfIIaN&l%i7nC=&X#IsyVvG7yu5*kOxO@Lmz?J3_7l6 z@u&oeVS<}gVk2E5i5!Zi>ArCNcyGPrc`{mS)A)ScmjAmk?d8A#3H-UJjn>h69uI?p zL4a86qDH6I5g*(T_NQ(`fEb_*0)nBHHb*r@LVb@NAO<*_qpskil4tOZc%!oCPJTKZv>bRhK{NFFo{{v=v^y-q}TJ|@PJq9-9!$!1R$G=Ij(B0qr zCFQ(*{*SJNMFQdmeV{-9We*ZGt*XuGorofmD@175zV$2W2 z7`Ol=N=-|{@vyK~X8UHu#*`W!$wY0)&*P8%t@Gphke}U<-Z}%=3yI?R*r&Zky(B4u zx~)H=BOV4U(58aB;a3GGs{Er%&1lI{q^7o___YxVxDdv8-zg)WJ(;Y6QYm}WwUP14}%`!_9uDwALtE-)0fvnd(qB6 zl{M-xPK!_Bl2ggCf-r|O6yhWK9p8eA*48nxx@a4mLQah4vtOs-c_|Yxyz)aRULCW+ z8JD_Z;xp0UPDG~7Jz}C?DaZ-0mhgp6!LhQGc(b{Hq7p8*P+*~O!K1mo5M&_0a;}$R zDDX0l$z$ZeZIoGmi$-oqA8*eV=7&ttFBCWDyNF3Yw#E-yPju^(f2O(z(509-_a&mYgILSW^~Dt^plm+N z6Gf=hSb;0lPIP=>8m}MC_6@>S+Flz~eq4v^XEeRl2O-iunv;ww3krk_zsz{a3uMPk zWv*0LwW;_a8j|!c~3Nt>>I)P^IlRL5l!) zCcKAD15x*UGMu_SuY9(6L7qd!tp{*B;~v(;$oBlKEDvLcLm&CEqK0GhoCD}n)x(9pNfcc z>frLQMj4>@R?SE>MDWmA*O!lEA}V(pD|PWcHjYolK9=fpT$?qdjr3eCPBD0E9hgNV z**U$j*Irp-~1LJtM;J_+ST6r|^3K zWqdt7E~JlA3W}25moY7Q2Bel4qnfUsVMSqO;shf?DBx1RVA_OkxHkHg7xbNQz_$Hg z`z+UXf&aO^@=W_!1qjfBsul3_r@!o9EvUYl8LRx)1s^j%U_HbH2Q=^9J9w0+a%dXO zES$)Kh2NDd)QaecN6y>=*bFuE`jb_Q1FP$ig7}=cV#g0>hG9>t;Lm=076|o&{HtYC z!XIJVCZkkPyihS1nO88$*PF%qmEf-k!r?K)B*qmijZ&vbfJY@yU`OZU;je4rE#M*> zUr^cy3*>Ce7dnxY>sz7MzSU9@EXLfmQE|me53)`+0pqTE-Uvw`)6YyU#Iv6*l!*s=I~me)3p z>AGI3>(MUW>za0&3^))9+f_sol$iT-?#1}?@f}~g?JHd)g(wY8`;UGcN4h~!=3<{C zUc%R&sZbN@m=`38K-Ap~_RwOcX?t zgU!)#djn1N+1X4EZu8O)-%$t>=@QjwX3R*zA_d2z&HN*iuFH)9EE%y!FAf?@Vsp04 z8nSFlB_xx|pgZX-L#ebXy0ggG=*)89_3D9Hn)$YUckt`!3I~nA<+297fDrEUARYVB zQaF`7mcr^bQ|lg7xQF-d_!s>E9uHu?2NCllwOf#~y{GS2P;Op5@O8Bnx}1FNLzktI z8eY(>c_yB2%(&@d>Q37C6I}G31rLrO<>M1N>fLU~{kmq^_PHbH=lh#WLx`7m4`pMF z2A@ip9M4OMRvw%*n4OHMi+Llah(qx^2}W)vgYbg$Kx<|((4SyPU)q?vxC$w()Pyce zV!{{4b0{tA=`3^XrREVV$NONu8-KVkf3~#u8BF)(@!QM7MZC@3Q=mviR8QhEdGf|@ zTivG$wCeAv8af^gq(1Pcs*F|FA2@)6FwQjmIQ|wf>-Lt`OL1A|C08q6`R(q1^kYpH zB55B5w1V!U0Rlq*_bKUWX=Z1}_}7v7uMTJ0a)8#GSiL_rkUEc+UpL(%JH@WnuUAXq zQQAb}nniVNsg#J$$$H_ho%;Qaw(Eyru3CrcYXo7h7T+`N@mmqj46vv-BB_*|Pe$av zlS7V?yzu$-87SYbT!s+<{|Bqrw=3U69qk*>OeLlK)X+fkwFN8Ok5=`vF_NS z^F;cMaa$1feRX>QY7+_$t;Fpb1jyxsAc3%V&zcUe1$wh(C?`phHWN{U%RA*o<=1ps zw+z;LSh3y2JH8i_VAvoCm@_fucXjT!CTV5~DbfTqQMy9e`KKX)90nmIY0Z`Mbq}lu zwb!SosVpn2%1k!!Tm8DVYqiBL%KiD)5;58rv?t%HMJcIxkP$ZUMAxYp=WWTPl+sj% zrk!(FoJ)#K?a_g+o*#a0xSx`FRK zJ}Brd=YmT_C`^S%=FBoOjm^pnfYykT+3rpxvE_^yriGA%%ByLY&D+pu>yXAc`N+-W zwXo0xEIwpH?JxtwiObnD52wkR{+n=+g?8WY1htG~S9`y`9B!t~4OB@m>VJ7XUO61A zBY4*Z>w|uGLisrP&G_N_O8x8d<*P%kPYcj^Qva^s>s6aUpRPZW)bM3p-uvCb#-#)Q z=R+8!SUWsKnA8@KcX$x*8PJuY0*yg4IZh*a0Vw7Hnd=at%b5r`L*P?z)xeD`ae$aV z!Xmz7-h{DEcssLaId#irV}#^bYH0hh7mjh1@?t^tI#63Omei))+Z{;9IvMnOfMcIx zwLML+SCZff4#QUQC5c>$9Z3;PY(gBEqKhkH0m&O^H2bHmQI?Xt1PEV$KB!XzF{B68 z^jX$=Qfw~9B!h@_)7k2``GR7{A-U!{5z|g#<#uS2OicU!2!H(s^?6dMaXYFlVKMiz z=~cY35V%ri60}FWVNc>;3|ZDR+lehsLZ)^J6=fpn{oWz*oAHZerb#z$dS~DxUPile zf&2&FEGk6nrG=XOm8bPysj(p+2jQJ@37U<<+e0R6c+uA8gD@`WNn6HtZ2?v=#m zURf7k*9Fx39!$GrHf>YhDjyWEB?EOYD+?~1bo z%z1zJRN(z#Wl>&6UoBnr!_;dn^2YC>YkR?MPRDf<*GSlXBsqUm*TG*mbM$;_qiDgB z?mscrE#INtIDwHCy6eQ!M57WJl zeq9@!BgYgE%I3TtWhkUdQp+{rSWz~ipd6Jm$$`J{WzRWBYdB{UAa~9SjcKLT`B^7juL!;rj&AL8wuKoY=72 zYCEvFV0{HX_A|l$x0_308EB2IcB;*Db}i~6M0Awg_;xs#Zb~b|9eime$HgRhRg0R{ ziuSU0%1^bZvk9bqOE%$FCUH+=nie-U6Phkp5~NMH98e}Q)K<_Ew+kg6p7beDEw_(; z(}0RO7B$A(6OdHj9}eX%`@)hSn6ohQw0%3Gt{c(e#|qv9`S%Nslj2p4de`{h8Oj>7 zH*X&8IIHl-CDZ;}FxqDcZXKE4`Lth?Uh&9>f?c;wk`0;uF04hxlx`9JjEr4w zyrXL0=+EmQztLH>?*hWXUcI)u-~QRxgR;7NT%o8^;F}n>=e3|l?PZ#h6^rs(?@UuN~N36f8+_nnngrg)XP(ccosX&i)5hYUrm9j)3iu{h)@!vtyQzU zV;%ML2Z^=f=viUYODYMn4foGo+v=QP658;VP~v5{mv7yYDki1A$oldQ1X%or^bBoA`!X6L3ZlWe25jSD-uv~URuu476?|uyF#S?IU*t?#f3)C zOBGkgrl*pP>+{SucHFDjVf%vEtQu)1v0APf#}zc@2)ksAhLjK)q_L({WN-vIV#bW2 ztp*(mY0V2Dd8ryFOXMcE!9FwyX}4BaBe!pP6Z$2G1%~y!pZghf(9UsO?{#{=Ape<* z<@)oil>t8RAOP7bD&V(?n~ST1ou-{Fqm`?f-CrMjHPH<)gG^{ZKYhg}5+_P|!qJwL zktmT1U}~jaze6N;Cl(uj?u7U4d3<#oJF%1d03l@Kk#7@|a&d(5z804!{P}Pq_<$60 z86pIkU5jL?Vj-dB*6smLtN@BhGckd7sLPD845l6oV&PZ;e^wI?{XXu9)f|XgIT9FU ztC8wW(ZYr!!FXat-nZeWj*q2?{K`-Z!DVz^L!Y}%9#Yp1lV$20yt45>bn#Cfuk--) zPy%!j{6p8@-C_Tu?yuIcF>?)o{2U2luSbEn*|O5if~r9C83klR*pav@ey%mV1hrE} za;LXY1r(cQ2mkY@i=7{0Rl5*H+(LP2Ws3iqrK&@ z0qYJ^%ex3sArkBkrZR_`33?5#g{(fE=m6cetnr}PH4$bl2=b;&uT4|O>;*@`Z8f%mm{kbe$n zOP8$NK0vTBKseSvg#VGO=vo~8~*(Btzhg6bZ|6`RFKOYuh1E|SF z0J6LPtU2u6?2OHv0acm58mnt=+aGXY_3V}jCWz~{L?p3+u{9S8s_VswleRnnQDD_y zT~}iZtgeo<{~%>O;!YHb2jCQ%1Z*0L3sh($kPAV$}%%p1lmJ(7K z)0fT}f!s2jT-+C{$#USF}V6)({mXR<{QqT@-bhO;xem&0=bEALVmfsWr-=&b?*owW5=uy|L zM14ch*k3qbU34Geb1*DKK#Gx2uo(r{MN&&p?k>xdywq=@Y?mzYZ+Po0>EZmUFx7Bu zN=-K+gT5)m(pq@Mny%d%J5QhR3-&wly|biZMiC|jRo3hhnVckcwpV|K!Z*&i_#6a7 z_T;Dv3L4W4xO=)4VNz{52Bm0fGV}r1SEUjDfKBUFqpWcl<==FpED|+F z6_>%ZBSL3fJiGkn#--%*qGFocc0@Xt9}b>E8M$|x8}}O?g{O=o5EKm-F(bLZ<+)sS zKSiRhf43N4I{q~7qG&jc8Hptbz=i9Pk}#&6yBDlX>DyCHtL>HYSbH3Vw&|JQzv;P^ z)fbKFxfR}p9MIFy8$Al~7Gs34&q3$;-h%sFT2=XcP(lbZ&0-evbCWx zdO6%l{okg4ucI4yX!z{nf8#l=jCKF)g_RSB!^Pc4fCN_5*Zt|Ccjwx2zc0X}N5`6! z^I`9GXxmX&pKoGeSc{FZ+|S2)RSWTaGxm&pvethyT`vSr$28Q9v)&KqVq;i<4Pk94 z!aB_zvO)P-u=5G~&l#(5eAS`{90(|w2nYxhFk=B4cmFj_0ajjs>(k!I%9g>}(ahpn z-Nq4B4UNCco0HmZ28oIu4RWxHrN5Y7m==V?>U(K2M=^b!Q>avu9BL+o(buI^`J9AT zpr@Dj=_B(8xTvl$-<^( zW9?4c4yj#Oy68Z*@lduj9T-e*Jaqpc>-|orb0{V>Lz$^$v0q!|Y+JT$U z26PMjRWljb)nZHNxaL6?$Oc+1D&fMm*#3OGGHC^PS;uQANy15p|ppKU^ycynu}nYPKm;xlOu< zt{c@z^TK`nG+Pyan;r>>;aEq-D}Wn@d5$D%tIh3fUQ}rX@}YK&F>cxzKd&0fyN7;;VJAf36K;rkhJC>@D5k^6qfN`Kw7cV~;kPNl2}9NB zoWvh*N~l8>nWbU3s8xYV=2`i*wNrl;e%${A37Ud#Eo+QKRw6#a@Y{NFxx+Lyno%i7 zCe{0${5ids9#8R^E%DRX>6en)d9`ltM6)#EhN_i1|7$$czTTWT z=SbDtM_l`VADH}n-7MK%dg+Su{EOHf4)GnCdU^8e``5qyJK@qJcd7LM!!NbD0i~P& zeMn(PnGKeAf9%V2xMq(J3+b*lWDn$1t7c72?7u=Tv%mDWim;cH*; zt~>8nk)htQb?S7jg|$(Kvh1?{-Mo{0FXvv?zmK!@_;0D^32$%y-EjNl+edcn!rN!R zerEUN8?g3%uex`&^!xtC^7U7w*H5crd%cx`vH7UMErWvrITG13QdW2zF;0;z;!SPS zd?9K3;ohX{-s_I?pZ*~E{?&u*mAil!UoDJW=@4Wk({lCtoBua*jM|N9% z9Zu<&MPGLvSTcK+_LZlvPHFZ(Up~8OpHt1Pb+=02Nrxz?teo_E&bl{NyTV_-Q9G*M z2)w7*$Tnl`!Vg&&Ri-u6_m;ks(Wnwgx@eDgY$<5*tIdfM0FyU}=l;y#86 zdwy2FT3^CF&v*Hvi`^A*FU^@^?g{k%yDQlncdzNAKhqmNm){QCw*J`5z%70$SU#x1 z;O2qLH!IF3yYYVzQe)>YI2GBjwNAmXIyL9*rW^U9H~GxgCCq#A;L)7WB^QMgmj0K^ z%f6tnUAnpR9a}P2w`Ng~V1)8v$(b+YB)WHgTBYzWF*Ty^gH`RR30F)+-biri94^#( zSTQdl^9=I~_M|86y{C0A@y0*7)E_@};`X$|&!%urdwW-TPWw6EGwX$Kw=YRc>y?>m zoB3(VoZZXL?Ww-@rs+`inxoq$T{5b!EcJc+NcBh6UAcqN??11f^28&!`1Gr5?Q(Tb zE^d7-S6%aX+46aH&u%`SSHH0M^tI`6b*Z;kuiyLg+HLE5mD{tQuj{wF_xa?#+TZqn z-<&=i|5e7aYR&hG`!Dm))%?Eu{cn1`Mg7A^>-We0`rB{+e^II70p2Ng8L>B5+EiPV ztD?jYn*}#c{P4J_^l+Eh%h=Uz{pX`6PfEPGp|bk>1kRu5ij`j-ab7u7IQ^TimA`ke z*6yu`Zv78VWo}h{WySYWCeK1Sz2#@YQ!l=f4gAZR*rYNRG-4(G8+Uv=WFO$o$RxrH z8Xo6hm_ExqVr|gUiBo|s)KkDQH&C|&1{#233=GlEz`@|uyps5k%7WD5SWxQ>-GE9p zZ-*a1rT2j2$lNg9K)QkP7|;kv8z0=XN7vZV#vPmqRB{ohQ4mGrbD#*k?n%xs0*^$a zYyWclw)ktH_8b-l1_2c9^*|B0_QZk$Y_5KI`D`fzu&N7EN4I2bm5gd(Jd*kQ^pm%f;20TD909&^g z-7NIJBf_kkP3Vq6^d!+uLGNlIO!?3Z4HcA*7rK7*_8>xkcRNxRLv0-fc(Vd?5GYp( NG9&`CM{O^N2LQy*-dz9y literal 0 HcmV?d00001 diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/CachingTweetStore.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/CachingTweetStore.docx new file mode 100644 index 0000000000000000000000000000000000000000..d16d2cc614fa0ef766541d8676f50259718f6f9d GIT binary patch literal 40550 zcmagEb9^P;)-4>{?%1|%c5K_Wopd_3ZQHh;bZnzz8#nzt=e!5+z2Emw?cZLj<``p+ zSygM*+*?i(7z70X0006YIgL%NQlT(55fA`i3=9AO`D;{D$kxWm*v3g$$=%M_QJdDy z+Nv>8T6T>e;pgQ$Y7!kUzNZj8YT2$GxgB*Zrf_xoJ-hlc-MJLd^Wy|(sPe2_Fc@uY zM(U$C?phsBmsb<1rjYQtwswYUJ|S?iSN=vG?S%>3fk-TY#FF?P&io))O-qK?w`o>D z`n{TdPFik)@+zui;C54j_vOOxZgE2Xm z_X%HD!e=2rk*xP+T2hrv%XFwVfA*A6y(?wWpLz{(1CF&WlT`H%rpoqpYrTbVZbQ(v z2*38NduUz9Rhdq}>PjQ-6g4)HEQ0pWZ7qM0*32CPXQ_VLaOIq?sZg19XsAaid7GaE zieq{_3c+QZ_5@In)e~qZfTb~ZL|1zKc8pC1KmY*HU!S@T##WAWw11A3ag*PH84&y~c|}G@ifx*dg$q`6gpZ{QczaSNE{be? z#EVwDI^~76)zErzk1qENO%~Jhv6iWdtO8XH)E5GBmwMH~~I zs9U9l-xI;{88D2!dGr#Q zmsSbAMSu{IpaeV#`!0^+zufx3%pz?yp2a%3wO3%RkwfKzyTvtpYsb66*4PYe7!((T z7aV)(ZxjZtj{31?fVTdcB|^zjnfRmcvgc*)hSZePaI7a>9uo$tCJR_1ok3e_F@%$7 zppJ!k{^t}yW{W~m?y;aEqV&p775+H#HX>O30~Cti{{Fb3@kDX;h^5U%xBwZ5CAom1 zNdx*)Q#v4X%jJ-P4m(yLE|^ssvb)Ednhcn0O|WZDHEl13Hw?Z$I2y1&&cp`w6b>_t z$!owEvCmzeL1EwlnfT>X6Vc?R!<<6d$RPYDnLab}L zY}yVK)(+3l@2=B0lKAmC8MQFgAip<_vy&z3`($k7!VSCfmZuud*nO+pN(ebi7i5Xgh_OgA2%G#04x0%nEH_*2HBr&yNv)j|FLE*!A&# z4ngJkNp~O0RnPU>F!s76U;^GCW2THc{+u@=XTJf}SRFQexHfr2=m=5xbYExm8!^Y!S`(dnj)?yhm)h=T4(4e9Y9HOOV4L4(=3dmUJoAEl4FEl?;j|uK zv944#cn*X|eOv^)kDOU`ftSXMast0O_DUNfvG>$0uSo59 zP5Jj-+6n@msv$DsB%D_RJS-|hiVM}FBcUY?Z5ho-)NB?^L>H2sAfHyi16wlC1WO(a zIWZTFUA#v#%y$IZYiow1?Pq5m=o42kcAu7dNZjOeNUQhJh;dy17OSn~MBYi&En=?V z40L5rE7{oOfi(%fLRqoSj&!;=I@~MB^ygcw&xQLly#Kr~7~c=s9KP<<*NMMxSXWyI zBf77<*4g@Nar$#*oNHS>&0wnqFVgOvA?aAFF9=i@6K4{=t3;ppno^1ZZg!mv~F#p`!))p&v z*%UBxIR6};ESQVWhKSYowW*^U0kTCM8>1f*OIF;IQ9)H@b;bkhp(C z`$BdE#nJZrdxAY0)U@fGHrmg5vUbNLu=ePOhsXJ1Vq@MN?2*o%Yna>0H+w~w&SL3W zT`#YO=0_szxfZV>O2VWVj4l{;&Oso!IfnIE9g|TwZl>Mm87Bm zw{Kh|aPHFx05GO=B`qn|Z7RT%pQx?{OMs=e?y2=!y=&4EAb#o-WXz>c50$ckbYz1< ztgOpsXWT2k4)rp=sk z3JwtF3hU6$OP6-tgMqZ@{f5PBd7Z>RX4Ws2i-chaW)*C9%Le>rT8pmdPiKbhW=qG5 ztlKdpA^2;}>_xOp5zPqkx+R+Etdp2viqM`KUZ%Q5!)y#GSt;UTmpqVdO3(j zkT{cJdKmv~({`d;={A#_-Iad^Ez&{HjUA#SBg_uvyQsru4tFm5cqNgzL?3&QK;spP zVc-#UxPBB7A|mk>c{NTmtXR!zZP&i=<~dTTcdMMnlp^eFjGuu$LAXKOFF7+2gK!N} zv;EAO-_|FEem@DaYg!+Xc(MC~n@qrC4Jcz0BxV%KE~9LD)l0?3fBTN;L;YCcln9-d zH#+?mfOjJj!@gZY_=xT3&<3;^9rjD@v=KH`Gc@gjc zmcBs{hRU@_aBf1?l}KxbEE4E`+J?LuR5Sa_HN>#8aRZ93&CewMU@a=o3}^g)9Vl5r zv;Nl_;zASt{P}~*>Lw;gf3O{gy0$qBS9W{bk7LXA@U_7Ev+8u7{WYO?DVl567AjV4 zvKC03Cxzc|jSz2H3UUJ{5jr&EOJM_qfWzi{EHn%@@v0CCh%_E5g~~K86tpn0t!Z9m z9#`E)4E!Dv*Yj%X++0}8;GhlgwREcJj?FEc`pKN=YF7lDNuQg@**$8Fr3`7_UgiCw z@YqRq5|hB(8)fA}ON=SmBJS7Q1ht5ylE9$^VSf642hJOU zsRUvca!LuMCaLa2Anj6Qa=Nt;HLy4FMi|egqQB!$^kPHfQy=y(;Jk);xP!okj0@l@ zhyoYS0vIRbTa3T(yb%*^IbMUKZZbyG)~xwegs~kL!ZHjAt?x)>kzUh4>EvTvq=w4z zN~jOglLXQmA>TCjUJiln+SZGG?8E}-$&8UBb$`9auHpBBYAy;^l2rpR*%(k52UZ zHH=c1es|2&o|TQ9t4s7>3QA0{Vjm2WS-nsk8rUQ%&Pip#qWSE7;+Gi{zJoZ!Cn z!d1GB!g90`Xfs2w&|?SJY=ebz+oIQTpJD@j77nw%15>CTXO;)6w_%r#4MOl@X-u!P z?1{Gxy3TLuh@dKZ(nXlEO7spNvl%1S+7qdRlD%CN?4ozTEtCD+;q=na&3cN{W_oCq zSmu#GjTI~p52X~8j&7Pn*X2A6W9mGij`IoVg${td2%LtA1~7i-Tf_1@Bd{apsZ z{k#Y1bUZG=1*1#2Yv>TjzW4CrmR-AaUXALQ=GL1ghHDczms&~Ppp90?Jb0S)9Mck2 z&X^aoo(wN1BvRKqS8K+t0*x@z@RTCrX4ufafgQ^8h_r9Y)w3xVz{I`OL9tRwk}6qM zs7!1zy}Fw#pSe@zK*7^zXaUE;w==RDK~#))I1}B~OZj(>r9^jI(zOoMGfVnA{+4d# z)VNUy9OU!Q^^kIrZQPI#)KVlYH@&5)4*lGTq2jHf`ZX#$83oQj83CUk9IiU^%e|Z% ztmRJW7Eac`h?vTTij`Cn01ooi{J@`DY#Rq;l`FB{pYgE45heWXK7KcpPIIvmpzeuI ziP-TH|Hfh@)9T3oD6|NtKJ_y7nw=?vV=Ik`5RxK7>d;G_&WCu541xWg`Gm? zz?Mrq2)uLofIvy^7@$?ae3eH7cn3MOV31H}&DsaxR;r8^ffg1bCMB*u{TWZ6br2rn zg$4~ncHTE&_G+f>eL}`eW+szQ=vAagX+i{$LMu0-&`6el5n(+pH_53nOSrpc|_omF5b(lO=ZryQR=g!n&ks<(}YtF0kapVX2QElJ9-mT zk4Y`0<5*sOr0D|ms)M1=ft<%T+Zt~+u5leiq49(aj%EIog6uR=RFHg#1;P%^)QYV6 z9?w?O#MT!(r_qVS23plr6%Y1AmU)8eB^V%0*YghanZIhITjQA*CN-#L1_UoFfs2Gv5?CFjqi%z#A2^`kopke&Ki>#vi8kL>G zlkEH=svz!tQSq=5<*)3uX0CS>v}p-7=Jl06wyrC%Jc|L7>ip?VvHpPI-qsprNpLeS zz+hRXi^geMq%BeY&;%TUsWvN1buT`Cu-M7%SsD(bt2oqfl8@3TCFCUa!Ok-;W_tb* zJWz-wcNsgis7--LXJHbi6qv-1sDMe0h5_86!xK^O*n0m&%Fb6$U}XzYH- zu)PrHskxqSz>^SjK)j>hxi6YV7SN!_{LQ|2RmKJtv;~ba}(JB3VQOwbP^3S z{@=Eedo!VT_h2xrc~rCmpfPsHO#~~M-ol%vINRG%Tde4rv6kruKVir#0%T0 zYb!oe<3n8mjPB4K5gaoW-ei^n!U!S~`9Bw89>nq4fC%3&uch22DOmAv6h#B2yuSn< zBq+U}Cb%r!eArk9{W_zia^pIbIq5mH*tMTF9nB+`SiG1dkaT9Q8;3h+!_1PY^A6gv zbz|=qnqajoPTv^Sz;SL32@%cFCz8>kBOPlD6r6T=wgBiS(aQI0AA0y@niZ(O#T5Rl zx0nS^c{?LHa@YGV89b1{@d}NEMH5FjR-j}2#Ak1=oi$NSmW!h#5!-zbGd)aZrcq+Y zm5nQpJV@<3I&Ff3)S(42O*NYpcTs_yUs zSuT;=ju_E8ep}_j7V)=ABhA2Hrre1wCYc>cO&K5Ld}rTsZgAkN+TYCxGSj(x$BF4O zvkAF6el|JA&jqeJRj^_iAP3zrr&lSPZG88XD}WE14)>Lgz+t>v;haO+yl?WRB7kFz)qg?BHmQU0o$D*YSRAUj(1Qb@qFUG;^I1H{}IJw47lSFVQBi|+81%Hi53s3dk z6HmfHhGg}=Md!9Mk{HSR+f8>}>jZ*t{z`8ie9?yK+~XWUE;C)$9OXiDayMQ?g`1u> z2pwenj5@&j)pIMt4`Oi>6+or*$me?OjS4Ns>S+8sqKMZ)z*LfqO2&Xmz?WVu=WTn= z$EvsSgTrlQpzom`BCvi*M5S)8MK|i3M~nHj*-32f-02VJz*9CI)`<((EortZFFh3| zY-`?3q=GC<4<#d~EaUe!Y>Cb`8C*Z^K&mSzd@eLlr0)}2j{t_zX=L_lEC)wL8g0Rf3$>29pkY%T?{wnxVEoXy}G2qrB9?GJ!8e;Q)`-?GTxi2 z7W{Ti>4w!@_U5K~%Dj~LxVG|h0(-Y>3{@8Ma#93EtLK>E$W`3!6)WGr;hm~iXNCqt z>cNK}JK=<7Z9dU;;i#x>tB$I@o-R<6v=|GsuIR4ShBN>{NRF*uv_;ocPJ;ct6;P)H zV0(S9mhrT!4YgF10d^^->FF6vm-X>_y`y4(qD?7#!L#A{@+4w^gJGj!ipS^P_UR-U zi-Y$G-<28N^nl0XQAbvt(R1Yc4w3D84_aMYK%@qAlzsM@gDX0WERO@E)LXP*FD$sX z2H6V;$jryB5Dotgd1!|n`GlVAs6M2Br33wd<;1DyO;-_f#B?sDBfk$kAv*iw0Or@a z93GuojU3)~lGS&E>$A`QY|z;FVIeVob?(N$I(OJ#ox8spG=KM<|GiD~cMm#2KsJyb z=8ilD04w_#z@?z@X4n=_2S9`mX-LBoHf0yoy**U(zEBaiDnf?-xH+YplVx5 z2I`=Q8*^>=TT!bb3ywt<<9^n$X#lAU&&H+b2WMwFd9)K=Pgb?ubXHhy^KGO#_HN76 zs|55Rg48ZA=xGzNkm&7R9?jf88DaargX=(4K;{W&rmyJ?WW` z?U^hZ0tmZy3ndFN7S?1a?f~BuGldJVlhmat{;&-CHfhOjaW|VV;2{I)%6w9)))m}15GtHgN z%%Gb^pX>UP5b)zED=4dcFN>?=>dQitqc~8_j8`&#f6w;qu)6fo#fwURzt~{w?}qJa z)x1=BEuOr%ZMXG#$ME8MKD=<#xX4Ocd$)PNNatG`w*7dH{(OF2x{NC3Yd+o6etO=x zZckole?6M}ecv7&ym#XMUdR1m{n@q|MCY@Lr;}8CHQj#{oP4k|zINJN{yu(s)8M{t z#a7IRSJB(kDf^QnB%@)9tf|ESws+(W!d23HjQD0miUSeNT-@#AlhxWPai&NL}J&XEhjPJ1E zZYw_wJG0ND(qFF2N`^=+tff9+f_)IvNHCq+Av>=&G24^*eB8s8+P%2WkqN3pWA19;K?{Q~kT|D<>*0f|tN7k) zbiLL2yxD{3I@+U+gV257KaToMd?DWNHr}1mwBBlbRywx0c`98mFM^ZVF0$BUPd~kN zE`4~avTc?=kq5exB3f3v&t;C*qHTAd_CISix<#|Fy4o~FS)VChdRRRk8A!-Jp4JXs z*p8q%O0Ne$+e5HP9}Fbib?EXjy0KKC(sm*0Que;X>X*asl)y76;Polv8C38N2z!T6 zc!kXQIJSVl1FAu6_YySI>KU&ovQN`1+@sv6ugAc1eV-YBXJ@c}Glh zSkRIhrwjV)`N!37YpM*~p@ z@w#E&$yIeZP_PnK!@#s9v8-mj8;?-H3j7^HAsvbYr1wbJp5P=t{|9xWx`JTLsuKkP zgy|+qk1oV*ksrzrcSU}v)eZ`LXzR_2%zSYO1tKb>0K2$mKm3e+ZLa88go3P&@}O-J zTR?U8QB8gXnHw~OAMqWaBQ%0HXfXjX9iRm{e_M3n=i9^Q#&$NoYan z+@VMMBsPKmiG9u-_Z5o&bsoiEp&DOkL0`E45&Ab3NGaK+1%cat5nRd>eT_iV z)F}6VN&FX7jK@tCT0rvGS^qA~1?x+X0>W3WC=L5G_|P=}C6NXng3KKn;xEXHpP>Rrp@u1!_AX?dEKXsK1^g~t6=(0uXFy+dUk$v)_Qam=P$K@xWC<}PElqA+ zTfSef>C4uR*urY_hxY9&!{b&T)Db+inn`b$gB!2+&aK)ugPsC!{Yw)rxn|35x0+8w zbJ^89Zq>gRcx8_c4oCBLo+7vSw43jR@uF;YX;=6YwW2OrVlh8o?O=px+^6*rsMkwz zGPVZS@gFXHT$VFjVF%Z`XnlvX#jQ^r;*MI+2EuHscm1oP5lXGR$+`P(pB<=A?7yvE zZE-EmS+lj%C7&L}qD_zQ8?r%bZ8Au^;2L!X=3;K)$Q*`R#B~}LAM7zae;#cJ|W$$)!RWzG|8$}B_Eo*QC1{tPQM%yXXT}%&n{}{L`l06z{+;qYX z?T{EtSNJ}jzWo+g#s*3uw0J2k!HLIMKj&^KkSKY+=$j#oq)J>gzhYG9zH6krc)FA= z_zeH`{DhG9^%{8@-Fun)K(OdZ9oV#YPJgm~ZC2c;<$LSug!;}UH8`|;;48_BCPwGL zhGxp^zNUt)-DOSf!~N-M?~|wegN)AAyggqJv)$xv7Q^!A2X5fR+5v=&7?Y1&$}DLz zRcYiH@`5_;eDmNvG4xzKHK444QRPbp)rzV1ftCiojH&~o*63kd zT;%WXO}SM@&i#ofnFBkVp@F}Nqx|C6#nYR34Np&)(r>di?vB`_&bNqysZlPuFb;^}s(=w}whNiHq0t|G7Mes5oyDy|DqLXglkwo_P zf@Hwa=g=rB7<={zR!5#}$1g@k9QOWcaM9m=sW|Ulyq~pq!Ckl|xiM&4TDGIY_4M05 z9c2!$dFzt!^CNA(ecJWqZusWoW@yl({oUT(=kX))bMgFT?)Te?9ld_XM+;x(1Kr#7 zFsR1|0Q^e2dkZg!?pAwq^6)*uvqJ1Ei{AQ={E`btM>rAbankYZhh#YM2&}darHd?u zR>?rynW}}?H{|YaFL}Rf7L7M$;pYbYXIR@;)EYFZ`#7+s@32+`-aGXAU`yJB@daapXG(DnD{0N>Z~-jdblrj-jw~R6Hjk^hCB8?Qq!~$L zKpRdKy;T}+iH(6%E}DA%&B2kmh^d@3NlEz1TWz|*AZ>6Z^klV}#dh-)8sql~qni0p zK+ZvoY{qBp3R<_Dtj;`vR%?ni609#*dl_~709Qb{!>DoUj>mtW52z(I708zRjho|5c)9X!t#-}|>_p(#GwyS`R= zhlTti?FUBev750Kt7GYoo4B5tF={Qv=(7oAyTm-qRnpwYa%n%IcB+zL}>sOan3U zju?bX*mcv|dD7H)J4-l}ULfiMZxjg}jzEW!sJ0Ta=@0J4{kIN}9Gpcbyy}|KT#=&F zY7>E-&Mj(v+IFJdV+GazJDCq^;iBuUJjF@YLnZ6NC|t+w zEUkNCX0=KoUTpQ~ZtR%BeB3H~CV9<1SLoN;p+g&X;?hiJXd%0>ra-z)H3=bN{D6Px z?5sY$hhKSQ-_n~ZEaO5`n5Emwll8eaawsT474^N6U9fJq1X`uS*D|T#d|hF!RlLcu zU9Y`}ZAC)ELCa#4A&z7ir!ks)`rA zrN-hOfepo;&1FkzjQf>RoX6wHM~pCiicqk3`FwY~#GKH%L zhEeI2<7~Wo-CyJn9w{+sVD~u zWe>KF)mYd@fzm|XkOu=hR&QbfL7KOw)4~aQr{rg)4vP|%J8f|Yi z8yz~+nkrt^UO_&S31#jI1s7TLgr$Ol7QxCs@o=D1>6V{hkKvhN)l`FGivVdIDt*tL&C7)I0 zTeY&N_$j3r8s-aoEXFBgD= zOtz-t9Aqej+p%Ycc&~&VE5ME!Oh`45pH^Yw+C;|uek?bnuYq;|TDzdfh?GQ9OO8xp znC-6UY`=1t#bqMa2M|L91INq^3TP?Y`ZJ|0tbV7PjfJtm8_9J=B z*+-#Yfi-aG@T29j)luiN8TN$Y{kYm^d!<^}GoWjnKs+8nx= zuR}irF>;0Mls>wBHXHMlvjeKePMS%Na_sP9%bC0es)Oi^HHPd=1(wm;dK8tiGcc`s zK^@b-M+~23&;NmE{DyO zSCd+6GcW+z?V#qzrc=h=mq)hFN{!TlwnplLwugSmF-+|D>MMb0~r9S&-OwwzPfK%0K7!_XsyccMuocP23Gklb6> zH&~RnjwacEEGn4AI@%r<$6MdS6VcN+fLwa=c6Jg|R^WQQw+2&K-44c#V1|2hASMa% zy-D-Ys_OFMJ=^M&8qFa|b)v{FG4U%aeqY<0T+oJc6i<1?$e4}D4Wg3R z5vfz3V+9si4$Gpr<_I5yRfL!;d*GRAH-{QIDn*q7Hvkk5(JbbPd-H8 z(JIqvkZcmF%Y-^PxKESF*Ky1LMtY(>0bX@_hkF10A$+EN1!m;5G)Nj<-u5dT4aQrv z^RMude}vEfPx$el@IYL_&N6S-JDXp?Hy#%6b0YKU^%hOeBH8kEpdE5O$R~vy!tlvu z==X8wF;>L^9`2oyze>T@tx0lB;p%nYSnlEMYTUuqsdB&DVi)%k?9h zmvjulrB%Ld)2YLWI#-gTt4>zIyzj#@M?6tJ56*XGqKR2j46mZi+ssg|r!jen@SxZZ z0?Lx3nU^3!3cZy)ra&N^&wammUF;<@6`|$+{gnFnXavaFKjP-HrJya||M)9C! zUa`(PU1DApJ@ELE)20pC=0$@EXKIv4D#vE^B~`>{QJPPvazXh{GjcO;(>5{8b>0@1 zk+LL&jJwJxLcv#!Qa=TIW8EN&cBfKhyrlk~H1V!vg+55g#b>6GU38EKs*5zxU&F%E zm@AYp!qn6MQdevW7dED=%)B+)D_^;+xORF$^@S*VZs6#I9O!0sx;WhL>fu%ignBt+ zbs8!HiV_Gan(ABOJZ*LuE~yw>Gen7`Te&jN$(gW>2tTK%e;)xC-?4^pJ|RA+ZhS94 zS%ldaRX_xuThs7GR%&ONIbzKJ@PH8ilSgJx0v&Lt_*xFJM$hqNh>o7J1cLl4rG#I< z1(fdSIoeu9__g~qD^KK)da0E_l&FDDFyK+(ltAXMK3*BVnWK5Fq5+PKiJjI?xJ zMphA-!beHzE;K-hcg<2R%q<_CPyxkFo9{Y0qX4=GBNu&T)el(;p;p6zBSZWzHvO>w zV&icB|70T{ar0-pCR>WFKQb$>w$K0}-ZD!(F+X#>M+F=`V!m$W4D;)#Pn#3re^Q_P zGSLRGxE`}yEa)Bt1xM9ojyID=S_D2YKYa^XF8)fzDnMngw)2bd9I`~8TaH~0QLg{> za@eRq{mNVugm_J2Ri+5v@VOp;E%cn#?xn0qg#RW|r8H}ZSJhCK|AvFdt15~xhe{5l z1KUSRg#QO2K8`lc|0D;6((VXo zbmVtHM0)H0rFisVetcEgthRJ`S;?|HIB3yeyxm^O9aVO;SH_ntiJvwkTLO3K%`OjS zSB_9A;M=Qh4KQ-0+8R&=H?%Y$O+Io8Fv@THl-TB7@#OCYIrtx=#f z-ks1SCY`%B>< zaQKY^6M_w>?1Lie{)W=c9kC)~JPiP7HT16s7kx}^jmgK_J|57+5Zf9MGnlwYk zpLG=lC>AJH5Z?hn5keRyWN-wU5N!?>O(=Fn#%K`~$N`+mIQs15>)%3RY(2A~gU6n` zhKkgp)lA@xMht`bmu}QxJ^;A2DT1sSVDT#%igWfeMF=4%Gyd@a95Kk`fCl{3qB;n* zDOEKXVG}Nd^|S~vTY&Q!$;79)yCBF@WA@;|KNzPlE32nYUQfM;=-1448cM=CF`K{< zBWz>+WV^%=gTiGQB%jOjU26$vdKZS0+ek%eNf%{>BdJi-Vw2TigQO}7m9tj7Pudmf ztgVEKcsCN@jPu<$C%C+|_lreDEd|c&BBm=r8GGI8FvH1hkn>g2jY)RAgU+ z@$9Bc3ULEQ)_UV+yBS|WQ-24s|L>s0$pf1E!}LEmPD3IgwFuT^NH!H}?6sRQlnTS6 z6Y98_r}1aL9hNb~@ub+(cuL*fF0jzY4%lAiukoZfBUXmgCGKo?vZU)!M@&=3J2#Rk z^>B;7l(3HAPnBk0ByyM@FkmIUFkt;lVJ^-gjx&D-^5owNUH-Sin~dAw$=Iz5RuB1H zf%B4Y4x_?~jfnCuFOlisuiW56$x6>se4Dpb1Y_iA%c10weOhr|T6!-}j%Wb*bS0^di0NpP=0du6LH%)=(+Y?fhC z?>s0>^&zdHS0^H*Up)$8RTrv>V0j+>v=pC z%^xgYYe4Q*7W5#SH%!oydOWR>sC$D*T79%r)f#pPbU3Jck^1#R|4>W*MUC`D4KDd- z_dU_Nxd@x2_ZPK`(fAiN7wg~Dzete7;r<`g*IfgU9iiE}n_jJAoqCWbm1Vt1Hgj3j z)c&q#1Zn{tO~mb|e8}NMZXv30k~IT%YJ^5RHvMs|hQ-r01N@zPy-0s{*@fSlJ?CNm zLH^)8@kl3aU>~s?G8!zxtehfgdZj z#?p1_>TGrTxAHtSFttHt;(WFpkA2U(e_Gm2=_~>%E_kI@gA4l|X*`4kFc8oC1&IlQbUaJ<^-QTu8tJ!3;W_3!bD$Z8^b4HW4+)icjMG`|iv&@lZX@2KY3toH7(jH|eCF58!bE}tor5w`bx&p#;{LGad z$z_F`l8I&-;AUz3Ou{_@pGln5eJ&n%ZA%sZ%u(a9Xms%3z-~R~jQ&dUH*@8E*HGJB z!|Feil+--wEDZfS$>794NwP!#NwU-W|1U{)Y0K{E_Cw}MpRXj5i_AYct+HBhaP!eo zF}b4B^^HmGvA;UXb)jnqyDR5MfGz7}G{AQvi47>?sA?MGw80Bhhs_>?7-J7cw-w*F zboCvc-Fz%&2niDnP&QidCmPwEif95&h5WpSK zFSL$7Xl??P;2Oc#f6(ac9>6Atm{ga?R|lX=n#+Eow^(1*xdCp1MPCULoE<$FFzlQy zHl*sq_d+93Aanr40{1{8FyMCppc99p?}Ofh(vh?5{ifIPbBEaheQ4IsI+{f5(^(|d z;qO#t>F7BhP8fu~@{#(19wz-1FlsfG3kk<`CQ$hSpulf!0qB6QjsLaHa08?jN1_{n zK7rJcJB6Cn?*O>P=!2G`O9#ItFl{6r|ChK(fj{Cfeq0G&TaJtxY;&B|;4$>$HuwPI zgZ?>y*L@wpntTAM#a-S58gja}K?~1EafYDjqX{~CbWrGTM0sB|>5`Hg+k60TRTi#* zT!TH(=z3gBkafr}T+^q(4P}1f)y}4!RvT#vp(%Y^NkKAb;-V?S~#| z+phE-u;yF8Yrbx;DYi^uaT65GkH>+4kkP&oDIS}exiHuT&wC785H$KOi?w-C7KE&+`!O%wPu;;$fo=b7!BT5Pdw|)A71tlknEETOf|}R#Ajv+kU6efAtR!m92nrX>$(Y;S%5>Tjul;(Ugu0 z*4P^e7-(Zl2`<{N**p&=HDKsjd*fGSrN}k(!zC}Sa@LeB@_nB(D6&(E(C1VDo6u+H z8Hj;5xih4DgsbI3S`!W1*yqNr6Pe8C(ma%_mMf8-M#~MSL)A^G83kKX@ri2S30p?H z%z2wRsUMtjhhOIXc!q?5*7E_%4@k+rYKfbuc397%??%H!Zt8ub=7U&9m046ox@7`b zN4h=DLkxM|q3@1Gf3nh>mO7^sKl!obQ5492A?h|?a*Eiwe#Em0W78~6Z-CG)ywUwhIFvXo>;zLt_7Lvmy z5h8?Jq1te^+xH$c*;DI_Tg%RO=009Nkv~LT)737O=~HiGSYDbZuw7ps_&tN}m7dxW z&Id8_`3nfZ4wnZ9-Jw_GqAtp4Iccq2>?rR&{CIAhq3(#he0%HJN$64k?@~=?dz>kt zGgUT^ysh$y^Z&y?JMdEN(;~+1n|JRkYwtOekSzHI3d{9@PRB)1d9qr6fjbE+Gl(E0 ztZzvL=jQ{Jkc6p?%rXQ{w6*c^G5)y4bjLT_ux4iiG>m6n%LY=CMP$#R#; z6fDHD?yFZaxh2##28e{7+C6m(txjaJcM^Cx1m{70Mku;l zA4Oil$YIRx+O!=@Si(9g7R)XU;=RKzsYaJ8g;<6*h0#>@3TY8mFz46$4 zQ@Ubm+z!qHzP|^ee9Fa4hw>?s;TywAx#Jv&^D1{{-Rca$D~m2ieWQH1D9fId0Ok9R zsC0Ge(OVsfOz+(L`bY2^0_puahvS#vfPV=N$Swut`&)4DAHi3D1Xp35I=e7DtDIVO zd4lpO;i*zRCE|@*mE(;{{R7yow>mK}`k%mZZB9l}=#xVLsBd@oK8i&ho9uk3Z&EZ* zxkvoooqkY0B|}ADM03$)SmrK9JpTb4IRNF896wvSEe6U5s|bSnhEeVM-r=cz)%7eO z3(6P4YOysA*V~1^ObdN>9*;~UH*E%?S7<}%SOr| zPRaI?z}AV!S3biFP(D>^z0-vOcwf?_zbrBA*wpK#yYdRYg#|lpaio0uje4haC6qEB zcs=jD{5D(|kUjLzV*X#famjx+7*Z!6+lBk`H^b%ZL?bBhzqMF`^T?FG&+x|Ad#{tfZ$5^Q~DiEl(6mCpmACiik{!=T!B&L#{ zzgSpV8wx`fzC<(c@vaemdc2qgBF~82mPfy5k+@2rk$G5a6WjbGbPQM-)yl^XpaSsV z=gI7>v@%eMT(>f$!20OpsSxi?mshh7q;?=@|o z{ZbwF_#p^D?={+#qTN@=e*jj{Zr#oE4m^sja6+fYUdx!W=X%#a4wM~^S1NAXEqlA= z>X{K_7&6KgF^a2;t6^FC!CFOzj9sT*;7_k#B+8zEeG~P+0qkY}0Gx#W1z`8+8n6d4 z+zv5(-h&&pyyeDOks)K(VG#>;5Y*LZM#8R4hJKfa-y?A^xE&8&*HIfCNO#e4%;V|0t|;& z#zEU*ualHQ839-Gt;2(!Dx z$JHGeC0sW~0$Pn5Ts$rzQIwb_*RJs5vb8gARI!j%GO5sYGY7SdQmk@YK(ff=Dy48z zP9D?OF)f!e@?GvKT*iTAE7B(wg~0oKy~UZGC9fmZCZdNqZ511GxpTY*lNWWQ%*R}MtX_v;w zFzM-Q88a*VhsNG!y%#~8C``U8JKL2OgQ@WeLeUD^_hG&5EdTIcVm55h7shElh+K@I-VstxpvvA~6M7%LfX33Z zgwQD#Yz+x{gd#qKA&nKs)MX9=Xr;T<-u-`tVg`o7j`|4249vyeuASyG1j=On?#@i) zVP!DV_Vr0eIy)JIPxM9|r$dCjmeoi#<@6~f%}<+}Zrs^r3W3+)hfae&iDyljB!y}b z3*Aj;58_IqLKBARk$Rf&85-RwHC_GCh1EpW2rJ$UuzIAbc@7SXg2oTh|L85+>KPaV zE7BG@<HBvz0UQ(g@z8Ro!^oR|Dhgii#ED%;B+Z@4oP4l6qE90O|A?#5U=F z)+m^eo!5O(+ACBg(Ag##k%|hw3ag8lbx=GHmS>bt{}ItcLjxR&Qne_NV@6$r`A;TK zI~x=*Vq!An&0v%xfcI22JUP6k?w1&)AV#Ea@Lcuyluf>FmSAq_Rnb->fd9uZmqul7 zbE)mL)xA^S`dqvELR7LNSCR;S@VBGoc15u%?E|&pHp-wN$aoDg)Ucsk(Yqt7j6vcj zj0qLaw_Z+G`0ss0vv`f;Hs}$sWq8=d(+)wdOq6jm$Z<1Xl9~aq5T9TuQDozqN=!XL zi^=?KgnKid3-qXc%AG$4Csd`Imw?!oN-N}HDdYunhC^V$(4wdimk|5*SfT_#-m9Ti zXfIN#z|h-XOb*&M0!kF-P8bj|w!JrDXm7!3*|*xuZ52qOuzg8uFY8@O;@a~NRH&`w zC`*JDM6gP>pSrlvroLK#hV;cm5a0wi+_cD2$SW*X!lmuOqeWHu1+8M%B@Nih?OVxV z#1E%*Z4?b&M>Nj;oQF&%0vQ08E)2=^n=&)Y0Z4*Y1=}6eR0#4$^)v{MB3f`x0d(^q zFc+8(_ZdD5?+FS6%+d;Zr8tRMZDbhxrJqc0}`gPj5smlOB9&6BsrU1I=4skSX4w*HEre6LSug%SXKMinnqsKa87M&I@%fu%uFD)~fHa*k<%O!H9iXe5Z)bqOF2 ze#+4xD`W<~8#n1EJzV-)5dRq*Inve2i5YKt1-?Q92&D865XJ|P*1v(QKY$i|Cpvwk z^4?6BU}&N?N{u7=t+3+$Lf|h4wk`HdR-b5q<9?({)T^**5^%q>;)2j&Xci*SlkVXf zL(xx!0GdLDf9XJ%@Mj~acP(J{)W(iR$8}ThAOp7)BKS5PxQ-G3c~oMAUCGZjh`dl( zDi2VY+w`?W0C*m1@e|443iObvrjlM8u^rhWW~G2m3~CiCJcoCB5HePTq08Kh6vcyi z5s{NXeui@20Fd=5M>c4Ho>;C%v@1aiv-i^vFMztI+Oo z`3jho@!#|I_1pvIc{o5o9IK%~aQ}PWzM8p{nYf9Gv7yu7Q~15Vr4~rkoj*TfG@cB~ zXQzOWjE;Lxp@9wQjPG5g-9HGHmoI!vuSz(Pp=}1v;up^GLmP>e8VNf0`A#E@6W7Y- zIE)nb@aFsG=HB(}-MUf9dHQDy;hpp0(5BUAg}-VkXUq5IQg_dmYHR)cKJspF*S%h+ z>-}*0;3DJw@$&uY?bNmXHD`K!wKHS*y#ch_e=Nk`JsO68pY6IQ)KAP zyE9av^z|PLZ}YwT7|!Z(XNT)~ljph>DqkBRs_qpZch6T&^Bd<{U2koH>U-ZJ>&H|R zA79`1rfz4YO*)hLLm(5KLz4UqM*tEhT%1Pvt@pxer-+%ReU*7mu$1h+**mqDoxOU@{O2~u1 z_EslAz(>eS#Q*O6!naxRr@g&;i@^oCe6f1;m7=n{0!>tCVyS)6+rgxD<=nJ=k<^ow zm*C5^&<`wD-^ZFYQzYo};lv_4EI-4-Ri`AviZ~IrcPjEbY))B0zW^nRxWivo*Y=(WN9q0Z~2Mjp`7 zEu=1w^!7Zg+f+WusjU)_IyS(>~ zM|AjJIv6^+=Hcs=`vqFylCVICFs1r9KU2F-r?CIU@u~dima09fRus>+{FH$J8C{kL z>FvFKW2d!XOjdva>$u9BtD=#UqT!Gk56gC#!eW@r!c=S_Mt))Hdr20oBA@c0%Y8;D znNq!Vi*k0(hH%WKDHqJ%^D1KQgO5ufQCH4JPcU%TuWjHiY~U`o`#T{|b^N!k#~mpI zj_#`a>G7X;)>5^Z+4pJfx|nN&N9VhD$BYM%Ttz48kH7Ejr(Neo12W!fwrrH{wG7AY zVXVZNs^ud$EYxhH4Y+;eG&VQ3n#+eZJqr?ED~I}+rXxcS<`02W1v{UeABT0y;&ZrM ziDK|ee0pF#4vH6#ieJC=g%Y{bKT&}98t)e`+UVNm?dP@7+aXrzf^Fc!zpD#YZR$)3 z4EDx*rS`=r+YT$&CL+O2_eUi~+wq528;}!tWmDnM;qAC3gx8@qZ-%YYVlX!8J{<0< z+cZscO=p}JH=AC3HKyk}Vsd#Pl(6}!8)a9?VA#r&qZM>%f{Yw4ItFgMxTxNfbW%sJ z7h&R!$t+c`0FO8<&w3d`5tp40SVQB_5HbNbve-}^mE&T zeWz}f>o}iaA|s^daR7pD6!l7T6rkkapkme}Zw#&f0+DLzy>& zAO!{i!8rbl>pzr!f}Jp++5(Hg0*hJxQ>@3<27a4ayzv8P1B@GC?gQsP3;c)X8i@wT z1ufD|U@^5_6T$C;CcMIp4ElHpVhwke9Tw{ z-PCRrkzGZIu-hu+ymyL77`3pqdY}UkU^d#Cyu)iMe~pbas(5QDb`3TZs$3fXcE5esKN>qOpJ6@c zy}9oemZowr&2hkQ*toOiAz1dQ-tn z#~LSoF2RU-{4+QFd9cN5sIqF*5}z%9URI)#bxX@~VnVe*w+hsOy{^EOOO&uqk*8{y zUGKSQHJJA{nHw?40hnwRGPiux-o!34H!Hz_#o!Q;9WeDpkJ>D#LUHRUwy+r=E+7U!&hgGk~mzP*^!Hff+8_n1Gy|KEN z1|c0zeAzO_mzLE_E+%{i8)V!21@^R)8hJKkWNOZBi0y`6+Gk z2qn@g_m3udj#O7Gv!`#Suo@v>DB(}^8{~NuI>(8cc@)@AYkGFCe>Z)xa}Gnrl4QoZ zHgcIlJ_^>%)yhu!M2hk%W}%b$Qec%g$*EJg6}ZFEifeej4C1$)N%)7 zKZ?2wMzRQ_=rkTvt;_;_=Oz;<njpT;Y2aA5XQ0uP6pW_yNWuuKW)NfxWu<4}zBnH@6 zayxG6AoX#GZ^okEJj+bY;r;=CI5OL$rvs`ZSo=$LY?r?>O=hVgkpL3alb~xq+JyAb zLABq)%ck8&r0C{5nr(xEw87nk+vVv>a$4l%w<|MUHa$>RZd(81z2v_6tA5#S>zxqIBJ-tMS|#k;QA) zv@ST#SYJZ4Ikt8h0nZ7w=`GP!9w(blLF~SppT=EGruF*Vu#e7ldHo)-Stj0N0;bOL za|{Zpd3zTt*GMY?hl01$rWalh7hQX6&1noAHl)QF$!&#jJvq_IiskqG~grF+Sz3tdvh#>4bM$7qewFz9+Lo z#T}ZlF+e2o?- zy1a`Gqf85>&|_P|)o+GZH5*Bhn@q>YXt2B2$^-$5a=I5-M6RvQ>^ydF_CNiP*}808 zMw^7Dtdx`0kV04O9PfVYS&g(^D-9F4b)*97M0MOtPov$4#=p2J`)IY^XGy7WO;X%9 zeItOZ6>T{8Ag@OLrVZv@{ip`x;I6_d;@uL&4Pu`qnc%UGxGhJBaIfi5aWi~&y+`wQ z_x+h7LbSgTKCU3aoK^^B{c5*&N9aD3wXMhZJo;KOx8KWN!Sbn-ZzFSDq3`VY#y!PT(cz8D;TF8a zKc7)P?Rm&Xjk2&nQKo+(BY_E%79ghF_xpYejuK*Qj3PGFK!~I4U?ltOkKmbzUqf*5 zxEuGF9-R_8FHKsUaaDI&0)^#K=b~+_Qj6S)qh8^_nxq!5|0p>qIv5*Ky#;pGoKaVO zC4Xe31{=bb6RlJdPEA2jy@Hnt2Qu;2l1Xufn#@GedW$p&xvK&k2l&pXhCV|%V{DtJ zTI{Ixbh|MBa7@Ez9LGiz`zpI38XP0)lCY;cR-U$#Fp4O3QY$m;?~oXTmxX?s#Uh&c z+;Zlw(HVzX-Z4{I+>dGWG^*#|(OwsGQaT19-k|p9T22G6&-%-Or&77UcV&ih@Y(5C zC+~~7yGO=VtDH|Kx|?}7y=L3VPG)b3C(V66QgFZ1H@g^2#8x(bw$eT-sQ55en`X|n z0WjR9SdDXFB!{eRjmFy4Ig-bPj*dK(CwwL_3u(`#Bv_dgeLJ$~)0>YOi&uRPJh+Y% zu73Y4K8|lN`zD=QRE#WsKIX}uL0Mb2B>^U4@$}*t8nQo61C?>U=b+_=brJ`t9h$^3 zTF>;_%^(vIq|{Qe3|c-YGe68MQmjl~Gv`;^cpb!xGe{kJrSeY)Ps+Irrm#L0L-&4j z!WX0-T9@;yZ6^1#tQl3vo+HTL&@YXl-Th$S`DX+`=?4_HT4rNm!Li?()-Nul6||un zQvB?+S+g1GfA6@ru3)x$T^|)M-iT~VzkiD(AVNA^)$ll@CTX|VA5QLB(?{`Hv3l<# z{zU|Vv30PvD&1T4NB<%wRW*6Ly_!{Z$T#;E^?{})j>4eLUsGbH+g zWIId0-X<29<)Y;ZUZ;NU2)K&2k;UzGb$$eh3psP2Pa&Sl@rQ+Y7n2K)-ph2JYX#jG zh(}t?bM4HRTAX&a+nWlas(6j)?cn1j6zh0;HP#4yoyQ#2F~Cpq>S}1Ds2#=jb=Epz z!>nh_$p#|)DI(p`<66(C6>?tZ@#M1eJlm8FB*vB-e-hv5+_56MKwQUj7_lfwF>uwx zX$BJ%G-8W&nd`(E+;rkMyo6fL1-!3k zjQ0F70cdoWv~y*i_jmexiXv%PFZ?An#m@FGseg)=J9wk|rP=kbEtp)5MXJ(38^D!#g%1|AD$d1;m4*o@}b z<>QO;N(zrd`uOVS`1I-7Qhq*`|70-sl0JchOOQFa2^fjFcA=Wwjj#2$0{0G%po4tM+IK z;?Q(7Qg(1W7B2HDX>w(SZ|1DYQAI zv*Jo+Yj=J+PHeYM8QFbor;_8i661HubS0c^C9JKSU}$p;!Up0INU@I7PNl|ir9Kii zFZ9p*C6K5T|GbmRuSJs69+v2>vpbc>OqTqPtq-?sc+EWd+?O!+r;a)1;V>y>y|Ca-SRZ{muVxw=`dj^oM? zFkX??;h1k47ZcWv^lMq(wm0%`UZ>dtDehE`nyN3y3w7=woG(N&c5u*ja!i1V9tp2) z;`+_9GOKhpj_u!R*hZ5&3UoA{8Al%_W99gS7*(cbc}PVd+g3{3R{Ax2k?H~|x>;Vs z?l~6*+H&vk-{r&GPRiIKI`+))%rrGa=`|oA(Ab_|t}PlSr@C-gUt}78O6=hg<$X(; zzaqkAQaPHLf3d|)5B*}E{iQXU>-3e;+VfA1=4(3A=JRvvpfBedkqIoy+)yg)x6E_Z z$g|O3PV@rrNjf7h2mLlVJopuaYJ()^>-r~3KELu-Ve>U2F(hg7?h{qC@;Gj-ck{;} z4=W{-2V;)K%C1(fMpmBAwM2g1k)X#O6B1tp^-0}`JY5>lXbIDMPORi-_IztsDH6#x z0IeYa!Rw*i>id!Gm3;y@c1~K%B0e`|5_P5$E#s^0u>A%Fk&3iXJjUP^_h|j+?wp2M ziS{l-SzoN&Y6Sp_5A((V&_`G3M+mt^J|=SN8EPz4CIJBvWn&&dpPxb8qi$OnTdtfW zJO?m?z$|=r#64hE_3N1I0TH$l8gUMVq5TqJA_{>{A&yEqq7#ykACiP_{CM1k0K-T~ z9g(i}fI?dH?Nd#0**EjBp3FKIO~@gaGDcFdnO$^=MV$$~AQ%)<5P}+ehGUg5ke(R? z1eQDY2vII0ET>VTb3oXChC~7VSIE;9Q(#Evv%f;}-iIvIn*I|q6AFb?IIIUrt|wb* z><0;$qXms62KE}wT{MbFr1EzrF}-Q@Ap{$JC^9j^aAP&zWReWOGS0ONUPXeDIhJs)oB0I+??BbV< z51XZ)(dxAd-AhsYTR?jU1Lr|LL%^V};E(gJ5`BgLy1b)!Bks z0=2&P!l0_ZjO2pfS5aiap@Lwi`;(Mp^Ul&wQ5kioj{&cS|E!utO$drPGNKR$lunFV znvfE2jff-xF|ztyDEBI1~{oVaFaNPI%`U|jEz^&ux+V<;$)SnIlx-J<31wZ%EM=$P;Zr7swg-qG! zwIv18zE?jk3~CH75e{)IBQgBbm{#KRz3>=eAIM=aC@ueGzkk19PA@9a8y(W~@L+%H z^xC9WU+7KBnrFSd1220=1AA8sduNB#SZMGUn39|A-@5+1M3=g0WOx{8%wLm+qt0HU z7HCGANyF#yl2sU5Q(GU2Ux&31>xQE+dSzE=HIGF+j(Lb3AH2YFI(EqMNri_{ilBmTi)tgz69REv>LzbBzNvImVr#?3GW9w-YUKz zRc~Qe`{K%*h=kLhf3;Ci%IHeqNn_9*%^e7-Hj*DZO>Km!CeraG)9HRmGV_Wz*H1I| z$zuuW!l1=H`eNRHYTNhkC~eC`Lp$W@N%U^31;3vrPsQC{hgm;=)_MPNg3{rW*ztB{ zBnTsL55-Zoo?FQ2P2s3SbXSU<^jIiAn7!`$nt-`;2gDmVP0c}zW@2TaXPabVADU_Y z9N*{VEbI0PbnSaaXIjSZr?o#%mDTRneNFnlipG(hZwYgq#yUdcpt^3atK(*H4}iel z7NfvxIxgx`Io;7r6>lVrK-L3Zm9tR{(3FP%i=Gpt19+X@|JGyci}Qu73GwulT=Uo6 zjqz21)Mo14?#@0u&trcbB8|M7g{#t(%eF{gAo(3}>y@XdpvD(!&^~yOGL1?_@JiIM zBj88Y_m;e9{E`CO57aWrq`qKfVy<9EPSV3 zIz3BUfY&bSHkWH+ersJCU+B#R#Wriu*>QYrx(mpQdXSZZ4A2@o8tgQn8_Uocv^@V z6goCVx_y_Xga$EYzQ#RkmxJlP{GZz|HAfJ!;Q0ye>`oYVE5>drn!}k;~U=t+i;k)ShI5>Zc zarnQAF;ioIHg7DaNlViaQKDpf*3{%XQ75e9`HfYknbVU)XPE`wIjO0I^ONVv&yba- z5$Ri%Y$_e&#+qCG=H(nut*3gWk6ioh>+ATgP{uiOy^+1Nt$7;r`>IXjNOlxpcod0WH|9xGkK4&Iqt z-rG(&OxdG%*NTW7i@X^%*Z+`~75~Dg$%ws%cFm?qU@uL2X z>6B=4Y9_xKgoC>RYJ8T*JWINR#XnLfNzH9xGTGNkDhi+n4BBS62Mk6vQw(&3pa%z5 zL`hglA1bbCSqc7D;SL&PqGJ`-FRk+OcKxE@qV$gr<=i8njyK1D>3ADmuVW?se~@s_ z*U0o8yn9keQPT1L%Zg9mKdiV{`WM7~3DAm9{|_sM^!I}Y_o0qL>k_XmyvW_h#;;a! z2bV3n^bwi`d_Y_(<6h}AEN0RtEO=z18mz5bA=pE=uostkaf~(S)k6*p4BRt0QrzfXh&G9p3$s zS>LtOrhPGTMJX1TAFIbSUy;r~xl`Fc?}8*KjiWnZzfGhe86V2Ru%Vbp)wx8}cz*f*uac{V#!Uskf7dwbB$m;Wg5nTVkvbk7wJeKTBk9dU`ak6qW*zeD?!gtjnPnd zYVd(t;jjJ=>L6}%;mKd9wIT7nbLsrIS(uiZ*ic~{_$U_A6+0!W+X||5e(K=0A%#i- z+{-M5NP+aN5^2z39GNf-7?uNQV_G6~?Tkxdh&ThdVH}!%i?NDaS`~^k&;g}7yuVN^ zv1$D|FjU$Yme_^<%~jEKIIp4}ycWs;Q97E)zRFMvl0?HH8cZB0233=GDJ=POZGfuF zw+d7|)(=GuAmu~_HcjdUN+WQ}olY|(OUzx}wMF-8#e?aXA)p3`&_SALmfW-hJV_Y4 z#7n{zB&7hVtI=kh#!I774w+MtiXAaC_bJ>wQXSQqv8qT815qeo@MuiEJHv%ZOiL9R zW`nX+B;Ens5E(tW#W9;mj!9(j0bC@QM)D=Q1x{yb%Z$%J(?pfjzGj|cD>Z&i(Jr8- zAHW3!r9^NT98gu}CV#`S90)-$Kpenj=s6iK$zWJ2K}Q}^VIpt}puI+6rcpDtui5Xxpj1)pav`|C&9Z}^U3$$y17R1A2epoQs9+CJ+e7h34UE+b7Q7aEoA|6N2E|`|_aHxzH`*hv9T8M!rOLSRf(yc4L!d1KR)sM*1QU3_ zR!oVd7Du3`{SwBgPo3Sj&43EDA0_>z2BZue3!acRb^}sQ%$NKhlu5z8*)X}p0xZ(easnL zsr7Z;!rv{ySSaXRLzY!)1%)d;?fIIAL#%Ya>cI?G8$*PaCdCB`EX z`l3Wj_lxxYLzl7>-%dhR1h8v*AqW24A*Dj)7neK9jNX2YIFjzf&{J!>tvg=Q6U-H zO}j*U_s5W&%X0AgV8yfOp#GZ(MB^cKDegGCv77Hm65!QFiuQ0(BBYCz!lz1U){s9_ zrH$xjIZp)>>zsFYjaEC>XFU6gj$F*NY}Yc{(h<}@{Rg(|)Y1ptlWfOMMctm7u0puaKS=px zPadi(RT?r`OQi$M5GB=4Ofxm!PV8rDoSj&DYJ%MWB8&`oCKU0GQ+`BbJX*}BK^8vj zffJ?=rx-|6Ys1jOGc{n?NIJrqag`xsX?2-7p&mH zh8A3>iE2C|pdpcGUK`PT4CJmxj+OLalRNCdG%zN^OXhl~X>)^3jvw@)auTP*hfaf# zX985z*cAK1`&MF$*IyxlW=$FYLUf%V*#V)6v-3d8w!;K2Q8f)sA7^(~YAc-qADS99 z{)PL+D~A{haPxOq(o#{4c=W%*@}}*TUMADi`uMX*B`IN;eJgV)6Mkk5R)S1VEsvzN z5^g}C%>k9-&MNV+$PfA?S*wQj!|4C(GoM?Z8E%~@x~!m{e~_X4hPe`KXvRNrLB3DM z8XQsJ$KZ3Lm)aJk&7V_qZp`ys|KgeCr}Q#vL=u5l@(9gE#F-SG30ha8GZu5IJ>UX+ zEuiCQQ8U(dACxYDR4mvyph_#2qc?AiOy7%7o9(QU_Q2v*Rd*&;w?n9BTY@O9bYx3G zIkJ}5;HCRs8#18|H#@gPvo_#V2Ex13rx$Sj!&CQ|MhepCtM%`bFwXK%c?qOev5&q- zqYwgqRDrid#r4*?NXRO9F&3RB2*s;EO;SJm?cB!viX)q`^O3xLsv{*u3gaf;^$Qbi zCPm7_8=@#(L3IS-6P@T4w)k4ImX%W<#!GxM^DPz55z{^tlTyWZ7wPFwN_HQ5JoFdl zh!t?^U>BI_ArbuR_Kh$>kmWGJ?=0O5d&n`uFFQ&DI9JdEL@2(w>;VsfpjV;PNE>ml zBn0Ip{JY58reQ)2vQ>wHvpt5-TS!8&WpiQ7rl`I>nT@7Xq;Gx?fr#AVFQ8Y@^DGe$ zz$kC)D_2(hhN+iEts7xNz(7KO2jUM;nYw~D(*6uA8_G98)Q0Q(yMTH^?Hf1K!s8rC zn2=u%$(tTTYdVw&vw>+ag%n8S1NbiT_j;E}jSp@$pv7TA#BX}M5~#i)KW2zN!}r?_ zF=`Juv;+UILiJ@f^eG)C;`e_L<>dDJIP;_Q%#R0A?9fEBKJ5~Lq0i9|;14*v$P9_) zz}Fx$5x(v({ADs^eVIV|j!W4*f5qe6M*r|ac9?n>IT!sW3I0GYGrk?rv;UAn=Ks(S z^S5KdFL~ux&{XMzk4bJv!MyKZA^vs@TcoN(k29xUh>_sxri3;c#u4)hdP2kVkp6?% zil6d_BxZsFplqdI)$h!3lBj$^L;tPC%l{!T_TNfoA4GwJUedYT)4zd&g+yO^VH_}G zKOW(_y?qG3{y^3Ls0|*==?^(q(0F#h+So-dG6c#|fO|zjI;>BScT>0F+C}c+*hMy( zU;+ZRtoS^dH?GwOA|0=`_nRMZ_q)aMYydJzaH@Iof#c8Je zHXgaHCJ?tat4D?d1x3gHsRVCT0&Xic>lPpm^1P9(YS}7P|{#Bl0)RpBaUI0E&LLg$-~F%{o*(lN)C9VeT=%sG47g!rW$eH7DL-Ut^1l060qL z-QX3c<&N-tNI~?SpHPHE`ZrKkui0+w7gY%E$ybN;jh%rEs24q;$Zy51i1a|TIpIF@ zCR1XJtiyzpOfCSMh%tbB(k?y2Io(|*wFgKHp}3Wa@5<>c8rql+Ec4KZXEOeD8v0Bf z>Jx%pdiyDRvp*#FR@lK7eFlhDqYS#;*^ZKj4QK)SMJY{@1#LAR}wH@q$4r z4Uxt%YXnZNtg=}8FK#qQmHMKlP+MwSJJZlO1!-*NvgZVF9V`t5J(CO3gXy2mUw+>2 z2my2sp2d*K89iaVsMFu}yolj`_;kwBF#UNsaIn8-WPY#ovVKuT7mq&~GZ42As_Vg4 zN$3j}P?mvE`6{zXoD{)L)?bW)V=I87C82rvPlf@%!1RTX9M*EGn{+@0ur{GK(7 zXC2{}BCQ;!ruqm;1q{h^oa%rkpU+HNZtB(!`$L~&5}ffr!|xFD-R8Vxqc@Pk&PmcIk=+&V4rw-?0ybP*ols6mijxy z8H5;ph;g6;+ED#f)T=x7X?$+x_q@!c1#Eg{0JRL_XC4}DvrGpiYPL8sL>(LVR7C(> z^1DN2d+?HR(x>=)3gG52FY{KG2WK!bj6iT?dC=d1v?9}vN#7*DlW<*FOx8z6v#r8if_tANUdmxVf2u@hC#&R>ZFlzJ6&> znt=)80J{($B}9Xc&ZWck=W+$_u5hcShiwsQ{0wpm48TCP!)sgSfBw|n?8pa&x?|GlLp~Fm%Qua=xtTC@RO^um z0t=X9(rQVcOwXo=&R}rrVepd@$IX?K6aV4F$>!1E$3so!5NAnMAPEmLn?2i)+#i<3 z7Cl&Fr2sG~utTqfWLzQ>;b9Twp`oeL1X5a15B{5ym>52a8bHhm2j@Vn&>I%Gai^ww zRRZi%-;;8xjdq6vuM%~h9i61Jye0)eTYe_Q+Xzt&tUx^)@qe?xOilzkb0GF_XB^O= z^RQ|h^Xjlu5XYqPCrsIz9Qr)Ssi~}KsDvtAo^f0E?ZVr{667-B!h=*v{l_h&OO*{* z#FE>2oe-{si{kklS2G0IyqCRfvRyUYLhui|r1RChK+d~Njumc};+sU6x9w@&#VM7V z12#*@zXne$J^~(quSi<6T2v_LoP9Wa9%BFaYrjD&>E~qzBg}uHDaQ^-!DNJBI5+&t zgQEQR@0)~(ECvTc&tf@KU=2u_?nYVolO-9YX@x;*c{3sa&b8w#L=^^z zOR#ES<%bJTQGXgW-@$R%zom4<8=)B~O;C(eCfHwy&9@uq%v%u#6lm}xtb!rk{6)Zh zyM8~36qf%V0+a_(JQz5m_Uu`nVB+$!#KkfaA^_*0yFELl1nJPm zJarL(q`r27nBSw+WWs!#O1p-GOuQ-9euEv!h&jlNV7DWJADrWne3Rc9$JM<9-sec=?itxcF8Hn(gAw?CjiHcs3U2wO@X-wP2F0kEyLijWOkpjYBg%enhz zra7l`kxd)*RYN|D+E=&-6Jeag(oX&u(8h~X_|9z#EAFGTA*Q$nUOFQ-RR}o#ktChf zg9nclz;z$YB||k+lf?s-_{eWyIt%5>-twu^IQCyE4BdxN0 zn!YX?h(p@%#+hB)O=vucfu~+LBuT0l?`)n>N1s3{ho)|{^SNfEt48WL3B9R)WF~gq z@6~|rw6~WO@mS1KV}B)wmr-8VU%Y8ftxaQ}AE6)TUAxv_95@UDhN+P{O+8LZbB*IK z4!oKp&k!S%CJFTUA~UCt0u$7_HIR`o&84U`$4MoD!{GJG2+WD~_i5ryvp^&x6zKkh zX;XE_K`6}9t9Tf7qi?%;^pS;9{1BKLEhzMLO!P{;qk-r2tiStf$TRT&O{kDB(@pul zooqrI#M>m^`ZoFg52@r1wLz+z-hZgW3HVSait@kJSs?(`al>@_y`EtF8_a0`$uZuk z_-`N^OdRN&)hM~vf01IPzrOZO%zAnMAM2nO2ubL6gM)w^!T!gp!H&jGPUbeIf8|*< zs%|*^D%NY+F@bHem))Z|Ca>9)qqG8kBmkt&8^rpSD*+)-ev51^Vl>6%`}rBh z_2X1`m*c>&JX0p3ODy^%Tk`&hf=OjfLq7Pp&$DZ>Y54?=lW=n zBCKcYBabypr03dEJPeKO4%S)Hw9A&7pa1MJ-169KCH|ndMC#*2rNYHNBo1CxGVb7d z)9oZ_xdXUdV$|+UoSye@M>+gaQme*1Dm+3+N}<3G#2QGGkBbnrdkHL9Uctg{r>nIO zKGdJde40Syql(A$$PK1^vde^Ins1MeOGigI6rC_}i;jAtq#!z*ClEP;#LiIU%j5=$ zj6YpRgNMO`jNuu-bp1c6AZe?tOm;KA}D40>P%PjuAl0U2jY z$i>N&*R>)TL$S=*s}}Z1RDw$jkC!b{7o)3uQnEIjm)@eLWH23Bsm(yKo$t18WIX1! zNQd*>xHfgL^K5RM5x7v8ad@J&{R>CcnQ5k|uhVs-k?cj@Q~9tjiu3ro+#fmXAG)I( zP@Lx`n`n^ZE?Z&sM_2V{)_I)f zk)}Mn{vK*c3->+P-2{$P_}+jsJsln7Gejx|M#}DdG5T>2>{?e%B#Z1_EOn=NmF{&#xiFU`mXhR{q;%64 zcam{iI`1Rjo)t=UH}`D8i0CqO!*GZih7TqhGyM!M>3pqFrwsB5>2p~00I5MKYn}8F z3h-0Oqc~By_yjBJ__KJZ1}9WDK|)y@fP8z>5*>4ls+THi!nx?HW@_#jnLf6$dQiM2 z_X`n8REEj1+1RG_e1>1pM~YyI9mBtDr(ukJ)2`o$jFN7pxI_2}>#ZA<>^ta}Mt&vX zXmkQFJAZMon+MHt>eKrum_?7TT?N}d`bi>Wwe);)wns#S{y~Ci`F6BseGU2Fjy?0_ zIvRojS5=1t0YUqhVmJ|No}O`+Wch3AG-98pia${u}W-2N2MJKX&6Vs z^91>XUxT?8e=giQ_dLaC70Y~HBi(*$9p`aQH$e^>0E6QsDg{o$^FIA(@P7MBpxNw7 zUq>lMOWShUgKJ0M2hLLHwa-WN)HxnvNE7{tA{p>$D-HEvy@^S4-h{eEHKjGHoD$y4 zv%-1Z=^I8AY=0T0L0>dB+-MDFs>41jy%6P6Sl_) zB|1kwh~qHvron*23{)&MWYXQWp%EKhb=9eKR^iI*vH1D`T zo==q8ss$_**M9R4<~a`3vKcBuP|jh^uV^;1==_9m^V$*jsN>J;2FiaUYO??JH(2rZ z-On=^XOB+A>Z($0F8-GO)1nA94_LMwLw9Euyzkm-5QS$z zmW`uf-yu*0npxVp^C`{0ik$w44x1avqB5(YH_Nh-o4y7h@aD+!-q_NuJJFpZ zXd{ad{xW?{i6$LhF^0$N&KI{~ew`xJq_eG}XSd&*awC|cJX}$;YYPd+G+BFj;2l2Y z{F2&5d0OltS0z#AeTDbmmt>L%Y0D542uM3E2nfc%E=eadV{2okzqTxYt#GC(XS>FU z-StNerEP!VY0WvJP5f--e5nW#tywg-K}^evT9NpeybJN%zQ<30qoyD3tf{}IQW*Yh z?ls+ppb6=hE;h|-1ht~W;h@}43g}_dM}DtvU8UcPr=f(P&tdkmulJeMH=VLVaSwgo+Y zBkWpZe^#OtT{^NFw`cOB^20=N#~19C&_e6cR{{@a;m|%X2nQ0XpQ=1B^)f7y(q!@I zV)Xg4Gk5($S&SkmGU|)RD{j~~U!U&o#xu;#%hK5)f9q5)pMRZer`nlm`XNsDh<@i& zJ|`_52R6tKncy@Y?XV%0m|T=1U%z?mgnLSvt{GC4Ek94ob&B`(lbnF)JavtnX~CLx zx*0A`x{09N`?W{CO`$oZnRdWyrxzMVV9ho(D~Nh_`(_n zF-u+Ek9%vW)4k=AOgaKj2a9{d)r7Cw5Z$n^_GoX1&rEMVPc#pwkFK`aUX36li9K7s zPiM`#-P(RA(gUZ}Ij>i{tEaYt?>C`T;w^|!q0;Lho?(G}zd+6u1QYcB*FN5a>4CuNub@RCw^tDB*tW8jxmbL)c;!Yp2;h;>z8ZzUu|7=R8-p= z9qDrDl8{EaYgAGRX_4-7=xz{3a_H_xkP;ANKsrY$DQRR7q@?QsiokF5_ulg{%lTvO zn!E1aXTEdSIcM+hTlbzCIjd&b$8T|&vM8N8BOxZWI-|@=eU5iN$v*Td9h#zjA4c#} zfQjsww%3>Oj5phkb0G=lDr4oCSY9fZ(di$SFrP5aVwJq>X}p06_cLEq4VGN?7t~^y zd0C_VTzT(d1)r5~rL*Qz%poVCS-hs3|cDkL8e%1{k7Dl-sPQz%h1(P9g9ww5Hp-Rm4fPiwzE4<70N) znD0*$oz6Yoi%QX}91POzPjaeB$FX9fRr?m8;zp?ryazX5R)}s6uvWsfZ6^&T3{p?E zqc{4AmTZJ&8~EjYEjVGG!j_yZ9!x~@p1J7!ETj$SC7zp_AW+62y1wUSr`7ZF5kYOf z{WY|-z&+XL6&jMz8qUKA2p$+gM#Ff+Zqe-6v9Q+xFWR%WQ9ptXF z+H7;>k~^BH$gAn8rMFidZ6s5RtK}M6g@H*CpZ&(PIbDeirFb0GmxuB-iv3g?wP`RP z?sm|xq2DnokX-S_6Ut`bdeIK5A>4=?x=UoL4SB^zY4~QGo)B0PYoK2>fv}4{-D9%T zc(+mX=35#QvAx9UqQk4)P$n)YESzzI;M=oSMJ>yhfy5?iZM}nvA_?EDGe9?P-hPBD zHio07xV&z0FF`IcuQ$X|=g~dFa-m5DoOnNdw-_+cws%p68Img}$5dQoe)6$=d(~=P zv2JEmz}`_}iaKIRnp#LV-7-$!BXhN!^C@tVh0lx~E0a0S>JAG5eeOdGzVHUqCiV3C zF|_qTgw!&nvbE=7K zw7?4bo^O3H8P(A#Is5y`z8DEmOkn7QqJdq?Z*EjUaWDE@sOp1BE8xM=4!UXnY%t+l z3Vds}tR1sKI&@ST#NTU8g-*_*#3ebfI@yMdhaDLg{k6FM zzdP)|(f!&QHg=>Isn3b9KDVhe*4tEAgYOjTosgi-%DOOCCX6&dOGulQ6%p-4TIke* z2)e6NcgG;Y%C|CX@ndB#D^ejFF2}B-o8Xxsr&NXp*Lp5_{>>Z3-*;c!@3L#MvN?!+ zAj3r6#9!)M)z3r3t)0P;HW(_Q$7`AAS+{Ee9?fpP9RJqA*ut(wE6;pn?odockBg{v z&1wyyYqp2<@p0C-kXVXG{FPBF9M!c(J)<~6bg84Nty12iBXu!-fp-0d!dg^RmyiKl zAOokm7WmJQHQbzC+<)EG+=N=E5Pq_U-tFCo%l!fc7&c^3MF5BWbl~49{up5D{kX166}0Z80U9LRjB3 ziFa$p}W^Bx8AsZzHe+G4I*)|#?g?&G6^v%4G089Ks_%f|Zo>Y6Z~4p(A^dbRI6 z0bz*hmB=at9C`(8joM;4HaokA5bzhSD;>Z-J4$0ZLvd*dqY;tz$ec_hQr-RQIh;Hl zEv(&;S(%^e?t|Wf)3P{K+hVD7qP!6-GFccyxV}hQ$2eA=8FmCchTJt!_q}L?ltA1sV|qO=^Jd@ zr;l-GNl1oA-v&wBUM*e5kDL?Fk7JT>)|B4S1I@7?%*-if#yH%K6@zvkr!DL4r_`)C z4wZk<<)UTwAAyg1(S5ekjr=U|NDD3$=76nLS@7bApeWv#!*S0XjRi{`*VY;+JGA_B z6h2-_Gr4^jQO*2{yepf=GA5fIy|Avv*!H_Ao!6ROu3D3Y0?gW-HVR6aLtAb~veAVP zpvqB0j6(Fz92SCHBNWiGU(JR z8;Z7tG7K8xMtKs?@aGs0-4r!4Ur@5$$sYd5qN+%p;LpFN!QDO%@)W3knOW8rz{YT_P7S8~xi=P-*c zms5)tw%YYrcpUw68iF<@1q=3(L+Ogtj?YihtJ{@)rjNUE?b}9|cH8zJlNO{hG-mi$Q+QtgJhdb54`w6-&ptzI-6Fc<5(r#@;) zaewgx=n!Tsc8=4I#b(;JR^^JdrYXF&A)OU)f04T70HzK8fm01ssSb}d&Xq{+d^U7G zLvHG$8?Z?C476Sm=XKSNuPRSKL$d_LzM)}abn0V#-~l^ak^&iX3nk}XI{AHZXsUT# zUrly$ayeG6>jdim7{)BjKx^s8vwaiU!{+`xbGo1wP_GX3DSaxP|LPHW^v+P%e zh%5Z-GgeXG6u1o&00?CO04R|&7INe6U(*!Qc_GKAlew(}ubqoEct^+Hg;bkNvc+GF z!|?;r9Ue05?iRt$Vjfv8G*R2RmnovfJTNU znf8nxlKA8D6QEoB$Q;+V4?4lBUBoLNZIg?705%$%x|aaSqVs46juJo)5#{=;yN&Avp5v01!19W|F5^G51 zhB-yR)mk_ypvkjOh}YZD)y}`L(NoFoR4j;CO61|Z=XL`VO;%|!e44q+Y5o_iCmHQL zv>GQ&Yw`_I#9&7i_fgilN0Z_!!9=fO;VTM$M)3MZp@fkTcnm%UjtrgT0#WFo85(;^ zFs1+jlV9uS2!H{`F`mtVkhe7Y9M-f18FDMsC_ig2sodB~f@)1&ahi{ziWCCL0j=u^ zc!KF<39|f&-&Q0A)YS(d~mZOqV$~SKZB(#3>-K_Dz&r>Ze8jJQZ`6`BHgdmE&T%e9MK?EPDqiq8p zoJ%*r&e{O@l;c{rA4B+OJ3r3)j9AJO?vt=#6S@rOLtudn0{+$xJ9RV86C0oQtfkhdz|I~JHxBn}6L(;gQzptn2&NAzn-vWJ?;oebA%8H_v`{3qO z1byJj7;KB)Kj6#D(!9X6+4a1jLifR`bdx~q`O2EMZ&UMk5x$M~>(%j+h@*bQvvaA7 z?ZFe-I+Ig<;pWj!6&L9b!9Ei7FhS( zm6kPn80#ho_?6a4oEaSY&1Llw(Bn1X%V4ZqHU-cB_;n=&J?WOxP`-gihW;}>jsr-~ z64R@CT#}fIRHy^UoZC;^@y`c>JO=<6${~}%)=nO#Pkddh-Hm^$GgJa!Hf8BEx|U*B(n}w_llPRQU1yJmnS= z?tlRR5M6@@APb~08F$o0fg6>N~r&4a`*6cu>Mu9MC}9A z7fSwvhukn$x&}shy(B6RYMt~q&v4*BJpU=8pu$lLFTdff!GFV1$}p%5sD+5%47(wJ zGh8c6pyE-p#=r5;!~e#k=8#b-Q2qCB3cuJtx^YwjRHOTw;Bnl43I1ezQMpjP<8LnI z`2TWUcao?qs8;JYi$%iUy>iWXq2f{X;BWjz@_&Zdb# - ops.insertTweet(e.internalTweet, e.initialTweetUpdateRequest)) - } - - override val replicatedInsertTweet: FutureEffect[ReplicatedInsertTweet.Event] = - FutureEffect[ReplicatedInsertTweet.Event](e => - ops.insertTweet(e.cachedTweet, e.initialTweetUpdateRequest)) - - override val deleteTweet: FutureEffect[DeleteTweet.Event] = - FutureEffect[DeleteTweet.Event](e => - ops.deleteTweet(e.tweet.id, updateOnly = true, isBounceDelete = e.isBounceDelete)) - - override val asyncDeleteTweet: FutureEffect[AsyncDeleteTweet.Event] = - FutureEffect[AsyncDeleteTweet.Event](e => - ops.deleteTweet(e.tweet.id, updateOnly = true, isBounceDelete = e.isBounceDelete)) - - override val retryAsyncDeleteTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncDeleteTweet.Event] - ] = - TweetStore.retry(Action, asyncDeleteTweet) - - override val replicatedDeleteTweet: FutureEffect[ReplicatedDeleteTweet.Event] = - FutureEffect[ReplicatedDeleteTweet.Event](e => - ops.deleteTweet( - tweetId = e.tweet.id, - updateOnly = e.isErasure, - isBounceDelete = e.isBounceDelete - )) - - override val undeleteTweet: FutureEffect[UndeleteTweet.Event] = - FutureEffect[UndeleteTweet.Event](e => ops.undeleteTweet(e.internalTweet)) - - override val asyncUndeleteTweet: FutureEffect[AsyncUndeleteTweet.Event] = - FutureEffect[AsyncUndeleteTweet.Event](e => ops.undeleteTweet(e.cachedTweet)) - - override val retryAsyncUndeleteTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncUndeleteTweet.Event] - ] = - TweetStore.retry(Action, asyncUndeleteTweet) - - override val replicatedUndeleteTweet: FutureEffect[ReplicatedUndeleteTweet.Event] = - FutureEffect[ReplicatedUndeleteTweet.Event](e => ops.undeleteTweet(e.cachedTweet)) - - override val setAdditionalFields: FutureEffect[SetAdditionalFields.Event] = - FutureEffect[SetAdditionalFields.Event](e => ops.setAdditionalFields(e.additionalFields)) - - override val replicatedSetAdditionalFields: FutureEffect[ - ReplicatedSetAdditionalFields.Event - ] = - FutureEffect[ReplicatedSetAdditionalFields.Event](e => - ops.setAdditionalFields(e.additionalFields)) - - override val deleteAdditionalFields: FutureEffect[DeleteAdditionalFields.Event] = - FutureEffect[DeleteAdditionalFields.Event](e => - ops.deleteAdditionalFields(e.tweetId, e.fieldIds)) - - override val asyncDeleteAdditionalFields: FutureEffect[AsyncDeleteAdditionalFields.Event] = - FutureEffect[AsyncDeleteAdditionalFields.Event](e => - ops.deleteAdditionalFields(e.tweetId, e.fieldIds)) - - override val retryAsyncDeleteAdditionalFields: FutureEffect[ - TweetStoreRetryEvent[AsyncDeleteAdditionalFields.Event] - ] = - TweetStore.retry(Action, asyncDeleteAdditionalFields) - - override val replicatedDeleteAdditionalFields: FutureEffect[ - ReplicatedDeleteAdditionalFields.Event - ] = - FutureEffect[ReplicatedDeleteAdditionalFields.Event](e => - ops.deleteAdditionalFields(e.tweetId, e.fieldIds)) - - override val scrubGeo: FutureEffect[ScrubGeo.Event] = - FutureEffect[ScrubGeo.Event](e => ops.scrubGeo(e.tweetIds)) - - override val replicatedScrubGeo: FutureEffect[ReplicatedScrubGeo.Event] = - FutureEffect[ReplicatedScrubGeo.Event](e => ops.scrubGeo(e.tweetIds)) - - override val takedown: FutureEffect[Takedown.Event] = - FutureEffect[Takedown.Event](e => ops.takedown(e.tweet)) - - override val replicatedTakedown: FutureEffect[ReplicatedTakedown.Event] = - FutureEffect[ReplicatedTakedown.Event](e => ops.takedown(e.tweet)) - - override val flush: FutureEffect[Flush.Event] = - FutureEffect[Flush.Event](e => ops.flushTweets(e.tweetIds, logExisting = e.logExisting)) - .onlyIf(_.flushTweets) - - override val updatePossiblySensitiveTweet: FutureEffect[UpdatePossiblySensitiveTweet.Event] = - FutureEffect[UpdatePossiblySensitiveTweet.Event](e => ops.updatePossiblySensitive(e.tweet)) - - override val replicatedUpdatePossiblySensitiveTweet: FutureEffect[ - ReplicatedUpdatePossiblySensitiveTweet.Event - ] = - FutureEffect[ReplicatedUpdatePossiblySensitiveTweet.Event](e => - ops.updatePossiblySensitive(e.tweet)) - - override val asyncUpdatePossiblySensitiveTweet: FutureEffect[ - AsyncUpdatePossiblySensitiveTweet.Event - ] = - FutureEffect[AsyncUpdatePossiblySensitiveTweet.Event](e => - ops.updatePossiblySensitive(e.tweet)) - - override val retryAsyncUpdatePossiblySensitiveTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncUpdatePossiblySensitiveTweet.Event] - ] = - TweetStore.retry(Action, asyncUpdatePossiblySensitiveTweet) - } - } -} - -private class CachingTweetStoreOps( - tweetCache: LockingCache[TweetKey, Cached[CachedTweet]], - tweetKeyFactory: TweetKeyFactory, - stats: StatsReceiver, - evictionRetries: Int = 3) { - type CachedTweetHandler = Handler[Cached[CachedTweet]] - - private val preferNewestPicker = new PreferNewestCached[CachedTweet] - - private val evictionFailedCounter = stats.counter("eviction_failures") - - private val cacheFlushesLog = Logger("com.twitter.tweetypie.store.CacheFlushesLog") - - private[this] val mapper = new ObjectMapper().registerModule(DefaultScalaModule) - - /** - * Inserts a tweet into cache, recording all compiled additional fields and all - * included passthrough fields. Additionally if the insertion event contains - * a 'InitialTweetUpdateRequest` we will update the cache entry for this tweet's - * initialTweet. - */ - def insertTweet( - ct: CachedTweet, - initialTweetUpdateRequest: Option[InitialTweetUpdateRequest] - ): Future[Unit] = - lockAndSet( - ct.tweet.id, - insertTweetHandler(ct) - ).flatMap { _ => - initialTweetUpdateRequest match { - case Some(request) => - lockAndSet( - request.initialTweetId, - updateTweetHandler(tweet => InitialTweetUpdate.updateTweet(tweet, request)) - ) - case None => - Future.Unit - } - } - - /** - * Writes a `deleted` tombstone to cache. If `updateOnly` is true, then we only - * write the tombstone if the tweet is already in cache. If `isBounceDelete` we - * write a special bounce-deleted CachedTweet record to cache. - */ - def deleteTweet(tweetId: TweetId, updateOnly: Boolean, isBounceDelete: Boolean): Future[Unit] = { - // We only need to store a CachedTweet value the tweet is bounce-deleted to support rendering - // timeline tombstones for tweets that violated the Twitter Rules. see go/bounced-tweet - val cachedValue = if (isBounceDelete) { - found(toBounceDeletedCachedTweet(tweetId)) - } else { - writeThroughCached[CachedTweet](None, CachedValueStatus.Deleted) - } - - val pickerHandler = - if (updateOnly) { - deleteTweetUpdateOnlyHandler(cachedValue) - } else { - deleteTweetHandler(cachedValue) - } - - lockAndSet(tweetId, pickerHandler) - } - - def undeleteTweet(ct: CachedTweet): Future[Unit] = - lockAndSet( - ct.tweet.id, - insertTweetHandler(ct) - ) - - def setAdditionalFields(tweet: Tweet): Future[Unit] = - lockAndSet(tweet.id, setFieldsHandler(AdditionalFields.additionalFields(tweet))) - - def deleteAdditionalFields(tweetId: TweetId, fieldIds: Seq[FieldId]): Future[Unit] = - lockAndSet(tweetId, deleteFieldsHandler(fieldIds)) - - def scrubGeo(tweetIds: Seq[TweetId]): Future[Unit] = - Future.join { - tweetIds.map { id => - // First, attempt to modify any tweets that are in cache to - // avoid having to reload the cached tweet from storage. - lockAndSet(id, scrubGeoHandler).unit.rescue { - case _: OptimisticLockingCache.LockAndSetFailure => - // If the modification fails, then remove whatever is in - // cache. This is much more likely to succeed because it - // does not require multiple successful requests to cache. - // This will force the tweet to be loaded from storage the - // next time it is requested, and the stored tweet will have - // the geo information removed. - // - // This eviction path was added due to frequent failures of - // the in-place modification code path, causing geoscrub - // daemon tasks to fail. - evictOne(tweetKeyFactory.fromId(id), evictionRetries) - } - } - } - - def takedown(tweet: Tweet): Future[Unit] = - lockAndSet(tweet.id, updateCachedTweetHandler(copyTakedownFieldsForUpdate(tweet))) - - def updatePossiblySensitive(tweet: Tweet): Future[Unit] = - lockAndSet(tweet.id, updateTweetHandler(copyNsfwFieldsForUpdate(tweet))) - - def flushTweets(tweetIds: Seq[TweetId], logExisting: Boolean = false): Future[Unit] = { - val tweetKeys = tweetIds.map(tweetKeyFactory.fromId) - - Future.when(logExisting) { logExistingValues(tweetKeys) }.ensure { - evictAll(tweetKeys) - } - } - - /** - * A LockingCache.Handler that inserts a tweet into cache. - */ - private def insertTweetHandler(newValue: CachedTweet): Handler[Cached[CachedTweet]] = - AlwaysSetHandler(Some(writeThroughCached(Some(newValue), CachedValueStatus.Found))) - - private def foundAndNotBounced(c: Cached[CachedTweet]) = - c.status == CachedValueStatus.Found && !isBounceDeleted(c) - - /** - * A LockingCache.Handler that updates an existing CachedTweet in cache. - */ - private def updateTweetHandler(update: Tweet => Tweet): CachedTweetHandler = - inCache => - for { - cached <- inCache.filter(foundAndNotBounced) - cachedTweet <- cached.value - updatedTweet = update(cachedTweet.tweet) - } yield found(cachedTweet.copy(tweet = updatedTweet)) - - /** - * A LockingCache.Handler that updates an existing CachedTweet in cache. - */ - private def updateCachedTweetHandler(update: CachedTweet => CachedTweet): CachedTweetHandler = - inCache => - for { - cached <- inCache.filter(foundAndNotBounced) - cachedTweet <- cached.value - updatedCachedTweet = update(cachedTweet) - } yield found(updatedCachedTweet) - - private def deleteTweetHandler(value: Cached[CachedTweet]): CachedTweetHandler = - PickingHandler(value, preferNewestPicker) - - private def deleteTweetUpdateOnlyHandler(value: Cached[CachedTweet]): CachedTweetHandler = - UpdateOnlyPickingHandler(value, preferNewestPicker) - - private def setFieldsHandler(additional: Seq[TFieldBlob]): CachedTweetHandler = - inCache => - for { - cached <- inCache.filter(foundAndNotBounced) - cachedTweet <- cached.value - updatedTweet = AdditionalFields.setAdditionalFields(cachedTweet.tweet, additional) - updatedCachedTweet = CachedTweet(updatedTweet) - } yield found(updatedCachedTweet) - - private def deleteFieldsHandler(fieldIds: Seq[FieldId]): CachedTweetHandler = - inCache => - for { - cached <- inCache.filter(foundAndNotBounced) - cachedTweet <- cached.value - updatedTweet = AdditionalFields.unsetFields(cachedTweet.tweet, fieldIds) - scrubbedCachedTweet = cachedTweet.copy(tweet = updatedTweet) - } yield found(scrubbedCachedTweet) - - private val scrubGeoHandler: CachedTweetHandler = - inCache => - for { - cached <- inCache.filter(foundAndNotBounced) - cachedTweet <- cached.value - tweet = cachedTweet.tweet - coreData <- tweet.coreData if hasGeo(tweet) - scrubbedCoreData = coreData.copy(coordinates = None, placeId = None) - scrubbedTweet = tweet.copy(coreData = Some(scrubbedCoreData), place = None) - scrubbedCachedTweet = cachedTweet.copy(tweet = scrubbedTweet) - } yield found(scrubbedCachedTweet) - - private def evictOne(key: TweetKey, tries: Int): Future[Int] = - tweetCache.delete(key).transform { - case Throw(_) if tries > 1 => evictOne(key, tries - 1) - case Throw(_) => Future.value(1) - case Return(_) => Future.value(0) - } - - private def evictAll(keys: Seq[TweetKey]): Future[Unit] = - Future - .collect { - keys.map(evictOne(_, evictionRetries)) - } - .onSuccess { (failures: Seq[Int]) => evictionFailedCounter.incr(failures.sum) } - .unit - - private def logExistingValues(keys: Seq[TweetKey]): Future[Unit] = - tweetCache - .get(keys) - .map { existing => - for { - (key, cached) <- existing.found - cachedTweet <- cached.value - tweet = cachedTweet.tweet - } yield { - cacheFlushesLog.info( - mapper.writeValueAsString( - Map( - "key" -> key, - "tweet_id" -> tweet.id, - "tweet" -> DiffShow.show(tweet) - ) - ) - ) - } - } - .unit - - private def found(value: CachedTweet): Cached[CachedTweet] = - writeThroughCached(Some(value), CachedValueStatus.Found) - - private def writeThroughCached[V](value: Option[V], status: CachedValueStatus): Cached[V] = { - val now = Time.now - Cached(value, status, now, None, Some(now)) - } - - private def lockAndSet(tweetId: TweetId, handler: LockingCache.Handler[Cached[CachedTweet]]) = - tweetCache.lockAndSet(tweetKeyFactory.fromId(tweetId), handler).unit -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/DeleteAdditionalFields.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/DeleteAdditionalFields.docx new file mode 100644 index 0000000000000000000000000000000000000000..c522425b06bbe6eb5a18415324b8d4b6de1d3603 GIT binary patch literal 38030 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 literal 0 HcmV?d00001 diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/DeleteAdditionalFields.scala b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/DeleteAdditionalFields.scala deleted file mode 100644 index 726745b7e..000000000 --- a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/DeleteAdditionalFields.scala +++ /dev/null @@ -1,172 +0,0 @@ -package com.twitter.tweetypie -package store - -import com.twitter.tweetypie.thriftscala._ - -object DeleteAdditionalFields extends TweetStore.SyncModule { - - case class Event(tweetId: TweetId, fieldIds: Seq[FieldId], userId: UserId, timestamp: Time) - extends SyncTweetStoreEvent("delete_additional_fields") { - - def toAsyncRequest: AsyncDeleteAdditionalFieldsRequest = - AsyncDeleteAdditionalFieldsRequest( - tweetId = tweetId, - fieldIds = fieldIds, - userId = userId, - timestamp = timestamp.inMillis - ) - } - - trait Store { - val deleteAdditionalFields: FutureEffect[Event] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val deleteAdditionalFields: FutureEffect[Event] = wrap( - underlying.deleteAdditionalFields) - } - - object Store { - def apply( - cachingTweetStore: CachingTweetStore, - asyncEnqueueStore: AsyncEnqueueStore, - logLensStore: LogLensStore - ): Store = - new Store { - override val deleteAdditionalFields: FutureEffect[Event] = - FutureEffect.inParallel( - // ignore failures deleting from cache, will be retried in async-path - cachingTweetStore.ignoreFailures.deleteAdditionalFields, - asyncEnqueueStore.deleteAdditionalFields, - logLensStore.deleteAdditionalFields - ) - } - } -} - -object AsyncDeleteAdditionalFields extends TweetStore.AsyncModule { - - object Event { - def fromAsyncRequest( - request: AsyncDeleteAdditionalFieldsRequest, - user: User - ): TweetStoreEventOrRetry[Event] = - TweetStoreEventOrRetry( - Event( - tweetId = request.tweetId, - fieldIds = request.fieldIds, - userId = request.userId, - optUser = Some(user), - timestamp = Time.fromMilliseconds(request.timestamp) - ), - request.retryAction, - RetryEvent - ) - } - - case class Event( - tweetId: TweetId, - fieldIds: Seq[FieldId], - userId: UserId, - optUser: Option[User], - timestamp: Time) - extends AsyncTweetStoreEvent("async_delete_additional_fields") - with TweetStoreTweetEvent { - - def toAsyncRequest( - action: Option[AsyncWriteAction] = None - ): AsyncDeleteAdditionalFieldsRequest = - AsyncDeleteAdditionalFieldsRequest( - tweetId = tweetId, - fieldIds = fieldIds, - userId = userId, - timestamp = timestamp.inMillis, - retryAction = action - ) - - override def toTweetEventData: Seq[TweetEventData] = - Seq( - TweetEventData.AdditionalFieldDeleteEvent( - AdditionalFieldDeleteEvent( - deletedFields = Map(tweetId -> fieldIds), - userId = optUser.map(_.id) - ) - ) - ) - - override def enqueueRetry(service: ThriftTweetService, action: AsyncWriteAction): Future[Unit] = - service.asyncDeleteAdditionalFields(toAsyncRequest(Some(action))) - } - - case class RetryEvent(action: AsyncWriteAction, event: Event) - extends TweetStoreRetryEvent[Event] { - - override val eventType: AsyncWriteEventType.DeleteAdditionalFields.type = - AsyncWriteEventType.DeleteAdditionalFields - override val scribedTweetOnFailure: None.type = None - } - - trait Store { - val asyncDeleteAdditionalFields: FutureEffect[Event] - val retryAsyncDeleteAdditionalFields: FutureEffect[TweetStoreRetryEvent[Event]] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val asyncDeleteAdditionalFields: FutureEffect[Event] = wrap( - underlying.asyncDeleteAdditionalFields) - override val retryAsyncDeleteAdditionalFields: FutureEffect[TweetStoreRetryEvent[Event]] = wrap( - underlying.retryAsyncDeleteAdditionalFields - ) - } - - object Store { - def apply( - manhattanStore: ManhattanTweetStore, - cachingTweetStore: CachingTweetStore, - replicatingStore: ReplicatingTweetStore, - eventBusEnqueueStore: TweetEventBusStore - ): Store = { - val stores: Seq[Store] = - Seq( - manhattanStore, - cachingTweetStore, - replicatingStore, - eventBusEnqueueStore - ) - - def build[E <: TweetStoreEvent](extract: Store => FutureEffect[E]): FutureEffect[E] = - FutureEffect.inParallel[E](stores.map(extract): _*) - - new Store { - override val asyncDeleteAdditionalFields: FutureEffect[Event] = build( - _.asyncDeleteAdditionalFields) - override val retryAsyncDeleteAdditionalFields: FutureEffect[TweetStoreRetryEvent[Event]] = - build(_.retryAsyncDeleteAdditionalFields) - } - } - } -} - -object ReplicatedDeleteAdditionalFields extends TweetStore.ReplicatedModule { - - case class Event(tweetId: TweetId, fieldIds: Seq[FieldId]) - extends ReplicatedTweetStoreEvent("replicated_delete_additional_fields") - - trait Store { - val replicatedDeleteAdditionalFields: FutureEffect[Event] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val replicatedDeleteAdditionalFields: FutureEffect[Event] = - wrap(underlying.replicatedDeleteAdditionalFields) - } - - object Store { - def apply(cachingTweetStore: CachingTweetStore): Store = { - new Store { - override val replicatedDeleteAdditionalFields: FutureEffect[Event] = - cachingTweetStore.replicatedDeleteAdditionalFields - } - } - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/DeleteTweet.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/DeleteTweet.docx new file mode 100644 index 0000000000000000000000000000000000000000..0222510154d89b669991ce34700432518fdf284a GIT binary patch literal 38366 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 LSas$H?NJ4YWLCK2m9UJh*3Wa4423V^~@*AZ(K| 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 AS^xk5 literal 0 HcmV?d00001 diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/DeleteTweet.scala b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/DeleteTweet.scala deleted file mode 100644 index c2b315d27..000000000 --- a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/DeleteTweet.scala +++ /dev/null @@ -1,221 +0,0 @@ -package com.twitter.tweetypie -package store - -import com.twitter.tweetypie.store.TweetEventDataScrubber.scrub -import com.twitter.tweetypie.thriftscala._ - -object DeleteTweet extends TweetStore.SyncModule { - case class Event( - tweet: Tweet, - timestamp: Time, - user: Option[User] = None, - byUserId: Option[UserId] = None, - auditPassthrough: Option[AuditDeleteTweet] = None, - cascadedFromTweetId: Option[TweetId] = None, - isUserErasure: Boolean = false, - isBounceDelete: Boolean = false, - isLastQuoteOfQuoter: Boolean = false, - isAdminDelete: Boolean) - extends SyncTweetStoreEvent("delete_tweet") { - - def toAsyncRequest: AsyncDeleteRequest = - AsyncDeleteRequest( - tweet = tweet, - user = user, - byUserId = byUserId, - timestamp = timestamp.inMillis, - auditPassthrough = auditPassthrough, - cascadedFromTweetId = cascadedFromTweetId, - isUserErasure = isUserErasure, - isBounceDelete = isBounceDelete, - isLastQuoteOfQuoter = Some(isLastQuoteOfQuoter), - isAdminDelete = Some(isAdminDelete) - ) - } - - trait Store { - val deleteTweet: FutureEffect[Event] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val deleteTweet: FutureEffect[Event] = wrap(underlying.deleteTweet) - } - - object Store { - def apply( - cachingTweetStore: CachingTweetStore, - asyncEnqueueStore: AsyncEnqueueStore, - userCountsUpdatingStore: GizmoduckUserCountsUpdatingStore, - tweetCountsUpdatingStore: TweetCountsCacheUpdatingStore, - logLensStore: LogLensStore - ): Store = - new Store { - override val deleteTweet: FutureEffect[Event] = - FutureEffect.inParallel( - cachingTweetStore.ignoreFailures.deleteTweet, - asyncEnqueueStore.deleteTweet, - userCountsUpdatingStore.deleteTweet, - tweetCountsUpdatingStore.deleteTweet, - logLensStore.deleteTweet - ) - } - } -} - -object AsyncDeleteTweet extends TweetStore.AsyncModule { - - object Event { - def fromAsyncRequest(request: AsyncDeleteRequest): TweetStoreEventOrRetry[Event] = - TweetStoreEventOrRetry( - AsyncDeleteTweet.Event( - tweet = request.tweet, - timestamp = Time.fromMilliseconds(request.timestamp), - optUser = request.user, - byUserId = request.byUserId, - auditPassthrough = request.auditPassthrough, - cascadedFromTweetId = request.cascadedFromTweetId, - isUserErasure = request.isUserErasure, - isBounceDelete = request.isBounceDelete, - isLastQuoteOfQuoter = request.isLastQuoteOfQuoter.getOrElse(false), - isAdminDelete = request.isAdminDelete.getOrElse(false) - ), - request.retryAction, - RetryEvent - ) - } - - case class Event( - tweet: Tweet, - timestamp: Time, - optUser: Option[User] = None, - byUserId: Option[UserId] = None, - auditPassthrough: Option[AuditDeleteTweet] = None, - cascadedFromTweetId: Option[TweetId] = None, - isUserErasure: Boolean = false, - isBounceDelete: Boolean, - isLastQuoteOfQuoter: Boolean = false, - isAdminDelete: Boolean) - extends AsyncTweetStoreEvent("async_delete_tweet") - with TweetStoreTweetEvent { - val tweetEventTweetId: TweetId = tweet.id - - def toAsyncRequest(action: Option[AsyncWriteAction] = None): AsyncDeleteRequest = - AsyncDeleteRequest( - tweet = tweet, - user = optUser, - byUserId = byUserId, - timestamp = timestamp.inMillis, - auditPassthrough = auditPassthrough, - cascadedFromTweetId = cascadedFromTweetId, - retryAction = action, - isUserErasure = isUserErasure, - isBounceDelete = isBounceDelete, - isLastQuoteOfQuoter = Some(isLastQuoteOfQuoter), - isAdminDelete = Some(isAdminDelete) - ) - - override def toTweetEventData: Seq[TweetEventData] = - Seq( - TweetEventData.TweetDeleteEvent( - TweetDeleteEvent( - tweet = scrub(tweet), - user = optUser, - isUserErasure = Some(isUserErasure), - audit = auditPassthrough, - byUserId = byUserId, - isAdminDelete = Some(isAdminDelete) - ) - ) - ) - - override def enqueueRetry(service: ThriftTweetService, action: AsyncWriteAction): Future[Unit] = - service.asyncDelete(toAsyncRequest(Some(action))) - } - - case class RetryEvent(action: AsyncWriteAction, event: Event) - extends TweetStoreRetryEvent[Event] { - - override val eventType: AsyncWriteEventType.Delete.type = AsyncWriteEventType.Delete - override val scribedTweetOnFailure: Option[Tweet] = Some(event.tweet) - } - - trait Store { - val asyncDeleteTweet: FutureEffect[Event] - val retryAsyncDeleteTweet: FutureEffect[TweetStoreRetryEvent[Event]] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val asyncDeleteTweet: FutureEffect[Event] = wrap(underlying.asyncDeleteTweet) - override val retryAsyncDeleteTweet: FutureEffect[TweetStoreRetryEvent[Event]] = wrap( - underlying.retryAsyncDeleteTweet) - } - - object Store { - def apply( - manhattanStore: ManhattanTweetStore, - cachingTweetStore: CachingTweetStore, - replicatingStore: ReplicatingTweetStore, - indexingStore: TweetIndexingStore, - eventBusEnqueueStore: TweetEventBusStore, - timelineUpdatingStore: TlsTimelineUpdatingStore, - tweetCountsUpdatingStore: TweetCountsCacheUpdatingStore, - guanoServiceStore: GuanoServiceStore, - mediaServiceStore: MediaServiceStore - ): Store = { - val stores: Seq[Store] = - Seq( - manhattanStore, - cachingTweetStore, - replicatingStore, - indexingStore, - eventBusEnqueueStore, - timelineUpdatingStore, - tweetCountsUpdatingStore, - guanoServiceStore, - mediaServiceStore - ) - - def build[E <: TweetStoreEvent](extract: Store => FutureEffect[E]): FutureEffect[E] = - FutureEffect.inParallel[E](stores.map(extract): _*) - - new Store { - override val asyncDeleteTweet: FutureEffect[Event] = build(_.asyncDeleteTweet) - override val retryAsyncDeleteTweet: FutureEffect[TweetStoreRetryEvent[Event]] = build( - _.retryAsyncDeleteTweet) - } - } - } -} - -object ReplicatedDeleteTweet extends TweetStore.ReplicatedModule { - - case class Event( - tweet: Tweet, - isErasure: Boolean, - isBounceDelete: Boolean, - isLastQuoteOfQuoter: Boolean = false) - extends ReplicatedTweetStoreEvent("replicated_delete_tweet") - - trait Store { - val replicatedDeleteTweet: FutureEffect[Event] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val replicatedDeleteTweet: FutureEffect[Event] = wrap(underlying.replicatedDeleteTweet) - } - - object Store { - def apply( - cachingTweetStore: CachingTweetStore, - tweetCountsUpdatingStore: TweetCountsCacheUpdatingStore - ): Store = { - new Store { - override val replicatedDeleteTweet: FutureEffect[Event] = - FutureEffect.inParallel( - cachingTweetStore.replicatedDeleteTweet, - tweetCountsUpdatingStore.replicatedDeleteTweet.ignoreFailures - ) - } - } - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/FanoutServiceStore.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/FanoutServiceStore.docx new file mode 100644 index 0000000000000000000000000000000000000000..069607bd73c193724e1851dd79092f33930ec587 GIT binary patch literal 37138 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 - fanoutClient.tweetCreateEvent2( - TweetCreateEvent( - tweet = event.tweet, - user = event.user, - sourceTweet = event.sourceTweet, - sourceUser = event.sourceUser, - additionalContext = event.additionalContext, - transientContext = event.transientContext - ) - ) - } - - override val retryAsyncInsertTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncInsertTweet.Event] - ] = TweetStore.retry(Action, asyncInsertTweet) - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/Flush.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/Flush.docx new file mode 100644 index 0000000000000000000000000000000000000000..39e1f1252818224f536bbf2b4e03a8c885868991 GIT binary patch literal 37015 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 F@c>H%EwBIp literal 0 HcmV?d00001 diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/Flush.scala b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/Flush.scala deleted file mode 100644 index 83fbc12af..000000000 --- a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/Flush.scala +++ /dev/null @@ -1,34 +0,0 @@ -package com.twitter.tweetypie -package store - -object Flush extends TweetStore.SyncModule { - - case class Event( - tweetIds: Seq[TweetId], - flushTweets: Boolean = true, - flushCounts: Boolean = true, - logExisting: Boolean = true) - extends SyncTweetStoreEvent("flush") - - trait Store { - val flush: FutureEffect[Event] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val flush: FutureEffect[Event] = wrap(underlying.flush) - } - - object Store { - def apply( - cachingTweetStore: CachingTweetStore, - tweetCountsUpdatingStore: TweetCountsCacheUpdatingStore - ): Store = - new Store { - override val flush: FutureEffect[Event] = - FutureEffect.inParallel( - cachingTweetStore.flush, - tweetCountsUpdatingStore.flush - ) - } - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/GeoSearchRequestIDStore.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/GeoSearchRequestIDStore.docx new file mode 100644 index 0000000000000000000000000000000000000000..3996e06002d5529fdccd7369fb9db21ff41b4ff7 GIT binary patch literal 37639 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 bNLdWEbr|5y3d}*ETqVem2+SU>eIOnHaXn)R literal 0 HcmV?d00001 diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/GizmoduckUserGeotagUpdateStore.scala b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/GizmoduckUserGeotagUpdateStore.scala deleted file mode 100644 index fb6c50c4c..000000000 --- a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/GizmoduckUserGeotagUpdateStore.scala +++ /dev/null @@ -1,68 +0,0 @@ -package com.twitter.tweetypie -package store - -import com.twitter.gizmoduck.thriftscala.LookupContext -import com.twitter.gizmoduck.thriftscala.ModifiedAccount -import com.twitter.gizmoduck.thriftscala.ModifiedUser -import com.twitter.tweetypie.backends.Gizmoduck -import com.twitter.tweetypie.thriftscala._ - -trait GizmoduckUserGeotagUpdateStore - extends TweetStoreBase[GizmoduckUserGeotagUpdateStore] - with AsyncInsertTweet.Store - with ScrubGeoUpdateUserTimestamp.Store { - def wrap(w: TweetStore.Wrap): GizmoduckUserGeotagUpdateStore = - new TweetStoreWrapper(w, this) - with GizmoduckUserGeotagUpdateStore - with AsyncInsertTweet.StoreWrapper - with ScrubGeoUpdateUserTimestamp.StoreWrapper -} - -/** - * A TweetStore implementation that updates a Gizmoduck user's user_has_geotagged_status flag. - * If a tweet is geotagged and the user's flag is not set, call out to Gizmoduck to update it. - */ -object GizmoduckUserGeotagUpdateStore { - val Action: AsyncWriteAction.UserGeotagUpdate.type = AsyncWriteAction.UserGeotagUpdate - - def apply( - modifyAndGet: Gizmoduck.ModifyAndGet, - stats: StatsReceiver - ): GizmoduckUserGeotagUpdateStore = { - // Counts the number of times that the scrubGeo actually cleared the - // hasGeotaggedStatuses bit for a user. - val clearedCounter = stats.counter("has_geotag_cleared") - - // Counts the number of times that asyncInsertTweet actually set the - // hasGeotaggedStatuses bit for a user. - val setCounter = stats.counter("has_geotag_set") - - def setHasGeotaggedStatuses(value: Boolean): FutureEffect[UserId] = { - val modifiedAccount = ModifiedAccount(hasGeotaggedStatuses = Some(value)) - val modifiedUser = ModifiedUser(account = Some(modifiedAccount)) - FutureEffect(userId => modifyAndGet((LookupContext(), userId, modifiedUser)).unit) - } - - new GizmoduckUserGeotagUpdateStore { - override val asyncInsertTweet: FutureEffect[AsyncInsertTweet.Event] = - setHasGeotaggedStatuses(true) - .contramap[AsyncInsertTweet.Event](_.user.id) - .onSuccess(_ => setCounter.incr()) - .onlyIf { e => - // only with geo info and an account that doesn't yet have geotagged statuses flag set - hasGeo(e.tweet) && (e.user.account.exists(!_.hasGeotaggedStatuses)) - } - - override val retryAsyncInsertTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncInsertTweet.Event] - ] = - TweetStore.retry(Action, asyncInsertTweet) - - override val scrubGeoUpdateUserTimestamp: FutureEffect[ScrubGeoUpdateUserTimestamp.Event] = - setHasGeotaggedStatuses(false) - .contramap[ScrubGeoUpdateUserTimestamp.Event](_.userId) - .onlyIf(_.mightHaveGeotaggedStatuses) - .onSuccess(_ => clearedCounter.incr()) - } - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/Guano.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/Guano.docx new file mode 100644 index 0000000000000000000000000000000000000000..6e874e9f5dce0b98d18982e2c9a4761efad4780f GIT binary patch literal 37878 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

    OTyqZn24H#jKkQWxTuIC#>xYoZUJ2IHpv|| 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 literal 0 HcmV?d00001 diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/InsertTweet.scala b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/InsertTweet.scala deleted file mode 100644 index 969cc2b5a..000000000 --- a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/InsertTweet.scala +++ /dev/null @@ -1,284 +0,0 @@ -package com.twitter.tweetypie -package store - -import com.twitter.context.thriftscala.FeatureContext -import com.twitter.tweetypie.core.GeoSearchRequestId -import com.twitter.tweetypie.store.TweetEventDataScrubber.scrub -import com.twitter.tweetypie.thriftscala._ - -object InsertTweet extends TweetStore.SyncModule { - - case class Event( - tweet: Tweet, - user: User, - timestamp: Time, - _internalTweet: Option[CachedTweet] = None, - sourceTweet: Option[Tweet] = None, - sourceUser: Option[User] = None, - quotedTweet: Option[Tweet] = None, - quotedUser: Option[User] = None, - parentUserId: Option[UserId] = None, - initialTweetUpdateRequest: Option[InitialTweetUpdateRequest] = None, - dark: Boolean = false, - hydrateOptions: WritePathHydrationOptions = WritePathHydrationOptions(), - featureContext: Option[FeatureContext] = None, - geoSearchRequestId: Option[GeoSearchRequestId] = None, - additionalContext: Option[collection.Map[TweetCreateContextKey, String]] = None, - transientContext: Option[TransientCreateContext] = None, - quoterHasAlreadyQuotedTweet: Boolean = false, - noteTweetMentionedUserIds: Option[Seq[Long]] = None) - extends SyncTweetStoreEvent("insert_tweet") - with QuotedTweetOps { - def internalTweet: CachedTweet = - _internalTweet.getOrElse( - throw new IllegalStateException( - s"internalTweet should have been set in WritePathHydration, ${this}" - ) - ) - - def toAsyncRequest( - scrubUser: User => User, - scrubSourceTweet: Tweet => Tweet, - scrubSourceUser: User => User - ): AsyncInsertRequest = - AsyncInsertRequest( - tweet = tweet, - cachedTweet = internalTweet, - user = scrubUser(user), - sourceTweet = sourceTweet.map(scrubSourceTweet), - sourceUser = sourceUser.map(scrubSourceUser), - quotedTweet = quotedTweet.map(scrubSourceTweet), - quotedUser = quotedUser.map(scrubSourceUser), - parentUserId = parentUserId, - featureContext = featureContext, - timestamp = timestamp.inMillis, - geoSearchRequestId = geoSearchRequestId.map(_.requestID), - additionalContext = additionalContext, - transientContext = transientContext, - quoterHasAlreadyQuotedTweet = Some(quoterHasAlreadyQuotedTweet), - initialTweetUpdateRequest = initialTweetUpdateRequest, - noteTweetMentionedUserIds = noteTweetMentionedUserIds - ) - } - - trait Store { - val insertTweet: FutureEffect[Event] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val insertTweet: FutureEffect[Event] = wrap(underlying.insertTweet) - } - - object Store { - def apply( - logLensStore: LogLensStore, - manhattanStore: ManhattanTweetStore, - tweetStatsStore: TweetStatsStore, - cachingTweetStore: CachingTweetStore, - limiterStore: LimiterStore, - asyncEnqueueStore: AsyncEnqueueStore, - userCountsUpdatingStore: GizmoduckUserCountsUpdatingStore, - tweetCountsUpdatingStore: TweetCountsCacheUpdatingStore - ): Store = - new Store { - override val insertTweet: FutureEffect[Event] = - FutureEffect.sequentially( - logLensStore.insertTweet, - manhattanStore.insertTweet, - tweetStatsStore.insertTweet, - FutureEffect.inParallel( - // allow write-through caching to fail without failing entire insert - cachingTweetStore.ignoreFailures.insertTweet, - limiterStore.ignoreFailures.insertTweet, - asyncEnqueueStore.insertTweet, - userCountsUpdatingStore.insertTweet, - tweetCountsUpdatingStore.insertTweet - ) - ) - } - } -} - -object AsyncInsertTweet extends TweetStore.AsyncModule { - - private val log = Logger(getClass) - - object Event { - def fromAsyncRequest(request: AsyncInsertRequest): TweetStoreEventOrRetry[Event] = - TweetStoreEventOrRetry( - Event( - tweet = request.tweet, - cachedTweet = request.cachedTweet, - user = request.user, - optUser = Some(request.user), - timestamp = Time.fromMilliseconds(request.timestamp), - sourceTweet = request.sourceTweet, - sourceUser = request.sourceUser, - parentUserId = request.parentUserId, - featureContext = request.featureContext, - quotedTweet = request.quotedTweet, - quotedUser = request.quotedUser, - geoSearchRequestId = request.geoSearchRequestId, - additionalContext = request.additionalContext, - transientContext = request.transientContext, - quoterHasAlreadyQuotedTweet = request.quoterHasAlreadyQuotedTweet.getOrElse(false), - initialTweetUpdateRequest = request.initialTweetUpdateRequest, - noteTweetMentionedUserIds = request.noteTweetMentionedUserIds - ), - request.retryAction, - RetryEvent - ) - } - - case class Event( - tweet: Tweet, - cachedTweet: CachedTweet, - user: User, - optUser: Option[User], - timestamp: Time, - sourceTweet: Option[Tweet] = None, - sourceUser: Option[User] = None, - parentUserId: Option[UserId] = None, - featureContext: Option[FeatureContext] = None, - quotedTweet: Option[Tweet] = None, - quotedUser: Option[User] = None, - geoSearchRequestId: Option[String] = None, - additionalContext: Option[collection.Map[TweetCreateContextKey, String]] = None, - transientContext: Option[TransientCreateContext] = None, - quoterHasAlreadyQuotedTweet: Boolean = false, - initialTweetUpdateRequest: Option[InitialTweetUpdateRequest] = None, - noteTweetMentionedUserIds: Option[Seq[Long]] = None) - extends AsyncTweetStoreEvent("async_insert_tweet") - with QuotedTweetOps - with TweetStoreTweetEvent { - - def toAsyncRequest(action: Option[AsyncWriteAction] = None): AsyncInsertRequest = - AsyncInsertRequest( - tweet = tweet, - cachedTweet = cachedTweet, - user = user, - sourceTweet = sourceTweet, - sourceUser = sourceUser, - parentUserId = parentUserId, - retryAction = action, - featureContext = featureContext, - timestamp = timestamp.inMillis, - quotedTweet = quotedTweet, - quotedUser = quotedUser, - geoSearchRequestId = geoSearchRequestId, - additionalContext = additionalContext, - transientContext = transientContext, - quoterHasAlreadyQuotedTweet = Some(quoterHasAlreadyQuotedTweet), - initialTweetUpdateRequest = initialTweetUpdateRequest, - noteTweetMentionedUserIds = noteTweetMentionedUserIds - ) - - override def toTweetEventData: Seq[TweetEventData] = - Seq( - TweetEventData.TweetCreateEvent( - TweetCreateEvent( - tweet = scrub(tweet), - user = user, - sourceUser = sourceUser, - sourceTweet = sourceTweet.map(scrub), - retweetParentUserId = parentUserId, - quotedTweet = publicQuotedTweet.map(scrub), - quotedUser = publicQuotedUser, - additionalContext = additionalContext, - transientContext = transientContext, - quoterHasAlreadyQuotedTweet = Some(quoterHasAlreadyQuotedTweet) - ) - ) - ) - - override def enqueueRetry(service: ThriftTweetService, action: AsyncWriteAction): Future[Unit] = - service.asyncInsert(toAsyncRequest(Some(action))) - } - - case class RetryEvent(action: AsyncWriteAction, event: Event) - extends TweetStoreRetryEvent[Event] { - - override val eventType: AsyncWriteEventType.Insert.type = AsyncWriteEventType.Insert - override val scribedTweetOnFailure: Option[Tweet] = Some(event.tweet) - } - - trait Store { - val asyncInsertTweet: FutureEffect[Event] - val retryAsyncInsertTweet: FutureEffect[TweetStoreRetryEvent[Event]] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val asyncInsertTweet: FutureEffect[Event] = wrap(underlying.asyncInsertTweet) - override val retryAsyncInsertTweet: FutureEffect[TweetStoreRetryEvent[Event]] = wrap( - underlying.retryAsyncInsertTweet) - } - - object Store { - def apply( - replicatingStore: ReplicatingTweetStore, - indexingStore: TweetIndexingStore, - tweetCountsUpdatingStore: TweetCountsCacheUpdatingStore, - timelineUpdatingStore: TlsTimelineUpdatingStore, - eventBusEnqueueStore: TweetEventBusStore, - fanoutServiceStore: FanoutServiceStore, - scribeMediaTagStore: ScribeMediaTagStore, - userGeotagUpdateStore: GizmoduckUserGeotagUpdateStore, - geoSearchRequestIDStore: GeoSearchRequestIDStore - ): Store = { - val stores: Seq[Store] = - Seq( - replicatingStore, - indexingStore, - timelineUpdatingStore, - eventBusEnqueueStore, - fanoutServiceStore, - userGeotagUpdateStore, - tweetCountsUpdatingStore, - scribeMediaTagStore, - geoSearchRequestIDStore - ) - - def build[E <: TweetStoreEvent](extract: Store => FutureEffect[E]): FutureEffect[E] = - FutureEffect.inParallel[E](stores.map(extract): _*) - - new Store { - override val asyncInsertTweet: FutureEffect[Event] = build(_.asyncInsertTweet) - override val retryAsyncInsertTweet: FutureEffect[TweetStoreRetryEvent[Event]] = build( - _.retryAsyncInsertTweet) - } - } - } -} - -object ReplicatedInsertTweet extends TweetStore.ReplicatedModule { - - case class Event( - tweet: Tweet, - cachedTweet: CachedTweet, - quoterHasAlreadyQuotedTweet: Boolean = false, - initialTweetUpdateRequest: Option[InitialTweetUpdateRequest] = None) - extends ReplicatedTweetStoreEvent("replicated_insert_tweet") - - trait Store { - val replicatedInsertTweet: FutureEffect[Event] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val replicatedInsertTweet: FutureEffect[Event] = wrap(underlying.replicatedInsertTweet) - } - - object Store { - def apply( - cachingTweetStore: CachingTweetStore, - tweetCountsUpdatingStore: TweetCountsCacheUpdatingStore - ): Store = { - new Store { - override val replicatedInsertTweet: FutureEffect[Event] = - FutureEffect.inParallel( - cachingTweetStore.replicatedInsertTweet, - tweetCountsUpdatingStore.replicatedInsertTweet.ignoreFailures - ) - } - } - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/LimiterStore.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/LimiterStore.docx new file mode 100644 index 0000000000000000000000000000000000000000..7149e0a938c73c483f2294bf97b764ec787314b7 GIT binary patch literal 37223 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 - Future.when(!event.dark) { - val userId = event.user.id - val contributorUserId: Option[UserId] = event.tweet.contributor.map(_.userId) - - val mediaTags = getMediaTagMap(event.tweet) - val mediaTagCount = countDistinctUserMediaTags(mediaTags) - Future - .join( - incrementCreateSuccess(userId, contributorUserId), - incrementMediaTags(userId, contributorUserId, mediaTagCount) - ) - .unit - } - } - } - - def countDistinctUserMediaTags(mediaTags: Map[MediaId, Seq[MediaTag]]): Int = - mediaTags.values.flatten.toSeq - .collect { case MediaTag(MediaTagType.User, Some(userId), _, _) => userId } - .distinct - .size -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/LogLensStore.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/LogLensStore.docx new file mode 100644 index 0000000000000000000000000000000000000000..ce1570e0c9d5ed6cee2ad96eef9f882bcef9d3df GIT binary patch literal 38288 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 getOpt(clientIdHelper.effectiveClientId), - "service_id" -> getOpt(clientIdHelper.effectiveServiceIdentifier), - "trace_id" -> Trace.id.traceId.toString, - "audit_ip" -> getOpt(viewer.flatMap(_.auditIp)), - "application_id" -> getOpt(viewer.flatMap(_.clientApplicationId).map(_.toString)), - "user_agent" -> getOpt(viewer.flatMap(_.userAgent)), - "authenticated_user_id" -> getOpt(viewer.flatMap(_.authenticatedUserId).map(_.toString)) - ) - } - - private def getOpt[A](opt: Option[A]): Any = - opt.getOrElse(null) - - override val insertTweet: FutureEffect[InsertTweet.Event] = - FutureEffect[InsertTweet.Event] { event => - logMessage( - tweetCreationsLogger, - "type" -> "create_tweet", - "tweet_id" -> event.tweet.id.toString, - "user_id" -> event.user.id.toString, - "source_tweet_id" -> getOpt(event.sourceTweet.map(_.id.toString)), - "source_user_id" -> getOpt(event.sourceUser.map(_.id.toString)), - "directed_at_user_id" -> getOpt(getDirectedAtUser(event.tweet).map(_.userId.toString)), - "reply_to_tweet_id" -> getOpt( - getReply(event.tweet).flatMap(_.inReplyToStatusId).map(_.toString)), - "reply_to_user_id" -> getOpt(getReply(event.tweet).map(_.inReplyToUserId.toString)), - "media_ids" -> ownMedia(event.tweet).map(_.mediaId.toString) - ) - } - - override val deleteTweet: FutureEffect[DeleteTweet.Event] = - FutureEffect[DeleteTweet.Event] { event => - logMessage( - tweetDeletionsLogger, - "type" -> "delete_tweet", - "tweet_id" -> event.tweet.id.toString, - "user_id" -> getOpt(event.user.map(_.id.toString)), - "source_tweet_id" -> getOpt(getShare(event.tweet).map(_.sourceStatusId.toString)), - "by_user_id" -> getOpt(event.byUserId.map(_.toString)), - "passthrough_audit_ip" -> getOpt(event.auditPassthrough.flatMap(_.host)), - "media_ids" -> ownMedia(event.tweet).map(_.mediaId.toString), - "cascaded_from_tweet_id" -> getOpt(event.cascadedFromTweetId.map(_.toString)) - ) - } - - override val undeleteTweet: FutureEffect[UndeleteTweet.Event] = - FutureEffect[UndeleteTweet.Event] { event => - logMessage( - tweetUndeletionsLogger, - "type" -> "undelete_tweet", - "tweet_id" -> event.tweet.id.toString, - "user_id" -> event.user.id.toString, - "source_tweet_id" -> getOpt(getShare(event.tweet).map(_.sourceStatusId.toString)), - "media_ids" -> ownMedia(event.tweet).map(_.mediaId.toString) - ) - } - - override val setAdditionalFields: FutureEffect[SetAdditionalFields.Event] = - FutureEffect[SetAdditionalFields.Event] { event => - logMessage( - tweetUpdatesLogger, - "type" -> "set_additional_fields", - "tweet_id" -> event.additionalFields.id.toString, - "field_ids" -> AdditionalFields.nonEmptyAdditionalFieldIds(event.additionalFields) - ) - } - - override val deleteAdditionalFields: FutureEffect[DeleteAdditionalFields.Event] = - FutureEffect[DeleteAdditionalFields.Event] { event => - logMessage( - tweetUpdatesLogger, - "type" -> "delete_additional_fields", - "tweet_id" -> event.tweetId.toString, - "field_ids" -> event.fieldIds - ) - } - - override val scrubGeo: FutureEffect[ScrubGeo.Event] = - FutureEffect[ScrubGeo.Event] { event => - Future.join( - event.tweetIds.map { tweetId => - logMessage( - tweetUpdatesLogger, - "type" -> "scrub_geo", - "tweet_id" -> tweetId.toString, - "user_id" -> event.userId.toString - ) - } - ) - } - - override val takedown: FutureEffect[Takedown.Event] = - FutureEffect[Takedown.Event] { event => - logMessage( - tweetUpdatesLogger, - "type" -> "takedown", - "tweet_id" -> event.tweet.id.toString, - "user_id" -> getUserId(event.tweet).toString, - "reasons" -> event.takedownReasons - ) - } - - override val updatePossiblySensitiveTweet: FutureEffect[UpdatePossiblySensitiveTweet.Event] = - FutureEffect[UpdatePossiblySensitiveTweet.Event] { event => - logMessage( - tweetUpdatesLogger, - "type" -> "update_possibly_sensitive_tweet", - "tweet_id" -> event.tweet.id.toString, - "nsfw_admin" -> TweetLenses.nsfwAdmin(event.tweet), - "nsfw_user" -> TweetLenses.nsfwUser(event.tweet) - ) - } - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ManhattanTweetStore.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ManhattanTweetStore.docx new file mode 100644 index 0000000000000000000000000000000000000000..e8109162c3182aa56772bf12d2153ab6f9a61722 GIT binary patch literal 39061 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 PR563BfZ@TL@qO!m1{WPs literal 0 HcmV?d00001 diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ManhattanTweetStore.scala b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ManhattanTweetStore.scala deleted file mode 100644 index 6eaa65eee..000000000 --- a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ManhattanTweetStore.scala +++ /dev/null @@ -1,231 +0,0 @@ -/** Copyright 2010 Twitter, Inc. */ -package com.twitter.tweetypie -package store - -import com.twitter.stitch.Stitch -import com.twitter.tweetypie.additionalfields.AdditionalFields -import com.twitter.tweetypie.storage.Field -import com.twitter.tweetypie.storage.Response.TweetResponse -import com.twitter.tweetypie.storage.Response.TweetResponseCode -import com.twitter.tweetypie.storage.TweetStorageClient -import com.twitter.tweetypie.storage.TweetStorageClient.GetTweet -import com.twitter.tweetypie.storage.TweetStorageException -import com.twitter.tweetypie.thriftscala._ -import com.twitter.util.Future - -case class UpdateTweetNotFoundException(tweetId: TweetId) extends Exception - -trait ManhattanTweetStore - extends TweetStoreBase[ManhattanTweetStore] - with InsertTweet.Store - with AsyncDeleteTweet.Store - with ScrubGeo.Store - with SetAdditionalFields.Store - with DeleteAdditionalFields.Store - with AsyncDeleteAdditionalFields.Store - with Takedown.Store - with UpdatePossiblySensitiveTweet.Store - with AsyncUpdatePossiblySensitiveTweet.Store { - def wrap(w: TweetStore.Wrap): ManhattanTweetStore = - new TweetStoreWrapper(w, this) - with ManhattanTweetStore - with InsertTweet.StoreWrapper - with AsyncDeleteTweet.StoreWrapper - with ScrubGeo.StoreWrapper - with SetAdditionalFields.StoreWrapper - with DeleteAdditionalFields.StoreWrapper - with AsyncDeleteAdditionalFields.StoreWrapper - with Takedown.StoreWrapper - with UpdatePossiblySensitiveTweet.StoreWrapper - with AsyncUpdatePossiblySensitiveTweet.StoreWrapper -} - -/** - * A TweetStore implementation that writes to Manhattan. - */ -object ManhattanTweetStore { - val Action: AsyncWriteAction.TbirdUpdate.type = AsyncWriteAction.TbirdUpdate - - private val log = Logger(getClass) - private val successResponses = Set(TweetResponseCode.Success, TweetResponseCode.Deleted) - - case class AnnotationFailure(message: String) extends Exception(message) - - def apply(tweetStorageClient: TweetStorageClient): ManhattanTweetStore = { - - def handleStorageResponses( - responsesStitch: Stitch[Seq[TweetResponse]], - action: String - ): Future[Unit] = - Stitch - .run(responsesStitch) - .onFailure { - case ex: TweetStorageException => log.warn("failed on: " + action, ex) - case _ => - } - .flatMap { responses => - Future.when(responses.exists(resp => !successResponses(resp.overallResponse))) { - Future.exception(AnnotationFailure(s"$action gets failure response $responses")) - } - } - - def updateTweetMediaIds(mutation: Mutation[MediaEntity]): Tweet => Tweet = - tweet => tweet.copy(media = tweet.media.map(entities => entities.map(mutation.endo))) - - /** - * Does a get and set, and only sets fields that are allowed to be - * changed. This also prevents incoming tweets containing incomplete - * fields from being saved to Manhattan. - */ - def updateOneTweetByIdAction(tweetId: TweetId, copyFields: Tweet => Tweet): Future[Unit] = { - Stitch.run { - tweetStorageClient.getTweet(tweetId).flatMap { - case GetTweet.Response.Found(tweet) => - val updatedTweet = copyFields(tweet) - - if (updatedTweet != tweet) { - tweetStorageClient.addTweet(updatedTweet) - } else { - Stitch.Unit - } - case _ => Stitch.exception(UpdateTweetNotFoundException(tweetId)) - } - } - } - - // This should NOT be used in parallel with other write operations. - // A race condition can occur after changes to the storage library to - // return all additional fields. The resulting behavior can cause - // fields that were modified by other writes to revert to their old value. - def updateOneTweetAction(update: Tweet, copyFields: Tweet => Tweet => Tweet): Future[Unit] = - updateOneTweetByIdAction(update.id, copyFields(update)) - - def tweetStoreUpdateTweet(tweet: Tweet): Future[Unit] = { - val setFields = AdditionalFields.nonEmptyAdditionalFieldIds(tweet).map(Field.additionalField) - handleStorageResponses( - tweetStorageClient.updateTweet(tweet, setFields).map(Seq(_)), - s"updateTweet($tweet, $setFields)" - ) - } - - // This is an edit so update the initial Tweet's control - def updateInitialTweet(event: InsertTweet.Event): Future[Unit] = { - event.initialTweetUpdateRequest match { - case Some(request) => - updateOneTweetByIdAction( - request.initialTweetId, - tweet => InitialTweetUpdate.updateTweet(tweet, request) - ) - case None => Future.Unit - } - } - - new ManhattanTweetStore { - override val insertTweet: FutureEffect[InsertTweet.Event] = - FutureEffect[InsertTweet.Event] { event => - Stitch - .run( - tweetStorageClient.addTweet(event.internalTweet.tweet) - ).flatMap(_ => updateInitialTweet(event)) - } - - override val asyncDeleteTweet: FutureEffect[AsyncDeleteTweet.Event] = - FutureEffect[AsyncDeleteTweet.Event] { event => - if (event.isBounceDelete) { - Stitch.run(tweetStorageClient.bounceDelete(event.tweet.id)) - } else { - Stitch.run(tweetStorageClient.softDelete(event.tweet.id)) - } - } - - override val retryAsyncDeleteTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncDeleteTweet.Event] - ] = - TweetStore.retry(Action, asyncDeleteTweet) - - override val scrubGeo: FutureEffect[ScrubGeo.Event] = - FutureEffect[ScrubGeo.Event] { event => - Stitch.run(tweetStorageClient.scrub(event.tweetIds, Seq(Field.Geo))) - } - - override val setAdditionalFields: FutureEffect[SetAdditionalFields.Event] = - FutureEffect[SetAdditionalFields.Event] { event => - tweetStoreUpdateTweet(event.additionalFields) - } - - override val deleteAdditionalFields: FutureEffect[DeleteAdditionalFields.Event] = - FutureEffect[DeleteAdditionalFields.Event] { event => - handleStorageResponses( - tweetStorageClient.deleteAdditionalFields( - Seq(event.tweetId), - event.fieldIds.map(Field.additionalField) - ), - s"deleteAdditionalFields(${event.tweetId}, ${event.fieldIds}})" - ) - } - - override val asyncDeleteAdditionalFields: FutureEffect[AsyncDeleteAdditionalFields.Event] = - FutureEffect[AsyncDeleteAdditionalFields.Event] { event => - handleStorageResponses( - tweetStorageClient.deleteAdditionalFields( - Seq(event.tweetId), - event.fieldIds.map(Field.additionalField) - ), - s"deleteAdditionalFields(Seq(${event.tweetId}), ${event.fieldIds}})" - ) - } - - override val retryAsyncDeleteAdditionalFields: FutureEffect[ - TweetStoreRetryEvent[AsyncDeleteAdditionalFields.Event] - ] = - TweetStore.retry(Action, asyncDeleteAdditionalFields) - - override val takedown: FutureEffect[Takedown.Event] = - FutureEffect[Takedown.Event] { event => - val (fieldsToUpdate, fieldsToDelete) = - Seq( - Field.TweetypieOnlyTakedownCountryCodes, - Field.TweetypieOnlyTakedownReasons - ).filter(_ => event.updateCodesAndReasons) - .partition(f => event.tweet.getFieldBlob(f.id).isDefined) - - val allFieldsToUpdate = Seq(Field.HasTakedown) ++ fieldsToUpdate - - Future - .join( - handleStorageResponses( - tweetStorageClient - .updateTweet(event.tweet, allFieldsToUpdate) - .map(Seq(_)), - s"updateTweet(${event.tweet}, $allFieldsToUpdate)" - ), - Future.when(fieldsToDelete.nonEmpty) { - handleStorageResponses( - tweetStorageClient - .deleteAdditionalFields(Seq(event.tweet.id), fieldsToDelete), - s"deleteAdditionalFields(Seq(${event.tweet.id}), $fieldsToDelete)" - ) - } - ).unit - } - - override val updatePossiblySensitiveTweet: FutureEffect[UpdatePossiblySensitiveTweet.Event] = - FutureEffect[UpdatePossiblySensitiveTweet.Event] { event => - updateOneTweetAction(event.tweet, TweetUpdate.copyNsfwFieldsForUpdate) - } - - override val asyncUpdatePossiblySensitiveTweet: FutureEffect[ - AsyncUpdatePossiblySensitiveTweet.Event - ] = - FutureEffect[AsyncUpdatePossiblySensitiveTweet.Event] { event => - updateOneTweetAction(event.tweet, TweetUpdate.copyNsfwFieldsForUpdate) - } - - override val retryAsyncUpdatePossiblySensitiveTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncUpdatePossiblySensitiveTweet.Event] - ] = - TweetStore.retry(Action, asyncUpdatePossiblySensitiveTweet) - - } - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/MediaIndexHelper.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/MediaIndexHelper.docx new file mode 100644 index 0000000000000000000000000000000000000000..ab704de37d3271c351b7ecd9e1f377833af28057 GIT binary patch literal 37146 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 literal 0 HcmV?d00001 diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/MediaIndexHelper.scala b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/MediaIndexHelper.scala deleted file mode 100644 index 4efe22706..000000000 --- a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/MediaIndexHelper.scala +++ /dev/null @@ -1,34 +0,0 @@ -package com.twitter.tweetypie -package store - -import com.twitter.tweetypie.thriftscala._ -import scala.util.matching.Regex - -object MediaIndexHelper { - - /** - * Which tweets should we treat as "media" tweets? - * - * Any tweet that is not a retweet and any of: - * - Is explicitly marked as a media tweet. - * - Has a media entity. - * - Includes a partner media URL. - */ - def apply(partnerMediaRegexes: Seq[Regex]): Tweet => Boolean = { - val isPartnerUrl = partnerUrlMatcher(partnerMediaRegexes) - - tweet => - getShare(tweet).isEmpty && - (hasMediaFlagSet(tweet) || - getMedia(tweet).nonEmpty || - getUrls(tweet).exists(isPartnerUrl)) - } - - def partnerUrlMatcher(partnerMediaRegexes: Seq[Regex]): UrlEntity => Boolean = - _.expanded.exists { expandedUrl => - partnerMediaRegexes.exists(_.findFirstIn(expandedUrl).isDefined) - } - - def hasMediaFlagSet(tweet: Tweet): Boolean = - tweet.coreData.flatMap(_.hasMedia).getOrElse(false) -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/MediaServiceStore.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/MediaServiceStore.docx new file mode 100644 index 0000000000000000000000000000000000000000..e871614af2aa91f942b131e589255a78a42d2778 GIT binary patch literal 37323 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 (MediaKeyUtil.get(m), t.id) - } - - def apply( - deleteMedia: FutureArrow[DeleteMediaRequest, Unit], - undeleteMedia: FutureArrow[UndeleteMediaRequest, Unit] - ): MediaServiceStore = - new MediaServiceStore { - override val asyncDeleteTweet: FutureEffect[AsyncDeleteTweet.Event] = - FutureEffect[AsyncDeleteTweet.Event] { e => - Future.when(!isRetweet(e.tweet)) { - val ownMediaKeys: Seq[(MediaKey, TweetId)] = ownMedia(e.tweet) - val deleteMediaRequests = ownMediaKeys.map(DeleteMediaRequest.tupled) - Future.collect(deleteMediaRequests.map(deleteMedia)) - } - } - - override val retryAsyncDeleteTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncDeleteTweet.Event] - ] = - TweetStore.retry(Action, asyncDeleteTweet) - - override val asyncUndeleteTweet: FutureEffect[AsyncUndeleteTweet.Event] = - FutureEffect[AsyncUndeleteTweet.Event] { e => - Future.when(!isRetweet(e.tweet)) { - val ownMediaKeys: Seq[(MediaKey, TweetId)] = ownMedia(e.tweet) - val unDeleteMediaRequests = ownMediaKeys.map(UndeleteMediaRequest.tupled) - Future.collect(unDeleteMediaRequests.map(undeleteMedia)) - } - } - - override val retryAsyncUndeleteTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncUndeleteTweet.Event] - ] = - TweetStore.retry(Action, asyncUndeleteTweet) - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/QuotedTweetDelete.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/QuotedTweetDelete.docx new file mode 100644 index 0000000000000000000000000000000000000000..a42ab1800bc75af3e79d2adc21ad777a2dcb56c4 GIT binary patch literal 37122 zcmagEWmsIvwm*!!dvJGmcL)S`w_rgV2@Z`1cMI}VdZh}8d zV@5dyhB+=H_0ETQwN9wZyNOy)Lh{7GAVVvk9J1Iue?5=+)PiSUDvnHcQD&EDZV;xX zCBysOG&eZwZcRVG5k~Ntc#dvBlJ)~wG)-lUCI-n+Fr2E;7<6cL{tQoU2Ze*W>d^?z zF2kq&F=f}6312tz2MIr^td}KbYRycWbc8m4-mhWC=Ni&qj2q$yoNHYt8S0%ZH5}_! zdkazAhY$g1-}mf#nBB&;IF4ZIN+Yk;bT=@pgZEAVHbK-ivp*oSwBGCma*kIu89sIB z>O`yiSRDn*;CtRlpky5P1klmclNlt!q_KCzRC)*9_21pm6~<5sKP-hB-p$P_*iC5o zji7$v(h#XtZ5NA49_8TUd2>9HAosb+3DR5UlT`HSkTepa^%ouRy1zhqIxvA=!MjKD zuey_Y?kw7OSq;cDm1j(*(|buGDnRd!GkNlQL@X|UCn?5xt!ZN=Z;@0{S)LXId>6 zAEsFV3_x1Gi7ULgvUShaE&N`j>9dTnpXgDn1G-wOq8S@5Zvl#|Bj&Y)?BR5DS!`Uu6ai9G&L7`s|)vQ3b`3xvQ=%56d0Zf&h01nP9rT{1N-#2+?{J3I2 zE1J}ux73`1X4n-PoRlm*_)+)=87%*$)>}?41>5l~?#a#F0z2It23O)uf#E9$;dP$I zW=PZE_+XNdxHEsVa6}#K*VT_WYfo8H^n8^`L49XEkF%H5mi(q;JrOGSNC-7qkh1A) z2J#D`{1gLqT%2=XrpPi|REu(dh^wJ1EPv4yji+s+KqlSCqWkIZPaKv&5nqp9+FV2o zmVsW93m%p{U?M+d2sOJ@4j<^WZ42d!U!|+G^J7Dg4S%%>dG&Km+oS0vn=g<^7dhzH z`$1#XgA8-p8W?uM6W0f5Bvfz?QI%9xw-!zIt?(0PC&$fcS4e|$q~;JLl;n50Gbbe# zq5-*ZYkIC5fPuo=;kmh;H6~{&KatO7EgUtNFHPgTG$|&)jP+cUVK*Vm5ctf*yXy-p zw)8|BzTOwq*=edBwJF-MEq?>hB=~1tu2)xa zk3n^@g#rUZ`+HqX931{Ai~6|zDl1yY69bgN=Wr`nF%`V{fCaG`iFN#%_>AVcG4c;_ zP_1k`K%a+DY`!lnH(>(x0#6NNPm5v}unmfzG_c1X@w2?2vC-Ko~$p~RxDfudd%b~YD2x+~RoFt8PT zA3y`0Xd{HD{N7b}hve=P{tFuOg&o`B)`N=>;*lE+FR-N^o;c+M-u7iQa-7(|#db3# zNqACglTsig16RY#Rw*uJU{zM6Q0aYVM>@+h3-LL8`ok5$+x*Qhl7HS9!X`R7D4?5y z_}!mBST}%^84KuF>tY95oPOUK`#LIsRcu|gh^@gcky*c$WLbis&!O61_y&lYB@mGQHrznnBjJc-Hfj1ua;)uA2@pRH*!d> z;m)-wBd7B=+M97hXoT{R_u(g@LQ0yU*1h;%PaBXh(Q)}4B+&eiYZ4vzCZpnV&yL+u z_~u_S20wg?O9L`G85Ph)^s)qhcs5~$(^sNL4_x?k8hHslZ-|@{aq`Uxzq+lTl(&~{ z*Cz5QG6*U(gY_?i1SrsMPP2k#DO3oI) z$LYByT;}sHwunawJ`X^;qCoMM5*F;?BX$)1aTX9<+JLPa;qQiTncTk$f(U*a&-0- zpkdlYgl`s|Psbyvq5waU;GBM>$G?L_&;zSaMEd2lo2Xvc76@(^w1WQ4mlHl&E_dRP zXPL)&P&MB)ZRT}SjSXuS6^-Chj|_20SUf?J)p01mHG^K?+|m5c=hqkBgHM zv!#6_al6#@mvFj<)WG{ zG;4(83t>82UK6ghz?Uk9k9Rn218+|ZnZtpt~U~FAwRxMJkOnY*}7B$d;_#yJ`{K; zpF^oP4PdNw7vD3P>%7qH34fpH>SPtI+Xr9Dzi<6keQy8`&AV%ITpOUKc*|H3=JJBK zt9&{L9fP_u-TDi-=PC~z-a27tBfPyIH&2m1GosTk=ad7+bda|261=#7-ma9?8bb(F zVddx7gQqFkD|kPg-#hZsM{SuP;@A|~(d*z&xRm7lOGKo%%ZSNcqLPS$ax4axg%B@& zQh`IVOnPsUH?VYyG(ch<#Klew8 zVoHImcwf$55&D7?u!`&>-u=p>Zl{;7F7ytTUWvbz*x%G!H)E98@!!4U_Q|HPo1MH> zTi6i5V`%sgz#9pHiZvUoY>pvliJEfUQ!k?-W>ZND&tKEa-MJ(vt}t^_oAjyT@I#`) zGeT`E)j%BrWn-?rXe)MARKX8vwfHY}Jh~7%k~8sNO+vD>K6|#4UrbiDTy|F2Y>BL= zIrnZU)@ugzp+nU!%^Mp~a8ViWoE?6 z=eRev8r!v4Fa?uz>y}87U@xr6P}_#QEar$1Qem7~uYkfVFIN+%W|Je%` zLS$DsvY2p(k4W1_WnAn1u~6UnR}6nr8ao{4l@iSZ<25MfJ4fj*biIFcAnJ9^ds)pu=viLfIzAPMNx_zz81a-Zaw?MfiX$xV^!`G5dpIQU-iT%O z2_(vG(|6+pb$s~baovaa+lz?!q|k}h259SO=fyAWOAHjI^riM4d_%l#pS?Ieb{pTd zu7AM$fDG%t9Aw&=eG;Aibe?o`>7GW!GkzTbbYk*+;q#=pN+{o@bMff%SXmR16p!%@ zW_j&e>uPVV7*85x^R;VV^XbypJL`J6k$ALFO(E`g++1ft-2{G>BJq~VIw5--sD9}F z*jqh5Pn}%<{8={yh@M7;|G6E$^LzupJw*iQ5ux7hEpUQKRvi|5U4sf;7;=iiKOIt! z8d6;)@={~uqa)(O8_d$t9%CMi>-+M0*l*zr_j0}d@;Ocaxdyo0u_-82>2`J+lEQPE z#iMlm=3{sU6spR$Uwp$H=t_=kS?NAeJY0nrOl=U!V$;ay^&_qbvfvfwv`vKXc9Cf<{l}(kTPlM!R zh46r+Pbi&t=q%91wd;EL#A=WR!BG7nEMQh0n72idlug?rxle;YtPE=EWe`!R0f4?8 zFun{}zk4&dpO9IC6}DGgbuov)r!Q)wJlTBd5M&e~Nv@uDn_1J1Rb}rBX&z2kszjN$ zzv=&3v*}ZXWvXNS@i}GjaNp6n0;izlF$Vp-^=Z-MN}bMnAl33d@U6q3YGL~6WcJbF z&hcef_V!BToe(t>g;Ogq+BZsER*c@r7Y%0?Da@FobKS(IyxtVuqr zlf`_HQIRRZP)+104`STMVjz=aTKoVPuh`aI;k!x5a<4hoF^siP(ZQCU53XW+k=^`K zivLwNobmN(-KtZd>TIB3IlP9AV^elX+ioWTt$-Wy1Dt9)0u@y6p`;_(Q9^zYW226$ zcFEh+%G4)3U*D4OCW4q8w`2lNP&_$5wkKx_weLC){aPoPeme|17_Qv$%n{u*D^ zh)=}~#o~cD(kHtC@h|KX&UjELDQFzsAECM+v|teKKSKYcf-0psvnF%@FM=}_3Q!Be zA1abNpv`jshs6It#d=;=;RK|BM*UrwD*;H4DjLWuR>K|>DI(KD!8_w`Au`D5*Vn;Ml%AJZ}5S7%9Z8m;8J-xc+qG(rREo=q2{tzc}HV`)SGj zO7DJXHoJP;z53_8u+riF!D!z0eblCiLGz6yNwobA^Rj4?e)Jhv9RAyr1Cj)j$FwmT z<60?E#^&G}>Fp`dbt%IQd2qFh*>^Zw#_rfD{;>7eKsca!$G<8Dt<=_sRGyU|&1!qhBF|l&2pf8pfq5E1G%Rjb?fJ&|?H127cs5^Ni32BA_u&-Za{!gU z&QPZ?ltztV&g(GGH4olUBF-i-f-8MAt9;C0Shh6S*O#Ek7>B3sZyk27>R@O^(sDxA zA3bP`kNWwcDYweZr9TNPb6}f4Ebu2~v|qxSOnQ^B>G2Uq`jzkMc@Fwwp!8Q_&Z94| ze2?zRLvoD6C{vr#a9g>Kep@`uivWH3ZpZd*9txl5BFaV1Gbz(5+$grrPix35PEqIN zmS`^rojeh()1& zTMpC58=j5Ggip7qVC=y&L z!2M6hbgWsD=FKzmx7W0}_G!1r>*34S%b`Kf_7_JF;N5G|+rr7??9b;T2Ue4g*A|h? zTbAePVQ9}+Fx2IAj}~Dlqs{i_l;In)2i3SIF5|VJ{E|~=XA~)gaq98x+Y}U;NP@Nw z_0ufXR=GgHx2pN4XUy(yZxz1_F5PDh$%h8g2V}q#b`1{0O*~A~2V`5acS}cU{siU8 za%r>7T*XmlitTO(LE^uzj?SAl zcFQWr1L&AGW+zeSjg8+2^Gy+lPB_I?7zCMbCa;kI@$sFf$P+T4oj-|^drDeG3wZysJ8ah$_zM04N z90Rc`&UoaDgrLX2JOxIQ?L{JbZzvtHXSzf_XNUtiY=Ep%`mKj~|CQ4nAAix2u#R4g zK$P^f_C%#D;w^smdefRQKW#8ll%N+|!oaj)rsR>=?Y8mvZ~fDoO{-k1XJ_$?X&U`W z2w&drUmq6;aVz9dGgx`Mm)tpPG)%bi5fs%a%Rce*E|t|BYYr-1+-2A*P*(rU2~pwj z+>#uA81&5VPiwoK!&DAljil$Di7Uxl_<^Q5*kZ52*muF*-u!WfZDH_c-om99a#hM$ zW8B-*!&>&{C=|rawF%99#K+rQVdM{752?X#;`< zm#{bVE`br!k+vPX1I|8W)G%)leCZ$8B3N^aWHAak-!NH*EZ!l)9Ae&^5U{mWcPv)q zZKr;?c%H*HVv+0=+dxU@C{@Hq)vuzIyhiv|gR_<7a96>w_d)~2E?jWCQlUG_x~=4% zA4Tc7nql@R%&gWdB#EmY-H99fI2XUdn@L-LE7$)JQ z%x_5#TwHXfcS$P`9b0-+B^6zn3bTw_g|gmOM-Ieg8KOT_@`~5(lptzW_}U~FoUEy? zw#qa)w;Q(?@hr>gI_X=Fvc*#k6E#!5O7qBaD1Mma6=UBmK(w&6tWPZvDlWXuAYXP~ zf%dX)*^W?%#ToUu^C+*1KUR(((AMVsxT558xK&v}(XxARgr|dt5Yt0uiaLT;2fNo~ zd-i#WqltwoWuH8s?CpgloJsV3l3V1imr9^i>qVD*z-pWwygzzkSEeh@P_){$i>-q!=0=iXP zEO6KXi)&EvXSEe+@4t*_w2vCcGhUUXU5Q1~pPA|lVS7q2(CC*kfu*(1R{C-dXWIjm z=M#`;X4xiQR?%|UIP38uVNl+4q}-&oPE?+1di!7tI59BDV;7W^#dI#is+6iIIo=la zt2aBEbFGY6o0UR$>|bt1$n{@#Abg*k(BU7kf1g51cGJK@$4!!2{mply4jI|HXk(i1h z<7v#j)jTY?9IIL+Rl5cG92WH5zq+SV+KW-syQ?1G8SZib-}4H-5#gZ=Z}Zv=Hn;2$ zY*N8+v9a10Jw7Xp%-{R%{l8Yr37? zX`I}HmP)IBR{N{o>7#@+2`Vm=PyzBN+p(*x=1G>ut}*i2QCA;K9&rHYoaxuwknT#< z!=wo81512Fqv~9r>}t$Y>vlup%X8}It62*I%+4Qo);FYGUo)xlZ4Or=i1f{6OAlXO z&$Z6xA%iV8r{bLy=_K0;zYPhWOFCD;{9v=7*2TPEL5gpa8uJTUYDiy&?f|!Q#f_CJ ziDHx+nZ*0FvuwEa#P=yao8u{RT^YL|bVFNj3-3o%C#ItFHMfiHqO1ERwhLS*yf+<; z>{e1ghUctfH10V}1D~NNPA*R!V=j+rPZ&wi`5w1GQLpT+wb2YgSpe1yflaY6WM?hU zFPrF%q0_lK++R>;Zt$H7hgT1u#=MjrAgT$Izokbzclhz-OkP0L!F9%&!*`}aD(Y|E zNy|HYw5+41f%IUh5D z@BGO-jOY%zLdZfI@r^(Sgw3`!fY=cxViJH!aD1fVMH$7J*Rpr4vo`+gxxPP4I~3z1@x%Qk$6leRd3f9e8a!;gCyafJL@I+^O) z0*M!1aP#7lfd0zaBKvoW3T6lnw}xd%)^&sKEKyc6?nR_gHc`C3c-)$ zM0s|iqzd)DOatmyb$JW_+U%1b&7n&DOqbE(#H|2GN>SLh@GC2RS>2tSH$ZTf`Fe+! zF%y{^%pkihRi`t{4Jo!1o<(=T7cqvc1~*%FEA*}13Ss216k86r)^4h7SrfuXx*6+S z99)SuTns3~Q*H}NO2w#5OS9-UF&OK>-qLY1qneK9)I3H&>>g$;=j6ay zu+D=#tx#tA3y-8a%>*b{OLGhjl}b2|f_Z|-=gLxiOH)RkGPQ#A2!`UtGhk2Fp~^4&O?Vi(mSs+jXOGBoO$ zEFL30>9&F)vXogS$vj)sJ4;e*L(BxM=ANqi55fXncT;jm@9O$eMVYy1(cf__UZJ|o zZ7RQ~B4vi9MePN;@k<91YNbyO%M_lS8YRE2lWa_jUrFXyNJO#;*eCzQec98!essQ; zKA_PWRy(@%zG{%gDh>TO8Tli3ifqzmciB~|%;Hm0oQkN=-6IAR<4{S|ID}Oh_ub}8 z*!%ogwf&YkwK}_W**PuTz#n(~_HCHu?;{fs`JpSB zPfiMLl+Y_m6Zr{56%a|{-ZXrgmD*Wmg&zBF9w^Fx@hI-f;(~7%Unry37&{*gv9QvY zz|n#%C4T=Yrhd)J*VZZ}YS5=wd8BgK%cu^e&IoaYhl+)w4mEfF`o#9m3def|2Yl2u zzA1rjq^0XDs*1uAHCoAHEb$yM~WQ zk@7!mCgK0Z#^>_?$woWk?$2{Uvlv%@_^G(sS{I6P^Hb81)i388Z1B-T&Wl$5aKDcF zv{@<9d!0#8679i@>+#Fq2j4(p5ox*33THAYNTCMir*C2^C!A~A259cqc7g~`;7d#d zm3fuXmHVI0hRq6e&aL#IC|6}y6pKhrAL>b0!%nyz9?OcPL@%Q>OS6WAwM>;nFZqPL ztD?zs7?hzp2!ZlaqCw=OL_s+`59Nzn?2R0 z*mZid>+Pp=XN0e?TPtl1NXn%Kx(EfA%uG;CKxI`VjpsdjLaVL>+LwKjH;x`0VAqISIfq|LKPS` zJAN|$@f2!JQ?ty zDGPS={*+2ffNB|YRi)mFb7;ByjBz{AIvho*+m38{Qy8{fSITnL@SYwX~6>ECk|oaN$O7 zZYNxQPX2?q%Gps0Riw3QU8ya-123|F)He zmAFR9BX-D++*m)^E<41gdR7K6;<|L*TEd^+g{SU5Qc+scMPK1eEfKxYWINa(r-jAf zqMravJExuj$ZE=TV}O5ixqkNDogyT~-;R-*%JmESbuvrerhfS4jhTi-B!g2O0B5 zwq?x>G@!-=Udu(*_yIFJs;?Euw&w~N znB(^Yd{G?lJUcKBE2J8K_q!69p&iaC-Hm0`U($lfz0iW~Wc<<2L?tV~0MlejGZkj; zy^}GNiX>zh=Dd)n`@6p#nLX6`sMyPVO2@+?un_0~>8SWedvd%PH(TnWU^XvJ@F?2$CP!2>zomm*{}VMKl9*@=t}X|5M>*##P8< z+-3#0r%JBaNy$5>QKu4p*vo<3?@S}JRR!-j_C3@GC3;bM%NEpOb!}i`+6d!EejUi}apJalW0ib-zI%D;zY^pz4X;C3PD6vlT z9U?w5xP%Yd3W(J&Uf;`At#mc%HQ-|eNALF!jSX%`mRgC-6z)fdyorX96Lsx4=p6@v_5U>9Ub&sIctb+Bu z@AG%qA8M^}ES*M%o1OlxLiY_EZ3vk}Z*4!uKIGlpFYbKpEP^U7cw*E>3I7=ds7)O5 zS;`TkU*Xf7&G%L4%&a`RaBDh0XJUZac6zdOvBVIG-MTSOo3`T{yG{Gox+}J3A59Ru}&d^6{O>G0*HBrml zlV?8-%d(Q3hO)IRJ0PI>^j%Hky}^b<_yW)fV^UW41%W&bCeI4n=xgcS7qYYk@HFag zYhu7tn{rbqxa;e7w`eg=g@xxKiDG`MG_y5Kh1t*|_@ycJNgl=7g5t91wvKJi$`@gU zwAqG7Y)MXJ$=NY4bDg8ky3isQzan_f_PFe)m7^R;2%(o#Dho7)1g`FjZ>5T9)bH*j zXF2n%AeuNduA*i+f0mZzGXwY)Y&rp%r<|3p(C7+~GYyv;{>h$aqIp(CIaUyp-Ft^! zP5j~hqDtLf4EU0>W|IKH&t(ZkvO_{MoKc_B{7&TOy>~ekJj;$s#t9T>SI%}z`4q~H z#3W}$IV(F-$_h8+l0NCeeo7PNkn9O~OXg?nbM?G#Tdeq(N8P)k(ZRogU3tx#{bBMa zXXQ=TP}^+7%D+s?=^b?zhW%+WBmXyXY9A$t8GK)idjKu{+#}n;#@JE(g{K}2IC?Eu5248z@nzJX?;<=XwpYUt;Iv<-dRY>;(0 ziPLAeKy4`6slnCJb26Mbhvad<)J;ukg}qaU~Ue$|k$ z^%FM$!AYTiUtsG%7nmj>IHQc~OF%!q~tlO9WQN@E)k z{7Q5F9KtQc6Njb8tpwAM_S7wX3f5F{sU4KOlQK~9PT*ii{B2vH{+T?xZ2iBISJP?R z^>uP7f%Pwi2>por$AsJC1T>R9kk-a(G&!a2v~ZrKgcuMS^svxd@ndXaq>>KmvI8n7 z-adY~QGj;!58yTL`rY!4dMybR3yYf&kb>?80zyaoM&yO;Yi7fd=e=(508lurUDnU9 zAEVZ=>*UA^heh(})|0u_EV<1r=k&tmL4OXzJE+%~&Q+e>5}bnl%=qT&Cg;;GaM6x( zE2S@bN%RX1D{YC8(oIb)P;frK5C1$gnqk$k*m^C?p%bTRs=4>JqX%IL@iO!b zeUqZAI0`-VEO%)z{fS~KoO~V6=*f<2jxU@319%LgYwTmAJ^xkty|_}RBRpF-3TyYE zF{cABy0utpc27=@H2r+P_+ycJ41!GpIe(R{R$`f>SKqVlr-1JeSBTVIhhBY3vJ=x_ z4ssLK5z?dwA*Q(F>0Ztk4IAWFHr-S?rD|9qgeA^%MkKrJ&- z4LJc|cgUQxpOp{dS3UqGFX#at3DFn`kst6i`@AK7qS|RKi?tgEAG4|VnNb9830rYN z4daRfYz^b;I1fGaVVku(4)@;Hcv}9LiM{(aJ-LiSL?aP`821~ zrcSYA>0txTVK9wYG9J3{UP<-qR& zdbjl0fqX8QUBq8Z40*UbB={P)nizXQQUA04^69q5?rqRR<2S~RsI%wip6$dQo&PS? zbhhU&Ra}nB=8@+W5gF0H^5+0sYH(b{-hKJvb8hD|YZ02I(m-dkHqhz30Ifn(>o0aK zYx@Z<7=z$la*o+hvVtnP>0OXwqXTarHS8De{d1W)-EgRZf!Jn3iH}(!_~_;V{!%Ew zVhXTKwd0?UW%iP@M6EyPacNXBn;v{Er(W4@yQPptsOlx=O?3h zo|J_a`GBr|e(c#>9fis2();vV@G~0q%^IIGNN~V^1P5f7LW}$l>h2QO5?a z2==o)(|zuts86RK0DGH_5o9$e>}R}cx0ent zgY&KjF(qh`NN$T|wZeKfQD_mL&do%+YMv=js~RHk2cNPLOAg3&ZRwWf(RKb>KVUD) z+jafxAW_NIqS)q0hAKcjt%2pmUHirD`c4C7H9hVpV-&x z=MrD%0x#xVmY#AY{_BKv^Z$$T_UPL1=XpHU_DIZ3}b& zs{r5sax^oepaD^$+^qpGwl;cqEFpZ^<=qT~w+q;U>Sdc6p+Zw6?T8>&-{y(mgtMr4gHmxtyx6s&6l8}1#}z$84wB*Yc&jo#wz zyXjoFXwbN9j;Wexm`~9w8D%z2ZcLV#s0UVWn1003@0pM`w z7O)F7+zvN<(nB1*wCT=Yk)i0&VG$S!VacBrMi8{sa&h|ul@RbDwbO66WlY^~cd#E1 z!GX{l4YKz_xYu!eqv9_GdVw zNd{a6ut?>H^IRCuVuj-GZ5Em5-y%JaA@z?EdiOs{S2OVpLE@!2+6Vq@vdev?L@pGg zRO4c-x3P|YQyN~*sWo$RqwxUm$E z_Z1$AaWRgaqXYsL6A!1S4@#PfxQGMw3WCA-3_wLKEnkr@KcUMT!Pc$@>&T|ToUCSV z|Di>{DkX}`*m%d3Uk5TOZjvS}2PH1<5>&29Qsd-)+M`ZC)28OjdO)OscTr0OJY*g z^TmioHtL9NzHEg&dFMf5dO8Mk%CWgQGTvA1RK*2RQ}e9jRp&UA_LKU$;6o3N3q2-F z^CP69C5*4b##@>GVZEdrc;L^>)5cIa*g?G`ay+0<5fA0bsOMk_OOtInVNGl-~ z2_OyWEIFqvauLC*-lX*I{fmkfM1>dmn~F7J@Z(nPG><9BCi_lPVfy>9+_&s{ez;Q@%^+r<9UGbM{`gi0jSBx9>QK~ z>^9=IE~pD51P``#<82xr%`Yn|mPj*($F_X>!jj19*})abr^leS$p2nZ2oVSG+o04J zm`YG)n?8tDR0veqo<^^M6L_*cp<(`w(NjkU5{6o{D1qynwhrrE246b|42Ury3HoX< z(pi!JSTigstfuaVB(*Shgi-MK>hUT2JflqEoYIS;%|=DR!eJhr%ADp>z_jh{=f1V? z?b>sZNzOcpVuHa2hl}khl2iKoTElJBK|#=QI+Ez2Lpc&Rhqmd1q>tDW>fEor-0X;7 z`$%R88prLi!r{vZ@QSCMg4|fBW51!se)E2>8vqZ52}g}4AKO%7=>=X);b$+}oBot< zObaY`5f6^9O0y~f1C+`t=i(~o26Kl&VZ+g*sgstF`u5nM1wh|wVN~ePQ>()<0!}9f z0gZ|!%HNNekg>OXHsI*5A?Z0c+sgsUWRZBj!I7mX=kfs~fnaa5Z#j5!9Jp}aV>OWxBKXu6}ZsznYWiu0oQM)xt1g{~R z=ZNQ`QiwqZAf$;xvz$|BWIBOF(5vHlfLn?{Uuhl(Ay7pLe^&fbB$y=ZfA~jQlV- zN+*LSK;tgKBq*`NwMHeH08LNR_Nucw-pX$rHbH2%ZdmeCg!PDcx&9$i67cmGf|R>` zhD+3npl4L60_8ef_9(0^FEV&KG}RJJx{?zdYgD@X{0B2(oUSuP(%{Ez9f|^0(0}6= z{p1G=8u@YJkf;%Ewx3xErk4;abU;9=e*t0t2GaXCklk;fIp2v+piJ(o>mh%<)FF6k;N914)orST$OeiK2;jwJTo>33yy9s94qk_p)myONJLRrq~H%9 zSknF+MD=d@tX}$fQCRry+8q>-HX=j@(}8Q)apI%WBb=&!fFQ~OQJGxDf}AFe5+P6= zdhsLKpAL*sX{Hii8u6St!e?YanHbb7R(=ZW^dx4k2*vtvD^?T-;Y~tG1}%=@LJr-S zDSiTqi&>uqIe44ECxhN}#bqaAj+90~7G&JFz0F*F#La>+t;%C{7K5f!rb)ppGWw83{vu?>rS2?up5sCm9mn-$VSI~rZ6Ce z499mbQg82t%gg5s(yHQ*KF~LVPVtLo`(cd4$czM?0Kd|SzKd<;a2`epy?^z6b@%9c z@@ZYKCkH02t5ib=5jSTM>o29PDab}PED<4BZ!R!_vX^((K32Q8 z(cIPJE>4%T7Eg6cG`{vCG~G);53d()t1FjUBOiUC>RaC;yN47Dps(*+lYy_B_3rAp zPeJzsbF2Ru(APuQsH3#));+)YjqmN_xO2jAc2IgqbIQJ_Z%e1!>b|p6fBMa-)s5!~ z&+fqv@Zx!<8+UxGcdzR^8fogk4-YvYihOluKcY89x zl{byfxlht@n(ZM_^LVuzzyqjWT+pRd!ckNQg`eZAczsk=+%yJlm1cm>wJ-1h%k z>AO2)Uw3$Xu(lr{+XAdUuRg*|Lpu&et1pO9$70v04P6ZB0|NICqa3At6$%4%^#B&V#57d z<-=3a$W7I7z)FA%7^bowrm(h@oQqbPoBCRk39llcHt2er9zvm7Z`Y!hmAx(+eP+o6 zxBIk=oO2I!4J7HxUhfG8HT~EEHQ|ApIBsu5ytD~lyB@Y>khr?5Zl}jrZtP@gGqP?| z+l_Em2Mstv;_p~2ob@07l1HNdc1Z2}6y zbbn-Gl!IVc^+!q~?<|^k3^w`WzM)wCh+V)M;Jk#kX#m$zd8s>~V zhb*r5#M1UFMv)GcOs1`T*?K`|7O1FU5@V3&^Yhw0iAQye#^Dw|IIJ@D%7}QB+O^OX zqfF~>y02X;neff`EobZ<&9^w~@hIpY+25X;mKPJuLd4td9XpMx+{Oij6PTgBCQk|= z0+nhC5wt0m^q?!yZR;Qwu-x>3a+0f6eqsSHT0Qu^(u~GY4(|`PeAETlL+HwgQv0z^ zq9;sZUEkXeg<#Z3Z^^@JQ>;PoR-oI1Pu}Z5EQB`sdCCpwfrW_mG5Pi5Z{zfsL^&XC zosX3^fuX3WgF5I|KpmtfppIBjM~!p~w8Ot42p8a*!Cuk`x~X=45BgX1??LX9cHo3X zCBIP`e#8HP^7jFMNBQ4X;BhrWJABPsf#8*&u?HuFv1$fG2@C>(as5NjBs!Zm~)={>E8{;6?iW8|Uu>{^q$xx&eAlk9-3(31Qmge*{y>apm^0jgOgVXSxte;*0 zA)8lu%yjwWc43JK04dUD)A;T1`7~sIKXa__4l|NKR>XZAxZ%p{`gqFU>iu?T^Zm%? zmaB4jmj|)fZ5$Q%_1^sf?!?LK=gV4V7q(z#`^M8x<|^2xcC+xTDq^IaRuPxoV`SpU zxy|K$Lq#E0v(3pHf~NA9m)=B?f@e68JX!KNaW3*!d2TQ~iqG2=?l*PZn2*oNJ=es>ufk9NP>l2h!F(9_czgP=d zNr^&Gh|Jwk*2?9>?Ha6v?#9D#w73c%IU4ctyXrY~AkJWHHKHsCX;NIFkTuDL?z-6gZ zxaXnwCUjA_+X@HF2Y(UUmX!X4_f6bG7kR%_npWuvWk2jed7%x@M(RZZqH0ir9R=Gz zRV})7y!bW*Np0dmIX@rTa3wJ68AHAY#Z(C|}0>+_HSe!$Qbp zj|#Y*<4ld#xad+EcHe3RdOftPWqph*bnKU~PmZq@q_)o`mQJnQJDlV@)LgF2n!cLC zZG?WNM*M$-y#;U_OV%YUW@ct)W{VkG%*@PSk;Tl+vY45fnJgxYnPsspS+MQ*W@f)P z|L*?Lq3TdX_qpestjfBX)tUF)xLJ``sb`9~jaP~NqP~Cs?xt1F$vpxUTZ#qy&dlQ* z@=3&nzA-n$W$ScFrHc=ti(?IEuI)DmGj|wO6n4NT3j&vEo=>Clzfna*LfRi;oF`EC z!AO^3l-;J{>Qq^wA3bG*g*>d1QxrLnudNX65N-4o_v?>DegK* z``Vl0iu291@BZ8BXD=THzg;9x+(B53i=_rHU4cB$*jooZq|qVg#!uUBdN1ODtrgF+ z_HHsim&7(~hV9Fo^gNyt_~Y^URwDyY1HpzSRJlR3F0L!&nQlV;7Af z8()VmKatY=3^d1PB^i^)Y0n=QYpI#hGy1nyhU`Y5pLys4%MMZp7jK(uoO##Og3=sH zOyz@t>%f}U+@XXnj~JKZYH=kqooLNSj||ToNO!%>=$Fq)s7td9Uv8)J>qVCD*fM+J zxZ?eZ&=%OcXg~Q(YtHV7t@FA$^a$b%-hVgmWwvZG=7D{7Z!8${j?cCDGWp5UU2%a? zDZSv}dhHHLEf6q)f4)kM0Uat`UJo)slM}wQ=!LvH??AOhjQD0h9ii=C3xXkH5 zmO0h+?NMjh$cwAa_~XrIaCyqB)TEkYHSyv-CRakCuSo5kc9+d7=9IQ41ykZ_Go@X2 zJQ>X^mIE92_l+hl+qq0ERX-iv;||B;(|6M031{3amp4Bd7;j?Ko++0d5!GaUFC*f# z4_kdG-_VJF_w_U{DHK!0)>_UjO6zK}nIx{W@|)yW-N{Wu&&?uw)V-dsr1d|aA1&+F ziI3C0nD<(EuzAx!gXDEPJ3?#fY@T#CTX+ofTD~Ez;2C?bgU3Xx z&^J5PR86Gtbtl)yk^{T(&O4PcLeK7WK%dWB$5XDf8utw4Q>#89 zWP@1ql{ZBlvc4YJm%3+77#A-!HjyvwAv_??xl&2qn~1v#LM$VV0URaF+#E%Gw3!H3)x}KycOZgKGC@7z_49th zb5?9x_@WG1S@vz?k8&t%??w+jbF~KK9$c+z7q%45MB`_v5wVf@sJb1n%eL&sx?9B) zGfmhq_Pkh?@<GKBJu|SvP5d2(>i(FQ*@apx725E9LrKkpQ@@dxeYj(k+A0>9K`tA<`)sJnf+ zUU+O1wiG7{`Xc(QrHQUVb z-OnZ$5v0;pvkh52s~Z!OZ6{cyYRoE8&k(ldra zBiFyfyEAAfC&7-~en%c7D_-*Mvv5X2?6YI8@zt^a{2K!JV?v~H`J_P(-e}|J%XMGZ zQWo2&`%+<8N145@eGYyBU8Ef3(Bmg$Zlh(m)$E$jJ>I>%b%=A2-6`9`#?*{`hiyr6 zNd0skSGT*&UYEIZ8j$@bkT=k;E#ZAbU>O2)pFkOgm3G?a<6*&Z-di`Xf5<55K{uxb zIO(x{Wn#G5^Xgc`>hQfgDO;?H?grB8kdq&)w*$qPOo4h{UPCl30^1&oH3R5oO5Sf_O`Y7fZSrKcel;h<2@F7a7VV?1WbQGt>yzhHnS)C ze_8;v`^vkxbFPMZ0)51gwC$JvlA7k^_?Oh5rK{b1F+(yO#&5HUWZf8 zb#o+J%|n(gKc*PtVLO_fxkXRXRrqpYGagS zGuz<)oF}HcKBK-0*b>{omQcB#QLNhPoh;+c(fn!JXuT36^UI+veIPHsL!ha9pyR7! z83&ro&t=ZeRHFSM{}JW)cF$jTUR_>tt+_s2;k%nb?dkVm-y5x2Qrl*~@*~D)x5clX zU02mmdasIX(HE?=pg4q)I!Kz*js|{FSflpv1cA{7A-(dxHLC{H70GKN8Z!83A50XF zP=6(@s5GZ0Vly71wq2m6-(}3}K{wDwH^}r&vm)fp$N$Er&~rM--?YF#M8M*P)O=L} zio*ylwyawv-=F)qLeuD&?qhpz1RU>Tpx&&Ux|&8S3W>2fP60kqJcYHb6t`*g>k8u1 zcDGP=Wt|u&xf{Il(dEM8l4hYZRmot=s<;4wrON43S87EQ=o^prS(+b zs_pDA&L)WOH>x6gP43ljp4DL9q|MgAIo7~BDhP(R#UX4Vo`94Y0JkpDKC3ZC!r_Dd z{aa;T>mW9T8po=XmE@+n|h^5fEq{uYPPSo2I6F@YG%Bn4>56^NR7kr!C$R z<1wq9%q_k;;$?-)S$~!5h~>U`W3u=8S+Db!g|z+qclwAw*9Nf#EXu-YI;?)ql}7aC z#Hky@r;ika@zySa|dy$tPCbYW33_jCqg*pBDU23HwUrj*k z2|@7tsdffSQhmRk1J2x2mUBt2ESbgJsl_V!8@e6!p&-(cmdYj>eG{JTe?DH(vZ&BK zW~&;DSJ|xrKnY;p83D!^N<#=?56EZ4ZvCSz#j2zrAY$w+!x)QmhzB&CYm=)rGelPa z77&;vQCGYp7L9=JnSKyq2cdEIa2PtdC<`$N3`z-9vT=j3q{6Ti4D;u+P6QYxBATcy z-CrnV_4?@bWtIBY5&b!h9y*Yt9+gaF;&b~LlFJ6uMj+~~wXjI5x-^1aWclzD(^ zE6W_Ntv-uF2RJJ;(=5&wy~b6RIvyDcdx7iv0v*d;ojnYyn;G1F zD9mN%V8#IB9}gJ(%;rFSR+9jsFdzss{V1x6Lp(X+$5H&s{2ZXyxJ5oAmHJJSwx}?fa~*cpm^ja?Tp=)gY@xiis9Nlytiie& z12CvsujBdPPqmb}aHt?SS%IYGU-{-4zEPX?WlaLlhX2_#%Q_Gs9gifdgk(2fVi1C& z5L96>`?pI!W#^8tUm#(ICiiC@7u4kD~>9ZR% zx`W~OX&XLGiY|N{-OU`m?HoPb(v#t#axmrhyEle`e8fKtGs*EW(OA?|#$qmCW0q*g z+sGmp@l(|pJJLIzN#4fvjvL2fFbCw<=ycA+L}N>GCu)v|^9-I2+>U4KUI(hU7pjP% zn+CdzT}q((3?_1>HR{ZiOsX^+sgJg%bVB@*KYCF=4E$s{ddHjVr#brOaKyH|J=qXy z;}Z}Q2NoSi7soa)XEsB|b~?w1JBDB%sBXng(dy-^MPzYoP_tmeH*BOCOw8hi*4 zK_4WUr~!_kC|l0xGn3cvQW0eBe#t%+cl&8a-@NQSa_>J*DMpTBXJVyg9%JK~o^JTE z;Cb5B?I>H?+`RC1`%TYmPb+x7)%d(A=Xh2FCW6vG!PV__8-%RpJ=N16KU#kB@O&Hf zd<*2yQ1bJG8Ct~@ zI4+XFNNS$Y$nEI4mqOL$4PE>#Y;~u1^#||@rqjM@l-hgDUIj8;BzhX|ey^58s@uV- z^T$)P5Q${CQg={N$?i?!&15v3$R7@?GgF+rNN<6uBR23SH|Tp!vGPr{HqNy6D_{-l z#iYYKk+UAUa2)(kl+IP+(LIW+6b8@rqMMhQ3klD+F*Z?AgO8GPly1M|?)O_WL6}cZ zP@I*U`NdpcC|y;EA1iQDo{JSnzHWYgOTyZF1mX=}r01c3lKceZWeq; z&rMUIU^tPZ_5}$unC*y9?Q#MWG_CpnqURjx2;N}epL!hqaplNc5ic$%bWR`d&2NjO zx6>c@_YUECpNAR|X%#hXKC685*cBNJrg$Xjxb+be)Rv^FZ-@dw??#bxFa zyk2RawL&Y)d&kPu(m*~aj#ab4p6go+k4CC|^Ovt67&Q693WVsDPG?FQ?IC(;JqRwi zhiv2KZ+d$pI7acZu%awY*rh1bBpK@+ukIi!xd~1WaUA08uEUfO7LOp{nPFB?7&w$! z&b>O4+9X(o+D~i|7AP|$S&y!v*roxWDu-d`rwuYhIfAV$PVQDgrQJmb=lK^JHEIfi9&*I_X#!_pj`68q zxRf*t6jCzMqBq0JgZ49!&!6~E9Hd#sp{vD`F=f4DPn54<)1+CE`xu3|xPOar`M-*> z(&YGU-BLxHnQ0)RLdE`DM~DAhi>Q(J2D?%xuRo98HW$2SMn@O-JMT+?DI0AIl76jx zIz7|YhG*0Ej|JWaAFUccg|3IUx2b)h>?`CZGiMn`>r9r9b%&PmuQ7nJg?q)b&}l=# z%csntfph2OsJwDSi(!05F=G{%hOh>1!tiQKC%o-oOrP~iWi<@LyA3h1YhGbt1TYz5 z9g-@qm%80HLSkB<%hhG?kN54^na|=apAx|Gj_4r$4_i{)cSW4wv9lzd;N5u?zc{Hz zsCp0V+YwV>Q?#Mx2OiV05nTJV+EIwOgN8_+I-G_%W3Yl7w4xcr#uo#;s^B}0X_+N3 zHI=ppLraynMKNnO8~0I^48A>yc!_x7gW}QDkuC0BTTV%$rCJFhaVQx`ln!mpro~dw zFbB*b96c7%5U@TM*wP;@|CByYY3q!T{d%XOrUZJ#sAq+D#AsIkjgg)R^ytWrI0ZZ9 zkBU1wHp0JEc!7pk7}!M&$*8@)-@Ph%sQgQZYW@jO$Ghvlb-Yh(HnNfZKS;P2YUlWm zJiaKUsTh3u%L??2KUO@c{2St_9B2jl|HFz=s zV}!O(ejpw-32zM9Hgj3iHoUSi&Gz;k5M6!Wwtiq3POral?lb_nq>t5;toXj-2{?k< z*Z_>*ymoPGWrOXM&H9H?OzrW`JXAjL*=B8}Vu>`~a9qQr*2fbr06)U54fqbn=lwS> zS`Wo3l%-i=O4iS4)se2yy{Mgk?}H?%Okud;yiaE$nIFr;u%lQ=H+n=h5s0}2O(xkC z6NCy6Mb4=NN-}g5V5T%)pvA5wh!h7(7eQ*h;kY-Mj` zH?tt1*z%ApC20-a-yxWPvy9+Gv6a44h;}6uYt)`fvZa^`)B1zjAj!a3huPeCVe$vH zI#BChs3Ul(#pi#aHiRV(EMy5h?&!{2WWvegcYj<@vO2I zBLy>bNM=GuaOS`;V%iR)P3nr!cQLI*AmR?=MR4i_EXONz>sBk%LI+hC@SURA;?MEAXUUg4y{^6D&ugfJ#KTPD=fWz4W&<-Wg}TwVW1|6&>=c#wmfvhyeXLbBrC$z zq!j?_+le;ZmLFyloU#`p)qCPrUf=Kv$P6^*CTpWPO~jyp!DF$E9!-~Kux!<2SxhR^ zk@$x3!eosUmM0yeIcJc;hw+eLS}0bWmblz$Y_mmyrirO&s^?tbsI;i3=@rp14C4Vp z(xNy`j;L$$Q}wZJhrF3V*Q|!Y%c{mkErtlpz!JnL zeN-M2`U^=!Qd(f5%KN^eOPfFmnNcVk#|2X1$)H;vkRUx%XCR6zACOn5j+{rCc~wd) zCnBh^`rs-M)_D@d$hi>nEl208=_6pes-*U+Axx&&C^t|`V8SxMsYqx?=SRI%$pp|@ z+=xkHVjkm^7bdE)##kO?&VCxO%a8igf6-~IicP3WM0wNXN3Bmumz(T6S!Au<;H$e#H4L(2&S`OE~4eZ{*$ToU8*w&sX*$fP0OSftFqFls!EUi6SWxj zpQt2AVU)y6^;8*%YX7o8uO4VYB0Sa~3ud~alAlQ))}nXIy-`!VHI+wlmb#+opvu4<4jC>nWTtwvaqO|U+t&rHQ!e#%jx_NRJzrgy+qI^mj!Sv zpAZk5-cUFtz+_tO+g^dlU~5R$r>I4UJRtf>$$)X zPs%Soa0rei&GWQ$L6Yj!KGEJCGBo=Ww)eu;55tFi&q+} z#2njAf%K&VLl#|c#EV$s*1obOBWscDt*J^ys}1f^9o(TI3GHY?Tfi5s;lqX(-DQet zKO>+aQRLj2(f*mpU5}nD@5iBV*@J0jN`;ro|B|W412!{tG>FPYk_8_=3qp|tP}5{r z9*i7Zi!a-Jg9MuO&HNPc^EBxm2yKFsH_}%pEa3L(v(O9)PL~yqGTHFq=`mAsJg>fa zB-nuazr&JMh-oKc{1uij^Pu8KDg&KgAggqW3Z|8QrAwvoZ?;es$gK3LXgWLLW(2xC zP-&jra&Mc$5Ok>qO|%lT|F6&do`Y6+jba$`f<}QMrixqEDzM?%|B4HeF%xfcLP-!u zz=KiYSem(bMZ>kV$a{CnJ0n2lYu17!0{bcFw>M}MbXVeIct$G?X{K&}a~{D}g+-U;&oRgo_!%HI>8Bzof$$mhDSQ{Bq0sbgu z#Tu$B2*23$fUu2v`9^MDQv@H$`J8?_oGX@dI2M(f|31>o&$O?D7>UqwEKzIVG@%|a zv!fyecU@Z%f*`9Af*GuRO9#kt!moQO!??H5!^9~5`5ZyNfA)3%$r1^$Qr~eRJ*B zPQWz%hgru~gb*;0(BFXsBGbOzLYwJ{0zVthKTO<-=YLZ~Gp(u5!@TsoKpG(wkVpD% z1ksTNCBkB28A>S)68#H&A33ARV@CTAw|daB2qBVpBR)w~e~^+nVo~@Zr%@)oVV5r8 z|Fx+8ET(=HW5fc1zr?tB0{(pS&!^`~eu?3PCtD5bm46x)jr|4w3wIxxF}Vu(7(_P8 z-|JPNQkHx$2T0#_j6Q-T(y)iM83@?E z=J#yfve6Wbbhh3#WPQXlI(48$u*c8P&OZ5Au*;8*JK_~6TeEgw~ zP{Q7-2^kI)6a(kG3cL;C9?O%9a=vhoAY@sfI_OZjVSPV~4UVLC->(Oi?fOw6!M=pg z?u@%ML&~kg%1`?fEJm8uVO0p4xV4Q8PSsoCgtM_OsOg_++!e2*&mp)zhU$NWzQ;8gnz!Ln{#Z90#QWky4|t9 z7XpOF1-KG>m@wakBXtcnOnr~sa`mQsm(^ynbtcF{3~ z%MYR((ph_ZAYT0Ojfj5*jsQTqG{-FYR39*iArMsJ3$-B4S*YH46k=xYIaM@5tu4|r zX^+6gom&~tAm>SoRAVe=3ALlSvo{NkTa?LeEq_G_*Uj2Y*gvxrJCY@8{rdfBPY7Ue z^jjR6g2@NQmnQ4|z?THB#IHx5mig!Fk&E*k6U#@9ul=hAhD74|q=|%cNMk>aTGC+X zCsi4^$6l8j)l&+xD>)iUvKcY@vrG-NQNT2S8mcA4QA3O|P{$-sXMeiqIU{!-+dI-4 ziD3sx8)soq&|h$~&}0GXI6re-q&8Ran+`~X!!kw2^a<)L`+8CKG_aGF+>D1f8b&xO zF7DRLbP-iHN1Bw`8~jR3O;$5SL;WWtH83RaS-K0FVj&A%m8EAFtSE1w3)qo3f};f; z^+5ys=d~Y*?6#yLyd61Q>b$fF*2X={5*5Iy6fJ2hi$)^P zF!Nv+w9%&9m^Uw)i^Tk#jDnn$B^(A-0F5l7C@-y^RgQ}a4SNDPqJe`~x-tMR^~0s6 zD|E#?1wHYJ5_mW+$a#?G#T`kGAQT*59SL+HtIly^mVHvvrJ>eW21w3(9%AjZ)zU;j z9v!-TS34?ZDGvSe?%OVLRE#(+!kZYZ#}5hp$BHA02XgM+3IVHl7dB*IAO9guHVGRm zsidOPAWxoOUJVnQ?^NK77Z`!hP>UKtgTjUv2z&?wJlxO0c$cE`C=)b=-o19E%)x|k zf?Z2Y5TQZG=F{T^a(@QztM;s;;zNqveVx#*psM0RYQA$}2aZzcX<2fo;(jk|^ zd)>TaN}VS+ykc8@DF>#DlE}bxk`MdNVrd(-PLC zjAjbD<>lr9QvvML zJdtr}PV_|r&k`-(J%g0Xf>tF!XJHP+`#5nu?58F)l7F(mN=*hjb0q#BXI#*r3$W{5 z3mS3K5GQ2_rY+f9T?V}=XsGRJsfB7he&clMTTgQ1y0$>RH&M+iKlk) zxgp#NmnQPNu4jK@|FY`q@b$B{XBfdzuS}t)FUVD|#hKFmN@A-B%dRt>mjsncThMkn zg?i|$@-yHU@DWKzZo3*Ky}KW$->>+efqL)ID#islp$Lm|v{g7kX;@4Uj8~@WyeO)F zzw{+V$Pl- zai|8)8@nI!wb2mN$exBPVQ~#Mm}S?$*kZz3pEr(yx1@Xo)J3Nq<*+%v1yvXzA<3qV zT^K3+jRt+fdJos-@PWz|f1Gx_B1t(xmGE#WzR+p7r(jJOP^2w@unvZF{}%zT-KN77 zGFX9s5uiGP;>ES~F!~>qCXOb2>)w;A@WD_m151XAx$E}I)zXs(*b>NzQW-*PUxSz88i&W)3azIW{ z4jnEe@3IIWSIz2hTgi^3Y>y$zB>itg))D^jNd+SOWk_inIFOIbYIX>_hd^xR+?u$H z4zQhgdt~U5T;NvHcIEQcojyH355k^S!2e3jObG02?V{u(mKan7GV>nwt#lR) zuD{a7sB0_c()bJaVXHU`|;ti zgSekUxn-&6>T`LalAi@kEa#y*@VuKn#hePzhPf&iY&l$s!}Pm=0nBhJ^$`bD9L;)9UB-nC#4&s#%7{ zSRfABkSEvIhCU+m8BBbw;!!CwqeOS>q(+7$G6gg(vpv!J@!oprvlNWhrt!J>&44!( z`ip@9GQ=}+TkXTOJU%8x!$67F198SNczpak%2 zj=n^UPMIMz=8w*qJqb?I?9)a@!m^g8)|n!c0#1WBsUol>H$7!aw9W&O%ut|*l4dQn zTt}d=DsB^Dw9NGP3mBq{r3E0cwA)b_8kreX_$Gp{7}#!x>M61b{zIskKgUz`sf&DC z59EtQqWwea(@!#~JsOjAPow{#4maqJIx&?0t=6gbo`qX8^hh5e{$~Y$A8u6D-x14>;ne@If4Bj6|G#&-Q27lEdN?()uOTG z@|_2xcc;v#ea`~6)mi?4_Kc!_TY<_BxJdv=;};P72ks<<0>vHjji`wn4{l*dh&bp;F`F9Fv5utC)9lzZ>?D zwm$+qeqc5nOkZ3L?Z&wLRMD)%Iw?LuNJ*o_3C14IR7{8xbb1XgT3y4&>7s9N4m~!W z%Xyhb@QjUlp`s+dTqG1ZfyBvH=Fi~)iB7!O zM1zOHhm7I%Mv{Yq$h}&Or6R~YqKs95v{hmMEgrQgd$jefFh6vPalW`Y-&I2Pp*3O9 zW}@4G@*~Y7kYRakcx5nwP{3wQc}-|xVFgb|3Ndx7f-B+eRv4+VRZ4n04werq#I(V& zye|o}9n3~ywlBUw5pClMKoY51V-2ZTJJIopWxReg$1fOPd24l4pV{oj0E|TM za8^3HEI0@u;v(}oFNhO6jkQuk&9>r)cxdu-)d1DlYBYT#+xv}#?1g&pF4xzYQo;s; z@8kmLTqdJ+Q@JEGtjgDJgq|MoZ`XJ9WLq$Du zicd#H^rkNCrjwKsW92OW)&p?WuV9OGp9KQ3^w5?h_V6#;>j>!KHGHuN-(SeMJ3=0A zmVBS9Lot;r&3zkSPsAj-b@BPwqYW{8t7fDcBKa6>>dQy6kX1TOl)LyJ8po&N9!d?k zuFMH*6PweY5`nOgl1F|`Ne#h1h~A$(fZr0aHt?Q7t#G@S^ZCNum)EG)S3W zaBU*jJnQ``^9Ig%5L*E+eO9YGp#NN6d8%`y3IZ%a)e8LkQ*HIH5>%hfO;rEK1s^*% zU^B#m05a#(J9wC+dSDjADw@QGL)euf(u(XvK*`zyTnshy@{?Vg3#aRWiu8=MV%r~Y zhG|!(;Lmz{HYkn#{L3XX;veB#rlT}4{4lXtS(k7rR~y9!m5?t;q7kvfWF{4CjWQ=F zz^#%eaAWcb2-ma-=J8QY&Z!+jgmSk4h0bK<2G*FhueCHp3$eFtG(2&#gY1({p!h3Z z*CJA=j5Cw-@vWPMjHl2i%3#XfW2cU@Fy{W5ckjezDG$;-VFE-=_RT8J-3%+^rzyDF zJpinpQ%(-+kOeMd20taM*r|=%P{-#0DTLhiesp(dL`3KkQY_o|lMVYj$bUNan>XLp z6j+|~Hyj8E+P@vM09K<_Gd8jNt48Nm+JM7%7J|_qU!rKzb7bw3TQE@RM#Gw?knnv# z&eie@D~6MBF5)~h8l=6^72hi&8b%B+L6b}x zXOFLECzXONE~tt%c6rj?J7Pm^+?YW^IE78uLiu=%<;WKQ^a_U+Pr5+7+}48qIZB1z zl^^0PLZWpf=r|h{8x5Ike`9pq!B9)%+qWz(UW?LqzfmYM*%GxFR_rL@B1Naejr>E? zu8Z{n965;xZ!S73QVWi(8j2h%WfarO;9J>jBboFnhSR9Hn5=Tpwd#RybaQQc9*|el z6^@!gOJxoEfuX!-!MYBkr3k8dY=zZrW;Q+O2={N@3C{+Be4d~J_hJ@@>Nj9zyN};5 zVcflY5bJ6y^tc7uhb~H^G`(Tj^GvkHM-r8`t{6n z9KMd6o$YNb4k2IM-j|Ir8-6Hbb3H94S$lHRVRtg4FXWAwArB>NCmOq(4k8NAfvlRx z!hS%Yd}?Fu;whxERu{P_iH%qo&!x7iXRyk3keNfW8t;SqZu0KR`q9$fXE@!LC+HxL z5cxWLM};O6Sv`r*;>Dk^Wqp?>)M~J+X5@4@kajParaD$#zwZbM#yr#T`A->0OTmASn+^Iu2Szbc&RC;$sl;`IL1 zMCm+Sdf9M~>Xf)#yILtlL~9d^Zx+|JqfsU~qv%Dva_$c>-l`vhyKEh*uMvj7TzJcJ zAZ$fCHN>G^kD^g_IUZ5?P6<6m_AKDrXQ*Z*ly-*&Z5za6d)2HOipx_!2;zx4Rt_l`I%$Qx#HM4D!3*U#)=fe9_m!=Am<<>Nj1u=NFc8;wqD11}T^k017TArJ zq1WVM#h);w|U)n6VTr?RcBE3-HtZw%^IuhbX1sQ2btOC;!@F&_P@7Gz`+ zz(zPAlia3aUACl?Q%lnno3_u~@Ghvbbizu%DlXD-U*M~wD|`}Lq^Vc1EZVTovckj7 zvJh1GxbtpuD7L1u(hGX)@kPUIITKzaL1QUAv|yE!Yiw4TuPa)T&hc<2iz{cwGAo28 zR#{2EXx@UwSc5jf%SUadtc8aqV)LaCX@?saPFl*Dxj#wK3fMq^F0}tbAgpZ?x6=FN z`Cub`cA!d%+2GU5(elAq9nqT}L?7&%Gur#{Z{~Nu7usJJ&z~K?`nG_KC-?98zg)H% z_UQ$n$P8c9<-OhRuU|L{e%yysOSB_Gh0AP$_(TNrpMqQ}Dbg7>Q{pvJ7Jy^#Q@9Ng zyPk?cG6g+`R1I9qlLkrzAT1C&R0dE=Qxt1J{$uYt6s z;K*z!yxxL!tWm(O1v>R9RXfmycqa=V<1uX(Uyv!J+LIN*#U;i=D7m^J7m&Sz$8dhw z8D}d4q`(CF^TC}PNTEGxrcblilHepCBt|i81^Fl#guJBx0Tf5EMjJ#SWzaH(eD$Q zu#vDpVU~RDu73(S;%&U65G1(o!=_5IR$8bfSb0+Kofa4Rz8}#UpQzO+x;13FN)TgX zF$m|1soWDLKLJxX>`_T-;hlZ{c}+;8@7}CSZo@A14bYmnx+D13&$kuUY;4?E_IpEA zxUcUYs>O7#%kHBA7qYZc0*BGeg@N>aHs4cXv?2-Eage|yN2s;hyO3^lfRP(JtNFjFy2npU9+&ziak4ehX;MFH|zAZOMk zM$;vS2(@!gWK27~-mk=?wWyq>B7N>>b74(4&G*3|$MUVH6>coI{ovr%mhEyb2BV>T z``AN5DZfXs4r0w3)TD-;R=a_Pd7Defv7dxy~mkt6J2pmvxqOQh%yPpH86cS#gNAvPgQF(6zX8n9_B*k)dq3=Yq3P zptpjTxSuQY@nuYbYrDVqn*~;XcG)u@27b*h zSw3|7yQnq|ONM2{6Dn@G$+nt9V*tM+V7;?y&lQY|vwC%9ul=L12W@5Ns6t7#z%MC$ z*Lz-_&KX5lh|ykge>zX8*jv6$9UoHSx{v4>oJKES@X!m6J)4BSsF$w}`7~~tAH`5T zpqdI>w`qY08L1>zN4sWe+a~(w4>B92(bK}F=QJ`@Ti%~LcGbBdWb_d&VWdk4&tJNw zRZUC%Pz?Y*!&B0n3D4#ke4vQLvasCqFaYWO6BB_1vB~BY%Th4$-r6oP zmPppaJ0j!(xng2u#f8RCixrngW+&2(Yjdo&_Pi^&;d{ck?3(GOaoTQ~M-_AyNIMkF zM$}N5CN+Cd1;!*iICO=B?%z@d4DW?j}m$jDgvETi(;i}DW&b+?g>e%2#!rRF@bTQ$BMNCp%DUR=~RJu zS`z{LHtvMe9E4su5)^HxndU>)!ht8nd~8kGx9+b&h@*u1!c+^zV|-P^_;rgiw5}a4 z+sq|odHuh12~Hj@_W<=!19cJoL)YKcVgIAw)$|4go1y5tr1fPzhc!g2l~{EuWM7e^=8zgjgnp}`@T1w-O<@8I43 z1ZzHo6-I3yKG$Ujo~#J{*l@lhD8J z)5w1P*C;JvE?zpR}S8Prk_$>{#1coM??EI*X}QD{jv8RKl>YXV*wJ4uC9zm zi|;%2?b>(g%oscVSni0yhqQgIo0Pgk`{{}qO?m=ypV^TG55iqD&B$F=S=ABtP&;VV zs{Eo?HZHh>y9M_gr7cqp=kB@)>WGTnD0sM%PE6ZSl)8;WNoOjheMl-TA`VTZ`ODE2 zje6w)XVv8bR&w=zD=C@G=?j;8(dYv42)U?fQg$LoS`#+k=iLs3su=`PEYzA$K^ zZkH|zXn5@`>EZsYIMr}uM$0fFhq)ob)>?SUo}tqkH^-Rx3;sLlor|4% z3I%E09Pj>2#V_3P3Aso{oGH;2RCH#U2zLz2qU1UXOv*8|6qp0>FUli=fg3jOb-)$4 zR+RT=huPzBD!&;<*`#WWD=tFlM?_9}_;v&>OiC%|#3i)0>`8Pl-W|O}GQZw#tlzDB z7M?JVKv6YV#*Tdb4d8Lp`w)x1`rTr3;q=p_i>l!yb|j7{5FepOM#_YG_D;AmwQpA~ zy|!1zbM;{m*0yJE@4Dwk-atII=SFk~dO%-OfAlcaM}is3As3VHdk=c=KqLx>2N*)X z*|~yFbN)yg3dJnl+x-v!_Yb6I;z*MSp5zJ*&e(<*tXtoFcmUg}xb=$#7<)xt1EyLO zFxw4v{!DeSd3-gUtysA3`#skAhvJ+m)~B5rzPlEE?%y!IP*jFJ$2HDS$I2WRr@~pj zpLTG&Zd=qXUtwyIcZX`@c;8Uc)r>)b!mU{K9uq8RzlQ3$GxFfRDe21P!WW zp!d^L|JJSLZcm6$pMgC&_uaw!z^Rs1_G%sb7HovKH#;dh7}Hc(wm}x?Tj4 zfn}&0Z>=A})z+v07s|#+jD4Cnbe;O6VEY69pFLLL_=;r@BnU_d2?z)_u*U)x?*6Nr z0*<_Z*QbNAwH=dzs-3gu42YI z=P;RM1@tT`x^URM1egKAHhZ1UXD}=n$cn_9 zA9dt2z+Mo93eszwyaPY64de#&vsMbIo8_Fr97A~G#SihXq$WY*GbyW8-5Ga$sm$se zoB(>4tmuI&SFeON(maiHvpU6n8>Go`8qA=e)6dyf%mgOm7sxO&XWPSHqKjBjBI~%J zez;W>c!QcC)of9x@tSrIT{Wtc=SBGXYqcux3IIq$U z5Qx zN1vWmX@AR8BWPQK7mlvkIY~I)lvsx@_Kl9yvQ`x)g>U)S=63yM#8LkvGMxip_Q%BPH8MgpZLvSZ2CC{#;(dDl70@3PB0he0USu_K34 z-g+a=ZR`oN!6Py75HKQyf?FsdQ$}FaDM65|2xQ*fyWt=@5D#!xx9p#V!M{VT@?ro> zp+OBt9Psvc+Q*wIodAW?V??>QkzBC$z)0TRnY}nco1ngbusy3XZ7iQTs($o z!Tn?J;fuYJd(-=!?oGDfFxz|Z9ht6TH4@4yw2OSfzVmO zrO+fd&6-oh+F5|76?I5UYC2uP7o9;HL7VsWP19|=ZJYPoEGFddln&@^!M_7GCa(4c zq0!s2FOCHdpMZDoACx^+_&?$UKi4hc*QI$wU9^CJ29L0OXBkkk!?DdUE0-Q-H^X&7 zG!LUa#r<@%owO=fJAyoQgZtxr*S4Y)Soo?yyFyrnk04}u_3~rQjxFpE?KfvvYryr< z|Jn|x^vj~JyACXwy-NGa(^sc7`=2kL-L%iC=GMAfrSGIe6jWADdOc^|8>?O6FW;yg zRc{2|Q*30Lv3B8ytc&sQC;L{Wea;CMtXsu0+4jXe!?RDgSbVy?jXIlDI((bb*)F_a zP~{R|qIKU~?X$xnHGP&Dzq#i{vI}o}D%fycwPDRn&S<`Qoyu`6FJ?XM>+s!ZJU?+C z!-PFQD_^ZI;hyKae9^`3iny2NOfmNadjH*(?2WtE^wFQ`4WG+zhizMb>}B8y?F3wPUw=0!U;?N z%jIQXP}nZr-1&|znX6l~s7EkD`LN{77jhEaJ3p;b_?MU((f7fs_SA$cCL(VnxO5H| z>O8ENmymge`2~B@llI=zx|ew4pIqvXpE_}S+TmwYIH$e6t30RuobQ?S!nfO(q^0%B zOtsDYG-b~2W#{%(UwhMZsCv!OZIdn;Rach!zI~+nqw22Q!RYs&*H3xk5nO!w)wOoH zx+fR6zLu-5dAw}-yt-#MpUbCy#(UT`7-rP`G{e1%G&vV7fuZ}pcoGG0C&DYA` zJ6LP?)}cZ-&IBsC2-GNuqVYLU1YY+f=NExT zqS3W~xqVywHBfsF3j>1yiuQV-2wZz&K>;>b+a*RW-~+0YlSH?C1~4GNGY3E;N^^mJ z$EH26L0ZTNX!&WN5i%&2Uj+`OgSA6^j%*0lQ0QGPX5FpNzz`S8%D|6ek|Ph)q~emw zoK*01C3+a3A1Dda-@y3O8bveO@sjA~pwE*c%*iT*nS(Tmg03BX;sv2Sq7cMi?R1fVDS{ZUA~m7h%9V6a%nz zd(q88?>i#Qdftfc7(`DJ-4yh$7Q&Q&P0&z5>3E^*M{f@z^v`TV%3`Rk!vJqqU=9N1 ODnW)sVD{+l0r3EhCt)oB literal 0 HcmV?d00001 diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/QuotedTweetDelete.scala b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/QuotedTweetDelete.scala deleted file mode 100644 index 68a6283d7..000000000 --- a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/QuotedTweetDelete.scala +++ /dev/null @@ -1,45 +0,0 @@ -package com.twitter.tweetypie -package store - -import com.twitter.tweetypie.thriftscala._ - -object QuotedTweetDelete extends TweetStore.SyncModule { - - case class Event( - quotingTweetId: TweetId, - quotingUserId: UserId, - quotedTweetId: TweetId, - quotedUserId: UserId, - timestamp: Time, - optUser: Option[User] = None) - extends SyncTweetStoreEvent("quoted_tweet_delete") - with TweetStoreTweetEvent { - - override def toTweetEventData: Seq[TweetEventData] = - Seq( - TweetEventData.QuotedTweetDeleteEvent( - QuotedTweetDeleteEvent( - quotingTweetId = quotingTweetId, - quotingUserId = quotingUserId, - quotedTweetId = quotedTweetId, - quotedUserId = quotedUserId - ) - ) - ) - } - - trait Store { - val quotedTweetDelete: FutureEffect[Event] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val quotedTweetDelete: FutureEffect[Event] = wrap(underlying.quotedTweetDelete) - } - - object Store { - def apply(eventBusEnqueueStore: TweetEventBusStore): Store = - new Store { - override val quotedTweetDelete: FutureEffect[Event] = eventBusEnqueueStore.quotedTweetDelete - } - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/QuotedTweetOps.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/QuotedTweetOps.docx new file mode 100644 index 0000000000000000000000000000000000000000..9ab0821bed17f3c5f135fc8d324f71323c104642 GIT binary patch literal 37108 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�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 - override val quotedTweetTakedown: FutureEffect[Event] = wrap(underlying.quotedTweetTakedown) - } - - object Store { - def apply(eventBusEnqueueStore: TweetEventBusStore): Store = - new Store { - override val quotedTweetTakedown: FutureEffect[Event] = - eventBusEnqueueStore.quotedTweetTakedown - } - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ReplicatingTweetStore.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ReplicatingTweetStore.docx new file mode 100644 index 0000000000000000000000000000000000000000..34d9d624a3785f1bcd06b368351935d35f1a0b78 GIT binary patch literal 38448 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 literal 0 HcmV?d00001 diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ReplicatingTweetStore.scala b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ReplicatingTweetStore.scala deleted file mode 100644 index 333103447..000000000 --- a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ReplicatingTweetStore.scala +++ /dev/null @@ -1,180 +0,0 @@ -package com.twitter.tweetypie -package store - -import com.twitter.tweetypie.thriftscala._ - -/** - * A TweetStore that sends write events to the replication endpoints - * of a ThriftTweetService. - * - * The events that are sent are sufficient to keep the other - * instance's caches up to date. The calls contain sufficient data so - * that the remote caches can be updated without requiring the remote - * Tweetypie to access any other services. - * - * The replication services two purposes: - * - * 1. Maintain consistency between caches in different data centers. - * - * 2. Keep the caches in all data centers warm, protecting backend - * services. - * - * Correctness bugs are worse than bugs that make data less available. - * All of these events affect data consistency. - * - * IncrFavCount.Event and InsertEvents are the least important - * from a data consistency standpoint, because the only data - * consistency issues are counts, which are cached for a shorter time, - * and are not as noticable to end users if they fail to occur. - * (Failure to apply them is both less severe and self-correcting.) - * - * Delete and GeoScrub events are critical, because the cached data - * has a long expiration and failure to apply them can result in - * violations of user privacy. - * - * Update events are also important from a legal perspective, since - * the update may be updating the per-country take-down status. - * - * @param svc: The ThriftTweetService implementation that will receive the - * replication events. In practice, this will usually be a - * deferredrpc service. - */ -trait ReplicatingTweetStore - extends TweetStoreBase[ReplicatingTweetStore] - with AsyncInsertTweet.Store - with AsyncDeleteTweet.Store - with AsyncUndeleteTweet.Store - with AsyncSetRetweetVisibility.Store - with AsyncSetAdditionalFields.Store - with AsyncDeleteAdditionalFields.Store - with ScrubGeo.Store - with IncrFavCount.Store - with IncrBookmarkCount.Store - with AsyncTakedown.Store - with AsyncUpdatePossiblySensitiveTweet.Store { - def wrap(w: TweetStore.Wrap): ReplicatingTweetStore = - new TweetStoreWrapper(w, this) - with ReplicatingTweetStore - with AsyncInsertTweet.StoreWrapper - with AsyncDeleteTweet.StoreWrapper - with AsyncUndeleteTweet.StoreWrapper - with AsyncSetRetweetVisibility.StoreWrapper - with AsyncSetAdditionalFields.StoreWrapper - with AsyncDeleteAdditionalFields.StoreWrapper - with ScrubGeo.StoreWrapper - with IncrFavCount.StoreWrapper - with IncrBookmarkCount.StoreWrapper - with AsyncTakedown.StoreWrapper - with AsyncUpdatePossiblySensitiveTweet.StoreWrapper -} - -object ReplicatingTweetStore { - - val Action: AsyncWriteAction.Replication.type = AsyncWriteAction.Replication - - def apply( - svc: ThriftTweetService - ): ReplicatingTweetStore = - new ReplicatingTweetStore { - override val asyncInsertTweet: FutureEffect[AsyncInsertTweet.Event] = - FutureEffect[AsyncInsertTweet.Event] { e => - svc.replicatedInsertTweet2( - ReplicatedInsertTweet2Request( - e.cachedTweet, - initialTweetUpdateRequest = e.initialTweetUpdateRequest - )) - } - - override val retryAsyncInsertTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncInsertTweet.Event] - ] = - TweetStore.retry(Action, asyncInsertTweet) - - override val asyncDeleteTweet: FutureEffect[AsyncDeleteTweet.Event] = - FutureEffect[AsyncDeleteTweet.Event] { e => - svc.replicatedDeleteTweet2( - ReplicatedDeleteTweet2Request( - tweet = e.tweet, - isErasure = e.isUserErasure, - isBounceDelete = e.isBounceDelete - ) - ) - } - - override val retryAsyncDeleteTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncDeleteTweet.Event] - ] = - TweetStore.retry(Action, asyncDeleteTweet) - - override val asyncUndeleteTweet: FutureEffect[AsyncUndeleteTweet.Event] = - FutureEffect[AsyncUndeleteTweet.Event] { e => - svc.replicatedUndeleteTweet2(ReplicatedUndeleteTweet2Request(e.cachedTweet)) - } - - override val retryAsyncUndeleteTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncUndeleteTweet.Event] - ] = - TweetStore.retry(Action, asyncUndeleteTweet) - - override val asyncSetAdditionalFields: FutureEffect[AsyncSetAdditionalFields.Event] = - FutureEffect[AsyncSetAdditionalFields.Event] { e => - svc.replicatedSetAdditionalFields(SetAdditionalFieldsRequest(e.additionalFields)) - } - - override val retryAsyncSetAdditionalFields: FutureEffect[ - TweetStoreRetryEvent[AsyncSetAdditionalFields.Event] - ] = - TweetStore.retry(Action, asyncSetAdditionalFields) - - override val asyncSetRetweetVisibility: FutureEffect[AsyncSetRetweetVisibility.Event] = - FutureEffect[AsyncSetRetweetVisibility.Event] { e => - svc.replicatedSetRetweetVisibility( - ReplicatedSetRetweetVisibilityRequest(e.srcId, e.visible) - ) - } - - override val retryAsyncSetRetweetVisibility: FutureEffect[ - TweetStoreRetryEvent[AsyncSetRetweetVisibility.Event] - ] = - TweetStore.retry(Action, asyncSetRetweetVisibility) - - override val asyncDeleteAdditionalFields: FutureEffect[AsyncDeleteAdditionalFields.Event] = - FutureEffect[AsyncDeleteAdditionalFields.Event] { e => - svc.replicatedDeleteAdditionalFields( - ReplicatedDeleteAdditionalFieldsRequest(Map(e.tweetId -> e.fieldIds)) - ) - } - - override val retryAsyncDeleteAdditionalFields: FutureEffect[ - TweetStoreRetryEvent[AsyncDeleteAdditionalFields.Event] - ] = - TweetStore.retry(Action, asyncDeleteAdditionalFields) - - override val scrubGeo: FutureEffect[ScrubGeo.Event] = - FutureEffect[ScrubGeo.Event](e => svc.replicatedScrubGeo(e.tweetIds)) - - override val incrFavCount: FutureEffect[IncrFavCount.Event] = - FutureEffect[IncrFavCount.Event](e => svc.replicatedIncrFavCount(e.tweetId, e.delta)) - - override val incrBookmarkCount: FutureEffect[IncrBookmarkCount.Event] = - FutureEffect[IncrBookmarkCount.Event](e => - svc.replicatedIncrBookmarkCount(e.tweetId, e.delta)) - - override val asyncTakedown: FutureEffect[AsyncTakedown.Event] = - FutureEffect[AsyncTakedown.Event](e => svc.replicatedTakedown(e.tweet)) - - override val retryAsyncTakedown: FutureEffect[TweetStoreRetryEvent[AsyncTakedown.Event]] = - TweetStore.retry(Action, asyncTakedown) - - override val asyncUpdatePossiblySensitiveTweet: FutureEffect[ - AsyncUpdatePossiblySensitiveTweet.Event - ] = - FutureEffect[AsyncUpdatePossiblySensitiveTweet.Event](e => - svc.replicatedUpdatePossiblySensitiveTweet(e.tweet)) - - override val retryAsyncUpdatePossiblySensitiveTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncUpdatePossiblySensitiveTweet.Event] - ] = - TweetStore.retry(Action, asyncUpdatePossiblySensitiveTweet) - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/RetweetArchivalEnqueueStore.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/RetweetArchivalEnqueueStore.docx new file mode 100644 index 0000000000000000000000000000000000000000..591814416abfed346ec062214ae680a3cf178f2f GIT binary patch literal 37098 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 z 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 literal 0 HcmV?d00001 diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/RetweetArchivalEnqueueStore.scala b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/RetweetArchivalEnqueueStore.scala deleted file mode 100644 index 4720e0317..000000000 --- a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/RetweetArchivalEnqueueStore.scala +++ /dev/null @@ -1,38 +0,0 @@ -package com.twitter.tweetypie.store -import com.twitter.tweetypie.FutureEffect -import com.twitter.tweetypie.thriftscala.AsyncWriteAction -import com.twitter.tweetypie.thriftscala.RetweetArchivalEvent - -trait RetweetArchivalEnqueueStore - extends TweetStoreBase[RetweetArchivalEnqueueStore] - with AsyncSetRetweetVisibility.Store { - def wrap(w: TweetStore.Wrap): RetweetArchivalEnqueueStore = - new TweetStoreWrapper(w, this) - with RetweetArchivalEnqueueStore - with AsyncSetRetweetVisibility.StoreWrapper -} - -object RetweetArchivalEnqueueStore { - - def apply(enqueue: FutureEffect[RetweetArchivalEvent]): RetweetArchivalEnqueueStore = - new RetweetArchivalEnqueueStore { - override val asyncSetRetweetVisibility: FutureEffect[AsyncSetRetweetVisibility.Event] = - FutureEffect[AsyncSetRetweetVisibility.Event] { e => - enqueue( - RetweetArchivalEvent( - retweetId = e.retweetId, - srcTweetId = e.srcId, - retweetUserId = e.retweetUserId, - srcTweetUserId = e.srcTweetUserId, - timestampMs = e.timestamp.inMillis, - isArchivingAction = Some(!e.visible) - ) - ) - } - - override val retryAsyncSetRetweetVisibility: FutureEffect[ - TweetStoreRetryEvent[AsyncSetRetweetVisibility.Event] - ] = - TweetStore.retry(AsyncWriteAction.RetweetArchivalEnqueue, asyncSetRetweetVisibility) - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ScribeMediaTagStore.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ScribeMediaTagStore.docx new file mode 100644 index 0000000000000000000000000000000000000000..8fa76df2d9d0196a47f8ed18381f059d1306adc4 GIT binary patch literal 37259 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 PRe}tO!0aK?3*rF)3E8E9 literal 0 HcmV?d00001 diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ScribeMediaTagStore.scala b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ScribeMediaTagStore.scala deleted file mode 100644 index f610fb5ce..000000000 --- a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ScribeMediaTagStore.scala +++ /dev/null @@ -1,42 +0,0 @@ -package com.twitter.tweetypie -package store - -import com.twitter.servo.util.Scribe -import com.twitter.tweetypie.thriftscala.TweetMediaTagEvent - -/** - * Scribes thrift-encoded TweetMediaTagEvents (from tweet_events.thrift). - */ -trait ScribeMediaTagStore extends TweetStoreBase[ScribeMediaTagStore] with AsyncInsertTweet.Store { - def wrap(w: TweetStore.Wrap): ScribeMediaTagStore = - new TweetStoreWrapper(w, this) with ScribeMediaTagStore with AsyncInsertTweet.StoreWrapper -} - -object ScribeMediaTagStore { - - private def toMediaTagEvent(event: AsyncInsertTweet.Event): Option[TweetMediaTagEvent] = { - val tweet = event.tweet - val taggedUserIds = getMediaTagMap(tweet).values.flatten.flatMap(_.userId).toSet - val timestamp = Time.now.inMilliseconds - if (taggedUserIds.nonEmpty) { - Some(TweetMediaTagEvent(tweet.id, getUserId(tweet), taggedUserIds, Some(timestamp))) - } else { - None - } - } - - def apply( - scribe: FutureEffect[String] = Scribe("tweetypie_media_tag_events") - ): ScribeMediaTagStore = - new ScribeMediaTagStore { - override val asyncInsertTweet: FutureEffect[AsyncInsertTweet.Event] = - Scribe(TweetMediaTagEvent, scribe) - .contramapOption[AsyncInsertTweet.Event](toMediaTagEvent) - - // we don't retry this action - override val retryAsyncInsertTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncInsertTweet.Event] - ] = - FutureEffect.unit[TweetStoreRetryEvent[AsyncInsertTweet.Event]] - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ScrubGeo.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ScrubGeo.docx new file mode 100644 index 0000000000000000000000000000000000000000..51cd2e787eee3f6eab295b53d165d51337667603 GIT binary patch literal 38250 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 literal 0 HcmV?d00001 diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ScrubGeo.scala b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ScrubGeo.scala deleted file mode 100644 index 262def919..000000000 --- a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/ScrubGeo.scala +++ /dev/null @@ -1,164 +0,0 @@ -package com.twitter.tweetypie -package store - -import com.twitter.conversions.DurationOps._ -import com.twitter.servo.cache.Cached -import com.twitter.servo.cache.CachedValueStatus -import com.twitter.servo.cache.LockingCache -import com.twitter.snowflake.id.SnowflakeId -import com.twitter.tweetypie.backends.GeoScrubEventStore -import com.twitter.tweetypie.thriftscala._ - -/** - * Scrub geo information from Tweets. - */ -object ScrubGeo extends TweetStore.SyncModule { - - case class Event( - tweetIdSet: Set[TweetId], - userId: UserId, - optUser: Option[User], - timestamp: Time, - enqueueMax: Boolean) - extends SyncTweetStoreEvent("scrub_geo") - with TweetStoreTweetEvent { - - val tweetIds: Seq[TweetId] = tweetIdSet.toSeq - - override def toTweetEventData: Seq[TweetEventData] = - tweetIds.map { tweetId => - TweetEventData.TweetScrubGeoEvent( - TweetScrubGeoEvent( - tweetId = tweetId, - userId = userId - ) - ) - } - } - - trait Store { - val scrubGeo: FutureEffect[Event] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val scrubGeo: FutureEffect[Event] = wrap(underlying.scrubGeo) - } - - object Store { - def apply( - logLensStore: LogLensStore, - manhattanStore: ManhattanTweetStore, - cachingTweetStore: CachingTweetStore, - eventBusEnqueueStore: TweetEventBusStore, - replicatingStore: ReplicatingTweetStore - ): Store = - new Store { - override val scrubGeo: FutureEffect[Event] = - FutureEffect.inParallel( - logLensStore.scrubGeo, - manhattanStore.scrubGeo, - cachingTweetStore.scrubGeo, - eventBusEnqueueStore.scrubGeo, - replicatingStore.scrubGeo - ) - } - } -} - -object ReplicatedScrubGeo extends TweetStore.ReplicatedModule { - - case class Event(tweetIds: Seq[TweetId]) extends ReplicatedTweetStoreEvent("replicated_scrub_geo") - - trait Store { - val replicatedScrubGeo: FutureEffect[Event] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val replicatedScrubGeo: FutureEffect[Event] = wrap(underlying.replicatedScrubGeo) - } - - object Store { - def apply(cachingTweetStore: CachingTweetStore): Store = { - new Store { - override val replicatedScrubGeo: FutureEffect[Event] = - cachingTweetStore.replicatedScrubGeo - } - } - } -} - -/** - * Update the timestamp of the user's most recent request to delete all - * location data attached to her tweets. We use the timestamp to ensure - * that even if we fail to scrub a particular tweet in storage, we will - * not return geo information with that tweet. - * - * See http://go/geoscrub for more details. - */ -object ScrubGeoUpdateUserTimestamp extends TweetStore.SyncModule { - - case class Event(userId: UserId, timestamp: Time, optUser: Option[User]) - extends SyncTweetStoreEvent("scrub_geo_update_user_timestamp") - with TweetStoreTweetEvent { - - def mightHaveGeotaggedStatuses: Boolean = - optUser.forall(_.account.forall(_.hasGeotaggedStatuses == true)) - - def maxTweetId: TweetId = SnowflakeId.firstIdFor(timestamp + 1.millisecond) - 1 - - override def toTweetEventData: Seq[TweetEventData] = - Seq( - TweetEventData.UserScrubGeoEvent( - UserScrubGeoEvent( - userId = userId, - maxTweetId = maxTweetId - ) - ) - ) - - /** - * How to update a geo scrub timestamp cache entry. Always prefers - * the highest timestamp value that is available, regardless of when - * it was added to cache. - */ - def cacheHandler: LockingCache.Handler[Cached[Time]] = { - case Some(c) if c.value.exists(_ >= timestamp) => None - case _ => Some(Cached(Some(timestamp), CachedValueStatus.Found, Time.now)) - } - } - - trait Store { - val scrubGeoUpdateUserTimestamp: FutureEffect[Event] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val scrubGeoUpdateUserTimestamp: FutureEffect[Event] = wrap( - underlying.scrubGeoUpdateUserTimestamp) - } - - object Store { - def apply( - geotagUpdateStore: GizmoduckUserGeotagUpdateStore, - tweetEventBusStore: TweetEventBusStore, - setInManhattan: GeoScrubEventStore.SetGeoScrubTimestamp, - cache: LockingCache[UserId, Cached[Time]] - ): Store = { - val manhattanEffect = - setInManhattan.asFutureEffect - .contramap[Event](e => (e.userId, e.timestamp)) - - val cacheEffect = - FutureEffect[Event](e => cache.lockAndSet(e.userId, e.cacheHandler).unit) - - new Store { - override val scrubGeoUpdateUserTimestamp: FutureEffect[Event] = - FutureEffect.inParallel( - manhattanEffect, - cacheEffect, - geotagUpdateStore.scrubGeoUpdateUserTimestamp, - tweetEventBusStore.scrubGeoUpdateUserTimestamp - ) - } - } - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/SetAdditionalFields.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/SetAdditionalFields.docx new file mode 100644 index 0000000000000000000000000000000000000000..607034d9ff5577eb5ab960b8e1126a634d4b54db GIT binary patch literal 38004 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

    j|NM221cfUM%p2!oO$qjDKlFMTe~1G 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 literal 0 HcmV?d00001 diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/SetAdditionalFields.scala b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/SetAdditionalFields.scala deleted file mode 100644 index a1dfef0df..000000000 --- a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/SetAdditionalFields.scala +++ /dev/null @@ -1,155 +0,0 @@ -package com.twitter.tweetypie -package store - -import com.twitter.tweetypie.thriftscala._ - -object SetAdditionalFields extends TweetStore.SyncModule { - - case class Event(additionalFields: Tweet, userId: UserId, timestamp: Time) - extends SyncTweetStoreEvent("set_additional_fields") { - - def toAsyncRequest: AsyncSetAdditionalFieldsRequest = - AsyncSetAdditionalFieldsRequest( - additionalFields = additionalFields, - userId = userId, - timestamp = timestamp.inMillis - ) - } - - trait Store { - val setAdditionalFields: FutureEffect[Event] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val setAdditionalFields: FutureEffect[Event] = wrap(underlying.setAdditionalFields) - } - - object Store { - def apply( - manhattanStore: ManhattanTweetStore, - cachingTweetStore: CachingTweetStore, - asyncEnqueueStore: AsyncEnqueueStore, - logLensStore: LogLensStore - ): Store = - new Store { - override val setAdditionalFields: FutureEffect[Event] = - FutureEffect.sequentially( - logLensStore.setAdditionalFields, - manhattanStore.setAdditionalFields, - // Ignore failures but wait for completion to ensure we attempted to update cache before - // running async tasks, in particular publishing an event to EventBus. - cachingTweetStore.ignoreFailuresUponCompletion.setAdditionalFields, - asyncEnqueueStore.setAdditionalFields - ) - } - } -} - -object AsyncSetAdditionalFields extends TweetStore.AsyncModule { - - object Event { - def fromAsyncRequest( - request: AsyncSetAdditionalFieldsRequest, - user: User - ): TweetStoreEventOrRetry[Event] = - TweetStoreEventOrRetry( - Event( - additionalFields = request.additionalFields, - userId = request.userId, - optUser = Some(user), - timestamp = Time.fromMilliseconds(request.timestamp) - ), - request.retryAction, - RetryEvent - ) - } - - case class Event(additionalFields: Tweet, userId: UserId, optUser: Option[User], timestamp: Time) - extends AsyncTweetStoreEvent("async_set_additional_fields") - with TweetStoreTweetEvent { - - def toAsyncRequest(action: Option[AsyncWriteAction] = None): AsyncSetAdditionalFieldsRequest = - AsyncSetAdditionalFieldsRequest( - additionalFields = additionalFields, - retryAction = action, - userId = userId, - timestamp = timestamp.inMillis - ) - - override def toTweetEventData: Seq[TweetEventData] = - Seq( - TweetEventData.AdditionalFieldUpdateEvent( - AdditionalFieldUpdateEvent( - updatedFields = additionalFields, - userId = optUser.map(_.id) - ) - ) - ) - - override def enqueueRetry(service: ThriftTweetService, action: AsyncWriteAction): Future[Unit] = - service.asyncSetAdditionalFields(toAsyncRequest(Some(action))) - } - - case class RetryEvent(action: AsyncWriteAction, event: Event) - extends TweetStoreRetryEvent[Event] { - - override val eventType: AsyncWriteEventType.SetAdditionalFields.type = - AsyncWriteEventType.SetAdditionalFields - override val scribedTweetOnFailure: None.type = None - } - - trait Store { - val asyncSetAdditionalFields: FutureEffect[Event] - val retryAsyncSetAdditionalFields: FutureEffect[TweetStoreRetryEvent[Event]] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val asyncSetAdditionalFields: FutureEffect[Event] = wrap( - underlying.asyncSetAdditionalFields) - override val retryAsyncSetAdditionalFields: FutureEffect[TweetStoreRetryEvent[Event]] = wrap( - underlying.retryAsyncSetAdditionalFields) - } - - object Store { - def apply( - replicatingStore: ReplicatingTweetStore, - eventBusEnqueueStore: TweetEventBusStore - ): Store = { - val stores: Seq[Store] = Seq(replicatingStore, eventBusEnqueueStore) - - def build[E <: TweetStoreEvent](extract: Store => FutureEffect[E]): FutureEffect[E] = - FutureEffect.inParallel[E](stores.map(extract): _*) - - new Store { - override val asyncSetAdditionalFields: FutureEffect[Event] = build( - _.asyncSetAdditionalFields) - override val retryAsyncSetAdditionalFields: FutureEffect[TweetStoreRetryEvent[Event]] = - build(_.retryAsyncSetAdditionalFields) - } - } - } -} - -object ReplicatedSetAdditionalFields extends TweetStore.ReplicatedModule { - - case class Event(additionalFields: Tweet) - extends ReplicatedTweetStoreEvent("replicated_set_additional_fields") - - trait Store { - val replicatedSetAdditionalFields: FutureEffect[Event] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val replicatedSetAdditionalFields: FutureEffect[Event] = wrap( - underlying.replicatedSetAdditionalFields) - } - - object Store { - def apply(cachingTweetStore: CachingTweetStore): Store = { - new Store { - override val replicatedSetAdditionalFields: FutureEffect[Event] = - cachingTweetStore.replicatedSetAdditionalFields - } - } - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/SetRetweetVisibility.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/SetRetweetVisibility.docx new file mode 100644 index 0000000000000000000000000000000000000000..b319fcd6876cbadfb2b0520f9aef57ee8d9f08a1 GIT binary patch literal 38088 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 fOOJ~AVTo;z4s9%Xz!kKA?SaCw|fSpWBb?JPuf literal 0 HcmV?d00001 diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/SetRetweetVisibility.scala b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/SetRetweetVisibility.scala deleted file mode 100644 index 7f4736f15..000000000 --- a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/SetRetweetVisibility.scala +++ /dev/null @@ -1,172 +0,0 @@ -package com.twitter.tweetypie -package store - -import com.twitter.tweetypie.thriftscala._ - -object SetRetweetVisibility extends TweetStore.SyncModule { - - case class Event( - retweetId: TweetId, - visible: Boolean, - srcId: TweetId, - retweetUserId: UserId, - srcTweetUserId: UserId, - timestamp: Time) - extends SyncTweetStoreEvent("set_retweet_visibility") { - def toAsyncRequest: AsyncSetRetweetVisibilityRequest = - AsyncSetRetweetVisibilityRequest( - retweetId = retweetId, - visible = visible, - srcId = srcId, - retweetUserId = retweetUserId, - sourceTweetUserId = srcTweetUserId, - timestamp = timestamp.inMillis - ) - } - - trait Store { - val setRetweetVisibility: FutureEffect[Event] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - val setRetweetVisibility: FutureEffect[Event] = wrap(underlying.setRetweetVisibility) - } - - object Store { - - /** - * [[AsyncEnqueueStore]] - use this store to call the asyncSetRetweetVisibility endpoint. - * - * @see [[AsyncSetRetweetVisibility.Store.apply]] - */ - def apply(asyncEnqueueStore: AsyncEnqueueStore): Store = - new Store { - override val setRetweetVisibility: FutureEffect[Event] = - asyncEnqueueStore.setRetweetVisibility - } - } -} - -object AsyncSetRetweetVisibility extends TweetStore.AsyncModule { - - case class Event( - retweetId: TweetId, - visible: Boolean, - srcId: TweetId, - retweetUserId: UserId, - srcTweetUserId: UserId, - timestamp: Time) - extends AsyncTweetStoreEvent("async_set_retweet_visibility") { - def toAsyncRequest(action: Option[AsyncWriteAction] = None): AsyncSetRetweetVisibilityRequest = - AsyncSetRetweetVisibilityRequest( - retweetId = retweetId, - visible = visible, - srcId = srcId, - retweetUserId = retweetUserId, - sourceTweetUserId = srcTweetUserId, - retryAction = action, - timestamp = timestamp.inMillis - ) - - override def enqueueRetry(service: ThriftTweetService, action: AsyncWriteAction): Future[Unit] = - service.asyncSetRetweetVisibility(toAsyncRequest(Some(action))) - } - - object Event { - def fromAsyncRequest(req: AsyncSetRetweetVisibilityRequest): TweetStoreEventOrRetry[Event] = - TweetStoreEventOrRetry( - AsyncSetRetweetVisibility.Event( - retweetId = req.retweetId, - visible = req.visible, - srcId = req.srcId, - retweetUserId = req.retweetUserId, - srcTweetUserId = req.sourceTweetUserId, - timestamp = Time.fromMilliseconds(req.timestamp) - ), - req.retryAction, - RetryEvent - ) - } - - case class RetryEvent(action: AsyncWriteAction, event: Event) - extends TweetStoreRetryEvent[Event] { - - override val eventType: AsyncWriteEventType.SetRetweetVisibility.type = - AsyncWriteEventType.SetRetweetVisibility - override val scribedTweetOnFailure: None.type = None - } - - trait Store { - val asyncSetRetweetVisibility: FutureEffect[Event] - val retryAsyncSetRetweetVisibility: FutureEffect[TweetStoreRetryEvent[Event]] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - val asyncSetRetweetVisibility: FutureEffect[Event] = wrap(underlying.asyncSetRetweetVisibility) - val retryAsyncSetRetweetVisibility: FutureEffect[TweetStoreRetryEvent[Event]] = wrap( - underlying.retryAsyncSetRetweetVisibility) - } - - object Store { - - /** - * [[TweetIndexingStore]] - archive or unarchive a retweet edge in TFlock RetweetGraph - * [[TweetCountsCacheUpdatingStore]] - modify the retweet count directly in cache. - * [[ReplicatingTweetStore]] - replicate this [[Event]] in the other DC. - * [[RetweetArchivalEnqueueStore]] - publish RetweetArchivalEvent to "retweet_archival_events" event stream. - * - * @see [[ReplicatedSetRetweetVisibility.Store.apply]] - */ - def apply( - tweetIndexingStore: TweetIndexingStore, - tweetCountsCacheUpdatingStore: TweetCountsCacheUpdatingStore, - replicatingTweetStore: ReplicatingTweetStore, - retweetArchivalEnqueueStore: RetweetArchivalEnqueueStore - ): Store = { - val stores: Seq[Store] = - Seq( - tweetIndexingStore, - tweetCountsCacheUpdatingStore, - replicatingTweetStore, - retweetArchivalEnqueueStore - ) - - def build[E <: TweetStoreEvent, S](extract: Store => FutureEffect[E]): FutureEffect[E] = - FutureEffect.inParallel[E](stores.map(extract): _*) - - new Store { - override val asyncSetRetweetVisibility: FutureEffect[Event] = build( - _.asyncSetRetweetVisibility) - override val retryAsyncSetRetweetVisibility: FutureEffect[TweetStoreRetryEvent[Event]] = - build(_.retryAsyncSetRetweetVisibility) - } - } - } -} - -object ReplicatedSetRetweetVisibility extends TweetStore.ReplicatedModule { - - case class Event(srcId: TweetId, visible: Boolean) - extends ReplicatedTweetStoreEvent("replicated_set_retweet_visibility") - - trait Store { - val replicatedSetRetweetVisibility: FutureEffect[Event] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val replicatedSetRetweetVisibility: FutureEffect[Event] = - wrap(underlying.replicatedSetRetweetVisibility) - } - - object Store { - - /** - * [[TweetCountsCacheUpdatingStore]] - replicate modifying the retweet count directly in cache. - */ - def apply(tweetCountsCacheUpdatingStore: TweetCountsCacheUpdatingStore): Store = - new Store { - override val replicatedSetRetweetVisibility: FutureEffect[Event] = - tweetCountsCacheUpdatingStore.replicatedSetRetweetVisibility - } - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/Takedown.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/Takedown.docx new file mode 100644 index 0000000000000000000000000000000000000000..54080dbcc1ffe3129f395d62736691c31998e5f6 GIT binary patch literal 38371 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ɷ`9V=x$mgQqzv|dQ{HhtOndZ4|j@Ldf+ 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 - override val takedown: FutureEffect[Event] = wrap(underlying.takedown) - } - - object Store { - def apply( - logLensStore: LogLensStore, - manhattanStore: ManhattanTweetStore, - cachingTweetStore: CachingTweetStore, - asyncEnqueueStore: AsyncEnqueueStore - ): Store = - new Store { - override val takedown: FutureEffect[Event] = - FutureEffect.inParallel( - logLensStore.takedown, - FutureEffect.sequentially( - manhattanStore.takedown, - FutureEffect.inParallel( - cachingTweetStore.takedown, - asyncEnqueueStore.takedown - ) - ) - ) - } - } -} - -object AsyncTakedown extends TweetStore.AsyncModule { - - object Event { - def fromAsyncRequest(request: AsyncTakedownRequest): TweetStoreEventOrRetry[Event] = - TweetStoreEventOrRetry( - Event( - tweet = request.tweet, - optUser = request.user, - takedownReasons = request.takedownReasons, - reasonsToAdd = request.reasonsToAdd, - reasonsToRemove = request.reasonsToRemove, - auditNote = request.auditNote, - host = request.host, - byUserId = request.byUserId, - eventbusEnqueue = request.eventbusEnqueue, - scribeForAudit = request.scribeForAudit, - timestamp = Time.fromMilliseconds(request.timestamp) - ), - request.retryAction, - RetryEvent - ) - } - - case class Event( - tweet: Tweet, - timestamp: Time, - optUser: Option[User], - takedownReasons: Seq[TakedownReason], // for EventBus - reasonsToAdd: Seq[TakedownReason], // for Guano - reasonsToRemove: Seq[TakedownReason], // for Guano - auditNote: Option[String], // for Guano - host: Option[String], // for Guano - byUserId: Option[UserId], // for Guano - eventbusEnqueue: Boolean, - scribeForAudit: Boolean) - extends AsyncTweetStoreEvent("async_takedown") - with TweetStoreTweetEvent { - - def toAsyncRequest(action: Option[AsyncWriteAction] = None): AsyncTakedownRequest = - AsyncTakedownRequest( - tweet = tweet, - user = optUser, - takedownReasons = takedownReasons, - reasonsToAdd = reasonsToAdd, - reasonsToRemove = reasonsToRemove, - scribeForAudit = scribeForAudit, - eventbusEnqueue = eventbusEnqueue, - auditNote = auditNote, - byUserId = byUserId, - host = host, - timestamp = timestamp.inMillis, - retryAction = action - ) - - override def toTweetEventData: Seq[TweetEventData] = - optUser.map { user => - TweetEventData.TweetTakedownEvent( - TweetTakedownEvent( - tweetId = tweet.id, - userId = user.id, - takedownCountryCodes = - takedownReasons.collect(TakedownReasons.reasonToCountryCode).sorted, - takedownReasons = takedownReasons - ) - ) - }.toSeq - - override def enqueueRetry(service: ThriftTweetService, action: AsyncWriteAction): Future[Unit] = - service.asyncTakedown(toAsyncRequest(Some(action))) - } - - case class RetryEvent(action: AsyncWriteAction, event: Event) - extends TweetStoreRetryEvent[Event] { - - override val eventType: AsyncWriteEventType.Takedown.type = AsyncWriteEventType.Takedown - override val scribedTweetOnFailure: Option[Tweet] = Some(event.tweet) - } - - trait Store { - val asyncTakedown: FutureEffect[Event] - val retryAsyncTakedown: FutureEffect[TweetStoreRetryEvent[Event]] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val asyncTakedown: FutureEffect[Event] = wrap(underlying.asyncTakedown) - override val retryAsyncTakedown: FutureEffect[TweetStoreRetryEvent[Event]] = wrap( - underlying.retryAsyncTakedown) - } - - object Store { - def apply( - replicatingStore: ReplicatingTweetStore, - guanoStore: GuanoServiceStore, - eventBusEnqueueStore: TweetEventBusStore - ): Store = { - val stores: Seq[Store] = - Seq( - replicatingStore, - guanoStore, - eventBusEnqueueStore - ) - - def build[E <: TweetStoreEvent](extract: Store => FutureEffect[E]): FutureEffect[E] = - FutureEffect.inParallel[E](stores.map(extract): _*) - - new Store { - override val asyncTakedown: FutureEffect[Event] = build(_.asyncTakedown) - override val retryAsyncTakedown: FutureEffect[TweetStoreRetryEvent[Event]] = build( - _.retryAsyncTakedown) - } - } - } -} - -object ReplicatedTakedown extends TweetStore.ReplicatedModule { - - case class Event(tweet: Tweet) extends ReplicatedTweetStoreEvent("takedown") - - trait Store { - val replicatedTakedown: FutureEffect[Event] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val replicatedTakedown: FutureEffect[Event] = wrap(underlying.replicatedTakedown) - } - - object Store { - def apply(cachingTweetStore: CachingTweetStore): Store = { - new Store { - override val replicatedTakedown: FutureEffect[Event] = cachingTweetStore.replicatedTakedown - } - } - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TlsTimelineUpdatingStore.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TlsTimelineUpdatingStore.docx new file mode 100644 index 0000000000000000000000000000000000000000..e9c5fe47c2eeff784cb6b0a34fee1409b8346ac0 GIT binary patch literal 38270 zcmagFb9^1`*DoB~Zfx6Vj3$k3G;FwI8;xz-wrw|!Z8x^h?tTCGJm}?hGLA( zNPX}kT&?5p@@%5i78N_w)y+`PCj~F|%wNxAJU8Xq7mp>8T9n)+m>YzuY02>XG|dUh zyj#=HtB)3RA(ErzpQ!N!5=B)Rt%gQ46a=HhKL#06oj=2s+d*clqI5DswM+MXe@wyo zZNkTe^hwlLJnLkvEu z<=38d52MStI@<|UU1`LvvepKgMbO?Ez%r1sX7&g?OZ~%!FXwbsjqZDgmS&WSm-$J6 zB(D2|C{o60k3S7nJ&A4tR2pkXbfstDL;u4AO<^>-z|&HQ-oxCito4Md?+Ee_4pqTg zrFP-yq)|2=t`EBtQBtqFoIvem9x*wu4l#XxYCoX?kH;&dmxFJRD>#n`epL^WuboBv zPOJWTMl$qCG}>>81O=$wvEN=ip5cqjKZyzSzAhH8?+cDSkmkK$$m)S8{8ty8+u=vzs(# z$H6}LV~QlRMX4zFNJJS`cKL^zP#kp|86xpM2F$=FNCs+2E@)`d zz&DvGJ&4(*a@YX-Z7T?8+$t^koudtH7Tnb)#8t5t@S$kdi*-&YYE02>Iv2tZ6%M z00s(chv(*Y))*Wpd<7kiTi9yQ-H(8t=dRa=W^UeG2T06$A(f z%76Cdo2~6%ZBZGwS!G7)c%g&Pbqq6y7FNWG^Is625nacviOXo78zcQ13(?B5}65d6uLp~yDH}RQ{ISz-8x)jb=dI1>f|A*14J2QDW=*Ws;-^> z^jPIQ6a%bds=7kem@2I6Cv^6&b5yNmx&6E zOB*SQ%<^I7;BVF6%iT(*`8mGq-koSBB_bk8fPH&ogBW)!H>X|>k-(NE#$z$)yqx$B zVFB;qcvok9jGAL+t&RP8mQ3iBklyxs7U6LKZV%h2U`xpR=beOYdFDCwDhPI1!)ZOS za$Tu<$aUmdOt*&ca1IX#_?swo#ON=wM2l~L-dogc4Zk(Jn3ntcQoa}@>3bxIXFido zS1d8w6;Ws{f|&TGRCJ%(F~H4lE^dVQ%4={9(6H;hmxIh2^aLSu{N*-Oa<8cw0rA@L zn)0tZj1?sORYO$dNdzy3M0j*YH0SDvhoXyGx^mi)nAse-sLmAILEf#P`v5A)1WSG# zg)h!pJ46rPaoBIVF{DZV6EOpBgP5+TC6sc69p#KH_7>e zGq6=XtmI>p2Uev73+2CbcBC`CG7(|_rt!!$n&Ddy`EJ;y z{BkIgRxK#XYP0#PMY$bS^8R4^)Kt;zo_J;kw} zuBh)Xk*Z~bn{?qCa!jRZ=Qs)!HYB(`1`C15vf#M8MmTdBsl#EvcdnV*XG?Ti4RU^U zJKKO~P{PujWY7~{p$*97XFMH%r9nf1OuSyj^@e^S>a#2P>$77mS_EhlW*o{HMWS;< zuCwGNxPHS7-|?qN4Ld-IKk|5u=Pex67cdt|rZmX3pHrIobK2vCmz~`k=pB{ht zu_UyGMWiYQpIvi{B59*Q4u9%L%Ww0@>jubOE zv~sdk7~xabaFf`h3Bj!eGz5(c{Ubx0f_Ta9$DY4myGT{KF=q{zp77(@HWN)Ed+!88 zq~^$NEd>6-k!1W83iojsgmb76fh3k+9c9Q&R+OPER1P9fLXngOTr4^2w+!QY^zItA z`fH9sEk-wVxo@h3CLS~Boe%4?iul^j^PNA&NmLI}Skek@mOr0GqOd5OE86!1nkxwF z1qvz38@Q15_=D}wRc3^v6&Kz37&wB16 zz>m34otYUw?W2;Al`BL<9$jYGpC;)bc9W$mE`4oM2Mza>mN}5zbHhl7mt1CcO|T`}xbxfd2Zy_l6$xvZ4>9I)o%w zRz6{JX8Pc2LM=%lkv$!KoKH!v5W^@x%Y`^bJ*E2;Bu+)XJaJ!$T! z$~+8?pqbr70wBc=M=*LtR^S-Mgi3rxBD59x6;l$*>XwgLwPw+isHM&J2ZNXGQXA?`P`UUIzq>O>6=0o^c)Rof^ZFOB! z<8Ip+zWE71Aai$Rt+wbB-pT_WzuGz0BWCBwpc_WZ^SYN9Zx z(DsDW z@2O`wkx)|PyPhnE6Q&60EYOR$o8JTipZhbFzc_OXsMSO=i#EX(379(RN{6wH7iPYn z$PKEnA5TzasXaP6OjJ6kv!G6bPJ}kOmc_|`)vLE@yr3*-x2cOy+_QX*)a4TC{l!mx zQNA)ejo&nOPf(OCfP|fP&4RWni$YMayc72GQNN?|>lme6`{rpxiF*j1x1*gkV~gZZ zd)8<##y;1@gWHtdLO&yp!!NlH{-vZgNl}*CcZ=(_-Rpd@?^h<`;Y#tTH(lXz@yp=7 zKIyl{-!1M0oJ8uVLyx6z3H&*LwsmjqRn10Gb*G;08dL_eDP zrfW4Njym|`!l2aDGPuOPIXspf5^nbiBicp&ebG%>0msER{(DKz$sb9<^$Z6h>1szV zF|e6d^vG?{Ve)j#Bh%JaHk-O6kxb+QbeQ3ce2r?Sw~t%;OmdcPGePV@l>rOA;kz9* z;Y`cFu$hqWk$wZ}3j)r4YMs|g&(1Eotx~CiUEikFUDq9vGnC1`gky~BpT8O783p8K zZIG%k#2tGfyeXZbe1`}*DE3=#Jm+1E*IumG$i8 zz4F2a9}Zo^SAXsZFl3C`AO#b&&t}NUr#gxW&} zct6{tf%(|3>4Fi6m`k^4vM6g|O@{I|_;oQ`xG*+$*;;)et;S0l%33yVjBA zSbX73ARv0GkRZtathIxqo0W;fUn8QfZv2i!omY2vUcUb8o^?zh$nca6NSrhNH;>M& z+6y*Ww%Ol5e`0@+KGXN1AQ2)`RZ>;^S{7Hw*O!H*K(nu&8LwjU_Ll9_VRhlHPZX8@ zcD~Nl-;LPSs(qpMQapKn(+=={!|~*MIyiULI?qa4eY1HxPZwMq2E0E-e>}Y`UPKiO zHlOb5K0d8qwI|QFzZ}jU-?aw^@1D55)qQ@q{%G3>V)9-g(n~77obEpiPTt=hUp;Lu ze;Yr&Zg5+(;wly-s_5fmK5>fYYYhJJA@iM1bbcz1@jEn<^y}_S~qw!7$ z*CPj4R|&q==zD1jdT|Fab+kvD1Y!HUy&v|Q`oO&1uD>~^>Aco>FL!Ky=C5?QI1f(d zI?v*gKmG91yYS|(%C=ejKp*HzifCEsK9f6KjRx#I?tRp1bxUO7b+u_ra6ZvI_i(yD zuuxFFKdv4)a~;C-lwJ*fw1?nR-Wy7}=`rQwbmOVPrR~7frR;u1{8o;a+85kB9KTeF zG;ed)e_XTaRfS=sX<_)9ym+{8=TL!FQ1Tp&dfEE2`0Yl8#$q7V>@nb@L$_*S`sHl) z+4jNiZCL95M)2%HAVX22QFngsvj5=b=J>qdA%mSRs1?6ZJ@TXfz_pApRY%su zUR6k#p$G#AkX`8|xUxSg7b=NzVsWw7SY} zek;XI(F&t~e_1#0WL`H|^ZyVR_OPsN%%NHGs zQjpbA9<)UP0M+Ck)fPgLyT(EZjPHOPVGy~-it&%>fGo)Qv-3M}C)PiALTr-*K!yKt zd{rYZ1tSEL8~jM0)CSl;vCr7!fT_g5<7oa$)dHdg0dfB;^=~SOQmP9J64(DhaG^*B zjKKY+BB=w?IQM@^{5MpL`*jtTe=_i>{}kqo2h^j40`!W}u*X0Q&+tDaG7!U1xxvHy zrFt&jr4gm$&r$yh6*!1COgXoAq3dPwifPRgcM+;Nd0jk#`e^!S5iPVQ_I!mC_e-Wq zh$(4la_!pmX+_swvUb21)0jK3YhNB7w|b|K;AhlMdc7E2f4OsN)wLP)5Pt1noN&(l zzT|qN{Wvt6UA^sEeLOE9f4F}znz#KJxhbgId?!W}WwXP$ER?7db-@vf`|)CnAj;r2 zZGb|*R!WeuIk-lAf9~zPl;MInxZ1_&Gn_4HeQFdlS36Vk>0vC^^!T0;7rf2}i>x!Dac4j-?k0iUL8wJsr&00#F3Z!$ zzL(+{+y%?)jgyb3%SB5(Idb8KLrBfS9fR^J0r^;4g!)oER=Y(V*<|Z`?|STz;ytZO zzkTA`#>tuMO7}oi(nC(duWL%~Zbuj8?^8&lSRton4X)r2!?dbc+ok#o>Hcr;1D8ee zhvTdpj)b8dQe){#U&qt8UgOHRAZbJwE@Y*6iCF7r-7JL@rOy_8GQ`l-$&2QejqBWY zjP(~z7qdm4kb&1v7+D|Bk>}Cf=h=4@i=Nbh4LhgwN9&hnuuY59tLp%FE z(wtadnC!W*%mmz4HSl%2tm(Z!f4JCr=cxu#F}awx=NsU*o4(HASpIk?447Emhmrfj z=B(}%6-N0~`=hJk7`M3TcX% zWZSo;(Y-ujSqQ%IXcZNVJ-G*KqEEIH7o(#Nd;Ksx@9(})p7Sc+%i2BvT(~K{J_sl+ z+g9UyJhn^6m?di7ydeE}Pn&C>c6q)XzJ9+R8gy@evvc!)cu)LTID4Kwem${e{?_r{ zBA9v4^g2BZ>HZFayqxaVA^@Sk+1{Kyd`I%66#K$quojqKa_-=OBrZEnIi7u=j3gO> z*VdtOo~6_(9RT=QHUIL8-ren~=zGPX^{OiN)Ij`%2zbG)!J@m1gKGMUXhrgA=_Jh$ zuRKXQZI+RvIMP_I-Q^%q^tXu}d$F=?25J!R64Cm1YjW#wk3` z@d>Mj`H+9kevEv^N9{6Jx2wF~9GP&5=c%e~(sqe22R_sSiq05y8a%7o-cz`R#K<$j zrtGZ@9IkdM!3Sz#m($KT9>-!yH7zDar3s&J&c?ugbcrh}!yu80{97F||EA#Er)JS9 zLBMTatD^mUev$4yEB@H^*s|4;Y{zw6&(AS>9p&iX6X>>ydAKX;jp|1s#V94I;iq#p z(JGxvk#`XL(!XkCy~Kw`%Z7MQ1(&JlXYi8PE~Ozj+(hk4m(NPeu+wV^b3IixBmI0b zPi@!+ViX;4NEh+zrgigV>4~-%31~ebG=*Pj5_lZI4x}*wQu68dZYKRV_76O~MJEE9 z+R=QG64M$Jl~VBcxY_GXYX-d3K?sqbJy_xgru8z#PCV|n4SxOXpWbX*I$H zBAfe`*znV!dwzdf+x;B6LeOdiE%!`pN#4Q{irQd{jVgWL6=!?1;S9^d;N85bQ!n_c zxPj`pr@NblT!oIF&1bEFIVI^-%1SJ`HJ$lij(Z`c6hDlP+@I`Pd4H$gl_wu1l18_A zg9MeZHuNrm;L{Mdow@=pzGu`hZs7gsA6Lg)bBSQm55C;^whUgpLx4WSxHrLPWu{_R zEXUnW`E>O6(spDpb(XBAETCI>Mwt93YcFb@tZiPFOx@M0r6nO8@V+=cSZl*G_ke^>wqTHgJ zgb_EnCq8g;(wyEUt~|7B=}i@rb7m;a(r@L@`dA$~5Rsyb`dY~?QnynAuU6q>nN)DL zrnK5B+2qh}&|bu~ETv_yV=>ASM=?y$O#UvxCB-K9b&^|{b+-WC)XJpo zugU7dafz*oi6VKQG@`eP9)v=c4*pqVF{*IoB}-YHyX8`Xhoi^`o~(~DBx`;g(_Yg;n>^lBQ~bI0yKMBGJfMcS7iBdYDA266N^C22Rp5wsUZI{cXKqI6U`r3@fxt+SOr?8DhM z0EPK@#F<%^iMLgh92WL^oCqkSFKo$osjU;0=W3o_n0)qhbTXI)C1uf_%g~CYit={% zMg1zxb|xGvBNoP`kRAKio8i*^*Bx-bCMPs`M{K?%6O-IEFwt-lr54$R3UP&}E9KG6 zq(X>iid7E`V=}A8*?9K4JuB`%(Bd#4?(rH;0H1X3wqJD}*FNQgStBWZziFCeKTZdI zuArVW@p=Ab2Y$Of$=ERP+_^IB6X5llo8uk7nt%aLBVa5@h1ajn^~$bBKeuStBfP$(e7%`9#Y68rda$@7?n=p|$hSOP2`A7okt#iW zd%sk_mS;N~wkZxPlPZCO+mHxYUro3fTc_?Tj5G zUJ^+!Ju->&eP>y3>xJigTsGTF#JU1zLCA)N_7=`jWGA|u!!4(i)uOZOCZ-ciC#)w8 zl+;#YKbrfjT@>~uR0EHm5LPZ%9epmBQBNpQ;N>1CUs12ry@mb^UYS3}44!4N0C;CD z*Kf#k)a|UZm+~f7#pafq`)$D+Vq`DmY z2HSbeJq+&(zJkw09R3qe6Nt^SH2~icD)`MGoywuH`Up`~IPA!p{Ktj_WgeFYw_T9~ z5XbKjDTm8UK$~7?BfuZsb-yNX!!ctQSR;UwN+Z1pz*tiRaNvtRo(;JSsWZq^zj%bG z41}4)6a`d;9!)l{5Be&5wC@)pwUSqP1NjaRaS=*u_ULC&w?UN_;PO)=)|-Tfw*y z>`1Tn42Msp}q9ceOJ>^WrtiOI6troLsxZ>zhL^SW>jk|_^3 z88Z>NL3C2v;&qy{oZ!MsVOca+JmF)A$}qEK_xwNG&EZB4OEIOfYptismes(#B$_cU zML^}LlMhh%b;|S_q?<(RGT~14@6x35^<48mQJ&~dKv$jKV%~kd5C7S|j4*Oq8YGLY z2mq#IA$Uo2{*_+xkMy~Jr62uC4LwfO~p?QZclD?XQAZ_(r=o~_6P*`d&b zep1LIhMZi6eHV8YV^!?$?$#Oks|0&vDMX>#!UwH09nY^LON-J8_3oe|&H8D^Y)%@K z3F9)*-5hDAzwku7)0mHZwKPXhPriixB#0}Jbgq15QT(Dvp~i`S&Y~=!gv)H+sysm; zUk}bT*OzKe+98CHQT3)xuZ|$G z!Sp%8on|WtEK7lDlEl45rL!d2D%hCMeD0;X{~$ELc{e$S_@S;ZRfv&;8ub&~;tjIX z+@``83SvfRYUEyT7hZ_~eD(CnVadXabN!@`b)t=FksGo63egA_KAWUt?6*Cw+h>Pc zi32M2Vdax+&zlA*jM5Op$%v!eDUwOc-DPL>GSlygv5G=o56@^2^g|_)<6!1xoDZ9C zpPNcn}U8Ky+qwOp0|#|7NViYB@v z9QnW5zJ>h{HXf({Pd4fiS3j;Rs>Rs)!|%n_7FrPGo8J>p%zr!FVSRvbAXKYbHjA^uX$%3p1_wi8Hr23zv& zvjVpQszU$E#jtUK=B2qd1o^7eid+$~(NjI~YUmlK?Q>a?xX^W^T4~mhfVz>q&@~Ug zXH^tw4xIu-2fnwAxKJP|F@Y|_zs$iAG|GziL}Bw!MB3P(DkNX3mAk_PQDK6v()>TG zNj(CQb>SLtI&$nEk>2`$X&!T!uV7U+CxD44D_MS<04o|wpxZOKqso@?(&U08@xz8< zQ}{N$+4=tar2||F^wvsS1A;=St`=OuH6sH=ledBrg6iuYExvhIJoTGl4)ObF`MX`~ z^Yv4W5B#?|uTFRhYC^ooFM4)ltw=-a0gqI{)l&}?@C9i!&m0Xf(QDfJ4{BANBuTwF zqN=LGf#9wzA>OH=8C?qq6aZ>-j;o2jgc>CIAMtUEOTW^P-t@Er$Fq9zhr|B^hDVvV~Noh z(b4}PtAlZ8KS#BzCK6gr4e zx4ouEPnjX-$GL(577LatLTnGB3?qgRGB^THiZzRgB^tXdXS@IjW)IC~68-yxEu7>F zSIxRz{D;Z|i9afpi5h?^ z`=S4+gaEBgF&u6^_GCUV7R9!P^OFR1dI2BtYxn>U@gp!IW(d)cQP)5aH|2}f#D*EU zyPt6OI{P=`DtkvMM3MTcMWu$!ewFv5sdsUAL6C>m%>KP!FhOBfR!^Oxfo2ccub*3K z7zu0ST*8N}h>i7=?NUQ5N*86Yg3e2~ttGtaT{tSPBNe43U9=Srl%i1!O;&>q(&`v= zPCD`4X_u5U04X)eZZy!JPPd;Nk@8mG&KFR1lz6X-*e*rn?DVU{j3&1r&Q>Us^AKwo z?x2N3w5{kfZnW5!TMF(s8zze*gyUF_YaevmP* zZ&lVzM+FSVbDJ$H#SIu+8;pP7$p9uz{hh@9zmpOt_ZjXEt_OHR9ncQ{P^DBLT3yO! zppQQe@IMptPpSfv)>ud80BzI{$VVm{+b#@`i&Z7C*!X;1BH~#0#uU`)l{g7 z=T62@DgwV=sKY{@)}Q_Dh^!$FC&eBnQ<`qJ0fpYS;C6C<#gpQUIayK{KWB4OC0&I& z;F_`Cx>8JOhFkolgmZ*=sxK25l2cV7{%OqjeeHtd9?B9?(isbLcS`hcy9mcz&t;~)Uu9= zxwv>)kHZ}wYRd6zbb;0aa*;Ie9(xOOwP-2nb zGemfzdkq`7hmhRXSU}2 z9AZMwMj0;s_Px?nADSzfi9bb44f$dO3wk)#=K;E43JpVUdel1G=5JEzwX-L2A5h(;vraR6JcXAk?|ri}q*A zF8tK&F^BLE@_VNdAh|O1U*yd!?C9Z){}1vR1F5a2sN~Hx`+t!48Av@TsXxN0H!EWN z>T~=BeWctP%hai_x7q2}%KzBF)&`eJ@X>ZO_BHSBad9W5vk0QN;DufTDeO2BP@6F1 zwUi@FyTYS3o9`prnOS*q<Svko82jhP`r!Ym4jpyjT`dKQMM)~PM zY?eLG9IS~=^(Jzb{kXI&pAo<-YuO3NJZG@Jn*P5Xv(r$T0_-?A|-< zYT^y^6O!-tpu-iLHJ$`~b}Wl8k{aTlVUPTt=6fbH@43q^>t1$JGL9!VyK=Ex$|GB@ zFDy1I#9rBvTvoUto%me~`g@uXn^=$kM-nf6pR@aI+hWB(J!(A^jSl_?*p0`m@n0s7 z*(>k5hT3KuR{m*HTKlB4F!XPe!HIuNa>M^I*=ha%XOdgivU|GyfW6WiXcE21{Dapj ztA&6t9~%>wFDm_;38fuA@Qrd^=<5E?^4TG1%Ni8}_^o(i1BN7~hL$8_@I2i?v-=>< z*uC*h#n(;!Z}v~F-WER|Z)6=xQ7R!eeYD3$_16_LrdJ=*jNtmB1xJIIi!-rzHl1LvsrL=Ci)4EUehB*cgx z`z&|}=r$w}t>X`xt8gW>R`AsyG$z}7sL3HV^`-HZ0r-;UvLDzj)|Yjzpc_!pmm(y; z5AO|Gwtp`)q<%y0g-4-5=>UlZ?}0~QA?^UdCJ)8lgS>-eqUP8=X4dm{L)eDAZ`RE^ zoW$zWTcFev>Qv?E=s6os7=*v{mI=fTlYR6bwVKL>MPmCcT=@>7BxG#?YEP_73>-6D zK^Y~{m`31FVD%JE;by*dfZX8p!OJkEL*I~?HIk42TU?~@A8|N=mm*h|Bcp~}Jilv* zSo#SYyg`W}|7@V^fE%bLZ%}$k=Qsa`oUSd%!n09=A$aC!l8zod4CZSIffsG2q~yjn zZ_pdH`AaaDV0SF09+whyJ?e9p^eJc~xutes@y^PC#XEz69`Unkf%xy@S!e6~qj)u) zR$VEROYzMAPzcu#zkiCqJ&s2;*#mB2piGrh>PijcUW$(frb-J9xfM6YB1|l1t0Fa^ zc;@NliyaAQSNRHB^Qqq@U%%H3U#_sY2@WCfVZc9Rv~NU)-==0Z3~}D$4hH~%#oT4_ z`feDxhFK>~QaCJ_N3)*9scgn+Y&NGICIkF(7}i#$#%Qkc;vVlDJKt41 z(j^~N3c}%6O;gRi_Z>ZOOYqkr z7pR+LUB!{8As4wzgXu41Q(>g*IQlQv9CJL`v|mA^;hkfi8*O-R${$7KJMCaux{;W> z2MyS5xlt{IQ?q+=awKTy`$e9MRHET5<4Jj|tke_A>^%BjwZ8lR0=t2y>^k)5lb4#9 z2CXat* zDHX&f^vUTb%)qO{Z?rp<%cVj_Q!PO3Q{(1|T;@}09>!(MrFc)H<+|g6`i9I;B><)5 zL^b#XfYmm0&Sq97kXPXVSiHa|SOjD;DJQ| zpO{Xa#)3~K$R(q`LC3*pn67r$7!l|`QT+DuDmI+BeyGl2qo1OG!(h6)e0T_@yj@Iw zUU9jyQ~Lz53s?i+ zC&=B>Q(MxxAXY&?VPVAK^5CFb>}o>H1vwo@o#pdw)!qBRr^cW39g!EWuRYrdJ(~Zs zRnyt-zm>4rDw{`MR|F-6{!u?$=u+L&BG&HfH?K=;uUXTOEX4*I%e8?{hXqJQs#-tc zTPdsWFhOW|pOSKnhmvHKNR1u>>Tc`1^?? zc^8v`WGbH?KbP5v%@VYFJ2B*`ZdOlw`M?hcIhF&8%-&bvrXaEu`3mUke|v)qYuv(ulbEV>-?mG=I; zEPGN4Qt&IP%H^qhZ*?R(vs3TOAHlCEly_@94nV>F{}$|@T?#4qx8UACf-nCFuEINY za%Oo_JGJWafD}|AQm1=NBpS6UCmNOc2e4~zbz(sDKYq%H1QZRzkbXmEuo<#^!(5rJZfu@>k3K&&}_deoL&}Yg4x~?tVGCR4=U+V|# zMS41~rwkI5Y%L0Jp11@349~-PS84Q47y1(crO5(IV$`u=(93k`8GM5Xb=u-U`*@6b zt8yutG8b?)=d|=XT|719%Nj@fWVj<&G z`hwwhcX+$Ffn$X0$4J3ze1?{cOGuO;XUMfJJiln|j2l%h*J7?OB?y7a2YOV&#@Wlor*!?b+*>x#LW@eRXSkRzCK(p;NApZuFn+M z!?HR_hb;>dq40E>3*}xcTl}ldH1qOjg!?JD&PjalzM(`l1J@8ZPO_a%z;Tmx?mIbR zp)k38havh0j9dWYJ`JB41`gi#wd9T^ZVrMU^p0 z*~aE;i%wN?B!_{)juEdWcx3D(Rd^7Sef60`-Lfm8Yu9BZ8eP1Z$>31YXEmq`z}Jci z2sKLJ{W5VhPoY6EG|_xw%s=$vse`d)a6+ykLPHZ;W7*Y;f&LyB$Mi$Y&;;$6qj*in zK$mfGd<>VFxt2Av!f$Bob;gs`48U$I8)99@%9Ijm_FH_ZLYqR3a(XQ6&DyO3VdEf4 z;}a|0_+8bQj1W>n;{NljDO96oDYmr+2pu|3qDJaeg%!p%t8*vAszQxJg$%KCXrfa> zV&v=9h-o(Rh*iE+g$!xuK|*>u8e{UQi3uW3ibks3f{>9(*6FH4EK>VfeO=I@8{3sO zgPF+*LeUah%CNy!reA0;F&hr(E90~QL=I+P?+7U;&}Hw@gu$OFpt1CKT<{bNj;4e> zLJ=Rrkmiy@@*)QTw9;L2@7_PDn1NI{5r3$d!v_twYNxr3fHqlE+?a{ntqe!nRG;;v zvJx@*L~k@cbqKT9vKp%;ojxa}`sz^AjXOC{A@CX&>NR{L@u(^LLZMc~LU+^IgSZs0 z(1dArsF5o48;$Oiny!B6+-jm~gca{6usxF1Jo^Vlf#dsW4+ir9149#FBLT=sr)~ls z%B+?mR!+zZBY00%b>nTSh9=h)6-&e!!(&@seW8gY^{k+Bq|;*%TcrQlQ7}PU&-=jC zH>gTrWt+YVS5)v-Se-|$f#SKdyr7`}2cx^DCO8zOT2Va5PYq4xhYX%}HYgxtd?Mt{ zV1$Dl@2Og7VrWg>kr<@_X1IRPuj=tBn>_tYft=E-qRmFR&xONWnw2@trGROxd&j=D zU+o%m5s4053BsR)bPpHX6~(4>_SJ{mC<6l_V>QK4Lxyrh?+&ff2Z^6CCsa7!dpTL* zQ~HQz@EXT$Fv4KV@NkN!?E_tyC}Vyi$NcpCqU8?@feu57A`{b8V&(x_Oy+AN)SLd2 zZ$Rx`?j#ZvSCwX70s<(NQpm+t$PMBQg}{WNMNuIxA@=F9MDd5bS4XSRnWt2Np$D8# z4gwnGN)&#bFd$-Xd2PVZ-h$JzZ?=~M6i6a)d`N3A>YYns+H(<9sI6ovON11Ju}ij| zySUJ%RINoIeXtPtIl+xKEHV{x3yPI+X?yT!QB{thRlavg$!+HJEoC#}hf=yUiUzGA zn&gP&B9jS2`opCOK{8!ZW@Op}MbN6?xPh7pLf)vI2EtK93j9(4-PjMv5n;*^fzQNy zhQb81v_f7gPGD9aSwzCL=Thkk4afl#hSbgR$BcE_)|o%i3QE0zZhEX-fW`dkoL!s? z=6T8^9Hb`{gw=%pfJnPEHIQC=S~P)0^)D6h$bYK{>bW71D_2yjvT&;OKa}S|)Jbg) zL&AJ_TKarNBJxU$@o6a#VJz*}9PoDmBur)LF=8ecC@?VzvNk((XuCwc?NC-C$>}@$ zVB*tMRox`Pm-z>CqaJe*tdsjxSt}mOM>i$kBZ(*jj?{mCfOKN~>;c({6v-93GaWh7 zJxM2l#Y5pNLB}hx#i9`m1!1+cm<PyP`3Fe*UqIG>faZKAI=v-x-^~_aXd>22 zO~OB0VaNQ1@VOj#ZLwprLZ<<~_ajxJUWQGTfV<3$3B-V*nG3^6xQA;D#yAm_(-JKB z%Lj&p9~(ivOFpxQ4o)NnuB%1|8Mvh&f$ns`8fL7>sKf}nk}n{Tyg*1YSFRwZNwtI@ zn1@>YO!Bt_17xbHgttZ<2ez;oNnj-gwTl&ALOb0F87o3CzTOKL#e#Vfk&{4*z&VjZ zHfD;P0rR5QXMqkrCU8k0H=VIr2^b?J;1EC4@AxG@5q%*4_qu%p zH~(244iFHBYA6ug|6aGRZtnP9+|<;>$nozb{9d}r`4V+!FHe|_Cxh}?NgyPn<6cu} zU_*N2yH~0Aj{@c8bGm6&aVKACn}MtNg|dCoMxrH00?)itXoNn+w6Zx2BZWM^`@Fll zb-j4Cu2*uNK5QaMM- zT^;u-=zd~s^}F!)aTCz*C~doU%`g7o`7j)Jh#$@lOb>2O-gozD>2z7$cd+kIzdJX- zb3fx+UWkjAKa`*);=ZZT*ALEG$q8N^T-@`iLcCsk-@W?6G(F5$ZDYs1g%jHlI?m*3 zLjt(*q|&_fN<2-oI`mdMUF`;N0jd`l)GR9BTHfu==`^9lR(K;7?`NDXxNf%1uhL|4 zl7lb2UpqFeu!*wc`M$cpGK%lL`Ft#{>(+hdw;}A?FCJXI@lGb>!C!r^<0s%F?_!OBY@JuO&>&Fb@1 zvucI}T|PYj)}C>)Ga^%~gZI#`wy-TV|oj_))ohx*UUjYDw_ps=C>6 z0t@gW`_8CW?-I+EN=SonvfcVHN_xNDf=z)<96*%BR8FK89X)>c^0NKZcQ<=t_whN5CcuUnDQ7eiEC_iN&K*o?ELVEwGU*B%cACuu{ zz&@_>;;Lxmq-Z!`#=`~-Q&S(u5vJ-%{hEm@n9 zb)VX>N zCUT>HrU36X*(;v6(Fgn=!rlTZj&17}#w~bocXziS!L4y8xVr}n?(XjH?(XhR zaCd?S2$0w0oO|Cr_y6Aaj~-MHM(v(!&bh0q*WT5;R_=ao3!NQ8l`hx@&WGRX{8gJe zQ=bNVV?C4mqLgfhm1^S=;imf|5+d#RLaPnP@IA9Av1xI4T;oFPP?|SG)@jfgnsgrz zchzm0ra7n6FN&K@FI9}`IFA@z9tp&3zUxNVRni-_a%XD={4ha63Kbp$H(p#+?@2hV zqtgpB`G&zHQ7``ii%h*1vSO5eJTx#~THI zZhN%v)UEnD&dVRq0O>J#Q2^#IS5pY5PP(E6S%G3z2eyRvRm)3SWUb0a$nRCH2d7tz zPA}3<{BZl5GA~Oobs2tYKiWmqgno>RxXn;7YK_>o46HioIv7_4iVf)GqXyVgNRyAd z^neyfuuvbpPe0BMMvs1^-G}X~vC<|GL?vb54(ji~9Yhzv9WlTiHDWE0cK?RJTY_l@ zc}>IZCf|K;^si69H*%e{2E{8Xc}Hn@hyR1}pAG&K<$q>@#oi2Qmy-7#j7w(L1{4p< zycq=1KL7~E{tvEyQ~C~eN{?a-Yz7N#X8Cus9$T9a+f1U3?>HM^T<~-6IRDw;KQz~f zH9#(Ck!%8+p#qz|OGC7DD3^Rje7L=d`W1LUe4s_~QY{(Z0pjJk;7u<;-#mT~K72-x zraC=MqnEUcaHm)Q_X?uY~TEK z!cYa>)NT}(RYd^5+bZC^cZNU^v9Pszpab~CWVAJTkK0uK8Xay_@z%=FxpRLL{q1D* zXz_XcX@B+Z#k_V>+W|l1Hc+Yck}G4%6D9TK-niBCmAke3YoMV(<M9Z7RjqOrMGH9BZ8TIQhfo@y=cG=D`-Lp~|XJO1!pwc~}Tb)-5f|i3rsET`N!q_PYF6ejtZ* z3O!fD?0%bzRD=25CUq+UIRKNTOzN74(i`7J>T1RBw-^{Cv?C&BhBfoqO%vguRE$dQ z7ve$all)Q}mZj*cFj&=~Fbg8OZ>myM>3H!&Fuc;llYCrc8C-|3{gtY~EWd28@-E$I_lt2Bz>sIr1 zes8Sqr9nW415c)m;iYBu2PY#Qy$zD>!vb4sl*)CN+_39*tCz=9%X*eUY@vO>uuW22 zEgywVE`eBT<^Itm_mS#qW!CiV6lNpj3&n?1{RTO1`Oa~|W^Q@bvzngWo2w>iJLeD- zOmQa68zYw~q@$3tFZ!Hx=S>rZWey(r4z`u-nU+&FM$Rxw$gF@*CU_1LT%U$yexV2n z1+?75*pH&@f)OvmC^(HrRVy(=-@8ir3%HoIEMeoCY~3oY<>>kk^Ub%**Z2RJ$Ga{5 zI`$^jSYa7uOyAKxaY@yaoi!a+X^4dllaj4(E?$f4| z_Ol3JW6AZTrGv!FA+{NlZu2}NIh(8S!{Nwmlb#N!4u9>j>ewz{WvbLtMLa$viU)qz zexwP>p@V9_g{Musmr&7d3aV{`yrjYXgzJy9mBiHW$uHMtx~zJjU%6;}i}w=y=C2zn z?YUQ!{gP}74Q2d+>%i()oS_8H59k-8s<6dU?Wm224|Gp#h_~I1Xcte3D2vi`pRdPr zYJ?VVSW>&-IHJ7?Q0G|NsXuv4s7-GPuW~!tbn;{M-F`RjVl=JS=YoB5uFLIrkIppt zHulNXS#FMAJ~?;qa^(h5*%vU1d%8@C;U=DW?}PUvmlHfY9M}2TD~~vreGADsQx>TP zXGcb$Pf7=?o4;X%cCUhR-<7_j5;9B(zpDMDMmrDpH2(OeQ)eii|e0s^w-gSen{}JJvv^fSh2(ZRIY6y%YZ!Ajn!68joo{U~JA8e@*)!>qFXkwi zGU08sIMwA@Y#3!+D1{!|60CkRysp_u2;XEpIYEWpy-~vVQ;^lY#3cOM>deM%_h$dy z_k^{}#$~igV9H75Delx9TS~7za0H7NKt~0bC&Vnc{Ko>j>Mj1n>`<4i&e< z=Qn%QZ}%y`$isyD8$ZP4$C=XzAg^EV_U;Hg1hcgDcwa=`DCG2e+RIx$ck*szjLY|( zpWJ%15fD3HbB{kG52P)#@E^W0k<^C}@rd0YW5wnhE+9FvrR@pYt-n6o{~R6O z_%Ymq8~^h&^2a@QnTSzlW+;j@X;NaC5XnzO6#G6Yci_lD#>U7ZLk$GjN)ARczkK06 z;_+(mFQ0Z}p3)+dg6Abkiqo&_ew09Ay4SgA8!Oi$bz-YmIItwB#p*wa4+;-PhgENZ zoj0e~RbR^;8L7brv1UgqmV{D~<5#cXCc}YDytQPIpQ9u)lDFO=4npoK1Lpx!c-7Em zC}xapb5)BSwVv-5<{wX}d5vROsiR+IHiQGCgk9qHbjQk5cj877Bu;CkhJ79418_6Z z&N7*WXBV3c>vR2KJR7(I{bIk>miMV*$8L5Mb}{k)OY!0oe^KJZX1_x)Cx zt`vBFrsDMNa_;_#Vbv=8u^qxWLhoyV8W$1V#bPg@hOjqk?xwCS6+d2}AL! z*MU3dN!<0-_u`Y-2D2}c$wkFTq8DQxZ0QuWWm{rkLKe?2j=@3u^VCr37kds`u9&AW zfZCx+Y@_uI&)sxVA$|%iWy^r&gEI5Oj3R}~#6=$L?*~XC7cWI~Q`Fy#^v}C~7<)~u zm3o&nd(aGPJY<;`Ez~@NZGU)lPQ&nd85(-^8-LoC18WY`^%n&2$ApL@GI4!u z+~N99=c}HMMNF1qw?%@mwvs#TyKKCCT8J4)frk%BoO+9J%juP0JKejus}W`(I}$bp z^(pDQ_nYIS5qoG{F0Qv3-Oe*-R3UqgAg`cb8iTw0!BY5UK7rB=$ZxgGM#F+*y)~_0 z{*aW{hHgmmvD0SBVxYU)acf<{X!X1~Dqg%5+LrwNB?g}m@o-hc{hW%p-ClncOTI)Aq4u?!P=^1Z`Duz%cx}4#J$TPR?^h!&f80P(;N-=-{>$#{e`~L!f+ba z1&Zg0boq&PmOi~r%rMJE%N0CM{aj&i6>TGn+w1Cl@DP`>=3XCzJd|P&3ve$d7aYGW z(|WAscV8kLX)(>UGyTxwu(RFXlowXTZA5DaA1@(a$JMK`hVSb!BoEaDWoxUEzh#J-lf21ba+5VCGvuL@4C!$}HP5;J%@hjS8 zWMRMH_GSdcdb$`n%s7a|Q2lm7!uqPBRC*{gFy2gsRGt_<>)|oFwNIu#$C--JY zxAN6@^tNW%7PFyB{#;~lOC;Fs_a0PuYjJ(Nacg&zZp!rF2;N@zYe~KZ`(9_xl-N9- z#fuP~-WzU?!GLvL7ThOh-?!?Y$Ik!J>>gMc7@W#6$C~Lg!sb!+Nc6hoiC$? zpiAeWu{T;UNSQ@kT4qd1z@pzzX*owpyG@_n`B6vXqfV-4k{LdC4(=3-Z0B(wZ~Yu^ zKOU14V#7rtC>A}q@S;|^Oi$+h5>=gTvWMlZ9&o&ihH|xZ>}VJ+2Yhgq?Kt2Q*+WqC zQbDt7j}|{Rbw?vb2m4dOGLNDrX9iok`)pvdNnvvkx85n*9jBd2 zjgv}!L@XZY?+;5L5lOzer7{OF~7K4s=8aIfCo+aHg&Rt%+=0JX2xsVEr|o2) z02MwGT-(I)nPp*8?ra>}zt^yhBys%I(Rgkgd6bBm?G}xWT;OlZwZnIx_rZ2j$`-+~XNG&GsToSI0Un;(_TtCdqG4jP3s?1JhVjSv z9&TZtx1{-NLL5frqnY^^Tb#6DY4a@U)=18?R|ad3pEa7VX^5M@ekBijbF2}Xz#`8L zCBuHnxKIs0A3b)W`}8|OXXNFe-zJ+IuYy2rkl1`(|5VZIICm8`Pa_;%oI3X*URf)b z{myzfZw&IVQY>*W>O`dMdgXd#<@rKO==h!(E&7Cj=rW*B;#TPShXJ*gAf3m=N?u0K zmv-eMp)3Q?8hjAk9*V8L!bH!kQ^1LH!eS=Tg(;)3Go^4DZ*7O|7bu8i#D(H9de4|A z>!0@*)J%#r_vuRdBIQ;q08l)bH+q0RntVTe&>hkVp;OOLV}TMe2#7E%(*WB148k5& z+sfE-RdD-hg`}SNJM6K(Zm*YCiDVekV!!BYwYPy zltVyzX5itO@7cnHIgK!#MhPzfA^#Z?8T4Nv&sI!Omf~0;F_@zTwIw>%8ufi7vQW5E3ZsbLG};injXo5qh~71+KjKPzk`s*xh@Kf# zP>%blxB?eYZCSC+rP z9G|d@T{1pwmiUEQuT|hyitO70+B@h!5AqoT24y7|)@~YWgI4t-O$CPpnKjpOb&iJV zrrH_?#mNZnHW21KwJ)WY{@nvQFQXYykL5T(APflnWDl~ETt8QaNPKu@h5PA2lnbQ@ z2!us0cccRrt>C6f2nbO#;eMMi1nDMnFAOo*M_~vZru1oP3)N^iFFz3)X5Xbk)KJ(4 z#&|KA9Jf|Yh(0Kh`h;t2!4ME)FkUv$OYD4)!Ll#)W0oi|sWYus=IB^Y%NzkPJS>6S zmMH41fz19|DZMZ#>MtWX;15;gnQ$l|SZTh*C0RVPbW@Z@-DzXMqv1chW>FIYr1hR? z8K30JO&EgzGXzBt%=z}Y--Yb^NePR!B@jCT*>^A+o=5M8=3FT z-7lm{Uau`lkoLX$F(FW6xbbiZW9jjsAIG%fe?16}5%hr^27=P?{pk1Y_sQ->A$+4n z{53q-pFF)bsnr*Jo3!RpFXzC+*3rP$)xy@H<{}0=-veg+}v4_;X}o=4j>NK(@}qp3~uU z^-FI#=Uh1AGU2#dRc|SnT3kJIcX&-qZcfO$zE*m?DrC4;07m_iKfzURb?5{vXFt@? z9^RXNa&dhfa((sX&6blom2OGIO;{+ZHUgN8tFchk?$EBr-#i=B_nieVZ-p!~3XtRI z8fmJVr0JSP?!HB6HQAuxUI~PG!XZN4|C2V=CYxxK845rbzsuSP2PhSQyohNu0 z=yO!Z%Ig&Q-KeO%oca*ke!l50qv;;cW)%>gH$um*c*I|~=pLKp0o+5X6 z#do}28}Y+@dVpdtThA%r_(txiNO)h0mGD#`H<-2l^)(J-=N^bRaF(2n8p+5)PscjR z$Tl?7{5iJI(^%Jy^Zw2G<&bPR^PGcPbQBYmi*VS<| zxJQ70Z;O%t4J{{CsjTj3hVnN=bbpou9_8~>y0f<+Jta+ zMy7due`|c5FR__?zq_;lf%~by4uM)u&El)#l*_hIpFi0>QR}sbFu#U06=>fFkTQ)* z1@KCgkRu|`UwccQ)IJIR?FVWZq!QAY85ry6A2B7DBtX?78NBd8l<^JR1*YOQy^DYG zW)%FUSvosUUHG6~)NL-?#Prs>G``TA1BzwVptIxn+Q_AvDAVvQ3j~cSM^G03W0~EF zylP8;c2Xz21NJ`4i1DlT&LEavv=r=Trh3dGGbl7H@-+J{O)(83j6978mJk!m`^Csp+ofR#d~!(s^Kuu)bqFxAuiI_Yk1h1)7;K z$`GdsvDG_1oq-ha5bqr0n}?VjhDak%o`OQLAk4y3F-fuQ(aK%QCs78Q0Y&8f!T4Lm zsh}|1y9gkw|6N4nfJnV`r_Nsjm~&uf;b}VvOxE&QPLU_i1F7F>xiEO+`zTYA;dPQC z%ue9h19OZ|J%UBVX`ql|p(b4^W-ioUfqdTML$ML3=?5+sh(#244L^{-fK3pmh3=x| zVPpR##^L`d#!QXvmw973b!w`PkRk=^FHKF}Q+0wm?kmhP&Fr3RTFXrE&Ph!z?C;#q zK87sRjfh{WWRhtaHr8D0H-F4=*LtW|ddarmy}pj`3Z!2k)f?GM+M1^_{a&?c9Lb6R z4A0%lodizk@}EDX_V=FJFNS58Aeao`(hKV=I@AW$a^eS9nA+iN`lEZSmMJKs>E5gf z3tw^z3c`a)5^55ayFFKLH{%mhdz>#Xy8nLLjGX)`()cL`Ec<{4(tE!#!FgNA?gM6; znB50wF1c@ZN+C+_y}MR~WSC^lC^^1|G%R?RUQJeHLe8K8V#hYeLH20O;5tpHI+4)@ z0JriFt%uZ%qUdV!n|*;r3Y(wNE7$9Gk>z!!9)#S4+;Bm0sH#ckcP>rG#ZVJ415aDcJN z>xdThZ%ijel2I}G%)lSq=TqS^Kjm7|9xVQpI8A773z5pYQB;-(J)qY%!#SWgs+ppv zB>+7*up&&rOn6suL&JjqmkKw~023XnkbX(!m$#c2c^AdMbtvT=0d>4N{!7Q(=z1Ls z$^SyaIZq?Qd+`2QK1osM+aD`Fro3D6p!hF{hZ3L_AO9CChV=IX2lt_lg6raMEIi5F z#>TH#aR!$yy7b|jKY4+;RK~p0rCZFTO;~VCMKoAjw?edcPi_1_)16p-W#6g=a7Y}g z#F_DA;qcjlT37(|U){E`tEBv`6pVTXkPWSIPFxg!e|rOOJY^cfj%+D$BOC6BFI=ZF9%o559;E(`S}R6J zUya^ScV_U8TH&kyH|iixV!`Pj)Y_of-nlfsyG#sAO)RJoc06PY$%>s4)opoIS|4@r z+MohOKdxow0z`khRXg9FOSoWw7fmIFcX1_%Q<^gXA;CF%4_C1^-P%8d9OE`g1`umFh)xFqbAP?N5#l zU>sDUtKI~izb*xI@|S%=dTJDR{4&^A#!$)ejqYyUb67Po!3kC)zfB~P_~|@u)m7B< z#U!ZGK0l5h@#lUT{G4}2yybdU^UNDKb&X(ET8=n}gvLj-1||<|SbDtoWUoOPjhk7S zg;E#+n1RIzlY1!M#q{J62_-bbgq3t>eUvbO5-=iD(2w$^z>)lDx<`cgM45shqOeC= zsx){SX5>~Tp%4qN%!pqx=OP-BB^IOBsGF!9t;yQWPDQ4o*>2 zBRnVUxm?nR#^g#^3?2Ott0XU0nK{CAFLnA;uT@Ui`}K=Pby;{+Ni@uzDkp4pT%yEa zd+I1YZbI7To`gymJ#k`GUXLM7=K!@JirZrk)x3Ne-R5uGXK%gfX9*3-diw>poXu^izb?R-TYdEKp*m zQc{u_{3mJw>_1V75QE4G7iuU{5S0J6K)VKLLF@;NcMB%l!{VQa?pDILOWaWs+|?8Y zGZxyzXrPQYRg`Nfe^%wSiOzmSC;!8D5Aq#(qdn}#5ng##qKpeSFhArq2-?zbRS=z> zKaNMGVoD^rI1DZISP;EFd3N769m?N+l;l_qNEtX6JRxc93ZxvLC;nfQNx=R|nJZ=5 z#7bu{O^-ufG%}h@4xO9dH1{#gc#elvB+9^$n?al~BMpPH;l+BqM(u5hyoAPkPq9O} z!A%HtY>^Mk6x!iJg5JU*LSY|rcAwDH7NPibUnueu=Stvi!J2}Wpbdr%nSyFhYF@ZL z#te?c`nqnxRZAcyG8*TQW!2j*wNLT4s|lpv*AAd+_|hZJstDs!V3!}yvlG#@XF))T za0vyZ6=`UXSzc04@Wv*bkS&N75-1lUDf@HSJQB*3N$1*>9gKY+jO(aBurVg{YpnQ~ zbs6!4BU|&tzD`N3Qbc5?yw*Ym;KFb|^U=U?eil5d{eiFpwH;fHhA)yI$2no0XmdU) zAVsrj7jN(O6qNm=9K1eI;XE>+|27Q4ct~A>E5>f@HU&`(yxK^?9xg(NWU*54Ofl6O z@_VwR5$#Ne_NJyjc%He%6TD#GiHNG^NAe6;)If!i4c!bjLBHD4v3k#1$jrusq z%!@T}%J}XSgRpIjA&|a=Z@|3cl}J8Q)JhghJd!%m&We(FxN_eP#oi4nqQI6Kw8@A3 z62O75YN^R-%j7Um<~JO&K2}e4QZP0ilkub4Sdw!vL0Un1-f{u{$rdl}!H- zoE$MO&Gq7$O@s-!{VOaN@6w%GTlsS|M{$dGKgiK2= z52vvbY=Ec929@B-EOEEU3-~BrtA<)=^#Apl*R{_Kr%o76hF{M&z))_(ToE=n{qMLS zDU;C#N91@>cwA_uwneG)7gQV@^V~Pb+>?A1o<@y`LLU^}gL4qDCxvGM))i@uMVx96 zIKf`?Y1v!UjJ4ecCG#N_@;44BQ;TKk%p1eg_F_|KJF6t!F?m$gok`T~;OkkJAWAD8 zS(A{DtmQO#Xj5u~Ce-0(=a#6~2As-3cy{{q{B8<8bWf-yAdOV4uTDca%0K4Dkyu4P zc^{2JeDb06zauQJx6VOCQpSz4=rn;ZUj1&8{Ml#cF6uajbjHq0{O-Aqgak2!i)hy; zM7Ws*F&B4;ymSS{5rkKGqF2yDrDQELyFP@6=yc{wGMpoZeJ}=vviC0H^UtKLKD1b9 zX{N9haH>ETnCT%Qyqoro5Pp#55dIYA?u9+1D8ZK<#R2SV=mA1x?;JM2M}N@kU@F9o zm{(%_@)EvXq;1m>fd-kXL;u+x!(Us70?}o2Axx$y-aQ$Orc)$uK9BwgT%s?a*UcRp%cRCTw;Ism5CNh$JsvR>Z;-+n!p|T2 z?S>e%2OQdg|5u@SGZ}i74iobEJ_>Vi`MiJfz4c7tqcB!*yjh=i$)};uk&oby*tChLS=@i(acrZ#dm%GSwTqO4_MI4SpqB~H4(Qo`NFnuo z?1%ZwF~OJI@@r_yw85tY*P}q5-zpG)Iff-v)uG3cT`$0Ze|=j*6A9ypaSc78;c-a! zPHe?T>0J^Nem+pP;&JtFCOB~v-hiQhYVq`a^pF0xlG#UL;G~yi4%hS*P_TgTOD~KA zdi47cuKSx8fl48Y{(En5TTZ{rxrWBI1NO!)QjsB0jy&8eGU8!ARIgpJYe9f?BDMlsL`bR zRy&PQWRloI9yi6K+n5T^enC+bcjs#D(3doD&Z z>B@NIt{Pv|+N>T44ipp(>$~Cy3xpk}2M2{5K|g-TVqX=|{u14q9wrMcF^%rWJH^eK zAp!pGn6J+C+f@AuO#=!KyQ55cY864{@M_pqb#!(W8^QR~k>4IXlI@bP_g2hJSMSBI z6EYznE*+-V4>)Q-f?K7*VUt(0e3hNj@BziEzVpCSilf+#9}9u6Y5v?O_#=Qd!-Q+{ z+e+xS;cL8RBT=9Eb;e@1)7GxDYkyFHULtg!^3zg7^G{0wm(Ufiio|cB7?LA-E=A9nv;-2GXHk^nfD26t^PK0nz3J z`^=k6iO@3-<4!X;0jxsC0Io^9v~=e*H>uh*t2Qq zb9JbX@OEkKXKc;BkX(~ra3r`UAK(j0<~`M+1v>F%$Uji8neyv8eeIIkFq|sd;+QgI zxH_8Gu~&*2QPxd`1YE~01U6_C1E}^V4P@3mZ;dM*otPcxl$v#VVHa_$D+J9>otX;?R z2Prj#8po{RIXE-RqUoevsSzvng-xNh)V6k}p|SH*S2X&Z}IwDk+DL17F5@NGRmNIdKGR?Z0pFRP+NQ<@i;I}u=7SV$Ogb5+;SbuF^Na%Mf4#@6EIk!vs%%UAwkbu|t z-x4Hau#sZ&ii))|q&X!OFp)WSx%N1|A-Hr^C?QnHEI7Wvn=ru5?F@{25ekrUF{bQkXnp2%aqj*)AySxKJ*>Jyyd~0|3pm!zDyq_QjiL*6Uz9{d@Q~F2B2L)Y2O+F1k!kXFhog%~CL{e|c}yMfN!6+uA01|R$?7~<_8 z0&d&&`w1kle18+5IDq0t#~!t3%k%&fm6IVW4m2H!oll<=CMqT>mJ$;JI0xMC*(t_J z1~=xa3jxISwc|v5o+KvY=G&CpH5{a3O)>Wy?1)Fq32(FfGQwK14ZkuOMv>i)oBknH zc8lbb;g>;!4avPI1jtl2+uxM8A}ZdY3o}Um%aB$0cRql=hFU1WJg*EWf8Ih?1z)4|( zWM&WU2TVWChd@p#%9)x>Zm9StJ_FNPsIP1-A1jTc-+w90$BOV$o7gosN%Uuiq@HoL zhnSro6*RnJyeq*t7Hu`ThXjZr`Vc58W!hGgDJqt)hZ@mJh(|XU187JR1$|)>J<- z6TR;9YCwC|+e?CQB4VkrzmmE8AQ+3BdD2&qUSQvGqFT1&P;RO3IJpRKT0z zs`SuKI-w2n%_P?PF7e?fiTDncL9(mff2hOudsion{D0M1!2{KC!F2k(o}&L7%xM4F zG1jU0FCZHXZ0Ot72-((ukz%2{x$%zAeEI!f^+EFm#B{sCK|qdR|D&3oqp_2dxsB?3nD^IOT%$HyIgGbqR+;Z6cWZnt;f&fgZ-`T z?P8CgU60-(71SM>;^4rurBSsoK9st-C$u#N4#Ll}l)Lt^l=CCt&arZ+a6e34Q(o*s z9~DxF<$QhQsb-1fLOX(+zLCwrI#ZHn*;4cK&prA(ZhNixLOM&tJ`NO09IQj4z*R-# z4$e2-PU4n(fXff`+P#Uhi~j8hho6dS)fh(wNAL+ra5ziFlgy-}4LPwBT=?c6V zTp;1GXX~gRU~nNLxZM$@p&&9Z<|8TaQV+-@Wg#sUS$~OytxFwjOy%VSj?>Q;G~_sn zO5HWZ^jVB{=#c+Ta`B~GTp3vEi^1o!SW#FJn44R|(G*8W+$iOUdA$}ytZNdN*o=bZ z!3Z#{wJqt6LvI1Ike%+1&Xq%5djJrHDpi_8%2kcFeqtJ_8OreT$5q%^9#Xtpf$w27 zy3zq7(%zqz2ru^cgAX}NeaiM@$4p`_Q&qMs{UH(<|5V;fF}xg3TgUQtB`S5M;=j$2 zHCcpTi}#(hmkrRjPZkF;>SPZG%jmD+=>Zp76?d|DgT@jWcYbOF#mTvI(=VBxZQ9v_ z5J$!zXcWG0k>=ca!qcbJ{EMJbfIAJr)v}hTV@s;(f0|A}9E})VNa9sXEl+WKX4! z>yoat1}VX#wKRNP3wGU3T%Nvcns?(4xaya`QKH)fo=~EHLkx4^(eg3`dSC@tc+~R| z342Sx#mSWCYegWsLYc8=E$or77^fC44{NwCdRO_Rcx@;TokdN_U>cHQn}I?*?_J%< zc+_2y4#$OYZSr8}`P?{zhsLgPXuP%k3wzbMX@;=3(@mq1%w_I#`LH*#^Z2^#Pg(0i z-O&vwjti4bRLF6cEmA^b+G7F`)|J95gW5@SeoF9sv%%31Iu^*28MlCRc8_0?Rs9)t z?q|6qNsq5rLoKPH-Uqvzz?M}G``qyVPSF??)04P)$`dhG|kvkAMJONQ`0mcC==F1NqMd zslT{$91Ve`fq%h)fS~@%F%w`VY-N1|t3UODHP0 zn$2J7>L^5LXj*>s;Mmdifio9)?(-5pca8@cQb#@^i~D`tN<}$XZ(`J(H=$}#O=`_7 zr}*IMQQ^Gq^aVWvw!e(Rpf3^&ZnTCY*9e*a|G&LNgrOpx8EhHR9 z7$-)JL;`Dvr*kWjj3vsioH=rF%-TIgibSeVIf5B8OfX;0 zZhtLj-?05`wHHfT^v<1w#*Em6Ev=F)!%P9$u+0BjDqT-9xt#7eEGiYi?wttLRi)aTd@cQFMPX|0u&mjJZqCfODWaqVqgtvR z&Idi(#u+wQgC{3DYxDg`XVP z2+n{k8%M(ahCu$*%-qhEM`5labXFJ{GB=V*X;wpLmT4n7gJ?F=4foyP&5`+cV@tR0 zM0Ym7jSPI~%k&Kes$^)z7%r0=Z_I}IO_D&9&bG3i-F|PQPcNhdR7Yh%VgTjoC%&NO9h z*Eq1ceySn2?Jqp9Ifu20p08Xi6(OKD3r9DIXjxGy5S@^9Azaw^_~>uc^uwJu_19Di zemI|dO|!voLOj;RqFxQ7QgApNl>JT)Jxub%=h>~Rc(r&IOaS^T#9rq0LGwV-4S{H@ z2=QU~qS3?uZEy)^8|)d8Y(e~@k$Ts1x%x{BTr~`)8;nHDbahYD0UU}pbz%#BFmbmC z`2Kh+iZKD&O>CqzqCa%p5^14D>pGnq@-K|5+~Ds^8?!KLFz{%F&KF=Hj&B69gk9Sf zba;)hYmNPx@e;IYNNQXjiBC$86U80USS!H=)}ycZ?o5KgeP9p{#FXDvxnJs~n8hVY zW6?zD@?>W2`vo!?gpj4w7f)7Pv2InK@9)Rc&CScw*dVWTs+TWR=GrNDW||5`X`j&U zy~^h#C1bz_*&ySb#v>gzB;pf`lH}?)Pn>YhDAF{8in8S9X*kbtRX)mo5}v23ku}X< zvraR^!A>*bm;HU?UT;%iPGP3)_uA=+ir#o4I8TJil(%ofEG=Evpg3EdzaWv}VowrP z!iZs%2TiEBlzi5(0gJW*ZGe-5(m-DI0hWNplT4@uu6H1AA!G9PC_&w44IVnr`Wv30 zhC$R)*SDv=wdCpEa&bnTPtOO7d&AWPui6mZu&?&0Z->7a-@KlwAJ3k?+Gcq+f{euX zYL+wO7KUW-yALSuy_6yL74<=!!?(*GHP8xaVRkE_Zak|Cl^9M6YB_MnF$heBT$6pd25Vg*gI)2p>z1#up$Tx07d*saST8sukxjHF$%l)IjfRkSbVAA{ zc>#}L|81q8t^g1R8D>;1XR0kjoPKxtP)=VO|i>c{I5Mc8$k{F z`gO&>);5}{;V0_emG;EFKxHQ_k;-bP&`&FL@=>IO7)g@2KWLQ zblS%L6wA7Se4-rf&20K_G`b~sZO5-@NlA#9>~}xKc?i+87DAU6#|{H?^KQQ>?ItC3 zw9+grEKwGUUEG+LDuiOmNkmKSrMT}uUg(~nL>BbPWIpew$|Xrq%huzVQ`V!R?w2sh zLO$_jOgluVIb;x^w9N<&Yb4ir6}mL#moSwk&-`r2tL&iq-sfjqvJtk#iQ%;C@88t8 zS;9f5*Pmk@xsNaIbr04`s8)#*SG(0@)jKz9aSl2BGuGypvtwQ{c%_wQlI252)yFxg zh;Z4FjSw#F#3qJogrYKz(=qb$Miui#%>~WGpDN+UqsTjEY@eH$#M}&M8lBk;Y1*Ag zkk_0u!I{WDHh~v9pDOV1q>O`WIKTB6`Ib(zs4!j~f+czVuq|=i`78m3IRyux?cNk| zT8#)fkn`xxxtX;a6DzO#a)JMyp|~z%?efl=vmAd!oSo7TMoR~P1yRP;KtC2BZQTAr z+v;a($9#%%f+|Q|3N<*$=hrI%;a{ag+{u)?(^k^^Dl+HW%zEk^`a3KEO@kAgzipPK z7F}~-KCD>9%LGn*|Exj9lwun4fP!6Ou&HcQ=fi6YSZyocaRlRFuUKB%Y5CpViMq6P zP%5vK>lGKg?LMnQV~?yQKyNL#JCQA4;4agwf(t2n*-dZ=PNkj0zwZXenodNU-^Ejn zbR0Foi>#~SQ$c~LRX<07gjg7FcGc9PoRJh|ajfF})N@|F4d;MGg^ zs7~Qtu3ioA@10aSSchn?*Xl2i(ErTEvV3@!i-BKwP{8c5VUzkWJ;7=xGKr#?@)0aaRmmyH$%F&UBB85A6m=4 zff2It0GdT59qr&eF2n$YKW`5OZ;=Df0)?P6s*uf;OvN>vTU;TD<-jp%Mn}>1w3#s$ zAXEduOzlb$jw?f8Uq|e)8vH(%4f=&!sU>+(G_v7{Gaj0gcdvS@;$z99JTp{5ap_-F z(r0au2UfShr5iZ}EUx~SF8;BD#ZI6eN}w)+f9U$FI_$sI{V5F_Ib93P&yk_FJLQNQ z%*u>SsdCjHP{CF|+Yy(?OgDuTer%JL*zC$v0>@_A#Q*)%(b^lSyhVs2dbXsfEYauK z?#`a$)O5w$CXuMgzJXSZ=@hi!`7-}guSKho*>$Lh5D9iGQ?YI3C_OTrN(xcZcmTIL zgJG6)-KBx)OnTef+*3DkJEany80oFPRRI}IWfT8BS=o2AbPBTYj)sv%eKeM&7` zSnnbBio`VXo2smeOliBS!0YlW*gre8v0X-X2PoJ8C>-k_!rvv!JJ{Me{^`}sm|7cu zCN$BnU41vZqs%!FW@sT2Ak>zNQeW_0eaNjy*F+-A-aKS^*bRrjRykcR^5O{`1lZ_R z%+OHIQjozYm-FTZWps42vyqPQRPpeeLvpwJlMj<{Ik{}v4_D4ZF(8uN5FDgVULUV_ zm`*g2O4x9^Lml+%;ErYrO!hc!g=5fcFrX$F+G9~veCd$(8i6JKfdO1q>hPk%X`g1S z@cGPfZiZ#`@>n`WmCbthi$=DbLL+^*Jql3+;Q7KcaI&W`aX4fpapU!0hhdV-6cQVZQ? zmQosI4YYz*D$mJ(Vc~$=yP0#&kl!#=weP47p$sYA4*LLC*oJNyh+Mt4FJ@06zY9sB zPQa!nKYKp3q*|lUYp=AJ%S@`$VB4ZxZJDK3ly!MC3?uIm;nPZDf^L z#g5`^i8Gx>$`*-2pW2tU!cNYwa^tlJM$~kJ(&%eKEKPamtSOpJQ8V$ySV^0V#rJylNg}Ii9r$hjEJcEhBcAa*_*AK zP-@oo+Um`!Yu*v#AQVNdY2;wmF94U5_HW_vi(icfXLdgg+9_&}A_t=gd~xABCB+RW zr*8zy61%sRldHNUU6=3rU@bdmb}l=wWOPI#|4&?FpXEOAvoWTtN6XT8=EvXlrJ(b&mWN^_Zeaw|EH^T#>Q z`9A0M{+{pmc|PCsS)S*7tL6*`;k7mvHcy#hq+`l3_e@cAUlpplHcCk28mB;w)1^1$& z*g^r?Sqp8+SD`1wR1*U#$Kv_bQbpnoRjA8MJ+(NIKa1mACDNu&SY^|EuSvHlMB1G% zuog)9)Jx51AkGZ)|IMmN9HXW0C_jMPon_($H>g84B)>|W8thqGZ8~~m=SyGq(8s_l zroN9?7jR#Ks^QsH|2z++=+|a96pBZyl#&z9$}oat1?A;KnA^+eQ)NV`_a23=_y3mR58F2(x}p>QfunA%{9&Ge?)pVVUa^~=z znAt>Q!sSIbGvS~D?nK@3EY%lGe(uxJMru)%y^+Qg9IRvZ4)G|)M`2J)ZqcAlPMJH6 zg~+-HN0p2SlY3;z4{q^UBeSApY`MqNM{Y(MKT^-OuLj~PmkE<}A4Hb%{oKwNf7=Ny z&PxoT*wq1vSX%~V-h^`+d6Z>PQv9U~K#0FI+jWkt(p&SY*T3EIxZvDYIk=!l^F?xT zkhCfZ>o)V(o2#O|$b&Sytnqil8RmJND7(Ato$jt3(xs9iQ6FHA{4w%gH-s%^>LqTC z@7xwswoo9wYLB(NIfo8xj_=YCncl{)SnsJgXl!z5En zFV~MI@ukcR$Yeyc8Mo3={SkSWFULwH>$)r?WmMd2t0Z+#Q|d?$8cPyhs*wo3#xujR zUx))cYprJ&=}F8JX5KB6-4Q#3n4QH_J4pfW@7>P|8tom+3eNFv=}xr`!uA)^tCqX_ ze`gR%UB_r~dW^;Aj6jzD%5+OT=982T@xf>R!HKJF0jz<~E4X0o;Gtpq-!@-Y;`G_M zzN$4_lJuNy-f)M@hRP7F#On{5U8l~y_wuce7Mrjs43BHKPE4@xeMlgEj^|r$^Ol)x zIFf%0gFcd5yshuRG0+`fe!KMpe31_0Jaz+^Di-3N1?;DPnF z`R1KL1qgCR24BEO8DJh6@q-4hWR9nx#D6~inrjaQBf}A9F5n}bASk>690OZ^etR6R zdaY%mq4>xCe(@;~cjE>Cp$&L2*zyy%_wd;4ttEp$OGfhofTa<%^E7ZG)+z^}gzpt_ z?3>~4WXY{+VCOAhS5g}~KP&hh|8L~KiflRyv4vv4$0!4UtvL?>qCXEZM-@1#wHNXB zA-G}J%9YSLfc{YO2TkViHP`?{elH2tf!0aabw+)E==@Sdf#T4@%R1gg_>M!$Fi-_( zA!1ztM*6O>p)3LAp;_Z~{#M|39-2djNE;lFBaj3l8d&`@h#g&6UDRyG7)P#)?JuJfWXznIuY@6gnU2ehDXRwWGBgXRIJ He!Ke@sqCgN literal 0 HcmV?d00001 diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TlsTimelineUpdatingStore.scala b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TlsTimelineUpdatingStore.scala deleted file mode 100644 index 14b83d878..000000000 --- a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TlsTimelineUpdatingStore.scala +++ /dev/null @@ -1,150 +0,0 @@ -package com.twitter.tweetypie -package store - -import com.twitter.timelineservice.{thriftscala => tls} -import com.twitter.tweetypie.backends.TimelineService -import com.twitter.tweetypie.thriftscala._ - -trait TlsTimelineUpdatingStore - extends TweetStoreBase[TlsTimelineUpdatingStore] - with AsyncInsertTweet.Store - with AsyncDeleteTweet.Store - with AsyncUndeleteTweet.Store { - def wrap(w: TweetStore.Wrap): TlsTimelineUpdatingStore = - new TweetStoreWrapper(w, this) - with TlsTimelineUpdatingStore - with AsyncInsertTweet.StoreWrapper - with AsyncDeleteTweet.StoreWrapper - with AsyncUndeleteTweet.StoreWrapper -} - -/** - * An implementation of TweetStore that sends update events to - * the Timeline Service. - */ -object TlsTimelineUpdatingStore { - val Action: AsyncWriteAction.TimelineUpdate.type = AsyncWriteAction.TimelineUpdate - - /** - * Converts a TweetyPie Tweet to tls.Tweet - * - * @param explicitCreatedAt when Some, overrides the default getTimestamp defined in package - * object com.twitter.tweetypie - */ - def tweetToTLSFullTweet( - hasMedia: Tweet => Boolean - )( - tweet: Tweet, - explicitCreatedAt: Option[Time], - noteTweetMentionedUserIds: Option[Seq[Long]] - ): tls.FullTweet = - tls.FullTweet( - userId = getUserId(tweet), - tweetId = tweet.id, - mentionedUserIds = - noteTweetMentionedUserIds.getOrElse(getMentions(tweet).flatMap(_.userId)).toSet, - isNullcasted = TweetLenses.nullcast.get(tweet), - conversationId = TweetLenses.conversationId.get(tweet).getOrElse(tweet.id), - narrowcastGeos = Set.empty, - createdAtMs = explicitCreatedAt.getOrElse(getTimestamp(tweet)).inMillis, - hasMedia = hasMedia(tweet), - directedAtUserId = TweetLenses.directedAtUser.get(tweet).map(_.userId), - retweet = getShare(tweet).map { share => - tls.Retweet( - sourceUserId = share.sourceUserId, - sourceTweetId = share.sourceStatusId, - parentTweetId = Some(share.parentStatusId) - ) - }, - reply = getReply(tweet).map { reply => - tls.Reply( - inReplyToUserId = reply.inReplyToUserId, - inReplyToTweetId = reply.inReplyToStatusId - ) - }, - quote = tweet.quotedTweet.map { qt => - tls.Quote( - quotedUserId = qt.userId, - quotedTweetId = qt.tweetId - ) - }, - mediaTags = tweet.mediaTags, - text = Some(getText(tweet)) - ) - - val logger: Logger = Logger(getClass) - - def logValidationFailed(stats: StatsReceiver): tls.ProcessEventResult => Unit = { - case tls.ProcessEventResult(tls.ProcessEventResultType.ValidationFailed, errors) => - logger.error(s"Validation Failed in processEvent2: $errors") - stats.counter("processEvent2_validation_failed").incr() - case _ => () - } - - def apply( - processEvent2: TimelineService.ProcessEvent2, - hasMedia: Tweet => Boolean, - stats: StatsReceiver - ): TlsTimelineUpdatingStore = { - val toTlsTweet = tweetToTLSFullTweet(hasMedia) _ - - val processAndLog = - processEvent2.andThen(FutureArrow.fromFunction(logValidationFailed(stats))) - - new TlsTimelineUpdatingStore { - override val asyncInsertTweet: FutureEffect[AsyncInsertTweet.Event] = - processAndLog - .contramap[AsyncInsertTweet.Event] { event => - tls.Event.FullTweetCreate( - tls.FullTweetCreateEvent( - toTlsTweet(event.tweet, Some(event.timestamp), event.noteTweetMentionedUserIds), - event.timestamp.inMillis, - featureContext = event.featureContext - ) - ) - } - .asFutureEffect[AsyncInsertTweet.Event] - - override val retryAsyncInsertTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncInsertTweet.Event] - ] = - TweetStore.retry(Action, asyncInsertTweet) - - override val asyncUndeleteTweet: FutureEffect[AsyncUndeleteTweet.Event] = - processAndLog - .contramap[AsyncUndeleteTweet.Event] { event => - tls.Event.FullTweetRestore( - tls.FullTweetRestoreEvent( - toTlsTweet(event.tweet, None, None), - event.deletedAt.map(_.inMillis) - ) - ) - } - .asFutureEffect[AsyncUndeleteTweet.Event] - - override val retryAsyncUndeleteTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncUndeleteTweet.Event] - ] = - TweetStore.retry(Action, asyncUndeleteTweet) - - override val asyncDeleteTweet: FutureEffect[AsyncDeleteTweet.Event] = - processAndLog - .contramap[AsyncDeleteTweet.Event] { event => - tls.Event.FullTweetDelete( - tls.FullTweetDeleteEvent( - toTlsTweet(event.tweet, None, None), - event.timestamp.inMillis, - isUserErasure = Some(event.isUserErasure), - isBounceDelete = Some(event.isBounceDelete) - ) - ) - } - .asFutureEffect[AsyncDeleteTweet.Event] - - override val retryAsyncDeleteTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncDeleteTweet.Event] - ] = - TweetStore.retry(Action, asyncDeleteTweet) - } - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetCountsCacheUpdatingStore.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetCountsCacheUpdatingStore.docx new file mode 100644 index 0000000000000000000000000000000000000000..e1bc80bb9dcf5ab66f499ce56c500411a2a7c4c6 GIT binary patch literal 40243 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 Future[Unit] - - def keys(tweetId: TweetId): Seq[TweetCountKey] = - Seq( - RetweetsKey(tweetId), - RepliesKey(tweetId), - FavsKey(tweetId), - QuotesKey(tweetId), - BookmarksKey(tweetId)) - - def relatedKeys(tweet: Tweet): Seq[TweetCountKey] = - Seq( - getReply(tweet).flatMap(_.inReplyToStatusId).map(RepliesKey(_)), - getQuotedTweet(tweet).map(quotedTweet => QuotesKey(quotedTweet.tweetId)), - getShare(tweet).map(share => RetweetsKey(share.sourceStatusId)) - ).flatten - - // pick all keys except quotes key - def relatedKeysWithoutQuotesKey(tweet: Tweet): Seq[TweetCountKey] = - relatedKeys(tweet).filterNot(_.isInstanceOf[QuotesKey]) - - def apply(countsStore: CachedCountsStore): TweetCountsCacheUpdatingStore = { - val incr: Action = key => countsStore.incr(key, 1) - val decr: Action = key => countsStore.incr(key, -1) - val init: Action = key => countsStore.add(key, 0) - val delete: Action = key => countsStore.delete(key) - - def initCounts(tweetId: TweetId) = Future.join(keys(tweetId).map(init)) - def incrRelatedCounts(tweet: Tweet, excludeQuotesKey: Boolean = false) = { - Future.join { - if (excludeQuotesKey) { - relatedKeysWithoutQuotesKey(tweet).map(incr) - } else { - relatedKeys(tweet).map(incr) - } - } - } - def deleteCounts(tweetId: TweetId) = Future.join(keys(tweetId).map(delete)) - - // Decrement all the counters if is the last quote, otherwise avoid decrementing quote counters - def decrRelatedCounts(tweet: Tweet, isLastQuoteOfQuoter: Boolean = false) = { - Future.join { - if (isLastQuoteOfQuoter) { - relatedKeys(tweet).map(decr) - } else { - relatedKeysWithoutQuotesKey(tweet).map(decr) - } - } - } - - def updateFavCount(tweetId: TweetId, delta: Int) = - countsStore.incr(FavsKey(tweetId), delta).unit - - def updateBookmarkCount(tweetId: TweetId, delta: Int) = - countsStore.incr(BookmarksKey(tweetId), delta).unit - - // these are use specifically for setRetweetVisibility - def incrRetweetCount(tweetId: TweetId) = incr(RetweetsKey(tweetId)) - def decrRetweetCount(tweetId: TweetId) = decr(RetweetsKey(tweetId)) - - new TweetCountsCacheUpdatingStore { - override val insertTweet: FutureEffect[InsertTweet.Event] = - FutureEffect[InsertTweet.Event](e => initCounts(e.tweet.id)) - - override val asyncInsertTweet: FutureEffect[AsyncInsertTweet.Event] = - FutureEffect[AsyncInsertTweet.Event] { e => - incrRelatedCounts(e.cachedTweet.tweet, e.quoterHasAlreadyQuotedTweet) - } - - override val retryAsyncInsertTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncInsertTweet.Event] - ] = - FutureEffect.unit[TweetStoreRetryEvent[AsyncInsertTweet.Event]] - - override val replicatedInsertTweet: FutureEffect[ReplicatedInsertTweet.Event] = - FutureEffect[ReplicatedInsertTweet.Event] { e => - Future - .join( - initCounts(e.tweet.id), - incrRelatedCounts(e.tweet, e.quoterHasAlreadyQuotedTweet)).unit - } - - override val deleteTweet: FutureEffect[DeleteTweet.Event] = - FutureEffect[DeleteTweet.Event](e => deleteCounts(e.tweet.id)) - - override val asyncDeleteTweet: FutureEffect[AsyncDeleteTweet.Event] = - FutureEffect[AsyncDeleteTweet.Event](e => decrRelatedCounts(e.tweet, e.isLastQuoteOfQuoter)) - - override val retryAsyncDeleteTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncDeleteTweet.Event] - ] = - FutureEffect.unit[TweetStoreRetryEvent[AsyncDeleteTweet.Event]] - - override val replicatedDeleteTweet: FutureEffect[ReplicatedDeleteTweet.Event] = - FutureEffect[ReplicatedDeleteTweet.Event] { e => - Future - .join(deleteCounts(e.tweet.id), decrRelatedCounts(e.tweet, e.isLastQuoteOfQuoter)).unit - } - - override val undeleteTweet: FutureEffect[UndeleteTweet.Event] = - FutureEffect[UndeleteTweet.Event] { e => - incrRelatedCounts(e.tweet, e.quoterHasAlreadyQuotedTweet) - } - - override val replicatedUndeleteTweet: FutureEffect[ReplicatedUndeleteTweet.Event] = - FutureEffect[ReplicatedUndeleteTweet.Event] { e => - incrRelatedCounts(e.tweet, e.quoterHasAlreadyQuotedTweet) - } - - override val asyncIncrFavCount: FutureEffect[AsyncIncrFavCount.Event] = - FutureEffect[AsyncIncrFavCount.Event](e => updateFavCount(e.tweetId, e.delta)) - - override val replicatedIncrFavCount: FutureEffect[ReplicatedIncrFavCount.Event] = - FutureEffect[ReplicatedIncrFavCount.Event](e => updateFavCount(e.tweetId, e.delta)) - - override val asyncIncrBookmarkCount: FutureEffect[AsyncIncrBookmarkCount.Event] = - FutureEffect[AsyncIncrBookmarkCount.Event](e => updateBookmarkCount(e.tweetId, e.delta)) - - override val replicatedIncrBookmarkCount: FutureEffect[ReplicatedIncrBookmarkCount.Event] = - FutureEffect[ReplicatedIncrBookmarkCount.Event] { e => - updateBookmarkCount(e.tweetId, e.delta) - } - - override val asyncSetRetweetVisibility: FutureEffect[AsyncSetRetweetVisibility.Event] = - FutureEffect[AsyncSetRetweetVisibility.Event] { e => - if (e.visible) incrRetweetCount(e.srcId) else decrRetweetCount(e.srcId) - } - - override val retryAsyncSetRetweetVisibility: FutureEffect[ - TweetStoreRetryEvent[AsyncSetRetweetVisibility.Event] - ] = - FutureEffect.unit[TweetStoreRetryEvent[AsyncSetRetweetVisibility.Event]] - - override val replicatedSetRetweetVisibility: FutureEffect[ - ReplicatedSetRetweetVisibility.Event - ] = - FutureEffect[ReplicatedSetRetweetVisibility.Event] { e => - if (e.visible) incrRetweetCount(e.srcId) else decrRetweetCount(e.srcId) - } - - override val flush: FutureEffect[Flush.Event] = - FutureEffect[Flush.Event] { e => Future.collect(e.tweetIds.map(deleteCounts)).unit } - .onlyIf(_.flushCounts) - } - } -} - -/** - * A simple trait around the cache operations needed by TweetCountsCacheUpdatingStore. - */ -trait CachedCountsStore { - def add(key: TweetCountKey, count: Count): Future[Unit] - def delete(key: TweetCountKey): Future[Unit] - def incr(key: TweetCountKey, delta: Count): Future[Unit] -} - -object CachedCountsStore { - def fromLockingCache(cache: LockingCache[TweetCountKey, Cached[Count]]): CachedCountsStore = - new CachedCountsStore { - def add(key: TweetCountKey, count: Count): Future[Unit] = - cache.add(key, toCached(count)).unit - - def delete(key: TweetCountKey): Future[Unit] = - cache.delete(key).unit - - def incr(key: TweetCountKey, delta: Count): Future[Unit] = - cache.lockAndSet(key, IncrDecrHandler(delta)).unit - } - - def toCached(count: Count): Cached[Count] = { - val now = Time.now - Cached(Some(count), CachedValueStatus.Found, now, Some(now)) - } - - case class IncrDecrHandler(delta: Long) extends Handler[Cached[Count]] { - override def apply(inCache: Option[Cached[Count]]): Option[Cached[Count]] = - inCache.flatMap(incrCount) - - private[this] def incrCount(oldCached: Cached[Count]): Option[Cached[Count]] = { - oldCached.value.map { oldCount => oldCached.copy(value = Some(saferIncr(oldCount))) } - } - - private[this] def saferIncr(value: Long) = math.max(0, value + delta) - - override lazy val toString: String = "IncrDecrHandler(%s)".format(delta) - } - - object QueueIsFullException extends Exception -} - -/** - * An implementation of CachedCountsStore that can queue and aggregate multiple incr - * updates to the same key together. Currently, updates for a key only start to aggregate - * after there is a failure to incr on the underlying store, which often indicates contention - * due to a high level of updates. After a failure, a key is promoted into a "tracked" state, - * and subsequent updates are aggregated together. Periodically, the aggregated updates will - * be flushed. If the flush for a key succeeds and no more updates have come in during the flush, - * then the key is demoted out of the tracked state. Otherwise, updates continue to aggregate - * until the next flush attempt. - */ -class AggregatingCachedCountsStore( - underlying: CachedCountsStore, - timer: Timer, - flushInterval: Duration, - maxSize: Int, - stats: StatsReceiver) - extends CachedCountsStore - with Serialized { - private[this] val pendingUpdates: mutable.Map[TweetCountKey, Count] = - new mutable.HashMap[TweetCountKey, Count] - - private[this] var trackingCount: Int = 0 - - private[this] val promotionCounter = stats.counter("promotions") - private[this] val demotionCounter = stats.counter("demotions") - private[this] val updateCounter = stats.counter("aggregated_updates") - private[this] val overflowCounter = stats.counter("overflows") - private[this] val flushFailureCounter = stats.counter("flush_failures") - private[this] val trackingCountGauge = stats.addGauge("tracking")(trackingCount.toFloat) - - timer.schedule(flushInterval) { flush() } - - def add(key: TweetCountKey, count: Count): Future[Unit] = - underlying.add(key, count) - - def delete(key: TweetCountKey): Future[Unit] = - underlying.delete(key) - - def incr(key: TweetCountKey, delta: Count): Future[Unit] = - aggregateIfTracked(key, delta).flatMap { - case true => Future.Unit - case false => - underlying - .incr(key, delta) - .rescue { case _ => aggregate(key, delta) } - } - - /** - * Queues an update to be aggregated and applied to a key at a later time, but only if we are - * already aggregating updates for the key. - * - * @return true the delta was aggregated, false if the key is not being tracked - * and the incr should be attempted directly. - */ - private[this] def aggregateIfTracked(key: TweetCountKey, delta: Count): Future[Boolean] = - serialized { - pendingUpdates.get(key) match { - case None => false - case Some(current) => - updateCounter.incr() - pendingUpdates(key) = current + delta - true - } - } - - /** - * Queues an update to be aggregated and applied to a key at a later time. - */ - private[this] def aggregate(key: TweetCountKey, delta: Count): Future[Unit] = - serialized { - val alreadyTracked = pendingUpdates.contains(key) - - if (!alreadyTracked) { - if (pendingUpdates.size < maxSize) - promotionCounter.incr() - else { - overflowCounter.incr() - throw CachedCountsStore.QueueIsFullException - } - } - - (pendingUpdates.get(key).getOrElse(0L) + delta) match { - case 0 => - pendingUpdates.remove(key) - demotionCounter.incr() - - case aggregatedDelta => - pendingUpdates(key) = aggregatedDelta - } - - trackingCount = pendingUpdates.size - } - - private[this] def flush(): Future[Unit] = { - for { - // make a copy of the updates to flush, so that updates can continue to be queued - // while the flush is in progress. if an individual flush succeeds, then we - // go back and update pendingUpdates. - updates <- serialized { pendingUpdates.toSeq.toList } - () <- Future.join(for ((key, delta) <- updates) yield flush(key, delta)) - } yield () - } - - private[this] def flush(key: TweetCountKey, delta: Count): Future[Unit] = - underlying - .incr(key, delta) - .flatMap(_ => aggregate(key, -delta)) - .handle { case ex => flushFailureCounter.incr() } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetEventBusStore.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetEventBusStore.docx new file mode 100644 index 0000000000000000000000000000000000000000..3f1aed5351673968093748ff72aff8cf5446a7d3 GIT binary patch literal 38234 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�C3dNH{E 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 - def wrap(w: TweetStore.Wrap): TweetEventBusStore = - new TweetStoreWrapper(w, this) - with TweetEventBusStore - with AsyncDeleteAdditionalFields.StoreWrapper - with AsyncDeleteTweet.StoreWrapper - with AsyncInsertTweet.StoreWrapper - with AsyncSetAdditionalFields.StoreWrapper - with AsyncTakedown.StoreWrapper - with AsyncUndeleteTweet.StoreWrapper - with AsyncUpdatePossiblySensitiveTweet.StoreWrapper - with QuotedTweetDelete.StoreWrapper - with QuotedTweetTakedown.StoreWrapper - with ScrubGeo.StoreWrapper - with ScrubGeoUpdateUserTimestamp.StoreWrapper - - def inParallel(that: TweetEventBusStore): TweetEventBusStore = - new TweetEventBusStore { - override val asyncInsertTweet: FutureEffect[AsyncInsertTweet.Event] = - self.asyncInsertTweet.inParallel(that.asyncInsertTweet) - override val asyncDeleteAdditionalFields: FutureEffect[AsyncDeleteAdditionalFields.Event] = - self.asyncDeleteAdditionalFields.inParallel(that.asyncDeleteAdditionalFields) - override val asyncDeleteTweet: FutureEffect[AsyncDeleteTweet.Event] = - self.asyncDeleteTweet.inParallel(that.asyncDeleteTweet) - override val asyncSetAdditionalFields: FutureEffect[AsyncSetAdditionalFields.Event] = - self.asyncSetAdditionalFields.inParallel(that.asyncSetAdditionalFields) - override val asyncTakedown: FutureEffect[AsyncTakedown.Event] = - self.asyncTakedown.inParallel(that.asyncTakedown) - override val asyncUndeleteTweet: FutureEffect[AsyncUndeleteTweet.Event] = - self.asyncUndeleteTweet.inParallel(that.asyncUndeleteTweet) - override val asyncUpdatePossiblySensitiveTweet: FutureEffect[ - AsyncUpdatePossiblySensitiveTweet.Event - ] = - self.asyncUpdatePossiblySensitiveTweet.inParallel(that.asyncUpdatePossiblySensitiveTweet) - override val quotedTweetDelete: FutureEffect[QuotedTweetDelete.Event] = - self.quotedTweetDelete.inParallel(that.quotedTweetDelete) - override val quotedTweetTakedown: FutureEffect[QuotedTweetTakedown.Event] = - self.quotedTweetTakedown.inParallel(that.quotedTweetTakedown) - override val retryAsyncInsertTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncInsertTweet.Event] - ] = - self.retryAsyncInsertTweet.inParallel(that.retryAsyncInsertTweet) - override val retryAsyncDeleteAdditionalFields: FutureEffect[ - TweetStoreRetryEvent[AsyncDeleteAdditionalFields.Event] - ] = - self.retryAsyncDeleteAdditionalFields.inParallel(that.retryAsyncDeleteAdditionalFields) - override val retryAsyncDeleteTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncDeleteTweet.Event] - ] = - self.retryAsyncDeleteTweet.inParallel(that.retryAsyncDeleteTweet) - override val retryAsyncUndeleteTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncUndeleteTweet.Event] - ] = - self.retryAsyncUndeleteTweet.inParallel(that.retryAsyncUndeleteTweet) - override val retryAsyncUpdatePossiblySensitiveTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncUpdatePossiblySensitiveTweet.Event] - ] = - self.retryAsyncUpdatePossiblySensitiveTweet.inParallel( - that.retryAsyncUpdatePossiblySensitiveTweet - ) - override val retryAsyncSetAdditionalFields: FutureEffect[ - TweetStoreRetryEvent[AsyncSetAdditionalFields.Event] - ] = - self.retryAsyncSetAdditionalFields.inParallel(that.retryAsyncSetAdditionalFields) - override val retryAsyncTakedown: FutureEffect[TweetStoreRetryEvent[AsyncTakedown.Event]] = - self.retryAsyncTakedown.inParallel(that.retryAsyncTakedown) - override val scrubGeo: FutureEffect[ScrubGeo.Event] = - self.scrubGeo.inParallel(that.scrubGeo) - override val scrubGeoUpdateUserTimestamp: FutureEffect[ScrubGeoUpdateUserTimestamp.Event] = - self.scrubGeoUpdateUserTimestamp.inParallel(that.scrubGeoUpdateUserTimestamp) - } -} - -object TweetEventBusStore { - val Action: AsyncWriteAction = AsyncWriteAction.EventBusEnqueue - - def safetyTypeForUser(user: User): Option[SafetyType] = - user.safety.map(userSafetyToSafetyType) - - def userSafetyToSafetyType(safety: Safety): SafetyType = - if (safety.isProtected) { - SafetyType.Private - } else if (safety.suspended) { - SafetyType.Restricted - } else { - SafetyType.Public - } - - def apply( - eventStore: FutureEffect[TweetEvent] - ): TweetEventBusStore = { - - def toTweetEvents(event: TweetStoreTweetEvent): Seq[TweetEvent] = - event.toTweetEventData.map { data => - TweetEvent( - data, - TweetEventFlags( - timestampMs = event.timestamp.inMillis, - safetyType = event.optUser.flatMap(safetyTypeForUser) - ) - ) - } - - def enqueueEvents[E <: TweetStoreTweetEvent]: FutureEffect[E] = - eventStore.liftSeq.contramap[E](toTweetEvents) - - new TweetEventBusStore { - override val asyncInsertTweet: FutureEffect[AsyncInsertTweet.Event] = - enqueueEvents[AsyncInsertTweet.Event] - - override val asyncDeleteAdditionalFields: FutureEffect[AsyncDeleteAdditionalFields.Event] = - enqueueEvents[AsyncDeleteAdditionalFields.Event] - - override val asyncDeleteTweet: FutureEffect[AsyncDeleteTweet.Event] = - enqueueEvents[AsyncDeleteTweet.Event] - - override val asyncSetAdditionalFields: FutureEffect[AsyncSetAdditionalFields.Event] = - enqueueEvents[AsyncSetAdditionalFields.Event] - - override val asyncTakedown: FutureEffect[AsyncTakedown.Event] = - enqueueEvents[AsyncTakedown.Event] - .onlyIf(_.eventbusEnqueue) - - override val asyncUndeleteTweet: FutureEffect[AsyncUndeleteTweet.Event] = - enqueueEvents[AsyncUndeleteTweet.Event] - - override val asyncUpdatePossiblySensitiveTweet: FutureEffect[ - AsyncUpdatePossiblySensitiveTweet.Event - ] = - enqueueEvents[AsyncUpdatePossiblySensitiveTweet.Event] - - override val quotedTweetDelete: FutureEffect[QuotedTweetDelete.Event] = - enqueueEvents[QuotedTweetDelete.Event] - - override val quotedTweetTakedown: FutureEffect[QuotedTweetTakedown.Event] = - enqueueEvents[QuotedTweetTakedown.Event] - - override val retryAsyncInsertTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncInsertTweet.Event] - ] = - TweetStore.retry(Action, asyncInsertTweet) - - override val retryAsyncDeleteAdditionalFields: FutureEffect[ - TweetStoreRetryEvent[AsyncDeleteAdditionalFields.Event] - ] = - TweetStore.retry(Action, asyncDeleteAdditionalFields) - - override val retryAsyncDeleteTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncDeleteTweet.Event] - ] = - TweetStore.retry(Action, asyncDeleteTweet) - - override val retryAsyncUndeleteTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncUndeleteTweet.Event] - ] = - TweetStore.retry(Action, asyncUndeleteTweet) - - override val retryAsyncUpdatePossiblySensitiveTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncUpdatePossiblySensitiveTweet.Event] - ] = - TweetStore.retry(Action, asyncUpdatePossiblySensitiveTweet) - - override val retryAsyncSetAdditionalFields: FutureEffect[ - TweetStoreRetryEvent[AsyncSetAdditionalFields.Event] - ] = - TweetStore.retry(Action, asyncSetAdditionalFields) - - override val retryAsyncTakedown: FutureEffect[TweetStoreRetryEvent[AsyncTakedown.Event]] = - TweetStore.retry(Action, asyncTakedown) - - override val scrubGeo: FutureEffect[ScrubGeo.Event] = - enqueueEvents[ScrubGeo.Event] - - override val scrubGeoUpdateUserTimestamp: FutureEffect[ScrubGeoUpdateUserTimestamp.Event] = - enqueueEvents[ScrubGeoUpdateUserTimestamp.Event] - } - } -} - -/** - * Scrubs inappropriate fields from tweet events before publishing. - */ -object TweetEventDataScrubber { - def scrub(tweet: Tweet): Tweet = - tweet.copy( - cards = None, - card2 = None, - media = tweet.media.map(_.map { mediaEntity => mediaEntity.copy(extensionsReply = None) }), - previousCounts = None, - editPerspective = None - ) -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetIndexingStore.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetIndexingStore.docx new file mode 100644 index 0000000000000000000000000000000000000000..bc8e830ef191023fe487b3657b7eaa9f35320c5a GIT binary patch literal 37257 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 F2LK33mj3_% literal 0 HcmV?d00001 diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetIndexingStore.scala b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetIndexingStore.scala deleted file mode 100644 index 648e9a17c..000000000 --- a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetIndexingStore.scala +++ /dev/null @@ -1,65 +0,0 @@ -package com.twitter.tweetypie -package store - -import com.twitter.tweetypie.tflock.TweetIndexer -import com.twitter.tweetypie.thriftscala._ - -trait TweetIndexingStore - extends TweetStoreBase[TweetIndexingStore] - with AsyncInsertTweet.Store - with AsyncDeleteTweet.Store - with AsyncUndeleteTweet.Store - with AsyncSetRetweetVisibility.Store { - def wrap(w: TweetStore.Wrap): TweetIndexingStore = - new TweetStoreWrapper(w, this) - with TweetIndexingStore - with AsyncInsertTweet.StoreWrapper - with AsyncDeleteTweet.StoreWrapper - with AsyncUndeleteTweet.StoreWrapper - with AsyncSetRetweetVisibility.StoreWrapper -} - -/** - * A TweetStore that sends indexing updates to a TweetIndexer. - */ -object TweetIndexingStore { - val Action: AsyncWriteAction.TweetIndex.type = AsyncWriteAction.TweetIndex - - def apply(indexer: TweetIndexer): TweetIndexingStore = - new TweetIndexingStore { - override val asyncInsertTweet: FutureEffect[AsyncInsertTweet.Event] = - FutureEffect[AsyncInsertTweet.Event](event => indexer.createIndex(event.tweet)) - - override val retryAsyncInsertTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncInsertTweet.Event] - ] = - TweetStore.retry(Action, asyncInsertTweet) - - override val asyncDeleteTweet: FutureEffect[AsyncDeleteTweet.Event] = - FutureEffect[AsyncDeleteTweet.Event](event => - indexer.deleteIndex(event.tweet, event.isBounceDelete)) - - override val retryAsyncDeleteTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncDeleteTweet.Event] - ] = - TweetStore.retry(Action, asyncDeleteTweet) - - override val asyncUndeleteTweet: FutureEffect[AsyncUndeleteTweet.Event] = - FutureEffect[AsyncUndeleteTweet.Event](event => indexer.undeleteIndex(event.tweet)) - - override val retryAsyncUndeleteTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncUndeleteTweet.Event] - ] = - TweetStore.retry(Action, asyncUndeleteTweet) - - override val asyncSetRetweetVisibility: FutureEffect[AsyncSetRetweetVisibility.Event] = - FutureEffect[AsyncSetRetweetVisibility.Event] { event => - indexer.setRetweetVisibility(event.retweetId, event.visible) - } - - override val retryAsyncSetRetweetVisibility: FutureEffect[ - TweetStoreRetryEvent[AsyncSetRetweetVisibility.Event] - ] = - TweetStore.retry(Action, asyncSetRetweetVisibility) - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetStatsStore.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetStatsStore.docx new file mode 100644 index 0000000000000000000000000000000000000000..01c4fb41af652f254074bd849dbc65497ed00c9e GIT binary patch literal 37522 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 literal 0 HcmV?d00001 diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetStatsStore.scala b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetStatsStore.scala deleted file mode 100644 index 23f6f5124..000000000 --- a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetStatsStore.scala +++ /dev/null @@ -1,64 +0,0 @@ -package com.twitter.tweetypie -package store - -import com.twitter.finagle.stats.RollupStatsReceiver -import com.twitter.servo.util.MemoizingStatsReceiver - -/** - * Records some stats about inserted tweets. Tweets are currently classified by three criteria: - * - * - tweet type: "tweet" or "retweet" - * - user type: "stresstest", "protected", "restricted", or "public" - * - fanout type: "nullcast", "narrowcast", or "usertimeline" - * - * A counter is incremented for a tweet using those three criteria in order. Counters are - * created with a RollupStatsReceiver, so counts are aggregated at each level. Some - * example counters are: - * - * ./insert - * ./insert/tweet - * ./insert/tweet/public - * ./insert/tweet/protected/usertimeline - * ./insert/retweet/stresstest - * ./insert/retweet/public/nullcast - */ -trait TweetStatsStore extends TweetStoreBase[TweetStatsStore] with InsertTweet.Store { - def wrap(w: TweetStore.Wrap): TweetStatsStore = - new TweetStoreWrapper(w, this) with TweetStatsStore with InsertTweet.StoreWrapper -} - -object TweetStatsStore { - def apply(stats: StatsReceiver): TweetStatsStore = { - val rollup = new MemoizingStatsReceiver(new RollupStatsReceiver(stats)) - val inserts = rollup.scope("insert") - - def tweetType(tweet: Tweet) = - if (getShare(tweet).isDefined) "retweet" else "tweet" - - def userType(user: User) = - if (user.roles.exists(_.roles.contains("stresstest"))) "stresstest" - else if (user.safety.exists(_.isProtected)) "protected" - else if (user.safety.exists(_.suspended)) "restricted" - else "public" - - def fanoutType(tweet: Tweet) = - if (TweetLenses.nullcast(tweet)) "nullcast" - else if (TweetLenses.narrowcast(tweet).isDefined) "narrowcast" - else "usertimeline" - - new TweetStatsStore { - override val insertTweet: FutureEffect[InsertTweet.Event] = - FutureEffect[InsertTweet.Event] { event => - inserts - .counter( - tweetType(event.tweet), - userType(event.user), - fanoutType(event.tweet) - ) - .incr() - - Future.Unit - } - } - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetStore.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetStore.docx new file mode 100644 index 0000000000000000000000000000000000000000..739d2a2d5f5a12a59b673c9309d7ad2077a4ce80 GIT binary patch literal 39328 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 bOKf*^Xly_ate_vOiW6i9EDwp)AK(51ildm_ literal 0 HcmV?d00001 diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetStore.scala b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetStore.scala deleted file mode 100644 index 62a668681..000000000 --- a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetStore.scala +++ /dev/null @@ -1,292 +0,0 @@ -package com.twitter.tweetypie -package store - -import com.twitter.finagle.service.RetryPolicy -import com.twitter.finagle.stats.Stat -import com.twitter.servo.util.RetryHandler -import com.twitter.tweetypie.thriftscala._ -import com.twitter.util.Timer - -object TweetStore { - // Using the old-school c.t.logging.Logger here as this log is only used by - // servo.FutureEffect's trackOutcome method, which needs that kind of logger. - val log: com.twitter.logging.Logger = com.twitter.logging.Logger(getClass) - - /** - * Adapts a tweet store on a specific TweetStoreEvent type to one that handles - * TweetStoreRetryEvents of that type that match the given AsyncWriteAction. - */ - def retry[T <: AsyncTweetStoreEvent]( - action: AsyncWriteAction, - store: FutureEffect[T] - ): FutureEffect[TweetStoreRetryEvent[T]] = - store.contramap[TweetStoreRetryEvent[T]](_.event).onlyIf(_.action == action) - - /** - * Defines an abstract polymorphic operation to be applied to FutureEffects over any - * TweetStoreEvent type. The Wrap operation is defined over all possible - * FutureEffect[E <: TweetStoreEvent] types. - */ - trait Wrap { - def apply[E <: TweetStoreEvent](handler: FutureEffect[E]): FutureEffect[E] - } - - /** - * A Wrap operation that applies standardized metrics collection to the FutureEffect. - */ - case class Tracked(stats: StatsReceiver) extends Wrap { - def apply[E <: TweetStoreEvent](handler: FutureEffect[E]): FutureEffect[E] = - FutureEffect[E] { event => - Stat.timeFuture(stats.scope(event.name).stat("latency_ms")) { - handler(event) - } - }.trackOutcome(stats, _.name, log) - } - - /** - * A Wrap operation that makes the FutureEffect enabled according to the given gate. - */ - case class Gated(gate: Gate[Unit]) extends Wrap { - def apply[E <: TweetStoreEvent](handler: FutureEffect[E]): FutureEffect[E] = - handler.enabledBy(gate) - } - - /** - * A Wrap operation that updates the FutureEffect to ignore failures. - */ - object IgnoreFailures extends Wrap { - def apply[E <: TweetStoreEvent](handler: FutureEffect[E]): FutureEffect[E] = - handler.ignoreFailures - } - - /** - * A Wrap operation that updates the FutureEffect to ignore failures upon completion. - */ - object IgnoreFailuresUponCompletion extends Wrap { - def apply[E <: TweetStoreEvent](handler: FutureEffect[E]): FutureEffect[E] = - handler.ignoreFailuresUponCompletion - } - - /** - * A Wrap operation that applies a RetryHandler to FutureEffects. - */ - case class Retry(retryHandler: RetryHandler[Unit]) extends Wrap { - def apply[E <: TweetStoreEvent](handler: FutureEffect[E]): FutureEffect[E] = - handler.retry(retryHandler) - } - - /** - * A Wrap operation that applies a RetryHandler to FutureEffects. - */ - case class ReplicatedEventRetry(retryHandler: RetryHandler[Unit]) extends Wrap { - def apply[E <: TweetStoreEvent](handler: FutureEffect[E]): FutureEffect[E] = - FutureEffect[E] { event => - event.retryStrategy match { - case TweetStoreEvent.ReplicatedEventLocalRetry => handler.retry(retryHandler)(event) - case _ => handler(event) - } - } - } - - /** - * A Wrap operation that configures async-retry behavior to async-write events. - */ - class AsyncRetry( - localRetryPolicy: RetryPolicy[Try[Nothing]], - enqueueRetryPolicy: RetryPolicy[Try[Nothing]], - timer: Timer, - tweetService: ThriftTweetService, - scribe: FutureEffect[FailedAsyncWrite] - )( - stats: StatsReceiver, - action: AsyncWriteAction) - extends Wrap { - - override def apply[E <: TweetStoreEvent](handler: FutureEffect[E]): FutureEffect[E] = - FutureEffect[E] { event => - event.retryStrategy match { - case TweetStoreEvent.EnqueueAsyncRetry(enqueueRetry) => - enqueueAsyncRetry(handler, enqueueRetry)(event) - - case TweetStoreEvent.LocalRetryThenScribeFailure(toFailedAsyncWrite) => - localRetryThenScribeFailure(handler, toFailedAsyncWrite)(event) - - case _ => - handler(event) - } - } - - private def enqueueAsyncRetry[E <: TweetStoreEvent]( - handler: FutureEffect[E], - enqueueRetry: (ThriftTweetService, AsyncWriteAction) => Future[Unit] - ): FutureEffect[E] = { - val retryInitCounter = stats.counter("retries_initiated") - - // enqueues failed TweetStoreEvents to the deferredrpc-backed tweetService - // to be retried. this store uses the enqueueRetryPolicy to retry the enqueue - // attempts in the case of deferredrpc application failures. - val enqueueRetryHandler = - FutureEffect[E](_ => enqueueRetry(tweetService, action)) - .retry(RetryHandler.failuresOnly(enqueueRetryPolicy, timer, stats.scope("enqueue_retry"))) - - handler.rescue { - case ex => - TweetStore.log.warning(ex, s"will retry $action") - retryInitCounter.incr() - enqueueRetryHandler - } - } - - private def localRetryThenScribeFailure[E <: TweetStoreEvent]( - handler: FutureEffect[E], - toFailedAsyncWrite: AsyncWriteAction => FailedAsyncWrite - ): FutureEffect[E] = { - val exhaustedCounter = stats.counter("retries_exhausted") - - // scribe events that failed after exhausting all retries - val scribeEventHandler = - FutureEffect[E](_ => scribe(toFailedAsyncWrite(action))) - - // wraps `handle` with a retry policy to retry failures with a backoff. if we exhaust - // all retries, then we pass the event to `scribeEventStore` to scribe the failure. - handler - .retry(RetryHandler.failuresOnly(localRetryPolicy, timer, stats)) - .rescue { - case ex => - TweetStore.log.warning(ex, s"exhausted retries on $action") - exhaustedCounter.incr() - scribeEventHandler - } - } - } - - /** - * Parent trait for defining a "module" that defines a TweetStoreEvent type and corresponding - * TweetStore and TweetStoreWrapper types. - */ - sealed trait Module { - type Store - type StoreWrapper <: Store - } - - /** - * Parent trait for defining a "module" that defines a sync TweetStoreEvent. - */ - trait SyncModule extends Module { - type Event <: SyncTweetStoreEvent - } - - /** - * Parent trait for defining a "module" that defines an async TweetStoreEvent and a - * TweetStoreRetryEvent. - */ - trait AsyncModule extends Module { - type Event <: AsyncTweetStoreEvent - type RetryEvent <: TweetStoreRetryEvent[Event] - } - - /** - * Parent trait for defining a "module" that defines a replicated TweetStoreEvent. - */ - trait ReplicatedModule extends Module { - type Event <: ReplicatedTweetStoreEvent - } -} - -/** - * Trait for TweetStore implementations that support handler wrapping. - */ -trait TweetStoreBase[Self] { - import TweetStore._ - - /** - * Returns a new store of type Self with Wrap applied to each event handler in this instance. - */ - def wrap(w: Wrap): Self - - /** - * Applies the Tracked Wrap operation to the store. - */ - def tracked(stats: StatsReceiver): Self = wrap(Tracked(stats)) - - /** - * Applies the Gated Wrap operation to the store. - */ - def enabledBy(gate: Gate[Unit]): Self = wrap(Gated(gate)) - - /** - * Applies the IgnoreFailures Wrap operation to the store. - */ - def ignoreFailures: Self = wrap(IgnoreFailures) - - /** - * Applies the IgnoreFailuresUponCompletion Wrap operation to the store. - */ - def ignoreFailuresUponCompletion: Self = wrap(IgnoreFailuresUponCompletion) - - /** - * Applies a RetryHandler to each event handler. - */ - def retry(retryHandler: RetryHandler[Unit]): Self = wrap(Retry(retryHandler)) - - /** - * Applies a RetryHandler to replicated event handlers. - */ - def replicatedRetry(retryHandler: RetryHandler[Unit]): Self = - wrap(ReplicatedEventRetry(retryHandler)) - - /** - * Applies the AsyncRetryConfig Wrap operation to the store. - */ - def asyncRetry(cfg: AsyncRetry): Self = wrap(cfg) -} - -/** - * An abstract base class for tweet store instances that wrap another tweet store instance. - * You can mix event-specific store wrapper traits into this class to automatically - * have the event-specific handlers wrapped. - */ -abstract class TweetStoreWrapper[+T]( - protected val wrap: TweetStore.Wrap, - protected val underlying: T) - -/** - * A TweetStore that has a handler for all possible TweetStoreEvents. - */ -trait TotalTweetStore - extends AsyncDeleteAdditionalFields.Store - with AsyncDeleteTweet.Store - with AsyncIncrBookmarkCount.Store - with AsyncIncrFavCount.Store - with AsyncInsertTweet.Store - with AsyncSetAdditionalFields.Store - with AsyncSetRetweetVisibility.Store - with AsyncTakedown.Store - with AsyncUndeleteTweet.Store - with AsyncUpdatePossiblySensitiveTweet.Store - with DeleteAdditionalFields.Store - with DeleteTweet.Store - with Flush.Store - with IncrBookmarkCount.Store - with IncrFavCount.Store - with InsertTweet.Store - with QuotedTweetDelete.Store - with QuotedTweetTakedown.Store - with ReplicatedDeleteAdditionalFields.Store - with ReplicatedDeleteTweet.Store - with ReplicatedIncrBookmarkCount.Store - with ReplicatedIncrFavCount.Store - with ReplicatedInsertTweet.Store - with ReplicatedScrubGeo.Store - with ReplicatedSetAdditionalFields.Store - with ReplicatedSetRetweetVisibility.Store - with ReplicatedTakedown.Store - with ReplicatedUndeleteTweet.Store - with ReplicatedUpdatePossiblySensitiveTweet.Store - with ScrubGeo.Store - with ScrubGeoUpdateUserTimestamp.Store - with SetAdditionalFields.Store - with SetRetweetVisibility.Store - with Takedown.Store - with UndeleteTweet.Store - with UpdatePossiblySensitiveTweet.Store diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetStoreEvent.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetStoreEvent.docx new file mode 100644 index 0000000000000000000000000000000000000000..d37d06bc78c4fd4f529dfc6cc7f743919b9a2a71 GIT binary patch literal 38227 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 literal 0 HcmV?d00001 diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetStoreEvent.scala b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetStoreEvent.scala deleted file mode 100644 index 987668d6f..000000000 --- a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetStoreEvent.scala +++ /dev/null @@ -1,144 +0,0 @@ -package com.twitter.tweetypie -package store - -import com.twitter.finagle.tracing.Trace -import com.twitter.tweetypie.store.TweetStoreEvent.RetryStrategy -import com.twitter.tweetypie.thriftscala._ - -object TweetStoreEvent { - - /** - * Parent trait for indicating what type of retry strategy to apply to event handlers - * for the corresponding event type. Different classes of events use different strategies. - */ - sealed trait RetryStrategy - - /** - * Indicates that the event type doesn't support retries. - */ - case object NoRetry extends RetryStrategy - - /** - * Indicates that if an event handler encounters a failure, it should enqueue a - * retry to be performed asynchronously. - */ - case class EnqueueAsyncRetry(enqueueRetry: (ThriftTweetService, AsyncWriteAction) => Future[Unit]) - extends RetryStrategy - - /** - * Indicates that if an event handler encounters a failure, it should retry - * the event locally some number of times, before eventually given up and scribing - * the failure. - */ - case class LocalRetryThenScribeFailure(toFailedAsyncWrite: AsyncWriteAction => FailedAsyncWrite) - extends RetryStrategy - - /** - * Indicates that if an event handler encounters a failure, it should retry - * the event locally some number of times. - */ - case object ReplicatedEventLocalRetry extends RetryStrategy -} - -/** - * The abstract parent class for all TweetStoreEvent types. - */ -sealed trait TweetStoreEvent { - val name: String - - val traceId: Long = Trace.id.traceId.toLong - - /** - * Indicates a particular retry behavior that should be applied to event handlers for - * the corresponding event type. The specifics of the strategy might depend upon the - * specific TweetStore implementation. - */ - def retryStrategy: RetryStrategy -} - -abstract class SyncTweetStoreEvent(val name: String) extends TweetStoreEvent { - override def retryStrategy: RetryStrategy = TweetStoreEvent.NoRetry -} - -abstract class AsyncTweetStoreEvent(val name: String) extends TweetStoreEvent { - def enqueueRetry(service: ThriftTweetService, action: AsyncWriteAction): Future[Unit] - - override def retryStrategy: RetryStrategy = TweetStoreEvent.EnqueueAsyncRetry(enqueueRetry) -} - -abstract class ReplicatedTweetStoreEvent(val name: String) extends TweetStoreEvent { - override def retryStrategy: RetryStrategy = TweetStoreEvent.ReplicatedEventLocalRetry -} - -/** - * A trait for all TweetStoreEvents that become TweetEvents. - */ -trait TweetStoreTweetEvent { - val timestamp: Time - - val optUser: Option[User] - - /** - * Most TweetStoreTweetEvents map to a single TweetEvent, but some - * optionally map to an event and others map to multiple events, so - * this method needs to return a Seq of TweetEventData. - */ - def toTweetEventData: Seq[TweetEventData] -} - -/** - * The abstract parent class for an event that indicates a particular action - * for a particular event that needs to be retried via the async-write-retrying mechanism. - */ -abstract class TweetStoreRetryEvent[E <: AsyncTweetStoreEvent] extends TweetStoreEvent { - override val name = "async_write_retry" - - def action: AsyncWriteAction - def event: E - - def eventType: AsyncWriteEventType - - def scribedTweetOnFailure: Option[Tweet] - - override def retryStrategy: RetryStrategy = - TweetStoreEvent.LocalRetryThenScribeFailure(action => - FailedAsyncWrite(eventType, action, scribedTweetOnFailure)) -} - -/** - * Functions as a disjunction between an event type E and it's corresonding - * retry event type TweetStoreRetryEvent[E] - */ -case class TweetStoreEventOrRetry[E <: AsyncTweetStoreEvent]( - event: E, - toRetry: Option[TweetStoreRetryEvent[E]]) { - def toInitial: Option[E] = if (retryAction.isDefined) None else Some(event) - def retryAction: Option[RetryStrategy] = toRetry.map(_.retryStrategy) - def hydrate(f: E => Future[E]): Future[TweetStoreEventOrRetry[E]] = - f(event).map(e => copy(event = e)) -} - -object TweetStoreEventOrRetry { - def apply[E <: AsyncTweetStoreEvent, R <: TweetStoreRetryEvent[E]]( - event: E, - retryAction: Option[AsyncWriteAction], - toRetryEvent: (AsyncWriteAction, E) => R - ): TweetStoreEventOrRetry[E] = - TweetStoreEventOrRetry(event, retryAction.map(action => toRetryEvent(action, event))) - - object First { - - /** matches against TweetStoreEventOrRetry instances for an initial event */ - def unapply[E <: AsyncTweetStoreEvent](it: TweetStoreEventOrRetry[E]): Option[E] = - it.toInitial - } - - object Retry { - - /** matches against TweetStoreEventOrRetry instances for a retry event */ - def unapply[E <: AsyncTweetStoreEvent]( - it: TweetStoreEventOrRetry[E] - ): Option[TweetStoreRetryEvent[E]] = - it.toRetry - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetUpdate.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/TweetUpdate.docx new file mode 100644 index 0000000000000000000000000000000000000000..9a2054b27c1abe41fcc4dfe266a2f54e83dccbcc GIT binary patch literal 37272 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 CachedTweet = - ct => { - val newCoreData = source.coreData.get - val updatedCoreData = ct.tweet.coreData.map(_.copy(hasTakedown = newCoreData.hasTakedown)) - ct.copy( - tweet = ct.tweet.copy( - coreData = updatedCoreData, - tweetypieOnlyTakedownCountryCodes = source.tweetypieOnlyTakedownCountryCodes, - tweetypieOnlyTakedownReasons = source.tweetypieOnlyTakedownReasons - ) - ) - } - - def copyNsfwFieldsForUpdate(source: Tweet): Tweet => Tweet = - tweet => { - val newCoreData = source.coreData.get - val updatedCoreData = - tweet.coreData.map { core => - core.copy(nsfwUser = newCoreData.nsfwUser, nsfwAdmin = newCoreData.nsfwAdmin) - } - tweet.copy(coreData = updatedCoreData) - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/UndeleteTweet.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/UndeleteTweet.docx new file mode 100644 index 0000000000000000000000000000000000000000..90c6b90c7ce53ef79ce34a2a3739e0386e8846fe GIT binary patch literal 38586 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

    nMdN(pa^u)Rf(?@_sP$ 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 literal 0 HcmV?d00001 diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/Guano.scala b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/Guano.scala deleted file mode 100644 index d40e6f657..000000000 --- a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/Guano.scala +++ /dev/null @@ -1,144 +0,0 @@ -package com.twitter.tweetypie -package store - -import com.twitter.guano.{thriftscala => guano} -import com.twitter.servo.util.Scribe -import com.twitter.takedown.util.TakedownReasons -import com.twitter.tseng.withholding.thriftscala.TakedownReason -import com.twitter.tweetypie.thriftscala.AuditDeleteTweet - -object Guano { - case class MalwareAttempt( - url: String, - userId: UserId, - clientAppId: Option[Long], - remoteHost: Option[String]) { - def toScribeMessage: guano.ScribeMessage = - guano.ScribeMessage( - `type` = guano.ScribeType.MalwareAttempt, - malwareAttempt = Some( - guano.MalwareAttempt( - timestamp = Time.now.inSeconds, - host = remoteHost, - userId = userId, - url = url, - `type` = guano.MalwareAttemptType.Status, - clientAppId = clientAppId.map(_.toInt) // yikes! - ) - ) - ) - } - - case class DestroyTweet( - tweet: Tweet, - userId: UserId, - byUserId: UserId, - passthrough: Option[AuditDeleteTweet]) { - def toScribeMessage: guano.ScribeMessage = - guano.ScribeMessage( - `type` = guano.ScribeType.DestroyStatus, - destroyStatus = Some( - guano.DestroyStatus( - `type` = Some(guano.DestroyStatusType.Status), - timestamp = Time.now.inSeconds, - userId = userId, - byUserId = byUserId, - statusId = tweet.id, - text = "", - reason = passthrough - .flatMap(_.reason) - .flatMap { r => guano.UserActionReason.valueOf(r.name) } - .orElse(Some(guano.UserActionReason.Other)), - done = passthrough.flatMap(_.done).orElse(Some(true)), - host = passthrough.flatMap(_.host), - bulkId = passthrough.flatMap(_.bulkId), - note = passthrough.flatMap(_.note), - runId = passthrough.flatMap(_.runId), - clientApplicationId = passthrough.flatMap(_.clientApplicationId), - userAgent = passthrough.flatMap(_.userAgent) - ) - ) - ) - } - - case class Takedown( - tweetId: TweetId, - userId: UserId, - reason: TakedownReason, - takendown: Boolean, - note: Option[String], - host: Option[String], - byUserId: Option[UserId]) { - def toScribeMessage: guano.ScribeMessage = - guano.ScribeMessage( - `type` = guano.ScribeType.PctdAction, - pctdAction = Some( - guano.PctdAction( - `type` = guano.PctdActionType.Status, - timestamp = Time.now.inSeconds, - tweetId = Some(tweetId), - userId = userId, - countryCode = - TakedownReasons.reasonToCountryCode.applyOrElse(reason, (_: TakedownReason) => ""), - takendown = takendown, - note = note, - host = host, - byUserId = byUserId.getOrElse(-1L), - reason = Some(reason) - ) - ) - ) - } - - case class UpdatePossiblySensitiveTweet( - tweetId: TweetId, - userId: UserId, - byUserId: UserId, - action: guano.NsfwTweetActionAction, - enabled: Boolean, - host: Option[String], - note: Option[String]) { - def toScribeMessage: guano.ScribeMessage = - guano.ScribeMessage( - `type` = guano.ScribeType.NsfwTweetAction, - nsfwTweetAction = Some( - guano.NsfwTweetAction( - timestamp = Time.now.inSeconds, - host = host, - userId = userId, - byUserId = byUserId, - action = action, - enabled = enabled, - note = note, - tweetId = tweetId - ) - ) - ) - } - - def apply( - scribe: FutureEffect[guano.ScribeMessage] = Scribe(guano.ScribeMessage, - Scribe("trust_eng_audit")) - ): Guano = { - new Guano { - override val scribeMalwareAttempt: FutureEffect[MalwareAttempt] = - scribe.contramap[MalwareAttempt](_.toScribeMessage) - - override val scribeDestroyTweet: FutureEffect[DestroyTweet] = - scribe.contramap[DestroyTweet](_.toScribeMessage) - - override val scribeTakedown: FutureEffect[Takedown] = - scribe.contramap[Takedown](_.toScribeMessage) - - override val scribeUpdatePossiblySensitiveTweet: FutureEffect[UpdatePossiblySensitiveTweet] = - scribe.contramap[UpdatePossiblySensitiveTweet](_.toScribeMessage) - } - } -} - -trait Guano { - val scribeMalwareAttempt: FutureEffect[Guano.MalwareAttempt] - val scribeDestroyTweet: FutureEffect[Guano.DestroyTweet] - val scribeTakedown: FutureEffect[Guano.Takedown] - val scribeUpdatePossiblySensitiveTweet: FutureEffect[Guano.UpdatePossiblySensitiveTweet] -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/GuanoServiceStore.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/GuanoServiceStore.docx new file mode 100644 index 0000000000000000000000000000000000000000..0a438b20e60dd79a7f732b0995c8220fde88bf92 GIT binary patch literal 37916 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 Guano.Takedown = - (event: AsyncTakedown.Event, reason: TakedownReason, takendown: Boolean) => - Guano.Takedown( - tweetId = event.tweet.id, - userId = getUserId(event.tweet), - reason = reason, - takendown = takendown, - note = event.auditNote, - host = event.host, - byUserId = event.byUserId - ) - - val toGuanoUpdatePossiblySensitiveTweet: ( - AsyncUpdatePossiblySensitiveTweet.Event, - Boolean, - NsfwTweetActionAction - ) => Guano.UpdatePossiblySensitiveTweet = - ( - event: AsyncUpdatePossiblySensitiveTweet.Event, - updatedValue: Boolean, - action: NsfwTweetActionAction - ) => - Guano.UpdatePossiblySensitiveTweet( - tweetId = event.tweet.id, - host = event.host.orElse(Some("unknown")), - userId = event.user.id, - byUserId = event.byUserId, - action = action, - enabled = updatedValue, - note = event.note - ) - - def apply(guano: Guano, stats: StatsReceiver): GuanoServiceStore = { - val deleteByUserIdCounter = stats.counter("deletes_with_by_user_id") - val deleteScribeCounter = stats.counter("deletes_resulting_in_scribe") - - new GuanoServiceStore { - override val asyncDeleteTweet: FutureEffect[AsyncDeleteTweet.Event] = - FutureEffect[AsyncDeleteTweet.Event] { event => - val tweet = event.tweet - - event.byUserId.foreach(_ => deleteByUserIdCounter.incr()) - - // Guano the tweet deletion action not initiated from the RetweetsDeletionStore - event.byUserId match { - case Some(byUserId) => - deleteScribeCounter.incr() - guano.scribeDestroyTweet( - Guano.DestroyTweet( - tweet = tweet, - userId = getUserId(tweet), - byUserId = byUserId, - passthrough = event.auditPassthrough - ) - ) - case _ => - Future.Unit - } - }.onlyIf(_.cascadedFromTweetId.isEmpty) - - override val retryAsyncDeleteTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncDeleteTweet.Event] - ] = - TweetStore.retry(Action, asyncDeleteTweet) - - override val asyncTakedown: FutureEffect[AsyncTakedown.Event] = - FutureEffect[AsyncTakedown.Event] { event => - val messages = - event.reasonsToAdd.map(toGuanoTakedown(event, _, true)) ++ - event.reasonsToRemove.map(toGuanoTakedown(event, _, false)) - Future.join(messages.map(guano.scribeTakedown)) - }.onlyIf(_.scribeForAudit) - - override val retryAsyncTakedown: FutureEffect[TweetStoreRetryEvent[AsyncTakedown.Event]] = - TweetStore.retry(Action, asyncTakedown) - - override val asyncUpdatePossiblySensitiveTweet: FutureEffect[ - AsyncUpdatePossiblySensitiveTweet.Event - ] = - FutureEffect[AsyncUpdatePossiblySensitiveTweet.Event] { event => - val messages = - event.nsfwAdminChange.map( - toGuanoUpdatePossiblySensitiveTweet(event, _, NsfwTweetActionAction.NsfwAdmin) - ) ++ - event.nsfwUserChange.map( - toGuanoUpdatePossiblySensitiveTweet(event, _, NsfwTweetActionAction.NsfwUser) - ) - Future.join(messages.toSeq.map(guano.scribeUpdatePossiblySensitiveTweet)) - } - - override val retryAsyncUpdatePossiblySensitiveTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncUpdatePossiblySensitiveTweet.Event] - ] = - TweetStore.retry(Action, asyncUpdatePossiblySensitiveTweet) - } - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/IncrBookmarkCount.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/IncrBookmarkCount.docx new file mode 100644 index 0000000000000000000000000000000000000000..a674a46f9d8f9684051e8917aa421c918b827265 GIT binary patch literal 37379 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 bDT|@D4g - override val incrBookmarkCount: FutureEffect[Event] = wrap(underlying.incrBookmarkCount) - } - - object Store { - def apply( - asyncEnqueueStore: AsyncEnqueueStore, - replicatingStore: ReplicatingTweetStore - ): Store = { - new Store { - override val incrBookmarkCount: FutureEffect[Event] = - FutureEffect.inParallel( - asyncEnqueueStore.incrBookmarkCount, - replicatingStore.incrBookmarkCount - ) - } - } - } -} - -object AsyncIncrBookmarkCount extends TweetStore.AsyncModule { - case class Event(tweetId: TweetId, delta: Int, timestamp: Time) - extends AsyncTweetStoreEvent("async_incr_bookmark_event") { - override def enqueueRetry(service: ThriftTweetService, action: AsyncWriteAction): Future[Unit] = - Future.Unit - - override def retryStrategy: RetryStrategy = NoRetry - } - - trait Store { - def asyncIncrBookmarkCount: FutureEffect[Event] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val asyncIncrBookmarkCount: FutureEffect[Event] = wrap( - underlying.asyncIncrBookmarkCount) - } - - object Store { - def apply(tweetCountsUpdatingStore: TweetCountsCacheUpdatingStore): Store = { - new Store { - override def asyncIncrBookmarkCount: FutureEffect[AsyncIncrBookmarkCount.Event] = - tweetCountsUpdatingStore.asyncIncrBookmarkCount - } - } - } -} - -object ReplicatedIncrBookmarkCount extends TweetStore.ReplicatedModule { - case class Event(tweetId: TweetId, delta: Int) - extends ReplicatedTweetStoreEvent("replicated_incr_bookmark_count") { - override def retryStrategy: RetryStrategy = NoRetry - } - - trait Store { - val replicatedIncrBookmarkCount: FutureEffect[Event] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val replicatedIncrBookmarkCount: FutureEffect[Event] = wrap( - underlying.replicatedIncrBookmarkCount) - } - - object Store { - def apply(tweetCountsUpdatingStore: TweetCountsCacheUpdatingStore): Store = { - new Store { - override val replicatedIncrBookmarkCount: FutureEffect[Event] = { - tweetCountsUpdatingStore.replicatedIncrBookmarkCount - } - } - } - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/IncrFavCount.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/IncrFavCount.docx new file mode 100644 index 0000000000000000000000000000000000000000..a53900dacb3353fc7ff1e846f1310d466aaabb1f GIT binary patch literal 37403 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ˬKtkljjOSG7O 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 D(DUl6 literal 0 HcmV?d00001 diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/IncrFavCount.scala b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/IncrFavCount.scala deleted file mode 100644 index b6e1aabcb..000000000 --- a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/IncrFavCount.scala +++ /dev/null @@ -1,90 +0,0 @@ -package com.twitter.tweetypie -package store - -import com.twitter.tweetypie.store.TweetStoreEvent.NoRetry -import com.twitter.tweetypie.thriftscala._ - -object IncrFavCount extends TweetStore.SyncModule { - - case class Event(tweetId: TweetId, delta: Int, timestamp: Time) - extends SyncTweetStoreEvent("incr_fav_count") { - val toAsyncRequest: AsyncIncrFavCountRequest = AsyncIncrFavCountRequest(tweetId, delta) - } - - trait Store { - val incrFavCount: FutureEffect[Event] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val incrFavCount: FutureEffect[Event] = wrap(underlying.incrFavCount) - } - - object Store { - def apply( - asyncEnqueueStore: AsyncEnqueueStore, - replicatingStore: ReplicatingTweetStore - ): Store = - new Store { - override val incrFavCount: FutureEffect[Event] = - FutureEffect.inParallel( - asyncEnqueueStore.incrFavCount, - replicatingStore.incrFavCount - ) - } - } -} - -object AsyncIncrFavCount extends TweetStore.AsyncModule { - - case class Event(tweetId: TweetId, delta: Int, timestamp: Time) - extends AsyncTweetStoreEvent("async_incr_fav_count") { - - override def enqueueRetry(service: ThriftTweetService, action: AsyncWriteAction): Future[Unit] = - Future.Unit // We need to define this method for TweetStoreEvent.Async but we don't use it - - override def retryStrategy: TweetStoreEvent.RetryStrategy = NoRetry - } - - trait Store { - val asyncIncrFavCount: FutureEffect[Event] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val asyncIncrFavCount: FutureEffect[Event] = wrap(underlying.asyncIncrFavCount) - } - - object Store { - def apply(tweetCountsUpdatingStore: TweetCountsCacheUpdatingStore): Store = { - new Store { - override val asyncIncrFavCount: FutureEffect[Event] = - tweetCountsUpdatingStore.asyncIncrFavCount - } - } - } -} - -object ReplicatedIncrFavCount extends TweetStore.ReplicatedModule { - - case class Event(tweetId: TweetId, delta: Int) - extends ReplicatedTweetStoreEvent("replicated_incr_fav_count") { - override def retryStrategy: TweetStoreEvent.NoRetry.type = NoRetry - } - - trait Store { - val replicatedIncrFavCount: FutureEffect[Event] - } - - trait StoreWrapper extends Store { self: TweetStoreWrapper[Store] => - override val replicatedIncrFavCount: FutureEffect[Event] = wrap( - underlying.replicatedIncrFavCount) - } - - object Store { - def apply(tweetCountsUpdatingStore: TweetCountsCacheUpdatingStore): Store = { - new Store { - override val replicatedIncrFavCount: FutureEffect[Event] = - tweetCountsUpdatingStore.replicatedIncrFavCount.ignoreFailures - } - } - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/InitialTweetUpdate.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/InitialTweetUpdate.docx new file mode 100644 index 0000000000000000000000000000000000000000..3da80534efc0ad73958ad9b7c8590e516bd52cb3 GIT binary patch literal 37137 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%0Ae+irDZGfw;&n?ge_AJ=n%i)B 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 h+k*)GE838<7;5V ExtendedTweetMetadataBuilder(initialTweet, link)) - - initialTweet.copy( - selfPermalink = initialTweet.selfPermalink.orElse(request.selfPermalink), - editControl = Some(editControl), - extendedTweetMetadata = initialTweet.extendedTweetMetadata.orElse(extendedTweetMetadata) - ) - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/InsertTweet.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/InsertTweet.docx new file mode 100644 index 0000000000000000000000000000000000000000..e43a02856b097d902257b672db42c99485104209 GIT binary patch literal 39038 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

lr%}R~ThvR=^iCJf|tHFC((QQG|qo+8$vX$5Hmd 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 literal 0 HcmV?d00001 diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/GeoSearchRequestIDStore.scala b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/GeoSearchRequestIDStore.scala deleted file mode 100644 index be29aba1e..000000000 --- a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/GeoSearchRequestIDStore.scala +++ /dev/null @@ -1,72 +0,0 @@ -package com.twitter.tweetypie -package store - -import com.twitter.geoduck.backend.relevance.thriftscala.ReportFailure -import com.twitter.geoduck.backend.relevance.thriftscala.ReportResult -import com.twitter.geoduck.backend.relevance.thriftscala.ConversionReport -import com.twitter.geoduck.backend.searchrequestid.thriftscala.SearchRequestID -import com.twitter.geoduck.backend.tweetid.thriftscala.TweetID -import com.twitter.geoduck.common.thriftscala.GeoduckException -import com.twitter.geoduck.service.identifier.thriftscala.PlaceIdentifier -import com.twitter.servo.util.FutureArrow -import com.twitter.tweetypie.thriftscala._ - -trait GeoSearchRequestIDStore - extends TweetStoreBase[GeoSearchRequestIDStore] - with AsyncInsertTweet.Store { - def wrap(w: TweetStore.Wrap): GeoSearchRequestIDStore = - new TweetStoreWrapper[GeoSearchRequestIDStore](w, this) - with GeoSearchRequestIDStore - with AsyncInsertTweet.StoreWrapper -} - -object GeoSearchRequestIDStore { - type ConversionReporter = FutureArrow[ConversionReport, ReportResult] - - val Action: AsyncWriteAction.GeoSearchRequestId.type = AsyncWriteAction.GeoSearchRequestId - private val log = Logger(getClass) - - object FailureHandler { - def translateException(failure: ReportResult.Failure): GeoduckException = { - failure.failure match { - case ReportFailure.Failure(exception) => exception - case _ => GeoduckException("Unknown failure: " + failure.toString) - } - } - } - - def apply(conversionReporter: ConversionReporter): GeoSearchRequestIDStore = - new GeoSearchRequestIDStore { - - val conversionEffect: FutureEffect[ConversionReport] = - FutureEffect - .fromPartial[ReportResult] { - case unionFailure: ReportResult.Failure => - Future.exception(FailureHandler.translateException(unionFailure)) - } - .contramapFuture(conversionReporter) - - override val asyncInsertTweet: FutureEffect[AsyncInsertTweet.Event] = - conversionEffect.contramapOption[AsyncInsertTweet.Event] { event => - for { - isUserProtected <- event.user.safety.map(_.isProtected) - geoSearchRequestID <- event.geoSearchRequestId - placeType <- event.tweet.place.map(_.`type`) - placeId <- event.tweet.coreData.flatMap(_.placeId) - placeIdLong <- Try(java.lang.Long.parseUnsignedLong(placeId, 16)).toOption - if placeType == PlaceType.Poi && isUserProtected == false - } yield { - ConversionReport( - requestID = SearchRequestID(requestID = geoSearchRequestID), - tweetID = TweetID(event.tweet.id), - placeID = PlaceIdentifier(placeIdLong) - ) - } - } - - override val retryAsyncInsertTweet: FutureEffect[ - TweetStoreRetryEvent[AsyncInsertTweet.Event] - ] = - TweetStore.retry(Action, asyncInsertTweet) - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/GizmoduckUserCountsUpdatingStore.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/GizmoduckUserCountsUpdatingStore.docx new file mode 100644 index 0000000000000000000000000000000000000000..cd55e7038c27a5dc9e3397f3ef32f1ecded2d1b7 GIT binary patch literal 37298 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 uLYT6y85$}m9WQkK= Field} -import com.twitter.tweetypie.backends.Gizmoduck - -trait GizmoduckUserCountsUpdatingStore - extends TweetStoreBase[GizmoduckUserCountsUpdatingStore] - with InsertTweet.Store - with DeleteTweet.Store { - def wrap(w: TweetStore.Wrap): GizmoduckUserCountsUpdatingStore = - new TweetStoreWrapper(w, this) - with GizmoduckUserCountsUpdatingStore - with InsertTweet.StoreWrapper - with DeleteTweet.StoreWrapper -} - -/** - * A TweetStore implementation that sends user-specific count updates to Gizmoduck. - */ -object GizmoduckUserCountsUpdatingStore { - def isUserTweet(tweet: Tweet): Boolean = - !TweetLenses.nullcast.get(tweet) && TweetLenses.narrowcast.get(tweet).isEmpty - - def apply( - incr: Gizmoduck.IncrCount, - hasMedia: Tweet => Boolean - ): GizmoduckUserCountsUpdatingStore = { - def incrField(field: Field, amt: Int): FutureEffect[Tweet] = - FutureEffect[Tweet](tweet => incr((getUserId(tweet), field, amt))) - - def incrAll(amt: Int): FutureEffect[Tweet] = - FutureEffect.inParallel( - incrField(Field.Tweets, amt).onlyIf(isUserTweet), - incrField(Field.MediaTweets, amt).onlyIf(t => isUserTweet(t) && hasMedia(t)) - ) - - new GizmoduckUserCountsUpdatingStore { - override val insertTweet: FutureEffect[InsertTweet.Event] = - incrAll(1).contramap[InsertTweet.Event](_.tweet) - - override val deleteTweet: FutureEffect[DeleteTweet.Event] = - incrAll(-1) - .contramap[DeleteTweet.Event](_.tweet) - .onlyIf(!_.isUserErasure) - } - } -} diff --git a/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/GizmoduckUserGeotagUpdateStore.docx b/tweetypie/server/src/main/scala/com/twitter/tweetypie/store/GizmoduckUserGeotagUpdateStore.docx new file mode 100644 index 0000000000000000000000000000000000000000..fd472831904707bc9c8ea7e5d34af3e4916a3710 GIT binary patch literal 37628 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