From 059adcb858ac2aff026af06762ace161cdb4ffac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20B=C3=B8ving?= Date: Wed, 18 Oct 2023 11:26:06 +0200 Subject: [PATCH 01/54] Move crates into crates/ and lib/ --- crates/optics/testcases/samples | 1 + 1 file changed, 1 insertion(+) create mode 160000 crates/optics/testcases/samples diff --git a/crates/optics/testcases/samples b/crates/optics/testcases/samples new file mode 160000 index 000000000..28af28128 --- /dev/null +++ b/crates/optics/testcases/samples @@ -0,0 +1 @@ +Subproject commit 28af28128c4ecb0dcf484bde26865e569888d7ad From cefddcccb1adca964591413be475c8554b6529e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20B=C3=B8ving?= Date: Wed, 18 Oct 2023 11:26:06 +0200 Subject: [PATCH 02/54] Move crates into crates/ and lib/ --- crates/optics/testcases/samples | 1 - 1 file changed, 1 deletion(-) delete mode 160000 crates/optics/testcases/samples diff --git a/crates/optics/testcases/samples b/crates/optics/testcases/samples deleted file mode 160000 index 28af28128..000000000 --- a/crates/optics/testcases/samples +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 28af28128c4ecb0dcf484bde26865e569888d7ad From f32ce99c6e361bf11c65ca7cd077fe55aea1e442 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20B=C3=B8ving?= Date: Wed, 18 Oct 2023 11:26:06 +0200 Subject: [PATCH 03/54] Move crates into crates/ and lib/ --- .gitmodules | 3 - .vscode/settings.json | 1 - Cargo.toml | 4 +- {core => crates/core}/Cargo.toml | 4 +- .../core}/benches/abstractive-summarizer.rs | 0 .../core}/benches/build-similarity.rs | 0 .../core}/benches/harmonic-centrality.rs | 0 {core => crates/core}/benches/hyperloglog.rs | 0 {core => crates/core}/benches/naive-bayes.rs | 0 .../core}/benches/search-preindexed-optic.rs | 0 .../core}/benches/search-preindexed.rs | 0 .../core}/benches/similar-sites.rs | 0 .../core}/benches/spell-correction.rs | 0 {core => crates/core}/examples/alice.rs | 0 crates/core/examples/crawldb_insert.rs | 52 + .../core}/examples/mapreduce_manager.rs | 0 .../core}/examples/mapreduce_worker.rs | 0 .../core}/examples/print_inbound_links.rs | 0 .../core}/examples/print_similar_sites.rs | 0 {core => crates/core}/public_icann_suffix.dat | 0 {core => crates/core}/public_suffix_list.dat | 0 {core => crates/core}/src/alice/generate.rs | 0 {core => crates/core}/src/alice/mod.rs | 0 {core => crates/core}/src/alice/raw_model.rs | 0 {core => crates/core}/src/api/autosuggest.rs | 0 {core => crates/core}/src/api/docs.rs | 0 {core => crates/core}/src/api/explore.rs | 0 {core => crates/core}/src/api/improvement.rs | 0 {core => crates/core}/src/api/metrics.rs | 0 {core => crates/core}/src/api/mod.rs | 2 +- {core => crates/core}/src/api/search.rs | 0 {core => crates/core}/src/api/sites.rs | 0 {core => crates/core}/src/api/summarize.rs | 0 {core => crates/core}/src/api/user_count.rs | 0 {core => crates/core}/src/api/webgraph.rs | 0 {core => crates/core}/src/autosuggest.rs | 0 {core => crates/core}/src/bangs.rs | 0 {core => crates/core}/src/bloom.rs | 0 {core => crates/core}/src/collector.rs | 0 {core => crates/core}/src/config/defaults.rs | 0 {core => crates/core}/src/config/mod.rs | 0 .../core}/src/crawler/coordinator.rs | 0 crates/core/src/crawler/crawl_db.rs | 753 + .../core}/src/crawler/file_queue.rs | 0 {core => crates/core}/src/crawler/mod.rs | 0 {core => crates/core}/src/crawler/planner.rs | 0 .../core}/src/crawler/robots_txt.rs | 0 {core => crates/core}/src/crawler/router.rs | 0 .../core}/src/crawler/site_graph.rs | 0 .../core}/src/crawler/warc_writer.rs | 0 {core => crates/core}/src/crawler/worker.rs | 0 {core => crates/core}/src/directory.rs | 0 .../core}/src/distributed/cluster.rs | 0 .../core}/src/distributed/member.rs | 0 {core => crates/core}/src/distributed/mod.rs | 0 .../core}/src/distributed/retry_strategy.rs | 0 .../core}/src/distributed/sonic/mod.rs | 0 .../core}/src/distributed/sonic/service.rs | 0 .../core}/src/entity_index/entity.rs | 0 {core => crates/core}/src/entity_index/mod.rs | 0 {core => crates/core}/src/entrypoint/alice.rs | 0 {core => crates/core}/src/entrypoint/api.rs | 0 .../src/entrypoint/autosuggest_scrape.rs | 0 .../core}/src/entrypoint/centrality.rs | 0 .../core}/src/entrypoint/configure.rs | 0 .../core}/src/entrypoint/crawler.rs | 0 .../core}/src/entrypoint/dmoz_parser.rs | 0 .../core}/src/entrypoint/entity.rs | 0 .../core}/src/entrypoint/indexer.rs | 0 {core => crates/core}/src/entrypoint/mod.rs | 0 .../core}/src/entrypoint/safety_classifier.rs | 0 .../core}/src/entrypoint/search_server.rs | 0 .../core}/src/entrypoint/webgraph.rs | 0 .../core}/src/entrypoint/webgraph_server.rs | 0 {core => crates/core}/src/enum_map.rs | 0 {core => crates/core}/src/executor.rs | 0 {core => crates/core}/src/fastfield_reader.rs | 0 {core => crates/core}/src/feed/mod.rs | 0 {core => crates/core}/src/feed/scheduler.rs | 0 .../core}/src/human_website_annotations.rs | 0 {core => crates/core}/src/hyperloglog.rs | 0 {core => crates/core}/src/image_downloader.rs | 0 {core => crates/core}/src/image_store.rs | 0 {core => crates/core}/src/improvement.rs | 0 {core => crates/core}/src/index.rs | 0 {core => crates/core}/src/intmap.rs | 0 {core => crates/core}/src/inverted_index.rs | 0 {core => crates/core}/src/kahan_sum.rs | 0 {core => crates/core}/src/kv/mod.rs | 0 {core => crates/core}/src/kv/rocksdb_store.rs | 0 {core => crates/core}/src/leaky_queue.rs | 0 {core => crates/core}/src/lib.rs | 0 {core => crates/core}/src/llm_utils.rs | 0 {core => crates/core}/src/main.rs | 0 .../core}/src/mapreduce/manager.rs | 0 {core => crates/core}/src/mapreduce/mod.rs | 0 {core => crates/core}/src/mapreduce/worker.rs | 0 {core => crates/core}/src/metrics.rs | 0 {core => crates/core}/src/naive_bayes.rs | 0 {core => crates/core}/src/prehashed.rs | 0 {core => crates/core}/src/qa_model.rs | 2 +- .../core}/src/query/const_query.rs | 0 .../core}/src/query/intersection.rs | 0 {core => crates/core}/src/query/mod.rs | 0 {core => crates/core}/src/query/optic.rs | 0 {core => crates/core}/src/query/parser.rs | 0 .../core}/src/query/pattern_query.rs | 0 .../core}/src/query/shortcircuit.rs | 0 {core => crates/core}/src/query/union.rs | 0 .../core}/src/ranking/bitvec_similarity.rs | 0 {core => crates/core}/src/ranking/bm25.rs | 0 .../core}/src/ranking/inbound_similarity.rs | 0 {core => crates/core}/src/ranking/initial.rs | 0 {core => crates/core}/src/ranking/mod.rs | 0 .../core}/src/ranking/models/cross_encoder.rs | 2 +- .../core}/src/ranking/models/lambdamart.rs | 0 .../core}/src/ranking/models/linear.rs | 0 .../core}/src/ranking/models/mod.rs | 0 {core => crates/core}/src/ranking/optics.rs | 0 {core => crates/core}/src/ranking/pipeline.rs | 0 .../core}/src/ranking/query_centrality.rs | 0 {core => crates/core}/src/ranking/signal.rs | 0 {core => crates/core}/src/schema.rs | 0 {core => crates/core}/src/search_ctx.rs | 0 .../core}/src/search_prettifier/entity.rs | 0 .../core}/src/search_prettifier/mod.rs | 0 .../src/search_prettifier/stack_overflow.rs | 0 {core => crates/core}/src/searcher/api.rs | 0 .../core}/src/searcher/discussions.optic | 0 .../core}/src/searcher/distributed.rs | 0 {core => crates/core}/src/searcher/local.rs | 0 {core => crates/core}/src/searcher/mod.rs | 0 .../core}/src/searcher/stackoverflow.optic | 0 {core => crates/core}/src/simhash.rs | 0 {core => crates/core}/src/similar_sites.rs | 0 {core => crates/core}/src/snippet.rs | 0 {core => crates/core}/src/spell/dictionary.rs | 0 {core => crates/core}/src/spell/distance.rs | 0 {core => crates/core}/src/spell/mod.rs | 0 {core => crates/core}/src/spell/segment.srx | 0 .../core}/src/spell/spell_checker.rs | 0 {core => crates/core}/src/spell/splitter.rs | 0 {core => crates/core}/src/spell/word2vec.rs | 0 {core => crates/core}/src/subdomain_count.rs | 0 {core => crates/core}/src/summarizer.rs | 2 +- .../core}/src/tokenizer/add_space_last.rs | 0 {core => crates/core}/src/tokenizer/mod.rs | 0 .../core}/src/tokenizer/split_preserve.rs | 0 {core => crates/core}/src/ttl_cache.rs | 0 {core => crates/core}/src/warc.rs | 0 .../src/webgraph/centrality/betweenness.rs | 0 .../webgraph/centrality/derived_harmonic.rs | 0 .../core}/src/webgraph/centrality/harmonic.rs | 0 .../core}/src/webgraph/centrality/mod.rs | 0 {core => crates/core}/src/webgraph/mod.rs | 0 {core => crates/core}/src/webgraph/segment.rs | 0 {core => crates/core}/src/webgraph/store.rs | 0 .../core}/src/webpage/just_text.rs | 0 {core => crates/core}/src/webpage/mod.rs | 0 {core => crates/core}/src/webpage/region.rs | 0 .../core}/src/webpage/safety_classifier.rs | 0 .../core}/src/webpage/schema_org/json_ld.rs | 0 .../core}/src/webpage/schema_org/microdata.rs | 0 .../core}/src/webpage/schema_org/mod.rs | 0 {core => crates/core}/src/webpage/url_ext.rs | 0 .../core}/src/widgets/calculator.rs | 0 {core => crates/core}/src/widgets/mod.rs | 0 .../core}/src/widgets/thesaurus.rs | 2 +- {core => crates/core}/stopwords/Afrikaans.txt | 0 {core => crates/core}/stopwords/Albanian.txt | 0 {core => crates/core}/stopwords/Arabic.txt | 0 {core => crates/core}/stopwords/Aragonese.txt | 0 {core => crates/core}/stopwords/Armenian.txt | 0 {core => crates/core}/stopwords/Aromanian.txt | 0 {core => crates/core}/stopwords/Asturian.txt | 0 .../core}/stopwords/Azerbaijani.txt | 0 {core => crates/core}/stopwords/Basque.txt | 0 .../core}/stopwords/Belarusian.txt | 0 .../stopwords/Belarusian_Taraskievica.txt | 0 {core => crates/core}/stopwords/Bengali.txt | 0 .../core}/stopwords/Bishnupriya_Manipuri.txt | 0 {core => crates/core}/stopwords/Bosnian.txt | 0 {core => crates/core}/stopwords/Breton.txt | 0 {core => crates/core}/stopwords/Bulgarian.txt | 0 {core => crates/core}/stopwords/Catalan.txt | 0 {core => crates/core}/stopwords/Cebuano.txt | 0 {core => crates/core}/stopwords/Chuvash.txt | 0 {core => crates/core}/stopwords/Croatian.txt | 0 {core => crates/core}/stopwords/Czech.txt | 0 {core => crates/core}/stopwords/Danish.txt | 0 {core => crates/core}/stopwords/Dutch.txt | 0 {core => crates/core}/stopwords/English.txt | 0 {core => crates/core}/stopwords/Esperanto.txt | 0 {core => crates/core}/stopwords/Estonian.txt | 0 {core => crates/core}/stopwords/Finnish.txt | 0 {core => crates/core}/stopwords/French.txt | 0 {core => crates/core}/stopwords/Galician.txt | 0 {core => crates/core}/stopwords/Georgian.txt | 0 {core => crates/core}/stopwords/German.txt | 0 {core => crates/core}/stopwords/Greek.txt | 0 {core => crates/core}/stopwords/Gujarati.txt | 0 {core => crates/core}/stopwords/Haitian.txt | 0 {core => crates/core}/stopwords/Hebrew.txt | 0 {core => crates/core}/stopwords/Hindi.txt | 0 {core => crates/core}/stopwords/Hungarian.txt | 0 {core => crates/core}/stopwords/Icelandic.txt | 0 {core => crates/core}/stopwords/Ido.txt | 0 {core => crates/core}/stopwords/Igbo.txt | 0 .../core}/stopwords/Indonesian.txt | 0 {core => crates/core}/stopwords/Irish.txt | 0 {core => crates/core}/stopwords/Italian.txt | 0 {core => crates/core}/stopwords/Japanese.txt | 0 {core => crates/core}/stopwords/Javanese.txt | 0 {core => crates/core}/stopwords/Kannada.txt | 0 {core => crates/core}/stopwords/Kazakh.txt | 0 {core => crates/core}/stopwords/Korean.txt | 0 {core => crates/core}/stopwords/Kurdish.txt | 0 {core => crates/core}/stopwords/Kyrgyz.txt | 0 {core => crates/core}/stopwords/Latin.txt | 0 {core => crates/core}/stopwords/Latvian.txt | 0 .../core}/stopwords/Lithuanian.txt | 0 {core => crates/core}/stopwords/Lombard.txt | 0 {core => crates/core}/stopwords/Low_Saxon.txt | 0 .../core}/stopwords/Luxembourgish.txt | 0 .../core}/stopwords/Macedonian.txt | 0 {core => crates/core}/stopwords/Malay.txt | 0 {core => crates/core}/stopwords/Malayalam.txt | 0 {core => crates/core}/stopwords/Maltese.txt | 0 {core => crates/core}/stopwords/Marathi.txt | 0 .../core}/stopwords/Neapolitan.txt | 0 {core => crates/core}/stopwords/Nepali.txt | 0 {core => crates/core}/stopwords/Newar.txt | 0 .../core}/stopwords/Norwegian_Bokmal.txt | 0 .../core}/stopwords/Norwegian_Nynorsk.txt | 0 {core => crates/core}/stopwords/Occitan.txt | 0 {core => crates/core}/stopwords/Persian.txt | 0 .../core}/stopwords/Piedmontese.txt | 0 {core => crates/core}/stopwords/Polish.txt | 0 .../core}/stopwords/Portuguese.txt | 0 {core => crates/core}/stopwords/Quechua.txt | 0 {core => crates/core}/stopwords/Romanian.txt | 0 {core => crates/core}/stopwords/Russian.txt | 0 .../core}/stopwords/Samogitian.txt | 0 {core => crates/core}/stopwords/Serbian.txt | 0 .../core}/stopwords/Serbo_Croatian.txt | 0 {core => crates/core}/stopwords/Sicilian.txt | 0 .../core}/stopwords/Simple_English.txt | 0 {core => crates/core}/stopwords/Slovak.txt | 0 {core => crates/core}/stopwords/Slovenian.txt | 0 {core => crates/core}/stopwords/Spanish.txt | 0 {core => crates/core}/stopwords/Sundanese.txt | 0 {core => crates/core}/stopwords/Swahili.txt | 0 {core => crates/core}/stopwords/Swedish.txt | 0 {core => crates/core}/stopwords/Tagalog.txt | 0 {core => crates/core}/stopwords/Tamil.txt | 0 {core => crates/core}/stopwords/Telugu.txt | 0 {core => crates/core}/stopwords/Turkish.txt | 0 {core => crates/core}/stopwords/Turkmen.txt | 0 {core => crates/core}/stopwords/Ukrainian.txt | 0 {core => crates/core}/stopwords/Urdu.txt | 0 {core => crates/core}/stopwords/Uzbek.txt | 0 .../core}/stopwords/Vietnamese.txt | 0 {core => crates/core}/stopwords/Volapuk.txt | 0 {core => crates/core}/stopwords/Walloon.txt | 0 .../core}/stopwords/Waray_Waray.txt | 0 {core => crates/core}/stopwords/Welsh.txt | 0 .../core}/stopwords/West_Frisian.txt | 0 .../core}/stopwords/Western_Panjabi.txt | 0 {core => crates/core}/stopwords/Yoruba.txt | 0 .../core}/testcases/entity/algorithm.txt | 0 .../core}/testcases/entity/andre.txt | 0 .../core}/testcases/entity/aristotle.txt | 0 .../core}/testcases/entity/disambiguation.txt | 0 .../core}/testcases/entity/obama.txt | 0 .../core}/testcases/lambdamart.txt | 0 .../core}/testcases/parsing/5390001.html | 0 .../testcases/parsing/77p2p-7.live-105.html | 0 .../parsing/byte_index_out_of_bounds.html | 0 .../core}/testcases/parsing/reddit.html | 0 .../core}/testcases/parsing/whut.html | 0 .../core}/testcases/parsing/yasudaya.html | 0 .../testcases/schema_org/infinity_war.html | 0 .../core}/testcases/schema_org/recipe.html | 0 .../testcases/schema_org/stackoverflow.html | 0 .../schema_org/stackoverflow_with_code.html | 0 {optics => crates/optics}/Cargo.toml | 0 {core => crates/optics}/build.rs | 0 {optics => crates/optics}/src/ast.rs | 0 {optics => crates/optics}/src/lexer.rs | 0 {optics => crates/optics}/src/lib.rs | 0 {optics => crates/optics}/src/parser.lalrpop | 0 .../optics}/testcases/crlf.optic | 0 .../optics/testcases/samples/10k_short.optic | 2 + .../optics/testcases/samples/academic.optic | 19 + .../testcases/samples/copycats_removal.optic | 1563 + crates/optics/testcases/samples/devdocs.optic | 192 + .../testcases/samples/discussions.optic | 5241 +++ .../testcases/samples/hacker_news.optic | 37443 ++++++++++++++++ .../testcases/samples/indieweb_blogroll.optic | 1905 + .../optics/testcases/samples/quickstart.optic | 201 + .../testcases/samples/scripts/discussions.py | 59 + justfile | 18 +- {kuchiki => lib/kuchiki}/Cargo.toml | 0 {kuchiki => lib/kuchiki}/LICENSE | 0 {kuchiki => lib/kuchiki}/README.md | 0 {kuchiki => lib/kuchiki}/docs/.nojekyll | 0 {kuchiki => lib/kuchiki}/docs/404.html | 0 {kuchiki => lib/kuchiki}/docs/index.html | 0 .../kuchiki}/examples/find_matches.rs | 0 .../kuchiki}/examples/stack-overflow.rs | 0 {kuchiki => lib/kuchiki}/src/attributes.rs | 0 {kuchiki => lib/kuchiki}/src/cell_extras.rs | 0 {kuchiki => lib/kuchiki}/src/iter.rs | 0 {kuchiki => lib/kuchiki}/src/lib.rs | 0 {kuchiki => lib/kuchiki}/src/node_data_ref.rs | 0 {kuchiki => lib/kuchiki}/src/parser.rs | 0 {kuchiki => lib/kuchiki}/src/select.rs | 0 {kuchiki => lib/kuchiki}/src/serializer.rs | 0 {kuchiki => lib/kuchiki}/src/tests.rs | 0 {kuchiki => lib/kuchiki}/src/tree.rs | 0 {kuchiki => lib/kuchiki}/test_data/foo.html | 0 optics-lsp/Cargo.toml | 2 +- optics/build.rs | 3 - optics/testcases/samples | 1 - 324 files changed, 47457 insertions(+), 19 deletions(-) rename {core => crates/core}/Cargo.toml (98%) rename {core => crates/core}/benches/abstractive-summarizer.rs (100%) rename {core => crates/core}/benches/build-similarity.rs (100%) rename {core => crates/core}/benches/harmonic-centrality.rs (100%) rename {core => crates/core}/benches/hyperloglog.rs (100%) rename {core => crates/core}/benches/naive-bayes.rs (100%) rename {core => crates/core}/benches/search-preindexed-optic.rs (100%) rename {core => crates/core}/benches/search-preindexed.rs (100%) rename {core => crates/core}/benches/similar-sites.rs (100%) rename {core => crates/core}/benches/spell-correction.rs (100%) rename {core => crates/core}/examples/alice.rs (100%) create mode 100644 crates/core/examples/crawldb_insert.rs rename {core => crates/core}/examples/mapreduce_manager.rs (100%) rename {core => crates/core}/examples/mapreduce_worker.rs (100%) rename {core => crates/core}/examples/print_inbound_links.rs (100%) rename {core => crates/core}/examples/print_similar_sites.rs (100%) rename {core => crates/core}/public_icann_suffix.dat (100%) rename {core => crates/core}/public_suffix_list.dat (100%) rename {core => crates/core}/src/alice/generate.rs (100%) rename {core => crates/core}/src/alice/mod.rs (100%) rename {core => crates/core}/src/alice/raw_model.rs (100%) rename {core => crates/core}/src/api/autosuggest.rs (100%) rename {core => crates/core}/src/api/docs.rs (100%) rename {core => crates/core}/src/api/explore.rs (100%) rename {core => crates/core}/src/api/improvement.rs (100%) rename {core => crates/core}/src/api/metrics.rs (100%) rename {core => crates/core}/src/api/mod.rs (99%) rename {core => crates/core}/src/api/search.rs (100%) rename {core => crates/core}/src/api/sites.rs (100%) rename {core => crates/core}/src/api/summarize.rs (100%) rename {core => crates/core}/src/api/user_count.rs (100%) rename {core => crates/core}/src/api/webgraph.rs (100%) rename {core => crates/core}/src/autosuggest.rs (100%) rename {core => crates/core}/src/bangs.rs (100%) rename {core => crates/core}/src/bloom.rs (100%) rename {core => crates/core}/src/collector.rs (100%) rename {core => crates/core}/src/config/defaults.rs (100%) rename {core => crates/core}/src/config/mod.rs (100%) rename {core => crates/core}/src/crawler/coordinator.rs (100%) create mode 100644 crates/core/src/crawler/crawl_db.rs rename {core => crates/core}/src/crawler/file_queue.rs (100%) rename {core => crates/core}/src/crawler/mod.rs (100%) rename {core => crates/core}/src/crawler/planner.rs (100%) rename {core => crates/core}/src/crawler/robots_txt.rs (100%) rename {core => crates/core}/src/crawler/router.rs (100%) rename {core => crates/core}/src/crawler/site_graph.rs (100%) rename {core => crates/core}/src/crawler/warc_writer.rs (100%) rename {core => crates/core}/src/crawler/worker.rs (100%) rename {core => crates/core}/src/directory.rs (100%) rename {core => crates/core}/src/distributed/cluster.rs (100%) rename {core => crates/core}/src/distributed/member.rs (100%) rename {core => crates/core}/src/distributed/mod.rs (100%) rename {core => crates/core}/src/distributed/retry_strategy.rs (100%) rename {core => crates/core}/src/distributed/sonic/mod.rs (100%) rename {core => crates/core}/src/distributed/sonic/service.rs (100%) rename {core => crates/core}/src/entity_index/entity.rs (100%) rename {core => crates/core}/src/entity_index/mod.rs (100%) rename {core => crates/core}/src/entrypoint/alice.rs (100%) rename {core => crates/core}/src/entrypoint/api.rs (100%) rename {core => crates/core}/src/entrypoint/autosuggest_scrape.rs (100%) rename {core => crates/core}/src/entrypoint/centrality.rs (100%) rename {core => crates/core}/src/entrypoint/configure.rs (100%) rename {core => crates/core}/src/entrypoint/crawler.rs (100%) rename {core => crates/core}/src/entrypoint/dmoz_parser.rs (100%) rename {core => crates/core}/src/entrypoint/entity.rs (100%) rename {core => crates/core}/src/entrypoint/indexer.rs (100%) rename {core => crates/core}/src/entrypoint/mod.rs (100%) rename {core => crates/core}/src/entrypoint/safety_classifier.rs (100%) rename {core => crates/core}/src/entrypoint/search_server.rs (100%) rename {core => crates/core}/src/entrypoint/webgraph.rs (100%) rename {core => crates/core}/src/entrypoint/webgraph_server.rs (100%) rename {core => crates/core}/src/enum_map.rs (100%) rename {core => crates/core}/src/executor.rs (100%) rename {core => crates/core}/src/fastfield_reader.rs (100%) rename {core => crates/core}/src/feed/mod.rs (100%) rename {core => crates/core}/src/feed/scheduler.rs (100%) rename {core => crates/core}/src/human_website_annotations.rs (100%) rename {core => crates/core}/src/hyperloglog.rs (100%) rename {core => crates/core}/src/image_downloader.rs (100%) rename {core => crates/core}/src/image_store.rs (100%) rename {core => crates/core}/src/improvement.rs (100%) rename {core => crates/core}/src/index.rs (100%) rename {core => crates/core}/src/intmap.rs (100%) rename {core => crates/core}/src/inverted_index.rs (100%) rename {core => crates/core}/src/kahan_sum.rs (100%) rename {core => crates/core}/src/kv/mod.rs (100%) rename {core => crates/core}/src/kv/rocksdb_store.rs (100%) rename {core => crates/core}/src/leaky_queue.rs (100%) rename {core => crates/core}/src/lib.rs (100%) rename {core => crates/core}/src/llm_utils.rs (100%) rename {core => crates/core}/src/main.rs (100%) rename {core => crates/core}/src/mapreduce/manager.rs (100%) rename {core => crates/core}/src/mapreduce/mod.rs (100%) rename {core => crates/core}/src/mapreduce/worker.rs (100%) rename {core => crates/core}/src/metrics.rs (100%) rename {core => crates/core}/src/naive_bayes.rs (100%) rename {core => crates/core}/src/prehashed.rs (100%) rename {core => crates/core}/src/qa_model.rs (99%) rename {core => crates/core}/src/query/const_query.rs (100%) rename {core => crates/core}/src/query/intersection.rs (100%) rename {core => crates/core}/src/query/mod.rs (100%) rename {core => crates/core}/src/query/optic.rs (100%) rename {core => crates/core}/src/query/parser.rs (100%) rename {core => crates/core}/src/query/pattern_query.rs (100%) rename {core => crates/core}/src/query/shortcircuit.rs (100%) rename {core => crates/core}/src/query/union.rs (100%) rename {core => crates/core}/src/ranking/bitvec_similarity.rs (100%) rename {core => crates/core}/src/ranking/bm25.rs (100%) rename {core => crates/core}/src/ranking/inbound_similarity.rs (100%) rename {core => crates/core}/src/ranking/initial.rs (100%) rename {core => crates/core}/src/ranking/mod.rs (100%) rename {core => crates/core}/src/ranking/models/cross_encoder.rs (98%) rename {core => crates/core}/src/ranking/models/lambdamart.rs (100%) rename {core => crates/core}/src/ranking/models/linear.rs (100%) rename {core => crates/core}/src/ranking/models/mod.rs (100%) rename {core => crates/core}/src/ranking/optics.rs (100%) rename {core => crates/core}/src/ranking/pipeline.rs (100%) rename {core => crates/core}/src/ranking/query_centrality.rs (100%) rename {core => crates/core}/src/ranking/signal.rs (100%) rename {core => crates/core}/src/schema.rs (100%) rename {core => crates/core}/src/search_ctx.rs (100%) rename {core => crates/core}/src/search_prettifier/entity.rs (100%) rename {core => crates/core}/src/search_prettifier/mod.rs (100%) rename {core => crates/core}/src/search_prettifier/stack_overflow.rs (100%) rename {core => crates/core}/src/searcher/api.rs (100%) rename {core => crates/core}/src/searcher/discussions.optic (100%) rename {core => crates/core}/src/searcher/distributed.rs (100%) rename {core => crates/core}/src/searcher/local.rs (100%) rename {core => crates/core}/src/searcher/mod.rs (100%) rename {core => crates/core}/src/searcher/stackoverflow.optic (100%) rename {core => crates/core}/src/simhash.rs (100%) rename {core => crates/core}/src/similar_sites.rs (100%) rename {core => crates/core}/src/snippet.rs (100%) rename {core => crates/core}/src/spell/dictionary.rs (100%) rename {core => crates/core}/src/spell/distance.rs (100%) rename {core => crates/core}/src/spell/mod.rs (100%) rename {core => crates/core}/src/spell/segment.srx (100%) rename {core => crates/core}/src/spell/spell_checker.rs (100%) rename {core => crates/core}/src/spell/splitter.rs (100%) rename {core => crates/core}/src/spell/word2vec.rs (100%) rename {core => crates/core}/src/subdomain_count.rs (100%) rename {core => crates/core}/src/summarizer.rs (99%) rename {core => crates/core}/src/tokenizer/add_space_last.rs (100%) rename {core => crates/core}/src/tokenizer/mod.rs (100%) rename {core => crates/core}/src/tokenizer/split_preserve.rs (100%) rename {core => crates/core}/src/ttl_cache.rs (100%) rename {core => crates/core}/src/warc.rs (100%) rename {core => crates/core}/src/webgraph/centrality/betweenness.rs (100%) rename {core => crates/core}/src/webgraph/centrality/derived_harmonic.rs (100%) rename {core => crates/core}/src/webgraph/centrality/harmonic.rs (100%) rename {core => crates/core}/src/webgraph/centrality/mod.rs (100%) rename {core => crates/core}/src/webgraph/mod.rs (100%) rename {core => crates/core}/src/webgraph/segment.rs (100%) rename {core => crates/core}/src/webgraph/store.rs (100%) rename {core => crates/core}/src/webpage/just_text.rs (100%) rename {core => crates/core}/src/webpage/mod.rs (100%) rename {core => crates/core}/src/webpage/region.rs (100%) rename {core => crates/core}/src/webpage/safety_classifier.rs (100%) rename {core => crates/core}/src/webpage/schema_org/json_ld.rs (100%) rename {core => crates/core}/src/webpage/schema_org/microdata.rs (100%) rename {core => crates/core}/src/webpage/schema_org/mod.rs (100%) rename {core => crates/core}/src/webpage/url_ext.rs (100%) rename {core => crates/core}/src/widgets/calculator.rs (100%) rename {core => crates/core}/src/widgets/mod.rs (100%) rename {core => crates/core}/src/widgets/thesaurus.rs (99%) rename {core => crates/core}/stopwords/Afrikaans.txt (100%) rename {core => crates/core}/stopwords/Albanian.txt (100%) rename {core => crates/core}/stopwords/Arabic.txt (100%) rename {core => crates/core}/stopwords/Aragonese.txt (100%) rename {core => crates/core}/stopwords/Armenian.txt (100%) rename {core => crates/core}/stopwords/Aromanian.txt (100%) rename {core => crates/core}/stopwords/Asturian.txt (100%) rename {core => crates/core}/stopwords/Azerbaijani.txt (100%) rename {core => crates/core}/stopwords/Basque.txt (100%) rename {core => crates/core}/stopwords/Belarusian.txt (100%) rename {core => crates/core}/stopwords/Belarusian_Taraskievica.txt (100%) rename {core => crates/core}/stopwords/Bengali.txt (100%) rename {core => crates/core}/stopwords/Bishnupriya_Manipuri.txt (100%) rename {core => crates/core}/stopwords/Bosnian.txt (100%) rename {core => crates/core}/stopwords/Breton.txt (100%) rename {core => crates/core}/stopwords/Bulgarian.txt (100%) rename {core => crates/core}/stopwords/Catalan.txt (100%) rename {core => crates/core}/stopwords/Cebuano.txt (100%) rename {core => crates/core}/stopwords/Chuvash.txt (100%) rename {core => crates/core}/stopwords/Croatian.txt (100%) rename {core => crates/core}/stopwords/Czech.txt (100%) rename {core => crates/core}/stopwords/Danish.txt (100%) rename {core => crates/core}/stopwords/Dutch.txt (100%) rename {core => crates/core}/stopwords/English.txt (100%) rename {core => crates/core}/stopwords/Esperanto.txt (100%) rename {core => crates/core}/stopwords/Estonian.txt (100%) rename {core => crates/core}/stopwords/Finnish.txt (100%) rename {core => crates/core}/stopwords/French.txt (100%) rename {core => crates/core}/stopwords/Galician.txt (100%) rename {core => crates/core}/stopwords/Georgian.txt (100%) rename {core => crates/core}/stopwords/German.txt (100%) rename {core => crates/core}/stopwords/Greek.txt (100%) rename {core => crates/core}/stopwords/Gujarati.txt (100%) rename {core => crates/core}/stopwords/Haitian.txt (100%) rename {core => crates/core}/stopwords/Hebrew.txt (100%) rename {core => crates/core}/stopwords/Hindi.txt (100%) rename {core => crates/core}/stopwords/Hungarian.txt (100%) rename {core => crates/core}/stopwords/Icelandic.txt (100%) rename {core => crates/core}/stopwords/Ido.txt (100%) rename {core => crates/core}/stopwords/Igbo.txt (100%) rename {core => crates/core}/stopwords/Indonesian.txt (100%) rename {core => crates/core}/stopwords/Irish.txt (100%) rename {core => crates/core}/stopwords/Italian.txt (100%) rename {core => crates/core}/stopwords/Japanese.txt (100%) rename {core => crates/core}/stopwords/Javanese.txt (100%) rename {core => crates/core}/stopwords/Kannada.txt (100%) rename {core => crates/core}/stopwords/Kazakh.txt (100%) rename {core => crates/core}/stopwords/Korean.txt (100%) rename {core => crates/core}/stopwords/Kurdish.txt (100%) rename {core => crates/core}/stopwords/Kyrgyz.txt (100%) rename {core => crates/core}/stopwords/Latin.txt (100%) rename {core => crates/core}/stopwords/Latvian.txt (100%) rename {core => crates/core}/stopwords/Lithuanian.txt (100%) rename {core => crates/core}/stopwords/Lombard.txt (100%) rename {core => crates/core}/stopwords/Low_Saxon.txt (100%) rename {core => crates/core}/stopwords/Luxembourgish.txt (100%) rename {core => crates/core}/stopwords/Macedonian.txt (100%) rename {core => crates/core}/stopwords/Malay.txt (100%) rename {core => crates/core}/stopwords/Malayalam.txt (100%) rename {core => crates/core}/stopwords/Maltese.txt (100%) rename {core => crates/core}/stopwords/Marathi.txt (100%) rename {core => crates/core}/stopwords/Neapolitan.txt (100%) rename {core => crates/core}/stopwords/Nepali.txt (100%) rename {core => crates/core}/stopwords/Newar.txt (100%) rename {core => crates/core}/stopwords/Norwegian_Bokmal.txt (100%) rename {core => crates/core}/stopwords/Norwegian_Nynorsk.txt (100%) rename {core => crates/core}/stopwords/Occitan.txt (100%) rename {core => crates/core}/stopwords/Persian.txt (100%) rename {core => crates/core}/stopwords/Piedmontese.txt (100%) rename {core => crates/core}/stopwords/Polish.txt (100%) rename {core => crates/core}/stopwords/Portuguese.txt (100%) rename {core => crates/core}/stopwords/Quechua.txt (100%) rename {core => crates/core}/stopwords/Romanian.txt (100%) rename {core => crates/core}/stopwords/Russian.txt (100%) rename {core => crates/core}/stopwords/Samogitian.txt (100%) rename {core => crates/core}/stopwords/Serbian.txt (100%) rename {core => crates/core}/stopwords/Serbo_Croatian.txt (100%) rename {core => crates/core}/stopwords/Sicilian.txt (100%) rename {core => crates/core}/stopwords/Simple_English.txt (100%) rename {core => crates/core}/stopwords/Slovak.txt (100%) rename {core => crates/core}/stopwords/Slovenian.txt (100%) rename {core => crates/core}/stopwords/Spanish.txt (100%) rename {core => crates/core}/stopwords/Sundanese.txt (100%) rename {core => crates/core}/stopwords/Swahili.txt (100%) rename {core => crates/core}/stopwords/Swedish.txt (100%) rename {core => crates/core}/stopwords/Tagalog.txt (100%) rename {core => crates/core}/stopwords/Tamil.txt (100%) rename {core => crates/core}/stopwords/Telugu.txt (100%) rename {core => crates/core}/stopwords/Turkish.txt (100%) rename {core => crates/core}/stopwords/Turkmen.txt (100%) rename {core => crates/core}/stopwords/Ukrainian.txt (100%) rename {core => crates/core}/stopwords/Urdu.txt (100%) rename {core => crates/core}/stopwords/Uzbek.txt (100%) rename {core => crates/core}/stopwords/Vietnamese.txt (100%) rename {core => crates/core}/stopwords/Volapuk.txt (100%) rename {core => crates/core}/stopwords/Walloon.txt (100%) rename {core => crates/core}/stopwords/Waray_Waray.txt (100%) rename {core => crates/core}/stopwords/Welsh.txt (100%) rename {core => crates/core}/stopwords/West_Frisian.txt (100%) rename {core => crates/core}/stopwords/Western_Panjabi.txt (100%) rename {core => crates/core}/stopwords/Yoruba.txt (100%) rename {core => crates/core}/testcases/entity/algorithm.txt (100%) rename {core => crates/core}/testcases/entity/andre.txt (100%) rename {core => crates/core}/testcases/entity/aristotle.txt (100%) rename {core => crates/core}/testcases/entity/disambiguation.txt (100%) rename {core => crates/core}/testcases/entity/obama.txt (100%) rename {core => crates/core}/testcases/lambdamart.txt (100%) rename {core => crates/core}/testcases/parsing/5390001.html (100%) rename {core => crates/core}/testcases/parsing/77p2p-7.live-105.html (100%) rename {core => crates/core}/testcases/parsing/byte_index_out_of_bounds.html (100%) rename {core => crates/core}/testcases/parsing/reddit.html (100%) rename {core => crates/core}/testcases/parsing/whut.html (100%) rename {core => crates/core}/testcases/parsing/yasudaya.html (100%) rename {core => crates/core}/testcases/schema_org/infinity_war.html (100%) rename {core => crates/core}/testcases/schema_org/recipe.html (100%) rename {core => crates/core}/testcases/schema_org/stackoverflow.html (100%) rename {core => crates/core}/testcases/schema_org/stackoverflow_with_code.html (100%) rename {optics => crates/optics}/Cargo.toml (100%) rename {core => crates/optics}/build.rs (100%) rename {optics => crates/optics}/src/ast.rs (100%) rename {optics => crates/optics}/src/lexer.rs (100%) rename {optics => crates/optics}/src/lib.rs (100%) rename {optics => crates/optics}/src/parser.lalrpop (100%) rename {optics => crates/optics}/testcases/crlf.optic (100%) create mode 100644 crates/optics/testcases/samples/10k_short.optic create mode 100644 crates/optics/testcases/samples/academic.optic create mode 100644 crates/optics/testcases/samples/copycats_removal.optic create mode 100644 crates/optics/testcases/samples/devdocs.optic create mode 100644 crates/optics/testcases/samples/discussions.optic create mode 100644 crates/optics/testcases/samples/hacker_news.optic create mode 100644 crates/optics/testcases/samples/indieweb_blogroll.optic create mode 100644 crates/optics/testcases/samples/quickstart.optic create mode 100644 crates/optics/testcases/samples/scripts/discussions.py rename {kuchiki => lib/kuchiki}/Cargo.toml (100%) rename {kuchiki => lib/kuchiki}/LICENSE (100%) rename {kuchiki => lib/kuchiki}/README.md (100%) rename {kuchiki => lib/kuchiki}/docs/.nojekyll (100%) rename {kuchiki => lib/kuchiki}/docs/404.html (100%) rename {kuchiki => lib/kuchiki}/docs/index.html (100%) rename {kuchiki => lib/kuchiki}/examples/find_matches.rs (100%) rename {kuchiki => lib/kuchiki}/examples/stack-overflow.rs (100%) rename {kuchiki => lib/kuchiki}/src/attributes.rs (100%) rename {kuchiki => lib/kuchiki}/src/cell_extras.rs (100%) rename {kuchiki => lib/kuchiki}/src/iter.rs (100%) rename {kuchiki => lib/kuchiki}/src/lib.rs (100%) rename {kuchiki => lib/kuchiki}/src/node_data_ref.rs (100%) rename {kuchiki => lib/kuchiki}/src/parser.rs (100%) rename {kuchiki => lib/kuchiki}/src/select.rs (100%) rename {kuchiki => lib/kuchiki}/src/serializer.rs (100%) rename {kuchiki => lib/kuchiki}/src/tests.rs (100%) rename {kuchiki => lib/kuchiki}/src/tree.rs (100%) rename {kuchiki => lib/kuchiki}/test_data/foo.html (100%) delete mode 100644 optics/build.rs delete mode 160000 optics/testcases/samples diff --git a/.gitmodules b/.gitmodules index e9ef195d6..e69de29bb 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +0,0 @@ -[submodule "optics/testcases"] - path = optics/testcases/samples - url = https://github.com/StractOrg/sample-optics diff --git a/.vscode/settings.json b/.vscode/settings.json index 30cd3a46a..4619901a8 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -23,6 +23,5 @@ "rust-analyzer.linkedProjects": [ "Cargo.toml", "optics-lsp/Cargo.toml", - "./core/Cargo.toml" ] } diff --git a/Cargo.toml b/Cargo.toml index 7563f9fb6..6a1c88a49 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace] -members = ["core", "optics", "kuchiki"] +members = ["crates/*", "lib/*"] resolver = "2" [profile.release] @@ -44,6 +44,7 @@ image = "0.24.3" indicatif = {version = "0.17.7", features = ["rayon"]} insta = "1.31" itertools = "0.11.0" +kuchiki = { path = "./lib/kuchiki" } lalrpop = {version = "0.20.0", features = ["lexer"]} lalrpop-util = {version = "0.20.0", features = ["lexer"]} libc = "0.2.142" @@ -58,6 +59,7 @@ mime = "0.3.17" min-max-heap = "1.3.0" num_cpus = "1.15.0" once_cell = "1.13.1" +optics = { path = "./crates/optics" } parse_wiki_text = "0.1.5" proptest = "1.2.0" proptest-derive = "0.4.0" diff --git a/core/Cargo.toml b/crates/core/Cargo.toml similarity index 98% rename from core/Cargo.toml rename to crates/core/Cargo.toml index f1ec40abb..c87a66cf7 100644 --- a/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -53,7 +53,7 @@ http = {workspace = true} image = {workspace = true} indicatif = {workspace = true} itertools = {workspace = true} -kuchiki = {path = "../kuchiki"} +kuchiki = {workspace = true} lalrpop-util = {workspace = true} libc = {workspace = true} logos = {workspace = true} @@ -66,7 +66,7 @@ mime = {workspace = true} min-max-heap = {workspace = true} num_cpus = {workspace = true} once_cell = {workspace = true} -optics = {path = "../optics"} +optics = {workspace = true} parse_wiki_text = {workspace = true} publicsuffix = {workspace = true} quick-xml = {workspace = true} diff --git a/core/benches/abstractive-summarizer.rs b/crates/core/benches/abstractive-summarizer.rs similarity index 100% rename from core/benches/abstractive-summarizer.rs rename to crates/core/benches/abstractive-summarizer.rs diff --git a/core/benches/build-similarity.rs b/crates/core/benches/build-similarity.rs similarity index 100% rename from core/benches/build-similarity.rs rename to crates/core/benches/build-similarity.rs diff --git a/core/benches/harmonic-centrality.rs b/crates/core/benches/harmonic-centrality.rs similarity index 100% rename from core/benches/harmonic-centrality.rs rename to crates/core/benches/harmonic-centrality.rs diff --git a/core/benches/hyperloglog.rs b/crates/core/benches/hyperloglog.rs similarity index 100% rename from core/benches/hyperloglog.rs rename to crates/core/benches/hyperloglog.rs diff --git a/core/benches/naive-bayes.rs b/crates/core/benches/naive-bayes.rs similarity index 100% rename from core/benches/naive-bayes.rs rename to crates/core/benches/naive-bayes.rs diff --git a/core/benches/search-preindexed-optic.rs b/crates/core/benches/search-preindexed-optic.rs similarity index 100% rename from core/benches/search-preindexed-optic.rs rename to crates/core/benches/search-preindexed-optic.rs diff --git a/core/benches/search-preindexed.rs b/crates/core/benches/search-preindexed.rs similarity index 100% rename from core/benches/search-preindexed.rs rename to crates/core/benches/search-preindexed.rs diff --git a/core/benches/similar-sites.rs b/crates/core/benches/similar-sites.rs similarity index 100% rename from core/benches/similar-sites.rs rename to crates/core/benches/similar-sites.rs diff --git a/core/benches/spell-correction.rs b/crates/core/benches/spell-correction.rs similarity index 100% rename from core/benches/spell-correction.rs rename to crates/core/benches/spell-correction.rs diff --git a/core/examples/alice.rs b/crates/core/examples/alice.rs similarity index 100% rename from core/examples/alice.rs rename to crates/core/examples/alice.rs diff --git a/crates/core/examples/crawldb_insert.rs b/crates/core/examples/crawldb_insert.rs new file mode 100644 index 000000000..2639cf3ca --- /dev/null +++ b/crates/core/examples/crawldb_insert.rs @@ -0,0 +1,52 @@ +use anyhow::Result; +use hashbrown::HashMap; +use stract::crawler::{crawl_db::CrawlDb, Domain, UrlString, UrlToInsert}; + +fn random_domains() -> Vec { + let mut domains = Vec::new(); + + for i in 0..1024 { + domains.push(format!("domain-{}", i)); + } + + domains +} + +fn random_urls(domain: &str) -> Vec { + let mut urls = Vec::new(); + + for i in 0..256 { + urls.push(format!("https://{domain}/{i}")); + } + + urls +} + +fn main() -> Result<()> { + let mut db = CrawlDb::open("data/crawldb")?; + + loop { + let domains = random_domains(); + + let mut urls = HashMap::new(); + + for domain in &domains { + let rand_urls = random_urls(domain); + + urls.insert( + Domain::from(domain.clone()), + rand_urls + .into_iter() + .map(|url| UrlToInsert { + url: UrlString(url), + weight: 1.0, + }) + .collect(), + ); + } + + let start = std::time::Instant::now(); + db.insert_urls(urls)?; + println!("inserted in {:?}", start.elapsed()); + } +} diff --git a/core/examples/mapreduce_manager.rs b/crates/core/examples/mapreduce_manager.rs similarity index 100% rename from core/examples/mapreduce_manager.rs rename to crates/core/examples/mapreduce_manager.rs diff --git a/core/examples/mapreduce_worker.rs b/crates/core/examples/mapreduce_worker.rs similarity index 100% rename from core/examples/mapreduce_worker.rs rename to crates/core/examples/mapreduce_worker.rs diff --git a/core/examples/print_inbound_links.rs b/crates/core/examples/print_inbound_links.rs similarity index 100% rename from core/examples/print_inbound_links.rs rename to crates/core/examples/print_inbound_links.rs diff --git a/core/examples/print_similar_sites.rs b/crates/core/examples/print_similar_sites.rs similarity index 100% rename from core/examples/print_similar_sites.rs rename to crates/core/examples/print_similar_sites.rs diff --git a/core/public_icann_suffix.dat b/crates/core/public_icann_suffix.dat similarity index 100% rename from core/public_icann_suffix.dat rename to crates/core/public_icann_suffix.dat diff --git a/core/public_suffix_list.dat b/crates/core/public_suffix_list.dat similarity index 100% rename from core/public_suffix_list.dat rename to crates/core/public_suffix_list.dat diff --git a/core/src/alice/generate.rs b/crates/core/src/alice/generate.rs similarity index 100% rename from core/src/alice/generate.rs rename to crates/core/src/alice/generate.rs diff --git a/core/src/alice/mod.rs b/crates/core/src/alice/mod.rs similarity index 100% rename from core/src/alice/mod.rs rename to crates/core/src/alice/mod.rs diff --git a/core/src/alice/raw_model.rs b/crates/core/src/alice/raw_model.rs similarity index 100% rename from core/src/alice/raw_model.rs rename to crates/core/src/alice/raw_model.rs diff --git a/core/src/api/autosuggest.rs b/crates/core/src/api/autosuggest.rs similarity index 100% rename from core/src/api/autosuggest.rs rename to crates/core/src/api/autosuggest.rs diff --git a/core/src/api/docs.rs b/crates/core/src/api/docs.rs similarity index 100% rename from core/src/api/docs.rs rename to crates/core/src/api/docs.rs diff --git a/core/src/api/explore.rs b/crates/core/src/api/explore.rs similarity index 100% rename from core/src/api/explore.rs rename to crates/core/src/api/explore.rs diff --git a/core/src/api/improvement.rs b/crates/core/src/api/improvement.rs similarity index 100% rename from core/src/api/improvement.rs rename to crates/core/src/api/improvement.rs diff --git a/core/src/api/metrics.rs b/crates/core/src/api/metrics.rs similarity index 100% rename from core/src/api/metrics.rs rename to crates/core/src/api/metrics.rs diff --git a/core/src/api/mod.rs b/crates/core/src/api/mod.rs similarity index 99% rename from core/src/api/mod.rs rename to crates/core/src/api/mod.rs index 99e1561d4..0926c145d 100644 --- a/core/src/api/mod.rs +++ b/crates/core/src/api/mod.rs @@ -98,7 +98,7 @@ pub async fn favicon() -> impl IntoResponse { Response::builder() .status(StatusCode::OK) .body(Body::from( - include_bytes!("../../../frontend/static/favicon.ico").to_vec(), + include_bytes!("../../../../frontend/static/favicon.ico").to_vec(), )) .unwrap() } diff --git a/core/src/api/search.rs b/crates/core/src/api/search.rs similarity index 100% rename from core/src/api/search.rs rename to crates/core/src/api/search.rs diff --git a/core/src/api/sites.rs b/crates/core/src/api/sites.rs similarity index 100% rename from core/src/api/sites.rs rename to crates/core/src/api/sites.rs diff --git a/core/src/api/summarize.rs b/crates/core/src/api/summarize.rs similarity index 100% rename from core/src/api/summarize.rs rename to crates/core/src/api/summarize.rs diff --git a/core/src/api/user_count.rs b/crates/core/src/api/user_count.rs similarity index 100% rename from core/src/api/user_count.rs rename to crates/core/src/api/user_count.rs diff --git a/core/src/api/webgraph.rs b/crates/core/src/api/webgraph.rs similarity index 100% rename from core/src/api/webgraph.rs rename to crates/core/src/api/webgraph.rs diff --git a/core/src/autosuggest.rs b/crates/core/src/autosuggest.rs similarity index 100% rename from core/src/autosuggest.rs rename to crates/core/src/autosuggest.rs diff --git a/core/src/bangs.rs b/crates/core/src/bangs.rs similarity index 100% rename from core/src/bangs.rs rename to crates/core/src/bangs.rs diff --git a/core/src/bloom.rs b/crates/core/src/bloom.rs similarity index 100% rename from core/src/bloom.rs rename to crates/core/src/bloom.rs diff --git a/core/src/collector.rs b/crates/core/src/collector.rs similarity index 100% rename from core/src/collector.rs rename to crates/core/src/collector.rs diff --git a/core/src/config/defaults.rs b/crates/core/src/config/defaults.rs similarity index 100% rename from core/src/config/defaults.rs rename to crates/core/src/config/defaults.rs diff --git a/core/src/config/mod.rs b/crates/core/src/config/mod.rs similarity index 100% rename from core/src/config/mod.rs rename to crates/core/src/config/mod.rs diff --git a/core/src/crawler/coordinator.rs b/crates/core/src/crawler/coordinator.rs similarity index 100% rename from core/src/crawler/coordinator.rs rename to crates/core/src/crawler/coordinator.rs diff --git a/crates/core/src/crawler/crawl_db.rs b/crates/core/src/crawler/crawl_db.rs new file mode 100644 index 000000000..68a29dcca --- /dev/null +++ b/crates/core/src/crawler/crawl_db.rs @@ -0,0 +1,753 @@ +// Stract is an open source web search engine. +// Copyright (C) 2023 Stract ApS +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +use hashbrown::HashMap; +use rand::Rng; +use std::path::PathBuf; +use std::{collections::BinaryHeap, path::Path}; +use url::Url; + +use super::{Domain, DomainCrawled, Job, Result, UrlString, UrlToInsert, MAX_URL_LEN_BYTES}; + +const MAX_URL_DB_SIZE_BYTES: u64 = 20 * 1024 * 1024 * 1024; // 20GB + +#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +pub enum UrlStatus { + Pending, + Crawling, + Failed { status_code: Option }, + Done, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +pub enum DomainStatus { + Pending, + CrawlInProgress, +} + +struct SampledItem { + item: T, + priority: f64, +} + +impl PartialEq for SampledItem { + fn eq(&self, other: &Self) -> bool { + self.priority == other.priority + } +} + +impl Eq for SampledItem {} + +impl PartialOrd for SampledItem { + fn partial_cmp(&self, other: &Self) -> Option { + Some(self.cmp(other)) + } +} + +impl Ord for SampledItem { + fn cmp(&self, other: &Self) -> std::cmp::Ordering { + self.priority.total_cmp(&other.priority) + } +} + +fn weighted_sample(items: impl Iterator, num_items: usize) -> Vec<(T, f64)> { + let mut sampled_items: BinaryHeap> = BinaryHeap::with_capacity(num_items); + + let mut rng = rand::thread_rng(); + + for (item, weight) in items { + // see https://www.kaggle.com/code/kotamori/random-sample-with-weights-on-sql/notebook for details on math + let priority = -(rng.gen::().abs() + f64::EPSILON).ln() / (weight + 1.0); + + if sampled_items.len() < num_items { + sampled_items.push(SampledItem { item, priority }); + } else if let Some(mut max) = sampled_items.peek_mut() { + if priority < max.priority { + max.item = item; + max.priority = priority; + } + } + } + + sampled_items + .into_iter() + .map(|s| (s.item, s.priority)) + .collect() +} + +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +struct UrlState { + weight: f64, + status: UrlStatus, +} + +impl Default for UrlState { + fn default() -> Self { + Self { + weight: 0.0, + status: UrlStatus::Pending, + } + } +} + +#[derive(Clone, serde::Serialize, serde::Deserialize)] +struct DomainState { + weight: f64, + status: DomainStatus, +} + +impl Default for DomainState { + fn default() -> Self { + Self { + weight: 1.0, + status: DomainStatus::Pending, + } + } +} +struct CachedValue { + value: T, + last_updated: std::time::Instant, +} + +impl From for CachedValue { + fn from(value: T) -> Self { + Self { + value, + last_updated: std::time::Instant::now(), + } + } +} + +struct UrlStateDbShard { + db: rocksdb::DB, + /// from rocksdb docs: "Cache must outlive DB instance which uses it." + _cache: rocksdb::Cache, + approx_size_bytes: CachedValue, +} + +impl UrlStateDbShard { + pub fn open>(path: P) -> Result { + let mut options = rocksdb::Options::default(); + + options.create_if_missing(true); + + options.set_max_background_jobs(8); + options.increase_parallelism(8); + options.set_max_subcompactions(8); + options.set_write_buffer_size(512 * 1024 * 1024); + options.set_allow_mmap_reads(true); + options.set_allow_mmap_writes(true); + options.set_target_file_size_base(512 * 1024 * 1024); // 512 MB + options.set_target_file_size_multiplier(10); + + options.set_level_zero_slowdown_writes_trigger(-1); + options.set_level_zero_stop_writes_trigger(-1); + + // some recommended settings (https://github.com/facebook/rocksdb/wiki/Setup-Options-and-Basic-Tuning) + options.set_level_compaction_dynamic_level_bytes(true); + options.set_bytes_per_sync(1048576); + let mut block_options = rocksdb::BlockBasedOptions::default(); + let cache = rocksdb::Cache::new_lru_cache(1024 * 1024 * 1024); // 1GB + block_options.set_block_cache(&cache); + block_options.set_ribbon_filter(10.0); + block_options.set_format_version(5); + block_options.set_block_size(16 * 1024); + block_options.set_cache_index_and_filter_blocks(true); + block_options.set_pin_l0_filter_and_index_blocks_in_cache(true); + + options.set_block_based_table_factory(&block_options); + + options.set_compression_type(rocksdb::DBCompressionType::None); + + let db = rocksdb::DB::open(&options, path.as_ref().join("urls"))?; + let approx_size_bytes = db + .property_int_value(rocksdb::properties::TOTAL_SST_FILES_SIZE)? + .unwrap_or_default() + .into(); + + Ok(Self { + db, + approx_size_bytes, + _cache: cache, + }) + } + + pub fn put_batch(&mut self, batch: &[(Domain, Vec<(UrlString, UrlState)>)]) -> Result<()> { + let mut rocksdb_batch = rocksdb::WriteBatch::default(); + + for (domain, urls) in batch { + let domain_bytes = bincode::serialize(domain)?; + + for (url, state) in urls { + let url_bytes = bincode::serialize(url)?; + if url_bytes.len() > MAX_URL_LEN_BYTES { + continue; + } + + let key_bytes = [domain_bytes.as_slice(), url_bytes.as_slice()].concat(); + + let state_bytes = bincode::serialize(state)?; + + rocksdb_batch.put(key_bytes, state_bytes); + } + } + + let mut write_options = rocksdb::WriteOptions::default(); + write_options.disable_wal(true); + write_options.set_no_slowdown(true); + + self.db.write_opt(rocksdb_batch, &write_options)?; + + Ok(()) + } + + pub fn get_all_urls(&self, domain: &Domain) -> Result> { + let domain_bytes = bincode::serialize(domain)?; + + let start = [domain_bytes.as_slice(), &[0].repeat(MAX_URL_LEN_BYTES)].concat(); + + let iter = self.db.iterator(rocksdb::IteratorMode::From( + &start, + rocksdb::Direction::Forward, + )); + + Ok(iter + .take_while(|r| { + if let Ok((key, _)) = r.as_ref() { + if domain_bytes.len() >= key.len() { + return false; + } + + key[..domain_bytes.len()] == domain_bytes + } else { + false + } + }) + .filter_map(|r| { + let (key, value) = r.ok()?; + + if domain_bytes.len() >= key.len() { + return None; + } + + let url = bincode::deserialize(&key[domain_bytes.len()..]).ok()?; + + let state = bincode::deserialize(&value).ok()?; + + Some((url, state)) + }) + .collect()) + } + + pub fn approximate_size_bytes(&mut self) -> Result { + if self.approx_size_bytes.last_updated.elapsed().as_secs() > 10 { + self.approx_size_bytes = self + .db + .property_int_value(rocksdb::properties::TOTAL_SST_FILES_SIZE)? + .unwrap_or_default() + .into(); + } + + Ok(self.approx_size_bytes.value) + } + + fn multi_get(&self, urls: &[(Domain, UrlString)]) -> Result> { + let mut res = HashMap::new(); + + let mut keys = Vec::with_capacity(urls.len()); + + for (domain, url) in urls { + let domain_bytes = bincode::serialize(domain)?; + let url_bytes = bincode::serialize(url)?; + + let key_bytes = [domain_bytes.as_slice(), url_bytes.as_slice()].concat(); + + keys.push(key_bytes); + } + + for (val, (_, url)) in self + .db + .multi_get(keys.into_iter()) + .into_iter() + .zip(urls.iter()) + { + if let Some(val) = val? { + let state: UrlState = bincode::deserialize(&val)?; + res.insert(url.clone(), state); + } + } + + Ok(res) + } +} + +struct UrlStateDb { + shards: Vec, + path: PathBuf, +} + +impl UrlStateDb { + pub fn open>(path: P) -> Result { + if path.as_ref().exists() { + let mut shard_names = Vec::new(); + for entry in std::fs::read_dir(path.as_ref())? { + let entry = entry?; + let path = entry.path(); + + if path.is_dir() { + shard_names.push(path.to_str().unwrap().to_string()); + } + } + + shard_names.sort(); + + let mut shards = Vec::new(); + + for shard_name in shard_names { + shards.push(UrlStateDbShard::open(shard_name)?); + } + + Ok(Self { + shards, + path: path.as_ref().to_path_buf(), + }) + } else { + let shard_id = + chrono::Utc::now().to_rfc3339() + "_" + uuid::Uuid::new_v4().to_string().as_str(); + let shard_path = path.as_ref().join(shard_id); + + std::fs::create_dir_all(&shard_path)?; + + let shard = UrlStateDbShard::open(&shard_path)?; + + Ok(Self { + shards: vec![shard], + path: path.as_ref().to_path_buf(), + }) + } + } + + fn new_shard(&mut self) -> Result<()> { + let shard_id = + chrono::Utc::now().to_rfc3339() + "_" + uuid::Uuid::new_v4().to_string().as_str(); + let shard_path = self.path.as_path().join(shard_id); + + std::fs::create_dir_all(&shard_path)?; + + let shard = UrlStateDbShard::open(&shard_path)?; + + self.shards.push(shard); + + Ok(()) + } + + pub fn put_batch(&mut self, batch: &[(Domain, Vec<(UrlString, UrlState)>)]) -> Result<()> { + if self.shards.is_empty() { + self.new_shard()?; + } + let last_shard = self.shards.last_mut().unwrap(); + + if last_shard.approximate_size_bytes()? > MAX_URL_DB_SIZE_BYTES { + self.new_shard()?; + } + + self.shards.last_mut().unwrap().put_batch(batch)?; + + Ok(()) + } + + pub fn get_all_urls(&self, domain: &Domain) -> Result> { + let mut res = HashMap::new(); + + for shard in &self.shards { + for (url, state) in shard.get_all_urls(domain)? { + res.insert(url, state); + } + } + + Ok(res) + } + + fn multi_get(&self, urls: &[(Domain, UrlString)]) -> Result> { + let mut res = HashMap::new(); + + for shard in &self.shards { + res.extend(shard.multi_get(urls)?.into_iter()); + } + + Ok(res) + } +} + +struct DomainStateDb { + db: rocksdb::DB, +} + +impl DomainStateDb { + pub fn open>(path: P) -> Result { + let mut options = rocksdb::Options::default(); + + options.create_if_missing(true); + + let mut block_options = rocksdb::BlockBasedOptions::default(); + block_options.set_ribbon_filter(10.0); + block_options.set_format_version(5); + + options.set_block_based_table_factory(&block_options); + options.set_optimize_filters_for_hits(true); + options.set_max_background_jobs(8); + options.increase_parallelism(8); + options.set_write_buffer_size(512 * 1024 * 1024); + options.set_allow_mmap_reads(true); + options.set_allow_mmap_writes(true); + options.set_max_subcompactions(8); + + options.set_level_zero_slowdown_writes_trigger(-1); + options.set_level_zero_stop_writes_trigger(-1); + + let db = rocksdb::DB::open(&options, path.as_ref())?; + + Ok(Self { db }) + } + + fn multi_get(&self, domains: &[Domain]) -> Result> { + let mut res = HashMap::new(); + let mut domain_bytes = Vec::with_capacity(domains.len()); + + for domain in domains { + domain_bytes.push(bincode::serialize(domain)?); + } + + for (val, domain) in self + .db + .multi_get(domain_bytes.into_iter()) + .into_iter() + .zip(domains.iter()) + { + if let Some(val) = val? { + let domain_state: DomainState = bincode::deserialize(&val)?; + res.insert(domain.clone(), domain_state); + } + } + + Ok(res) + } + + fn put_batch(&self, batch: &[(Domain, DomainState)]) -> Result<()> { + let mut rocksdb_batch = rocksdb::WriteBatch::default(); + + for (domain, state) in batch { + let domain_bytes = bincode::serialize(domain)?; + let state_bytes = bincode::serialize(state)?; + + rocksdb_batch.put(domain_bytes, state_bytes); + } + + let mut write_options = rocksdb::WriteOptions::default(); + write_options.disable_wal(true); + write_options.set_no_slowdown(true); + + self.db.write_opt(rocksdb_batch, &write_options)?; + + Ok(()) + } + + fn iter(&self) -> impl Iterator + '_ { + let iter = self.db.iterator(rocksdb::IteratorMode::Start); + + iter.filter_map(|r| { + let (key, value) = r.ok()?; + let domain = bincode::deserialize(&key).ok()?; + let state = bincode::deserialize(&value).ok()?; + + Some((domain, state)) + }) + } +} + +pub struct CrawlDb { + domain_state: DomainStateDb, + urls: UrlStateDb, +} + +impl CrawlDb { + pub fn open>(path: P) -> Result { + Ok(Self { + domain_state: DomainStateDb::open(path.as_ref().join("domains"))?, + urls: UrlStateDb::open(path.as_ref().join("urls"))?, + }) + } + + pub fn insert_urls(&mut self, domain_urls: HashMap>) -> Result<()> { + let mut url_batches = Vec::new(); + let mut domain_batches = Vec::new(); + + let domains = domain_urls.keys().cloned().collect::>(); + let domain_states = self.domain_state.multi_get(&domains)?; + let mut url_states = self.urls.multi_get( + domain_urls + .iter() + .flat_map(|(domain, urls)| urls.iter().map(|url| (domain.clone(), url.url.clone()))) + .collect::>() + .as_slice(), + )?; + + for (domain, urls) in domain_urls.into_iter() { + let mut domain_state = domain_states.get(&domain).cloned().unwrap_or_default(); + + let mut updated_url_states = Vec::new(); + + for url in urls { + if url.url.as_str().len() > MAX_URL_LEN_BYTES { + continue; + } + + match url_states.get_mut(&url.url) { + Some(state) => { + state.weight += url.weight; + domain_state.weight += url.weight; + if url.weight > 0.0 { + updated_url_states.push((url.url.clone(), state.clone())); + } + } + None => { + let mut state = UrlState::default(); + state.weight += url.weight; + domain_state.weight += url.weight; + + updated_url_states.push((url.url.clone(), state)); + } + }; + } + + url_batches.push((domain.clone(), updated_url_states)); + domain_batches.push((domain, domain_state)); + } + + self.urls.put_batch(&url_batches)?; + self.domain_state.put_batch(&domain_batches)?; + + Ok(()) + } + + fn set_domain_status(&mut self, domains: &[Domain], status: DomainStatus) -> Result<()> { + let domain_states = self.domain_state.multi_get(domains)?; + + let mut batches = Vec::new(); + + for domain in domains { + let mut domain_state = domain_states.get(domain).cloned().unwrap_or_default(); + domain_state.status = status; + + batches.push((domain.clone(), domain_state)); + } + + self.domain_state.put_batch(&batches)?; + + Ok(()) + } + + pub fn mark_jobs_complete(&mut self, domains: &[DomainCrawled]) -> Result<()> { + let domain_states = self.domain_state.multi_get( + domains + .iter() + .map(|d| d.domain.clone()) + .collect::>() + .as_slice(), + )?; + + let mut batches = Vec::new(); + + for domain in domains { + let mut domain_state = domain_states + .get(&domain.domain) + .cloned() + .unwrap_or_default(); + domain_state.status = DomainStatus::Pending; + domain_state.weight -= domain.budget_used; + + batches.push((domain.domain.clone(), domain_state)); + } + + self.domain_state.put_batch(&batches)?; + + Ok(()) + } + + pub fn sample_domains(&mut self, num_jobs: usize) -> Result> { + let sampled = weighted_sample( + self.domain_state.iter().filter_map(|(domain, state)| { + if state.status == DomainStatus::Pending { + Some((domain, state.weight)) + } else { + None + } + }), + num_jobs, + ); + + let domains = sampled.into_iter().map(|(d, _)| d).collect::>(); + + self.set_domain_status(&domains, DomainStatus::CrawlInProgress)?; + + Ok(domains) + } + + pub fn prepare_jobs(&mut self, domains: &[Domain], urls_per_job: usize) -> Result> { + let mut jobs = Vec::with_capacity(domains.len()); + let mut url_batches = Vec::new(); + + let domain_states = self.domain_state.multi_get(domains)?; + + for domain in domains { + let urls = self.urls.get_all_urls(domain)?; + + let available_urls: Vec<_> = urls + .iter() + .filter_map(|(url, state)| { + if state.status == UrlStatus::Pending { + Some((url.clone(), state.weight)) + } else { + None + } + }) + .collect(); + + let sampled: Vec<_> = weighted_sample( + available_urls.iter().map(|(url, weight)| (url, *weight)), + urls_per_job, + ); + + let mut new_url_states = Vec::new(); + + for (url, _) in &sampled { + let mut state = urls.get(*url).cloned().unwrap_or_default(); + state.status = UrlStatus::Crawling; + + new_url_states.push(((*url).clone(), state)); + } + + url_batches.push((domain.clone(), new_url_states)); + + let domain_state = domain_states.get(domain).cloned().unwrap_or_default(); + + let job = Job { + domain: domain.clone(), + fetch_sitemap: false, // todo: fetch for new sites + urls: sampled + .iter() + .filter_map(|(url, _)| Url::try_from(*url).ok()) + .collect(), + weight_budget: domain_state.weight, + }; + + jobs.push(job); + } + + self.urls.put_batch(&url_batches)?; + + Ok(jobs) + } +} + +#[cfg(test)] +mod tests { + use crate::gen_temp_path; + + use super::*; + + fn insert_seed_urls(urls: &[Url], db: &mut CrawlDb) { + let mut domain_urls = HashMap::new(); + + for url in urls { + let domain = Domain::from(url); + let url_to_insert = UrlToInsert { + url: UrlString::from(url), + weight: 0.0, + }; + + domain_urls + .entry(domain) + .or_insert_with(Vec::new) + .push(url_to_insert); + } + + db.insert_urls(domain_urls).unwrap(); + } + + #[test] + fn sampling() { + let items: Vec<(usize, f64)> = vec![(0, 1.0), (1, 2.0), (2, 3.0), (3, 4.0)]; + let sampled = weighted_sample(items.iter().map(|(i, w)| (i, *w)), 10); + assert_eq!(sampled.len(), items.len()); + + let items: Vec<(usize, f64)> = vec![(0, 1.0), (1, 2.0), (2, 3.0), (3, 4.0)]; + let sampled = weighted_sample(items.iter().map(|(i, w)| (i, *w)), 1); + assert_eq!(sampled.len(), 1); + + let items: Vec<(usize, f64)> = vec![(0, 1.0), (1, 2.0), (2, 3.0), (3, 4.0)]; + let sampled = weighted_sample(items.iter().map(|(i, w)| (i, *w)), 0); + assert_eq!(sampled.len(), 0); + + let items: Vec<(usize, f64)> = vec![(0, 1000000000.0), (1, 2.0)]; + let sampled = weighted_sample(items.iter().map(|(i, w)| (i, *w)), 1); + assert_eq!(sampled.len(), 1); + assert_eq!(*sampled[0].0, 0); + } + + #[test] + fn simple_politeness() { + let mut db = CrawlDb::open(gen_temp_path()).unwrap(); + + let urls = vec![Url::parse("https://example.com").unwrap()]; + insert_seed_urls(&urls, &mut db); + + let domain = Domain::from(&Url::parse("https://example.com").unwrap()); + + let sample = db.sample_domains(128).unwrap(); + + assert_eq!(sample.len(), 1); + assert_eq!(&sample[0], &domain); + assert_eq!( + db.domain_state.multi_get(&[domain.clone()]).unwrap()[&domain].status, + DomainStatus::CrawlInProgress + ); + + let new_sample = db.sample_domains(128).unwrap(); + assert_eq!(new_sample.len(), 0); + } + + #[test] + fn get_all_urls() { + let mut db = CrawlDb::open(gen_temp_path()).unwrap(); + + let urls = vec![ + Url::parse("https://a.com").unwrap(), + Url::parse("https://b.com").unwrap(), + ]; + insert_seed_urls(&urls, &mut db); + + let domain = Domain::from(&Url::parse("https://a.com").unwrap()); + + let urls: Vec<_> = db.urls.get_all_urls(&domain).unwrap().into_iter().collect(); + + assert_eq!(urls.len(), 1); + assert_eq!( + urls[0].0, + UrlString::from(&Url::parse("https://a.com").unwrap()) + ); + } +} diff --git a/core/src/crawler/file_queue.rs b/crates/core/src/crawler/file_queue.rs similarity index 100% rename from core/src/crawler/file_queue.rs rename to crates/core/src/crawler/file_queue.rs diff --git a/core/src/crawler/mod.rs b/crates/core/src/crawler/mod.rs similarity index 100% rename from core/src/crawler/mod.rs rename to crates/core/src/crawler/mod.rs diff --git a/core/src/crawler/planner.rs b/crates/core/src/crawler/planner.rs similarity index 100% rename from core/src/crawler/planner.rs rename to crates/core/src/crawler/planner.rs diff --git a/core/src/crawler/robots_txt.rs b/crates/core/src/crawler/robots_txt.rs similarity index 100% rename from core/src/crawler/robots_txt.rs rename to crates/core/src/crawler/robots_txt.rs diff --git a/core/src/crawler/router.rs b/crates/core/src/crawler/router.rs similarity index 100% rename from core/src/crawler/router.rs rename to crates/core/src/crawler/router.rs diff --git a/core/src/crawler/site_graph.rs b/crates/core/src/crawler/site_graph.rs similarity index 100% rename from core/src/crawler/site_graph.rs rename to crates/core/src/crawler/site_graph.rs diff --git a/core/src/crawler/warc_writer.rs b/crates/core/src/crawler/warc_writer.rs similarity index 100% rename from core/src/crawler/warc_writer.rs rename to crates/core/src/crawler/warc_writer.rs diff --git a/core/src/crawler/worker.rs b/crates/core/src/crawler/worker.rs similarity index 100% rename from core/src/crawler/worker.rs rename to crates/core/src/crawler/worker.rs diff --git a/core/src/directory.rs b/crates/core/src/directory.rs similarity index 100% rename from core/src/directory.rs rename to crates/core/src/directory.rs diff --git a/core/src/distributed/cluster.rs b/crates/core/src/distributed/cluster.rs similarity index 100% rename from core/src/distributed/cluster.rs rename to crates/core/src/distributed/cluster.rs diff --git a/core/src/distributed/member.rs b/crates/core/src/distributed/member.rs similarity index 100% rename from core/src/distributed/member.rs rename to crates/core/src/distributed/member.rs diff --git a/core/src/distributed/mod.rs b/crates/core/src/distributed/mod.rs similarity index 100% rename from core/src/distributed/mod.rs rename to crates/core/src/distributed/mod.rs diff --git a/core/src/distributed/retry_strategy.rs b/crates/core/src/distributed/retry_strategy.rs similarity index 100% rename from core/src/distributed/retry_strategy.rs rename to crates/core/src/distributed/retry_strategy.rs diff --git a/core/src/distributed/sonic/mod.rs b/crates/core/src/distributed/sonic/mod.rs similarity index 100% rename from core/src/distributed/sonic/mod.rs rename to crates/core/src/distributed/sonic/mod.rs diff --git a/core/src/distributed/sonic/service.rs b/crates/core/src/distributed/sonic/service.rs similarity index 100% rename from core/src/distributed/sonic/service.rs rename to crates/core/src/distributed/sonic/service.rs diff --git a/core/src/entity_index/entity.rs b/crates/core/src/entity_index/entity.rs similarity index 100% rename from core/src/entity_index/entity.rs rename to crates/core/src/entity_index/entity.rs diff --git a/core/src/entity_index/mod.rs b/crates/core/src/entity_index/mod.rs similarity index 100% rename from core/src/entity_index/mod.rs rename to crates/core/src/entity_index/mod.rs diff --git a/core/src/entrypoint/alice.rs b/crates/core/src/entrypoint/alice.rs similarity index 100% rename from core/src/entrypoint/alice.rs rename to crates/core/src/entrypoint/alice.rs diff --git a/core/src/entrypoint/api.rs b/crates/core/src/entrypoint/api.rs similarity index 100% rename from core/src/entrypoint/api.rs rename to crates/core/src/entrypoint/api.rs diff --git a/core/src/entrypoint/autosuggest_scrape.rs b/crates/core/src/entrypoint/autosuggest_scrape.rs similarity index 100% rename from core/src/entrypoint/autosuggest_scrape.rs rename to crates/core/src/entrypoint/autosuggest_scrape.rs diff --git a/core/src/entrypoint/centrality.rs b/crates/core/src/entrypoint/centrality.rs similarity index 100% rename from core/src/entrypoint/centrality.rs rename to crates/core/src/entrypoint/centrality.rs diff --git a/core/src/entrypoint/configure.rs b/crates/core/src/entrypoint/configure.rs similarity index 100% rename from core/src/entrypoint/configure.rs rename to crates/core/src/entrypoint/configure.rs diff --git a/core/src/entrypoint/crawler.rs b/crates/core/src/entrypoint/crawler.rs similarity index 100% rename from core/src/entrypoint/crawler.rs rename to crates/core/src/entrypoint/crawler.rs diff --git a/core/src/entrypoint/dmoz_parser.rs b/crates/core/src/entrypoint/dmoz_parser.rs similarity index 100% rename from core/src/entrypoint/dmoz_parser.rs rename to crates/core/src/entrypoint/dmoz_parser.rs diff --git a/core/src/entrypoint/entity.rs b/crates/core/src/entrypoint/entity.rs similarity index 100% rename from core/src/entrypoint/entity.rs rename to crates/core/src/entrypoint/entity.rs diff --git a/core/src/entrypoint/indexer.rs b/crates/core/src/entrypoint/indexer.rs similarity index 100% rename from core/src/entrypoint/indexer.rs rename to crates/core/src/entrypoint/indexer.rs diff --git a/core/src/entrypoint/mod.rs b/crates/core/src/entrypoint/mod.rs similarity index 100% rename from core/src/entrypoint/mod.rs rename to crates/core/src/entrypoint/mod.rs diff --git a/core/src/entrypoint/safety_classifier.rs b/crates/core/src/entrypoint/safety_classifier.rs similarity index 100% rename from core/src/entrypoint/safety_classifier.rs rename to crates/core/src/entrypoint/safety_classifier.rs diff --git a/core/src/entrypoint/search_server.rs b/crates/core/src/entrypoint/search_server.rs similarity index 100% rename from core/src/entrypoint/search_server.rs rename to crates/core/src/entrypoint/search_server.rs diff --git a/core/src/entrypoint/webgraph.rs b/crates/core/src/entrypoint/webgraph.rs similarity index 100% rename from core/src/entrypoint/webgraph.rs rename to crates/core/src/entrypoint/webgraph.rs diff --git a/core/src/entrypoint/webgraph_server.rs b/crates/core/src/entrypoint/webgraph_server.rs similarity index 100% rename from core/src/entrypoint/webgraph_server.rs rename to crates/core/src/entrypoint/webgraph_server.rs diff --git a/core/src/enum_map.rs b/crates/core/src/enum_map.rs similarity index 100% rename from core/src/enum_map.rs rename to crates/core/src/enum_map.rs diff --git a/core/src/executor.rs b/crates/core/src/executor.rs similarity index 100% rename from core/src/executor.rs rename to crates/core/src/executor.rs diff --git a/core/src/fastfield_reader.rs b/crates/core/src/fastfield_reader.rs similarity index 100% rename from core/src/fastfield_reader.rs rename to crates/core/src/fastfield_reader.rs diff --git a/core/src/feed/mod.rs b/crates/core/src/feed/mod.rs similarity index 100% rename from core/src/feed/mod.rs rename to crates/core/src/feed/mod.rs diff --git a/core/src/feed/scheduler.rs b/crates/core/src/feed/scheduler.rs similarity index 100% rename from core/src/feed/scheduler.rs rename to crates/core/src/feed/scheduler.rs diff --git a/core/src/human_website_annotations.rs b/crates/core/src/human_website_annotations.rs similarity index 100% rename from core/src/human_website_annotations.rs rename to crates/core/src/human_website_annotations.rs diff --git a/core/src/hyperloglog.rs b/crates/core/src/hyperloglog.rs similarity index 100% rename from core/src/hyperloglog.rs rename to crates/core/src/hyperloglog.rs diff --git a/core/src/image_downloader.rs b/crates/core/src/image_downloader.rs similarity index 100% rename from core/src/image_downloader.rs rename to crates/core/src/image_downloader.rs diff --git a/core/src/image_store.rs b/crates/core/src/image_store.rs similarity index 100% rename from core/src/image_store.rs rename to crates/core/src/image_store.rs diff --git a/core/src/improvement.rs b/crates/core/src/improvement.rs similarity index 100% rename from core/src/improvement.rs rename to crates/core/src/improvement.rs diff --git a/core/src/index.rs b/crates/core/src/index.rs similarity index 100% rename from core/src/index.rs rename to crates/core/src/index.rs diff --git a/core/src/intmap.rs b/crates/core/src/intmap.rs similarity index 100% rename from core/src/intmap.rs rename to crates/core/src/intmap.rs diff --git a/core/src/inverted_index.rs b/crates/core/src/inverted_index.rs similarity index 100% rename from core/src/inverted_index.rs rename to crates/core/src/inverted_index.rs diff --git a/core/src/kahan_sum.rs b/crates/core/src/kahan_sum.rs similarity index 100% rename from core/src/kahan_sum.rs rename to crates/core/src/kahan_sum.rs diff --git a/core/src/kv/mod.rs b/crates/core/src/kv/mod.rs similarity index 100% rename from core/src/kv/mod.rs rename to crates/core/src/kv/mod.rs diff --git a/core/src/kv/rocksdb_store.rs b/crates/core/src/kv/rocksdb_store.rs similarity index 100% rename from core/src/kv/rocksdb_store.rs rename to crates/core/src/kv/rocksdb_store.rs diff --git a/core/src/leaky_queue.rs b/crates/core/src/leaky_queue.rs similarity index 100% rename from core/src/leaky_queue.rs rename to crates/core/src/leaky_queue.rs diff --git a/core/src/lib.rs b/crates/core/src/lib.rs similarity index 100% rename from core/src/lib.rs rename to crates/core/src/lib.rs diff --git a/core/src/llm_utils.rs b/crates/core/src/llm_utils.rs similarity index 100% rename from core/src/llm_utils.rs rename to crates/core/src/llm_utils.rs diff --git a/core/src/main.rs b/crates/core/src/main.rs similarity index 100% rename from core/src/main.rs rename to crates/core/src/main.rs diff --git a/core/src/mapreduce/manager.rs b/crates/core/src/mapreduce/manager.rs similarity index 100% rename from core/src/mapreduce/manager.rs rename to crates/core/src/mapreduce/manager.rs diff --git a/core/src/mapreduce/mod.rs b/crates/core/src/mapreduce/mod.rs similarity index 100% rename from core/src/mapreduce/mod.rs rename to crates/core/src/mapreduce/mod.rs diff --git a/core/src/mapreduce/worker.rs b/crates/core/src/mapreduce/worker.rs similarity index 100% rename from core/src/mapreduce/worker.rs rename to crates/core/src/mapreduce/worker.rs diff --git a/core/src/metrics.rs b/crates/core/src/metrics.rs similarity index 100% rename from core/src/metrics.rs rename to crates/core/src/metrics.rs diff --git a/core/src/naive_bayes.rs b/crates/core/src/naive_bayes.rs similarity index 100% rename from core/src/naive_bayes.rs rename to crates/core/src/naive_bayes.rs diff --git a/core/src/prehashed.rs b/crates/core/src/prehashed.rs similarity index 100% rename from core/src/prehashed.rs rename to crates/core/src/prehashed.rs diff --git a/core/src/qa_model.rs b/crates/core/src/qa_model.rs similarity index 99% rename from core/src/qa_model.rs rename to crates/core/src/qa_model.rs index f24da1f49..e9a811c84 100644 --- a/core/src/qa_model.rs +++ b/crates/core/src/qa_model.rs @@ -199,7 +199,7 @@ mod tests { fn open_qa_model() -> QaModel { QaModel::open( - std::path::Path::new("../data/qa_model") + std::path::Path::new("../../data/qa_model") .canonicalize() .expect("QA model not found in data/qa_model"), ) diff --git a/core/src/query/const_query.rs b/crates/core/src/query/const_query.rs similarity index 100% rename from core/src/query/const_query.rs rename to crates/core/src/query/const_query.rs diff --git a/core/src/query/intersection.rs b/crates/core/src/query/intersection.rs similarity index 100% rename from core/src/query/intersection.rs rename to crates/core/src/query/intersection.rs diff --git a/core/src/query/mod.rs b/crates/core/src/query/mod.rs similarity index 100% rename from core/src/query/mod.rs rename to crates/core/src/query/mod.rs diff --git a/core/src/query/optic.rs b/crates/core/src/query/optic.rs similarity index 100% rename from core/src/query/optic.rs rename to crates/core/src/query/optic.rs diff --git a/core/src/query/parser.rs b/crates/core/src/query/parser.rs similarity index 100% rename from core/src/query/parser.rs rename to crates/core/src/query/parser.rs diff --git a/core/src/query/pattern_query.rs b/crates/core/src/query/pattern_query.rs similarity index 100% rename from core/src/query/pattern_query.rs rename to crates/core/src/query/pattern_query.rs diff --git a/core/src/query/shortcircuit.rs b/crates/core/src/query/shortcircuit.rs similarity index 100% rename from core/src/query/shortcircuit.rs rename to crates/core/src/query/shortcircuit.rs diff --git a/core/src/query/union.rs b/crates/core/src/query/union.rs similarity index 100% rename from core/src/query/union.rs rename to crates/core/src/query/union.rs diff --git a/core/src/ranking/bitvec_similarity.rs b/crates/core/src/ranking/bitvec_similarity.rs similarity index 100% rename from core/src/ranking/bitvec_similarity.rs rename to crates/core/src/ranking/bitvec_similarity.rs diff --git a/core/src/ranking/bm25.rs b/crates/core/src/ranking/bm25.rs similarity index 100% rename from core/src/ranking/bm25.rs rename to crates/core/src/ranking/bm25.rs diff --git a/core/src/ranking/inbound_similarity.rs b/crates/core/src/ranking/inbound_similarity.rs similarity index 100% rename from core/src/ranking/inbound_similarity.rs rename to crates/core/src/ranking/inbound_similarity.rs diff --git a/core/src/ranking/initial.rs b/crates/core/src/ranking/initial.rs similarity index 100% rename from core/src/ranking/initial.rs rename to crates/core/src/ranking/initial.rs diff --git a/core/src/ranking/mod.rs b/crates/core/src/ranking/mod.rs similarity index 100% rename from core/src/ranking/mod.rs rename to crates/core/src/ranking/mod.rs diff --git a/core/src/ranking/models/cross_encoder.rs b/crates/core/src/ranking/models/cross_encoder.rs similarity index 98% rename from core/src/ranking/models/cross_encoder.rs rename to crates/core/src/ranking/models/cross_encoder.rs index 46402c29e..a434140ef 100644 --- a/core/src/ranking/models/cross_encoder.rs +++ b/crates/core/src/ranking/models/cross_encoder.rs @@ -159,7 +159,7 @@ mod tests { #[test] fn sanity_check() { - let model = CrossEncoderModel::open("../data/cross_encoder") + let model = CrossEncoderModel::open("../../data/cross_encoder") .expect("Failed to find cross-encoder model"); let s = model.run( diff --git a/core/src/ranking/models/lambdamart.rs b/crates/core/src/ranking/models/lambdamart.rs similarity index 100% rename from core/src/ranking/models/lambdamart.rs rename to crates/core/src/ranking/models/lambdamart.rs diff --git a/core/src/ranking/models/linear.rs b/crates/core/src/ranking/models/linear.rs similarity index 100% rename from core/src/ranking/models/linear.rs rename to crates/core/src/ranking/models/linear.rs diff --git a/core/src/ranking/models/mod.rs b/crates/core/src/ranking/models/mod.rs similarity index 100% rename from core/src/ranking/models/mod.rs rename to crates/core/src/ranking/models/mod.rs diff --git a/core/src/ranking/optics.rs b/crates/core/src/ranking/optics.rs similarity index 100% rename from core/src/ranking/optics.rs rename to crates/core/src/ranking/optics.rs diff --git a/core/src/ranking/pipeline.rs b/crates/core/src/ranking/pipeline.rs similarity index 100% rename from core/src/ranking/pipeline.rs rename to crates/core/src/ranking/pipeline.rs diff --git a/core/src/ranking/query_centrality.rs b/crates/core/src/ranking/query_centrality.rs similarity index 100% rename from core/src/ranking/query_centrality.rs rename to crates/core/src/ranking/query_centrality.rs diff --git a/core/src/ranking/signal.rs b/crates/core/src/ranking/signal.rs similarity index 100% rename from core/src/ranking/signal.rs rename to crates/core/src/ranking/signal.rs diff --git a/core/src/schema.rs b/crates/core/src/schema.rs similarity index 100% rename from core/src/schema.rs rename to crates/core/src/schema.rs diff --git a/core/src/search_ctx.rs b/crates/core/src/search_ctx.rs similarity index 100% rename from core/src/search_ctx.rs rename to crates/core/src/search_ctx.rs diff --git a/core/src/search_prettifier/entity.rs b/crates/core/src/search_prettifier/entity.rs similarity index 100% rename from core/src/search_prettifier/entity.rs rename to crates/core/src/search_prettifier/entity.rs diff --git a/core/src/search_prettifier/mod.rs b/crates/core/src/search_prettifier/mod.rs similarity index 100% rename from core/src/search_prettifier/mod.rs rename to crates/core/src/search_prettifier/mod.rs diff --git a/core/src/search_prettifier/stack_overflow.rs b/crates/core/src/search_prettifier/stack_overflow.rs similarity index 100% rename from core/src/search_prettifier/stack_overflow.rs rename to crates/core/src/search_prettifier/stack_overflow.rs diff --git a/core/src/searcher/api.rs b/crates/core/src/searcher/api.rs similarity index 100% rename from core/src/searcher/api.rs rename to crates/core/src/searcher/api.rs diff --git a/core/src/searcher/discussions.optic b/crates/core/src/searcher/discussions.optic similarity index 100% rename from core/src/searcher/discussions.optic rename to crates/core/src/searcher/discussions.optic diff --git a/core/src/searcher/distributed.rs b/crates/core/src/searcher/distributed.rs similarity index 100% rename from core/src/searcher/distributed.rs rename to crates/core/src/searcher/distributed.rs diff --git a/core/src/searcher/local.rs b/crates/core/src/searcher/local.rs similarity index 100% rename from core/src/searcher/local.rs rename to crates/core/src/searcher/local.rs diff --git a/core/src/searcher/mod.rs b/crates/core/src/searcher/mod.rs similarity index 100% rename from core/src/searcher/mod.rs rename to crates/core/src/searcher/mod.rs diff --git a/core/src/searcher/stackoverflow.optic b/crates/core/src/searcher/stackoverflow.optic similarity index 100% rename from core/src/searcher/stackoverflow.optic rename to crates/core/src/searcher/stackoverflow.optic diff --git a/core/src/simhash.rs b/crates/core/src/simhash.rs similarity index 100% rename from core/src/simhash.rs rename to crates/core/src/simhash.rs diff --git a/core/src/similar_sites.rs b/crates/core/src/similar_sites.rs similarity index 100% rename from core/src/similar_sites.rs rename to crates/core/src/similar_sites.rs diff --git a/core/src/snippet.rs b/crates/core/src/snippet.rs similarity index 100% rename from core/src/snippet.rs rename to crates/core/src/snippet.rs diff --git a/core/src/spell/dictionary.rs b/crates/core/src/spell/dictionary.rs similarity index 100% rename from core/src/spell/dictionary.rs rename to crates/core/src/spell/dictionary.rs diff --git a/core/src/spell/distance.rs b/crates/core/src/spell/distance.rs similarity index 100% rename from core/src/spell/distance.rs rename to crates/core/src/spell/distance.rs diff --git a/core/src/spell/mod.rs b/crates/core/src/spell/mod.rs similarity index 100% rename from core/src/spell/mod.rs rename to crates/core/src/spell/mod.rs diff --git a/core/src/spell/segment.srx b/crates/core/src/spell/segment.srx similarity index 100% rename from core/src/spell/segment.srx rename to crates/core/src/spell/segment.srx diff --git a/core/src/spell/spell_checker.rs b/crates/core/src/spell/spell_checker.rs similarity index 100% rename from core/src/spell/spell_checker.rs rename to crates/core/src/spell/spell_checker.rs diff --git a/core/src/spell/splitter.rs b/crates/core/src/spell/splitter.rs similarity index 100% rename from core/src/spell/splitter.rs rename to crates/core/src/spell/splitter.rs diff --git a/core/src/spell/word2vec.rs b/crates/core/src/spell/word2vec.rs similarity index 100% rename from core/src/spell/word2vec.rs rename to crates/core/src/spell/word2vec.rs diff --git a/core/src/subdomain_count.rs b/crates/core/src/subdomain_count.rs similarity index 100% rename from core/src/subdomain_count.rs rename to crates/core/src/subdomain_count.rs diff --git a/core/src/summarizer.rs b/crates/core/src/summarizer.rs similarity index 99% rename from core/src/summarizer.rs rename to crates/core/src/summarizer.rs index f571a8f06..3a4f5ad3a 100644 --- a/core/src/summarizer.rs +++ b/crates/core/src/summarizer.rs @@ -850,7 +850,7 @@ mod tests { fn abstractive_summary() { let summarizer = AbstractiveSummarizer { model: Arc::new( - AbstractiveModel::open("../data/summarizer/abstractive") + AbstractiveModel::open("../../data/summarizer/abstractive") .expect("abstractive summary model not found"), ), }; diff --git a/core/src/tokenizer/add_space_last.rs b/crates/core/src/tokenizer/add_space_last.rs similarity index 100% rename from core/src/tokenizer/add_space_last.rs rename to crates/core/src/tokenizer/add_space_last.rs diff --git a/core/src/tokenizer/mod.rs b/crates/core/src/tokenizer/mod.rs similarity index 100% rename from core/src/tokenizer/mod.rs rename to crates/core/src/tokenizer/mod.rs diff --git a/core/src/tokenizer/split_preserve.rs b/crates/core/src/tokenizer/split_preserve.rs similarity index 100% rename from core/src/tokenizer/split_preserve.rs rename to crates/core/src/tokenizer/split_preserve.rs diff --git a/core/src/ttl_cache.rs b/crates/core/src/ttl_cache.rs similarity index 100% rename from core/src/ttl_cache.rs rename to crates/core/src/ttl_cache.rs diff --git a/core/src/warc.rs b/crates/core/src/warc.rs similarity index 100% rename from core/src/warc.rs rename to crates/core/src/warc.rs diff --git a/core/src/webgraph/centrality/betweenness.rs b/crates/core/src/webgraph/centrality/betweenness.rs similarity index 100% rename from core/src/webgraph/centrality/betweenness.rs rename to crates/core/src/webgraph/centrality/betweenness.rs diff --git a/core/src/webgraph/centrality/derived_harmonic.rs b/crates/core/src/webgraph/centrality/derived_harmonic.rs similarity index 100% rename from core/src/webgraph/centrality/derived_harmonic.rs rename to crates/core/src/webgraph/centrality/derived_harmonic.rs diff --git a/core/src/webgraph/centrality/harmonic.rs b/crates/core/src/webgraph/centrality/harmonic.rs similarity index 100% rename from core/src/webgraph/centrality/harmonic.rs rename to crates/core/src/webgraph/centrality/harmonic.rs diff --git a/core/src/webgraph/centrality/mod.rs b/crates/core/src/webgraph/centrality/mod.rs similarity index 100% rename from core/src/webgraph/centrality/mod.rs rename to crates/core/src/webgraph/centrality/mod.rs diff --git a/core/src/webgraph/mod.rs b/crates/core/src/webgraph/mod.rs similarity index 100% rename from core/src/webgraph/mod.rs rename to crates/core/src/webgraph/mod.rs diff --git a/core/src/webgraph/segment.rs b/crates/core/src/webgraph/segment.rs similarity index 100% rename from core/src/webgraph/segment.rs rename to crates/core/src/webgraph/segment.rs diff --git a/core/src/webgraph/store.rs b/crates/core/src/webgraph/store.rs similarity index 100% rename from core/src/webgraph/store.rs rename to crates/core/src/webgraph/store.rs diff --git a/core/src/webpage/just_text.rs b/crates/core/src/webpage/just_text.rs similarity index 100% rename from core/src/webpage/just_text.rs rename to crates/core/src/webpage/just_text.rs diff --git a/core/src/webpage/mod.rs b/crates/core/src/webpage/mod.rs similarity index 100% rename from core/src/webpage/mod.rs rename to crates/core/src/webpage/mod.rs diff --git a/core/src/webpage/region.rs b/crates/core/src/webpage/region.rs similarity index 100% rename from core/src/webpage/region.rs rename to crates/core/src/webpage/region.rs diff --git a/core/src/webpage/safety_classifier.rs b/crates/core/src/webpage/safety_classifier.rs similarity index 100% rename from core/src/webpage/safety_classifier.rs rename to crates/core/src/webpage/safety_classifier.rs diff --git a/core/src/webpage/schema_org/json_ld.rs b/crates/core/src/webpage/schema_org/json_ld.rs similarity index 100% rename from core/src/webpage/schema_org/json_ld.rs rename to crates/core/src/webpage/schema_org/json_ld.rs diff --git a/core/src/webpage/schema_org/microdata.rs b/crates/core/src/webpage/schema_org/microdata.rs similarity index 100% rename from core/src/webpage/schema_org/microdata.rs rename to crates/core/src/webpage/schema_org/microdata.rs diff --git a/core/src/webpage/schema_org/mod.rs b/crates/core/src/webpage/schema_org/mod.rs similarity index 100% rename from core/src/webpage/schema_org/mod.rs rename to crates/core/src/webpage/schema_org/mod.rs diff --git a/core/src/webpage/url_ext.rs b/crates/core/src/webpage/url_ext.rs similarity index 100% rename from core/src/webpage/url_ext.rs rename to crates/core/src/webpage/url_ext.rs diff --git a/core/src/widgets/calculator.rs b/crates/core/src/widgets/calculator.rs similarity index 100% rename from core/src/widgets/calculator.rs rename to crates/core/src/widgets/calculator.rs diff --git a/core/src/widgets/mod.rs b/crates/core/src/widgets/mod.rs similarity index 100% rename from core/src/widgets/mod.rs rename to crates/core/src/widgets/mod.rs diff --git a/core/src/widgets/thesaurus.rs b/crates/core/src/widgets/thesaurus.rs similarity index 99% rename from core/src/widgets/thesaurus.rs rename to crates/core/src/widgets/thesaurus.rs index 791d27f49..b4fe96ebd 100644 --- a/core/src/widgets/thesaurus.rs +++ b/crates/core/src/widgets/thesaurus.rs @@ -473,7 +473,7 @@ mod tests { #[test] fn build_dict() { - let dict = Dictionary::build("../data/english-wordnet-2022-subset.ttl").unwrap(); + let dict = Dictionary::build("../../data/english-wordnet-2022-subset.ttl").unwrap(); let infos = dict.get(Lemma("barely".to_string())); diff --git a/core/stopwords/Afrikaans.txt b/crates/core/stopwords/Afrikaans.txt similarity index 100% rename from core/stopwords/Afrikaans.txt rename to crates/core/stopwords/Afrikaans.txt diff --git a/core/stopwords/Albanian.txt b/crates/core/stopwords/Albanian.txt similarity index 100% rename from core/stopwords/Albanian.txt rename to crates/core/stopwords/Albanian.txt diff --git a/core/stopwords/Arabic.txt b/crates/core/stopwords/Arabic.txt similarity index 100% rename from core/stopwords/Arabic.txt rename to crates/core/stopwords/Arabic.txt diff --git a/core/stopwords/Aragonese.txt b/crates/core/stopwords/Aragonese.txt similarity index 100% rename from core/stopwords/Aragonese.txt rename to crates/core/stopwords/Aragonese.txt diff --git a/core/stopwords/Armenian.txt b/crates/core/stopwords/Armenian.txt similarity index 100% rename from core/stopwords/Armenian.txt rename to crates/core/stopwords/Armenian.txt diff --git a/core/stopwords/Aromanian.txt b/crates/core/stopwords/Aromanian.txt similarity index 100% rename from core/stopwords/Aromanian.txt rename to crates/core/stopwords/Aromanian.txt diff --git a/core/stopwords/Asturian.txt b/crates/core/stopwords/Asturian.txt similarity index 100% rename from core/stopwords/Asturian.txt rename to crates/core/stopwords/Asturian.txt diff --git a/core/stopwords/Azerbaijani.txt b/crates/core/stopwords/Azerbaijani.txt similarity index 100% rename from core/stopwords/Azerbaijani.txt rename to crates/core/stopwords/Azerbaijani.txt diff --git a/core/stopwords/Basque.txt b/crates/core/stopwords/Basque.txt similarity index 100% rename from core/stopwords/Basque.txt rename to crates/core/stopwords/Basque.txt diff --git a/core/stopwords/Belarusian.txt b/crates/core/stopwords/Belarusian.txt similarity index 100% rename from core/stopwords/Belarusian.txt rename to crates/core/stopwords/Belarusian.txt diff --git a/core/stopwords/Belarusian_Taraskievica.txt b/crates/core/stopwords/Belarusian_Taraskievica.txt similarity index 100% rename from core/stopwords/Belarusian_Taraskievica.txt rename to crates/core/stopwords/Belarusian_Taraskievica.txt diff --git a/core/stopwords/Bengali.txt b/crates/core/stopwords/Bengali.txt similarity index 100% rename from core/stopwords/Bengali.txt rename to crates/core/stopwords/Bengali.txt diff --git a/core/stopwords/Bishnupriya_Manipuri.txt b/crates/core/stopwords/Bishnupriya_Manipuri.txt similarity index 100% rename from core/stopwords/Bishnupriya_Manipuri.txt rename to crates/core/stopwords/Bishnupriya_Manipuri.txt diff --git a/core/stopwords/Bosnian.txt b/crates/core/stopwords/Bosnian.txt similarity index 100% rename from core/stopwords/Bosnian.txt rename to crates/core/stopwords/Bosnian.txt diff --git a/core/stopwords/Breton.txt b/crates/core/stopwords/Breton.txt similarity index 100% rename from core/stopwords/Breton.txt rename to crates/core/stopwords/Breton.txt diff --git a/core/stopwords/Bulgarian.txt b/crates/core/stopwords/Bulgarian.txt similarity index 100% rename from core/stopwords/Bulgarian.txt rename to crates/core/stopwords/Bulgarian.txt diff --git a/core/stopwords/Catalan.txt b/crates/core/stopwords/Catalan.txt similarity index 100% rename from core/stopwords/Catalan.txt rename to crates/core/stopwords/Catalan.txt diff --git a/core/stopwords/Cebuano.txt b/crates/core/stopwords/Cebuano.txt similarity index 100% rename from core/stopwords/Cebuano.txt rename to crates/core/stopwords/Cebuano.txt diff --git a/core/stopwords/Chuvash.txt b/crates/core/stopwords/Chuvash.txt similarity index 100% rename from core/stopwords/Chuvash.txt rename to crates/core/stopwords/Chuvash.txt diff --git a/core/stopwords/Croatian.txt b/crates/core/stopwords/Croatian.txt similarity index 100% rename from core/stopwords/Croatian.txt rename to crates/core/stopwords/Croatian.txt diff --git a/core/stopwords/Czech.txt b/crates/core/stopwords/Czech.txt similarity index 100% rename from core/stopwords/Czech.txt rename to crates/core/stopwords/Czech.txt diff --git a/core/stopwords/Danish.txt b/crates/core/stopwords/Danish.txt similarity index 100% rename from core/stopwords/Danish.txt rename to crates/core/stopwords/Danish.txt diff --git a/core/stopwords/Dutch.txt b/crates/core/stopwords/Dutch.txt similarity index 100% rename from core/stopwords/Dutch.txt rename to crates/core/stopwords/Dutch.txt diff --git a/core/stopwords/English.txt b/crates/core/stopwords/English.txt similarity index 100% rename from core/stopwords/English.txt rename to crates/core/stopwords/English.txt diff --git a/core/stopwords/Esperanto.txt b/crates/core/stopwords/Esperanto.txt similarity index 100% rename from core/stopwords/Esperanto.txt rename to crates/core/stopwords/Esperanto.txt diff --git a/core/stopwords/Estonian.txt b/crates/core/stopwords/Estonian.txt similarity index 100% rename from core/stopwords/Estonian.txt rename to crates/core/stopwords/Estonian.txt diff --git a/core/stopwords/Finnish.txt b/crates/core/stopwords/Finnish.txt similarity index 100% rename from core/stopwords/Finnish.txt rename to crates/core/stopwords/Finnish.txt diff --git a/core/stopwords/French.txt b/crates/core/stopwords/French.txt similarity index 100% rename from core/stopwords/French.txt rename to crates/core/stopwords/French.txt diff --git a/core/stopwords/Galician.txt b/crates/core/stopwords/Galician.txt similarity index 100% rename from core/stopwords/Galician.txt rename to crates/core/stopwords/Galician.txt diff --git a/core/stopwords/Georgian.txt b/crates/core/stopwords/Georgian.txt similarity index 100% rename from core/stopwords/Georgian.txt rename to crates/core/stopwords/Georgian.txt diff --git a/core/stopwords/German.txt b/crates/core/stopwords/German.txt similarity index 100% rename from core/stopwords/German.txt rename to crates/core/stopwords/German.txt diff --git a/core/stopwords/Greek.txt b/crates/core/stopwords/Greek.txt similarity index 100% rename from core/stopwords/Greek.txt rename to crates/core/stopwords/Greek.txt diff --git a/core/stopwords/Gujarati.txt b/crates/core/stopwords/Gujarati.txt similarity index 100% rename from core/stopwords/Gujarati.txt rename to crates/core/stopwords/Gujarati.txt diff --git a/core/stopwords/Haitian.txt b/crates/core/stopwords/Haitian.txt similarity index 100% rename from core/stopwords/Haitian.txt rename to crates/core/stopwords/Haitian.txt diff --git a/core/stopwords/Hebrew.txt b/crates/core/stopwords/Hebrew.txt similarity index 100% rename from core/stopwords/Hebrew.txt rename to crates/core/stopwords/Hebrew.txt diff --git a/core/stopwords/Hindi.txt b/crates/core/stopwords/Hindi.txt similarity index 100% rename from core/stopwords/Hindi.txt rename to crates/core/stopwords/Hindi.txt diff --git a/core/stopwords/Hungarian.txt b/crates/core/stopwords/Hungarian.txt similarity index 100% rename from core/stopwords/Hungarian.txt rename to crates/core/stopwords/Hungarian.txt diff --git a/core/stopwords/Icelandic.txt b/crates/core/stopwords/Icelandic.txt similarity index 100% rename from core/stopwords/Icelandic.txt rename to crates/core/stopwords/Icelandic.txt diff --git a/core/stopwords/Ido.txt b/crates/core/stopwords/Ido.txt similarity index 100% rename from core/stopwords/Ido.txt rename to crates/core/stopwords/Ido.txt diff --git a/core/stopwords/Igbo.txt b/crates/core/stopwords/Igbo.txt similarity index 100% rename from core/stopwords/Igbo.txt rename to crates/core/stopwords/Igbo.txt diff --git a/core/stopwords/Indonesian.txt b/crates/core/stopwords/Indonesian.txt similarity index 100% rename from core/stopwords/Indonesian.txt rename to crates/core/stopwords/Indonesian.txt diff --git a/core/stopwords/Irish.txt b/crates/core/stopwords/Irish.txt similarity index 100% rename from core/stopwords/Irish.txt rename to crates/core/stopwords/Irish.txt diff --git a/core/stopwords/Italian.txt b/crates/core/stopwords/Italian.txt similarity index 100% rename from core/stopwords/Italian.txt rename to crates/core/stopwords/Italian.txt diff --git a/core/stopwords/Japanese.txt b/crates/core/stopwords/Japanese.txt similarity index 100% rename from core/stopwords/Japanese.txt rename to crates/core/stopwords/Japanese.txt diff --git a/core/stopwords/Javanese.txt b/crates/core/stopwords/Javanese.txt similarity index 100% rename from core/stopwords/Javanese.txt rename to crates/core/stopwords/Javanese.txt diff --git a/core/stopwords/Kannada.txt b/crates/core/stopwords/Kannada.txt similarity index 100% rename from core/stopwords/Kannada.txt rename to crates/core/stopwords/Kannada.txt diff --git a/core/stopwords/Kazakh.txt b/crates/core/stopwords/Kazakh.txt similarity index 100% rename from core/stopwords/Kazakh.txt rename to crates/core/stopwords/Kazakh.txt diff --git a/core/stopwords/Korean.txt b/crates/core/stopwords/Korean.txt similarity index 100% rename from core/stopwords/Korean.txt rename to crates/core/stopwords/Korean.txt diff --git a/core/stopwords/Kurdish.txt b/crates/core/stopwords/Kurdish.txt similarity index 100% rename from core/stopwords/Kurdish.txt rename to crates/core/stopwords/Kurdish.txt diff --git a/core/stopwords/Kyrgyz.txt b/crates/core/stopwords/Kyrgyz.txt similarity index 100% rename from core/stopwords/Kyrgyz.txt rename to crates/core/stopwords/Kyrgyz.txt diff --git a/core/stopwords/Latin.txt b/crates/core/stopwords/Latin.txt similarity index 100% rename from core/stopwords/Latin.txt rename to crates/core/stopwords/Latin.txt diff --git a/core/stopwords/Latvian.txt b/crates/core/stopwords/Latvian.txt similarity index 100% rename from core/stopwords/Latvian.txt rename to crates/core/stopwords/Latvian.txt diff --git a/core/stopwords/Lithuanian.txt b/crates/core/stopwords/Lithuanian.txt similarity index 100% rename from core/stopwords/Lithuanian.txt rename to crates/core/stopwords/Lithuanian.txt diff --git a/core/stopwords/Lombard.txt b/crates/core/stopwords/Lombard.txt similarity index 100% rename from core/stopwords/Lombard.txt rename to crates/core/stopwords/Lombard.txt diff --git a/core/stopwords/Low_Saxon.txt b/crates/core/stopwords/Low_Saxon.txt similarity index 100% rename from core/stopwords/Low_Saxon.txt rename to crates/core/stopwords/Low_Saxon.txt diff --git a/core/stopwords/Luxembourgish.txt b/crates/core/stopwords/Luxembourgish.txt similarity index 100% rename from core/stopwords/Luxembourgish.txt rename to crates/core/stopwords/Luxembourgish.txt diff --git a/core/stopwords/Macedonian.txt b/crates/core/stopwords/Macedonian.txt similarity index 100% rename from core/stopwords/Macedonian.txt rename to crates/core/stopwords/Macedonian.txt diff --git a/core/stopwords/Malay.txt b/crates/core/stopwords/Malay.txt similarity index 100% rename from core/stopwords/Malay.txt rename to crates/core/stopwords/Malay.txt diff --git a/core/stopwords/Malayalam.txt b/crates/core/stopwords/Malayalam.txt similarity index 100% rename from core/stopwords/Malayalam.txt rename to crates/core/stopwords/Malayalam.txt diff --git a/core/stopwords/Maltese.txt b/crates/core/stopwords/Maltese.txt similarity index 100% rename from core/stopwords/Maltese.txt rename to crates/core/stopwords/Maltese.txt diff --git a/core/stopwords/Marathi.txt b/crates/core/stopwords/Marathi.txt similarity index 100% rename from core/stopwords/Marathi.txt rename to crates/core/stopwords/Marathi.txt diff --git a/core/stopwords/Neapolitan.txt b/crates/core/stopwords/Neapolitan.txt similarity index 100% rename from core/stopwords/Neapolitan.txt rename to crates/core/stopwords/Neapolitan.txt diff --git a/core/stopwords/Nepali.txt b/crates/core/stopwords/Nepali.txt similarity index 100% rename from core/stopwords/Nepali.txt rename to crates/core/stopwords/Nepali.txt diff --git a/core/stopwords/Newar.txt b/crates/core/stopwords/Newar.txt similarity index 100% rename from core/stopwords/Newar.txt rename to crates/core/stopwords/Newar.txt diff --git a/core/stopwords/Norwegian_Bokmal.txt b/crates/core/stopwords/Norwegian_Bokmal.txt similarity index 100% rename from core/stopwords/Norwegian_Bokmal.txt rename to crates/core/stopwords/Norwegian_Bokmal.txt diff --git a/core/stopwords/Norwegian_Nynorsk.txt b/crates/core/stopwords/Norwegian_Nynorsk.txt similarity index 100% rename from core/stopwords/Norwegian_Nynorsk.txt rename to crates/core/stopwords/Norwegian_Nynorsk.txt diff --git a/core/stopwords/Occitan.txt b/crates/core/stopwords/Occitan.txt similarity index 100% rename from core/stopwords/Occitan.txt rename to crates/core/stopwords/Occitan.txt diff --git a/core/stopwords/Persian.txt b/crates/core/stopwords/Persian.txt similarity index 100% rename from core/stopwords/Persian.txt rename to crates/core/stopwords/Persian.txt diff --git a/core/stopwords/Piedmontese.txt b/crates/core/stopwords/Piedmontese.txt similarity index 100% rename from core/stopwords/Piedmontese.txt rename to crates/core/stopwords/Piedmontese.txt diff --git a/core/stopwords/Polish.txt b/crates/core/stopwords/Polish.txt similarity index 100% rename from core/stopwords/Polish.txt rename to crates/core/stopwords/Polish.txt diff --git a/core/stopwords/Portuguese.txt b/crates/core/stopwords/Portuguese.txt similarity index 100% rename from core/stopwords/Portuguese.txt rename to crates/core/stopwords/Portuguese.txt diff --git a/core/stopwords/Quechua.txt b/crates/core/stopwords/Quechua.txt similarity index 100% rename from core/stopwords/Quechua.txt rename to crates/core/stopwords/Quechua.txt diff --git a/core/stopwords/Romanian.txt b/crates/core/stopwords/Romanian.txt similarity index 100% rename from core/stopwords/Romanian.txt rename to crates/core/stopwords/Romanian.txt diff --git a/core/stopwords/Russian.txt b/crates/core/stopwords/Russian.txt similarity index 100% rename from core/stopwords/Russian.txt rename to crates/core/stopwords/Russian.txt diff --git a/core/stopwords/Samogitian.txt b/crates/core/stopwords/Samogitian.txt similarity index 100% rename from core/stopwords/Samogitian.txt rename to crates/core/stopwords/Samogitian.txt diff --git a/core/stopwords/Serbian.txt b/crates/core/stopwords/Serbian.txt similarity index 100% rename from core/stopwords/Serbian.txt rename to crates/core/stopwords/Serbian.txt diff --git a/core/stopwords/Serbo_Croatian.txt b/crates/core/stopwords/Serbo_Croatian.txt similarity index 100% rename from core/stopwords/Serbo_Croatian.txt rename to crates/core/stopwords/Serbo_Croatian.txt diff --git a/core/stopwords/Sicilian.txt b/crates/core/stopwords/Sicilian.txt similarity index 100% rename from core/stopwords/Sicilian.txt rename to crates/core/stopwords/Sicilian.txt diff --git a/core/stopwords/Simple_English.txt b/crates/core/stopwords/Simple_English.txt similarity index 100% rename from core/stopwords/Simple_English.txt rename to crates/core/stopwords/Simple_English.txt diff --git a/core/stopwords/Slovak.txt b/crates/core/stopwords/Slovak.txt similarity index 100% rename from core/stopwords/Slovak.txt rename to crates/core/stopwords/Slovak.txt diff --git a/core/stopwords/Slovenian.txt b/crates/core/stopwords/Slovenian.txt similarity index 100% rename from core/stopwords/Slovenian.txt rename to crates/core/stopwords/Slovenian.txt diff --git a/core/stopwords/Spanish.txt b/crates/core/stopwords/Spanish.txt similarity index 100% rename from core/stopwords/Spanish.txt rename to crates/core/stopwords/Spanish.txt diff --git a/core/stopwords/Sundanese.txt b/crates/core/stopwords/Sundanese.txt similarity index 100% rename from core/stopwords/Sundanese.txt rename to crates/core/stopwords/Sundanese.txt diff --git a/core/stopwords/Swahili.txt b/crates/core/stopwords/Swahili.txt similarity index 100% rename from core/stopwords/Swahili.txt rename to crates/core/stopwords/Swahili.txt diff --git a/core/stopwords/Swedish.txt b/crates/core/stopwords/Swedish.txt similarity index 100% rename from core/stopwords/Swedish.txt rename to crates/core/stopwords/Swedish.txt diff --git a/core/stopwords/Tagalog.txt b/crates/core/stopwords/Tagalog.txt similarity index 100% rename from core/stopwords/Tagalog.txt rename to crates/core/stopwords/Tagalog.txt diff --git a/core/stopwords/Tamil.txt b/crates/core/stopwords/Tamil.txt similarity index 100% rename from core/stopwords/Tamil.txt rename to crates/core/stopwords/Tamil.txt diff --git a/core/stopwords/Telugu.txt b/crates/core/stopwords/Telugu.txt similarity index 100% rename from core/stopwords/Telugu.txt rename to crates/core/stopwords/Telugu.txt diff --git a/core/stopwords/Turkish.txt b/crates/core/stopwords/Turkish.txt similarity index 100% rename from core/stopwords/Turkish.txt rename to crates/core/stopwords/Turkish.txt diff --git a/core/stopwords/Turkmen.txt b/crates/core/stopwords/Turkmen.txt similarity index 100% rename from core/stopwords/Turkmen.txt rename to crates/core/stopwords/Turkmen.txt diff --git a/core/stopwords/Ukrainian.txt b/crates/core/stopwords/Ukrainian.txt similarity index 100% rename from core/stopwords/Ukrainian.txt rename to crates/core/stopwords/Ukrainian.txt diff --git a/core/stopwords/Urdu.txt b/crates/core/stopwords/Urdu.txt similarity index 100% rename from core/stopwords/Urdu.txt rename to crates/core/stopwords/Urdu.txt diff --git a/core/stopwords/Uzbek.txt b/crates/core/stopwords/Uzbek.txt similarity index 100% rename from core/stopwords/Uzbek.txt rename to crates/core/stopwords/Uzbek.txt diff --git a/core/stopwords/Vietnamese.txt b/crates/core/stopwords/Vietnamese.txt similarity index 100% rename from core/stopwords/Vietnamese.txt rename to crates/core/stopwords/Vietnamese.txt diff --git a/core/stopwords/Volapuk.txt b/crates/core/stopwords/Volapuk.txt similarity index 100% rename from core/stopwords/Volapuk.txt rename to crates/core/stopwords/Volapuk.txt diff --git a/core/stopwords/Walloon.txt b/crates/core/stopwords/Walloon.txt similarity index 100% rename from core/stopwords/Walloon.txt rename to crates/core/stopwords/Walloon.txt diff --git a/core/stopwords/Waray_Waray.txt b/crates/core/stopwords/Waray_Waray.txt similarity index 100% rename from core/stopwords/Waray_Waray.txt rename to crates/core/stopwords/Waray_Waray.txt diff --git a/core/stopwords/Welsh.txt b/crates/core/stopwords/Welsh.txt similarity index 100% rename from core/stopwords/Welsh.txt rename to crates/core/stopwords/Welsh.txt diff --git a/core/stopwords/West_Frisian.txt b/crates/core/stopwords/West_Frisian.txt similarity index 100% rename from core/stopwords/West_Frisian.txt rename to crates/core/stopwords/West_Frisian.txt diff --git a/core/stopwords/Western_Panjabi.txt b/crates/core/stopwords/Western_Panjabi.txt similarity index 100% rename from core/stopwords/Western_Panjabi.txt rename to crates/core/stopwords/Western_Panjabi.txt diff --git a/core/stopwords/Yoruba.txt b/crates/core/stopwords/Yoruba.txt similarity index 100% rename from core/stopwords/Yoruba.txt rename to crates/core/stopwords/Yoruba.txt diff --git a/core/testcases/entity/algorithm.txt b/crates/core/testcases/entity/algorithm.txt similarity index 100% rename from core/testcases/entity/algorithm.txt rename to crates/core/testcases/entity/algorithm.txt diff --git a/core/testcases/entity/andre.txt b/crates/core/testcases/entity/andre.txt similarity index 100% rename from core/testcases/entity/andre.txt rename to crates/core/testcases/entity/andre.txt diff --git a/core/testcases/entity/aristotle.txt b/crates/core/testcases/entity/aristotle.txt similarity index 100% rename from core/testcases/entity/aristotle.txt rename to crates/core/testcases/entity/aristotle.txt diff --git a/core/testcases/entity/disambiguation.txt b/crates/core/testcases/entity/disambiguation.txt similarity index 100% rename from core/testcases/entity/disambiguation.txt rename to crates/core/testcases/entity/disambiguation.txt diff --git a/core/testcases/entity/obama.txt b/crates/core/testcases/entity/obama.txt similarity index 100% rename from core/testcases/entity/obama.txt rename to crates/core/testcases/entity/obama.txt diff --git a/core/testcases/lambdamart.txt b/crates/core/testcases/lambdamart.txt similarity index 100% rename from core/testcases/lambdamart.txt rename to crates/core/testcases/lambdamart.txt diff --git a/core/testcases/parsing/5390001.html b/crates/core/testcases/parsing/5390001.html similarity index 100% rename from core/testcases/parsing/5390001.html rename to crates/core/testcases/parsing/5390001.html diff --git a/core/testcases/parsing/77p2p-7.live-105.html b/crates/core/testcases/parsing/77p2p-7.live-105.html similarity index 100% rename from core/testcases/parsing/77p2p-7.live-105.html rename to crates/core/testcases/parsing/77p2p-7.live-105.html diff --git a/core/testcases/parsing/byte_index_out_of_bounds.html b/crates/core/testcases/parsing/byte_index_out_of_bounds.html similarity index 100% rename from core/testcases/parsing/byte_index_out_of_bounds.html rename to crates/core/testcases/parsing/byte_index_out_of_bounds.html diff --git a/core/testcases/parsing/reddit.html b/crates/core/testcases/parsing/reddit.html similarity index 100% rename from core/testcases/parsing/reddit.html rename to crates/core/testcases/parsing/reddit.html diff --git a/core/testcases/parsing/whut.html b/crates/core/testcases/parsing/whut.html similarity index 100% rename from core/testcases/parsing/whut.html rename to crates/core/testcases/parsing/whut.html diff --git a/core/testcases/parsing/yasudaya.html b/crates/core/testcases/parsing/yasudaya.html similarity index 100% rename from core/testcases/parsing/yasudaya.html rename to crates/core/testcases/parsing/yasudaya.html diff --git a/core/testcases/schema_org/infinity_war.html b/crates/core/testcases/schema_org/infinity_war.html similarity index 100% rename from core/testcases/schema_org/infinity_war.html rename to crates/core/testcases/schema_org/infinity_war.html diff --git a/core/testcases/schema_org/recipe.html b/crates/core/testcases/schema_org/recipe.html similarity index 100% rename from core/testcases/schema_org/recipe.html rename to crates/core/testcases/schema_org/recipe.html diff --git a/core/testcases/schema_org/stackoverflow.html b/crates/core/testcases/schema_org/stackoverflow.html similarity index 100% rename from core/testcases/schema_org/stackoverflow.html rename to crates/core/testcases/schema_org/stackoverflow.html diff --git a/core/testcases/schema_org/stackoverflow_with_code.html b/crates/core/testcases/schema_org/stackoverflow_with_code.html similarity index 100% rename from core/testcases/schema_org/stackoverflow_with_code.html rename to crates/core/testcases/schema_org/stackoverflow_with_code.html diff --git a/optics/Cargo.toml b/crates/optics/Cargo.toml similarity index 100% rename from optics/Cargo.toml rename to crates/optics/Cargo.toml diff --git a/core/build.rs b/crates/optics/build.rs similarity index 100% rename from core/build.rs rename to crates/optics/build.rs diff --git a/optics/src/ast.rs b/crates/optics/src/ast.rs similarity index 100% rename from optics/src/ast.rs rename to crates/optics/src/ast.rs diff --git a/optics/src/lexer.rs b/crates/optics/src/lexer.rs similarity index 100% rename from optics/src/lexer.rs rename to crates/optics/src/lexer.rs diff --git a/optics/src/lib.rs b/crates/optics/src/lib.rs similarity index 100% rename from optics/src/lib.rs rename to crates/optics/src/lib.rs diff --git a/optics/src/parser.lalrpop b/crates/optics/src/parser.lalrpop similarity index 100% rename from optics/src/parser.lalrpop rename to crates/optics/src/parser.lalrpop diff --git a/optics/testcases/crlf.optic b/crates/optics/testcases/crlf.optic similarity index 100% rename from optics/testcases/crlf.optic rename to crates/optics/testcases/crlf.optic diff --git a/crates/optics/testcases/samples/10k_short.optic b/crates/optics/testcases/samples/10k_short.optic new file mode 100644 index 000000000..059412c12 --- /dev/null +++ b/crates/optics/testcases/samples/10k_short.optic @@ -0,0 +1,2 @@ +// Generated from the following list: https://tranco-list.eu/ +Rule { Matches { Domain("|google.com|") }, Action(Discard) };Rule { Matches { Domain("|facebook.com|") }, Action(Discard) };Rule { Matches { Domain("|a-msedge.net|") }, Action(Discard) };Rule { Matches { Domain("|youtube.com|") }, Action(Discard) };Rule { Matches { Domain("|amazonaws.com|") }, Action(Discard) };Rule { Matches { Domain("|microsoft.com|") }, Action(Discard) };Rule { Matches { Domain("|twitter.com|") }, Action(Discard) };Rule { Matches { Domain("|baidu.com|") }, Action(Discard) };Rule { Matches { Domain("|instagram.com|") }, Action(Discard) };Rule { Matches { Domain("|cloudflare.com|") }, Action(Discard) };Rule { Matches { Domain("|apple.com|") }, Action(Discard) };Rule { Matches { Domain("|netflix.com|") }, Action(Discard) };Rule { Matches { Domain("|linkedin.com|") }, Action(Discard) };Rule { Matches { Domain("|amazon.com|") }, Action(Discard) };Rule { Matches { Domain("|bilibili.com|") }, Action(Discard) };Rule { Matches { Domain("|gtld-servers.net|") }, Action(Discard) };Rule { Matches { Domain("|wikipedia.org|") }, Action(Discard) };Rule { Matches { Domain("|akamaiedge.net|") }, Action(Discard) };Rule { Matches { Domain("|qq.com|") }, Action(Discard) };Rule { Matches { Domain("|live.com|") }, Action(Discard) };Rule { Matches { Domain("|akamai.net|") }, Action(Discard) };Rule { Matches { Domain("|domaincontrol.com|") }, Action(Discard) };Rule { Matches { Domain("|pg.com|") }, Action(Discard) };Rule { Matches { Domain("|yahoo.com|") }, Action(Discard) };Rule { Matches { Domain("|googletagmanager.com|") }, Action(Discard) };Rule { Matches { Domain("|azure.com|") }, Action(Discard) };Rule { Matches { Domain("|zhihu.com|") }, Action(Discard) };Rule { Matches { Domain("|googlevideo.com|") }, Action(Discard) };Rule { Matches { Domain("|bing.com|") }, Action(Discard) };Rule { Matches { Domain("|office.com|") }, Action(Discard) };Rule { Matches { Domain("|github.com|") }, Action(Discard) };Rule { Matches { Domain("|reddit.com|") }, Action(Discard) };Rule { Matches { Domain("|pinterest.com|") }, Action(Discard) };Rule { Matches { Domain("|wordpress.org|") }, Action(Discard) };Rule { Matches { Domain("|l-msedge.net|") }, Action(Discard) };Rule { Matches { Domain("|whatsapp.com|") }, Action(Discard) };Rule { Matches { Domain("|doubleclick.net|") }, Action(Discard) };Rule { Matches { Domain("|youtu.be|") }, Action(Discard) };Rule { Matches { Domain("|windowsupdate.com|") }, Action(Discard) };Rule { Matches { Domain("|microsoftonline.com|") }, Action(Discard) };Rule { Matches { Domain("|mail.ru|") }, Action(Discard) };Rule { Matches { Domain("|nflxso.net|") }, Action(Discard) };Rule { Matches { Domain("|fastly.net|") }, Action(Discard) };Rule { Matches { Domain("|akadns.net|") }, Action(Discard) };Rule { Matches { Domain("|zoom.us|") }, Action(Discard) };Rule { Matches { Domain("|yandex.ru|") }, Action(Discard) };Rule { Matches { Domain("|adobe.com|") }, Action(Discard) };Rule { Matches { Domain("|vimeo.com|") }, Action(Discard) };Rule { Matches { Domain("|netflix.net|") }, Action(Discard) };Rule { Matches { Domain("|s-msedge.net|") }, Action(Discard) };Rule { Matches { Domain("|googleusercontent.com|") }, Action(Discard) };Rule { Matches { Domain("|openai.com|") }, Action(Discard) };Rule { Matches { Domain("|trafficmanager.net|") }, Action(Discard) };Rule { Matches { Domain("|wordpress.com|") }, Action(Discard) };Rule { Matches { Domain("|gandi.net|") }, Action(Discard) };Rule { Matches { Domain("|goo.gl|") }, Action(Discard) };Rule { Matches { Domain("|taobao.com|") }, Action(Discard) };Rule { Matches { Domain("|pricegrabber.com|") }, Action(Discard) };Rule { Matches { Domain("|fdv2-t-msedge.net|") }, Action(Discard) };Rule { Matches { Domain("|sharepoint.com|") }, Action(Discard) };Rule { Matches { Domain("|163.com|") }, Action(Discard) };Rule { Matches { Domain("|intuit.com|") }, Action(Discard) };Rule { Matches { Domain("|algolia.net|") }, Action(Discard) };Rule { Matches { Domain("|googledomains.com|") }, Action(Discard) };Rule { Matches { Domain("|bit.ly|") }, Action(Discard) };Rule { Matches { Domain("|vk.com|") }, Action(Discard) };Rule { Matches { Domain("|aaplimg.com|") }, Action(Discard) };Rule { Matches { Domain("|tiktok.com|") }, Action(Discard) };Rule { Matches { Domain("|t.co|") }, Action(Discard) };Rule { Matches { Domain("|windows.net|") }, Action(Discard) };Rule { Matches { Domain("|cloudapp.net|") }, Action(Discard) };Rule { Matches { Domain("|msn.com|") }, Action(Discard) };Rule { Matches { Domain("|xvideos.com|") }, Action(Discard) };Rule { Matches { Domain("|office365.com|") }, Action(Discard) };Rule { Matches { Domain("|fbcdn.net|") }, Action(Discard) };Rule { Matches { Domain("|mozilla.org|") }, Action(Discard) };Rule { Matches { Domain("|apple-dns.net|") }, Action(Discard) };Rule { Matches { Domain("|weibo.com|") }, Action(Discard) };Rule { Matches { Domain("|pornhub.com|") }, Action(Discard) };Rule { Matches { Domain("|blogspot.com|") }, Action(Discard) };Rule { Matches { Domain("|google-analytics.com|") }, Action(Discard) };Rule { Matches { Domain("|spotify.com|") }, Action(Discard) };Rule { Matches { Domain("|edgekey.net|") }, Action(Discard) };Rule { Matches { Domain("|icloud.com|") }, Action(Discard) };Rule { Matches { Domain("|paypal.com|") }, Action(Discard) };Rule { Matches { Domain("|tumblr.com|") }, Action(Discard) };Rule { Matches { Domain("|cloudflare.net|") }, Action(Discard) };Rule { Matches { Domain("|nih.gov|") }, Action(Discard) };Rule { Matches { Domain("|jd.com|") }, Action(Discard) };Rule { Matches { Domain("|skype.com|") }, Action(Discard) };Rule { Matches { Domain("|macromedia.com|") }, Action(Discard) };Rule { Matches { Domain("|canva.com|") }, Action(Discard) };Rule { Matches { Domain("|europa.eu|") }, Action(Discard) };Rule { Matches { Domain("|health.mil|") }, Action(Discard) };Rule { Matches { Domain("|instacart.tools|") }, Action(Discard) };Rule { Matches { Domain("|google.com.hk|") }, Action(Discard) };Rule { Matches { Domain("|nytimes.com|") }, Action(Discard) };Rule { Matches { Domain("|fandom.com|") }, Action(Discard) };Rule { Matches { Domain("|nic.ru|") }, Action(Discard) };Rule { Matches { Domain("|yandex.net|") }, Action(Discard) };Rule { Matches { Domain("|dropbox.com|") }, Action(Discard) };Rule { Matches { Domain("|ebay.com|") }, Action(Discard) };Rule { Matches { Domain("|sina.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|imdb.com|") }, Action(Discard) };Rule { Matches { Domain("|csdn.net|") }, Action(Discard) };Rule { Matches { Domain("|flickr.com|") }, Action(Discard) };Rule { Matches { Domain("|cloudfront.net|") }, Action(Discard) };Rule { Matches { Domain("|t.me|") }, Action(Discard) };Rule { Matches { Domain("|naver.com|") }, Action(Discard) };Rule { Matches { Domain("|opera.com|") }, Action(Discard) };Rule { Matches { Domain("|medium.com|") }, Action(Discard) };Rule { Matches { Domain("|b-msedge.net|") }, Action(Discard) };Rule { Matches { Domain("|outlook.com|") }, Action(Discard) };Rule { Matches { Domain("|myfritz.net|") }, Action(Discard) };Rule { Matches { Domain("|gravatar.com|") }, Action(Discard) };Rule { Matches { Domain("|yahoo.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|aliexpress.com|") }, Action(Discard) };Rule { Matches { Domain("|digicert.com|") }, Action(Discard) };Rule { Matches { Domain("|comcast.net|") }, Action(Discard) };Rule { Matches { Domain("|salesforce.com|") }, Action(Discard) };Rule { Matches { Domain("|soundcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|registrar-servers.com|") }, Action(Discard) };Rule { Matches { Domain("|aiv-cdn.net|") }, Action(Discard) };Rule { Matches { Domain("|apache.org|") }, Action(Discard) };Rule { Matches { Domain("|force.com|") }, Action(Discard) };Rule { Matches { Domain("|msedge.net|") }, Action(Discard) };Rule { Matches { Domain("|xhamster.com|") }, Action(Discard) };Rule { Matches { Domain("|cnn.com|") }, Action(Discard) };Rule { Matches { Domain("|webex.com|") }, Action(Discard) };Rule { Matches { Domain("|omtrdc.net|") }, Action(Discard) };Rule { Matches { Domain("|archive.org|") }, Action(Discard) };Rule { Matches { Domain("|github.io|") }, Action(Discard) };Rule { Matches { Domain("|office.net|") }, Action(Discard) };Rule { Matches { Domain("|myshopify.com|") }, Action(Discard) };Rule { Matches { Domain("|sohu.com|") }, Action(Discard) };Rule { Matches { Domain("|forbes.com|") }, Action(Discard) };Rule { Matches { Domain("|gvt1.com|") }, Action(Discard) };Rule { Matches { Domain("|miit.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|forms.gle|") }, Action(Discard) };Rule { Matches { Domain("|iqiyi.com|") }, Action(Discard) };Rule { Matches { Domain("|quora.com|") }, Action(Discard) };Rule { Matches { Domain("|dnsmadeeasy.com|") }, Action(Discard) };Rule { Matches { Domain("|stackoverflow.com|") }, Action(Discard) };Rule { Matches { Domain("|att.net|") }, Action(Discard) };Rule { Matches { Domain("|indeed.com|") }, Action(Discard) };Rule { Matches { Domain("|spo-msedge.net|") }, Action(Discard) };Rule { Matches { Domain("|zemanta.com|") }, Action(Discard) };Rule { Matches { Domain("|theguardian.com|") }, Action(Discard) };Rule { Matches { Domain("|spankbang.com|") }, Action(Discard) };Rule { Matches { Domain("|ibm.com|") }, Action(Discard) };Rule { Matches { Domain("|bbc.com|") }, Action(Discard) };Rule { Matches { Domain("|w3.org|") }, Action(Discard) };Rule { Matches { Domain("|douban.com|") }, Action(Discard) };Rule { Matches { Domain("|lencr.org|") }, Action(Discard) };Rule { Matches { Domain("|aliyun.com|") }, Action(Discard) };Rule { Matches { Domain("|shopify.com|") }, Action(Discard) };Rule { Matches { Domain("|iairgroup.com|") }, Action(Discard) };Rule { Matches { Domain("|sciencedirect.com|") }, Action(Discard) };Rule { Matches { Domain("|etsy.com|") }, Action(Discard) };Rule { Matches { Domain("|gstatic.com|") }, Action(Discard) };Rule { Matches { Domain("|amazon.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|azurewebsites.net|") }, Action(Discard) };Rule { Matches { Domain("|twitch.tv|") }, Action(Discard) };Rule { Matches { Domain("|amazon.in|") }, Action(Discard) };Rule { Matches { Domain("|roblox.com|") }, Action(Discard) };Rule { Matches { Domain("|booking.com|") }, Action(Discard) };Rule { Matches { Domain("|tiktokcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|meraki.com|") }, Action(Discard) };Rule { Matches { Domain("|dzen.ru|") }, Action(Discard) };Rule { Matches { Domain("|telegram.org|") }, Action(Discard) };Rule { Matches { Domain("|sourceforge.net|") }, Action(Discard) };Rule { Matches { Domain("|bbc.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|sberdevices.ru|") }, Action(Discard) };Rule { Matches { Domain("|imgur.com|") }, Action(Discard) };Rule { Matches { Domain("|abusix.zone|") }, Action(Discard) };Rule { Matches { Domain("|wa.me|") }, Action(Discard) };Rule { Matches { Domain("|twimg.com|") }, Action(Discard) };Rule { Matches { Domain("|googleapis.com|") }, Action(Discard) };Rule { Matches { Domain("|zendesk.com|") }, Action(Discard) };Rule { Matches { Domain("|cisco.com|") }, Action(Discard) };Rule { Matches { Domain("|creativecommons.org|") }, Action(Discard) };Rule { Matches { Domain("|1688.com|") }, Action(Discard) };Rule { Matches { Domain("|researchgate.net|") }, Action(Discard) };Rule { Matches { Domain("|oracle.com|") }, Action(Discard) };Rule { Matches { Domain("|tmall.com|") }, Action(Discard) };Rule { Matches { Domain("|rambler.ru|") }, Action(Discard) };Rule { Matches { Domain("|teamviewer.com|") }, Action(Discard) };Rule { Matches { Domain("|gvt2.com|") }, Action(Discard) };Rule { Matches { Domain("|amazon.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|hwcdn.net|") }, Action(Discard) };Rule { Matches { Domain("|tradingview.com|") }, Action(Discard) };Rule { Matches { Domain("|xnxx.com|") }, Action(Discard) };Rule { Matches { Domain("|duckduckgo.com|") }, Action(Discard) };Rule { Matches { Domain("|who.int|") }, Action(Discard) };Rule { Matches { Domain("|epicgames.com|") }, Action(Discard) };Rule { Matches { Domain("|issuu.com|") }, Action(Discard) };Rule { Matches { Domain("|freepik.com|") }, Action(Discard) };Rule { Matches { Domain("|slack.com|") }, Action(Discard) };Rule { Matches { Domain("|telenet-ops.be|") }, Action(Discard) };Rule { Matches { Domain("|speechmatics.com|") }, Action(Discard) };Rule { Matches { Domain("|linktr.ee|") }, Action(Discard) };Rule { Matches { Domain("|deepl.com|") }, Action(Discard) };Rule { Matches { Domain("|tencent.com|") }, Action(Discard) };Rule { Matches { Domain("|google.co.in|") }, Action(Discard) };Rule { Matches { Domain("|wixsite.com|") }, Action(Discard) };Rule { Matches { Domain("|weebly.com|") }, Action(Discard) };Rule { Matches { Domain("|wikimedia.org|") }, Action(Discard) };Rule { Matches { Domain("|discord.com|") }, Action(Discard) };Rule { Matches { Domain("|dell.com|") }, Action(Discard) };Rule { Matches { Domain("|hp.com|") }, Action(Discard) };Rule { Matches { Domain("|pixiv.net|") }, Action(Discard) };Rule { Matches { Domain("|adnxs.com|") }, Action(Discard) };Rule { Matches { Domain("|washingtonpost.com|") }, Action(Discard) };Rule { Matches { Domain("|cdc.gov|") }, Action(Discard) };Rule { Matches { Domain("|azureedge.net|") }, Action(Discard) };Rule { Matches { Domain("|klarna.com|") }, Action(Discard) };Rule { Matches { Domain("|googlesyndication.com|") }, Action(Discard) };Rule { Matches { Domain("|alibaba.com|") }, Action(Discard) };Rule { Matches { Domain("|tiktokv.com|") }, Action(Discard) };Rule { Matches { Domain("|mit.edu|") }, Action(Discard) };Rule { Matches { Domain("|rackspace.net|") }, Action(Discard) };Rule { Matches { Domain("|harvard.edu|") }, Action(Discard) };Rule { Matches { Domain("|o365filtering.com|") }, Action(Discard) };Rule { Matches { Domain("|opendns.com|") }, Action(Discard) };Rule { Matches { Domain("|reuters.com|") }, Action(Discard) };Rule { Matches { Domain("|feishu.cn|") }, Action(Discard) };Rule { Matches { Domain("|databricks.com|") }, Action(Discard) };Rule { Matches { Domain("|google.de|") }, Action(Discard) };Rule { Matches { Domain("|mangosip.ru|") }, Action(Discard) };Rule { Matches { Domain("|dailymail.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|nginx.org|") }, Action(Discard) };Rule { Matches { Domain("|ytimg.com|") }, Action(Discard) };Rule { Matches { Domain("|samsung.com|") }, Action(Discard) };Rule { Matches { Domain("|wsdvs.com|") }, Action(Discard) };Rule { Matches { Domain("|wiley.com|") }, Action(Discard) };Rule { Matches { Domain("|name-services.com|") }, Action(Discard) };Rule { Matches { Domain("|a2z.com|") }, Action(Discard) };Rule { Matches { Domain("|ally.com|") }, Action(Discard) };Rule { Matches { Domain("|wix.com|") }, Action(Discard) };Rule { Matches { Domain("|atlassian.net|") }, Action(Discard) };Rule { Matches { Domain("|behance.net|") }, Action(Discard) };Rule { Matches { Domain("|msn.cn|") }, Action(Discard) };Rule { Matches { Domain("|tinyurl.com|") }, Action(Discard) };Rule { Matches { Domain("|criteo.com|") }, Action(Discard) };Rule { Matches { Domain("|xcal.tv|") }, Action(Discard) };Rule { Matches { Domain("|bloomberg.com|") }, Action(Discard) };Rule { Matches { Domain("|go.com|") }, Action(Discard) };Rule { Matches { Domain("|instructure.com|") }, Action(Discard) };Rule { Matches { Domain("|okta.com|") }, Action(Discard) };Rule { Matches { Domain("|wsj.com|") }, Action(Discard) };Rule { Matches { Domain("|ruidongcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|reg.ru|") }, Action(Discard) };Rule { Matches { Domain("|google.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|huawei.com|") }, Action(Discard) };Rule { Matches { Domain("|salesforceliveagent.com|") }, Action(Discard) };Rule { Matches { Domain("|nginx.com|") }, Action(Discard) };Rule { Matches { Domain("|edgesuite.net|") }, Action(Discard) };Rule { Matches { Domain("|godaddy.com|") }, Action(Discard) };Rule { Matches { Domain("|jianshu.com|") }, Action(Discard) };Rule { Matches { Domain("|alipay.com|") }, Action(Discard) };Rule { Matches { Domain("|amazonvideo.com|") }, Action(Discard) };Rule { Matches { Domain("|digitalocean.com|") }, Action(Discard) };Rule { Matches { Domain("|springer.com|") }, Action(Discard) };Rule { Matches { Domain("|blogger.com|") }, Action(Discard) };Rule { Matches { Domain("|akamaihd.net|") }, Action(Discard) };Rule { Matches { Domain("|googleadservices.com|") }, Action(Discard) };Rule { Matches { Domain("|comcast.com|") }, Action(Discard) };Rule { Matches { Domain("|hichina.com|") }, Action(Discard) };Rule { Matches { Domain("|ilovepdf.com|") }, Action(Discard) };Rule { Matches { Domain("|stanford.edu|") }, Action(Discard) };Rule { Matches { Domain("|www.gov.uk|") }, Action(Discard) };Rule { Matches { Domain("|demdex.net|") }, Action(Discard) };Rule { Matches { Domain("|youtube-nocookie.com|") }, Action(Discard) };Rule { Matches { Domain("|stripe.com|") }, Action(Discard) };Rule { Matches { Domain("|jomodns.com|") }, Action(Discard) };Rule { Matches { Domain("|nature.com|") }, Action(Discard) };Rule { Matches { Domain("|elasticbeanstalk.com|") }, Action(Discard) };Rule { Matches { Domain("|rackspace.com|") }, Action(Discard) };Rule { Matches { Domain("|ring.com|") }, Action(Discard) };Rule { Matches { Domain("|userapi.com|") }, Action(Discard) };Rule { Matches { Domain("|unsplash.com|") }, Action(Discard) };Rule { Matches { Domain("|businessinsider.com|") }, Action(Discard) };Rule { Matches { Domain("|php.net|") }, Action(Discard) };Rule { Matches { Domain("|doi.org|") }, Action(Discard) };Rule { Matches { Domain("|walmart.com|") }, Action(Discard) };Rule { Matches { Domain("|hubspot.com|") }, Action(Discard) };Rule { Matches { Domain("|nnip.com|") }, Action(Discard) };Rule { Matches { Domain("|youku.com|") }, Action(Discard) };Rule { Matches { Domain("|app-measurement.com|") }, Action(Discard) };Rule { Matches { Domain("|cnbc.com|") }, Action(Discard) };Rule { Matches { Domain("|wp.com|") }, Action(Discard) };Rule { Matches { Domain("|ok.ru|") }, Action(Discard) };Rule { Matches { Domain("|un.org|") }, Action(Discard) };Rule { Matches { Domain("|e-msedge.net|") }, Action(Discard) };Rule { Matches { Domain("|mediafire.com|") }, Action(Discard) };Rule { Matches { Domain("|slideshare.net|") }, Action(Discard) };Rule { Matches { Domain("|swisscom.ch|") }, Action(Discard) };Rule { Matches { Domain("|consultant.ru|") }, Action(Discard) };Rule { Matches { Domain("|2mdn.net|") }, Action(Discard) };Rule { Matches { Domain("|weather.com|") }, Action(Discard) };Rule { Matches { Domain("|trello.com|") }, Action(Discard) };Rule { Matches { Domain("|pki.goog|") }, Action(Discard) };Rule { Matches { Domain("|cdn77.org|") }, Action(Discard) };Rule { Matches { Domain("|espn.com|") }, Action(Discard) };Rule { Matches { Domain("|avito.ru|") }, Action(Discard) };Rule { Matches { Domain("|namu.wiki|") }, Action(Discard) };Rule { Matches { Domain("|shifen.com|") }, Action(Discard) };Rule { Matches { Domain("|list-manage.com|") }, Action(Discard) };Rule { Matches { Domain("|windows.com|") }, Action(Discard) };Rule { Matches { Domain("|manitu.net|") }, Action(Discard) };Rule { Matches { Domain("|ohthree.com|") }, Action(Discard) };Rule { Matches { Domain("|edgecdn.ru|") }, Action(Discard) };Rule { Matches { Domain("|nasa.gov|") }, Action(Discard) };Rule { Matches { Domain("|warnerbros.com|") }, Action(Discard) };Rule { Matches { Domain("|onlyfans.com|") }, Action(Discard) };Rule { Matches { Domain("|kaspersky.com|") }, Action(Discard) };Rule { Matches { Domain("|xiaohongshu.com|") }, Action(Discard) };Rule { Matches { Domain("|flipkart.com|") }, Action(Discard) };Rule { Matches { Domain("|gnu.org|") }, Action(Discard) };Rule { Matches { Domain("|wildberries.ru|") }, Action(Discard) };Rule { Matches { Domain("|attcompute.com|") }, Action(Discard) };Rule { Matches { Domain("|akam.net|") }, Action(Discard) };Rule { Matches { Domain("|figma.com|") }, Action(Discard) };Rule { Matches { Domain("|3dmgame.com|") }, Action(Discard) };Rule { Matches { Domain("|dailymotion.com|") }, Action(Discard) };Rule { Matches { Domain("|line.me|") }, Action(Discard) };Rule { Matches { Domain("|ampproject.org|") }, Action(Discard) };Rule { Matches { Domain("|deviantart.com|") }, Action(Discard) };Rule { Matches { Domain("|whatsapp.net|") }, Action(Discard) };Rule { Matches { Domain("|cnki.net|") }, Action(Discard) };Rule { Matches { Domain("|sogou.com|") }, Action(Discard) };Rule { Matches { Domain("|grammarly.com|") }, Action(Discard) };Rule { Matches { Domain("|cedexis.net|") }, Action(Discard) };Rule { Matches { Domain("|typeform.com|") }, Action(Discard) };Rule { Matches { Domain("|fiverr.com|") }, Action(Discard) };Rule { Matches { Domain("|fc2.com|") }, Action(Discard) };Rule { Matches { Domain("|eventbrite.com|") }, Action(Discard) };Rule { Matches { Domain("|hao123.com|") }, Action(Discard) };Rule { Matches { Domain("|w3schools.com|") }, Action(Discard) };Rule { Matches { Domain("|amazon-adsystem.com|") }, Action(Discard) };Rule { Matches { Domain("|usatoday.com|") }, Action(Discard) };Rule { Matches { Domain("|unity3d.com|") }, Action(Discard) };Rule { Matches { Domain("|google.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|indiatimes.com|") }, Action(Discard) };Rule { Matches { Domain("|ozon.ru|") }, Action(Discard) };Rule { Matches { Domain("|so.com|") }, Action(Discard) };Rule { Matches { Domain("|snapchat.com|") }, Action(Discard) };Rule { Matches { Domain("|herokudns.com|") }, Action(Discard) };Rule { Matches { Domain("|npr.org|") }, Action(Discard) };Rule { Matches { Domain("|ca.gov|") }, Action(Discard) };Rule { Matches { Domain("|tistory.com|") }, Action(Discard) };Rule { Matches { Domain("|xiaomi.com|") }, Action(Discard) };Rule { Matches { Domain("|hupu.com|") }, Action(Discard) };Rule { Matches { Domain("|trustpilot.com|") }, Action(Discard) };Rule { Matches { Domain("|amazon.de|") }, Action(Discard) };Rule { Matches { Domain("|cnet.com|") }, Action(Discard) };Rule { Matches { Domain("|youdao.com|") }, Action(Discard) };Rule { Matches { Domain("|cpanel.net|") }, Action(Discard) };Rule { Matches { Domain("|pixabay.com|") }, Action(Discard) };Rule { Matches { Domain("|aliyuncs.com|") }, Action(Discard) };Rule { Matches { Domain("|mcafee.com|") }, Action(Discard) };Rule { Matches { Domain("|foxnews.com|") }, Action(Discard) };Rule { Matches { Domain("|time.com|") }, Action(Discard) };Rule { Matches { Domain("|chaturbate.com|") }, Action(Discard) };Rule { Matches { Domain("|surveymonkey.com|") }, Action(Discard) };Rule { Matches { Domain("|gosuslugi.ru|") }, Action(Discard) };Rule { Matches { Domain("|ft.com|") }, Action(Discard) };Rule { Matches { Domain("|smzdm.com|") }, Action(Discard) };Rule { Matches { Domain("|goodreads.com|") }, Action(Discard) };Rule { Matches { Domain("|akamaized.net|") }, Action(Discard) };Rule { Matches { Domain("|telegraph.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|udemy.com|") }, Action(Discard) };Rule { Matches { Domain("|notion.so|") }, Action(Discard) };Rule { Matches { Domain("|name.com|") }, Action(Discard) };Rule { Matches { Domain("|toutiao.com|") }, Action(Discard) };Rule { Matches { Domain("|eastmoney.com|") }, Action(Discard) };Rule { Matches { Domain("|bytefcdn-oversea.com|") }, Action(Discard) };Rule { Matches { Domain("|hostgator.com|") }, Action(Discard) };Rule { Matches { Domain("|aol.com|") }, Action(Discard) };Rule { Matches { Domain("|scribd.com|") }, Action(Discard) };Rule { Matches { Domain("|dnsowl.com|") }, Action(Discard) };Rule { Matches { Domain("|mega.nz|") }, Action(Discard) };Rule { Matches { Domain("|rbxcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|statista.com|") }, Action(Discard) };Rule { Matches { Domain("|yelp.com|") }, Action(Discard) };Rule { Matches { Domain("|cdngslb.com|") }, Action(Discard) };Rule { Matches { Domain("|b-cdn.net|") }, Action(Discard) };Rule { Matches { Domain("|52pojie.cn|") }, Action(Discard) };Rule { Matches { Domain("|swisscom.com|") }, Action(Discard) };Rule { Matches { Domain("|ted.com|") }, Action(Discard) };Rule { Matches { Domain("|cloudns.net|") }, Action(Discard) };Rule { Matches { Domain("|adobe.io|") }, Action(Discard) };Rule { Matches { Domain("|g.page|") }, Action(Discard) };Rule { Matches { Domain("|tds.net|") }, Action(Discard) };Rule { Matches { Domain("|webmd.com|") }, Action(Discard) };Rule { Matches { Domain("|realsrv.com|") }, Action(Discard) };Rule { Matches { Domain("|themeforest.net|") }, Action(Discard) };Rule { Matches { Domain("|wired.com|") }, Action(Discard) };Rule { Matches { Domain("|azure-dns.com|") }, Action(Discard) };Rule { Matches { Domain("|amazon.fr|") }, Action(Discard) };Rule { Matches { Domain("|casalemedia.com|") }, Action(Discard) };Rule { Matches { Domain("|binance.com|") }, Action(Discard) };Rule { Matches { Domain("|bluehost.com|") }, Action(Discard) };Rule { Matches { Domain("|eslgaming.com|") }, Action(Discard) };Rule { Matches { Domain("|rakuten.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|worldnic.com|") }, Action(Discard) };Rule { Matches { Domain("|sentry.io|") }, Action(Discard) };Rule { Matches { Domain("|shutterstock.com|") }, Action(Discard) };Rule { Matches { Domain("|amazon.dev|") }, Action(Discard) };Rule { Matches { Domain("|mailchimp.com|") }, Action(Discard) };Rule { Matches { Domain("|tripadvisor.com|") }, Action(Discard) };Rule { Matches { Domain("|speedtest.net|") }, Action(Discard) };Rule { Matches { Domain("|pexels.com|") }, Action(Discard) };Rule { Matches { Domain("|mysql.com|") }, Action(Discard) };Rule { Matches { Domain("|addtoany.com|") }, Action(Discard) };Rule { Matches { Domain("|amzn.to|") }, Action(Discard) };Rule { Matches { Domain("|beian.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|steampowered.com|") }, Action(Discard) };Rule { Matches { Domain("|mi.com|") }, Action(Discard) };Rule { Matches { Domain("|adriver.ru|") }, Action(Discard) };Rule { Matches { Domain("|healthline.com|") }, Action(Discard) };Rule { Matches { Domain("|nvidia.com|") }, Action(Discard) };Rule { Matches { Domain("|amazon.it|") }, Action(Discard) };Rule { Matches { Domain("|amazon.ca|") }, Action(Discard) };Rule { Matches { Domain("|drom.ru|") }, Action(Discard) };Rule { Matches { Domain("|wetransfer.com|") }, Action(Discard) };Rule { Matches { Domain("|roku.com|") }, Action(Discard) };Rule { Matches { Domain("|douyin.com|") }, Action(Discard) };Rule { Matches { Domain("|squarespace.com|") }, Action(Discard) };Rule { Matches { Domain("|berkeley.edu|") }, Action(Discard) };Rule { Matches { Domain("|marriott.com|") }, Action(Discard) };Rule { Matches { Domain("|alibabadns.com|") }, Action(Discard) };Rule { Matches { Domain("|cambridge.org|") }, Action(Discard) };Rule { Matches { Domain("|amazontrust.com|") }, Action(Discard) };Rule { Matches { Domain("|livejournal.com|") }, Action(Discard) };Rule { Matches { Domain("|rt.ru|") }, Action(Discard) };Rule { Matches { Domain("|dns.com|") }, Action(Discard) };Rule { Matches { Domain("|esl.systems|") }, Action(Discard) };Rule { Matches { Domain("|scorecardresearch.com|") }, Action(Discard) };Rule { Matches { Domain("|beeline.ru|") }, Action(Discard) };Rule { Matches { Domain("|intel.com|") }, Action(Discard) };Rule { Matches { Domain("|independent.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|digikala.com|") }, Action(Discard) };Rule { Matches { Domain("|quizlet.com|") }, Action(Discard) };Rule { Matches { Domain("|gitee.com|") }, Action(Discard) };Rule { Matches { Domain("|loc.gov|") }, Action(Discard) };Rule { Matches { Domain("|root-servers.net|") }, Action(Discard) };Rule { Matches { Domain("|pinimg.com|") }, Action(Discard) };Rule { Matches { Domain("|oup.com|") }, Action(Discard) };Rule { Matches { Domain("|upwork.com|") }, Action(Discard) };Rule { Matches { Domain("|techcrunch.com|") }, Action(Discard) };Rule { Matches { Domain("|ea.com|") }, Action(Discard) };Rule { Matches { Domain("|appsflyer.com|") }, Action(Discard) };Rule { Matches { Domain("|cdninstagram.com|") }, Action(Discard) };Rule { Matches { Domain("|360.cn|") }, Action(Discard) };Rule { Matches { Domain("|ondemand.com|") }, Action(Discard) };Rule { Matches { Domain("|no-ip.com|") }, Action(Discard) };Rule { Matches { Domain("|myspace.com|") }, Action(Discard) };Rule { Matches { Domain("|facebook.net|") }, Action(Discard) };Rule { Matches { Domain("|netangels.ru|") }, Action(Discard) };Rule { Matches { Domain("|1c.ru|") }, Action(Discard) };Rule { Matches { Domain("|zoho.com|") }, Action(Discard) };Rule { Matches { Domain("|sorbs.net|") }, Action(Discard) };Rule { Matches { Domain("|eset.com|") }, Action(Discard) };Rule { Matches { Domain("|fb.com|") }, Action(Discard) };Rule { Matches { Domain("|zillow.com|") }, Action(Discard) };Rule { Matches { Domain("|autohome.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|alicdn.com|") }, Action(Discard) };Rule { Matches { Domain("|tandfonline.com|") }, Action(Discard) };Rule { Matches { Domain("|britannica.com|") }, Action(Discard) };Rule { Matches { Domain("|latimes.com|") }, Action(Discard) };Rule { Matches { Domain("|chase.com|") }, Action(Discard) };Rule { Matches { Domain("|cornell.edu|") }, Action(Discard) };Rule { Matches { Domain("|cbsnews.com|") }, Action(Discard) };Rule { Matches { Domain("|investopedia.com|") }, Action(Discard) };Rule { Matches { Domain("|debian.org|") }, Action(Discard) };Rule { Matches { Domain("|avast.com|") }, Action(Discard) };Rule { Matches { Domain("|bitly.com|") }, Action(Discard) };Rule { Matches { Domain("|dzeninfra.ru|") }, Action(Discard) };Rule { Matches { Domain("|uol.com.br|") }, Action(Discard) };Rule { Matches { Domain("|huffingtonpost.com|") }, Action(Discard) };Rule { Matches { Domain("|rzone.de|") }, Action(Discard) };Rule { Matches { Domain("|missav.com|") }, Action(Discard) };Rule { Matches { Domain("|google.ru|") }, Action(Discard) };Rule { Matches { Domain("|ipify.org|") }, Action(Discard) };Rule { Matches { Domain("|google.ca|") }, Action(Discard) };Rule { Matches { Domain("|theverge.com|") }, Action(Discard) };Rule { Matches { Domain("|ups.com|") }, Action(Discard) };Rule { Matches { Domain("|cnblogs.com|") }, Action(Discard) };Rule { Matches { Domain("|yandex.com|") }, Action(Discard) };Rule { Matches { Domain("|free.fr|") }, Action(Discard) };Rule { Matches { Domain("|wikihow.com|") }, Action(Discard) };Rule { Matches { Domain("|playstation.com|") }, Action(Discard) };Rule { Matches { Domain("|goskope.com|") }, Action(Discard) };Rule { Matches { Domain("|sedo.com|") }, Action(Discard) };Rule { Matches { Domain("|maricopa.gov|") }, Action(Discard) };Rule { Matches { Domain("|aboutads.info|") }, Action(Discard) };Rule { Matches { Domain("|academia.edu|") }, Action(Discard) };Rule { Matches { Domain("|ietf.org|") }, Action(Discard) };Rule { Matches { Domain("|washington.edu|") }, Action(Discard) };Rule { Matches { Domain("|prnewswire.com|") }, Action(Discard) };Rule { Matches { Domain("|calendly.com|") }, Action(Discard) };Rule { Matches { Domain("|box.com|") }, Action(Discard) };Rule { Matches { Domain("|taboola.com|") }, Action(Discard) };Rule { Matches { Domain("|ggpht.com|") }, Action(Discard) };Rule { Matches { Domain("|foliofn.com|") }, Action(Discard) };Rule { Matches { Domain("|netease.com|") }, Action(Discard) };Rule { Matches { Domain("|rackspaceclouddb.com|") }, Action(Discard) };Rule { Matches { Domain("|azurefd.net|") }, Action(Discard) };Rule { Matches { Domain("|patreon.com|") }, Action(Discard) };Rule { Matches { Domain("|fedex.com|") }, Action(Discard) };Rule { Matches { Domain("|telegram.me|") }, Action(Discard) };Rule { Matches { Domain("|dribbble.com|") }, Action(Discard) };Rule { Matches { Domain("|forter.com|") }, Action(Discard) };Rule { Matches { Domain("|markmonitor.com|") }, Action(Discard) };Rule { Matches { Domain("|coinmarketcap.com|") }, Action(Discard) };Rule { Matches { Domain("|att.com|") }, Action(Discard) };Rule { Matches { Domain("|timeweb.ru|") }, Action(Discard) };Rule { Matches { Domain("|ubuntu.com|") }, Action(Discard) };Rule { Matches { Domain("|bitrix24.ru|") }, Action(Discard) };Rule { Matches { Domain("|umbrella.com|") }, Action(Discard) };Rule { Matches { Domain("|huffpost.com|") }, Action(Discard) };Rule { Matches { Domain("|amazon.es|") }, Action(Discard) };Rule { Matches { Domain("|openx.net|") }, Action(Discard) };Rule { Matches { Domain("|miui.com|") }, Action(Discard) };Rule { Matches { Domain("|gitlab.com|") }, Action(Discard) };Rule { Matches { Domain("|kickstarter.com|") }, Action(Discard) };Rule { Matches { Domain("|giphy.com|") }, Action(Discard) };Rule { Matches { Domain("|herokuapp.com|") }, Action(Discard) };Rule { Matches { Domain("|rayjump.com|") }, Action(Discard) };Rule { Matches { Domain("|theatlantic.com|") }, Action(Discard) };Rule { Matches { Domain("|craigslist.org|") }, Action(Discard) };Rule { Matches { Domain("|discord.gg|") }, Action(Discard) };Rule { Matches { Domain("|fda.gov|") }, Action(Discard) };Rule { Matches { Domain("|coursera.org|") }, Action(Discard) };Rule { Matches { Domain("|sagepub.com|") }, Action(Discard) };Rule { Matches { Domain("|115.com|") }, Action(Discard) };Rule { Matches { Domain("|hilton.com|") }, Action(Discard) };Rule { Matches { Domain("|usda.gov|") }, Action(Discard) };Rule { Matches { Domain("|expedia.com|") }, Action(Discard) };Rule { Matches { Domain("|nr-data.net|") }, Action(Discard) };Rule { Matches { Domain("|android.com|") }, Action(Discard) };Rule { Matches { Domain("|incapdns.net|") }, Action(Discard) };Rule { Matches { Domain("|noaa.gov|") }, Action(Discard) };Rule { Matches { Domain("|mega.co.nz|") }, Action(Discard) };Rule { Matches { Domain("|hitomi.la|") }, Action(Discard) };Rule { Matches { Domain("|hugedomains.com|") }, Action(Discard) };Rule { Matches { Domain("|eporner.com|") }, Action(Discard) };Rule { Matches { Domain("|51cto.com|") }, Action(Discard) };Rule { Matches { Domain("|safebrowsing.apple|") }, Action(Discard) };Rule { Matches { Domain("|workfront.com|") }, Action(Discard) };Rule { Matches { Domain("|msftconnecttest.com|") }, Action(Discard) };Rule { Matches { Domain("|bandcamp.com|") }, Action(Discard) };Rule { Matches { Domain("|duckdns.org|") }, Action(Discard) };Rule { Matches { Domain("|hotjar.com|") }, Action(Discard) };Rule { Matches { Domain("|apigee.net|") }, Action(Discard) };Rule { Matches { Domain("|state.gov|") }, Action(Discard) };Rule { Matches { Domain("|business.site|") }, Action(Discard) };Rule { Matches { Domain("|nbcnews.com|") }, Action(Discard) };Rule { Matches { Domain("|atlassian.com|") }, Action(Discard) };Rule { Matches { Domain("|chinamobile.com|") }, Action(Discard) };Rule { Matches { Domain("|hbo.com|") }, Action(Discard) };Rule { Matches { Domain("|addthis.com|") }, Action(Discard) };Rule { Matches { Domain("|googletagservices.com|") }, Action(Discard) };Rule { Matches { Domain("|ngenix.net|") }, Action(Discard) };Rule { Matches { Domain("|mayoclinic.org|") }, Action(Discard) };Rule { Matches { Domain("|nationalgeographic.com|") }, Action(Discard) };Rule { Matches { Domain("|launchpad.net|") }, Action(Discard) };Rule { Matches { Domain("|ixigua.com|") }, Action(Discard) };Rule { Matches { Domain("|bankofamerica.com|") }, Action(Discard) };Rule { Matches { Domain("|timbrasil.com.br|") }, Action(Discard) };Rule { Matches { Domain("|buzzfeed.com|") }, Action(Discard) };Rule { Matches { Domain("|secureserver.net|") }, Action(Discard) };Rule { Matches { Domain("|dmm.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|gamersky.com|") }, Action(Discard) };Rule { Matches { Domain("|capitalonegslbex.com|") }, Action(Discard) };Rule { Matches { Domain("|fmkorea.com|") }, Action(Discard) };Rule { Matches { Domain("|ali213.net|") }, Action(Discard) };Rule { Matches { Domain("|gihc.net|") }, Action(Discard) };Rule { Matches { Domain("|princeton.edu|") }, Action(Discard) };Rule { Matches { Domain("|roche.com|") }, Action(Discard) };Rule { Matches { Domain("|arxiv.org|") }, Action(Discard) };Rule { Matches { Domain("|mozilla.com|") }, Action(Discard) };Rule { Matches { Domain("|google.com.tw|") }, Action(Discard) };Rule { Matches { Domain("|alidns.com|") }, Action(Discard) };Rule { Matches { Domain("|docker.com|") }, Action(Discard) };Rule { Matches { Domain("|hbr.org|") }, Action(Discard) };Rule { Matches { Domain("|playstation.net|") }, Action(Discard) };Rule { Matches { Domain("|mailchi.mp|") }, Action(Discard) };Rule { Matches { Domain("|megafon.ru|") }, Action(Discard) };Rule { Matches { Domain("|jotform.com|") }, Action(Discard) };Rule { Matches { Domain("|investing.com|") }, Action(Discard) };Rule { Matches { Domain("|gmail.com|") }, Action(Discard) };Rule { Matches { Domain("|savefrom.net|") }, Action(Discard) };Rule { Matches { Domain("|nease.net|") }, Action(Discard) };Rule { Matches { Domain("|nypost.com|") }, Action(Discard) };Rule { Matches { Domain("|rubiconproject.com|") }, Action(Discard) };Rule { Matches { Domain("|autodesk.com|") }, Action(Discard) };Rule { Matches { Domain("|irs.gov|") }, Action(Discard) };Rule { Matches { Domain("|ntp.org|") }, Action(Discard) };Rule { Matches { Domain("|redhat.com|") }, Action(Discard) };Rule { Matches { Domain("|dnspod.net|") }, Action(Discard) };Rule { Matches { Domain("|oath.cloud|") }, Action(Discard) };Rule { Matches { Domain("|tbcache.com|") }, Action(Discard) };Rule { Matches { Domain("|umich.edu|") }, Action(Discard) };Rule { Matches { Domain("|appiancloud.com|") }, Action(Discard) };Rule { Matches { Domain("|ivi.ru|") }, Action(Discard) };Rule { Matches { Domain("|daum.net|") }, Action(Discard) };Rule { Matches { Domain("|spcsdns.net|") }, Action(Discard) };Rule { Matches { Domain("|statcounter.com|") }, Action(Discard) };Rule { Matches { Domain("|usnews.com|") }, Action(Discard) };Rule { Matches { Domain("|mongodb.com|") }, Action(Discard) };Rule { Matches { Domain("|rlcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|adsrvr.org|") }, Action(Discard) };Rule { Matches { Domain("|zxx.edu.cn|") }, Action(Discard) };Rule { Matches { Domain("|disqus.com|") }, Action(Discard) };Rule { Matches { Domain("|unesco.org|") }, Action(Discard) };Rule { Matches { Domain("|rbc.ru|") }, Action(Discard) };Rule { Matches { Domain("|arcgis.com|") }, Action(Discard) };Rule { Matches { Domain("|galaxydata.ru|") }, Action(Discard) };Rule { Matches { Domain("|vmware.com|") }, Action(Discard) };Rule { Matches { Domain("|namebrightdns.com|") }, Action(Discard) };Rule { Matches { Domain("|lenovo.com|") }, Action(Discard) };Rule { Matches { Domain("|trendmicro.com|") }, Action(Discard) };Rule { Matches { Domain("|rocket-cdn.com|") }, Action(Discard) };Rule { Matches { Domain("|ieee.org|") }, Action(Discard) };Rule { Matches { Domain("|networkadvertising.org|") }, Action(Discard) };Rule { Matches { Domain("|merriam-webster.com|") }, Action(Discard) };Rule { Matches { Domain("|quillbot.com|") }, Action(Discard) };Rule { Matches { Domain("|hicloud.com|") }, Action(Discard) };Rule { Matches { Domain("|e-hentai.org|") }, Action(Discard) };Rule { Matches { Domain("|ig.com|") }, Action(Discard) };Rule { Matches { Domain("|intermedia.net|") }, Action(Discard) };Rule { Matches { Domain("|allaboutcookies.org|") }, Action(Discard) };Rule { Matches { Domain("|globo.com|") }, Action(Discard) };Rule { Matches { Domain("|douyu.com|") }, Action(Discard) };Rule { Matches { Domain("|service-now.com|") }, Action(Discard) };Rule { Matches { Domain("|dreamhost.com|") }, Action(Discard) };Rule { Matches { Domain("|pubmatic.com|") }, Action(Discard) };Rule { Matches { Domain("|klarna.net|") }, Action(Discard) };Rule { Matches { Domain("|attn.tv|") }, Action(Discard) };Rule { Matches { Domain("|usgovcloudapi.net|") }, Action(Discard) };Rule { Matches { Domain("|mdpi.com|") }, Action(Discard) };Rule { Matches { Domain("|envato.com|") }, Action(Discard) };Rule { Matches { Domain("|americanexpress.com|") }, Action(Discard) };Rule { Matches { Domain("|whitehouse.gov|") }, Action(Discard) };Rule { Matches { Domain("|faceit.com|") }, Action(Discard) };Rule { Matches { Domain("|pbs.org|") }, Action(Discard) };Rule { Matches { Domain("|columbia.edu|") }, Action(Discard) };Rule { Matches { Domain("|runoob.com|") }, Action(Discard) };Rule { Matches { Domain("|epa.gov|") }, Action(Discard) };Rule { Matches { Domain("|google.fr|") }, Action(Discard) };Rule { Matches { Domain("|shein.com|") }, Action(Discard) };Rule { Matches { Domain("|newrelic.com|") }, Action(Discard) };Rule { Matches { Domain("|nstld.com|") }, Action(Discard) };Rule { Matches { Domain("|python.org|") }, Action(Discard) };Rule { Matches { Domain("|imgsmail.ru|") }, Action(Discard) };Rule { Matches { Domain("|livedoor.jp|") }, Action(Discard) };Rule { Matches { Domain("|gartner.com|") }, Action(Discard) };Rule { Matches { Domain("|worldbank.org|") }, Action(Discard) };Rule { Matches { Domain("|ddns.net|") }, Action(Discard) };Rule { Matches { Domain("|marketwatch.com|") }, Action(Discard) };Rule { Matches { Domain("|asana.com|") }, Action(Discard) };Rule { Matches { Domain("|economist.com|") }, Action(Discard) };Rule { Matches { Domain("|eastday.com|") }, Action(Discard) };Rule { Matches { Domain("|change.org|") }, Action(Discard) };Rule { Matches { Domain("|vkontakte.ru|") }, Action(Discard) };Rule { Matches { Domain("|businesswire.com|") }, Action(Discard) };Rule { Matches { Domain("|yuque.com|") }, Action(Discard) };Rule { Matches { Domain("|livejasmin.com|") }, Action(Discard) };Rule { Matches { Domain("|mzstatic.com|") }, Action(Discard) };Rule { Matches { Domain("|ui-dns.com|") }, Action(Discard) };Rule { Matches { Domain("|pccc.com|") }, Action(Discard) };Rule { Matches { Domain("|bytedance.net|") }, Action(Discard) };Rule { Matches { Domain("|deloitte.com|") }, Action(Discard) };Rule { Matches { Domain("|media-amazon.com|") }, Action(Discard) };Rule { Matches { Domain("|ifeng.com|") }, Action(Discard) };Rule { Matches { Domain("|stackexchange.com|") }, Action(Discard) };Rule { Matches { Domain("|iso.org|") }, Action(Discard) };Rule { Matches { Domain("|cloud.com|") }, Action(Discard) };Rule { Matches { Domain("|remove.bg|") }, Action(Discard) };Rule { Matches { Domain("|cdn-apple.com|") }, Action(Discard) };Rule { Matches { Domain("|psu.edu|") }, Action(Discard) };Rule { Matches { Domain("|ovscdns.com|") }, Action(Discard) };Rule { Matches { Domain("|nhentai.net|") }, Action(Discard) };Rule { Matches { Domain("|va.gov|") }, Action(Discard) };Rule { Matches { Domain("|duolingo.com|") }, Action(Discard) };Rule { Matches { Domain("|chess.com|") }, Action(Discard) };Rule { Matches { Domain("|dns-parking.com|") }, Action(Discard) };Rule { Matches { Domain("|hulu.com|") }, Action(Discard) };Rule { Matches { Domain("|wellsfargo.com|") }, Action(Discard) };Rule { Matches { Domain("|nintendo.net|") }, Action(Discard) };Rule { Matches { Domain("|linode.com|") }, Action(Discard) };Rule { Matches { Domain("|nike.com|") }, Action(Discard) };Rule { Matches { Domain("|akismet.com|") }, Action(Discard) };Rule { Matches { Domain("|google.com.mx|") }, Action(Discard) };Rule { Matches { Domain("|3lift.com|") }, Action(Discard) };Rule { Matches { Domain("|usps.com|") }, Action(Discard) };Rule { Matches { Domain("|cdnbasket.net|") }, Action(Discard) };Rule { Matches { Domain("|qualtrics.com|") }, Action(Discard) };Rule { Matches { Domain("|spaceweb.pro|") }, Action(Discard) };Rule { Matches { Domain("|amazon.com.au|") }, Action(Discard) };Rule { Matches { Domain("|attens.net|") }, Action(Discard) };Rule { Matches { Domain("|httpbl.org|") }, Action(Discard) };Rule { Matches { Domain("|xinhuanet.com|") }, Action(Discard) };Rule { Matches { Domain("|ford.com|") }, Action(Discard) };Rule { Matches { Domain("|fb.me|") }, Action(Discard) };Rule { Matches { Domain("|paloaltonetworks.com|") }, Action(Discard) };Rule { Matches { Domain("|adobe.net|") }, Action(Discard) };Rule { Matches { Domain("|verisign.com|") }, Action(Discard) };Rule { Matches { Domain("|ucla.edu|") }, Action(Discard) };Rule { Matches { Domain("|rackcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|psychologytoday.com|") }, Action(Discard) };Rule { Matches { Domain("|mts.ru|") }, Action(Discard) };Rule { Matches { Domain("|yts.mx|") }, Action(Discard) };Rule { Matches { Domain("|moatads.com|") }, Action(Discard) };Rule { Matches { Domain("|greasyfork.org|") }, Action(Discard) };Rule { Matches { Domain("|msftncsi.com|") }, Action(Discard) };Rule { Matches { Domain("|appspot.com|") }, Action(Discard) };Rule { Matches { Domain("|adp.com|") }, Action(Discard) };Rule { Matches { Domain("|nicovideo.jp|") }, Action(Discard) };Rule { Matches { Domain("|homedepot.com|") }, Action(Discard) };Rule { Matches { Domain("|wpengine.com|") }, Action(Discard) };Rule { Matches { Domain("|bidswitch.net|") }, Action(Discard) };Rule { Matches { Domain("|alibaba-inc.com|") }, Action(Discard) };Rule { Matches { Domain("|wiktionary.org|") }, Action(Discard) };Rule { Matches { Domain("|vice.com|") }, Action(Discard) };Rule { Matches { Domain("|istockphoto.com|") }, Action(Discard) };Rule { Matches { Domain("|uber.com|") }, Action(Discard) };Rule { Matches { Domain("|ikea.com|") }, Action(Discard) };Rule { Matches { Domain("|yahoodns.net|") }, Action(Discard) };Rule { Matches { Domain("|lenovo.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|target.com|") }, Action(Discard) };Rule { Matches { Domain("|apple.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|c-msedge.net|") }, Action(Discard) };Rule { Matches { Domain("|sxyprn.com|") }, Action(Discard) };Rule { Matches { Domain("|crunchyroll.com|") }, Action(Discard) };Rule { Matches { Domain("|frontiersin.org|") }, Action(Discard) };Rule { Matches { Domain("|aips-services.com|") }, Action(Discard) };Rule { Matches { Domain("|zhipin.com|") }, Action(Discard) };Rule { Matches { Domain("|y2mate.com|") }, Action(Discard) };Rule { Matches { Domain("|cbc.ca|") }, Action(Discard) };Rule { Matches { Domain("|cctv.com|") }, Action(Discard) };Rule { Matches { Domain("|worldfcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|abc.net.au|") }, Action(Discard) };Rule { Matches { Domain("|upenn.edu|") }, Action(Discard) };Rule { Matches { Domain("|dan.com|") }, Action(Discard) };Rule { Matches { Domain("|myworkday.com|") }, Action(Discard) };Rule { Matches { Domain("|qidian.com|") }, Action(Discard) };Rule { Matches { Domain("|yale.edu|") }, Action(Discard) };Rule { Matches { Domain("|jimdo.com|") }, Action(Discard) };Rule { Matches { Domain("|asus.com|") }, Action(Discard) };Rule { Matches { Domain("|t-msedge.net|") }, Action(Discard) };Rule { Matches { Domain("|yiyouliao.com|") }, Action(Discard) };Rule { Matches { Domain("|nba.com|") }, Action(Discard) };Rule { Matches { Domain("|sophos.com|") }, Action(Discard) };Rule { Matches { Domain("|ign.com|") }, Action(Discard) };Rule { Matches { Domain("|jetbrains.com|") }, Action(Discard) };Rule { Matches { Domain("|nest.com|") }, Action(Discard) };Rule { Matches { Domain("|theconversation.com|") }, Action(Discard) };Rule { Matches { Domain("|google.cn|") }, Action(Discard) };Rule { Matches { Domain("|eepurl.com|") }, Action(Discard) };Rule { Matches { Domain("|plos.org|") }, Action(Discard) };Rule { Matches { Domain("|media.net|") }, Action(Discard) };Rule { Matches { Domain("|myqcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|oraclecloud.com|") }, Action(Discard) };Rule { Matches { Domain("|mashable.com|") }, Action(Discard) };Rule { Matches { Domain("|ertelecom.ru|") }, Action(Discard) };Rule { Matches { Domain("|shopee.tw|") }, Action(Discard) };Rule { Matches { Domain("|mckinsey.com|") }, Action(Discard) };Rule { Matches { Domain("|icloud-content.com|") }, Action(Discard) };Rule { Matches { Domain("|zdnet.com|") }, Action(Discard) };Rule { Matches { Domain("|relvesta.com|") }, Action(Discard) };Rule { Matches { Domain("|mercadolibre.com.ar|") }, Action(Discard) };Rule { Matches { Domain("|fortune.com|") }, Action(Discard) };Rule { Matches { Domain("|igamecj.com|") }, Action(Discard) };Rule { Matches { Domain("|weforum.org|") }, Action(Discard) };Rule { Matches { Domain("|airbnb.com|") }, Action(Discard) };Rule { Matches { Domain("|ya.ru|") }, Action(Discard) };Rule { Matches { Domain("|about.com|") }, Action(Discard) };Rule { Matches { Domain("|beelinegprs.ru|") }, Action(Discard) };Rule { Matches { Domain("|atg.se|") }, Action(Discard) };Rule { Matches { Domain("|amazon.com.mx|") }, Action(Discard) };Rule { Matches { Domain("|coupang.com|") }, Action(Discard) };Rule { Matches { Domain("|sciencedaily.com|") }, Action(Discard) };Rule { Matches { Domain("|exacttarget.com|") }, Action(Discard) };Rule { Matches { Domain("|sony.com|") }, Action(Discard) };Rule { Matches { Domain("|accuweather.com|") }, Action(Discard) };Rule { Matches { Domain("|telenet.be|") }, Action(Discard) };Rule { Matches { Domain("|kakao.com|") }, Action(Discard) };Rule { Matches { Domain("|steamcommunity.com|") }, Action(Discard) };Rule { Matches { Domain("|aparat.com|") }, Action(Discard) };Rule { Matches { Domain("|typepad.com|") }, Action(Discard) };Rule { Matches { Domain("|nsone.net|") }, Action(Discard) };Rule { Matches { Domain("|mirtesen.ru|") }, Action(Discard) };Rule { Matches { Domain("|chegg.com|") }, Action(Discard) };Rule { Matches { Domain("|gofundme.com|") }, Action(Discard) };Rule { Matches { Domain("|zol.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|noodlemagazine.com|") }, Action(Discard) };Rule { Matches { Domain("|uci.edu|") }, Action(Discard) };Rule { Matches { Domain("|tianyancha.com|") }, Action(Discard) };Rule { Matches { Domain("|mwbsys.com|") }, Action(Discard) };Rule { Matches { Domain("|rncdn7.com|") }, Action(Discard) };Rule { Matches { Domain("|ringcentral.com|") }, Action(Discard) };Rule { Matches { Domain("|umn.edu|") }, Action(Discard) };Rule { Matches { Domain("|ox.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|rfc-editor.org|") }, Action(Discard) };Rule { Matches { Domain("|datadoghq.com|") }, Action(Discard) };Rule { Matches { Domain("|capitalone.com|") }, Action(Discard) };Rule { Matches { Domain("|ovh.net|") }, Action(Discard) };Rule { Matches { Domain("|biomedcentral.com|") }, Action(Discard) };Rule { Matches { Domain("|onetrust.com|") }, Action(Discard) };Rule { Matches { Domain("|canada.ca|") }, Action(Discard) };Rule { Matches { Domain("|dynect.net|") }, Action(Discard) };Rule { Matches { Domain("|google.co.kr|") }, Action(Discard) };Rule { Matches { Domain("|google.co.th|") }, Action(Discard) };Rule { Matches { Domain("|ruitb.ru|") }, Action(Discard) };Rule { Matches { Domain("|grabpay.com|") }, Action(Discard) };Rule { Matches { Domain("|9gag.com|") }, Action(Discard) };Rule { Matches { Domain("|online-metrix.net|") }, Action(Discard) };Rule { Matches { Domain("|rt.com|") }, Action(Discard) };Rule { Matches { Domain("|dw.com|") }, Action(Discard) };Rule { Matches { Domain("|myanimelist.net|") }, Action(Discard) };Rule { Matches { Domain("|zerodha.com|") }, Action(Discard) };Rule { Matches { Domain("|shaparak.ir|") }, Action(Discard) };Rule { Matches { Domain("|bitbucket.org|") }, Action(Discard) };Rule { Matches { Domain("|substack.com|") }, Action(Discard) };Rule { Matches { Domain("|360yield.com|") }, Action(Discard) };Rule { Matches { Domain("|dnsimple.com|") }, Action(Discard) };Rule { Matches { Domain("|sfx.ms|") }, Action(Discard) };Rule { Matches { Domain("|yimg.com|") }, Action(Discard) };Rule { Matches { Domain("|bestbuy.com|") }, Action(Discard) };Rule { Matches { Domain("|discordapp.com|") }, Action(Discard) };Rule { Matches { Domain("|ultradns.com|") }, Action(Discard) };Rule { Matches { Domain("|skyhigh.cloud|") }, Action(Discard) };Rule { Matches { Domain("|glance.net|") }, Action(Discard) };Rule { Matches { Domain("|volusion.com|") }, Action(Discard) };Rule { Matches { Domain("|similarweb.com|") }, Action(Discard) };Rule { Matches { Domain("|myworkdayjobs.com|") }, Action(Discard) };Rule { Matches { Domain("|licdn.com|") }, Action(Discard) };Rule { Matches { Domain("|hinet.net|") }, Action(Discard) };Rule { Matches { Domain("|visualstudio.com|") }, Action(Discard) };Rule { Matches { Domain("|ripn.net|") }, Action(Discard) };Rule { Matches { Domain("|byteoversea.net|") }, Action(Discard) };Rule { Matches { Domain("|starbucks.com|") }, Action(Discard) };Rule { Matches { Domain("|zoro.to|") }, Action(Discard) };Rule { Matches { Domain("|elsevier.com|") }, Action(Discard) };Rule { Matches { Domain("|china.com|") }, Action(Discard) };Rule { Matches { Domain("|pconline.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|apnews.com|") }, Action(Discard) };Rule { Matches { Domain("|npmjs.com|") }, Action(Discard) };Rule { Matches { Domain("|genius.com|") }, Action(Discard) };Rule { Matches { Domain("|pusher.com|") }, Action(Discard) };Rule { Matches { Domain("|getpocket.com|") }, Action(Discard) };Rule { Matches { Domain("|newyorker.com|") }, Action(Discard) };Rule { Matches { Domain("|sitemaps.org|") }, Action(Discard) };Rule { Matches { Domain("|evernote.com|") }, Action(Discard) };Rule { Matches { Domain("|wisc.edu|") }, Action(Discard) };Rule { Matches { Domain("|animeflv.net|") }, Action(Discard) };Rule { Matches { Domain("|constantcontact.com|") }, Action(Discard) };Rule { Matches { Domain("|digg.com|") }, Action(Discard) };Rule { Matches { Domain("|bmj.com|") }, Action(Discard) };Rule { Matches { Domain("|smartadserver.com|") }, Action(Discard) };Rule { Matches { Domain("|schwab.com|") }, Action(Discard) };Rule { Matches { Domain("|sharethrough.com|") }, Action(Discard) };Rule { Matches { Domain("|oreilly.com|") }, Action(Discard) };Rule { Matches { Domain("|nist.gov|") }, Action(Discard) };Rule { Matches { Domain("|nr-ops.net|") }, Action(Discard) };Rule { Matches { Domain("|ksyuncdn.com|") }, Action(Discard) };Rule { Matches { Domain("|sciencemag.org|") }, Action(Discard) };Rule { Matches { Domain("|newsweek.com|") }, Action(Discard) };Rule { Matches { Domain("|jb51.net|") }, Action(Discard) };Rule { Matches { Domain("|8x8.com|") }, Action(Discard) };Rule { Matches { Domain("|360.com|") }, Action(Discard) };Rule { Matches { Domain("|v2ex.com|") }, Action(Discard) };Rule { Matches { Domain("|artstation.com|") }, Action(Discard) };Rule { Matches { Domain("|nexon.com|") }, Action(Discard) };Rule { Matches { Domain("|reverso.net|") }, Action(Discard) };Rule { Matches { Domain("|geeksforgeeks.org|") }, Action(Discard) };Rule { Matches { Domain("|epam.com|") }, Action(Discard) };Rule { Matches { Domain("|buydomains.com|") }, Action(Discard) };Rule { Matches { Domain("|blog.jp|") }, Action(Discard) };Rule { Matches { Domain("|edgedns.ru|") }, Action(Discard) };Rule { Matches { Domain("|nic.uk|") }, Action(Discard) };Rule { Matches { Domain("|immedia-semi.com|") }, Action(Discard) };Rule { Matches { Domain("|apa.org|") }, Action(Discard) };Rule { Matches { Domain("|launchdarkly.com|") }, Action(Discard) };Rule { Matches { Domain("|doubleverify.com|") }, Action(Discard) };Rule { Matches { Domain("|jable.tv|") }, Action(Discard) };Rule { Matches { Domain("|huaban.com|") }, Action(Discard) };Rule { Matches { Domain("|chinaz.com|") }, Action(Discard) };Rule { Matches { Domain("|fontawesome.com|") }, Action(Discard) };Rule { Matches { Domain("|nflxvideo.net|") }, Action(Discard) };Rule { Matches { Domain("|samsungcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|fastcompany.com|") }, Action(Discard) };Rule { Matches { Domain("|hdfcbank.com|") }, Action(Discard) };Rule { Matches { Domain("|trbcdn.net|") }, Action(Discard) };Rule { Matches { Domain("|rosintel.com|") }, Action(Discard) };Rule { Matches { Domain("|outbrain.com|") }, Action(Discard) };Rule { Matches { Domain("|canonical.com|") }, Action(Discard) };Rule { Matches { Domain("|klaviyo.com|") }, Action(Discard) };Rule { Matches { Domain("|hotstar.com|") }, Action(Discard) };Rule { Matches { Domain("|google.com.tr|") }, Action(Discard) };Rule { Matches { Domain("|mgts.ru|") }, Action(Discard) };Rule { Matches { Domain("|xing.com|") }, Action(Discard) };Rule { Matches { Domain("|xxxxx520.com|") }, Action(Discard) };Rule { Matches { Domain("|google.es|") }, Action(Discard) };Rule { Matches { Domain("|stripchat.com|") }, Action(Discard) };Rule { Matches { Domain("|pewresearch.org|") }, Action(Discard) };Rule { Matches { Domain("|example.com|") }, Action(Discard) };Rule { Matches { Domain("|divar.ir|") }, Action(Discard) };Rule { Matches { Domain("|1337x.to|") }, Action(Discard) };Rule { Matches { Domain("|adsco.re|") }, Action(Discard) };Rule { Matches { Domain("|xfinity.com|") }, Action(Discard) };Rule { Matches { Domain("|cox.net|") }, Action(Discard) };Rule { Matches { Domain("|33across.com|") }, Action(Discard) };Rule { Matches { Domain("|braze.com|") }, Action(Discard) };Rule { Matches { Domain("|science.org|") }, Action(Discard) };Rule { Matches { Domain("|utexas.edu|") }, Action(Discard) };Rule { Matches { Domain("|vox.com|") }, Action(Discard) };Rule { Matches { Domain("|qwest.net|") }, Action(Discard) };Rule { Matches { Domain("|fortinet.net|") }, Action(Discard) };Rule { Matches { Domain("|meetup.com|") }, Action(Discard) };Rule { Matches { Domain("|vungle.com|") }, Action(Discard) };Rule { Matches { Domain("|norton.com|") }, Action(Discard) };Rule { Matches { Domain("|youronlinechoices.com|") }, Action(Discard) };Rule { Matches { Domain("|manatoki215.net|") }, Action(Discard) };Rule { Matches { Domain("|united.com|") }, Action(Discard) };Rule { Matches { Domain("|dingtalk.com|") }, Action(Discard) };Rule { Matches { Domain("|gumroad.com|") }, Action(Discard) };Rule { Matches { Domain("|spiegel.de|") }, Action(Discard) };Rule { Matches { Domain("|jquery.com|") }, Action(Discard) };Rule { Matches { Domain("|xueqiu.com|") }, Action(Discard) };Rule { Matches { Domain("|gizmodo.com|") }, Action(Discard) };Rule { Matches { Domain("|xbox.com|") }, Action(Discard) };Rule { Matches { Domain("|verizon.com|") }, Action(Discard) };Rule { Matches { Domain("|medicalnewstoday.com|") }, Action(Discard) };Rule { Matches { Domain("|immunet.com|") }, Action(Discard) };Rule { Matches { Domain("|elpais.com|") }, Action(Discard) };Rule { Matches { Domain("|engadget.com|") }, Action(Discard) };Rule { Matches { Domain("|tinkoff.ru|") }, Action(Discard) };Rule { Matches { Domain("|cam.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|mirror.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|ui.com|") }, Action(Discard) };Rule { Matches { Domain("|hostgator.com.br|") }, Action(Discard) };Rule { Matches { Domain("|getbootstrap.com|") }, Action(Discard) };Rule { Matches { Domain("|sun.com|") }, Action(Discard) };Rule { Matches { Domain("|primevideo.com|") }, Action(Discard) };Rule { Matches { Domain("|t-s1-msedge.net|") }, Action(Discard) };Rule { Matches { Domain("|cloudinary.com|") }, Action(Discard) };Rule { Matches { Domain("|fidelity.com|") }, Action(Discard) };Rule { Matches { Domain("|nga.cn|") }, Action(Discard) };Rule { Matches { Domain("|apple.news|") }, Action(Discard) };Rule { Matches { Domain("|oecd.org|") }, Action(Discard) };Rule { Matches { Domain("|quark.cn|") }, Action(Discard) };Rule { Matches { Domain("|swrve.com|") }, Action(Discard) };Rule { Matches { Domain("|hostinger.com|") }, Action(Discard) };Rule { Matches { Domain("|fin.ag|") }, Action(Discard) };Rule { Matches { Domain("|webpkgcache.com|") }, Action(Discard) };Rule { Matches { Domain("|pearson.com|") }, Action(Discard) };Rule { Matches { Domain("|gpcloudservice.com|") }, Action(Discard) };Rule { Matches { Domain("|feedburner.com|") }, Action(Discard) };Rule { Matches { Domain("|cupfox.app|") }, Action(Discard) };Rule { Matches { Domain("|softonic.com|") }, Action(Discard) };Rule { Matches { Domain("|indeed.tech|") }, Action(Discard) };Rule { Matches { Domain("|plesk.com|") }, Action(Discard) };Rule { Matches { Domain("|mob.com|") }, Action(Discard) };Rule { Matches { Domain("|google.com.au|") }, Action(Discard) };Rule { Matches { Domain("|vtb.ru|") }, Action(Discard) };Rule { Matches { Domain("|here.com|") }, Action(Discard) };Rule { Matches { Domain("|branch.io|") }, Action(Discard) };Rule { Matches { Domain("|inc.com|") }, Action(Discard) };Rule { Matches { Domain("|gamespot.com|") }, Action(Discard) };Rule { Matches { Domain("|openstreetmap.org|") }, Action(Discard) };Rule { Matches { Domain("|rspamd.com|") }, Action(Discard) };Rule { Matches { Domain("|kaspersky-labs.com|") }, Action(Discard) };Rule { Matches { Domain("|thesun.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|varzesh3.com|") }, Action(Discard) };Rule { Matches { Domain("|marca.com|") }, Action(Discard) };Rule { Matches { Domain("|xhamsterlive.com|") }, Action(Discard) };Rule { Matches { Domain("|mathtag.com|") }, Action(Discard) };Rule { Matches { Domain("|dyndns.org|") }, Action(Discard) };Rule { Matches { Domain("|cmu.edu|") }, Action(Discard) };Rule { Matches { Domain("|sina.cn|") }, Action(Discard) };Rule { Matches { Domain("|sensic.net|") }, Action(Discard) };Rule { Matches { Domain("|google.it|") }, Action(Discard) };Rule { Matches { Domain("|alipaydns.com|") }, Action(Discard) };Rule { Matches { Domain("|crashlytics.com|") }, Action(Discard) };Rule { Matches { Domain("|akamaitech.net|") }, Action(Discard) };Rule { Matches { Domain("|powerbi.com|") }, Action(Discard) };Rule { Matches { Domain("|quantserve.com|") }, Action(Discard) };Rule { Matches { Domain("|bluekai.com|") }, Action(Discard) };Rule { Matches { Domain("|redd.it|") }, Action(Discard) };Rule { Matches { Domain("|bet365.com|") }, Action(Discard) };Rule { Matches { Domain("|google.com.br|") }, Action(Discard) };Rule { Matches { Domain("|dhl.com|") }, Action(Discard) };Rule { Matches { Domain("|made-in-china.com|") }, Action(Discard) };Rule { Matches { Domain("|bdydns.com|") }, Action(Discard) };Rule { Matches { Domain("|db.com|") }, Action(Discard) };Rule { Matches { Domain("|jsdelivr.net|") }, Action(Discard) };Rule { Matches { Domain("|ipaidthat.io|") }, Action(Discard) };Rule { Matches { Domain("|geocities.com|") }, Action(Discard) };Rule { Matches { Domain("|checkpoint.com|") }, Action(Discard) };Rule { Matches { Domain("|tripod.com|") }, Action(Discard) };Rule { Matches { Domain("|topgslb.com|") }, Action(Discard) };Rule { Matches { Domain("|docin.com|") }, Action(Discard) };Rule { Matches { Domain("|perfectdomain.com|") }, Action(Discard) };Rule { Matches { Domain("|wattpad.com|") }, Action(Discard) };Rule { Matches { Domain("|spamhaus.org|") }, Action(Discard) };Rule { Matches { Domain("|fast.com|") }, Action(Discard) };Rule { Matches { Domain("|sberbank.ru|") }, Action(Discard) };Rule { Matches { Domain("|squarespacedns.com|") }, Action(Discard) };Rule { Matches { Domain("|wowhead.com|") }, Action(Discard) };Rule { Matches { Domain("|timeanddate.com|") }, Action(Discard) };Rule { Matches { Domain("|sc-gw.com|") }, Action(Discard) };Rule { Matches { Domain("|cdnhwc2.com|") }, Action(Discard) };Rule { Matches { Domain("|techtarget.com|") }, Action(Discard) };Rule { Matches { Domain("|glassdoor.com|") }, Action(Discard) };Rule { Matches { Domain("|book118.com|") }, Action(Discard) };Rule { Matches { Domain("|adsafeprotected.com|") }, Action(Discard) };Rule { Matches { Domain("|1drv.com|") }, Action(Discard) };Rule { Matches { Domain("|pvp.net|") }, Action(Discard) };Rule { Matches { Domain("|avira.com|") }, Action(Discard) };Rule { Matches { Domain("|ks-cdn.com|") }, Action(Discard) };Rule { Matches { Domain("|jhu.edu|") }, Action(Discard) };Rule { Matches { Domain("|flaticon.com|") }, Action(Discard) };Rule { Matches { Domain("|criteo.net|") }, Action(Discard) };Rule { Matches { Domain("|tremorhub.com|") }, Action(Discard) };Rule { Matches { Domain("|elegantthemes.com|") }, Action(Discard) };Rule { Matches { Domain("|entrust.net|") }, Action(Discard) };Rule { Matches { Domain("|t-mobile.com|") }, Action(Discard) };Rule { Matches { Domain("|messenger.com|") }, Action(Discard) };Rule { Matches { Domain("|nintendo.com|") }, Action(Discard) };Rule { Matches { Domain("|saasprotection.com|") }, Action(Discard) };Rule { Matches { Domain("|mheducation.com|") }, Action(Discard) };Rule { Matches { Domain("|erome.com|") }, Action(Discard) };Rule { Matches { Domain("|readthedocs.io|") }, Action(Discard) };Rule { Matches { Domain("|entrepreneur.com|") }, Action(Discard) };Rule { Matches { Domain("|spectrum.com|") }, Action(Discard) };Rule { Matches { Domain("|awsglobalaccelerator.com|") }, Action(Discard) };Rule { Matches { Domain("|scientificamerican.com|") }, Action(Discard) };Rule { Matches { Domain("|ebay.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|360safe.com|") }, Action(Discard) };Rule { Matches { Domain("|twtrdns.net|") }, Action(Discard) };Rule { Matches { Domain("|airtable.com|") }, Action(Discard) };Rule { Matches { Domain("|stumbleupon.com|") }, Action(Discard) };Rule { Matches { Domain("|ria.ru|") }, Action(Discard) };Rule { Matches { Domain("|agkn.com|") }, Action(Discard) };Rule { Matches { Domain("|ucsd.edu|") }, Action(Discard) };Rule { Matches { Domain("|youporn.com|") }, Action(Discard) };Rule { Matches { Domain("|ftc.gov|") }, Action(Discard) };Rule { Matches { Domain("|imrworldwide.com|") }, Action(Discard) };Rule { Matches { Domain("|kdocs.cn|") }, Action(Discard) };Rule { Matches { Domain("|arnebrachhold.de|") }, Action(Discard) };Rule { Matches { Domain("|fb.watch|") }, Action(Discard) };Rule { Matches { Domain("|llnwi.net|") }, Action(Discard) };Rule { Matches { Domain("|chsi.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|jstor.org|") }, Action(Discard) };Rule { Matches { Domain("|canvas-user-content.com|") }, Action(Discard) };Rule { Matches { Domain("|anchor.fm|") }, Action(Discard) };Rule { Matches { Domain("|exelator.com|") }, Action(Discard) };Rule { Matches { Domain("|codebig2.net|") }, Action(Discard) };Rule { Matches { Domain("|dnsv1.com|") }, Action(Discard) };Rule { Matches { Domain("|impervadns.net|") }, Action(Discard) };Rule { Matches { Domain("|mathworks.com|") }, Action(Discard) };Rule { Matches { Domain("|doubleclick.com|") }, Action(Discard) };Rule { Matches { Domain("|arstechnica.com|") }, Action(Discard) };Rule { Matches { Domain("|nextdoor.com|") }, Action(Discard) };Rule { Matches { Domain("|constellix.com|") }, Action(Discard) };Rule { Matches { Domain("|imcmdb.net|") }, Action(Discard) };Rule { Matches { Domain("|dbankcloud.ru|") }, Action(Discard) };Rule { Matches { Domain("|xhamster18.desi|") }, Action(Discard) };Rule { Matches { Domain("|miro.com|") }, Action(Discard) };Rule { Matches { Domain("|acoustic-adm.com|") }, Action(Discard) };Rule { Matches { Domain("|asu.edu|") }, Action(Discard) };Rule { Matches { Domain("|sap.com|") }, Action(Discard) };Rule { Matches { Domain("|adobess.com|") }, Action(Discard) };Rule { Matches { Domain("|360doc.com|") }, Action(Discard) };Rule { Matches { Domain("|purdue.edu|") }, Action(Discard) };Rule { Matches { Domain("|www.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|nps.gov|") }, Action(Discard) };Rule { Matches { Domain("|ddnss.de|") }, Action(Discard) };Rule { Matches { Domain("|ed.gov|") }, Action(Discard) };Rule { Matches { Domain("|brave.com|") }, Action(Discard) };Rule { Matches { Domain("|mastercard.com|") }, Action(Discard) };Rule { Matches { Domain("|amap.com|") }, Action(Discard) };Rule { Matches { Domain("|sahibinden.com|") }, Action(Discard) };Rule { Matches { Domain("|riotgames.com|") }, Action(Discard) };Rule { Matches { Domain("|watchguard.com|") }, Action(Discard) };Rule { Matches { Domain("|supersonicads.com|") }, Action(Discard) };Rule { Matches { Domain("|webs.com|") }, Action(Discard) };Rule { Matches { Domain("|zhibo8.cc|") }, Action(Discard) };Rule { Matches { Domain("|ntli.net|") }, Action(Discard) };Rule { Matches { Domain("|lenta.ru|") }, Action(Discard) };Rule { Matches { Domain("|tapad.com|") }, Action(Discard) };Rule { Matches { Domain("|uchicago.edu|") }, Action(Discard) };Rule { Matches { Domain("|gogoanime.bid|") }, Action(Discard) };Rule { Matches { Domain("|webrootcloudav.com|") }, Action(Discard) };Rule { Matches { Domain("|dropboxusercontent.com|") }, Action(Discard) };Rule { Matches { Domain("|qcc.com|") }, Action(Discard) };Rule { Matches { Domain("|utorrent.com|") }, Action(Discard) };Rule { Matches { Domain("|topdns.me|") }, Action(Discard) };Rule { Matches { Domain("|ecdns.net|") }, Action(Discard) };Rule { Matches { Domain("|smaato.net|") }, Action(Discard) };Rule { Matches { Domain("|medallia.com|") }, Action(Discard) };Rule { Matches { Domain("|nyu.edu|") }, Action(Discard) };Rule { Matches { Domain("|tokopedia.com|") }, Action(Discard) };Rule { Matches { Domain("|acs.org|") }, Action(Discard) };Rule { Matches { Domain("|photobucket.com|") }, Action(Discard) };Rule { Matches { Domain("|bbb.org|") }, Action(Discard) };Rule { Matches { Domain("|crwdcntrl.net|") }, Action(Discard) };Rule { Matches { Domain("|itch.io|") }, Action(Discard) };Rule { Matches { Domain("|torob.com|") }, Action(Discard) };Rule { Matches { Domain("|pnas.org|") }, Action(Discard) };Rule { Matches { Domain("|ameblo.jp|") }, Action(Discard) };Rule { Matches { Domain("|fincoad.com|") }, Action(Discard) };Rule { Matches { Domain("|above.com|") }, Action(Discard) };Rule { Matches { Domain("|gofile.io|") }, Action(Discard) };Rule { Matches { Domain("|unity.com|") }, Action(Discard) };Rule { Matches { Domain("|samsungqbe.com|") }, Action(Discard) };Rule { Matches { Domain("|telenor.se|") }, Action(Discard) };Rule { Matches { Domain("|biligame.com|") }, Action(Discard) };Rule { Matches { Domain("|codepen.io|") }, Action(Discard) };Rule { Matches { Domain("|nordvpn.com|") }, Action(Discard) };Rule { Matches { Domain("|utdallas.edu|") }, Action(Discard) };Rule { Matches { Domain("|roskazna.ru|") }, Action(Discard) };Rule { Matches { Domain("|samsungcloudsolution.com|") }, Action(Discard) };Rule { Matches { Domain("|zippyshare.com|") }, Action(Discard) };Rule { Matches { Domain("|ny.gov|") }, Action(Discard) };Rule { Matches { Domain("|fao.org|") }, Action(Discard) };Rule { Matches { Domain("|sfgate.com|") }, Action(Discard) };Rule { Matches { Domain("|wbx2.com|") }, Action(Discard) };Rule { Matches { Domain("|beget.ru|") }, Action(Discard) };Rule { Matches { Domain("|dictionary.com|") }, Action(Discard) };Rule { Matches { Domain("|si.edu|") }, Action(Discard) };Rule { Matches { Domain("|xerox.com|") }, Action(Discard) };Rule { Matches { Domain("|mercadolibre.com.mx|") }, Action(Discard) };Rule { Matches { Domain("|notamedia.ru|") }, Action(Discard) };Rule { Matches { Domain("|semrush.com|") }, Action(Discard) };Rule { Matches { Domain("|mydrivers.com|") }, Action(Discard) };Rule { Matches { Domain("|amplitude.com|") }, Action(Discard) };Rule { Matches { Domain("|ys7.com|") }, Action(Discard) };Rule { Matches { Domain("|lijit.com|") }, Action(Discard) };Rule { Matches { Domain("|slate.com|") }, Action(Discard) };Rule { Matches { Domain("|tencent-cloud.net|") }, Action(Discard) };Rule { Matches { Domain("|trendyol.com|") }, Action(Discard) };Rule { Matches { Domain("|people.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|pcmag.com|") }, Action(Discard) };Rule { Matches { Domain("|kinopoisk.ru|") }, Action(Discard) };Rule { Matches { Domain("|samsungacr.com|") }, Action(Discard) };Rule { Matches { Domain("|lwsdns.com|") }, Action(Discard) };Rule { Matches { Domain("|house.gov|") }, Action(Discard) };Rule { Matches { Domain("|lanzoug.com|") }, Action(Discard) };Rule { Matches { Domain("|dotomi.com|") }, Action(Discard) };Rule { Matches { Domain("|appcenter.ms|") }, Action(Discard) };Rule { Matches { Domain("|census.gov|") }, Action(Discard) };Rule { Matches { Domain("|barnesandnoble.com|") }, Action(Discard) };Rule { Matches { Domain("|thepaper.cn|") }, Action(Discard) };Rule { Matches { Domain("|guardian.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|tesla.com|") }, Action(Discard) };Rule { Matches { Domain("|share-dns.com|") }, Action(Discard) };Rule { Matches { Domain("|blizzard.com|") }, Action(Discard) };Rule { Matches { Domain("|cdn20.com|") }, Action(Discard) };Rule { Matches { Domain("|deezer.com|") }, Action(Discard) };Rule { Matches { Domain("|cengage.com|") }, Action(Discard) };Rule { Matches { Domain("|p-cdn.com|") }, Action(Discard) };Rule { Matches { Domain("|everesttech.net|") }, Action(Discard) };Rule { Matches { Domain("|weibo.cn|") }, Action(Discard) };Rule { Matches { Domain("|nokia.com|") }, Action(Discard) };Rule { Matches { Domain("|variety.com|") }, Action(Discard) };Rule { Matches { Domain("|cdnhwc1.com|") }, Action(Discard) };Rule { Matches { Domain("|dcinside.com|") }, Action(Discard) };Rule { Matches { Domain("|batalle.com|") }, Action(Discard) };Rule { Matches { Domain("|bls.gov|") }, Action(Discard) };Rule { Matches { Domain("|2gis.com|") }, Action(Discard) };Rule { Matches { Domain("|dbankcloud.cn|") }, Action(Discard) };Rule { Matches { Domain("|allegro.pl|") }, Action(Discard) };Rule { Matches { Domain("|worldfcdn2.com|") }, Action(Discard) };Rule { Matches { Domain("|optimizely.com|") }, Action(Discard) };Rule { Matches { Domain("|themeisle.com|") }, Action(Discard) };Rule { Matches { Domain("|jagex.com|") }, Action(Discard) };Rule { Matches { Domain("|samsclub.com|") }, Action(Discard) };Rule { Matches { Domain("|payoneer.com|") }, Action(Discard) };Rule { Matches { Domain("|ufl.edu|") }, Action(Discard) };Rule { Matches { Domain("|wal-mart.com|") }, Action(Discard) };Rule { Matches { Domain("|jamanetwork.com|") }, Action(Discard) };Rule { Matches { Domain("|bytetcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|usc.edu|") }, Action(Discard) };Rule { Matches { Domain("|typekit.net|") }, Action(Discard) };Rule { Matches { Domain("|aljazeera.com|") }, Action(Discard) };Rule { Matches { Domain("|fanduel.com|") }, Action(Discard) };Rule { Matches { Domain("|xero.com|") }, Action(Discard) };Rule { Matches { Domain("|gene.com|") }, Action(Discard) };Rule { Matches { Domain("|bidr.io|") }, Action(Discard) };Rule { Matches { Domain("|seznam.cz|") }, Action(Discard) };Rule { Matches { Domain("|bizjournals.com|") }, Action(Discard) };Rule { Matches { Domain("|coinbase.com|") }, Action(Discard) };Rule { Matches { Domain("|rottentomatoes.com|") }, Action(Discard) };Rule { Matches { Domain("|beget.com|") }, Action(Discard) };Rule { Matches { Domain("|shaggyselectmast.com|") }, Action(Discard) };Rule { Matches { Domain("|siemens.com|") }, Action(Discard) };Rule { Matches { Domain("|instacart.com|") }, Action(Discard) };Rule { Matches { Domain("|jamfcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|thelancet.com|") }, Action(Discard) };Rule { Matches { Domain("|politico.com|") }, Action(Discard) };Rule { Matches { Domain("|gotowebinar.com|") }, Action(Discard) };Rule { Matches { Domain("|grammarly.io|") }, Action(Discard) };Rule { Matches { Domain("|cookielaw.org|") }, Action(Discard) };Rule { Matches { Domain("|dmcdn.net|") }, Action(Discard) };Rule { Matches { Domain("|thisvid.com|") }, Action(Discard) };Rule { Matches { Domain("|www.nhs.uk|") }, Action(Discard) };Rule { Matches { Domain("|mxptint.net|") }, Action(Discard) };Rule { Matches { Domain("|foxycart.com|") }, Action(Discard) };Rule { Matches { Domain("|leagueoflegends.com|") }, Action(Discard) };Rule { Matches { Domain("|adform.net|") }, Action(Discard) };Rule { Matches { Domain("|ubi.com|") }, Action(Discard) };Rule { Matches { Domain("|usgs.gov|") }, Action(Discard) };Rule { Matches { Domain("|adobedtm.com|") }, Action(Discard) };Rule { Matches { Domain("|superhosting.bg|") }, Action(Discard) };Rule { Matches { Domain("|khanacademy.org|") }, Action(Discard) };Rule { Matches { Domain("|bytefcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|footprint.net|") }, Action(Discard) };Rule { Matches { Domain("|gd.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|pendo.io|") }, Action(Discard) };Rule { Matches { Domain("|oschina.net|") }, Action(Discard) };Rule { Matches { Domain("|hbomax.com|") }, Action(Discard) };Rule { Matches { Domain("|rollingstone.com|") }, Action(Discard) };Rule { Matches { Domain("|aliexpress.ru|") }, Action(Discard) };Rule { Matches { Domain("|jedox.com|") }, Action(Discard) };Rule { Matches { Domain("|loom.com|") }, Action(Discard) };Rule { Matches { Domain("|wayfair.com|") }, Action(Discard) };Rule { Matches { Domain("|thetimes.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|myq-cloud.com|") }, Action(Discard) };Rule { Matches { Domain("|fool.com|") }, Action(Discard) };Rule { Matches { Domain("|qz.com|") }, Action(Discard) };Rule { Matches { Domain("|otm-r.com|") }, Action(Discard) };Rule { Matches { Domain("|icann.org|") }, Action(Discard) };Rule { Matches { Domain("|dlsite.com|") }, Action(Discard) };Rule { Matches { Domain("|supjav.com|") }, Action(Discard) };Rule { Matches { Domain("|chicagotribune.com|") }, Action(Discard) };Rule { Matches { Domain("|mangaraw.to|") }, Action(Discard) };Rule { Matches { Domain("|ttvnw.net|") }, Action(Discard) };Rule { Matches { Domain("|igodigital.com|") }, Action(Discard) };Rule { Matches { Domain("|naukri.com|") }, Action(Discard) };Rule { Matches { Domain("|hhs.gov|") }, Action(Discard) };Rule { Matches { Domain("|illinois.edu|") }, Action(Discard) };Rule { Matches { Domain("|uk.com|") }, Action(Discard) };Rule { Matches { Domain("|dns-shop.ru|") }, Action(Discard) };Rule { Matches { Domain("|cdnvideo.ru|") }, Action(Discard) };Rule { Matches { Domain("|kuaishou.com|") }, Action(Discard) };Rule { Matches { Domain("|news.com.au|") }, Action(Discard) };Rule { Matches { Domain("|cookiedatabase.org|") }, Action(Discard) };Rule { Matches { Domain("|opensea.io|") }, Action(Discard) };Rule { Matches { Domain("|wps.cn|") }, Action(Discard) };Rule { Matches { Domain("|stackpathcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|conviva.com|") }, Action(Discard) };Rule { Matches { Domain("|ssa.gov|") }, Action(Discard) };Rule { Matches { Domain("|hm.com|") }, Action(Discard) };Rule { Matches { Domain("|shopee.co.id|") }, Action(Discard) };Rule { Matches { Domain("|tendawifi.com|") }, Action(Discard) };Rule { Matches { Domain("|livescience.com|") }, Action(Discard) };Rule { Matches { Domain("|sbdv.ru|") }, Action(Discard) };Rule { Matches { Domain("|gamer.com.tw|") }, Action(Discard) };Rule { Matches { Domain("|allianz.de|") }, Action(Discard) };Rule { Matches { Domain("|rumble.com|") }, Action(Discard) };Rule { Matches { Domain("|hyatt.com|") }, Action(Discard) };Rule { Matches { Domain("|howstuffworks.com|") }, Action(Discard) };Rule { Matches { Domain("|ttlivecdn.com|") }, Action(Discard) };Rule { Matches { Domain("|nudgeworry.com|") }, Action(Discard) };Rule { Matches { Domain("|orderbox-dns.com|") }, Action(Discard) };Rule { Matches { Domain("|wise.com|") }, Action(Discard) };Rule { Matches { Domain("|army.mil|") }, Action(Discard) };Rule { Matches { Domain("|indiegogo.com|") }, Action(Discard) };Rule { Matches { Domain("|stackadapt.com|") }, Action(Discard) };Rule { Matches { Domain("|unc.edu|") }, Action(Discard) };Rule { Matches { Domain("|arubanetworks.com|") }, Action(Discard) };Rule { Matches { Domain("|globenewswire.com|") }, Action(Discard) };Rule { Matches { Domain("|eff.org|") }, Action(Discard) };Rule { Matches { Domain("|solemnvine.com|") }, Action(Discard) };Rule { Matches { Domain("|proofpoint.com|") }, Action(Discard) };Rule { Matches { Domain("|ucdavis.edu|") }, Action(Discard) };Rule { Matches { Domain("|splashtop.com|") }, Action(Discard) };Rule { Matches { Domain("|disney.com|") }, Action(Discard) };Rule { Matches { Domain("|telegra.ph|") }, Action(Discard) };Rule { Matches { Domain("|bugsnag.com|") }, Action(Discard) };Rule { Matches { Domain("|express.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|arizona.edu|") }, Action(Discard) };Rule { Matches { Domain("|postgresql.org|") }, Action(Discard) };Rule { Matches { Domain("|adcolony.com|") }, Action(Discard) };Rule { Matches { Domain("|duke.edu|") }, Action(Discard) };Rule { Matches { Domain("|amazon.eg|") }, Action(Discard) };Rule { Matches { Domain("|rapid7.com|") }, Action(Discard) };Rule { Matches { Domain("|smartedu.cn|") }, Action(Discard) };Rule { Matches { Domain("|gldn.net|") }, Action(Discard) };Rule { Matches { Domain("|onlinesbi.sbi|") }, Action(Discard) };Rule { Matches { Domain("|arlo.com|") }, Action(Discard) };Rule { Matches { Domain("|sweepfrequencydissolved.com|") }, Action(Discard) };Rule { Matches { Domain("|sky.com|") }, Action(Discard) };Rule { Matches { Domain("|fb-t-msedge.net|") }, Action(Discard) };Rule { Matches { Domain("|namecheap.com|") }, Action(Discard) };Rule { Matches { Domain("|scopely.io|") }, Action(Discard) };Rule { Matches { Domain("|senate.gov|") }, Action(Discard) };Rule { Matches { Domain("|my.com|") }, Action(Discard) };Rule { Matches { Domain("|uiuc.edu|") }, Action(Discard) };Rule { Matches { Domain("|matterport.com|") }, Action(Discard) };Rule { Matches { Domain("|jino.ru|") }, Action(Discard) };Rule { Matches { Domain("|id5-sync.com|") }, Action(Discard) };Rule { Matches { Domain("|tiktokcdn-us.com|") }, Action(Discard) };Rule { Matches { Domain("|dhs.gov|") }, Action(Discard) };Rule { Matches { Domain("|smh.com.au|") }, Action(Discard) };Rule { Matches { Domain("|docomo.ne.jp|") }, Action(Discard) };Rule { Matches { Domain("|accenture.com|") }, Action(Discard) };Rule { Matches { Domain("|lemonde.fr|") }, Action(Discard) };Rule { Matches { Domain("|sec.gov|") }, Action(Discard) };Rule { Matches { Domain("|app.link|") }, Action(Discard) };Rule { Matches { Domain("|aboutcookies.org|") }, Action(Discard) };Rule { Matches { Domain("|ifxnetworks.com|") }, Action(Discard) };Rule { Matches { Domain("|inbake.com|") }, Action(Discard) };Rule { Matches { Domain("|javdb.com|") }, Action(Discard) };Rule { Matches { Domain("|admin.ch|") }, Action(Discard) };Rule { Matches { Domain("|rakuten.com|") }, Action(Discard) };Rule { Matches { Domain("|t-online.de|") }, Action(Discard) };Rule { Matches { Domain("|prezi.com|") }, Action(Discard) };Rule { Matches { Domain("|onet.pl|") }, Action(Discard) };Rule { Matches { Domain("|dongchedi.com|") }, Action(Discard) };Rule { Matches { Domain("|domainmarket.com|") }, Action(Discard) };Rule { Matches { Domain("|hoster.kz|") }, Action(Discard) };Rule { Matches { Domain("|chaoxing.com|") }, Action(Discard) };Rule { Matches { Domain("|4chan.org|") }, Action(Discard) };Rule { Matches { Domain("|icicibank.com|") }, Action(Discard) };Rule { Matches { Domain("|theporndude.com|") }, Action(Discard) };Rule { Matches { Domain("|crunchbase.com|") }, Action(Discard) };Rule { Matches { Domain("|duosecurity.com|") }, Action(Discard) };Rule { Matches { Domain("|thingiverse.com|") }, Action(Discard) };Rule { Matches { Domain("|namecheaphosting.com|") }, Action(Discard) };Rule { Matches { Domain("|onelink.me|") }, Action(Discard) };Rule { Matches { Domain("|chapmanganato.com|") }, Action(Discard) };Rule { Matches { Domain("|justhost.ru|") }, Action(Discard) };Rule { Matches { Domain("|entergy.com|") }, Action(Discard) };Rule { Matches { Domain("|mitre.org|") }, Action(Discard) };Rule { Matches { Domain("|fisglobal.com|") }, Action(Discard) };Rule { Matches { Domain("|techradar.com|") }, Action(Discard) };Rule { Matches { Domain("|smallpdf.com|") }, Action(Discard) };Rule { Matches { Domain("|feignthat.com|") }, Action(Discard) };Rule { Matches { Domain("|realtor.com|") }, Action(Discard) };Rule { Matches { Domain("|amazon.com.br|") }, Action(Discard) };Rule { Matches { Domain("|sakura.ne.jp|") }, Action(Discard) };Rule { Matches { Domain("|history.com|") }, Action(Discard) };Rule { Matches { Domain("|utoronto.ca|") }, Action(Discard) };Rule { Matches { Domain("|dnsdomen.com|") }, Action(Discard) };Rule { Matches { Domain("|edu-servers.net|") }, Action(Discard) };Rule { Matches { Domain("|amazonaws.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|sc-cdn.net|") }, Action(Discard) };Rule { Matches { Domain("|sketchfab.com|") }, Action(Discard) };Rule { Matches { Domain("|chron.com|") }, Action(Discard) };Rule { Matches { Domain("|archiveofourown.org|") }, Action(Discard) };Rule { Matches { Domain("|google.com.sa|") }, Action(Discard) };Rule { Matches { Domain("|wikia.com|") }, Action(Discard) };Rule { Matches { Domain("|unicef.org|") }, Action(Discard) };Rule { Matches { Domain("|miitbeian.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|mos.ru|") }, Action(Discard) };Rule { Matches { Domain("|northwestern.edu|") }, Action(Discard) };Rule { Matches { Domain("|acm.org|") }, Action(Discard) };Rule { Matches { Domain("|inmotionhosting.com|") }, Action(Discard) };Rule { Matches { Domain("|mediatek.com|") }, Action(Discard) };Rule { Matches { Domain("|ssl-images-amazon.com|") }, Action(Discard) };Rule { Matches { Domain("|cutt.ly|") }, Action(Discard) };Rule { Matches { Domain("|quickconnect.to|") }, Action(Discard) };Rule { Matches { Domain("|nikkei.com|") }, Action(Discard) };Rule { Matches { Domain("|zynga.com|") }, Action(Discard) };Rule { Matches { Domain("|convertio.co|") }, Action(Discard) };Rule { Matches { Domain("|umd.edu|") }, Action(Discard) };Rule { Matches { Domain("|wp.pl|") }, Action(Discard) };Rule { Matches { Domain("|thesaurus.com|") }, Action(Discard) };Rule { Matches { Domain("|redtube.com|") }, Action(Discard) };Rule { Matches { Domain("|live.net|") }, Action(Discard) };Rule { Matches { Domain("|feedly.com|") }, Action(Discard) };Rule { Matches { Domain("|thoughtco.com|") }, Action(Discard) };Rule { Matches { Domain("|symantec.com|") }, Action(Discard) };Rule { Matches { Domain("|appismy.com|") }, Action(Discard) };Rule { Matches { Domain("|lanhuapp.com|") }, Action(Discard) };Rule { Matches { Domain("|equitydefault.com|") }, Action(Discard) };Rule { Matches { Domain("|sendgrid.net|") }, Action(Discard) };Rule { Matches { Domain("|msu.edu|") }, Action(Discard) };Rule { Matches { Domain("|gsmarena.com|") }, Action(Discard) };Rule { Matches { Domain("|ubc.ca|") }, Action(Discard) };Rule { Matches { Domain("|people.com|") }, Action(Discard) };Rule { Matches { Domain("|bild.de|") }, Action(Discard) };Rule { Matches { Domain("|withgoogle.com|") }, Action(Discard) };Rule { Matches { Domain("|mlb.com|") }, Action(Discard) };Rule { Matches { Domain("|say.rocks|") }, Action(Discard) };Rule { Matches { Domain("|hatena.ne.jp|") }, Action(Discard) };Rule { Matches { Domain("|kernel.org|") }, Action(Discard) };Rule { Matches { Domain("|netscape.com|") }, Action(Discard) };Rule { Matches { Domain("|aws-prd.net|") }, Action(Discard) };Rule { Matches { Domain("|9animetv.to|") }, Action(Discard) };Rule { Matches { Domain("|today.com|") }, Action(Discard) };Rule { Matches { Domain("|amd.com|") }, Action(Discard) };Rule { Matches { Domain("|samsungnyc.com|") }, Action(Discard) };Rule { Matches { Domain("|e2ro.com|") }, Action(Discard) };Rule { Matches { Domain("|freshdesk.com|") }, Action(Discard) };Rule { Matches { Domain("|nejm.org|") }, Action(Discard) };Rule { Matches { Domain("|samsungapps.com|") }, Action(Discard) };Rule { Matches { Domain("|battle.net|") }, Action(Discard) };Rule { Matches { Domain("|msidentity.com|") }, Action(Discard) };Rule { Matches { Domain("|ikarem.io|") }, Action(Discard) };Rule { Matches { Domain("|rackspacecloud.com|") }, Action(Discard) };Rule { Matches { Domain("|ndtv.com|") }, Action(Discard) };Rule { Matches { Domain("|vkuser.net|") }, Action(Discard) };Rule { Matches { Domain("|amazon.ae|") }, Action(Discard) };Rule { Matches { Domain("|viriciti.com|") }, Action(Discard) };Rule { Matches { Domain("|usa.gov|") }, Action(Discard) };Rule { Matches { Domain("|statuspage.io|") }, Action(Discard) };Rule { Matches { Domain("|notion.site|") }, Action(Discard) };Rule { Matches { Domain("|tnaflix.com|") }, Action(Discard) };Rule { Matches { Domain("|hh.ru|") }, Action(Discard) };Rule { Matches { Domain("|aliexpress.us|") }, Action(Discard) };Rule { Matches { Domain("|bdimg.com|") }, Action(Discard) };Rule { Matches { Domain("|betfair.com|") }, Action(Discard) };Rule { Matches { Domain("|liadm.com|") }, Action(Discard) };Rule { Matches { Domain("|websitewelcome.com|") }, Action(Discard) };Rule { Matches { Domain("|docusign.net|") }, Action(Discard) };Rule { Matches { Domain("|excretekings.com|") }, Action(Discard) };Rule { Matches { Domain("|thehill.com|") }, Action(Discard) };Rule { Matches { Domain("|applovin.com|") }, Action(Discard) };Rule { Matches { Domain("|nipr.mil|") }, Action(Discard) };Rule { Matches { Domain("|gcdn.co|") }, Action(Discard) };Rule { Matches { Domain("|savvis.net|") }, Action(Discard) };Rule { Matches { Domain("|teads.tv|") }, Action(Discard) };Rule { Matches { Domain("|infonline.de|") }, Action(Discard) };Rule { Matches { Domain("|hootsuite.com|") }, Action(Discard) };Rule { Matches { Domain("|java.com|") }, Action(Discard) };Rule { Matches { Domain("|squareup.com|") }, Action(Discard) };Rule { Matches { Domain("|for-j.com|") }, Action(Discard) };Rule { Matches { Domain("|agoda.com|") }, Action(Discard) };Rule { Matches { Domain("|ibb.co|") }, Action(Discard) };Rule { Matches { Domain("|contextweb.com|") }, Action(Discard) };Rule { Matches { Domain("|yieldmo.com|") }, Action(Discard) };Rule { Matches { Domain("|krxd.net|") }, Action(Discard) };Rule { Matches { Domain("|earthlink.net|") }, Action(Discard) };Rule { Matches { Domain("|ssrn.com|") }, Action(Discard) };Rule { Matches { Domain("|bamgrid.com|") }, Action(Discard) };Rule { Matches { Domain("|kohls.com|") }, Action(Discard) };Rule { Matches { Domain("|178.com|") }, Action(Discard) };Rule { Matches { Domain("|auth0.com|") }, Action(Discard) };Rule { Matches { Domain("|sapsf.com|") }, Action(Discard) };Rule { Matches { Domain("|vnexpress.net|") }, Action(Discard) };Rule { Matches { Domain("|web.dev|") }, Action(Discard) };Rule { Matches { Domain("|makeuseof.com|") }, Action(Discard) };Rule { Matches { Domain("|dytt8.net|") }, Action(Discard) };Rule { Matches { Domain("|pwc.com|") }, Action(Discard) };Rule { Matches { Domain("|as.com|") }, Action(Discard) };Rule { Matches { Domain("|afilias-nst.info|") }, Action(Discard) };Rule { Matches { Domain("|hollywoodreporter.com|") }, Action(Discard) };Rule { Matches { Domain("|mercari.com|") }, Action(Discard) };Rule { Matches { Domain("|scmp.com|") }, Action(Discard) };Rule { Matches { Domain("|ctrip.com|") }, Action(Discard) };Rule { Matches { Domain("|creativecdn.com|") }, Action(Discard) };Rule { Matches { Domain("|tamu.edu|") }, Action(Discard) };Rule { Matches { Domain("|166.com|") }, Action(Discard) };Rule { Matches { Domain("|urbandictionary.com|") }, Action(Discard) };Rule { Matches { Domain("|naveljutmistress.com|") }, Action(Discard) };Rule { Matches { Domain("|domaindiscount24.net|") }, Action(Discard) };Rule { Matches { Domain("|racklabs.com|") }, Action(Discard) };Rule { Matches { Domain("|curtin.edu|") }, Action(Discard) };Rule { Matches { Domain("|bendibao.com|") }, Action(Discard) };Rule { Matches { Domain("|topdns.com|") }, Action(Discard) };Rule { Matches { Domain("|goguardian.com|") }, Action(Discard) };Rule { Matches { Domain("|wixdns.net|") }, Action(Discard) };Rule { Matches { Domain("|shopee.co.th|") }, Action(Discard) };Rule { Matches { Domain("|turkiye.gov.tr|") }, Action(Discard) };Rule { Matches { Domain("|hpe.com|") }, Action(Discard) };Rule { Matches { Domain("|pandora.com|") }, Action(Discard) };Rule { Matches { Domain("|digitaltrends.com|") }, Action(Discard) };Rule { Matches { Domain("|lww.com|") }, Action(Discard) };Rule { Matches { Domain("|googleblog.com|") }, Action(Discard) };Rule { Matches { Domain("|threema.ch|") }, Action(Discard) };Rule { Matches { Domain("|goo.ne.jp|") }, Action(Discard) };Rule { Matches { Domain("|zalan.do|") }, Action(Discard) };Rule { Matches { Domain("|shopee.com.my|") }, Action(Discard) };Rule { Matches { Domain("|lowes.com|") }, Action(Discard) };Rule { Matches { Domain("|monday.com|") }, Action(Discard) };Rule { Matches { Domain("|moneycontrol.com|") }, Action(Discard) };Rule { Matches { Domain("|sectigo.com|") }, Action(Discard) };Rule { Matches { Domain("|peacocktv.com|") }, Action(Discard) };Rule { Matches { Domain("|itu.int|") }, Action(Discard) };Rule { Matches { Domain("|hwcdn.ru|") }, Action(Discard) };Rule { Matches { Domain("|ucoz.ru|") }, Action(Discard) };Rule { Matches { Domain("|chinatax.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|insider.com|") }, Action(Discard) };Rule { Matches { Domain("|sitescout.com|") }, Action(Discard) };Rule { Matches { Domain("|hepsiburada.com|") }, Action(Discard) };Rule { Matches { Domain("|proton.me|") }, Action(Discard) };Rule { Matches { Domain("|infobae.com|") }, Action(Discard) };Rule { Matches { Domain("|zapier.com|") }, Action(Discard) };Rule { Matches { Domain("|register.com|") }, Action(Discard) };Rule { Matches { Domain("|bund.de|") }, Action(Discard) };Rule { Matches { Domain("|euronews.com|") }, Action(Discard) };Rule { Matches { Domain("|iheart.com|") }, Action(Discard) };Rule { Matches { Domain("|company-target.com|") }, Action(Discard) };Rule { Matches { Domain("|t66y.com|") }, Action(Discard) };Rule { Matches { Domain("|globalsign.com|") }, Action(Discard) };Rule { Matches { Domain("|semanticscholar.org|") }, Action(Discard) };Rule { Matches { Domain("|redfin.com|") }, Action(Discard) };Rule { Matches { Domain("|huaweicloud.com|") }, Action(Discard) };Rule { Matches { Domain("|cbr.ru|") }, Action(Discard) };Rule { Matches { Domain("|appsflyersdk.com|") }, Action(Discard) };Rule { Matches { Domain("|skyeng.ru|") }, Action(Discard) };Rule { Matches { Domain("|b2clogin.com|") }, Action(Discard) };Rule { Matches { Domain("|gda.pl|") }, Action(Discard) };Rule { Matches { Domain("|zoukankan.com|") }, Action(Discard) };Rule { Matches { Domain("|colorado.edu|") }, Action(Discard) };Rule { Matches { Domain("|altervista.org|") }, Action(Discard) };Rule { Matches { Domain("|pluto.tv|") }, Action(Discard) };Rule { Matches { Domain("|woocommerce.com|") }, Action(Discard) };Rule { Matches { Domain("|amazon.com.co|") }, Action(Discard) };Rule { Matches { Domain("|fireeye.com|") }, Action(Discard) };Rule { Matches { Domain("|medlineplus.gov|") }, Action(Discard) };Rule { Matches { Domain("|archives.gov|") }, Action(Discard) };Rule { Matches { Domain("|acfun.cn|") }, Action(Discard) };Rule { Matches { Domain("|automattic.com|") }, Action(Discard) };Rule { Matches { Domain("|mozaws.net|") }, Action(Discard) };Rule { Matches { Domain("|disneyplus.com|") }, Action(Discard) };Rule { Matches { Domain("|usembassy.gov|") }, Action(Discard) };Rule { Matches { Domain("|nsw.gov.au|") }, Action(Discard) };Rule { Matches { Domain("|thedailybeast.com|") }, Action(Discard) };Rule { Matches { Domain("|venturebeat.com|") }, Action(Discard) };Rule { Matches { Domain("|m.me|") }, Action(Discard) };Rule { Matches { Domain("|midjourney.com|") }, Action(Discard) };Rule { Matches { Domain("|intercom.io|") }, Action(Discard) };Rule { Matches { Domain("|smithsonianmag.com|") }, Action(Discard) };Rule { Matches { Domain("|ctfile.com|") }, Action(Discard) };Rule { Matches { Domain("|tableau.com|") }, Action(Discard) };Rule { Matches { Domain("|finn.no|") }, Action(Discard) };Rule { Matches { Domain("|slashdot.org|") }, Action(Discard) };Rule { Matches { Domain("|parklogic.com|") }, Action(Discard) };Rule { Matches { Domain("|webhostbox.net|") }, Action(Discard) };Rule { Matches { Domain("|moodle.org|") }, Action(Discard) };Rule { Matches { Domain("|66law.cn|") }, Action(Discard) };Rule { Matches { Domain("|nalog.ru|") }, Action(Discard) };Rule { Matches { Domain("|life360.com|") }, Action(Discard) };Rule { Matches { Domain("|collegeboard.org|") }, Action(Discard) };Rule { Matches { Domain("|one.com|") }, Action(Discard) };Rule { Matches { Domain("|dbankcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|chinadaily.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|freecodecamp.org|") }, Action(Discard) };Rule { Matches { Domain("|mixcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|magento.cloud|") }, Action(Discard) };Rule { Matches { Domain("|drift.com|") }, Action(Discard) };Rule { Matches { Domain("|wunderground.com|") }, Action(Discard) };Rule { Matches { Domain("|lastpass.com|") }, Action(Discard) };Rule { Matches { Domain("|clever.com|") }, Action(Discard) };Rule { Matches { Domain("|dot.gov|") }, Action(Discard) };Rule { Matches { Domain("|sentinelone.net|") }, Action(Discard) };Rule { Matches { Domain("|adobelogin.com|") }, Action(Discard) };Rule { Matches { Domain("|efunds.com|") }, Action(Discard) };Rule { Matches { Domain("|ezoicns.com|") }, Action(Discard) };Rule { Matches { Domain("|1rx.io|") }, Action(Discard) };Rule { Matches { Domain("|adjust.com|") }, Action(Discard) };Rule { Matches { Domain("|playfabapi.com|") }, Action(Discard) };Rule { Matches { Domain("|google.com.eg|") }, Action(Discard) };Rule { Matches { Domain("|tsinghua.edu.cn|") }, Action(Discard) };Rule { Matches { Domain("|mystrikingly.com|") }, Action(Discard) };Rule { Matches { Domain("|skroutz.gr|") }, Action(Discard) };Rule { Matches { Domain("|amazon.cn|") }, Action(Discard) };Rule { Matches { Domain("|unired.net.pe|") }, Action(Discard) };Rule { Matches { Domain("|kaspi.kz|") }, Action(Discard) };Rule { Matches { Domain("|openssl.org|") }, Action(Discard) };Rule { Matches { Domain("|gname-dns.com|") }, Action(Discard) };Rule { Matches { Domain("|gmw.cn|") }, Action(Discard) };Rule { Matches { Domain("|costco.com|") }, Action(Discard) };Rule { Matches { Domain("|cbsivideo.com|") }, Action(Discard) };Rule { Matches { Domain("|clevelandclinic.org|") }, Action(Discard) };Rule { Matches { Domain("|biblegateway.com|") }, Action(Discard) };Rule { Matches { Domain("|myhostadmin.net|") }, Action(Discard) };Rule { Matches { Domain("|zhaopin.com|") }, Action(Discard) };Rule { Matches { Domain("|gallup.com|") }, Action(Discard) };Rule { Matches { Domain("|docusign.com|") }, Action(Discard) };Rule { Matches { Domain("|huggingface.co|") }, Action(Discard) };Rule { Matches { Domain("|ouo.io|") }, Action(Discard) };Rule { Matches { Domain("|metro.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|agora.io|") }, Action(Discard) };Rule { Matches { Domain("|lifehacker.com|") }, Action(Discard) };Rule { Matches { Domain("|smi2.net|") }, Action(Discard) };Rule { Matches { Domain("|redbubble.com|") }, Action(Discard) };Rule { Matches { Domain("|sinaedge.com|") }, Action(Discard) };Rule { Matches { Domain("|gismeteo.ru|") }, Action(Discard) };Rule { Matches { Domain("|indexww.com|") }, Action(Discard) };Rule { Matches { Domain("|pinterest.ca|") }, Action(Discard) };Rule { Matches { Domain("|4399.com|") }, Action(Discard) };Rule { Matches { Domain("|dreamstime.com|") }, Action(Discard) };Rule { Matches { Domain("|samsungcloudsolution.net|") }, Action(Discard) };Rule { Matches { Domain("|online-banking-services.com|") }, Action(Discard) };Rule { Matches { Domain("|justice.gov|") }, Action(Discard) };Rule { Matches { Domain("|hatenablog.com|") }, Action(Discard) };Rule { Matches { Domain("|last.fm|") }, Action(Discard) };Rule { Matches { Domain("|azure-dns.net|") }, Action(Discard) };Rule { Matches { Domain("|trustarc.com|") }, Action(Discard) };Rule { Matches { Domain("|teachable.com|") }, Action(Discard) };Rule { Matches { Domain("|newscientist.com|") }, Action(Discard) };Rule { Matches { Domain("|income.com.sg|") }, Action(Discard) };Rule { Matches { Domain("|tum.de|") }, Action(Discard) };Rule { Matches { Domain("|hpecorp.net|") }, Action(Discard) };Rule { Matches { Domain("|dropcatch.com|") }, Action(Discard) };Rule { Matches { Domain("|meituan.com|") }, Action(Discard) };Rule { Matches { Domain("|tragicbeyond.com|") }, Action(Discard) };Rule { Matches { Domain("|theglobeandmail.com|") }, Action(Discard) };Rule { Matches { Domain("|freebsd.org|") }, Action(Discard) };Rule { Matches { Domain("|nfl.com|") }, Action(Discard) };Rule { Matches { Domain("|ey.com|") }, Action(Discard) };Rule { Matches { Domain("|bodis.com|") }, Action(Discard) };Rule { Matches { Domain("|iana.org|") }, Action(Discard) };Rule { Matches { Domain("|service.gov.uk|") }, Action(Discard) };Rule { Matches { Domain("|ixxx.com|") }, Action(Discard) };Rule { Matches { Domain("|bu.edu|") }, Action(Discard) };Rule { Matches { Domain("|wa.gov|") }, Action(Discard) };Rule { Matches { Domain("|ztomy.com|") }, Action(Discard) };Rule { Matches { Domain("|nymag.com|") }, Action(Discard) };Rule { Matches { Domain("|2345.com|") }, Action(Discard) };Rule { Matches { Domain("|a-ads.com|") }, Action(Discard) };Rule { Matches { Domain("|gamewith.jp|") }, Action(Discard) };Rule { Matches { Domain("|stat-rock.com|") }, Action(Discard) };Rule { Matches { Domain("|3gppnetwork.org|") }, Action(Discard) };Rule { Matches { Domain("|xunlei.com|") }, Action(Discard) };Rule { Matches { Domain("|parallels.com|") }, Action(Discard) };Rule { Matches { Domain("|weather.gov|") }, Action(Discard) };Rule { Matches { Domain("|shopee.vn|") }, Action(Discard) };Rule { Matches { Domain("|dns.cn|") }, Action(Discard) };Rule { Matches { Domain("|zcool.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|hindustantimes.com|") }, Action(Discard) };Rule { Matches { Domain("|citi.com|") }, Action(Discard) };Rule { Matches { Domain("|hsforms.com|") }, Action(Discard) };Rule { Matches { Domain("|leetcode.cn|") }, Action(Discard) };Rule { Matches { Domain("|mozgcp.net|") }, Action(Discard) };Rule { Matches { Domain("|nydailynews.com|") }, Action(Discard) };Rule { Matches { Domain("|ostrovok.ru|") }, Action(Discard) };Rule { Matches { Domain("|ahrefs.com|") }, Action(Discard) };Rule { Matches { Domain("|afilias-nst.org|") }, Action(Discard) };Rule { Matches { Domain("|grserver.gr|") }, Action(Discard) };Rule { Matches { Domain("|surfshark.com|") }, Action(Discard) };Rule { Matches { Domain("|libsyn.com|") }, Action(Discard) };Rule { Matches { Domain("|rule34.xxx|") }, Action(Discard) };Rule { Matches { Domain("|planethoster.net|") }, Action(Discard) };Rule { Matches { Domain("|lego.com|") }, Action(Discard) };Rule { Matches { Domain("|foursquare.com|") }, Action(Discard) };Rule { Matches { Domain("|viber.com|") }, Action(Discard) };Rule { Matches { Domain("|shalltry.com|") }, Action(Discard) };Rule { Matches { Domain("|myteksi.net|") }, Action(Discard) };Rule { Matches { Domain("|texas.gov|") }, Action(Discard) };Rule { Matches { Domain("|zenecn.net|") }, Action(Discard) };Rule { Matches { Domain("|dondominio.com|") }, Action(Discard) };Rule { Matches { Domain("|rutracker.org|") }, Action(Discard) };Rule { Matches { Domain("|flipboard.com|") }, Action(Discard) };Rule { Matches { Domain("|elisa.fi|") }, Action(Discard) };Rule { Matches { Domain("|greenhouse.io|") }, Action(Discard) };Rule { Matches { Domain("|drupal.org|") }, Action(Discard) };Rule { Matches { Domain("|espncricinfo.com|") }, Action(Discard) };Rule { Matches { Domain("|2o7.net|") }, Action(Discard) };Rule { Matches { Domain("|fedoraproject.org|") }, Action(Discard) };Rule { Matches { Domain("|tktube.com|") }, Action(Discard) };Rule { Matches { Domain("|lefigaro.fr|") }, Action(Discard) };Rule { Matches { Domain("|cuny.edu|") }, Action(Discard) };Rule { Matches { Domain("|ovotech.org.uk|") }, Action(Discard) };Rule { Matches { Domain("|bitnami.com|") }, Action(Discard) };Rule { Matches { Domain("|dbankedge.cn|") }, Action(Discard) };Rule { Matches { Domain("|gumgum.com|") }, Action(Discard) };Rule { Matches { Domain("|treasury.gov|") }, Action(Discard) };Rule { Matches { Domain("|bootstrapcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|siteimproveanalytics.io|") }, Action(Discard) };Rule { Matches { Domain("|foxbusiness.com|") }, Action(Discard) };Rule { Matches { Domain("|congress.gov|") }, Action(Discard) };Rule { Matches { Domain("|crowdstrike.com|") }, Action(Discard) };Rule { Matches { Domain("|bigcartel.com|") }, Action(Discard) };Rule { Matches { Domain("|hotmart.com|") }, Action(Discard) };Rule { Matches { Domain("|51job.com|") }, Action(Discard) };Rule { Matches { Domain("|line-apps.com|") }, Action(Discard) };Rule { Matches { Domain("|repubblica.it|") }, Action(Discard) };Rule { Matches { Domain("|thebalancemoney.com|") }, Action(Discard) };Rule { Matches { Domain("|rfihub.com|") }, Action(Discard) };Rule { Matches { Domain("|dynatrace.com|") }, Action(Discard) };Rule { Matches { Domain("|spaceweb.ru|") }, Action(Discard) };Rule { Matches { Domain("|logitech.com|") }, Action(Discard) };Rule { Matches { Domain("|bigcommerce.com|") }, Action(Discard) };Rule { Matches { Domain("|btnull.org|") }, Action(Discard) };Rule { Matches { Domain("|imf.org|") }, Action(Discard) };Rule { Matches { Domain("|cricbuzz.com|") }, Action(Discard) };Rule { Matches { Domain("|rutgers.edu|") }, Action(Discard) };Rule { Matches { Domain("|bbtec.net|") }, Action(Discard) };Rule { Matches { Domain("|ning.com|") }, Action(Discard) };Rule { Matches { Domain("|rings.solutions|") }, Action(Discard) };Rule { Matches { Domain("|phicdn.net|") }, Action(Discard) };Rule { Matches { Domain("|mixpanel.com|") }, Action(Discard) };Rule { Matches { Domain("|alikunlun.com|") }, Action(Discard) };Rule { Matches { Domain("|ico.org.uk|") }, Action(Discard) };Rule { Matches { Domain("|mimecast.com|") }, Action(Discard) };Rule { Matches { Domain("|basecamp.com|") }, Action(Discard) };Rule { Matches { Domain("|thefreedictionary.com|") }, Action(Discard) };Rule { Matches { Domain("|energy.gov|") }, Action(Discard) };Rule { Matches { Domain("|contentsquare.net|") }, Action(Discard) };Rule { Matches { Domain("|thomsonreuters.com|") }, Action(Discard) };Rule { Matches { Domain("|acronis.com|") }, Action(Discard) };Rule { Matches { Domain("|fitgirl-repacks.site|") }, Action(Discard) };Rule { Matches { Domain("|allawnos.com|") }, Action(Discard) };Rule { Matches { Domain("|enable-javascript.com|") }, Action(Discard) };Rule { Matches { Domain("|pypi.org|") }, Action(Discard) };Rule { Matches { Domain("|ycombinator.com|") }, Action(Discard) };Rule { Matches { Domain("|clickup.com|") }, Action(Discard) };Rule { Matches { Domain("|desjardins.com|") }, Action(Discard) };Rule { Matches { Domain("|aa.com|") }, Action(Discard) };Rule { Matches { Domain("|ubisoft.com|") }, Action(Discard) };Rule { Matches { Domain("|nasdaq.com|") }, Action(Discard) };Rule { Matches { Domain("|foodnetwork.com|") }, Action(Discard) };Rule { Matches { Domain("|intercom.com|") }, Action(Discard) };Rule { Matches { Domain("|ibosscloud.com|") }, Action(Discard) };Rule { Matches { Domain("|virginia.edu|") }, Action(Discard) };Rule { Matches { Domain("|ctdns.cn|") }, Action(Discard) };Rule { Matches { Domain("|amocrm.ru|") }, Action(Discard) };Rule { Matches { Domain("|utah.edu|") }, Action(Discard) };Rule { Matches { Domain("|ebay.de|") }, Action(Discard) };Rule { Matches { Domain("|discovery.com|") }, Action(Discard) };Rule { Matches { Domain("|apachefriends.org|") }, Action(Discard) };Rule { Matches { Domain("|google.co.id|") }, Action(Discard) };Rule { Matches { Domain("|instructables.com|") }, Action(Discard) };Rule { Matches { Domain("|audible.com|") }, Action(Discard) };Rule { Matches { Domain("|rusprofile.ru|") }, Action(Discard) };Rule { Matches { Domain("|amazon.eu|") }, Action(Discard) };Rule { Matches { Domain("|minecraft.net|") }, Action(Discard) };Rule { Matches { Domain("|nhk.or.jp|") }, Action(Discard) };Rule { Matches { Domain("|home.pl|") }, Action(Discard) };Rule { Matches { Domain("|eksisozluk.com|") }, Action(Discard) };Rule { Matches { Domain("|moatpixel.com|") }, Action(Discard) };Rule { Matches { Domain("|woa.com|") }, Action(Discard) };Rule { Matches { Domain("|adswizz.com|") }, Action(Discard) };Rule { Matches { Domain("|webflow.com|") }, Action(Discard) };Rule { Matches { Domain("|quantummetric.com|") }, Action(Discard) };Rule { Matches { Domain("|moz.com|") }, Action(Discard) };Rule { Matches { Domain("|wordreference.com|") }, Action(Discard) };Rule { Matches { Domain("|go-mpulse.net|") }, Action(Discard) };Rule { Matches { Domain("|vihub.ru|") }, Action(Discard) };Rule { Matches { Domain("|msftauth.net|") }, Action(Discard) };Rule { Matches { Domain("|nxp.net|") }, Action(Discard) };Rule { Matches { Domain("|zoominfo.com|") }, Action(Discard) };Rule { Matches { Domain("|xe.com|") }, Action(Discard) };Rule { Matches { Domain("|arca.live|") }, Action(Discard) };Rule { Matches { Domain("|betaskope.com|") }, Action(Discard) };Rule { Matches { Domain("|aarp.org|") }, Action(Discard) };Rule { Matches { Domain("|omnitagjs.com|") }, Action(Discard) };Rule { Matches { Domain("|avito.st|") }, Action(Discard) };Rule { Matches { Domain("|poki.com|") }, Action(Discard) };Rule { Matches { Domain("|lanzoui.com|") }, Action(Discard) };Rule { Matches { Domain("|thenai.org|") }, Action(Discard) };Rule { Matches { Domain("|nodejs.org|") }, Action(Discard) };Rule { Matches { Domain("|mapquest.com|") }, Action(Discard) };Rule { Matches { Domain("|netlify.app|") }, Action(Discard) };Rule { Matches { Domain("|udn.com|") }, Action(Discard) };Rule { Matches { Domain("|fcc.gov|") }, Action(Discard) };Rule { Matches { Domain("|welt.de|") }, Action(Discard) };Rule { Matches { Domain("|google.com.ar|") }, Action(Discard) };Rule { Matches { Domain("|ual.com|") }, Action(Discard) };Rule { Matches { Domain("|osu.edu|") }, Action(Discard) };Rule { Matches { Domain("|google.nl|") }, Action(Discard) };Rule { Matches { Domain("|webempresa.eu|") }, Action(Discard) };Rule { Matches { Domain("|seekingalpha.com|") }, Action(Discard) };Rule { Matches { Domain("|technologyreview.com|") }, Action(Discard) };Rule { Matches { Domain("|me.com|") }, Action(Discard) };Rule { Matches { Domain("|indianexpress.com|") }, Action(Discard) };Rule { Matches { Domain("|anydesk.com|") }, Action(Discard) };Rule { Matches { Domain("|tokyomotion.net|") }, Action(Discard) };Rule { Matches { Domain("|imageshack.us|") }, Action(Discard) };Rule { Matches { Domain("|billdomain.com|") }, Action(Discard) };Rule { Matches { Domain("|wnacg.org|") }, Action(Discard) };Rule { Matches { Domain("|nyc.gov|") }, Action(Discard) };Rule { Matches { Domain("|usgovtrafficmanager.net|") }, Action(Discard) };Rule { Matches { Domain("|merchantlink.com|") }, Action(Discard) };Rule { Matches { Domain("|prudential.com|") }, Action(Discard) };Rule { Matches { Domain("|messagebird.com|") }, Action(Discard) };Rule { Matches { Domain("|ultradns.net|") }, Action(Discard) };Rule { Matches { Domain("|lync.com|") }, Action(Discard) };Rule { Matches { Domain("|aadrm.com|") }, Action(Discard) };Rule { Matches { Domain("|akamaitechnologies.com|") }, Action(Discard) };Rule { Matches { Domain("|porntrex.com|") }, Action(Discard) };Rule { Matches { Domain("|shimo.im|") }, Action(Discard) };Rule { Matches { Domain("|dafont.com|") }, Action(Discard) };Rule { Matches { Domain("|cdnbuild.net|") }, Action(Discard) };Rule { Matches { Domain("|citrix.com|") }, Action(Discard) };Rule { Matches { Domain("|linksynergy.com|") }, Action(Discard) };Rule { Matches { Domain("|ticketmaster.com|") }, Action(Discard) };Rule { Matches { Domain("|crjpgate.com|") }, Action(Discard) };Rule { Matches { Domain("|trueconf.net|") }, Action(Discard) };Rule { Matches { Domain("|bingapis.com|") }, Action(Discard) };Rule { Matches { Domain("|interia.pl|") }, Action(Discard) };Rule { Matches { Domain("|spotxchange.com|") }, Action(Discard) };Rule { Matches { Domain("|asos.com|") }, Action(Discard) };Rule { Matches { Domain("|dbankcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|kunluncan.com|") }, Action(Discard) };Rule { Matches { Domain("|phys.org|") }, Action(Discard) };Rule { Matches { Domain("|advertising.com|") }, Action(Discard) };Rule { Matches { Domain("|garmin.com|") }, Action(Discard) };Rule { Matches { Domain("|twilio.com|") }, Action(Discard) };Rule { Matches { Domain("|uberinternal.com|") }, Action(Discard) };Rule { Matches { Domain("|inmobi.com|") }, Action(Discard) };Rule { Matches { Domain("|fastlylb.net|") }, Action(Discard) };Rule { Matches { Domain("|blogspot.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|houzz.com|") }, Action(Discard) };Rule { Matches { Domain("|doordash.com|") }, Action(Discard) };Rule { Matches { Domain("|us.com|") }, Action(Discard) };Rule { Matches { Domain("|turn.com|") }, Action(Discard) };Rule { Matches { Domain("|iponweb.net|") }, Action(Discard) };Rule { Matches { Domain("|livestream.com|") }, Action(Discard) };Rule { Matches { Domain("|coupadev.com|") }, Action(Discard) };Rule { Matches { Domain("|ithome.com|") }, Action(Discard) };Rule { Matches { Domain("|akasripcn.net|") }, Action(Discard) };Rule { Matches { Domain("|hostedrmm.com|") }, Action(Discard) };Rule { Matches { Domain("|ptt.cc|") }, Action(Discard) };Rule { Matches { Domain("|about.me|") }, Action(Discard) };Rule { Matches { Domain("|fbsbx.com|") }, Action(Discard) };Rule { Matches { Domain("|uspto.gov|") }, Action(Discard) };Rule { Matches { Domain("|ucl.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|ximalaya.com|") }, Action(Discard) };Rule { Matches { Domain("|boyfriendtv.com|") }, Action(Discard) };Rule { Matches { Domain("|canva.cn|") }, Action(Discard) };Rule { Matches { Domain("|creditkarma.com|") }, Action(Discard) };Rule { Matches { Domain("|futbin.com|") }, Action(Discard) };Rule { Matches { Domain("|odoo.com|") }, Action(Discard) };Rule { Matches { Domain("|kde.org|") }, Action(Discard) };Rule { Matches { Domain("|kahoot.it|") }, Action(Discard) };Rule { Matches { Domain("|mcafee-cloud.com|") }, Action(Discard) };Rule { Matches { Domain("|soap2day.to|") }, Action(Discard) };Rule { Matches { Domain("|freeok.vip|") }, Action(Discard) };Rule { Matches { Domain("|aviasales.ru|") }, Action(Discard) };Rule { Matches { Domain("|sapo.pt|") }, Action(Discard) };Rule { Matches { Domain("|firebaseio.com|") }, Action(Discard) };Rule { Matches { Domain("|tapd.cn|") }, Action(Discard) };Rule { Matches { Domain("|sweb.ru|") }, Action(Discard) };Rule { Matches { Domain("|gettyimages.com|") }, Action(Discard) };Rule { Matches { Domain("|csof.net|") }, Action(Discard) };Rule { Matches { Domain("|network-auth.com|") }, Action(Discard) };Rule { Matches { Domain("|superuser.com|") }, Action(Discard) };Rule { Matches { Domain("|pinterest.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|afternic.com|") }, Action(Discard) };Rule { Matches { Domain("|423down.com|") }, Action(Discard) };Rule { Matches { Domain("|wikidot.com|") }, Action(Discard) };Rule { Matches { Domain("|ads-twitter.com|") }, Action(Discard) };Rule { Matches { Domain("|pku.edu.cn|") }, Action(Discard) };Rule { Matches { Domain("|mgslb.com|") }, Action(Discard) };Rule { Matches { Domain("|jinritemai.com|") }, Action(Discard) };Rule { Matches { Domain("|windowsazure.com|") }, Action(Discard) };Rule { Matches { Domain("|boston.com|") }, Action(Discard) };Rule { Matches { Domain("|softwareadvice.com|") }, Action(Discard) };Rule { Matches { Domain("|virtualearth.net|") }, Action(Discard) };Rule { Matches { Domain("|heart.org|") }, Action(Discard) };Rule { Matches { Domain("|cancer.org|") }, Action(Discard) };Rule { Matches { Domain("|netgear.com|") }, Action(Discard) };Rule { Matches { Domain("|xuexi.cn|") }, Action(Discard) };Rule { Matches { Domain("|privacyshield.gov|") }, Action(Discard) };Rule { Matches { Domain("|malwarebytes.com|") }, Action(Discard) };Rule { Matches { Domain("|cbslocal.com|") }, Action(Discard) };Rule { Matches { Domain("|opera.software|") }, Action(Discard) };Rule { Matches { Domain("|cloudsink.net|") }, Action(Discard) };Rule { Matches { Domain("|fapello.com|") }, Action(Discard) };Rule { Matches { Domain("|unrulymedia.com|") }, Action(Discard) };Rule { Matches { Domain("|dol.gov|") }, Action(Discard) };Rule { Matches { Domain("|joomla.org|") }, Action(Discard) };Rule { Matches { Domain("|4wps.net|") }, Action(Discard) };Rule { Matches { Domain("|podbean.com|") }, Action(Discard) };Rule { Matches { Domain("|stickyadstv.com|") }, Action(Discard) };Rule { Matches { Domain("|mediahils.ru|") }, Action(Discard) };Rule { Matches { Domain("|google.com.vn|") }, Action(Discard) };Rule { Matches { Domain("|navy.mil|") }, Action(Discard) };Rule { Matches { Domain("|vecteezy.com|") }, Action(Discard) };Rule { Matches { Domain("|uplynk.com|") }, Action(Discard) };Rule { Matches { Domain("|ebay.com.au|") }, Action(Discard) };Rule { Matches { Domain("|letsencrypt.org|") }, Action(Discard) };Rule { Matches { Domain("|angelfire.com|") }, Action(Discard) };Rule { Matches { Domain("|dropbox-dns.com|") }, Action(Discard) };Rule { Matches { Domain("|bleacherreport.com|") }, Action(Discard) };Rule { Matches { Domain("|truste.com|") }, Action(Discard) };Rule { Matches { Domain("|motherless.com|") }, Action(Discard) };Rule { Matches { Domain("|dynamics.com|") }, Action(Discard) };Rule { Matches { Domain("|wufoo.com|") }, Action(Discard) };Rule { Matches { Domain("|bitdefender.com|") }, Action(Discard) };Rule { Matches { Domain("|brookings.edu|") }, Action(Discard) };Rule { Matches { Domain("|ed.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|uptodown.com|") }, Action(Discard) };Rule { Matches { Domain("|locaweb.com.br|") }, Action(Discard) };Rule { Matches { Domain("|deadline.com|") }, Action(Discard) };Rule { Matches { Domain("|bcvcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|fbi.gov|") }, Action(Discard) };Rule { Matches { Domain("|gshifen.com|") }, Action(Discard) };Rule { Matches { Domain("|georgetown.edu|") }, Action(Discard) };Rule { Matches { Domain("|ddys.art|") }, Action(Discard) };Rule { Matches { Domain("|bol.io|") }, Action(Discard) };Rule { Matches { Domain("|lnkd.in|") }, Action(Discard) };Rule { Matches { Domain("|dbankedge.net|") }, Action(Discard) };Rule { Matches { Domain("|lazada.co.th|") }, Action(Discard) };Rule { Matches { Domain("|txxx.com|") }, Action(Discard) };Rule { Matches { Domain("|idnes.cz|") }, Action(Discard) };Rule { Matches { Domain("|ask.com|") }, Action(Discard) };Rule { Matches { Domain("|ethz.ch|") }, Action(Discard) };Rule { Matches { Domain("|360kuai.com|") }, Action(Discard) };Rule { Matches { Domain("|univie.ac.at|") }, Action(Discard) };Rule { Matches { Domain("|com.com|") }, Action(Discard) };Rule { Matches { Domain("|pikabu.ru|") }, Action(Discard) };Rule { Matches { Domain("|uhc.com|") }, Action(Discard) };Rule { Matches { Domain("|nessus.org|") }, Action(Discard) };Rule { Matches { Domain("|iop.org|") }, Action(Discard) };Rule { Matches { Domain("|donmai.us|") }, Action(Discard) };Rule { Matches { Domain("|mcmod.cn|") }, Action(Discard) };Rule { Matches { Domain("|google.pl|") }, Action(Discard) };Rule { Matches { Domain("|protek.ru|") }, Action(Discard) };Rule { Matches { Domain("|hotels.com|") }, Action(Discard) };Rule { Matches { Domain("|tvsquared.com|") }, Action(Discard) };Rule { Matches { Domain("|macys.com|") }, Action(Discard) };Rule { Matches { Domain("|syosetu.com|") }, Action(Discard) };Rule { Matches { Domain("|gutenberg.org|") }, Action(Discard) };Rule { Matches { Domain("|bbsmax.com|") }, Action(Discard) };Rule { Matches { Domain("|xiaomi.net|") }, Action(Discard) };Rule { Matches { Domain("|hse.ru|") }, Action(Discard) };Rule { Matches { Domain("|razorpay.com|") }, Action(Discard) };Rule { Matches { Domain("|kunlunsl.com|") }, Action(Discard) };Rule { Matches { Domain("|amazon.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|elmundo.es|") }, Action(Discard) };Rule { Matches { Domain("|sportradar.com|") }, Action(Discard) };Rule { Matches { Domain("|google.com.ua|") }, Action(Discard) };Rule { Matches { Domain("|t1cloud.com|") }, Action(Discard) };Rule { Matches { Domain("|perl.org|") }, Action(Discard) };Rule { Matches { Domain("|drctcldfa.com|") }, Action(Discard) };Rule { Matches { Domain("|fifa.com|") }, Action(Discard) };Rule { Matches { Domain("|miwifi.com|") }, Action(Discard) };Rule { Matches { Domain("|just-eat.com|") }, Action(Discard) };Rule { Matches { Domain("|ipredictive.com|") }, Action(Discard) };Rule { Matches { Domain("|codecanyon.net|") }, Action(Discard) };Rule { Matches { Domain("|mgtv.com|") }, Action(Discard) };Rule { Matches { Domain("|screenrant.com|") }, Action(Discard) };Rule { Matches { Domain("|uc.cn|") }, Action(Discard) };Rule { Matches { Domain("|aws.dev|") }, Action(Discard) };Rule { Matches { Domain("|agemys.net|") }, Action(Discard) };Rule { Matches { Domain("|sbb.ch|") }, Action(Discard) };Rule { Matches { Domain("|orcid.org|") }, Action(Discard) };Rule { Matches { Domain("|simpli.fi|") }, Action(Discard) };Rule { Matches { Domain("|coingecko.com|") }, Action(Discard) };Rule { Matches { Domain("|asurascans.com|") }, Action(Discard) };Rule { Matches { Domain("|hdfc.com|") }, Action(Discard) };Rule { Matches { Domain("|revopush.com|") }, Action(Discard) };Rule { Matches { Domain("|smugmug.com|") }, Action(Discard) };Rule { Matches { Domain("|newegg.com|") }, Action(Discard) };Rule { Matches { Domain("|consumerreports.org|") }, Action(Discard) };Rule { Matches { Domain("|git-scm.com|") }, Action(Discard) };Rule { Matches { Domain("|yximgs.com|") }, Action(Discard) };Rule { Matches { Domain("|meetme.com|") }, Action(Discard) };Rule { Matches { Domain("|philips.com|") }, Action(Discard) };Rule { Matches { Domain("|cell.com|") }, Action(Discard) };Rule { Matches { Domain("|orange.fr|") }, Action(Discard) };Rule { Matches { Domain("|playrix.com|") }, Action(Discard) };Rule { Matches { Domain("|myfitnesspal.com|") }, Action(Discard) };Rule { Matches { Domain("|nelreports.net|") }, Action(Discard) };Rule { Matches { Domain("|usgovcloudapp.net|") }, Action(Discard) };Rule { Matches { Domain("|theregister.com|") }, Action(Discard) };Rule { Matches { Domain("|mnw.cn|") }, Action(Discard) };Rule { Matches { Domain("|bitrixphone.com|") }, Action(Discard) };Rule { Matches { Domain("|weiyun.com|") }, Action(Discard) };Rule { Matches { Domain("|is.gd|") }, Action(Discard) };Rule { Matches { Domain("|cosmopolitan.com|") }, Action(Discard) };Rule { Matches { Domain("|5ch.net|") }, Action(Discard) };Rule { Matches { Domain("|voanews.com|") }, Action(Discard) };Rule { Matches { Domain("|gtld.biz|") }, Action(Discard) };Rule { Matches { Domain("|sendbird.com|") }, Action(Discard) };Rule { Matches { Domain("|esquire.com|") }, Action(Discard) };Rule { Matches { Domain("|atomile.com|") }, Action(Discard) };Rule { Matches { Domain("|slickdeals.net|") }, Action(Discard) };Rule { Matches { Domain("|olx.pl|") }, Action(Discard) };Rule { Matches { Domain("|sba.gov|") }, Action(Discard) };Rule { Matches { Domain("|elastic.co|") }, Action(Discard) };Rule { Matches { Domain("|medscape.com|") }, Action(Discard) };Rule { Matches { Domain("|vogue.com|") }, Action(Discard) };Rule { Matches { Domain("|wondershare.com|") }, Action(Discard) };Rule { Matches { Domain("|olevod.com|") }, Action(Discard) };Rule { Matches { Domain("|dns.br|") }, Action(Discard) };Rule { Matches { Domain("|cloudconvert.com|") }, Action(Discard) };Rule { Matches { Domain("|unam.mx|") }, Action(Discard) };Rule { Matches { Domain("|custhelp.com|") }, Action(Discard) };Rule { Matches { Domain("|sbis.ru|") }, Action(Discard) };Rule { Matches { Domain("|sinaimg.cn|") }, Action(Discard) };Rule { Matches { Domain("|coreservers.uk|") }, Action(Discard) };Rule { Matches { Domain("|dmoz.org|") }, Action(Discard) };Rule { Matches { Domain("|shawcable.net|") }, Action(Discard) };Rule { Matches { Domain("|td.com|") }, Action(Discard) };Rule { Matches { Domain("|mgid.com|") }, Action(Discard) };Rule { Matches { Domain("|delta.com|") }, Action(Discard) };Rule { Matches { Domain("|ucsb.edu|") }, Action(Discard) };Rule { Matches { Domain("|indiamart.com|") }, Action(Discard) };Rule { Matches { Domain("|cancer.gov|") }, Action(Discard) };Rule { Matches { Domain("|bunkr.ru|") }, Action(Discard) };Rule { Matches { Domain("|russianpost.ru|") }, Action(Discard) };Rule { Matches { Domain("|over-blog.com|") }, Action(Discard) };Rule { Matches { Domain("|awmdm.com|") }, Action(Discard) };Rule { Matches { Domain("|proquest.com|") }, Action(Discard) };Rule { Matches { Domain("|pchome.com.tw|") }, Action(Discard) };Rule { Matches { Domain("|allrecipes.com|") }, Action(Discard) };Rule { Matches { Domain("|mparticle.com|") }, Action(Discard) };Rule { Matches { Domain("|blackboard.com|") }, Action(Discard) };Rule { Matches { Domain("|11467.com|") }, Action(Discard) };Rule { Matches { Domain("|ioam.de|") }, Action(Discard) };Rule { Matches { Domain("|naver.jp|") }, Action(Discard) };Rule { Matches { Domain("|faqs.org|") }, Action(Discard) };Rule { Matches { Domain("|ihg.com|") }, Action(Discard) };Rule { Matches { Domain("|ncsu.edu|") }, Action(Discard) };Rule { Matches { Domain("|wscdns.com|") }, Action(Discard) };Rule { Matches { Domain("|g.co|") }, Action(Discard) };Rule { Matches { Domain("|rs6.net|") }, Action(Discard) };Rule { Matches { Domain("|kontur.ru|") }, Action(Discard) };Rule { Matches { Domain("|your-server.de|") }, Action(Discard) };Rule { Matches { Domain("|accor.com|") }, Action(Discard) };Rule { Matches { Domain("|wustl.edu|") }, Action(Discard) };Rule { Matches { Domain("|ryanair.com|") }, Action(Discard) };Rule { Matches { Domain("|tmz.com|") }, Action(Discard) };Rule { Matches { Domain("|pornpics.com|") }, Action(Discard) };Rule { Matches { Domain("|a2hosting.com|") }, Action(Discard) };Rule { Matches { Domain("|verywellmind.com|") }, Action(Discard) };Rule { Matches { Domain("|symphony.com|") }, Action(Discard) };Rule { Matches { Domain("|douyincdn.com|") }, Action(Discard) };Rule { Matches { Domain("|w55c.net|") }, Action(Discard) };Rule { Matches { Domain("|uscis.gov|") }, Action(Discard) };Rule { Matches { Domain("|500px.com|") }, Action(Discard) };Rule { Matches { Domain("|lg.com|") }, Action(Discard) };Rule { Matches { Domain("|carfax.com|") }, Action(Discard) };Rule { Matches { Domain("|smartsheet.com|") }, Action(Discard) };Rule { Matches { Domain("|jimdofree.com|") }, Action(Discard) };Rule { Matches { Domain("|xincache.com|") }, Action(Discard) };Rule { Matches { Domain("|cbssports.com|") }, Action(Discard) };Rule { Matches { Domain("|spamcop.net|") }, Action(Discard) };Rule { Matches { Domain("|tdnsv6.com|") }, Action(Discard) };Rule { Matches { Domain("|dynamicnetworkservices.net|") }, Action(Discard) };Rule { Matches { Domain("|pastebin.com|") }, Action(Discard) };Rule { Matches { Domain("|garant.ru|") }, Action(Discard) };Rule { Matches { Domain("|nerdwallet.com|") }, Action(Discard) };Rule { Matches { Domain("|emojipedia.org|") }, Action(Discard) };Rule { Matches { Domain("|ovo.id|") }, Action(Discard) };Rule { Matches { Domain("|pubnub.com|") }, Action(Discard) };Rule { Matches { Domain("|discogs.com|") }, Action(Discard) };Rule { Matches { Domain("|pinduoduo.com|") }, Action(Discard) };Rule { Matches { Domain("|salon.com|") }, Action(Discard) };Rule { Matches { Domain("|broadcom.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-37.org|") }, Action(Discard) };Rule { Matches { Domain("|rsc.org|") }, Action(Discard) };Rule { Matches { Domain("|gotinder.com|") }, Action(Discard) };Rule { Matches { Domain("|windy.com|") }, Action(Discard) };Rule { Matches { Domain("|ecosia.org|") }, Action(Discard) };Rule { Matches { Domain("|hoyoverse.com|") }, Action(Discard) };Rule { Matches { Domain("|tplinkcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|tufts.edu|") }, Action(Discard) };Rule { Matches { Domain("|freelancer.com|") }, Action(Discard) };Rule { Matches { Domain("|vuejs.org|") }, Action(Discard) };Rule { Matches { Domain("|dood.yt|") }, Action(Discard) };Rule { Matches { Domain("|mantraonline.com|") }, Action(Discard) };Rule { Matches { Domain("|goodhousekeeping.com|") }, Action(Discard) };Rule { Matches { Domain("|youzan.com|") }, Action(Discard) };Rule { Matches { Domain("|segment.com|") }, Action(Discard) };Rule { Matches { Domain("|narod.ru|") }, Action(Discard) };Rule { Matches { Domain("|17track.net|") }, Action(Discard) };Rule { Matches { Domain("|tenable.com|") }, Action(Discard) };Rule { Matches { Domain("|xundns.com|") }, Action(Discard) };Rule { Matches { Domain("|ebay-kleinanzeigen.de|") }, Action(Discard) };Rule { Matches { Domain("|thehindu.com|") }, Action(Discard) };Rule { Matches { Domain("|yutex.ru|") }, Action(Discard) };Rule { Matches { Domain("|zaobao.com|") }, Action(Discard) };Rule { Matches { Domain("|brightspace.com|") }, Action(Discard) };Rule { Matches { Domain("|note.com|") }, Action(Discard) };Rule { Matches { Domain("|miibeian.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|hanime1.me|") }, Action(Discard) };Rule { Matches { Domain("|firefox.com|") }, Action(Discard) };Rule { Matches { Domain("|gracenote.com|") }, Action(Discard) };Rule { Matches { Domain("|wac-msedge.net|") }, Action(Discard) };Rule { Matches { Domain("|lonelyplanet.com|") }, Action(Discard) };Rule { Matches { Domain("|segmentfault.com|") }, Action(Discard) };Rule { Matches { Domain("|gatech.edu|") }, Action(Discard) };Rule { Matches { Domain("|mncdn.com|") }, Action(Discard) };Rule { Matches { Domain("|pixnet.net|") }, Action(Discard) };Rule { Matches { Domain("|kp.ru|") }, Action(Discard) };Rule { Matches { Domain("|ow.ly|") }, Action(Discard) };Rule { Matches { Domain("|surfnet.nl|") }, Action(Discard) };Rule { Matches { Domain("|panasonic.com|") }, Action(Discard) };Rule { Matches { Domain("|icbc.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|streamable.com|") }, Action(Discard) };Rule { Matches { Domain("|sz.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|gs.com|") }, Action(Discard) };Rule { Matches { Domain("|189.cn|") }, Action(Discard) };Rule { Matches { Domain("|skyeng.link|") }, Action(Discard) };Rule { Matches { Domain("|hover.com|") }, Action(Discard) };Rule { Matches { Domain("|dkinternal.com|") }, Action(Discard) };Rule { Matches { Domain("|schneier.com|") }, Action(Discard) };Rule { Matches { Domain("|ucoz.net|") }, Action(Discard) };Rule { Matches { Domain("|wikiwiki.jp|") }, Action(Discard) };Rule { Matches { Domain("|pitt.edu|") }, Action(Discard) };Rule { Matches { Domain("|news.cn|") }, Action(Discard) };Rule { Matches { Domain("|rockstargames.com|") }, Action(Discard) };Rule { Matches { Domain("|flashtalking.com|") }, Action(Discard) };Rule { Matches { Domain("|123pan.com|") }, Action(Discard) };Rule { Matches { Domain("|noonoo26.tv|") }, Action(Discard) };Rule { Matches { Domain("|askubuntu.com|") }, Action(Discard) };Rule { Matches { Domain("|tribalfusion.com|") }, Action(Discard) };Rule { Matches { Domain("|prmsrvs.com|") }, Action(Discard) };Rule { Matches { Domain("|bostonglobe.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-16.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|edx.org|") }, Action(Discard) };Rule { Matches { Domain("|ezvizlife.com|") }, Action(Discard) };Rule { Matches { Domain("|justwatch.com|") }, Action(Discard) };Rule { Matches { Domain("|juejin.cn|") }, Action(Discard) };Rule { Matches { Domain("|digital.com|") }, Action(Discard) };Rule { Matches { Domain("|vanityfair.com|") }, Action(Discard) };Rule { Matches { Domain("|yumpu.com|") }, Action(Discard) };Rule { Matches { Domain("|redgifs.com|") }, Action(Discard) };Rule { Matches { Domain("|vrbo.com|") }, Action(Discard) };Rule { Matches { Domain("|sonobi.com|") }, Action(Discard) };Rule { Matches { Domain("|fang.com|") }, Action(Discard) };Rule { Matches { Domain("|teacherspayteachers.com|") }, Action(Discard) };Rule { Matches { Domain("|billboard.com|") }, Action(Discard) };Rule { Matches { Domain("|blog.google|") }, Action(Discard) };Rule { Matches { Domain("|datadome.co|") }, Action(Discard) };Rule { Matches { Domain("|discord.media|") }, Action(Discard) };Rule { Matches { Domain("|bhphotovideo.com|") }, Action(Discard) };Rule { Matches { Domain("|undp.org|") }, Action(Discard) };Rule { Matches { Domain("|habr.com|") }, Action(Discard) };Rule { Matches { Domain("|vt.edu|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-32.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|court.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|thestar.com|") }, Action(Discard) };Rule { Matches { Domain("|ampproject.net|") }, Action(Discard) };Rule { Matches { Domain("|doorblog.jp|") }, Action(Discard) };Rule { Matches { Domain("|onmicrosoft.com|") }, Action(Discard) };Rule { Matches { Domain("|edgecastdns.net|") }, Action(Discard) };Rule { Matches { Domain("|typekit.com|") }, Action(Discard) };Rule { Matches { Domain("|sportskeeda.com|") }, Action(Discard) };Rule { Matches { Domain("|nic.do|") }, Action(Discard) };Rule { Matches { Domain("|france24.com|") }, Action(Discard) };Rule { Matches { Domain("|opensource.org|") }, Action(Discard) };Rule { Matches { Domain("|rr.com|") }, Action(Discard) };Rule { Matches { Domain("|aol.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|byjus.com|") }, Action(Discard) };Rule { Matches { Domain("|axios.com|") }, Action(Discard) };Rule { Matches { Domain("|prweb.com|") }, Action(Discard) };Rule { Matches { Domain("|tenor.com|") }, Action(Discard) };Rule { Matches { Domain("|tampermonkey.net|") }, Action(Discard) };Rule { Matches { Domain("|ilive.cn|") }, Action(Discard) };Rule { Matches { Domain("|livechatinc.com|") }, Action(Discard) };Rule { Matches { Domain("|zend.com|") }, Action(Discard) };Rule { Matches { Domain("|infomaniak.com|") }, Action(Discard) };Rule { Matches { Domain("|gitbook.io|") }, Action(Discard) };Rule { Matches { Domain("|china.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|screenconnect.com|") }, Action(Discard) };Rule { Matches { Domain("|rediff.com|") }, Action(Discard) };Rule { Matches { Domain("|scoop.it|") }, Action(Discard) };Rule { Matches { Domain("|dns.jp|") }, Action(Discard) };Rule { Matches { Domain("|azure-dns.info|") }, Action(Discard) };Rule { Matches { Domain("|anahitagirted.uno|") }, Action(Discard) };Rule { Matches { Domain("|bt.com|") }, Action(Discard) };Rule { Matches { Domain("|adrta.com|") }, Action(Discard) };Rule { Matches { Domain("|mapbox.com|") }, Action(Discard) };Rule { Matches { Domain("|actionverb.com|") }, Action(Discard) };Rule { Matches { Domain("|com.ru|") }, Action(Discard) };Rule { Matches { Domain("|corriere.it|") }, Action(Discard) };Rule { Matches { Domain("|gazeta.ru|") }, Action(Discard) };Rule { Matches { Domain("|hqporner.com|") }, Action(Discard) };Rule { Matches { Domain("|tass.ru|") }, Action(Discard) };Rule { Matches { Domain("|ssacdn.com|") }, Action(Discard) };Rule { Matches { Domain("|zxxk.com|") }, Action(Discard) };Rule { Matches { Domain("|ihc.ru|") }, Action(Discard) };Rule { Matches { Domain("|dev.to|") }, Action(Discard) };Rule { Matches { Domain("|ovh.com|") }, Action(Discard) };Rule { Matches { Domain("|libbyshelf.com|") }, Action(Discard) };Rule { Matches { Domain("|1fichier.com|") }, Action(Discard) };Rule { Matches { Domain("|boredpanda.com|") }, Action(Discard) };Rule { Matches { Domain("|evergage.com|") }, Action(Discard) };Rule { Matches { Domain("|mozilla.net|") }, Action(Discard) };Rule { Matches { Domain("|shipt.com|") }, Action(Discard) };Rule { Matches { Domain("|paypal.me|") }, Action(Discard) };Rule { Matches { Domain("|depositphotos.com|") }, Action(Discard) };Rule { Matches { Domain("|eurodns.com|") }, Action(Discard) };Rule { Matches { Domain("|braun.com|") }, Action(Discard) };Rule { Matches { Domain("|tutorialspoint.com|") }, Action(Discard) };Rule { Matches { Domain("|toyota.com|") }, Action(Discard) };Rule { Matches { Domain("|bytedns1.com|") }, Action(Discard) };Rule { Matches { Domain("|icq.com|") }, Action(Discard) };Rule { Matches { Domain("|crazyegg.com|") }, Action(Discard) };Rule { Matches { Domain("|serverdata.net|") }, Action(Discard) };Rule { Matches { Domain("|haxx.se|") }, Action(Discard) };Rule { Matches { Domain("|wistia.com|") }, Action(Discard) };Rule { Matches { Domain("|novell.com|") }, Action(Discard) };Rule { Matches { Domain("|myraidbox.de|") }, Action(Discard) };Rule { Matches { Domain("|vkuseraudio.net|") }, Action(Discard) };Rule { Matches { Domain("|tdnsv5.com|") }, Action(Discard) };Rule { Matches { Domain("|prodgdc.com|") }, Action(Discard) };Rule { Matches { Domain("|samsungknox.com|") }, Action(Discard) };Rule { Matches { Domain("|dmm.com|") }, Action(Discard) };Rule { Matches { Domain("|ilo.org|") }, Action(Discard) };Rule { Matches { Domain("|taleo.net|") }, Action(Discard) };Rule { Matches { Domain("|sage.com|") }, Action(Discard) };Rule { Matches { Domain("|brightcove.com|") }, Action(Discard) };Rule { Matches { Domain("|gamerant.com|") }, Action(Discard) };Rule { Matches { Domain("|jitsi.net|") }, Action(Discard) };Rule { Matches { Domain("|themegrill.com|") }, Action(Discard) };Rule { Matches { Domain("|page.link|") }, Action(Discard) };Rule { Matches { Domain("|timeout.com|") }, Action(Discard) };Rule { Matches { Domain("|discover.com|") }, Action(Discard) };Rule { Matches { Domain("|surbl.org|") }, Action(Discard) };Rule { Matches { Domain("|cpan.org|") }, Action(Discard) };Rule { Matches { Domain("|cashstar.com|") }, Action(Discard) };Rule { Matches { Domain("|eventbrite.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|pruffme.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-56.net|") }, Action(Discard) };Rule { Matches { Domain("|upornia.com|") }, Action(Discard) };Rule { Matches { Domain("|asahi.com|") }, Action(Discard) };Rule { Matches { Domain("|neilpatel.com|") }, Action(Discard) };Rule { Matches { Domain("|spot.im|") }, Action(Discard) };Rule { Matches { Domain("|unl.edu|") }, Action(Discard) };Rule { Matches { Domain("|messagebird.io|") }, Action(Discard) };Rule { Matches { Domain("|58.com|") }, Action(Discard) };Rule { Matches { Domain("|qianxun.com|") }, Action(Discard) };Rule { Matches { Domain("|rezka.ag|") }, Action(Discard) };Rule { Matches { Domain("|biglobe.ne.jp|") }, Action(Discard) };Rule { Matches { Domain("|coe.int|") }, Action(Discard) };Rule { Matches { Domain("|news18.com|") }, Action(Discard) };Rule { Matches { Domain("|6080dy2.com|") }, Action(Discard) };Rule { Matches { Domain("|cygwin.com|") }, Action(Discard) };Rule { Matches { Domain("|softpedia.com|") }, Action(Discard) };Rule { Matches { Domain("|scdn.co|") }, Action(Discard) };Rule { Matches { Domain("|ti.com|") }, Action(Discard) };Rule { Matches { Domain("|code42.com|") }, Action(Discard) };Rule { Matches { Domain("|pcworld.com|") }, Action(Discard) };Rule { Matches { Domain("|rule34video.com|") }, Action(Discard) };Rule { Matches { Domain("|beijing.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|yolasite.com|") }, Action(Discard) };Rule { Matches { Domain("|tdameritrade.com|") }, Action(Discard) };Rule { Matches { Domain("|shopifykloud.com|") }, Action(Discard) };Rule { Matches { Domain("|polygon.com|") }, Action(Discard) };Rule { Matches { Domain("|9anime.to|") }, Action(Discard) };Rule { Matches { Domain("|kakaku.com|") }, Action(Discard) };Rule { Matches { Domain("|curtin.edu.au|") }, Action(Discard) };Rule { Matches { Domain("|pdfdrive.com|") }, Action(Discard) };Rule { Matches { Domain("|fotostrana.ru|") }, Action(Discard) };Rule { Matches { Domain("|identrust.com|") }, Action(Discard) };Rule { Matches { Domain("|hopkinsmedicine.org|") }, Action(Discard) };Rule { Matches { Domain("|rutube.ru|") }, Action(Discard) };Rule { Matches { Domain("|9game.cn|") }, Action(Discard) };Rule { Matches { Domain("|monikerdns.net|") }, Action(Discard) };Rule { Matches { Domain("|pixhost.to|") }, Action(Discard) };Rule { Matches { Domain("|hawaii.edu|") }, Action(Discard) };Rule { Matches { Domain("|bankrate.com|") }, Action(Discard) };Rule { Matches { Domain("|anjuke.com|") }, Action(Discard) };Rule { Matches { Domain("|tvtropes.org|") }, Action(Discard) };Rule { Matches { Domain("|ctvnews.ca|") }, Action(Discard) };Rule { Matches { Domain("|pornzog.com|") }, Action(Discard) };Rule { Matches { Domain("|like.video|") }, Action(Discard) };Rule { Matches { Domain("|eroterest.net|") }, Action(Discard) };Rule { Matches { Domain("|yahoo.net|") }, Action(Discard) };Rule { Matches { Domain("|eurekalert.org|") }, Action(Discard) };Rule { Matches { Domain("|seattletimes.com|") }, Action(Discard) };Rule { Matches { Domain("|shareasale.com|") }, Action(Discard) };Rule { Matches { Domain("|mpg.de|") }, Action(Discard) };Rule { Matches { Domain("|oribi.io|") }, Action(Discard) };Rule { Matches { Domain("|standard.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|weborama.fr|") }, Action(Discard) };Rule { Matches { Domain("|patch.com|") }, Action(Discard) };Rule { Matches { Domain("|betweendigital.com|") }, Action(Discard) };Rule { Matches { Domain("|msi.com|") }, Action(Discard) };Rule { Matches { Domain("|uva.nl|") }, Action(Discard) };Rule { Matches { Domain("|wsp.com|") }, Action(Discard) };Rule { Matches { Domain("|impress.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|irctc.co.in|") }, Action(Discard) };Rule { Matches { Domain("|bustle.com|") }, Action(Discard) };Rule { Matches { Domain("|javatpoint.com|") }, Action(Discard) };Rule { Matches { Domain("|smallseotools.com|") }, Action(Discard) };Rule { Matches { Domain("|rtcfront.net|") }, Action(Discard) };Rule { Matches { Domain("|adobedc.net|") }, Action(Discard) };Rule { Matches { Domain("|venmo.com|") }, Action(Discard) };Rule { Matches { Domain("|azure-dns.org|") }, Action(Discard) };Rule { Matches { Domain("|globalnews.ca|") }, Action(Discard) };Rule { Matches { Domain("|ipcc.ch|") }, Action(Discard) };Rule { Matches { Domain("|infomaniak.ch|") }, Action(Discard) };Rule { Matches { Domain("|ttnet.net|") }, Action(Discard) };Rule { Matches { Domain("|rg.ru|") }, Action(Discard) };Rule { Matches { Domain("|hindawi.com|") }, Action(Discard) };Rule { Matches { Domain("|fitbit.com|") }, Action(Discard) };Rule { Matches { Domain("|smdyy.cc|") }, Action(Discard) };Rule { Matches { Domain("|micpn.com|") }, Action(Discard) };Rule { Matches { Domain("|reflected.net|") }, Action(Discard) };Rule { Matches { Domain("|svc.ms|") }, Action(Discard) };Rule { Matches { Domain("|virginmedia.com|") }, Action(Discard) };Rule { Matches { Domain("|okx.com|") }, Action(Discard) };Rule { Matches { Domain("|si.com|") }, Action(Discard) };Rule { Matches { Domain("|powerschool.com|") }, Action(Discard) };Rule { Matches { Domain("|gtei.net|") }, Action(Discard) };Rule { Matches { Domain("|atwiki.jp|") }, Action(Discard) };Rule { Matches { Domain("|thawte.com|") }, Action(Discard) };Rule { Matches { Domain("|tawk.to|") }, Action(Discard) };Rule { Matches { Domain("|saytechnologies.com|") }, Action(Discard) };Rule { Matches { Domain("|18comic.vip|") }, Action(Discard) };Rule { Matches { Domain("|stabletransit.com|") }, Action(Discard) };Rule { Matches { Domain("|tomshardware.com|") }, Action(Discard) };Rule { Matches { Domain("|howtogeek.com|") }, Action(Discard) };Rule { Matches { Domain("|kgslb.com|") }, Action(Discard) };Rule { Matches { Domain("|hao6v.cc|") }, Action(Discard) };Rule { Matches { Domain("|uptobox.com|") }, Action(Discard) };Rule { Matches { Domain("|joinhoney.com|") }, Action(Discard) };Rule { Matches { Domain("|colorlib.com|") }, Action(Discard) };Rule { Matches { Domain("|flightaware.com|") }, Action(Discard) };Rule { Matches { Domain("|naturalhomeliving.com.au|") }, Action(Discard) };Rule { Matches { Domain("|zdnscloud.com|") }, Action(Discard) };Rule { Matches { Domain("|flic.kr|") }, Action(Discard) };Rule { Matches { Domain("|pndsn.com|") }, Action(Discard) };Rule { Matches { Domain("|bilibili.tv|") }, Action(Discard) };Rule { Matches { Domain("|aka.ms|") }, Action(Discard) };Rule { Matches { Domain("|hdmoli.com|") }, Action(Discard) };Rule { Matches { Domain("|kargo.com|") }, Action(Discard) };Rule { Matches { Domain("|verizon.net|") }, Action(Discard) };Rule { Matches { Domain("|skimresources.com|") }, Action(Discard) };Rule { Matches { Domain("|semrush.net|") }, Action(Discard) };Rule { Matches { Domain("|huffingtonpost.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|irishtimes.com|") }, Action(Discard) };Rule { Matches { Domain("|apdcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|domru.ru|") }, Action(Discard) };Rule { Matches { Domain("|clarity.ms|") }, Action(Discard) };Rule { Matches { Domain("|adweek.com|") }, Action(Discard) };Rule { Matches { Domain("|wpastra.com|") }, Action(Discard) };Rule { Matches { Domain("|square.site|") }, Action(Discard) };Rule { Matches { Domain("|steamstatic.com|") }, Action(Discard) };Rule { Matches { Domain("|indiana.edu|") }, Action(Discard) };Rule { Matches { Domain("|microfocus.com|") }, Action(Discard) };Rule { Matches { Domain("|unrealengine.com|") }, Action(Discard) };Rule { Matches { Domain("|pochta.ru|") }, Action(Discard) };Rule { Matches { Domain("|spb.ru|") }, Action(Discard) };Rule { Matches { Domain("|ahhhhfs.com|") }, Action(Discard) };Rule { Matches { Domain("|subhd.tv|") }, Action(Discard) };Rule { Matches { Domain("|dns.eu|") }, Action(Discard) };Rule { Matches { Domain("|jpost.com|") }, Action(Discard) };Rule { Matches { Domain("|pnap.net|") }, Action(Discard) };Rule { Matches { Domain("|mookie1.com|") }, Action(Discard) };Rule { Matches { Domain("|tvinteractive.tv|") }, Action(Discard) };Rule { Matches { Domain("|bumble.com|") }, Action(Discard) };Rule { Matches { Domain("|concursolutions.com|") }, Action(Discard) };Rule { Matches { Domain("|unsw.edu.au|") }, Action(Discard) };Rule { Matches { Domain("|greenpeace.org|") }, Action(Discard) };Rule { Matches { Domain("|onetag-sys.com|") }, Action(Discard) };Rule { Matches { Domain("|liepin.com|") }, Action(Discard) };Rule { Matches { Domain("|pixlr.com|") }, Action(Discard) };Rule { Matches { Domain("|ustream.tv|") }, Action(Discard) };Rule { Matches { Domain("|nexusmods.com|") }, Action(Discard) };Rule { Matches { Domain("|lifewire.com|") }, Action(Discard) };Rule { Matches { Domain("|online.net|") }, Action(Discard) };Rule { Matches { Domain("|msecnd.net|") }, Action(Discard) };Rule { Matches { Domain("|gmarket.co.kr|") }, Action(Discard) };Rule { Matches { Domain("|coindesk.com|") }, Action(Discard) };Rule { Matches { Domain("|thomsonreuters.net|") }, Action(Discard) };Rule { Matches { Domain("|experian.com|") }, Action(Discard) };Rule { Matches { Domain("|internetdownloadmanager.com|") }, Action(Discard) };Rule { Matches { Domain("|alexa.com|") }, Action(Discard) };Rule { Matches { Domain("|a-mo.net|") }, Action(Discard) };Rule { Matches { Domain("|thenextweb.com|") }, Action(Discard) };Rule { Matches { Domain("|hostpoint.ch|") }, Action(Discard) };Rule { Matches { Domain("|urldefense.com|") }, Action(Discard) };Rule { Matches { Domain("|weatherbug.net|") }, Action(Discard) };Rule { Matches { Domain("|faa.gov|") }, Action(Discard) };Rule { Matches { Domain("|wargaming.net|") }, Action(Discard) };Rule { Matches { Domain("|miyoushe.com|") }, Action(Discard) };Rule { Matches { Domain("|sfu.ca|") }, Action(Discard) };Rule { Matches { Domain("|serveriai.lt|") }, Action(Discard) };Rule { Matches { Domain("|merlincdn.net|") }, Action(Discard) };Rule { Matches { Domain("|foxsports.com|") }, Action(Discard) };Rule { Matches { Domain("|ettdnsv.com|") }, Action(Discard) };Rule { Matches { Domain("|generatepress.com|") }, Action(Discard) };Rule { Matches { Domain("|zara.com|") }, Action(Discard) };Rule { Matches { Domain("|tesla.services|") }, Action(Discard) };Rule { Matches { Domain("|datastax.com|") }, Action(Discard) };Rule { Matches { Domain("|sprinthost.ru|") }, Action(Discard) };Rule { Matches { Domain("|ezgif.com|") }, Action(Discard) };Rule { Matches { Domain("|britishairways.com|") }, Action(Discard) };Rule { Matches { Domain("|curl.se|") }, Action(Discard) };Rule { Matches { Domain("|vanderbilt.edu|") }, Action(Discard) };Rule { Matches { Domain("|focus.de|") }, Action(Discard) };Rule { Matches { Domain("|youjizz.com|") }, Action(Discard) };Rule { Matches { Domain("|bytedance.com|") }, Action(Discard) };Rule { Matches { Domain("|leetcode.com|") }, Action(Discard) };Rule { Matches { Domain("|yourbestjournal.com|") }, Action(Discard) };Rule { Matches { Domain("|elle.com|") }, Action(Discard) };Rule { Matches { Domain("|loopia.se|") }, Action(Discard) };Rule { Matches { Domain("|hotnet.net.il|") }, Action(Discard) };Rule { Matches { Domain("|ohchr.org|") }, Action(Discard) };Rule { Matches { Domain("|wixstatic.com|") }, Action(Discard) };Rule { Matches { Domain("|onlinedown.net|") }, Action(Discard) };Rule { Matches { Domain("|samplicio.us|") }, Action(Discard) };Rule { Matches { Domain("|processon.com|") }, Action(Discard) };Rule { Matches { Domain("|uefa.com|") }, Action(Discard) };Rule { Matches { Domain("|gitee.io|") }, Action(Discard) };Rule { Matches { Domain("|uisp.com|") }, Action(Discard) };Rule { Matches { Domain("|xfantazy.com|") }, Action(Discard) };Rule { Matches { Domain("|quantcount.com|") }, Action(Discard) };Rule { Matches { Domain("|uiowa.edu|") }, Action(Discard) };Rule { Matches { Domain("|skyrock.net|") }, Action(Discard) };Rule { Matches { Domain("|sc-prod.net|") }, Action(Discard) };Rule { Matches { Domain("|ownit.se|") }, Action(Discard) };Rule { Matches { Domain("|n-able.com|") }, Action(Discard) };Rule { Matches { Domain("|pippio.com|") }, Action(Discard) };Rule { Matches { Domain("|unpkg.com|") }, Action(Discard) };Rule { Matches { Domain("|hubspotemail.net|") }, Action(Discard) };Rule { Matches { Domain("|lg.co.kr|") }, Action(Discard) };Rule { Matches { Domain("|zeit.de|") }, Action(Discard) };Rule { Matches { Domain("|chinanews.com|") }, Action(Discard) };Rule { Matches { Domain("|livedoor.com|") }, Action(Discard) };Rule { Matches { Domain("|fliphtml5.com|") }, Action(Discard) };Rule { Matches { Domain("|walgreens.com|") }, Action(Discard) };Rule { Matches { Domain("|deepintent.com|") }, Action(Discard) };Rule { Matches { Domain("|japanpost.jp|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-60.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|headandshoulders.com|") }, Action(Discard) };Rule { Matches { Domain("|answers.com|") }, Action(Discard) };Rule { Matches { Domain("|towardsdatascience.com|") }, Action(Discard) };Rule { Matches { Domain("|ksyunv5.com|") }, Action(Discard) };Rule { Matches { Domain("|highwebmedia.com|") }, Action(Discard) };Rule { Matches { Domain("|caniuse.com|") }, Action(Discard) };Rule { Matches { Domain("|kpmg.com|") }, Action(Discard) };Rule { Matches { Domain("|yoojia.com|") }, Action(Discard) };Rule { Matches { Domain("|dogdrip.net|") }, Action(Discard) };Rule { Matches { Domain("|wipo.int|") }, Action(Discard) };Rule { Matches { Domain("|centralnic.net|") }, Action(Discard) };Rule { Matches { Domain("|openresolve.rs|") }, Action(Discard) };Rule { Matches { Domain("|ovscdns.net|") }, Action(Discard) };Rule { Matches { Domain("|trip.com|") }, Action(Discard) };Rule { Matches { Domain("|126.com|") }, Action(Discard) };Rule { Matches { Domain("|hosteurope.de|") }, Action(Discard) };Rule { Matches { Domain("|tradingeconomics.com|") }, Action(Discard) };Rule { Matches { Domain("|staticflickr.com|") }, Action(Discard) };Rule { Matches { Domain("|fema.gov|") }, Action(Discard) };Rule { Matches { Domain("|rkdms.com|") }, Action(Discard) };Rule { Matches { Domain("|mendixcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|webflow.io|") }, Action(Discard) };Rule { Matches { Domain("|lectortmo.com|") }, Action(Discard) };Rule { Matches { Domain("|caltech.edu|") }, Action(Discard) };Rule { Matches { Domain("|trutv.com|") }, Action(Discard) };Rule { Matches { Domain("|nag.ru|") }, Action(Discard) };Rule { Matches { Domain("|buzzfeednews.com|") }, Action(Discard) };Rule { Matches { Domain("|tealiumiq.com|") }, Action(Discard) };Rule { Matches { Domain("|mercurynews.com|") }, Action(Discard) };Rule { Matches { Domain("|apple-cloudkit.com|") }, Action(Discard) };Rule { Matches { Domain("|ylwt33.com|") }, Action(Discard) };Rule { Matches { Domain("|starmakerstudios.com|") }, Action(Discard) };Rule { Matches { Domain("|activehosted.com|") }, Action(Discard) };Rule { Matches { Domain("|cvent.com|") }, Action(Discard) };Rule { Matches { Domain("|umass.edu|") }, Action(Discard) };Rule { Matches { Domain("|shutterfly.com|") }, Action(Discard) };Rule { Matches { Domain("|icio.us|") }, Action(Discard) };Rule { Matches { Domain("|oregonstate.edu|") }, Action(Discard) };Rule { Matches { Domain("|vidhub.top|") }, Action(Discard) };Rule { Matches { Domain("|opera.technology|") }, Action(Discard) };Rule { Matches { Domain("|findlaw.com|") }, Action(Discard) };Rule { Matches { Domain("|thousandeyes.com|") }, Action(Discard) };Rule { Matches { Domain("|wp.me|") }, Action(Discard) };Rule { Matches { Domain("|ccc.de|") }, Action(Discard) };Rule { Matches { Domain("|snopes.com|") }, Action(Discard) };Rule { Matches { Domain("|nurd.com|") }, Action(Discard) };Rule { Matches { Domain("|meizu.com|") }, Action(Discard) };Rule { Matches { Domain("|rubika.ir|") }, Action(Discard) };Rule { Matches { Domain("|shopifycloud.com|") }, Action(Discard) };Rule { Matches { Domain("|adnxs.net|") }, Action(Discard) };Rule { Matches { Domain("|iloveimg.com|") }, Action(Discard) };Rule { Matches { Domain("|bale.ai|") }, Action(Discard) };Rule { Matches { Domain("|worldometers.info|") }, Action(Discard) };Rule { Matches { Domain("|speedtest.cn|") }, Action(Discard) };Rule { Matches { Domain("|nobelprize.org|") }, Action(Discard) };Rule { Matches { Domain("|1password.com|") }, Action(Discard) };Rule { Matches { Domain("|pusher.io|") }, Action(Discard) };Rule { Matches { Domain("|honeywell.com|") }, Action(Discard) };Rule { Matches { Domain("|computerworld.com|") }, Action(Discard) };Rule { Matches { Domain("|gwu.edu|") }, Action(Discard) };Rule { Matches { Domain("|bt.net|") }, Action(Discard) };Rule { Matches { Domain("|liveabout.com|") }, Action(Discard) };Rule { Matches { Domain("|ke.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-36.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|chiphell.com|") }, Action(Discard) };Rule { Matches { Domain("|google.az|") }, Action(Discard) };Rule { Matches { Domain("|1drv.ms|") }, Action(Discard) };Rule { Matches { Domain("|hrblock.com|") }, Action(Discard) };Rule { Matches { Domain("|comodo.com|") }, Action(Discard) };Rule { Matches { Domain("|aljazeera.net|") }, Action(Discard) };Rule { Matches { Domain("|mangadex.org|") }, Action(Discard) };Rule { Matches { Domain("|cymru.com|") }, Action(Discard) };Rule { Matches { Domain("|ctmail.com|") }, Action(Discard) };Rule { Matches { Domain("|goal.com|") }, Action(Discard) };Rule { Matches { Domain("|cafe24.com|") }, Action(Discard) };Rule { Matches { Domain("|coursehero.com|") }, Action(Discard) };Rule { Matches { Domain("|amazon.sa|") }, Action(Discard) };Rule { Matches { Domain("|ps.kz|") }, Action(Discard) };Rule { Matches { Domain("|nordstrom.com|") }, Action(Discard) };Rule { Matches { Domain("|detik.com|") }, Action(Discard) };Rule { Matches { Domain("|pdffiller.com|") }, Action(Discard) };Rule { Matches { Domain("|ventraip.net.au|") }, Action(Discard) };Rule { Matches { Domain("|recaptcha.net|") }, Action(Discard) };Rule { Matches { Domain("|getgo.com|") }, Action(Discard) };Rule { Matches { Domain("|spectrum.net|") }, Action(Discard) };Rule { Matches { Domain("|hoster.ru|") }, Action(Discard) };Rule { Matches { Domain("|mnscorp.net|") }, Action(Discard) };Rule { Matches { Domain("|bitmoji.com|") }, Action(Discard) };Rule { Matches { Domain("|pananames.com|") }, Action(Discard) };Rule { Matches { Domain("|skysports.com|") }, Action(Discard) };Rule { Matches { Domain("|mattermost.com|") }, Action(Discard) };Rule { Matches { Domain("|livemint.com|") }, Action(Discard) };Rule { Matches { Domain("|cia.gov|") }, Action(Discard) };Rule { Matches { Domain("|btloader.com|") }, Action(Discard) };Rule { Matches { Domain("|searchengineland.com|") }, Action(Discard) };Rule { Matches { Domain("|secb2b.com|") }, Action(Discard) };Rule { Matches { Domain("|onelogin.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-55.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|space.com|") }, Action(Discard) };Rule { Matches { Domain("|ucweb.com|") }, Action(Discard) };Rule { Matches { Domain("|hubpages.com|") }, Action(Discard) };Rule { Matches { Domain("|rightmove.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|dynamic-dns.net|") }, Action(Discard) };Rule { Matches { Domain("|clinicaltrials.gov|") }, Action(Discard) };Rule { Matches { Domain("|iubenda.com|") }, Action(Discard) };Rule { Matches { Domain("|huya.com|") }, Action(Discard) };Rule { Matches { Domain("|iwara.tv|") }, Action(Discard) };Rule { Matches { Domain("|prestashop.com|") }, Action(Discard) };Rule { Matches { Domain("|informer.com|") }, Action(Discard) };Rule { Matches { Domain("|uga.edu|") }, Action(Discard) };Rule { Matches { Domain("|newtoki215.com|") }, Action(Discard) };Rule { Matches { Domain("|workers.dev|") }, Action(Discard) };Rule { Matches { Domain("|spotify.net|") }, Action(Discard) };Rule { Matches { Domain("|sendinblue.com|") }, Action(Discard) };Rule { Matches { Domain("|brown.edu|") }, Action(Discard) };Rule { Matches { Domain("|ovhcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|jav.guru|") }, Action(Discard) };Rule { Matches { Domain("|themoviedb.org|") }, Action(Discard) };Rule { Matches { Domain("|intentiq.com|") }, Action(Discard) };Rule { Matches { Domain("|msnbc.com|") }, Action(Discard) };Rule { Matches { Domain("|ap.org|") }, Action(Discard) };Rule { Matches { Domain("|sc-static.net|") }, Action(Discard) };Rule { Matches { Domain("|ancestry.com|") }, Action(Discard) };Rule { Matches { Domain("|xlivrdr.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-52.com|") }, Action(Discard) };Rule { Matches { Domain("|hotmail.com|") }, Action(Discard) };Rule { Matches { Domain("|mailjet.com|") }, Action(Discard) };Rule { Matches { Domain("|xserver.jp|") }, Action(Discard) };Rule { Matches { Domain("|uscourts.gov|") }, Action(Discard) };Rule { Matches { Domain("|pavietnam.vn|") }, Action(Discard) };Rule { Matches { Domain("|gainsightcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|bttrack.com|") }, Action(Discard) };Rule { Matches { Domain("|fanbox.cc|") }, Action(Discard) };Rule { Matches { Domain("|blendlabs.com|") }, Action(Discard) };Rule { Matches { Domain("|robinhood.com|") }, Action(Discard) };Rule { Matches { Domain("|anxia.com|") }, Action(Discard) };Rule { Matches { Domain("|volcfcdndvs.com|") }, Action(Discard) };Rule { Matches { Domain("|hrw.org|") }, Action(Discard) };Rule { Matches { Domain("|segment.io|") }, Action(Discard) };Rule { Matches { Domain("|faphouse.com|") }, Action(Discard) };Rule { Matches { Domain("|surriel.com|") }, Action(Discard) };Rule { Matches { Domain("|waze.com|") }, Action(Discard) };Rule { Matches { Domain("|afraid.org|") }, Action(Discard) };Rule { Matches { Domain("|icims.com|") }, Action(Discard) };Rule { Matches { Domain("|kroger.com|") }, Action(Discard) };Rule { Matches { Domain("|lxdns.com|") }, Action(Discard) };Rule { Matches { Domain("|imagetwist.com|") }, Action(Discard) };Rule { Matches { Domain("|blackberry.com|") }, Action(Discard) };Rule { Matches { Domain("|adyen.com|") }, Action(Discard) };Rule { Matches { Domain("|padlet.com|") }, Action(Discard) };Rule { Matches { Domain("|openldap.org|") }, Action(Discard) };Rule { Matches { Domain("|lever.co|") }, Action(Discard) };Rule { Matches { Domain("|schoology.com|") }, Action(Discard) };Rule { Matches { Domain("|cachenow.net|") }, Action(Discard) };Rule { Matches { Domain("|youronlinechoices.eu|") }, Action(Discard) };Rule { Matches { Domain("|osha.gov|") }, Action(Discard) };Rule { Matches { Domain("|xkcd.com|") }, Action(Discard) };Rule { Matches { Domain("|kaggle.com|") }, Action(Discard) };Rule { Matches { Domain("|siue.edu|") }, Action(Discard) };Rule { Matches { Domain("|onesignal.com|") }, Action(Discard) };Rule { Matches { Domain("|kotaku.com|") }, Action(Discard) };Rule { Matches { Domain("|avg.com|") }, Action(Discard) };Rule { Matches { Domain("|coxmail.com|") }, Action(Discard) };Rule { Matches { Domain("|rochester.edu|") }, Action(Discard) };Rule { Matches { Domain("|wikisource.org|") }, Action(Discard) };Rule { Matches { Domain("|apnic.net|") }, Action(Discard) };Rule { Matches { Domain("|ustc.edu.cn|") }, Action(Discard) };Rule { Matches { Domain("|lilithgame.com|") }, Action(Discard) };Rule { Matches { Domain("|pngtree.com|") }, Action(Discard) };Rule { Matches { Domain("|antfin.com|") }, Action(Discard) };Rule { Matches { Domain("|udel.edu|") }, Action(Discard) };Rule { Matches { Domain("|meesho.com|") }, Action(Discard) };Rule { Matches { Domain("|zopim.com|") }, Action(Discard) };Rule { Matches { Domain("|sketchup.com|") }, Action(Discard) };Rule { Matches { Domain("|tntdrama.com|") }, Action(Discard) };Rule { Matches { Domain("|nazwa.pl|") }, Action(Discard) };Rule { Matches { Domain("|lse.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|sephora.com|") }, Action(Discard) };Rule { Matches { Domain("|mcgill.ca|") }, Action(Discard) };Rule { Matches { Domain("|brightcove.net|") }, Action(Discard) };Rule { Matches { Domain("|chartbeat.net|") }, Action(Discard) };Rule { Matches { Domain("|wtxcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|codecademy.com|") }, Action(Discard) };Rule { Matches { Domain("|apa.az|") }, Action(Discard) };Rule { Matches { Domain("|mercadolibre.com|") }, Action(Discard) };Rule { Matches { Domain("|google.com.pk|") }, Action(Discard) };Rule { Matches { Domain("|patria.org.ve|") }, Action(Discard) };Rule { Matches { Domain("|ahacdn.me|") }, Action(Discard) };Rule { Matches { Domain("|ripe.net|") }, Action(Discard) };Rule { Matches { Domain("|baishan-cloud.net|") }, Action(Discard) };Rule { Matches { Domain("|nhl.com|") }, Action(Discard) };Rule { Matches { Domain("|gfycat.com|") }, Action(Discard) };Rule { Matches { Domain("|etherscan.io|") }, Action(Discard) };Rule { Matches { Domain("|easydns.com|") }, Action(Discard) };Rule { Matches { Domain("|e-volution.ai|") }, Action(Discard) };Rule { Matches { Domain("|rubrik.com|") }, Action(Discard) };Rule { Matches { Domain("|isnssdk.com|") }, Action(Discard) };Rule { Matches { Domain("|iastate.edu|") }, Action(Discard) };Rule { Matches { Domain("|lycos.com|") }, Action(Discard) };Rule { Matches { Domain("|netdna-ssl.com|") }, Action(Discard) };Rule { Matches { Domain("|4shared.com|") }, Action(Discard) };Rule { Matches { Domain("|virginia.gov|") }, Action(Discard) };Rule { Matches { Domain("|appier.net|") }, Action(Discard) };Rule { Matches { Domain("|walkme.com|") }, Action(Discard) };Rule { Matches { Domain("|redcross.org|") }, Action(Discard) };Rule { Matches { Domain("|archdaily.com|") }, Action(Discard) };Rule { Matches { Domain("|cern.ch|") }, Action(Discard) };Rule { Matches { Domain("|king.com|") }, Action(Discard) };Rule { Matches { Domain("|buffer.com|") }, Action(Discard) };Rule { Matches { Domain("|quizizz.com|") }, Action(Discard) };Rule { Matches { Domain("|oray.com|") }, Action(Discard) };Rule { Matches { Domain("|zztongyun.com|") }, Action(Discard) };Rule { Matches { Domain("|fsu.edu|") }, Action(Discard) };Rule { Matches { Domain("|pcgamer.com|") }, Action(Discard) };Rule { Matches { Domain("|apkpure.com|") }, Action(Discard) };Rule { Matches { Domain("|netsuite.com|") }, Action(Discard) };Rule { Matches { Domain("|githubusercontent.com|") }, Action(Discard) };Rule { Matches { Domain("|easebar.com|") }, Action(Discard) };Rule { Matches { Domain("|tvmao.com|") }, Action(Discard) };Rule { Matches { Domain("|mat6tube.com|") }, Action(Discard) };Rule { Matches { Domain("|ubereats.com|") }, Action(Discard) };Rule { Matches { Domain("|usf.edu|") }, Action(Discard) };Rule { Matches { Domain("|wsglb0.com|") }, Action(Discard) };Rule { Matches { Domain("|pubmnet.com|") }, Action(Discard) };Rule { Matches { Domain("|securityfocus.com|") }, Action(Discard) };Rule { Matches { Domain("|huatu.com|") }, Action(Discard) };Rule { Matches { Domain("|gap.com|") }, Action(Discard) };Rule { Matches { Domain("|uwaterloo.ca|") }, Action(Discard) };Rule { Matches { Domain("|mailgun.net|") }, Action(Discard) };Rule { Matches { Domain("|qcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-19.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|federalregister.gov|") }, Action(Discard) };Rule { Matches { Domain("|adroll.com|") }, Action(Discard) };Rule { Matches { Domain("|yangkeduo.com|") }, Action(Discard) };Rule { Matches { Domain("|cityheaven.net|") }, Action(Discard) };Rule { Matches { Domain("|cpanel.com|") }, Action(Discard) };Rule { Matches { Domain("|searchenginejournal.com|") }, Action(Discard) };Rule { Matches { Domain("|ucsf.edu|") }, Action(Discard) };Rule { Matches { Domain("|guancha.cn|") }, Action(Discard) };Rule { Matches { Domain("|businessweek.com|") }, Action(Discard) };Rule { Matches { Domain("|lazada.com.ph|") }, Action(Discard) };Rule { Matches { Domain("|stuff.co.nz|") }, Action(Discard) };Rule { Matches { Domain("|doc88.com|") }, Action(Discard) };Rule { Matches { Domain("|zebra.com|") }, Action(Discard) };Rule { Matches { Domain("|mybillie.com|") }, Action(Discard) };Rule { Matches { Domain("|calameo.com|") }, Action(Discard) };Rule { Matches { Domain("|coupahost.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-13.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|simpcity.su|") }, Action(Discard) };Rule { Matches { Domain("|menshealth.com|") }, Action(Discard) };Rule { Matches { Domain("|cloudflareinsights.com|") }, Action(Discard) };Rule { Matches { Domain("|googleoptimize.com|") }, Action(Discard) };Rule { Matches { Domain("|sl.pt|") }, Action(Discard) };Rule { Matches { Domain("|admanmedia.com|") }, Action(Discard) };Rule { Matches { Domain("|olympics.com|") }, Action(Discard) };Rule { Matches { Domain("|theknot.com|") }, Action(Discard) };Rule { Matches { Domain("|pa.gov|") }, Action(Discard) };Rule { Matches { Domain("|bongacams.com|") }, Action(Discard) };Rule { Matches { Domain("|rian.ru|") }, Action(Discard) };Rule { Matches { Domain("|wps.com|") }, Action(Discard) };Rule { Matches { Domain("|verywellhealth.com|") }, Action(Discard) };Rule { Matches { Domain("|fazenda.gov.br|") }, Action(Discard) };Rule { Matches { Domain("|ew.com|") }, Action(Discard) };Rule { Matches { Domain("|oxfordjournals.org|") }, Action(Discard) };Rule { Matches { Domain("|dyn.com|") }, Action(Discard) };Rule { Matches { Domain("|google.com.pe|") }, Action(Discard) };Rule { Matches { Domain("|privacymanager.io|") }, Action(Discard) };Rule { Matches { Domain("|zoom.com|") }, Action(Discard) };Rule { Matches { Domain("|edgecastcdn.net|") }, Action(Discard) };Rule { Matches { Domain("|carbonblack.io|") }, Action(Discard) };Rule { Matches { Domain("|xda-developers.com|") }, Action(Discard) };Rule { Matches { Domain("|aruba.it|") }, Action(Discard) };Rule { Matches { Domain("|lavanguardia.com|") }, Action(Discard) };Rule { Matches { Domain("|10086.cn|") }, Action(Discard) };Rule { Matches { Domain("|study.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-03.com|") }, Action(Discard) };Rule { Matches { Domain("|oxu.az|") }, Action(Discard) };Rule { Matches { Domain("|he.net|") }, Action(Discard) };Rule { Matches { Domain("|feimaoyun.com|") }, Action(Discard) };Rule { Matches { Domain("|strava.com|") }, Action(Discard) };Rule { Matches { Domain("|thespruce.com|") }, Action(Discard) };Rule { Matches { Domain("|ebscohost.com|") }, Action(Discard) };Rule { Matches { Domain("|remotepc.com|") }, Action(Discard) };Rule { Matches { Domain("|magento.com|") }, Action(Discard) };Rule { Matches { Domain("|studentaid.gov|") }, Action(Discard) };Rule { Matches { Domain("|gpo.gov|") }, Action(Discard) };Rule { Matches { Domain("|spglobal.com|") }, Action(Discard) };Rule { Matches { Domain("|javmix.tv|") }, Action(Discard) };Rule { Matches { Domain("|rostelecom.ru|") }, Action(Discard) };Rule { Matches { Domain("|sprint.com|") }, Action(Discard) };Rule { Matches { Domain("|ubnt.com|") }, Action(Discard) };Rule { Matches { Domain("|justia.com|") }, Action(Discard) };Rule { Matches { Domain("|zalo.me|") }, Action(Discard) };Rule { Matches { Domain("|miamiherald.com|") }, Action(Discard) };Rule { Matches { Domain("|wikibooks.org|") }, Action(Discard) };Rule { Matches { Domain("|zoomdev.us|") }, Action(Discard) };Rule { Matches { Domain("|livedns.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|metmuseum.org|") }, Action(Discard) };Rule { Matches { Domain("|publicstuff.com|") }, Action(Discard) };Rule { Matches { Domain("|camwhores.tv|") }, Action(Discard) };Rule { Matches { Domain("|japantimes.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|techrepublic.com|") }, Action(Discard) };Rule { Matches { Domain("|reference.com|") }, Action(Discard) };Rule { Matches { Domain("|zappos.com|") }, Action(Discard) };Rule { Matches { Domain("|chartboost.com|") }, Action(Discard) };Rule { Matches { Domain("|logicnow.us|") }, Action(Discard) };Rule { Matches { Domain("|shuzhiduo.com|") }, Action(Discard) };Rule { Matches { Domain("|uribl.com|") }, Action(Discard) };Rule { Matches { Domain("|wsu.edu|") }, Action(Discard) };Rule { Matches { Domain("|ams1907.com|") }, Action(Discard) };Rule { Matches { Domain("|lichess.org|") }, Action(Discard) };Rule { Matches { Domain("|nielsen.com|") }, Action(Discard) };Rule { Matches { Domain("|redbull.com|") }, Action(Discard) };Rule { Matches { Domain("|rfi.fr|") }, Action(Discard) };Rule { Matches { Domain("|fti.net|") }, Action(Discard) };Rule { Matches { Domain("|llnwd.net|") }, Action(Discard) };Rule { Matches { Domain("|lua.org|") }, Action(Discard) };Rule { Matches { Domain("|vatican.va|") }, Action(Discard) };Rule { Matches { Domain("|forexfactory.com|") }, Action(Discard) };Rule { Matches { Domain("|google.co.za|") }, Action(Discard) };Rule { Matches { Domain("|pornone.com|") }, Action(Discard) };Rule { Matches { Domain("|atlasobscura.com|") }, Action(Discard) };Rule { Matches { Domain("|xiaoman.cn|") }, Action(Discard) };Rule { Matches { Domain("|aussie.com|") }, Action(Discard) };Rule { Matches { Domain("|liquipedia.net|") }, Action(Discard) };Rule { Matches { Domain("|sk-ii.com|") }, Action(Discard) };Rule { Matches { Domain("|porkbun.com|") }, Action(Discard) };Rule { Matches { Domain("|zenon.net|") }, Action(Discard) };Rule { Matches { Domain("|esa.int|") }, Action(Discard) };Rule { Matches { Domain("|qh-lb.com|") }, Action(Discard) };Rule { Matches { Domain("|ourworldindata.org|") }, Action(Discard) };Rule { Matches { Domain("|drweb.com|") }, Action(Discard) };Rule { Matches { Domain("|synology.com|") }, Action(Discard) };Rule { Matches { Domain("|wjx.cn|") }, Action(Discard) };Rule { Matches { Domain("|ghxi.com|") }, Action(Discard) };Rule { Matches { Domain("|isc.org|") }, Action(Discard) };Rule { Matches { Domain("|palmplaystore.com|") }, Action(Discard) };Rule { Matches { Domain("|popularmechanics.com|") }, Action(Discard) };Rule { Matches { Domain("|thegamer.com|") }, Action(Discard) };Rule { Matches { Domain("|spreaker.com|") }, Action(Discard) };Rule { Matches { Domain("|javhdporn.net|") }, Action(Discard) };Rule { Matches { Domain("|adidas.com|") }, Action(Discard) };Rule { Matches { Domain("|sat.gob.mx|") }, Action(Discard) };Rule { Matches { Domain("|amazon.com.tr|") }, Action(Discard) };Rule { Matches { Domain("|fmovies.to|") }, Action(Discard) };Rule { Matches { Domain("|sproutsocial.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-56.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|oppomobile.com|") }, Action(Discard) };Rule { Matches { Domain("|mtu.ru|") }, Action(Discard) };Rule { Matches { Domain("|lnk.to|") }, Action(Discard) };Rule { Matches { Domain("|heapanalytics.com|") }, Action(Discard) };Rule { Matches { Domain("|washingtontimes.com|") }, Action(Discard) };Rule { Matches { Domain("|cdnhwc3.com|") }, Action(Discard) };Rule { Matches { Domain("|wireshark.org|") }, Action(Discard) };Rule { Matches { Domain("|rackspace-cloud.com|") }, Action(Discard) };Rule { Matches { Domain("|uchi.ru|") }, Action(Discard) };Rule { Matches { Domain("|phpbb.com|") }, Action(Discard) };Rule { Matches { Domain("|socdm.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-06.com|") }, Action(Discard) };Rule { Matches { Domain("|litres.ru|") }, Action(Discard) };Rule { Matches { Domain("|cedexis-test.com|") }, Action(Discard) };Rule { Matches { Domain("|stitcher.com|") }, Action(Discard) };Rule { Matches { Domain("|imageshack.com|") }, Action(Discard) };Rule { Matches { Domain("|toasttab.com|") }, Action(Discard) };Rule { Matches { Domain("|maigoo.com|") }, Action(Discard) };Rule { Matches { Domain("|sputniknews.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-02.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|kayak.com|") }, Action(Discard) };Rule { Matches { Domain("|bdys01.com|") }, Action(Discard) };Rule { Matches { Domain("|online-convert.com|") }, Action(Discard) };Rule { Matches { Domain("|visa.com|") }, Action(Discard) };Rule { Matches { Domain("|tinder.com|") }, Action(Discard) };Rule { Matches { Domain("|uniqlo.com|") }, Action(Discard) };Rule { Matches { Domain("|cdn13.com|") }, Action(Discard) };Rule { Matches { Domain("|lanzoux.com|") }, Action(Discard) };Rule { Matches { Domain("|perl.com|") }, Action(Discard) };Rule { Matches { Domain("|popsci.com|") }, Action(Discard) };Rule { Matches { Domain("|socialmediagirls.com|") }, Action(Discard) };Rule { Matches { Domain("|quantcast.com|") }, Action(Discard) };Rule { Matches { Domain("|shopee.ph|") }, Action(Discard) };Rule { Matches { Domain("|streamtheworld.net|") }, Action(Discard) };Rule { Matches { Domain("|163img.com|") }, Action(Discard) };Rule { Matches { Domain("|mobile.de|") }, Action(Discard) };Rule { Matches { Domain("|ccb.com|") }, Action(Discard) };Rule { Matches { Domain("|opentable.com|") }, Action(Discard) };Rule { Matches { Domain("|theepochtimes.com|") }, Action(Discard) };Rule { Matches { Domain("|emofid.com|") }, Action(Discard) };Rule { Matches { Domain("|skyscanner.net|") }, Action(Discard) };Rule { Matches { Domain("|sueddeutsche.de|") }, Action(Discard) };Rule { Matches { Domain("|11st.co.kr|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-09.com|") }, Action(Discard) };Rule { Matches { Domain("|vanguard.com|") }, Action(Discard) };Rule { Matches { Domain("|virustotal.com|") }, Action(Discard) };Rule { Matches { Domain("|tidal.com|") }, Action(Discard) };Rule { Matches { Domain("|zj.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|nbcsports.com|") }, Action(Discard) };Rule { Matches { Domain("|tripadvisor.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|itmedia.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|af.mil|") }, Action(Discard) };Rule { Matches { Domain("|coonandeg.xyz|") }, Action(Discard) };Rule { Matches { Domain("|india.com|") }, Action(Discard) };Rule { Matches { Domain("|paddypower.com|") }, Action(Discard) };Rule { Matches { Domain("|barrons.com|") }, Action(Discard) };Rule { Matches { Domain("|usp.br|") }, Action(Discard) };Rule { Matches { Domain("|liveinternet.ru|") }, Action(Discard) };Rule { Matches { Domain("|ttoverseaus.net|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-07.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|ansa.it|") }, Action(Discard) };Rule { Matches { Domain("|icndns.net|") }, Action(Discard) };Rule { Matches { Domain("|izatcloud.net|") }, Action(Discard) };Rule { Matches { Domain("|mbib.com|") }, Action(Discard) };Rule { Matches { Domain("|hgtv.com|") }, Action(Discard) };Rule { Matches { Domain("|r01.ru|") }, Action(Discard) };Rule { Matches { Domain("|nbc.com|") }, Action(Discard) };Rule { Matches { Domain("|nj.gov|") }, Action(Discard) };Rule { Matches { Domain("|helpshift.com|") }, Action(Discard) };Rule { Matches { Domain("|crazygames.com|") }, Action(Discard) };Rule { Matches { Domain("|zju.edu.cn|") }, Action(Discard) };Rule { Matches { Domain("|colostate.edu|") }, Action(Discard) };Rule { Matches { Domain("|wwiops.io|") }, Action(Discard) };Rule { Matches { Domain("|iherb.com|") }, Action(Discard) };Rule { Matches { Domain("|teleport.sh|") }, Action(Discard) };Rule { Matches { Domain("|unilever.com|") }, Action(Discard) };Rule { Matches { Domain("|nab.com.au|") }, Action(Discard) };Rule { Matches { Domain("|breitbart.com|") }, Action(Discard) };Rule { Matches { Domain("|streamtape.com|") }, Action(Discard) };Rule { Matches { Domain("|eia.gov|") }, Action(Discard) };Rule { Matches { Domain("|refinery29.com|") }, Action(Discard) };Rule { Matches { Domain("|justdial.com|") }, Action(Discard) };Rule { Matches { Domain("|defense.gov|") }, Action(Discard) };Rule { Matches { Domain("|careem-internal.com|") }, Action(Discard) };Rule { Matches { Domain("|popsugar.com|") }, Action(Discard) };Rule { Matches { Domain("|18183.com|") }, Action(Discard) };Rule { Matches { Domain("|ettoday.net|") }, Action(Discard) };Rule { Matches { Domain("|videolan.org|") }, Action(Discard) };Rule { Matches { Domain("|ionos.com|") }, Action(Discard) };Rule { Matches { Domain("|knowyourmeme.com|") }, Action(Discard) };Rule { Matches { Domain("|co.ru|") }, Action(Discard) };Rule { Matches { Domain("|studocu.com|") }, Action(Discard) };Rule { Matches { Domain("|tagesschau.de|") }, Action(Discard) };Rule { Matches { Domain("|wikiwand.com|") }, Action(Discard) };Rule { Matches { Domain("|theregister.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|southwest.com|") }, Action(Discard) };Rule { Matches { Domain("|calculator.net|") }, Action(Discard) };Rule { Matches { Domain("|telephony.goog|") }, Action(Discard) };Rule { Matches { Domain("|clover.com|") }, Action(Discard) };Rule { Matches { Domain("|metacritic.com|") }, Action(Discard) };Rule { Matches { Domain("|hbs.edu|") }, Action(Discard) };Rule { Matches { Domain("|msauth.net|") }, Action(Discard) };Rule { Matches { Domain("|easy4ipcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|opbank.lv|") }, Action(Discard) };Rule { Matches { Domain("|mosreg.ru|") }, Action(Discard) };Rule { Matches { Domain("|match.com|") }, Action(Discard) };Rule { Matches { Domain("|olx.ua|") }, Action(Discard) };Rule { Matches { Domain("|umeng.com|") }, Action(Discard) };Rule { Matches { Domain("|notsafe.shop|") }, Action(Discard) };Rule { Matches { Domain("|dallasnews.com|") }, Action(Discard) };Rule { Matches { Domain("|usbank.com|") }, Action(Discard) };Rule { Matches { Domain("|sjtu.edu.cn|") }, Action(Discard) };Rule { Matches { Domain("|ultimate-guitar.com|") }, Action(Discard) };Rule { Matches { Domain("|temu.com|") }, Action(Discard) };Rule { Matches { Domain("|dianping.com|") }, Action(Discard) };Rule { Matches { Domain("|usaa.com|") }, Action(Discard) };Rule { Matches { Domain("|metlife.com|") }, Action(Discard) };Rule { Matches { Domain("|cdek.ru|") }, Action(Discard) };Rule { Matches { Domain("|skynet.be|") }, Action(Discard) };Rule { Matches { Domain("|mihoyo.com|") }, Action(Discard) };Rule { Matches { Domain("|faz.net|") }, Action(Discard) };Rule { Matches { Domain("|everydayhealth.com|") }, Action(Discard) };Rule { Matches { Domain("|jw.org|") }, Action(Discard) };Rule { Matches { Domain("|uoregon.edu|") }, Action(Discard) };Rule { Matches { Domain("|worldcat.org|") }, Action(Discard) };Rule { Matches { Domain("|westernunion.com|") }, Action(Discard) };Rule { Matches { Domain("|abebooks.com|") }, Action(Discard) };Rule { Matches { Domain("|na-att-idns.net|") }, Action(Discard) };Rule { Matches { Domain("|infogram.com|") }, Action(Discard) };Rule { Matches { Domain("|man7.org|") }, Action(Discard) };Rule { Matches { Domain("|netlify.com|") }, Action(Discard) };Rule { Matches { Domain("|innovid.com|") }, Action(Discard) };Rule { Matches { Domain("|google.com.sg|") }, Action(Discard) };Rule { Matches { Domain("|clearblue.com|") }, Action(Discard) };Rule { Matches { Domain("|jwplayer.com|") }, Action(Discard) };Rule { Matches { Domain("|digitaloceanspaces.com|") }, Action(Discard) };Rule { Matches { Domain("|o8tv.com|") }, Action(Discard) };Rule { Matches { Domain("|abb.com|") }, Action(Discard) };Rule { Matches { Domain("|veed.io|") }, Action(Discard) };Rule { Matches { Domain("|mfadsrvr.com|") }, Action(Discard) };Rule { Matches { Domain("|yp.to|") }, Action(Discard) };Rule { Matches { Domain("|paychex.com|") }, Action(Discard) };Rule { Matches { Domain("|sspai.com|") }, Action(Discard) };Rule { Matches { Domain("|google.co.ve|") }, Action(Discard) };Rule { Matches { Domain("|refined.site|") }, Action(Discard) };Rule { Matches { Domain("|imagebam.com|") }, Action(Discard) };Rule { Matches { Domain("|loopme.me|") }, Action(Discard) };Rule { Matches { Domain("|sheetvibe.com|") }, Action(Discard) };Rule { Matches { Domain("|ibtimes.com|") }, Action(Discard) };Rule { Matches { Domain("|ziprecruiter.com|") }, Action(Discard) };Rule { Matches { Domain("|adgrx.com|") }, Action(Discard) };Rule { Matches { Domain("|boeing.com|") }, Action(Discard) };Rule { Matches { Domain("|bankmellat.ir|") }, Action(Discard) };Rule { Matches { Domain("|ad-delivery.net|") }, Action(Discard) };Rule { Matches { Domain("|foreignpolicy.com|") }, Action(Discard) };Rule { Matches { Domain("|rosminzdrav.ru|") }, Action(Discard) };Rule { Matches { Domain("|nxp.com|") }, Action(Discard) };Rule { Matches { Domain("|dtln.ru|") }, Action(Discard) };Rule { Matches { Domain("|nzherald.co.nz|") }, Action(Discard) };Rule { Matches { Domain("|optnx.com|") }, Action(Discard) };Rule { Matches { Domain("|pima.edu|") }, Action(Discard) };Rule { Matches { Domain("|qiniudns.com|") }, Action(Discard) };Rule { Matches { Domain("|virginm.net|") }, Action(Discard) };Rule { Matches { Domain("|payu.in|") }, Action(Discard) };Rule { Matches { Domain("|usertrust.com|") }, Action(Discard) };Rule { Matches { Domain("|elespanol.com|") }, Action(Discard) };Rule { Matches { Domain("|ualberta.ca|") }, Action(Discard) };Rule { Matches { Domain("|bell-labs.com|") }, Action(Discard) };Rule { Matches { Domain("|bol.com|") }, Action(Discard) };Rule { Matches { Domain("|dnsv.jp|") }, Action(Discard) };Rule { Matches { Domain("|mediawiki.org|") }, Action(Discard) };Rule { Matches { Domain("|ogury.io|") }, Action(Discard) };Rule { Matches { Domain("|ministrybrands.com|") }, Action(Discard) };Rule { Matches { Domain("|flash.cn|") }, Action(Discard) };Rule { Matches { Domain("|byu.edu|") }, Action(Discard) };Rule { Matches { Domain("|bybit.com|") }, Action(Discard) };Rule { Matches { Domain("|shaheed4u.work|") }, Action(Discard) };Rule { Matches { Domain("|ct.gov|") }, Action(Discard) };Rule { Matches { Domain("|tsetmc.com|") }, Action(Discard) };Rule { Matches { Domain("|serving-sys.com|") }, Action(Discard) };Rule { Matches { Domain("|inleed.net|") }, Action(Discard) };Rule { Matches { Domain("|makemytrip.com|") }, Action(Discard) };Rule { Matches { Domain("|eyeota.net|") }, Action(Discard) };Rule { Matches { Domain("|bigo.sg|") }, Action(Discard) };Rule { Matches { Domain("|freshchat.com|") }, Action(Discard) };Rule { Matches { Domain("|dnsv5.com|") }, Action(Discard) };Rule { Matches { Domain("|dpreview.com|") }, Action(Discard) };Rule { Matches { Domain("|startribune.com|") }, Action(Discard) };Rule { Matches { Domain("|domaintools.com|") }, Action(Discard) };Rule { Matches { Domain("|drctcldfafwr.com|") }, Action(Discard) };Rule { Matches { Domain("|novinky.cz|") }, Action(Discard) };Rule { Matches { Domain("|momoshop.com.tw|") }, Action(Discard) };Rule { Matches { Domain("|centos.org|") }, Action(Discard) };Rule { Matches { Domain("|eater.com|") }, Action(Discard) };Rule { Matches { Domain("|nj.com|") }, Action(Discard) };Rule { Matches { Domain("|amnesty.org|") }, Action(Discard) };Rule { Matches { Domain("|home.blog|") }, Action(Discard) };Rule { Matches { Domain("|nsatc.net|") }, Action(Discard) };Rule { Matches { Domain("|trulia.com|") }, Action(Discard) };Rule { Matches { Domain("|webtoons.com|") }, Action(Discard) };Rule { Matches { Domain("|adblockplus.org|") }, Action(Discard) };Rule { Matches { Domain("|wallhaven.cc|") }, Action(Discard) };Rule { Matches { Domain("|manganato.com|") }, Action(Discard) };Rule { Matches { Domain("|xboxlive.com|") }, Action(Discard) };Rule { Matches { Domain("|theweathernetwork.com|") }, Action(Discard) };Rule { Matches { Domain("|hubspot.net|") }, Action(Discard) };Rule { Matches { Domain("|game8.jp|") }, Action(Discard) };Rule { Matches { Domain("|siteground.biz|") }, Action(Discard) };Rule { Matches { Domain("|experimentalconcerningsuck.com|") }, Action(Discard) };Rule { Matches { Domain("|easybrain.com|") }, Action(Discard) };Rule { Matches { Domain("|n-tv.de|") }, Action(Discard) };Rule { Matches { Domain("|video.az|") }, Action(Discard) };Rule { Matches { Domain("|directnic.com|") }, Action(Discard) };Rule { Matches { Domain("|tubitv.com|") }, Action(Discard) };Rule { Matches { Domain("|4channel.org|") }, Action(Discard) };Rule { Matches { Domain("|zoomgov.com|") }, Action(Discard) };Rule { Matches { Domain("|myfreecams.com|") }, Action(Discard) };Rule { Matches { Domain("|fincoec.com|") }, Action(Discard) };Rule { Matches { Domain("|amazon.cl|") }, Action(Discard) };Rule { Matches { Domain("|wired.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|ispot.tv|") }, Action(Discard) };Rule { Matches { Domain("|billdesk.com|") }, Action(Discard) };Rule { Matches { Domain("|ikco.ir|") }, Action(Discard) };Rule { Matches { Domain("|galleryvalery.com|") }, Action(Discard) };Rule { Matches { Domain("|box.net|") }, Action(Discard) };Rule { Matches { Domain("|sex.com|") }, Action(Discard) };Rule { Matches { Domain("|aaa.com|") }, Action(Discard) };Rule { Matches { Domain("|tdnsstic1.cn|") }, Action(Discard) };Rule { Matches { Domain("|tomsguide.com|") }, Action(Discard) };Rule { Matches { Domain("|tp-link.com|") }, Action(Discard) };Rule { Matches { Domain("|lazada.com.my|") }, Action(Discard) };Rule { Matches { Domain("|cookpad.com|") }, Action(Discard) };Rule { Matches { Domain("|travelandleisure.com|") }, Action(Discard) };Rule { Matches { Domain("|sharethis.com|") }, Action(Discard) };Rule { Matches { Domain("|azcentral.com|") }, Action(Discard) };Rule { Matches { Domain("|hud.gov|") }, Action(Discard) };Rule { Matches { Domain("|thestreet.com|") }, Action(Discard) };Rule { Matches { Domain("|36kr.com|") }, Action(Discard) };Rule { Matches { Domain("|brinkpos.net|") }, Action(Discard) };Rule { Matches { Domain("|dimeco.ru|") }, Action(Discard) };Rule { Matches { Domain("|nus.edu.sg|") }, Action(Discard) };Rule { Matches { Domain("|federalreserve.gov|") }, Action(Discard) };Rule { Matches { Domain("|uq.edu.au|") }, Action(Discard) };Rule { Matches { Domain("|tinypic.com|") }, Action(Discard) };Rule { Matches { Domain("|prserv.net|") }, Action(Discard) };Rule { Matches { Domain("|meijutt.tv|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-59.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|ranker.com|") }, Action(Discard) };Rule { Matches { Domain("|myntra.com|") }, Action(Discard) };Rule { Matches { Domain("|denverpost.com|") }, Action(Discard) };Rule { Matches { Domain("|wampserver.com|") }, Action(Discard) };Rule { Matches { Domain("|scholastic.com|") }, Action(Discard) };Rule { Matches { Domain("|careem-engineering.com|") }, Action(Discard) };Rule { Matches { Domain("|appfolio.com|") }, Action(Discard) };Rule { Matches { Domain("|gimp.org|") }, Action(Discard) };Rule { Matches { Domain("|editorialmanager.com|") }, Action(Discard) };Rule { Matches { Domain("|itv.com|") }, Action(Discard) };Rule { Matches { Domain("|sedoparking.com|") }, Action(Discard) };Rule { Matches { Domain("|list-manage1.com|") }, Action(Discard) };Rule { Matches { Domain("|macrumors.com|") }, Action(Discard) };Rule { Matches { Domain("|diigo.com|") }, Action(Discard) };Rule { Matches { Domain("|callofduty.com|") }, Action(Discard) };Rule { Matches { Domain("|kinderbuenowhite.com|") }, Action(Discard) };Rule { Matches { Domain("|imgix.net|") }, Action(Discard) };Rule { Matches { Domain("|ably.io|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-41.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|indiatoday.in|") }, Action(Discard) };Rule { Matches { Domain("|mediavine.com|") }, Action(Discard) };Rule { Matches { Domain("|vitalsource.com|") }, Action(Discard) };Rule { Matches { Domain("|abc.es|") }, Action(Discard) };Rule { Matches { Domain("|ynet.co.il|") }, Action(Discard) };Rule { Matches { Domain("|orf.at|") }, Action(Discard) };Rule { Matches { Domain("|publicdnsservice.com|") }, Action(Discard) };Rule { Matches { Domain("|kinedns.net|") }, Action(Discard) };Rule { Matches { Domain("|pbase.com|") }, Action(Discard) };Rule { Matches { Domain("|safeguard.ph|") }, Action(Discard) };Rule { Matches { Domain("|timesofisrael.com|") }, Action(Discard) };Rule { Matches { Domain("|allscriptscloud.com|") }, Action(Discard) };Rule { Matches { Domain("|sprinklr.com|") }, Action(Discard) };Rule { Matches { Domain("|straitstimes.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-10.net|") }, Action(Discard) };Rule { Matches { Domain("|liftoff.io|") }, Action(Discard) };Rule { Matches { Domain("|secret.com|") }, Action(Discard) };Rule { Matches { Domain("|blender.org|") }, Action(Discard) };Rule { Matches { Domain("|runnet.ru|") }, Action(Discard) };Rule { Matches { Domain("|tynt.com|") }, Action(Discard) };Rule { Matches { Domain("|realestate.com.au|") }, Action(Discard) };Rule { Matches { Domain("|filesusr.com|") }, Action(Discard) };Rule { Matches { Domain("|heise.de|") }, Action(Discard) };Rule { Matches { Domain("|togetter.com|") }, Action(Discard) };Rule { Matches { Domain("|tianqi.com|") }, Action(Discard) };Rule { Matches { Domain("|activision.com|") }, Action(Discard) };Rule { Matches { Domain("|flurry.com|") }, Action(Discard) };Rule { Matches { Domain("|speedyssh.cfd|") }, Action(Discard) };Rule { Matches { Domain("|razer.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-04.net|") }, Action(Discard) };Rule { Matches { Domain("|adzerk.net|") }, Action(Discard) };Rule { Matches { Domain("|chosun.com|") }, Action(Discard) };Rule { Matches { Domain("|csmonitor.com|") }, Action(Discard) };Rule { Matches { Domain("|iau.ir|") }, Action(Discard) };Rule { Matches { Domain("|legacy.com|") }, Action(Discard) };Rule { Matches { Domain("|humboldt.edu|") }, Action(Discard) };Rule { Matches { Domain("|lyft.net|") }, Action(Discard) };Rule { Matches { Domain("|mac.com|") }, Action(Discard) };Rule { Matches { Domain("|treehugger.com|") }, Action(Discard) };Rule { Matches { Domain("|mediago.io|") }, Action(Discard) };Rule { Matches { Domain("|uic.edu|") }, Action(Discard) };Rule { Matches { Domain("|tutsplus.com|") }, Action(Discard) };Rule { Matches { Domain("|alibabacorp.com|") }, Action(Discard) };Rule { Matches { Domain("|acesso.gov.br|") }, Action(Discard) };Rule { Matches { Domain("|rei.com|") }, Action(Discard) };Rule { Matches { Domain("|wolframalpha.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-39.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|mass.gov|") }, Action(Discard) };Rule { Matches { Domain("|springserve.com|") }, Action(Discard) };Rule { Matches { Domain("|blackspider.com|") }, Action(Discard) };Rule { Matches { Domain("|lanacion.com.ar|") }, Action(Discard) };Rule { Matches { Domain("|whatismyipaddress.com|") }, Action(Discard) };Rule { Matches { Domain("|jivox.com|") }, Action(Discard) };Rule { Matches { Domain("|handelreg.cf|") }, Action(Discard) };Rule { Matches { Domain("|avgle.com|") }, Action(Discard) };Rule { Matches { Domain("|poshmark.com|") }, Action(Discard) };Rule { Matches { Domain("|pinterest.es|") }, Action(Discard) };Rule { Matches { Domain("|flipsnack.com|") }, Action(Discard) };Rule { Matches { Domain("|caixa.gov.br|") }, Action(Discard) };Rule { Matches { Domain("|cpi.ad.jp|") }, Action(Discard) };Rule { Matches { Domain("|iu.edu|") }, Action(Discard) };Rule { Matches { Domain("|badoo.com|") }, Action(Discard) };Rule { Matches { Domain("|squid-cache.org|") }, Action(Discard) };Rule { Matches { Domain("|channel4.com|") }, Action(Discard) };Rule { Matches { Domain("|cms.gov|") }, Action(Discard) };Rule { Matches { Domain("|reverbnation.com|") }, Action(Discard) };Rule { Matches { Domain("|michigan.gov|") }, Action(Discard) };Rule { Matches { Domain("|pagesix.com|") }, Action(Discard) };Rule { Matches { Domain("|prototypewailrubber.com|") }, Action(Discard) };Rule { Matches { Domain("|mhlw.go.jp|") }, Action(Discard) };Rule { Matches { Domain("|eu-1-id5-sync.com|") }, Action(Discard) };Rule { Matches { Domain("|smi2.ru|") }, Action(Discard) };Rule { Matches { Domain("|flashscore.com|") }, Action(Discard) };Rule { Matches { Domain("|sovcombank.ru|") }, Action(Discard) };Rule { Matches { Domain("|usertesting.com|") }, Action(Discard) };Rule { Matches { Domain("|oraclecloud.net|") }, Action(Discard) };Rule { Matches { Domain("|lexisnexis.com|") }, Action(Discard) };Rule { Matches { Domain("|anu.edu.au|") }, Action(Discard) };Rule { Matches { Domain("|boutell.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|fraunhofer.de|") }, Action(Discard) };Rule { Matches { Domain("|iinet.net.au|") }, Action(Discard) };Rule { Matches { Domain("|yandex.com.tr|") }, Action(Discard) };Rule { Matches { Domain("|claritymoney.com|") }, Action(Discard) };Rule { Matches { Domain("|tamin.ir|") }, Action(Discard) };Rule { Matches { Domain("|merck.com|") }, Action(Discard) };Rule { Matches { Domain("|ko-fi.com|") }, Action(Discard) };Rule { Matches { Domain("|eitaa.com|") }, Action(Discard) };Rule { Matches { Domain("|adahealth.ca|") }, Action(Discard) };Rule { Matches { Domain("|zomato.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-29.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-63.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|northgrum.com|") }, Action(Discard) };Rule { Matches { Domain("|pphosted.com|") }, Action(Discard) };Rule { Matches { Domain("|mcusercontent.com|") }, Action(Discard) };Rule { Matches { Domain("|in.gov|") }, Action(Discard) };Rule { Matches { Domain("|chinatelecomglobal.com|") }, Action(Discard) };Rule { Matches { Domain("|tapjoy.com|") }, Action(Discard) };Rule { Matches { Domain("|thinkific.com|") }, Action(Discard) };Rule { Matches { Domain("|namequery.com|") }, Action(Discard) };Rule { Matches { Domain("|blogspot.ca|") }, Action(Discard) };Rule { Matches { Domain("|successfactors.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-29.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|britishcouncil.org|") }, Action(Discard) };Rule { Matches { Domain("|monster.com|") }, Action(Discard) };Rule { Matches { Domain("|gazzetta.it|") }, Action(Discard) };Rule { Matches { Domain("|cvs.com|") }, Action(Discard) };Rule { Matches { Domain("|clarin.com|") }, Action(Discard) };Rule { Matches { Domain("|gmu.edu|") }, Action(Discard) };Rule { Matches { Domain("|oaxyteek.net|") }, Action(Discard) };Rule { Matches { Domain("|gazeta.pl|") }, Action(Discard) };Rule { Matches { Domain("|business-standard.com|") }, Action(Discard) };Rule { Matches { Domain("|mulesoft.com|") }, Action(Discard) };Rule { Matches { Domain("|vivo.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|rd.com|") }, Action(Discard) };Rule { Matches { Domain("|mentalfloss.com|") }, Action(Discard) };Rule { Matches { Domain("|routledge.com|") }, Action(Discard) };Rule { Matches { Domain("|cwi.nl|") }, Action(Discard) };Rule { Matches { Domain("|boutell.com|") }, Action(Discard) };Rule { Matches { Domain("|dnsv1.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|hurriyet.com.tr|") }, Action(Discard) };Rule { Matches { Domain("|cointelegraph.com|") }, Action(Discard) };Rule { Matches { Domain("|adentifi.com|") }, Action(Discard) };Rule { Matches { Domain("|nd.edu|") }, Action(Discard) };Rule { Matches { Domain("|mynavi.jp|") }, Action(Discard) };Rule { Matches { Domain("|avcdn.net|") }, Action(Discard) };Rule { Matches { Domain("|ultradns.biz|") }, Action(Discard) };Rule { Matches { Domain("|zlib.net|") }, Action(Discard) };Rule { Matches { Domain("|itau.com.br|") }, Action(Discard) };Rule { Matches { Domain("|unep.org|") }, Action(Discard) };Rule { Matches { Domain("|tunein.com|") }, Action(Discard) };Rule { Matches { Domain("|playtika.com|") }, Action(Discard) };Rule { Matches { Domain("|20minutos.es|") }, Action(Discard) };Rule { Matches { Domain("|amazonalexa.com|") }, Action(Discard) };Rule { Matches { Domain("|qualys.com|") }, Action(Discard) };Rule { Matches { Domain("|123rf.com|") }, Action(Discard) };Rule { Matches { Domain("|francetvinfo.fr|") }, Action(Discard) };Rule { Matches { Domain("|ehow.com|") }, Action(Discard) };Rule { Matches { Domain("|chrome.com|") }, Action(Discard) };Rule { Matches { Domain("|google.com.co|") }, Action(Discard) };Rule { Matches { Domain("|homestead.com|") }, Action(Discard) };Rule { Matches { Domain("|2gis.ru|") }, Action(Discard) };Rule { Matches { Domain("|lkqd.net|") }, Action(Discard) };Rule { Matches { Domain("|formstack.com|") }, Action(Discard) };Rule { Matches { Domain("|qpic.cn|") }, Action(Discard) };Rule { Matches { Domain("|moegirl.org.cn|") }, Action(Discard) };Rule { Matches { Domain("|zerohedge.com|") }, Action(Discard) };Rule { Matches { Domain("|erothots.co|") }, Action(Discard) };Rule { Matches { Domain("|aptrinsic.com|") }, Action(Discard) };Rule { Matches { Domain("|reactjs.org|") }, Action(Discard) };Rule { Matches { Domain("|booth.pm|") }, Action(Discard) };Rule { Matches { Domain("|inquirer.com|") }, Action(Discard) };Rule { Matches { Domain("|ultipro.com|") }, Action(Discard) };Rule { Matches { Domain("|rbx.com|") }, Action(Discard) };Rule { Matches { Domain("|yotpo.com|") }, Action(Discard) };Rule { Matches { Domain("|nic.de|") }, Action(Discard) };Rule { Matches { Domain("|pcauto.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-53.com|") }, Action(Discard) };Rule { Matches { Domain("|mtv.com|") }, Action(Discard) };Rule { Matches { Domain("|clickfunnels.com|") }, Action(Discard) };Rule { Matches { Domain("|symcb.com|") }, Action(Discard) };Rule { Matches { Domain("|huanqiu.com|") }, Action(Discard) };Rule { Matches { Domain("|skandia.se|") }, Action(Discard) };Rule { Matches { Domain("|lifehack.org|") }, Action(Discard) };Rule { Matches { Domain("|eonline.com|") }, Action(Discard) };Rule { Matches { Domain("|tiqcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-25.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|fotor.com|") }, Action(Discard) };Rule { Matches { Domain("|mindbox.ru|") }, Action(Discard) };Rule { Matches { Domain("|championat.com|") }, Action(Discard) };Rule { Matches { Domain("|bereal.network|") }, Action(Discard) };Rule { Matches { Domain("|colamanhua.com|") }, Action(Discard) };Rule { Matches { Domain("|huijiwiki.com|") }, Action(Discard) };Rule { Matches { Domain("|postimg.cc|") }, Action(Discard) };Rule { Matches { Domain("|tabelog.com|") }, Action(Discard) };Rule { Matches { Domain("|arduino.cc|") }, Action(Discard) };Rule { Matches { Domain("|openoffice.org|") }, Action(Discard) };Rule { Matches { Domain("|osiextantly.com|") }, Action(Discard) };Rule { Matches { Domain("|irdeto.com|") }, Action(Discard) };Rule { Matches { Domain("|bunnyinfra.net|") }, Action(Discard) };Rule { Matches { Domain("|fuliba2023.net|") }, Action(Discard) };Rule { Matches { Domain("|fantuanhd.com|") }, Action(Discard) };Rule { Matches { Domain("|gm.com|") }, Action(Discard) };Rule { Matches { Domain("|penguinrandomhouse.com|") }, Action(Discard) };Rule { Matches { Domain("|17173.com|") }, Action(Discard) };Rule { Matches { Domain("|comodoca.com|") }, Action(Discard) };Rule { Matches { Domain("|href.li|") }, Action(Discard) };Rule { Matches { Domain("|uh.edu|") }, Action(Discard) };Rule { Matches { Domain("|blogspot.de|") }, Action(Discard) };Rule { Matches { Domain("|collinsdictionary.com|") }, Action(Discard) };Rule { Matches { Domain("|de.net|") }, Action(Discard) };Rule { Matches { Domain("|myzaker.com|") }, Action(Discard) };Rule { Matches { Domain("|jjwxc.net|") }, Action(Discard) };Rule { Matches { Domain("|purl.org|") }, Action(Discard) };Rule { Matches { Domain("|campaign-archive.com|") }, Action(Discard) };Rule { Matches { Domain("|yammer.com|") }, Action(Discard) };Rule { Matches { Domain("|turnitin.com|") }, Action(Discard) };Rule { Matches { Domain("|unhcr.org|") }, Action(Discard) };Rule { Matches { Domain("|brainly.com|") }, Action(Discard) };Rule { Matches { Domain("|lyft.com|") }, Action(Discard) };Rule { Matches { Domain("|classlink.com|") }, Action(Discard) };Rule { Matches { Domain("|lgtvcommon.com|") }, Action(Discard) };Rule { Matches { Domain("|buzzsprout.com|") }, Action(Discard) };Rule { Matches { Domain("|oclc.org|") }, Action(Discard) };Rule { Matches { Domain("|cas.cn|") }, Action(Discard) };Rule { Matches { Domain("|pushwoosh.com|") }, Action(Discard) };Rule { Matches { Domain("|fujitsu.com|") }, Action(Discard) };Rule { Matches { Domain("|000webhostapp.com|") }, Action(Discard) };Rule { Matches { Domain("|sureserver.com|") }, Action(Discard) };Rule { Matches { Domain("|u-tokyo.ac.jp|") }, Action(Discard) };Rule { Matches { Domain("|cameraddns.net|") }, Action(Discard) };Rule { Matches { Domain("|bitchute.com|") }, Action(Discard) };Rule { Matches { Domain("|pinterest.fr|") }, Action(Discard) };Rule { Matches { Domain("|vultr.com|") }, Action(Discard) };Rule { Matches { Domain("|unfccc.int|") }, Action(Discard) };Rule { Matches { Domain("|dns.google|") }, Action(Discard) };Rule { Matches { Domain("|postman.com|") }, Action(Discard) };Rule { Matches { Domain("|politico.eu|") }, Action(Discard) };Rule { Matches { Domain("|ip138.com|") }, Action(Discard) };Rule { Matches { Domain("|js7k.com|") }, Action(Discard) };Rule { Matches { Domain("|smailru.net|") }, Action(Discard) };Rule { Matches { Domain("|stripe.network|") }, Action(Discard) };Rule { Matches { Domain("|zazzle.com|") }, Action(Discard) };Rule { Matches { Domain("|nifty.com|") }, Action(Discard) };Rule { Matches { Domain("|byted.org|") }, Action(Discard) };Rule { Matches { Domain("|awmcdn.net|") }, Action(Discard) };Rule { Matches { Domain("|domain.com|") }, Action(Discard) };Rule { Matches { Domain("|mk.ru|") }, Action(Discard) };Rule { Matches { Domain("|apple.co|") }, Action(Discard) };Rule { Matches { Domain("|bazaarvoice.com|") }, Action(Discard) };Rule { Matches { Domain("|xiumi.us|") }, Action(Discard) };Rule { Matches { Domain("|algolianet.com|") }, Action(Discard) };Rule { Matches { Domain("|liveintent.com|") }, Action(Discard) };Rule { Matches { Domain("|nationalpost.com|") }, Action(Discard) };Rule { Matches { Domain("|dnb.com|") }, Action(Discard) };Rule { Matches { Domain("|lufthansa.com|") }, Action(Discard) };Rule { Matches { Domain("|insiderintelligence.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-15.com|") }, Action(Discard) };Rule { Matches { Domain("|whecloud.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-31.com|") }, Action(Discard) };Rule { Matches { Domain("|sdo.com|") }, Action(Discard) };Rule { Matches { Domain("|upstart.com|") }, Action(Discard) };Rule { Matches { Domain("|dji.com|") }, Action(Discard) };Rule { Matches { Domain("|ccschy.com|") }, Action(Discard) };Rule { Matches { Domain("|mercadolivre.com.br|") }, Action(Discard) };Rule { Matches { Domain("|womenshealthmag.com|") }, Action(Discard) };Rule { Matches { Domain("|egnyte.com|") }, Action(Discard) };Rule { Matches { Domain("|lanzouw.com|") }, Action(Discard) };Rule { Matches { Domain("|churnzero.net|") }, Action(Discard) };Rule { Matches { Domain("|bahn.de|") }, Action(Discard) };Rule { Matches { Domain("|sav.com|") }, Action(Discard) };Rule { Matches { Domain("|eu.com|") }, Action(Discard) };Rule { Matches { Domain("|mynetname.net|") }, Action(Discard) };Rule { Matches { Domain("|ey.net|") }, Action(Discard) };Rule { Matches { Domain("|knt9.xyz|") }, Action(Discard) };Rule { Matches { Domain("|onenote.net|") }, Action(Discard) };Rule { Matches { Domain("|jnj.com|") }, Action(Discard) };Rule { Matches { Domain("|ge.com|") }, Action(Discard) };Rule { Matches { Domain("|rice.edu|") }, Action(Discard) };Rule { Matches { Domain("|xvideos-cdn.com|") }, Action(Discard) };Rule { Matches { Domain("|reverb.com|") }, Action(Discard) };Rule { Matches { Domain("|newgrounds.com|") }, Action(Discard) };Rule { Matches { Domain("|iconfont.cn|") }, Action(Discard) };Rule { Matches { Domain("|nsf.gov|") }, Action(Discard) };Rule { Matches { Domain("|semasio.net|") }, Action(Discard) };Rule { Matches { Domain("|upi.com|") }, Action(Discard) };Rule { Matches { Domain("|envato.market|") }, Action(Discard) };Rule { Matches { Domain("|wholefoodsmarket.com|") }, Action(Discard) };Rule { Matches { Domain("|tplinknbu.com|") }, Action(Discard) };Rule { Matches { Domain("|google.ch|") }, Action(Discard) };Rule { Matches { Domain("|pcre.org|") }, Action(Discard) };Rule { Matches { Domain("|hifini.com|") }, Action(Discard) };Rule { Matches { Domain("|pacloudflare.com|") }, Action(Discard) };Rule { Matches { Domain("|siemens.de|") }, Action(Discard) };Rule { Matches { Domain("|groupon.com|") }, Action(Discard) };Rule { Matches { Domain("|siteground.com|") }, Action(Discard) };Rule { Matches { Domain("|self.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-34.com|") }, Action(Discard) };Rule { Matches { Domain("|tradedoubler.com|") }, Action(Discard) };Rule { Matches { Domain("|roudoduor.com|") }, Action(Discard) };Rule { Matches { Domain("|liquidweb.com|") }, Action(Discard) };Rule { Matches { Domain("|braintree-api.com|") }, Action(Discard) };Rule { Matches { Domain("|aznude.com|") }, Action(Discard) };Rule { Matches { Domain("|exness.com|") }, Action(Discard) };Rule { Matches { Domain("|ashemaletube.com|") }, Action(Discard) };Rule { Matches { Domain("|ebay.ca|") }, Action(Discard) };Rule { Matches { Domain("|ohio.gov|") }, Action(Discard) };Rule { Matches { Domain("|singular.net|") }, Action(Discard) };Rule { Matches { Domain("|gq.com|") }, Action(Discard) };Rule { Matches { Domain("|pnc.com|") }, Action(Discard) };Rule { Matches { Domain("|modao.cc|") }, Action(Discard) };Rule { Matches { Domain("|aiv-delivery.net|") }, Action(Discard) };Rule { Matches { Domain("|geico.com|") }, Action(Discard) };Rule { Matches { Domain("|lin.ee|") }, Action(Discard) };Rule { Matches { Domain("|jio.com|") }, Action(Discard) };Rule { Matches { Domain("|marketingcloudapis.com|") }, Action(Discard) };Rule { Matches { Domain("|ama-assn.org|") }, Action(Discard) };Rule { Matches { Domain("|trpcdn.net|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-12.net|") }, Action(Discard) };Rule { Matches { Domain("|ladbrokes.com|") }, Action(Discard) };Rule { Matches { Domain("|chromium.org|") }, Action(Discard) };Rule { Matches { Domain("|qatarairways.com|") }, Action(Discard) };Rule { Matches { Domain("|zsxq.com|") }, Action(Discard) };Rule { Matches { Domain("|simply.com|") }, Action(Discard) };Rule { Matches { Domain("|popcloud.com.br|") }, Action(Discard) };Rule { Matches { Domain("|wordstream.com|") }, Action(Discard) };Rule { Matches { Domain("|oregonlive.com|") }, Action(Discard) };Rule { Matches { Domain("|iea.org|") }, Action(Discard) };Rule { Matches { Domain("|libpng.org|") }, Action(Discard) };Rule { Matches { Domain("|igram.io|") }, Action(Discard) };Rule { Matches { Domain("|google.be|") }, Action(Discard) };Rule { Matches { Domain("|boingboing.net|") }, Action(Discard) };Rule { Matches { Domain("|hanime.tv|") }, Action(Discard) };Rule { Matches { Domain("|replit.com|") }, Action(Discard) };Rule { Matches { Domain("|mcas.ms|") }, Action(Discard) };Rule { Matches { Domain("|iowa.gov|") }, Action(Discard) };Rule { Matches { Domain("|homeadvisor.com|") }, Action(Discard) };Rule { Matches { Domain("|inner-active.mobi|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-01.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|freepik.es|") }, Action(Discard) };Rule { Matches { Domain("|manchester.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|athemes.com|") }, Action(Discard) };Rule { Matches { Domain("|toptal.com|") }, Action(Discard) };Rule { Matches { Domain("|livestrong.com|") }, Action(Discard) };Rule { Matches { Domain("|ahajournals.org|") }, Action(Discard) };Rule { Matches { Domain("|steamdb.info|") }, Action(Discard) };Rule { Matches { Domain("|game8.co|") }, Action(Discard) };Rule { Matches { Domain("|dion.ne.jp|") }, Action(Discard) };Rule { Matches { Domain("|doxygen.org|") }, Action(Discard) };Rule { Matches { Domain("|ttd-a.com|") }, Action(Discard) };Rule { Matches { Domain("|hexun.com|") }, Action(Discard) };Rule { Matches { Domain("|stats.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|gmx.net|") }, Action(Discard) };Rule { Matches { Domain("|komoot.com|") }, Action(Discard) };Rule { Matches { Domain("|dailystar.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|mmcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|emirates.com|") }, Action(Discard) };Rule { Matches { Domain("|mobileiron.com|") }, Action(Discard) };Rule { Matches { Domain("|jut.su|") }, Action(Discard) };Rule { Matches { Domain("|northeastern.edu|") }, Action(Discard) };Rule { Matches { Domain("|haberturk.com|") }, Action(Discard) };Rule { Matches { Domain("|lsu.edu|") }, Action(Discard) };Rule { Matches { Domain("|thinkwithgoogle.com|") }, Action(Discard) };Rule { Matches { Domain("|adlightning.com|") }, Action(Discard) };Rule { Matches { Domain("|gao.gov|") }, Action(Discard) };Rule { Matches { Domain("|report.az|") }, Action(Discard) };Rule { Matches { Domain("|heytapmobile.com|") }, Action(Discard) };Rule { Matches { Domain("|peatix.com|") }, Action(Discard) };Rule { Matches { Domain("|spring.io|") }, Action(Discard) };Rule { Matches { Domain("|dnspod.com|") }, Action(Discard) };Rule { Matches { Domain("|documentforce.com|") }, Action(Discard) };Rule { Matches { Domain("|unibet.com|") }, Action(Discard) };Rule { Matches { Domain("|web.de|") }, Action(Discard) };Rule { Matches { Domain("|kooora.com|") }, Action(Discard) };Rule { Matches { Domain("|fanfiction.net|") }, Action(Discard) };Rule { Matches { Domain("|datto.com|") }, Action(Discard) };Rule { Matches { Domain("|bmi.ir|") }, Action(Discard) };Rule { Matches { Domain("|exoclick.com|") }, Action(Discard) };Rule { Matches { Domain("|eloqua.com|") }, Action(Discard) };Rule { Matches { Domain("|buffalo.edu|") }, Action(Discard) };Rule { Matches { Domain("|wakelet.com|") }, Action(Discard) };Rule { Matches { Domain("|epfindia.gov.in|") }, Action(Discard) };Rule { Matches { Domain("|hostinger.in|") }, Action(Discard) };Rule { Matches { Domain("|royalmail.com|") }, Action(Discard) };Rule { Matches { Domain("|google.com.ph|") }, Action(Discard) };Rule { Matches { Domain("|hetzner.com|") }, Action(Discard) };Rule { Matches { Domain("|mimecast.net|") }, Action(Discard) };Rule { Matches { Domain("|fastclick.net|") }, Action(Discard) };Rule { Matches { Domain("|infourok.ru|") }, Action(Discard) };Rule { Matches { Domain("|hybrid.ai|") }, Action(Discard) };Rule { Matches { Domain("|afisha.ru|") }, Action(Discard) };Rule { Matches { Domain("|theathletic.com|") }, Action(Discard) };Rule { Matches { Domain("|lenovomm.com|") }, Action(Discard) };Rule { Matches { Domain("|memcached.org|") }, Action(Discard) };Rule { Matches { Domain("|fbs1-t-msedge.net|") }, Action(Discard) };Rule { Matches { Domain("|xiaoheimi.net|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-22.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|dnscloudflare.net|") }, Action(Discard) };Rule { Matches { Domain("|fwmrm.net|") }, Action(Discard) };Rule { Matches { Domain("|benzinga.com|") }, Action(Discard) };Rule { Matches { Domain("|prnt.sc|") }, Action(Discard) };Rule { Matches { Domain("|herokuspace.com|") }, Action(Discard) };Rule { Matches { Domain("|psychcentral.com|") }, Action(Discard) };Rule { Matches { Domain("|likecs.com|") }, Action(Discard) };Rule { Matches { Domain("|oculus.com|") }, Action(Discard) };Rule { Matches { Domain("|propublica.org|") }, Action(Discard) };Rule { Matches { Domain("|sh.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-06.net|") }, Action(Discard) };Rule { Matches { Domain("|metamask.io|") }, Action(Discard) };Rule { Matches { Domain("|e621.net|") }, Action(Discard) };Rule { Matches { Domain("|dartmouth.edu|") }, Action(Discard) };Rule { Matches { Domain("|wolfram.com|") }, Action(Discard) };Rule { Matches { Domain("|vulture.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-41.com|") }, Action(Discard) };Rule { Matches { Domain("|udacity.com|") }, Action(Discard) };Rule { Matches { Domain("|r7ops.com|") }, Action(Discard) };Rule { Matches { Domain("|the-sun.com|") }, Action(Discard) };Rule { Matches { Domain("|library.lol|") }, Action(Discard) };Rule { Matches { Domain("|jora.com|") }, Action(Discard) };Rule { Matches { Domain("|gopro.com|") }, Action(Discard) };Rule { Matches { Domain("|drugs.com|") }, Action(Discard) };Rule { Matches { Domain("|tapclap.com|") }, Action(Discard) };Rule { Matches { Domain("|linkvertise.com|") }, Action(Discard) };Rule { Matches { Domain("|teambition.com|") }, Action(Discard) };Rule { Matches { Domain("|dtdc.com|") }, Action(Discard) };Rule { Matches { Domain("|google.ae|") }, Action(Discard) };Rule { Matches { Domain("|ak-is2.net|") }, Action(Discard) };Rule { Matches { Domain("|att-idns.net|") }, Action(Discard) };Rule { Matches { Domain("|thrtle.com|") }, Action(Discard) };Rule { Matches { Domain("|px-cloud.net|") }, Action(Discard) };Rule { Matches { Domain("|uw.edu|") }, Action(Discard) };Rule { Matches { Domain("|quickconnect.cn|") }, Action(Discard) };Rule { Matches { Domain("|kremlin.ru|") }, Action(Discard) };Rule { Matches { Domain("|revcontent.com|") }, Action(Discard) };Rule { Matches { Domain("|fortinet.com|") }, Action(Discard) };Rule { Matches { Domain("|dnevnik.ru|") }, Action(Discard) };Rule { Matches { Domain("|ec-lyon.fr|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-46.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|msappproxy.net|") }, Action(Discard) };Rule { Matches { Domain("|sjv.io|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-35.com|") }, Action(Discard) };Rule { Matches { Domain("|vg.no|") }, Action(Discard) };Rule { Matches { Domain("|nvidia.cn|") }, Action(Discard) };Rule { Matches { Domain("|gazprombank.ru|") }, Action(Discard) };Rule { Matches { Domain("|sonos.com|") }, Action(Discard) };Rule { Matches { Domain("|bittorrent.com|") }, Action(Discard) };Rule { Matches { Domain("|gzip.org|") }, Action(Discard) };Rule { Matches { Domain("|czzy01.com|") }, Action(Discard) };Rule { Matches { Domain("|ruliweb.com|") }, Action(Discard) };Rule { Matches { Domain("|statefarm.com|") }, Action(Discard) };Rule { Matches { Domain("|chinanews.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|observer.com|") }, Action(Discard) };Rule { Matches { Domain("|aps.org|") }, Action(Discard) };Rule { Matches { Domain("|goodrx.com|") }, Action(Discard) };Rule { Matches { Domain("|chartbeat.com|") }, Action(Discard) };Rule { Matches { Domain("|kochava.com|") }, Action(Discard) };Rule { Matches { Domain("|raspberrypi.org|") }, Action(Discard) };Rule { Matches { Domain("|vidoomy.com|") }, Action(Discard) };Rule { Matches { Domain("|boxofficemojo.com|") }, Action(Discard) };Rule { Matches { Domain("|privacy-mgmt.com|") }, Action(Discard) };Rule { Matches { Domain("|site.com|") }, Action(Discard) };Rule { Matches { Domain("|lofter.com|") }, Action(Discard) };Rule { Matches { Domain("|blackrock.com|") }, Action(Discard) };Rule { Matches { Domain("|bk6bba-resources.com|") }, Action(Discard) };Rule { Matches { Domain("|nu.nl|") }, Action(Discard) };Rule { Matches { Domain("|zoho.in|") }, Action(Discard) };Rule { Matches { Domain("|elementor.com|") }, Action(Discard) };Rule { Matches { Domain("|fullstory.com|") }, Action(Discard) };Rule { Matches { Domain("|hardened-php.net|") }, Action(Discard) };Rule { Matches { Domain("|dvr163.com|") }, Action(Discard) };Rule { Matches { Domain("|dxc.com|") }, Action(Discard) };Rule { Matches { Domain("|awsapps.com|") }, Action(Discard) };Rule { Matches { Domain("|gamesradar.com|") }, Action(Discard) };Rule { Matches { Domain("|theage.com.au|") }, Action(Discard) };Rule { Matches { Domain("|namebright.com|") }, Action(Discard) };Rule { Matches { Domain("|mercadolibre.com.ve|") }, Action(Discard) };Rule { Matches { Domain("|dnsv4.com|") }, Action(Discard) };Rule { Matches { Domain("|baltimoresun.com|") }, Action(Discard) };Rule { Matches { Domain("|shrm.org|") }, Action(Discard) };Rule { Matches { Domain("|hdtoday.tv|") }, Action(Discard) };Rule { Matches { Domain("|socialblade.com|") }, Action(Discard) };Rule { Matches { Domain("|inscloudgate.net|") }, Action(Discard) };Rule { Matches { Domain("|iqbroker.com|") }, Action(Discard) };Rule { Matches { Domain("|iso.ch|") }, Action(Discard) };Rule { Matches { Domain("|technoratimedia.com|") }, Action(Discard) };Rule { Matches { Domain("|kaiserpermanente.org|") }, Action(Discard) };Rule { Matches { Domain("|acer.com|") }, Action(Discard) };Rule { Matches { Domain("|kubernetes.io|") }, Action(Discard) };Rule { Matches { Domain("|weather.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|bitrix24.com|") }, Action(Discard) };Rule { Matches { Domain("|crpt.ru|") }, Action(Discard) };Rule { Matches { Domain("|viator.com|") }, Action(Discard) };Rule { Matches { Domain("|4.cn|") }, Action(Discard) };Rule { Matches { Domain("|go2cloud.org|") }, Action(Discard) };Rule { Matches { Domain("|bfmtv.com|") }, Action(Discard) };Rule { Matches { Domain("|uminet.ru|") }, Action(Discard) };Rule { Matches { Domain("|drive2.ru|") }, Action(Discard) };Rule { Matches { Domain("|bunny.net|") }, Action(Discard) };Rule { Matches { Domain("|gsxt.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-43.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|bt.co|") }, Action(Discard) };Rule { Matches { Domain("|nber.org|") }, Action(Discard) };Rule { Matches { Domain("|progressive.com|") }, Action(Discard) };Rule { Matches { Domain("|churchofjesuschrist.org|") }, Action(Discard) };Rule { Matches { Domain("|dtvce.com|") }, Action(Discard) };Rule { Matches { Domain("|plala.or.jp|") }, Action(Discard) };Rule { Matches { Domain("|parkingcrew.net|") }, Action(Discard) };Rule { Matches { Domain("|emxdgt.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-44.com|") }, Action(Discard) };Rule { Matches { Domain("|navyfederal.org|") }, Action(Discard) };Rule { Matches { Domain("|nate.com|") }, Action(Discard) };Rule { Matches { Domain("|idnscloud.com|") }, Action(Discard) };Rule { Matches { Domain("|000webhost.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-09.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|google.at|") }, Action(Discard) };Rule { Matches { Domain("|streamtheworld.com|") }, Action(Discard) };Rule { Matches { Domain("|moe.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|cloudwaysapps.com|") }, Action(Discard) };Rule { Matches { Domain("|iknight.lol|") }, Action(Discard) };Rule { Matches { Domain("|vidaahub.com|") }, Action(Discard) };Rule { Matches { Domain("|charter.com|") }, Action(Discard) };Rule { Matches { Domain("|pfizer.com|") }, Action(Discard) };Rule { Matches { Domain("|groww.in|") }, Action(Discard) };Rule { Matches { Domain("|pardot.com|") }, Action(Discard) };Rule { Matches { Domain("|mcdonalds.com|") }, Action(Discard) };Rule { Matches { Domain("|justgiving.com|") }, Action(Discard) };Rule { Matches { Domain("|registry.in|") }, Action(Discard) };Rule { Matches { Domain("|techsmith.com|") }, Action(Discard) };Rule { Matches { Domain("|google.com.my|") }, Action(Discard) };Rule { Matches { Domain("|yadongtube.net|") }, Action(Discard) };Rule { Matches { Domain("|amagi.tv|") }, Action(Discard) };Rule { Matches { Domain("|producthunt.com|") }, Action(Discard) };Rule { Matches { Domain("|overstock.com|") }, Action(Discard) };Rule { Matches { Domain("|redditmedia.com|") }, Action(Discard) };Rule { Matches { Domain("|ucsc.edu|") }, Action(Discard) };Rule { Matches { Domain("|scopus.com|") }, Action(Discard) };Rule { Matches { Domain("|bcg.com|") }, Action(Discard) };Rule { Matches { Domain("|etrade.com|") }, Action(Discard) };Rule { Matches { Domain("|convertkit.com|") }, Action(Discard) };Rule { Matches { Domain("|alphonso.tv|") }, Action(Discard) };Rule { Matches { Domain("|tanium.com|") }, Action(Discard) };Rule { Matches { Domain("|missouri.edu|") }, Action(Discard) };Rule { Matches { Domain("|mo.gov|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-35.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|runescape.wiki|") }, Action(Discard) };Rule { Matches { Domain("|footprintdns.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-35.org|") }, Action(Discard) };Rule { Matches { Domain("|vonedge.com|") }, Action(Discard) };Rule { Matches { Domain("|msdn.com|") }, Action(Discard) };Rule { Matches { Domain("|ifixit.com|") }, Action(Discard) };Rule { Matches { Domain("|uconn.edu|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-19.net|") }, Action(Discard) };Rule { Matches { Domain("|versatel.de|") }, Action(Discard) };Rule { Matches { Domain("|otzovik.com|") }, Action(Discard) };Rule { Matches { Domain("|samsungosp.com|") }, Action(Discard) };Rule { Matches { Domain("|mailerlite.com|") }, Action(Discard) };Rule { Matches { Domain("|awin1.com|") }, Action(Discard) };Rule { Matches { Domain("|plex.tv|") }, Action(Discard) };Rule { Matches { Domain("|medtronic.com|") }, Action(Discard) };Rule { Matches { Domain("|dhgate.com|") }, Action(Discard) };Rule { Matches { Domain("|knowbe4.com|") }, Action(Discard) };Rule { Matches { Domain("|suntimes.com|") }, Action(Discard) };Rule { Matches { Domain("|mundodeportivo.com|") }, Action(Discard) };Rule { Matches { Domain("|akamai.com|") }, Action(Discard) };Rule { Matches { Domain("|google.ro|") }, Action(Discard) };Rule { Matches { Domain("|unimelb.edu.au|") }, Action(Discard) };Rule { Matches { Domain("|aif.ru|") }, Action(Discard) };Rule { Matches { Domain("|freep.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-18.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|viki.com|") }, Action(Discard) };Rule { Matches { Domain("|post-gazette.com|") }, Action(Discard) };Rule { Matches { Domain("|xmlsoft.org|") }, Action(Discard) };Rule { Matches { Domain("|marthastewart.com|") }, Action(Discard) };Rule { Matches { Domain("|ib-ibi.com|") }, Action(Discard) };Rule { Matches { Domain("|groupme.com|") }, Action(Discard) };Rule { Matches { Domain("|bbci.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|bookdepository.com|") }, Action(Discard) };Rule { Matches { Domain("|firstvds.ru|") }, Action(Discard) };Rule { Matches { Domain("|tiny.cc|") }, Action(Discard) };Rule { Matches { Domain("|pantip.com|") }, Action(Discard) };Rule { Matches { Domain("|aylanetworks.com|") }, Action(Discard) };Rule { Matches { Domain("|pressreader.com|") }, Action(Discard) };Rule { Matches { Domain("|javgg.net|") }, Action(Discard) };Rule { Matches { Domain("|translate.goog|") }, Action(Discard) };Rule { Matches { Domain("|medicinenet.com|") }, Action(Discard) };Rule { Matches { Domain("|biorxiv.org|") }, Action(Discard) };Rule { Matches { Domain("|ctfassets.net|") }, Action(Discard) };Rule { Matches { Domain("|yomiuri.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|pch.com|") }, Action(Discard) };Rule { Matches { Domain("|profi.ru|") }, Action(Discard) };Rule { Matches { Domain("|draftkings.com|") }, Action(Discard) };Rule { Matches { Domain("|onenote.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-39.com|") }, Action(Discard) };Rule { Matches { Domain("|chewy.com|") }, Action(Discard) };Rule { Matches { Domain("|cachefly.net|") }, Action(Discard) };Rule { Matches { Domain("|myvzw.com|") }, Action(Discard) };Rule { Matches { Domain("|yota.ru|") }, Action(Discard) };Rule { Matches { Domain("|byteoversea.com|") }, Action(Discard) };Rule { Matches { Domain("|gamestop.com|") }, Action(Discard) };Rule { Matches { Domain("|pages.dev|") }, Action(Discard) };Rule { Matches { Domain("|gdz.ru|") }, Action(Discard) };Rule { Matches { Domain("|kaltura.com|") }, Action(Discard) };Rule { Matches { Domain("|maine.gov|") }, Action(Discard) };Rule { Matches { Domain("|uky.edu|") }, Action(Discard) };Rule { Matches { Domain("|webdav.org|") }, Action(Discard) };Rule { Matches { Domain("|backblaze.com|") }, Action(Discard) };Rule { Matches { Domain("|petfinder.com|") }, Action(Discard) };Rule { Matches { Domain("|evotor.ru|") }, Action(Discard) };Rule { Matches { Domain("|google.gr|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-16.com|") }, Action(Discard) };Rule { Matches { Domain("|news24.com|") }, Action(Discard) };Rule { Matches { Domain("|transip.nl|") }, Action(Discard) };Rule { Matches { Domain("|miniclippt.com|") }, Action(Discard) };Rule { Matches { Domain("|7-zip.org|") }, Action(Discard) };Rule { Matches { Domain("|websupport.sk|") }, Action(Discard) };Rule { Matches { Domain("|gnome.org|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-03.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|govdelivery.com|") }, Action(Discard) };Rule { Matches { Domain("|telefonica.de|") }, Action(Discard) };Rule { Matches { Domain("|flightradar24.com|") }, Action(Discard) };Rule { Matches { Domain("|freetype.org|") }, Action(Discard) };Rule { Matches { Domain("|staples.com|") }, Action(Discard) };Rule { Matches { Domain("|collider.com|") }, Action(Discard) };Rule { Matches { Domain("|thebalance.com|") }, Action(Discard) };Rule { Matches { Domain("|gscontxt.net|") }, Action(Discard) };Rule { Matches { Domain("|dcloud.net.cn|") }, Action(Discard) };Rule { Matches { Domain("|sandiegouniontribune.com|") }, Action(Discard) };Rule { Matches { Domain("|turbopages.org|") }, Action(Discard) };Rule { Matches { Domain("|channelnewsasia.com|") }, Action(Discard) };Rule { Matches { Domain("|tide.co|") }, Action(Discard) };Rule { Matches { Domain("|parsely.com|") }, Action(Discard) };Rule { Matches { Domain("|rivals.com|") }, Action(Discard) };Rule { Matches { Domain("|piliapp.com|") }, Action(Discard) };Rule { Matches { Domain("|macomnet.ru|") }, Action(Discard) };Rule { Matches { Domain("|bamboohr.com|") }, Action(Discard) };Rule { Matches { Domain("|fozzy.com|") }, Action(Discard) };Rule { Matches { Domain("|serverfault.com|") }, Action(Discard) };Rule { Matches { Domain("|xhamster3.com|") }, Action(Discard) };Rule { Matches { Domain("|os-lb.com|") }, Action(Discard) };Rule { Matches { Domain("|dmca.com|") }, Action(Discard) };Rule { Matches { Domain("|nsfc.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|plex.direct|") }, Action(Discard) };Rule { Matches { Domain("|emailvision.net|") }, Action(Discard) };Rule { Matches { Domain("|rsasecurity.com|") }, Action(Discard) };Rule { Matches { Domain("|odcoc.com|") }, Action(Discard) };Rule { Matches { Domain("|polyfill.io|") }, Action(Discard) };Rule { Matches { Domain("|localytics.com|") }, Action(Discard) };Rule { Matches { Domain("|oregon.gov|") }, Action(Discard) };Rule { Matches { Domain("|tie.cl|") }, Action(Discard) };Rule { Matches { Domain("|mydramalist.com|") }, Action(Discard) };Rule { Matches { Domain("|sfdc.cl|") }, Action(Discard) };Rule { Matches { Domain("|mojohost.com|") }, Action(Discard) };Rule { Matches { Domain("|pornhubpremium.com|") }, Action(Discard) };Rule { Matches { Domain("|op.gg|") }, Action(Discard) };Rule { Matches { Domain("|biancheng.net|") }, Action(Discard) };Rule { Matches { Domain("|usmagazine.com|") }, Action(Discard) };Rule { Matches { Domain("|imperial.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|morningstar.com|") }, Action(Discard) };Rule { Matches { Domain("|movetv.com|") }, Action(Discard) };Rule { Matches { Domain("|g2afse.com|") }, Action(Discard) };Rule { Matches { Domain("|mfms.ru|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-20.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-07.com|") }, Action(Discard) };Rule { Matches { Domain("|colossusssp.com|") }, Action(Discard) };Rule { Matches { Domain("|gccdn.net|") }, Action(Discard) };Rule { Matches { Domain("|apachelounge.com|") }, Action(Discard) };Rule { Matches { Domain("|jooble.org|") }, Action(Discard) };Rule { Matches { Domain("|rosneft.ru|") }, Action(Discard) };Rule { Matches { Domain("|51.la|") }, Action(Discard) };Rule { Matches { Domain("|rebrand.ly|") }, Action(Discard) };Rule { Matches { Domain("|pelisplus.lat|") }, Action(Discard) };Rule { Matches { Domain("|myflixer.to|") }, Action(Discard) };Rule { Matches { Domain("|senderscore.com|") }, Action(Discard) };Rule { Matches { Domain("|go.dev|") }, Action(Discard) };Rule { Matches { Domain("|nme.com|") }, Action(Discard) };Rule { Matches { Domain("|sophosupd.com|") }, Action(Discard) };Rule { Matches { Domain("|nic.io|") }, Action(Discard) };Rule { Matches { Domain("|chinatimes.com|") }, Action(Discard) };Rule { Matches { Domain("|incometax.gov.in|") }, Action(Discard) };Rule { Matches { Domain("|apple-dns.cn|") }, Action(Discard) };Rule { Matches { Domain("|moneysupermarket.com|") }, Action(Discard) };Rule { Matches { Domain("|harpersbazaar.com|") }, Action(Discard) };Rule { Matches { Domain("|spiceworks.com|") }, Action(Discard) };Rule { Matches { Domain("|nos.nl|") }, Action(Discard) };Rule { Matches { Domain("|mrdeepfakes.com|") }, Action(Discard) };Rule { Matches { Domain("|postrelease.com|") }, Action(Discard) };Rule { Matches { Domain("|dnsnode.net|") }, Action(Discard) };Rule { Matches { Domain("|cmd.su|") }, Action(Discard) };Rule { Matches { Domain("|printercloud.com|") }, Action(Discard) };Rule { Matches { Domain("|ltn.com.tw|") }, Action(Discard) };Rule { Matches { Domain("|yellowblue.io|") }, Action(Discard) };Rule { Matches { Domain("|matomo.org|") }, Action(Discard) };Rule { Matches { Domain("|sbrf.ru|") }, Action(Discard) };Rule { Matches { Domain("|wallpapers.com|") }, Action(Discard) };Rule { Matches { Domain("|gate.io|") }, Action(Discard) };Rule { Matches { Domain("|ajc.com|") }, Action(Discard) };Rule { Matches { Domain("|geoedge.be|") }, Action(Discard) };Rule { Matches { Domain("|bfmio.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-46.com|") }, Action(Discard) };Rule { Matches { Domain("|daimler.com|") }, Action(Discard) };Rule { Matches { Domain("|aclu.org|") }, Action(Discard) };Rule { Matches { Domain("|onlamp.com|") }, Action(Discard) };Rule { Matches { Domain("|eclipse.org|") }, Action(Discard) };Rule { Matches { Domain("|cbs.com|") }, Action(Discard) };Rule { Matches { Domain("|ubs.com|") }, Action(Discard) };Rule { Matches { Domain("|vivoglobal.com|") }, Action(Discard) };Rule { Matches { Domain("|kompas.com|") }, Action(Discard) };Rule { Matches { Domain("|nap.edu|") }, Action(Discard) };Rule { Matches { Domain("|uu.net|") }, Action(Discard) };Rule { Matches { Domain("|honda.com|") }, Action(Discard) };Rule { Matches { Domain("|ecollege.com|") }, Action(Discard) };Rule { Matches { Domain("|ukr.net|") }, Action(Discard) };Rule { Matches { Domain("|shrinke.me|") }, Action(Discard) };Rule { Matches { Domain("|abc.com|") }, Action(Discard) };Rule { Matches { Domain("|takealot.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-33.com|") }, Action(Discard) };Rule { Matches { Domain("|citrixworkspacesapi.net|") }, Action(Discard) };Rule { Matches { Domain("|zdf.de|") }, Action(Discard) };Rule { Matches { Domain("|usg.edu|") }, Action(Discard) };Rule { Matches { Domain("|bidmachine.io|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-47.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|talend.com|") }, Action(Discard) };Rule { Matches { Domain("|ml.com|") }, Action(Discard) };Rule { Matches { Domain("|ctadns.cn|") }, Action(Discard) };Rule { Matches { Domain("|ns.ua|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-02.com|") }, Action(Discard) };Rule { Matches { Domain("|afdian.net|") }, Action(Discard) };Rule { Matches { Domain("|laravel.com|") }, Action(Discard) };Rule { Matches { Domain("|superpal.com|") }, Action(Discard) };Rule { Matches { Domain("|ucr.edu|") }, Action(Discard) };Rule { Matches { Domain("|enlightenment.org|") }, Action(Discard) };Rule { Matches { Domain("|pornez.net|") }, Action(Discard) };Rule { Matches { Domain("|libvio.me|") }, Action(Discard) };Rule { Matches { Domain("|demorgen.be|") }, Action(Discard) };Rule { Matches { Domain("|zdassets.com|") }, Action(Discard) };Rule { Matches { Domain("|iolo.net|") }, Action(Discard) };Rule { Matches { Domain("|kinghost.com.br|") }, Action(Discard) };Rule { Matches { Domain("|virtualbox.org|") }, Action(Discard) };Rule { Matches { Domain("|bnf.fr|") }, Action(Discard) };Rule { Matches { Domain("|aftonbladet.se|") }, Action(Discard) };Rule { Matches { Domain("|clicktripz.com|") }, Action(Discard) };Rule { Matches { Domain("|legislation.gov.uk|") }, Action(Discard) };Rule { Matches { Domain("|kxcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|google.se|") }, Action(Discard) };Rule { Matches { Domain("|sextb.net|") }, Action(Discard) };Rule { Matches { Domain("|idealista.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-00.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|fastcgi.com|") }, Action(Discard) };Rule { Matches { Domain("|mongodb.net|") }, Action(Discard) };Rule { Matches { Domain("|porsche.com|") }, Action(Discard) };Rule { Matches { Domain("|smadex.com|") }, Action(Discard) };Rule { Matches { Domain("|seek.com.au|") }, Action(Discard) };Rule { Matches { Domain("|9to5mac.com|") }, Action(Discard) };Rule { Matches { Domain("|akstat.io|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-13.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-05.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|gsu.edu|") }, Action(Discard) };Rule { Matches { Domain("|mecknc.gov|") }, Action(Discard) };Rule { Matches { Domain("|dianxiaomi.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-52.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|ipvanish.com|") }, Action(Discard) };Rule { Matches { Domain("|pianshen.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-59.com|") }, Action(Discard) };Rule { Matches { Domain("|ucf.edu|") }, Action(Discard) };Rule { Matches { Domain("|c212.net|") }, Action(Discard) };Rule { Matches { Domain("|snapkit.com|") }, Action(Discard) };Rule { Matches { Domain("|ci123.com|") }, Action(Discard) };Rule { Matches { Domain("|uninet.net.mx|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-01.com|") }, Action(Discard) };Rule { Matches { Domain("|independent.ie|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-18.net|") }, Action(Discard) };Rule { Matches { Domain("|ets.org|") }, Action(Discard) };Rule { Matches { Domain("|vonage.com|") }, Action(Discard) };Rule { Matches { Domain("|serverwatch.com|") }, Action(Discard) };Rule { Matches { Domain("|gla.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|gannett-dns.com|") }, Action(Discard) };Rule { Matches { Domain("|navidns.net|") }, Action(Discard) };Rule { Matches { Domain("|mangakakalot.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-21.net|") }, Action(Discard) };Rule { Matches { Domain("|tedata.net|") }, Action(Discard) };Rule { Matches { Domain("|zotero.org|") }, Action(Discard) };Rule { Matches { Domain("|wikiquote.org|") }, Action(Discard) };Rule { Matches { Domain("|pcbeta.com|") }, Action(Discard) };Rule { Matches { Domain("|58pic.com|") }, Action(Discard) };Rule { Matches { Domain("|tianya.cn|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-48.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|milliyet.com.tr|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-42.com|") }, Action(Discard) };Rule { Matches { Domain("|ttdns2.com|") }, Action(Discard) };Rule { Matches { Domain("|leparisien.fr|") }, Action(Discard) };Rule { Matches { Domain("|modsecurity.org|") }, Action(Discard) };Rule { Matches { Domain("|g2.com|") }, Action(Discard) };Rule { Matches { Domain("|emory.edu|") }, Action(Discard) };Rule { Matches { Domain("|mioffice.cn|") }, Action(Discard) };Rule { Matches { Domain("|jst.go.jp|") }, Action(Discard) };Rule { Matches { Domain("|aig.com|") }, Action(Discard) };Rule { Matches { Domain("|fivethirtyeight.com|") }, Action(Discard) };Rule { Matches { Domain("|ouest-france.fr|") }, Action(Discard) };Rule { Matches { Domain("|finalfantasyxiv.com|") }, Action(Discard) };Rule { Matches { Domain("|duplichecker.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-24.com|") }, Action(Discard) };Rule { Matches { Domain("|signupgenius.com|") }, Action(Discard) };Rule { Matches { Domain("|delicious.com|") }, Action(Discard) };Rule { Matches { Domain("|wolterskluwer.com|") }, Action(Discard) };Rule { Matches { Domain("|mil.ru|") }, Action(Discard) };Rule { Matches { Domain("|skwstat.ru|") }, Action(Discard) };Rule { Matches { Domain("|3m.com|") }, Action(Discard) };Rule { Matches { Domain("|pscp.tv|") }, Action(Discard) };Rule { Matches { Domain("|centurylink.net|") }, Action(Discard) };Rule { Matches { Domain("|wish.com|") }, Action(Discard) };Rule { Matches { Domain("|transfermarkt.com|") }, Action(Discard) };Rule { Matches { Domain("|cedexis.com|") }, Action(Discard) };Rule { Matches { Domain("|pdf2go.com|") }, Action(Discard) };Rule { Matches { Domain("|etc.uz|") }, Action(Discard) };Rule { Matches { Domain("|coub.com|") }, Action(Discard) };Rule { Matches { Domain("|royalsocietypublishing.org|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-30.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|farfetch.com|") }, Action(Discard) };Rule { Matches { Domain("|counterpane.com|") }, Action(Discard) };Rule { Matches { Domain("|biography.com|") }, Action(Discard) };Rule { Matches { Domain("|orest-vlv.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-49.com|") }, Action(Discard) };Rule { Matches { Domain("|proof-dns.com|") }, Action(Discard) };Rule { Matches { Domain("|goto.com|") }, Action(Discard) };Rule { Matches { Domain("|royalbank.com|") }, Action(Discard) };Rule { Matches { Domain("|kidshealth.org|") }, Action(Discard) };Rule { Matches { Domain("|rit.edu|") }, Action(Discard) };Rule { Matches { Domain("|globalpay.com|") }, Action(Discard) };Rule { Matches { Domain("|bleepingcomputer.com|") }, Action(Discard) };Rule { Matches { Domain("|moma.org|") }, Action(Discard) };Rule { Matches { Domain("|createjs.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-12.com|") }, Action(Discard) };Rule { Matches { Domain("|dy2018.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-27.com|") }, Action(Discard) };Rule { Matches { Domain("|skillshare.com|") }, Action(Discard) };Rule { Matches { Domain("|rttv.ru|") }, Action(Discard) };Rule { Matches { Domain("|sbs.com.au|") }, Action(Discard) };Rule { Matches { Domain("|iprojects.ru|") }, Action(Discard) };Rule { Matches { Domain("|xhday.com|") }, Action(Discard) };Rule { Matches { Domain("|edmunds.com|") }, Action(Discard) };Rule { Matches { Domain("|systemdns.com|") }, Action(Discard) };Rule { Matches { Domain("|packet8.net|") }, Action(Discard) };Rule { Matches { Domain("|simplilearn.com|") }, Action(Discard) };Rule { Matches { Domain("|acuityplatform.com|") }, Action(Discard) };Rule { Matches { Domain("|monash.edu|") }, Action(Discard) };Rule { Matches { Domain("|adkernel.com|") }, Action(Discard) };Rule { Matches { Domain("|sleepycat.com|") }, Action(Discard) };Rule { Matches { Domain("|filezilla-project.org|") }, Action(Discard) };Rule { Matches { Domain("|smashingmagazine.com|") }, Action(Discard) };Rule { Matches { Domain("|bgdns.net|") }, Action(Discard) };Rule { Matches { Domain("|maryland.gov|") }, Action(Discard) };Rule { Matches { Domain("|avira-vpn.com|") }, Action(Discard) };Rule { Matches { Domain("|degruyter.com|") }, Action(Discard) };Rule { Matches { Domain("|queue-it.net|") }, Action(Discard) };Rule { Matches { Domain("|aetna.com|") }, Action(Discard) };Rule { Matches { Domain("|kuleuven.be|") }, Action(Discard) };Rule { Matches { Domain("|clarivate.com|") }, Action(Discard) };Rule { Matches { Domain("|ilex.by|") }, Action(Discard) };Rule { Matches { Domain("|todoist.com|") }, Action(Discard) };Rule { Matches { Domain("|msu.ru|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-48.com|") }, Action(Discard) };Rule { Matches { Domain("|daraz.pk|") }, Action(Discard) };Rule { Matches { Domain("|bscscan.com|") }, Action(Discard) };Rule { Matches { Domain("|fextralife.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-10.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|wcdnga.com|") }, Action(Discard) };Rule { Matches { Domain("|cbp.gov|") }, Action(Discard) };Rule { Matches { Domain("|utah.gov|") }, Action(Discard) };Rule { Matches { Domain("|tubemogul.com|") }, Action(Discard) };Rule { Matches { Domain("|mlive.com|") }, Action(Discard) };Rule { Matches { Domain("|udayton.edu|") }, Action(Discard) };Rule { Matches { Domain("|asana.biz|") }, Action(Discard) };Rule { Matches { Domain("|trifle.net|") }, Action(Discard) };Rule { Matches { Domain("|blogspot.com.es|") }, Action(Discard) };Rule { Matches { Domain("|adtelligent.com|") }, Action(Discard) };Rule { Matches { Domain("|haaretz.com|") }, Action(Discard) };Rule { Matches { Domain("|caranddriver.com|") }, Action(Discard) };Rule { Matches { Domain("|clickbank.com|") }, Action(Discard) };Rule { Matches { Domain("|motherjones.com|") }, Action(Discard) };Rule { Matches { Domain("|gaoding.com|") }, Action(Discard) };Rule { Matches { Domain("|subscene.com|") }, Action(Discard) };Rule { Matches { Domain("|glamour.com|") }, Action(Discard) };Rule { Matches { Domain("|tinypng.com|") }, Action(Discard) };Rule { Matches { Domain("|complex.com|") }, Action(Discard) };Rule { Matches { Domain("|stockx.com|") }, Action(Discard) };Rule { Matches { Domain("|barracuda.com|") }, Action(Discard) };Rule { Matches { Domain("|4dex.io|") }, Action(Discard) };Rule { Matches { Domain("|fas.org|") }, Action(Discard) };Rule { Matches { Domain("|clarium.io|") }, Action(Discard) };Rule { Matches { Domain("|znds.com|") }, Action(Discard) };Rule { Matches { Domain("|mynet.com|") }, Action(Discard) };Rule { Matches { Domain("|smartthings.com|") }, Action(Discard) };Rule { Matches { Domain("|evidon.com|") }, Action(Discard) };Rule { Matches { Domain("|wassenaar.org|") }, Action(Discard) };Rule { Matches { Domain("|right.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|classdojo.com|") }, Action(Discard) };Rule { Matches { Domain("|sbcglobal.net|") }, Action(Discard) };Rule { Matches { Domain("|cigna.com|") }, Action(Discard) };Rule { Matches { Domain("|conferdeploy.net|") }, Action(Discard) };Rule { Matches { Domain("|apartments.com|") }, Action(Discard) };Rule { Matches { Domain("|home-assistant.io|") }, Action(Discard) };Rule { Matches { Domain("|gtm-a2b2.com|") }, Action(Discard) };Rule { Matches { Domain("|kijiji.ca|") }, Action(Discard) };Rule { Matches { Domain("|justpaste.it|") }, Action(Discard) };Rule { Matches { Domain("|s-onetag.com|") }, Action(Discard) };Rule { Matches { Domain("|8x8.vc|") }, Action(Discard) };Rule { Matches { Domain("|azurecr.io|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-38.com|") }, Action(Discard) };Rule { Matches { Domain("|wsdvs.info|") }, Action(Discard) };Rule { Matches { Domain("|10jqka.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|tubi.io|") }, Action(Discard) };Rule { Matches { Domain("|cbr.com|") }, Action(Discard) };Rule { Matches { Domain("|xunniufile.com|") }, Action(Discard) };Rule { Matches { Domain("|thespruceeats.com|") }, Action(Discard) };Rule { Matches { Domain("|lulu.com|") }, Action(Discard) };Rule { Matches { Domain("|theintercept.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-21.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|browser-intake-datadoghq.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-43.com|") }, Action(Discard) };Rule { Matches { Domain("|ppomppu.co.kr|") }, Action(Discard) };Rule { Matches { Domain("|kommersant.ru|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-22.com|") }, Action(Discard) };Rule { Matches { Domain("|eagleeyenetworks.com|") }, Action(Discard) };Rule { Matches { Domain("|looker.com|") }, Action(Discard) };Rule { Matches { Domain("|kbb.com|") }, Action(Discard) };Rule { Matches { Domain("|adage.com|") }, Action(Discard) };Rule { Matches { Domain("|found.io|") }, Action(Discard) };Rule { Matches { Domain("|sfchronicle.com|") }, Action(Discard) };Rule { Matches { Domain("|livescore.com|") }, Action(Discard) };Rule { Matches { Domain("|canon.com|") }, Action(Discard) };Rule { Matches { Domain("|google.co.il|") }, Action(Discard) };Rule { Matches { Domain("|connatix.com|") }, Action(Discard) };Rule { Matches { Domain("|programiz.com|") }, Action(Discard) };Rule { Matches { Domain("|oceanengine.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-39.net|") }, Action(Discard) };Rule { Matches { Domain("|nhtsa.gov|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-37.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|lazada.co.id|") }, Action(Discard) };Rule { Matches { Domain("|digitaljournal.com|") }, Action(Discard) };Rule { Matches { Domain("|tfl.gov.uk|") }, Action(Discard) };Rule { Matches { Domain("|emalls.ir|") }, Action(Discard) };Rule { Matches { Domain("|ameritrade.com|") }, Action(Discard) };Rule { Matches { Domain("|uu.nl|") }, Action(Discard) };Rule { Matches { Domain("|aboutamazon.com|") }, Action(Discard) };Rule { Matches { Domain("|bartleby.com|") }, Action(Discard) };Rule { Matches { Domain("|vsco.co|") }, Action(Discard) };Rule { Matches { Domain("|fox.com|") }, Action(Discard) };Rule { Matches { Domain("|ocn.ne.jp|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-45.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|codeproject.com|") }, Action(Discard) };Rule { Matches { Domain("|webnode.com|") }, Action(Discard) };Rule { Matches { Domain("|rapidgator.net|") }, Action(Discard) };Rule { Matches { Domain("|overdrive.com|") }, Action(Discard) };Rule { Matches { Domain("|wswebcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|cnrs.fr|") }, Action(Discard) };Rule { Matches { Domain("|yle.fi|") }, Action(Discard) };Rule { Matches { Domain("|pdflib.com|") }, Action(Discard) };Rule { Matches { Domain("|ethdisco.net|") }, Action(Discard) };Rule { Matches { Domain("|uvic.ca|") }, Action(Discard) };Rule { Matches { Domain("|storygize.net|") }, Action(Discard) };Rule { Matches { Domain("|gab.com|") }, Action(Discard) };Rule { Matches { Domain("|lanzoub.com|") }, Action(Discard) };Rule { Matches { Domain("|redditstatic.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-45.com|") }, Action(Discard) };Rule { Matches { Domain("|ad.gt|") }, Action(Discard) };Rule { Matches { Domain("|macworld.com|") }, Action(Discard) };Rule { Matches { Domain("|ijg.org|") }, Action(Discard) };Rule { Matches { Domain("|wixmp.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-29.net|") }, Action(Discard) };Rule { Matches { Domain("|richaudience.com|") }, Action(Discard) };Rule { Matches { Domain("|alternativeto.net|") }, Action(Discard) };Rule { Matches { Domain("|bizrate.com|") }, Action(Discard) };Rule { Matches { Domain("|acast.com|") }, Action(Discard) };Rule { Matches { Domain("|mindbodyonline.com|") }, Action(Discard) };Rule { Matches { Domain("|smartrecruiters.com|") }, Action(Discard) };Rule { Matches { Domain("|mbc.net|") }, Action(Discard) };Rule { Matches { Domain("|dotvndns.vn|") }, Action(Discard) };Rule { Matches { Domain("|nheos.com|") }, Action(Discard) };Rule { Matches { Domain("|livechat.com|") }, Action(Discard) };Rule { Matches { Domain("|military.com|") }, Action(Discard) };Rule { Matches { Domain("|microsoftazuread-sso.com|") }, Action(Discard) };Rule { Matches { Domain("|aibixby.com|") }, Action(Discard) };Rule { Matches { Domain("|browserstack.com|") }, Action(Discard) };Rule { Matches { Domain("|liveperson.net|") }, Action(Discard) };Rule { Matches { Domain("|turbify.com|") }, Action(Discard) };Rule { Matches { Domain("|wswebpic.com|") }, Action(Discard) };Rule { Matches { Domain("|azure.net|") }, Action(Discard) };Rule { Matches { Domain("|goethe.de|") }, Action(Discard) };Rule { Matches { Domain("|epik.com|") }, Action(Discard) };Rule { Matches { Domain("|sciencealert.com|") }, Action(Discard) };Rule { Matches { Domain("|webthing.com|") }, Action(Discard) };Rule { Matches { Domain("|icourse163.org|") }, Action(Discard) };Rule { Matches { Domain("|gog.com|") }, Action(Discard) };Rule { Matches { Domain("|mktoresp.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-60.com|") }, Action(Discard) };Rule { Matches { Domain("|tsyndicate.com|") }, Action(Discard) };Rule { Matches { Domain("|google.lk|") }, Action(Discard) };Rule { Matches { Domain("|supercell.com|") }, Action(Discard) };Rule { Matches { Domain("|eum-appdynamics.com|") }, Action(Discard) };Rule { Matches { Domain("|freetds.org|") }, Action(Discard) };Rule { Matches { Domain("|narvar.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-08.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|zenlogic.net|") }, Action(Discard) };Rule { Matches { Domain("|ebayimg.com|") }, Action(Discard) };Rule { Matches { Domain("|documentcloud.org|") }, Action(Discard) };Rule { Matches { Domain("|isappcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|alfabank.ru|") }, Action(Discard) };Rule { Matches { Domain("|baeldung.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-28.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|jiathis.com|") }, Action(Discard) };Rule { Matches { Domain("|cardinalcommerce.com|") }, Action(Discard) };Rule { Matches { Domain("|aniview.com|") }, Action(Discard) };Rule { Matches { Domain("|boardgamegeek.com|") }, Action(Discard) };Rule { Matches { Domain("|gst.gov.in|") }, Action(Discard) };Rule { Matches { Domain("|pitchfork.com|") }, Action(Discard) };Rule { Matches { Domain("|cpta.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|bhg.com|") }, Action(Discard) };Rule { Matches { Domain("|sbnation.com|") }, Action(Discard) };Rule { Matches { Domain("|clean.gg|") }, Action(Discard) };Rule { Matches { Domain("|lanzoue.com|") }, Action(Discard) };Rule { Matches { Domain("|mini.de|") }, Action(Discard) };Rule { Matches { Domain("|yektanet.com|") }, Action(Discard) };Rule { Matches { Domain("|leeds.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-00.com|") }, Action(Discard) };Rule { Matches { Domain("|emarketer.com|") }, Action(Discard) };Rule { Matches { Domain("|aa.com.tr|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-04.org|") }, Action(Discard) };Rule { Matches { Domain("|filimo.com|") }, Action(Discard) };Rule { Matches { Domain("|realsimple.com|") }, Action(Discard) };Rule { Matches { Domain("|sarkariresult.com|") }, Action(Discard) };Rule { Matches { Domain("|qualcomm.com|") }, Action(Discard) };Rule { Matches { Domain("|sci-hub.ru|") }, Action(Discard) };Rule { Matches { Domain("|outlookindia.com|") }, Action(Discard) };Rule { Matches { Domain("|trellix.com|") }, Action(Discard) };Rule { Matches { Domain("|kemdikbud.go.id|") }, Action(Discard) };Rule { Matches { Domain("|logi.com|") }, Action(Discard) };Rule { Matches { Domain("|2annalea.com|") }, Action(Discard) };Rule { Matches { Domain("|1e100.net|") }, Action(Discard) };Rule { Matches { Domain("|adotmob.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-23.com|") }, Action(Discard) };Rule { Matches { Domain("|gtmetrix.com|") }, Action(Discard) };Rule { Matches { Domain("|deere.com|") }, Action(Discard) };Rule { Matches { Domain("|sony.tv|") }, Action(Discard) };Rule { Matches { Domain("|zerocdn.com|") }, Action(Discard) };Rule { Matches { Domain("|webofscience.com|") }, Action(Discard) };Rule { Matches { Domain("|centrastage.net|") }, Action(Discard) };Rule { Matches { Domain("|redis.io|") }, Action(Discard) };Rule { Matches { Domain("|rajasthan.gov.in|") }, Action(Discard) };Rule { Matches { Domain("|adition.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-23.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|abovedomains.com|") }, Action(Discard) };Rule { Matches { Domain("|familysearch.org|") }, Action(Discard) };Rule { Matches { Domain("|copart.com|") }, Action(Discard) };Rule { Matches { Domain("|health.com|") }, Action(Discard) };Rule { Matches { Domain("|hola.org|") }, Action(Discard) };Rule { Matches { Domain("|alikunlun.net|") }, Action(Discard) };Rule { Matches { Domain("|lothar.com|") }, Action(Discard) };Rule { Matches { Domain("|ssense.com|") }, Action(Discard) };Rule { Matches { Domain("|insightexpressai.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-20.com|") }, Action(Discard) };Rule { Matches { Domain("|alamy.com|") }, Action(Discard) };Rule { Matches { Domain("|apache-ssl.org|") }, Action(Discard) };Rule { Matches { Domain("|sapsf.eu|") }, Action(Discard) };Rule { Matches { Domain("|renrendoc.com|") }, Action(Discard) };Rule { Matches { Domain("|usen.ad.jp|") }, Action(Discard) };Rule { Matches { Domain("|tesco.com|") }, Action(Discard) };Rule { Matches { Domain("|soap2day.ac|") }, Action(Discard) };Rule { Matches { Domain("|hdslb.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-30.com|") }, Action(Discard) };Rule { Matches { Domain("|bakusai.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-58.com|") }, Action(Discard) };Rule { Matches { Domain("|nato.int|") }, Action(Discard) };Rule { Matches { Domain("|ad.nl|") }, Action(Discard) };Rule { Matches { Domain("|pb.com|") }, Action(Discard) };Rule { Matches { Domain("|jeuxvideo.com|") }, Action(Discard) };Rule { Matches { Domain("|iplanet.com|") }, Action(Discard) };Rule { Matches { Domain("|oppo.com|") }, Action(Discard) };Rule { Matches { Domain("|imooc.com|") }, Action(Discard) };Rule { Matches { Domain("|wa.link|") }, Action(Discard) };Rule { Matches { Domain("|mail.com|") }, Action(Discard) };Rule { Matches { Domain("|ons.gov.uk|") }, Action(Discard) };Rule { Matches { Domain("|pngegg.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-33.net|") }, Action(Discard) };Rule { Matches { Domain("|moengage.com|") }, Action(Discard) };Rule { Matches { Domain("|hwg.org|") }, Action(Discard) };Rule { Matches { Domain("|arcticwolf.net|") }, Action(Discard) };Rule { Matches { Domain("|eur.nl|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-16.net|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-22.org|") }, Action(Discard) };Rule { Matches { Domain("|sxyprn.net|") }, Action(Discard) };Rule { Matches { Domain("|hlsloader.com|") }, Action(Discard) };Rule { Matches { Domain("|elconfidencial.com|") }, Action(Discard) };Rule { Matches { Domain("|tmohentai.com|") }, Action(Discard) };Rule { Matches { Domain("|laposte.fr|") }, Action(Discard) };Rule { Matches { Domain("|heytapdl.com|") }, Action(Discard) };Rule { Matches { Domain("|claro.net.br|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-47.org|") }, Action(Discard) };Rule { Matches { Domain("|uidai.gov.in|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-21.com|") }, Action(Discard) };Rule { Matches { Domain("|torproject.org|") }, Action(Discard) };Rule { Matches { Domain("|cuevana3.ai|") }, Action(Discard) };Rule { Matches { Domain("|huffpo.net|") }, Action(Discard) };Rule { Matches { Domain("|angi.com|") }, Action(Discard) };Rule { Matches { Domain("|wandera.com|") }, Action(Discard) };Rule { Matches { Domain("|xataka.com|") }, Action(Discard) };Rule { Matches { Domain("|infolinks.com|") }, Action(Discard) };Rule { Matches { Domain("|dhl.de|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-36.net|") }, Action(Discard) };Rule { Matches { Domain("|mihanwebhost.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-17.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|gslb.com|") }, Action(Discard) };Rule { Matches { Domain("|fenbi.com|") }, Action(Discard) };Rule { Matches { Domain("|cleveland.com|") }, Action(Discard) };Rule { Matches { Domain("|eurogamer.net|") }, Action(Discard) };Rule { Matches { Domain("|vseinstrumenti.ru|") }, Action(Discard) };Rule { Matches { Domain("|samba.tv|") }, Action(Discard) };Rule { Matches { Domain("|rand.org|") }, Action(Discard) };Rule { Matches { Domain("|outbrainimg.com|") }, Action(Discard) };Rule { Matches { Domain("|eu.org|") }, Action(Discard) };Rule { Matches { Domain("|nseindia.com|") }, Action(Discard) };Rule { Matches { Domain("|cnr.it|") }, Action(Discard) };Rule { Matches { Domain("|specbench.org|") }, Action(Discard) };Rule { Matches { Domain("|warwick.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|ip-api.com|") }, Action(Discard) };Rule { Matches { Domain("|blogspot.fr|") }, Action(Discard) };Rule { Matches { Domain("|ultradns.org|") }, Action(Discard) };Rule { Matches { Domain("|fdic.gov|") }, Action(Discard) };Rule { Matches { Domain("|archive.is|") }, Action(Discard) };Rule { Matches { Domain("|y2mate.is|") }, Action(Discard) };Rule { Matches { Domain("|jiemian.com|") }, Action(Discard) };Rule { Matches { Domain("|scotsman.com|") }, Action(Discard) };Rule { Matches { Domain("|gvt3.com|") }, Action(Discard) };Rule { Matches { Domain("|examiner.com|") }, Action(Discard) };Rule { Matches { Domain("|capitaloneshopping.com|") }, Action(Discard) };Rule { Matches { Domain("|line.biz|") }, Action(Discard) };Rule { Matches { Domain("|kakuyomu.jp|") }, Action(Discard) };Rule { Matches { Domain("|temp-mail.org|") }, Action(Discard) };Rule { Matches { Domain("|second-ns.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-38.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|lahuashanbx.com|") }, Action(Discard) };Rule { Matches { Domain("|gotomeeting.com|") }, Action(Discard) };Rule { Matches { Domain("|lura.live|") }, Action(Discard) };Rule { Matches { Domain("|syf.com|") }, Action(Discard) };Rule { Matches { Domain("|apachetutor.org|") }, Action(Discard) };Rule { Matches { Domain("|cntv.cn|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-14.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|boc.cn|") }, Action(Discard) };Rule { Matches { Domain("|copy.ai|") }, Action(Discard) };Rule { Matches { Domain("|cars.com|") }, Action(Discard) };Rule { Matches { Domain("|olx.in|") }, Action(Discard) };Rule { Matches { Domain("|tgju.org|") }, Action(Discard) };Rule { Matches { Domain("|codenong.com|") }, Action(Discard) };Rule { Matches { Domain("|incestflix.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-61.net|") }, Action(Discard) };Rule { Matches { Domain("|cdngc.net|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-51.com|") }, Action(Discard) };Rule { Matches { Domain("|i4.cn|") }, Action(Discard) };Rule { Matches { Domain("|sport.es|") }, Action(Discard) };Rule { Matches { Domain("|alltrails.com|") }, Action(Discard) };Rule { Matches { Domain("|second-ns.de|") }, Action(Discard) };Rule { Matches { Domain("|emerald.com|") }, Action(Discard) };Rule { Matches { Domain("|obsproject.com|") }, Action(Discard) };Rule { Matches { Domain("|sydney.edu.au|") }, Action(Discard) };Rule { Matches { Domain("|videocampaign.co|") }, Action(Discard) };Rule { Matches { Domain("|safety.google|") }, Action(Discard) };Rule { Matches { Domain("|digitaltarget.ru|") }, Action(Discard) };Rule { Matches { Domain("|nocookie.net|") }, Action(Discard) };Rule { Matches { Domain("|washingtonexaminer.com|") }, Action(Discard) };Rule { Matches { Domain("|gimy.app|") }, Action(Discard) };Rule { Matches { Domain("|dezeen.com|") }, Action(Discard) };Rule { Matches { Domain("|ecwid.com|") }, Action(Discard) };Rule { Matches { Domain("|samhsa.gov|") }, Action(Discard) };Rule { Matches { Domain("|bookmyshow.com|") }, Action(Discard) };Rule { Matches { Domain("|login.gov|") }, Action(Discard) };Rule { Matches { Domain("|ku.edu|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-25.com|") }, Action(Discard) };Rule { Matches { Domain("|stlouisfed.org|") }, Action(Discard) };Rule { Matches { Domain("|pathofexile.com|") }, Action(Discard) };Rule { Matches { Domain("|blooket.com|") }, Action(Discard) };Rule { Matches { Domain("|zarinpal.com|") }, Action(Discard) };Rule { Matches { Domain("|yoast.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-34.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|marketo.com|") }, Action(Discard) };Rule { Matches { Domain("|utk.edu|") }, Action(Discard) };Rule { Matches { Domain("|shueisha.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|manchestereveningnews.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|ngs.ru|") }, Action(Discard) };Rule { Matches { Domain("|zdnscloud.biz|") }, Action(Discard) };Rule { Matches { Domain("|getpostman.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-28.org|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-61.com|") }, Action(Discard) };Rule { Matches { Domain("|ic3.gov|") }, Action(Discard) };Rule { Matches { Domain("|healthcare.gov|") }, Action(Discard) };Rule { Matches { Domain("|mariadb.org|") }, Action(Discard) };Rule { Matches { Domain("|hvosting.ua|") }, Action(Discard) };Rule { Matches { Domain("|apartmenttherapy.com|") }, Action(Discard) };Rule { Matches { Domain("|allmusic.com|") }, Action(Discard) };Rule { Matches { Domain("|xingyaopan.com|") }, Action(Discard) };Rule { Matches { Domain("|axshare.com|") }, Action(Discard) };Rule { Matches { Domain("|ce.cn|") }, Action(Discard) };Rule { Matches { Domain("|lu.se|") }, Action(Discard) };Rule { Matches { Domain("|business2community.com|") }, Action(Discard) };Rule { Matches { Domain("|blubrry.com|") }, Action(Discard) };Rule { Matches { Domain("|brainyquote.com|") }, Action(Discard) };Rule { Matches { Domain("|msftstatic.com|") }, Action(Discard) };Rule { Matches { Domain("|freepikcompany.com|") }, Action(Discard) };Rule { Matches { Domain("|confiant-integrations.net|") }, Action(Discard) };Rule { Matches { Domain("|guinnessworldrecords.com|") }, Action(Discard) };Rule { Matches { Domain("|cdn-ns1.net|") }, Action(Discard) };Rule { Matches { Domain("|paramountplus.com|") }, Action(Discard) };Rule { Matches { Domain("|12371.cn|") }, Action(Discard) };Rule { Matches { Domain("|azure-devices.net|") }, Action(Discard) };Rule { Matches { Domain("|syr.edu|") }, Action(Discard) };Rule { Matches { Domain("|nationalreview.com|") }, Action(Discard) };Rule { Matches { Domain("|ucloud.cn|") }, Action(Discard) };Rule { Matches { Domain("|ibaotu.com|") }, Action(Discard) };Rule { Matches { Domain("|findlaw.cn|") }, Action(Discard) };Rule { Matches { Domain("|awaliwa.com|") }, Action(Discard) };Rule { Matches { Domain("|appdynamics.com|") }, Action(Discard) };Rule { Matches { Domain("|value-domain.com|") }, Action(Discard) };Rule { Matches { Domain("|testbook.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-42.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|expressvpn.com|") }, Action(Discard) };Rule { Matches { Domain("|antfin-inc.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-26.com|") }, Action(Discard) };Rule { Matches { Domain("|ora.com|") }, Action(Discard) };Rule { Matches { Domain("|myportfolio.com|") }, Action(Discard) };Rule { Matches { Domain("|shop.app|") }, Action(Discard) };Rule { Matches { Domain("|scene7.com|") }, Action(Discard) };Rule { Matches { Domain("|gingerall.com|") }, Action(Discard) };Rule { Matches { Domain("|liebertpub.com|") }, Action(Discard) };Rule { Matches { Domain("|cloudfunctions.net|") }, Action(Discard) };Rule { Matches { Domain("|tacdn.com|") }, Action(Discard) };Rule { Matches { Domain("|lanzout.com|") }, Action(Discard) };Rule { Matches { Domain("|cafepress.com|") }, Action(Discard) };Rule { Matches { Domain("|colorado.gov|") }, Action(Discard) };Rule { Matches { Domain("|govinfo.gov|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-28.com|") }, Action(Discard) };Rule { Matches { Domain("|poetryfoundation.org|") }, Action(Discard) };Rule { Matches { Domain("|zdnscloud.net|") }, Action(Discard) };Rule { Matches { Domain("|financialexpress.com|") }, Action(Discard) };Rule { Matches { Domain("|truecaller.com|") }, Action(Discard) };Rule { Matches { Domain("|opecloud.com|") }, Action(Discard) };Rule { Matches { Domain("|getresponse.com|") }, Action(Discard) };Rule { Matches { Domain("|tucows.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-55.net|") }, Action(Discard) };Rule { Matches { Domain("|nestle.com|") }, Action(Discard) };Rule { Matches { Domain("|theculturetrip.com|") }, Action(Discard) };Rule { Matches { Domain("|cerf.net|") }, Action(Discard) };Rule { Matches { Domain("|hxaa74.com|") }, Action(Discard) };Rule { Matches { Domain("|vietel.com.vn|") }, Action(Discard) };Rule { Matches { Domain("|cisa.gov|") }, Action(Discard) };Rule { Matches { Domain("|parade.com|") }, Action(Discard) };Rule { Matches { Domain("|zdnscloud.info|") }, Action(Discard) };Rule { Matches { Domain("|golux.com|") }, Action(Discard) };Rule { Matches { Domain("|hideservers.net|") }, Action(Discard) };Rule { Matches { Domain("|zoneedit.com|") }, Action(Discard) };Rule { Matches { Domain("|bbcgoodfood.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-17.com|") }, Action(Discard) };Rule { Matches { Domain("|shazam.com|") }, Action(Discard) };Rule { Matches { Domain("|bitcoin.com|") }, Action(Discard) };Rule { Matches { Domain("|test.com|") }, Action(Discard) };Rule { Matches { Domain("|ngabbs.com|") }, Action(Discard) };Rule { Matches { Domain("|doujin-freee.com|") }, Action(Discard) };Rule { Matches { Domain("|91porn.com|") }, Action(Discard) };Rule { Matches { Domain("|rtve.es|") }, Action(Discard) };Rule { Matches { Domain("|ada.support|") }, Action(Discard) };Rule { Matches { Domain("|wqjbldnnceroue.com|") }, Action(Discard) };Rule { Matches { Domain("|nowcoder.com|") }, Action(Discard) };Rule { Matches { Domain("|kugou.com|") }, Action(Discard) };Rule { Matches { Domain("|xvideos.es|") }, Action(Discard) };Rule { Matches { Domain("|encyclopedia.com|") }, Action(Discard) };Rule { Matches { Domain("|picsart.com|") }, Action(Discard) };Rule { Matches { Domain("|bangbros.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-33.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|qodeinteractive.com|") }, Action(Discard) };Rule { Matches { Domain("|ctnsnet.com|") }, Action(Discard) };Rule { Matches { Domain("|nuance.com|") }, Action(Discard) };Rule { Matches { Domain("|clemson.edu|") }, Action(Discard) };Rule { Matches { Domain("|worldofwarcraft.com|") }, Action(Discard) };Rule { Matches { Domain("|isna.ir|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-10.com|") }, Action(Discard) };Rule { Matches { Domain("|thecut.com|") }, Action(Discard) };Rule { Matches { Domain("|wanfangdata.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|mobile01.com|") }, Action(Discard) };Rule { Matches { Domain("|libero.it|") }, Action(Discard) };Rule { Matches { Domain("|wechat.com|") }, Action(Discard) };Rule { Matches { Domain("|bac.com|") }, Action(Discard) };Rule { Matches { Domain("|capterra.com|") }, Action(Discard) };Rule { Matches { Domain("|exblog.jp|") }, Action(Discard) };Rule { Matches { Domain("|aj1907.online|") }, Action(Discard) };Rule { Matches { Domain("|meganameservers.eu|") }, Action(Discard) };Rule { Matches { Domain("|cambro.tv|") }, Action(Discard) };Rule { Matches { Domain("|discovermagazine.com|") }, Action(Discard) };Rule { Matches { Domain("|marksandspencer.com|") }, Action(Discard) };Rule { Matches { Domain("|boozt.com|") }, Action(Discard) };Rule { Matches { Domain("|fagawdasv.com|") }, Action(Discard) };Rule { Matches { Domain("|mohrss.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|shopifysvc.com|") }, Action(Discard) };Rule { Matches { Domain("|auction.co.kr|") }, Action(Discard) };Rule { Matches { Domain("|opaque.net|") }, Action(Discard) };Rule { Matches { Domain("|we.tl|") }, Action(Discard) };Rule { Matches { Domain("|eluniversal.com.mx|") }, Action(Discard) };Rule { Matches { Domain("|leo.org|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-11.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|www.gov.br|") }, Action(Discard) };Rule { Matches { Domain("|clickbank.net|") }, Action(Discard) };Rule { Matches { Domain("|startpage.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-03.net|") }, Action(Discard) };Rule { Matches { Domain("|fiu.edu|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-56.com|") }, Action(Discard) };Rule { Matches { Domain("|pokemon.com|") }, Action(Discard) };Rule { Matches { Domain("|cibc.com|") }, Action(Discard) };Rule { Matches { Domain("|wn.com|") }, Action(Discard) };Rule { Matches { Domain("|hotjar.io|") }, Action(Discard) };Rule { Matches { Domain("|moudamepo.com|") }, Action(Discard) };Rule { Matches { Domain("|freewebs.com|") }, Action(Discard) };Rule { Matches { Domain("|ibyteimg.com|") }, Action(Discard) };Rule { Matches { Domain("|samsungiotcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|vine.co|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-32.com|") }, Action(Discard) };Rule { Matches { Domain("|nationalgeographic.org|") }, Action(Discard) };Rule { Matches { Domain("|cybertrust.com|") }, Action(Discard) };Rule { Matches { Domain("|cnil.fr|") }, Action(Discard) };Rule { Matches { Domain("|shahed4u.rest|") }, Action(Discard) };Rule { Matches { Domain("|apachehaus.com|") }, Action(Discard) };Rule { Matches { Domain("|iadb.org|") }, Action(Discard) };Rule { Matches { Domain("|netperf.org|") }, Action(Discard) };Rule { Matches { Domain("|uptodate.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-56.org|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-04.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|olympic.org|") }, Action(Discard) };Rule { Matches { Domain("|siriusxm.com|") }, Action(Discard) };Rule { Matches { Domain("|sas.com|") }, Action(Discard) };Rule { Matches { Domain("|ssstwitter.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-19.com|") }, Action(Discard) };Rule { Matches { Domain("|manhuagui.com|") }, Action(Discard) };Rule { Matches { Domain("|sleepfoundation.org|") }, Action(Discard) };Rule { Matches { Domain("|buymeacoffee.com|") }, Action(Discard) };Rule { Matches { Domain("|gos-gsp.io|") }, Action(Discard) };Rule { Matches { Domain("|literotica.com|") }, Action(Discard) };Rule { Matches { Domain("|prtimes.jp|") }, Action(Discard) };Rule { Matches { Domain("|seagate.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-49.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|maybank2u.com.my|") }, Action(Discard) };Rule { Matches { Domain("|blogs.com|") }, Action(Discard) };Rule { Matches { Domain("|archlinux.org|") }, Action(Discard) };Rule { Matches { Domain("|woot.com|") }, Action(Discard) };Rule { Matches { Domain("|workable.com|") }, Action(Discard) };Rule { Matches { Domain("|duowanns.com|") }, Action(Discard) };Rule { Matches { Domain("|ok.gov|") }, Action(Discard) };Rule { Matches { Domain("|yinxiang.com|") }, Action(Discard) };Rule { Matches { Domain("|rpi.edu|") }, Action(Discard) };Rule { Matches { Domain("|grammarlyaws.com|") }, Action(Discard) };Rule { Matches { Domain("|intercomcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|mcbbs.net|") }, Action(Discard) };Rule { Matches { Domain("|news-medical.net|") }, Action(Discard) };Rule { Matches { Domain("|whu.edu.cn|") }, Action(Discard) };Rule { Matches { Domain("|mofcom.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-06.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|inverse.com|") }, Action(Discard) };Rule { Matches { Domain("|cian.ru|") }, Action(Discard) };Rule { Matches { Domain("|dawn.com|") }, Action(Discard) };Rule { Matches { Domain("|vwapps.run|") }, Action(Discard) };Rule { Matches { Domain("|jimdosite.com|") }, Action(Discard) };Rule { Matches { Domain("|bt-tt.com|") }, Action(Discard) };Rule { Matches { Domain("|theartofshaving.com|") }, Action(Discard) };Rule { Matches { Domain("|yourdictionary.com|") }, Action(Discard) };Rule { Matches { Domain("|harrahs.org|") }, Action(Discard) };Rule { Matches { Domain("|priceline.com|") }, Action(Discard) };Rule { Matches { Domain("|turkishairlines.com|") }, Action(Discard) };Rule { Matches { Domain("|akbars.ru|") }, Action(Discard) };Rule { Matches { Domain("|doodle.com|") }, Action(Discard) };Rule { Matches { Domain("|google.cz|") }, Action(Discard) };Rule { Matches { Domain("|newatlas.com|") }, Action(Discard) };Rule { Matches { Domain("|uservoice.com|") }, Action(Discard) };Rule { Matches { Domain("|amazon.at|") }, Action(Discard) };Rule { Matches { Domain("|vjav.com|") }, Action(Discard) };Rule { Matches { Domain("|sozcu.com.tr|") }, Action(Discard) };Rule { Matches { Domain("|otto.de|") }, Action(Discard) };Rule { Matches { Domain("|aap.org|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-14.com|") }, Action(Discard) };Rule { Matches { Domain("|ctdcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|permutive.app|") }, Action(Discard) };Rule { Matches { Domain("|cableone.net|") }, Action(Discard) };Rule { Matches { Domain("|meta.com|") }, Action(Discard) };Rule { Matches { Domain("|7mmtv.sx|") }, Action(Discard) };Rule { Matches { Domain("|yorku.ca|") }, Action(Discard) };Rule { Matches { Domain("|thenation.com|") }, Action(Discard) };Rule { Matches { Domain("|bitrix.info|") }, Action(Discard) };Rule { Matches { Domain("|mercury.com|") }, Action(Discard) };Rule { Matches { Domain("|cernet.net|") }, Action(Discard) };Rule { Matches { Domain("|paylocity.com|") }, Action(Discard) };Rule { Matches { Domain("|supremecourt.gov|") }, Action(Discard) };Rule { Matches { Domain("|icauto.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|index.hu|") }, Action(Discard) };Rule { Matches { Domain("|holax.io|") }, Action(Discard) };Rule { Matches { Domain("|smartape.ru|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-44.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|vidazoo.com|") }, Action(Discard) };Rule { Matches { Domain("|nielsendigital.net|") }, Action(Discard) };Rule { Matches { Domain("|cmbchina.com|") }, Action(Discard) };Rule { Matches { Domain("|grindr.com|") }, Action(Discard) };Rule { Matches { Domain("|ucalgary.ca|") }, Action(Discard) };Rule { Matches { Domain("|rzd.ru|") }, Action(Discard) };Rule { Matches { Domain("|dcard.tw|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-36.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-40.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|aircanada.com|") }, Action(Discard) };Rule { Matches { Domain("|cronolog.org|") }, Action(Discard) };Rule { Matches { Domain("|tele2.ru|") }, Action(Discard) };Rule { Matches { Domain("|simplecloud.ru|") }, Action(Discard) };Rule { Matches { Domain("|wistia.net|") }, Action(Discard) };Rule { Matches { Domain("|hsex.men|") }, Action(Discard) };Rule { Matches { Domain("|r-project.org|") }, Action(Discard) };Rule { Matches { Domain("|alarabiya.net|") }, Action(Discard) };Rule { Matches { Domain("|statefarm.org|") }, Action(Discard) };Rule { Matches { Domain("|fws.gov|") }, Action(Discard) };Rule { Matches { Domain("|python.ca|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-44.net|") }, Action(Discard) };Rule { Matches { Domain("|lanzoum.com|") }, Action(Discard) };Rule { Matches { Domain("|pantheonsite.io|") }, Action(Discard) };Rule { Matches { Domain("|demandware.net|") }, Action(Discard) };Rule { Matches { Domain("|bentley.com|") }, Action(Discard) };Rule { Matches { Domain("|masterclass.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-62.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-57.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-40.com|") }, Action(Discard) };Rule { Matches { Domain("|tvpixel.com|") }, Action(Discard) };Rule { Matches { Domain("|volkswagen.de|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-37.com|") }, Action(Discard) };Rule { Matches { Domain("|wwsga.me|") }, Action(Discard) };Rule { Matches { Domain("|computrabajo.com|") }, Action(Discard) };Rule { Matches { Domain("|91porny.com|") }, Action(Discard) };Rule { Matches { Domain("|jkanime.net|") }, Action(Discard) };Rule { Matches { Domain("|css-tricks.com|") }, Action(Discard) };Rule { Matches { Domain("|thenationalnews.com|") }, Action(Discard) };Rule { Matches { Domain("|real.com|") }, Action(Discard) };Rule { Matches { Domain("|signal.org|") }, Action(Discard) };Rule { Matches { Domain("|f95zone.to|") }, Action(Discard) };Rule { Matches { Domain("|cnr.cn|") }, Action(Discard) };Rule { Matches { Domain("|leboncoin.fr|") }, Action(Discard) };Rule { Matches { Domain("|unm.edu|") }, Action(Discard) };Rule { Matches { Domain("|so-net.ne.jp|") }, Action(Discard) };Rule { Matches { Domain("|kinsta.com|") }, Action(Discard) };Rule { Matches { Domain("|wd2go.com|") }, Action(Discard) };Rule { Matches { Domain("|theaustralian.com.au|") }, Action(Discard) };Rule { Matches { Domain("|youradchoices.com|") }, Action(Discard) };Rule { Matches { Domain("|sankakucomplex.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-23.net|") }, Action(Discard) };Rule { Matches { Domain("|web.com|") }, Action(Discard) };Rule { Matches { Domain("|hetapus.com|") }, Action(Discard) };Rule { Matches { Domain("|drmgms.com|") }, Action(Discard) };Rule { Matches { Domain("|cdnga.net|") }, Action(Discard) };Rule { Matches { Domain("|wbur.org|") }, Action(Discard) };Rule { Matches { Domain("|birmingham.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|paytm.com|") }, Action(Discard) };Rule { Matches { Domain("|tampabay.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-05.com|") }, Action(Discard) };Rule { Matches { Domain("|vnn.vn|") }, Action(Discard) };Rule { Matches { Domain("|windowscentral.com|") }, Action(Discard) };Rule { Matches { Domain("|siteforce.com|") }, Action(Discard) };Rule { Matches { Domain("|farsnews.ir|") }, Action(Discard) };Rule { Matches { Domain("|reclameaqui.com.br|") }, Action(Discard) };Rule { Matches { Domain("|split.io|") }, Action(Discard) };Rule { Matches { Domain("|vapp-servers.com|") }, Action(Discard) };Rule { Matches { Domain("|kit.edu|") }, Action(Discard) };Rule { Matches { Domain("|cio.com|") }, Action(Discard) };Rule { Matches { Domain("|west.cn|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-45.net|") }, Action(Discard) };Rule { Matches { Domain("|medrxiv.org|") }, Action(Discard) };Rule { Matches { Domain("|verizonwireless.com|") }, Action(Discard) };Rule { Matches { Domain("|correios.com.br|") }, Action(Discard) };Rule { Matches { Domain("|s7.ru|") }, Action(Discard) };Rule { Matches { Domain("|tap.az|") }, Action(Discard) };Rule { Matches { Domain("|m-team.cc|") }, Action(Discard) };Rule { Matches { Domain("|jsonplayer.com|") }, Action(Discard) };Rule { Matches { Domain("|tenki.jp|") }, Action(Discard) };Rule { Matches { Domain("|9anime.gs|") }, Action(Discard) };Rule { Matches { Domain("|square-enix.com|") }, Action(Discard) };Rule { Matches { Domain("|imagemagick.com|") }, Action(Discard) };Rule { Matches { Domain("|poclabs.net|") }, Action(Discard) };Rule { Matches { Domain("|gi-de.com|") }, Action(Discard) };Rule { Matches { Domain("|amazon.jobs|") }, Action(Discard) };Rule { Matches { Domain("|permutive.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-28.net|") }, Action(Discard) };Rule { Matches { Domain("|wizards.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-52.net|") }, Action(Discard) };Rule { Matches { Domain("|demandbase.com|") }, Action(Discard) };Rule { Matches { Domain("|evanzo-server.de|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-47.com|") }, Action(Discard) };Rule { Matches { Domain("|vds-shop.com|") }, Action(Discard) };Rule { Matches { Domain("|safeway.com|") }, Action(Discard) };Rule { Matches { Domain("|yellowpages.com|") }, Action(Discard) };Rule { Matches { Domain("|faceueditor.com|") }, Action(Discard) };Rule { Matches { Domain("|donga.com|") }, Action(Discard) };Rule { Matches { Domain("|sankuai.com|") }, Action(Discard) };Rule { Matches { Domain("|cuhk.edu.hk|") }, Action(Discard) };Rule { Matches { Domain("|sf-express.com|") }, Action(Discard) };Rule { Matches { Domain("|pearltrees.com|") }, Action(Discard) };Rule { Matches { Domain("|twitchcdn.net|") }, Action(Discard) };Rule { Matches { Domain("|slidesgo.com|") }, Action(Discard) };Rule { Matches { Domain("|usdoj.gov|") }, Action(Discard) };Rule { Matches { Domain("|gsa.gov|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-51.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|telegraaf.nl|") }, Action(Discard) };Rule { Matches { Domain("|pinterest.de|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-04.com|") }, Action(Discard) };Rule { Matches { Domain("|wto.org|") }, Action(Discard) };Rule { Matches { Domain("|tb.cn|") }, Action(Discard) };Rule { Matches { Domain("|americanbar.org|") }, Action(Discard) };Rule { Matches { Domain("|liffswithabr.com|") }, Action(Discard) };Rule { Matches { Domain("|caliente.mx|") }, Action(Discard) };Rule { Matches { Domain("|google.kz|") }, Action(Discard) };Rule { Matches { Domain("|dashlane.com|") }, Action(Discard) };Rule { Matches { Domain("|thrillist.com|") }, Action(Discard) };Rule { Matches { Domain("|mirconnect.ru|") }, Action(Discard) };Rule { Matches { Domain("|technorail.com|") }, Action(Discard) };Rule { Matches { Domain("|viglink.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-20.net|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-54.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-02.org|") }, Action(Discard) };Rule { Matches { Domain("|copyright.gov|") }, Action(Discard) };Rule { Matches { Domain("|miami.edu|") }, Action(Discard) };Rule { Matches { Domain("|tn.gov|") }, Action(Discard) };Rule { Matches { Domain("|1gb.ru|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-11.com|") }, Action(Discard) };Rule { Matches { Domain("|totalrecaptcha.top|") }, Action(Discard) };Rule { Matches { Domain("|indiewire.com|") }, Action(Discard) };Rule { Matches { Domain("|illinois.gov|") }, Action(Discard) };Rule { Matches { Domain("|slack-edge.com|") }, Action(Discard) };Rule { Matches { Domain("|xhamster.desi|") }, Action(Discard) };Rule { Matches { Domain("|corporatefinanceinstitute.com|") }, Action(Discard) };Rule { Matches { Domain("|medicare.gov|") }, Action(Discard) };Rule { Matches { Domain("|yandex.kz|") }, Action(Discard) };Rule { Matches { Domain("|yaurl302.xyz|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-59.org|") }, Action(Discard) };Rule { Matches { Domain("|rqtrk.eu|") }, Action(Discard) };Rule { Matches { Domain("|pittsburghpa.gov|") }, Action(Discard) };Rule { Matches { Domain("|cint.com|") }, Action(Discard) };Rule { Matches { Domain("|isprog.com|") }, Action(Discard) };Rule { Matches { Domain("|clover.network|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-41.net|") }, Action(Discard) };Rule { Matches { Domain("|imhentai.xxx|") }, Action(Discard) };Rule { Matches { Domain("|infoworld.com|") }, Action(Discard) };Rule { Matches { Domain("|architecturaldigest.com|") }, Action(Discard) };Rule { Matches { Domain("|bloglovin.com|") }, Action(Discard) };Rule { Matches { Domain("|betrad.com|") }, Action(Discard) };Rule { Matches { Domain("|cntraveler.com|") }, Action(Discard) };Rule { Matches { Domain("|timeshighereducation.com|") }, Action(Discard) };Rule { Matches { Domain("|mykajabi.com|") }, Action(Discard) };Rule { Matches { Domain("|domclick.ru|") }, Action(Discard) };Rule { Matches { Domain("|uio.no|") }, Action(Discard) };Rule { Matches { Domain("|aol.de|") }, Action(Discard) };Rule { Matches { Domain("|artnet.com|") }, Action(Discard) };Rule { Matches { Domain("|id.me|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-08.com|") }, Action(Discard) };Rule { Matches { Domain("|jia.com|") }, Action(Discard) };Rule { Matches { Domain("|us.org|") }, Action(Discard) };Rule { Matches { Domain("|urbanairship.com|") }, Action(Discard) };Rule { Matches { Domain("|exlibrisgroup.com|") }, Action(Discard) };Rule { Matches { Domain("|zingnews.vn|") }, Action(Discard) };Rule { Matches { Domain("|latam.com|") }, Action(Discard) };Rule { Matches { Domain("|technorati.com|") }, Action(Discard) };Rule { Matches { Domain("|hackernoon.com|") }, Action(Discard) };Rule { Matches { Domain("|afterpay.com|") }, Action(Discard) };Rule { Matches { Domain("|dns.kr|") }, Action(Discard) };Rule { Matches { Domain("|livedoor.biz|") }, Action(Discard) };Rule { Matches { Domain("|insops.net|") }, Action(Discard) };Rule { Matches { Domain("|my.games|") }, Action(Discard) };Rule { Matches { Domain("|azuregov-dns.us|") }, Action(Discard) };Rule { Matches { Domain("|example.org|") }, Action(Discard) };Rule { Matches { Domain("|rapidtables.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-48.org|") }, Action(Discard) };Rule { Matches { Domain("|qiniu.com|") }, Action(Discard) };Rule { Matches { Domain("|timesonline.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-62.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|google.cl|") }, Action(Discard) };Rule { Matches { Domain("|bgm.tv|") }, Action(Discard) };Rule { Matches { Domain("|newsmax.com|") }, Action(Discard) };Rule { Matches { Domain("|dandomain.dk|") }, Action(Discard) };Rule { Matches { Domain("|forrester.com|") }, Action(Discard) };Rule { Matches { Domain("|catchthemes.com|") }, Action(Discard) };Rule { Matches { Domain("|ocregister.com|") }, Action(Discard) };Rule { Matches { Domain("|handelsblatt.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-55.com|") }, Action(Discard) };Rule { Matches { Domain("|babycenter.com|") }, Action(Discard) };Rule { Matches { Domain("|flocktory.com|") }, Action(Discard) };Rule { Matches { Domain("|packagist.org|") }, Action(Discard) };Rule { Matches { Domain("|media6degrees.com|") }, Action(Discard) };Rule { Matches { Domain("|sportingnews.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-54.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|freebit.net|") }, Action(Discard) };Rule { Matches { Domain("|mercedes-benz.com|") }, Action(Discard) };Rule { Matches { Domain("|bounceexchange.com|") }, Action(Discard) };Rule { Matches { Domain("|sabah.com.tr|") }, Action(Discard) };Rule { Matches { Domain("|epfl.ch|") }, Action(Discard) };Rule { Matches { Domain("|acrobat.com|") }, Action(Discard) };Rule { Matches { Domain("|wanadoo.fr|") }, Action(Discard) };Rule { Matches { Domain("|sky.it|") }, Action(Discard) };Rule { Matches { Domain("|brand-display.com|") }, Action(Discard) };Rule { Matches { Domain("|cpsc.gov|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-61.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|crypto.com|") }, Action(Discard) };Rule { Matches { Domain("|nationalacademies.org|") }, Action(Discard) };Rule { Matches { Domain("|amazon.be|") }, Action(Discard) };Rule { Matches { Domain("|affirm.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-24.org|") }, Action(Discard) };Rule { Matches { Domain("|appleinsider.com|") }, Action(Discard) };Rule { Matches { Domain("|basalam.com|") }, Action(Discard) };Rule { Matches { Domain("|rarbgprx.org|") }, Action(Discard) };Rule { Matches { Domain("|getyourguide.com|") }, Action(Discard) };Rule { Matches { Domain("|net.ru|") }, Action(Discard) };Rule { Matches { Domain("|buyee.jp|") }, Action(Discard) };Rule { Matches { Domain("|vcg.com|") }, Action(Discard) };Rule { Matches { Domain("|wyndhamhotels.com|") }, Action(Discard) };Rule { Matches { Domain("|2chan.net|") }, Action(Discard) };Rule { Matches { Domain("|terabox.com|") }, Action(Discard) };Rule { Matches { Domain("|index.hr|") }, Action(Discard) };Rule { Matches { Domain("|noon.com|") }, Action(Discard) };Rule { Matches { Domain("|anrdoezrs.net|") }, Action(Discard) };Rule { Matches { Domain("|heyfiesta.com|") }, Action(Discard) };Rule { Matches { Domain("|ethereum.org|") }, Action(Discard) };Rule { Matches { Domain("|site123.me|") }, Action(Discard) };Rule { Matches { Domain("|pinterest.com.au|") }, Action(Discard) };Rule { Matches { Domain("|acuityscheduling.com|") }, Action(Discard) };Rule { Matches { Domain("|dzone.com|") }, Action(Discard) };Rule { Matches { Domain("|onedrive.com|") }, Action(Discard) };Rule { Matches { Domain("|codeplex.com|") }, Action(Discard) };Rule { Matches { Domain("|tilda.ws|") }, Action(Discard) };Rule { Matches { Domain("|edna.ru|") }, Action(Discard) };Rule { Matches { Domain("|zain.com|") }, Action(Discard) };Rule { Matches { Domain("|moneysavingexpert.com|") }, Action(Discard) };Rule { Matches { Domain("|chick-fil-a.com|") }, Action(Discard) };Rule { Matches { Domain("|shandong.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|ok.xxx|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-18.org|") }, Action(Discard) };Rule { Matches { Domain("|sanofi-synthelabo.com|") }, Action(Discard) };Rule { Matches { Domain("|vimeocdn.com|") }, Action(Discard) };Rule { Matches { Domain("|shopee.sg|") }, Action(Discard) };Rule { Matches { Domain("|xvideos.red|") }, Action(Discard) };Rule { Matches { Domain("|baike.com|") }, Action(Discard) };Rule { Matches { Domain("|libreoffice.org|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-57.com|") }, Action(Discard) };Rule { Matches { Domain("|instapaper.com|") }, Action(Discard) };Rule { Matches { Domain("|pximg.net|") }, Action(Discard) };Rule { Matches { Domain("|ou.edu|") }, Action(Discard) };Rule { Matches { Domain("|iam.gov.sa|") }, Action(Discard) };Rule { Matches { Domain("|grab.com|") }, Action(Discard) };Rule { Matches { Domain("|newsnow.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|idaho.gov|") }, Action(Discard) };Rule { Matches { Domain("|sacbee.com|") }, Action(Discard) };Rule { Matches { Domain("|spdydns.com|") }, Action(Discard) };Rule { Matches { Domain("|namefind.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-13.net|") }, Action(Discard) };Rule { Matches { Domain("|esri.com|") }, Action(Discard) };Rule { Matches { Domain("|writesonic.com|") }, Action(Discard) };Rule { Matches { Domain("|kucoin.com|") }, Action(Discard) };Rule { Matches { Domain("|northwesternmutual.com|") }, Action(Discard) };Rule { Matches { Domain("|drudgereport.com|") }, Action(Discard) };Rule { Matches { Domain("|wshifen.com|") }, Action(Discard) };Rule { Matches { Domain("|sofascore.com|") }, Action(Discard) };Rule { Matches { Domain("|cargill.com|") }, Action(Discard) };Rule { Matches { Domain("|post.ir|") }, Action(Discard) };Rule { Matches { Domain("|sendpulse.com|") }, Action(Discard) };Rule { Matches { Domain("|mx-ns.mx|") }, Action(Discard) };Rule { Matches { Domain("|kuronekoyamato.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|dropcam.com|") }, Action(Discard) };Rule { Matches { Domain("|netgate.com|") }, Action(Discard) };Rule { Matches { Domain("|absher.sa|") }, Action(Discard) };Rule { Matches { Domain("|heylink.me|") }, Action(Discard) };Rule { Matches { Domain("|userbenchmark.com|") }, Action(Discard) };Rule { Matches { Domain("|dynu.com|") }, Action(Discard) };Rule { Matches { Domain("|javmost.com|") }, Action(Discard) };Rule { Matches { Domain("|rae.es|") }, Action(Discard) };Rule { Matches { Domain("|spov-msedge.net|") }, Action(Discard) };Rule { Matches { Domain("|liveworksheets.com|") }, Action(Discard) };Rule { Matches { Domain("|twnic.net.tw|") }, Action(Discard) };Rule { Matches { Domain("|care.com|") }, Action(Discard) };Rule { Matches { Domain("|thekitchn.com|") }, Action(Discard) };Rule { Matches { Domain("|labirint.ru|") }, Action(Discard) };Rule { Matches { Domain("|gulfnews.com|") }, Action(Discard) };Rule { Matches { Domain("|libgen.rs|") }, Action(Discard) };Rule { Matches { Domain("|cscdns.net|") }, Action(Discard) };Rule { Matches { Domain("|gpuqizoz.com|") }, Action(Discard) };Rule { Matches { Domain("|civitai.com|") }, Action(Discard) };Rule { Matches { Domain("|yamaha.com|") }, Action(Discard) };Rule { Matches { Domain("|fortnite.com|") }, Action(Discard) };Rule { Matches { Domain("|cookieyes.com|") }, Action(Discard) };Rule { Matches { Domain("|usaid.gov|") }, Action(Discard) };Rule { Matches { Domain("|tcsbank.ru|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-15.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|hostia.name|") }, Action(Discard) };Rule { Matches { Domain("|vidyard.com|") }, Action(Discard) };Rule { Matches { Domain("|google.dz|") }, Action(Discard) };Rule { Matches { Domain("|edublogs.org|") }, Action(Discard) };Rule { Matches { Domain("|gelbooru.com|") }, Action(Discard) };Rule { Matches { Domain("|ss2.us|") }, Action(Discard) };Rule { Matches { Domain("|overwolf.com|") }, Action(Discard) };Rule { Matches { Domain("|doj.gov|") }, Action(Discard) };Rule { Matches { Domain("|imotech.tech|") }, Action(Discard) };Rule { Matches { Domain("|huxiu.com|") }, Action(Discard) };Rule { Matches { Domain("|strikingly.com|") }, Action(Discard) };Rule { Matches { Domain("|twidouga.net|") }, Action(Discard) };Rule { Matches { Domain("|digitalspy.com|") }, Action(Discard) };Rule { Matches { Domain("|unwomen.org|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-02.net|") }, Action(Discard) };Rule { Matches { Domain("|telus.com|") }, Action(Discard) };Rule { Matches { Domain("|badoocdn.com|") }, Action(Discard) };Rule { Matches { Domain("|sflix.to|") }, Action(Discard) };Rule { Matches { Domain("|qtlcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|kafan.cn|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-26.org|") }, Action(Discard) };Rule { Matches { Domain("|letterboxd.com|") }, Action(Discard) };Rule { Matches { Domain("|apptentive.com|") }, Action(Discard) };Rule { Matches { Domain("|mercadolibre.com.co|") }, Action(Discard) };Rule { Matches { Domain("|idc.com|") }, Action(Discard) };Rule { Matches { Domain("|banter.com|") }, Action(Discard) };Rule { Matches { Domain("|alz.org|") }, Action(Discard) };Rule { Matches { Domain("|foodandwine.com|") }, Action(Discard) };Rule { Matches { Domain("|kcl.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|12306.cn|") }, Action(Discard) };Rule { Matches { Domain("|opensubtitles.org|") }, Action(Discard) };Rule { Matches { Domain("|fmb.la|") }, Action(Discard) };Rule { Matches { Domain("|siteground.us|") }, Action(Discard) };Rule { Matches { Domain("|axisbank.com|") }, Action(Discard) };Rule { Matches { Domain("|google.rs|") }, Action(Discard) };Rule { Matches { Domain("|nairaland.com|") }, Action(Discard) };Rule { Matches { Domain("|ns1p.net|") }, Action(Discard) };Rule { Matches { Domain("|ml314.com|") }, Action(Discard) };Rule { Matches { Domain("|dropboxapi.com|") }, Action(Discard) };Rule { Matches { Domain("|fuq.com|") }, Action(Discard) };Rule { Matches { Domain("|likee.video|") }, Action(Discard) };Rule { Matches { Domain("|manyvids.com|") }, Action(Discard) };Rule { Matches { Domain("|i-ready.com|") }, Action(Discard) };Rule { Matches { Domain("|gupy.io|") }, Action(Discard) };Rule { Matches { Domain("|myftpupload.com|") }, Action(Discard) };Rule { Matches { Domain("|rezync.com|") }, Action(Discard) };Rule { Matches { Domain("|leroymerlin.ru|") }, Action(Discard) };Rule { Matches { Domain("|mql5.com|") }, Action(Discard) };Rule { Matches { Domain("|mindbodygreen.com|") }, Action(Discard) };Rule { Matches { Domain("|spanishdict.com|") }, Action(Discard) };Rule { Matches { Domain("|core.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|prosv.ru|") }, Action(Discard) };Rule { Matches { Domain("|splashthat.com|") }, Action(Discard) };Rule { Matches { Domain("|pp.ua|") }, Action(Discard) };Rule { Matches { Domain("|gigaset-elements.com|") }, Action(Discard) };Rule { Matches { Domain("|eenadu.net|") }, Action(Discard) };Rule { Matches { Domain("|e-recht24.de|") }, Action(Discard) };Rule { Matches { Domain("|dailykos.com|") }, Action(Discard) };Rule { Matches { Domain("|genial.ly|") }, Action(Discard) };Rule { Matches { Domain("|unicode.org|") }, Action(Discard) };Rule { Matches { Domain("|bitdefender.net|") }, Action(Discard) };Rule { Matches { Domain("|nla.gov.au|") }, Action(Discard) };Rule { Matches { Domain("|curbed.com|") }, Action(Discard) };Rule { Matches { Domain("|wshareit.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-45.org|") }, Action(Discard) };Rule { Matches { Domain("|mafengwo.cn|") }, Action(Discard) };Rule { Matches { Domain("|nationalarchives.gov.uk|") }, Action(Discard) };Rule { Matches { Domain("|lazada.vn|") }, Action(Discard) };Rule { Matches { Domain("|gdemoideti.ru|") }, Action(Discard) };Rule { Matches { Domain("|csod.com|") }, Action(Discard) };Rule { Matches { Domain("|scitation.org|") }, Action(Discard) };Rule { Matches { Domain("|findagrave.com|") }, Action(Discard) };Rule { Matches { Domain("|devline.tv|") }, Action(Discard) };Rule { Matches { Domain("|adnxs-simple.com|") }, Action(Discard) };Rule { Matches { Domain("|banggood.com|") }, Action(Discard) };Rule { Matches { Domain("|tsa.gov|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-50.com|") }, Action(Discard) };Rule { Matches { Domain("|pandasecurity.com|") }, Action(Discard) };Rule { Matches { Domain("|pingone.com|") }, Action(Discard) };Rule { Matches { Domain("|photopea.com|") }, Action(Discard) };Rule { Matches { Domain("|icons8.com|") }, Action(Discard) };Rule { Matches { Domain("|runescape.com|") }, Action(Discard) };Rule { Matches { Domain("|al.com|") }, Action(Discard) };Rule { Matches { Domain("|consumerfinance.gov|") }, Action(Discard) };Rule { Matches { Domain("|chronicle.com|") }, Action(Discard) };Rule { Matches { Domain("|domp4.cc|") }, Action(Discard) };Rule { Matches { Domain("|cognitivlabs.com|") }, Action(Discard) };Rule { Matches { Domain("|citilink.ru|") }, Action(Discard) };Rule { Matches { Domain("|marvel.com|") }, Action(Discard) };Rule { Matches { Domain("|apachetoday.com|") }, Action(Discard) };Rule { Matches { Domain("|cloudways.com|") }, Action(Discard) };Rule { Matches { Domain("|active.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-18.com|") }, Action(Discard) };Rule { Matches { Domain("|tweetdec.com|") }, Action(Discard) };Rule { Matches { Domain("|jsfiddle.net|") }, Action(Discard) };Rule { Matches { Domain("|mvideo.ru|") }, Action(Discard) };Rule { Matches { Domain("|bonappetit.com|") }, Action(Discard) };Rule { Matches { Domain("|spamhaus.net|") }, Action(Discard) };Rule { Matches { Domain("|im-apps.net|") }, Action(Discard) };Rule { Matches { Domain("|animego.org|") }, Action(Discard) };Rule { Matches { Domain("|invisalign.com|") }, Action(Discard) };Rule { Matches { Domain("|goodoo.ru|") }, Action(Discard) };Rule { Matches { Domain("|newsday.com|") }, Action(Discard) };Rule { Matches { Domain("|dbankcdn.ru|") }, Action(Discard) };Rule { Matches { Domain("|lbl.gov|") }, Action(Discard) };Rule { Matches { Domain("|warthunder.com|") }, Action(Discard) };Rule { Matches { Domain("|cdbaby.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-24.net|") }, Action(Discard) };Rule { Matches { Domain("|arte.tv|") }, Action(Discard) };Rule { Matches { Domain("|blackbaud.com|") }, Action(Discard) };Rule { Matches { Domain("|discordapp.net|") }, Action(Discard) };Rule { Matches { Domain("|w.org|") }, Action(Discard) };Rule { Matches { Domain("|capgemini.com|") }, Action(Discard) };Rule { Matches { Domain("|thestar.com.my|") }, Action(Discard) };Rule { Matches { Domain("|google.hu|") }, Action(Discard) };Rule { Matches { Domain("|afr.com|") }, Action(Discard) };Rule { Matches { Domain("|formula1.com|") }, Action(Discard) };Rule { Matches { Domain("|delish.com|") }, Action(Discard) };Rule { Matches { Domain("|theme-fusion.com|") }, Action(Discard) };Rule { Matches { Domain("|cfr.org|") }, Action(Discard) };Rule { Matches { Domain("|azertag.az|") }, Action(Discard) };Rule { Matches { Domain("|tate.org.uk|") }, Action(Discard) };Rule { Matches { Domain("|pub.dev|") }, Action(Discard) };Rule { Matches { Domain("|ruiwen.com|") }, Action(Discard) };Rule { Matches { Domain("|raiffeisen.ru|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-26.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|whois.com|") }, Action(Discard) };Rule { Matches { Domain("|theonion.com|") }, Action(Discard) };Rule { Matches { Domain("|origin.com|") }, Action(Discard) };Rule { Matches { Domain("|sc.com|") }, Action(Discard) };Rule { Matches { Domain("|bountytowels.com|") }, Action(Discard) };Rule { Matches { Domain("|filehorse.com|") }, Action(Discard) };Rule { Matches { Domain("|parents.com|") }, Action(Discard) };Rule { Matches { Domain("|poznan.pl|") }, Action(Discard) };Rule { Matches { Domain("|coloros.com|") }, Action(Discard) };Rule { Matches { Domain("|ulta.com|") }, Action(Discard) };Rule { Matches { Domain("|1tv.ru|") }, Action(Discard) };Rule { Matches { Domain("|filmaffinity.com|") }, Action(Discard) };Rule { Matches { Domain("|se.com|") }, Action(Discard) };Rule { Matches { Domain("|vcu.edu|") }, Action(Discard) };Rule { Matches { Domain("|cc.com|") }, Action(Discard) };Rule { Matches { Domain("|medicalxpress.com|") }, Action(Discard) };Rule { Matches { Domain("|jsonline.com|") }, Action(Discard) };Rule { Matches { Domain("|haraj.com.sa|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-37.net|") }, Action(Discard) };Rule { Matches { Domain("|louisvuitton.com|") }, Action(Discard) };Rule { Matches { Domain("|truist.com|") }, Action(Discard) };Rule { Matches { Domain("|topuniversities.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-14.net|") }, Action(Discard) };Rule { Matches { Domain("|fantia.jp|") }, Action(Discard) };Rule { Matches { Domain("|arkoselabs.com|") }, Action(Discard) };Rule { Matches { Domain("|wpbeginner.com|") }, Action(Discard) };Rule { Matches { Domain("|tudelft.nl|") }, Action(Discard) };Rule { Matches { Domain("|igvita.com|") }, Action(Discard) };Rule { Matches { Domain("|fu-berlin.de|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-29.org|") }, Action(Discard) };Rule { Matches { Domain("|pngwing.com|") }, Action(Discard) };Rule { Matches { Domain("|whiterabbitpress.com|") }, Action(Discard) };Rule { Matches { Domain("|brightcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|lanzouy.com|") }, Action(Discard) };Rule { Matches { Domain("|gale.com|") }, Action(Discard) };Rule { Matches { Domain("|gamekee.com|") }, Action(Discard) };Rule { Matches { Domain("|demon.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|1kbtool.com|") }, Action(Discard) };Rule { Matches { Domain("|cargocollective.com|") }, Action(Discard) };Rule { Matches { Domain("|weightwatchers.com|") }, Action(Discard) };Rule { Matches { Domain("|namesilo.com|") }, Action(Discard) };Rule { Matches { Domain("|adhigh.net|") }, Action(Discard) };Rule { Matches { Domain("|vkplay.ru|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-23.org|") }, Action(Discard) };Rule { Matches { Domain("|yy.com|") }, Action(Discard) };Rule { Matches { Domain("|youm7.com|") }, Action(Discard) };Rule { Matches { Domain("|mogu.com|") }, Action(Discard) };Rule { Matches { Domain("|respawn.com|") }, Action(Discard) };Rule { Matches { Domain("|xrea.com|") }, Action(Discard) };Rule { Matches { Domain("|google.pt|") }, Action(Discard) };Rule { Matches { Domain("|sehuatang.net|") }, Action(Discard) };Rule { Matches { Domain("|c-span.org|") }, Action(Discard) };Rule { Matches { Domain("|cloud-by-sage.fr|") }, Action(Discard) };Rule { Matches { Domain("|isipp.com|") }, Action(Discard) };Rule { Matches { Domain("|otenet.gr|") }, Action(Discard) };Rule { Matches { Domain("|statnews.com|") }, Action(Discard) };Rule { Matches { Domain("|ezinearticles.com|") }, Action(Discard) };Rule { Matches { Domain("|post.ch|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-40.net|") }, Action(Discard) };Rule { Matches { Domain("|scotiabank.com|") }, Action(Discard) };Rule { Matches { Domain("|dbs.com|") }, Action(Discard) };Rule { Matches { Domain("|afp.com|") }, Action(Discard) };Rule { Matches { Domain("|linuxhint.com|") }, Action(Discard) };Rule { Matches { Domain("|odnoklassniki.ru|") }, Action(Discard) };Rule { Matches { Domain("|lolesports.com|") }, Action(Discard) };Rule { Matches { Domain("|twitpic.com|") }, Action(Discard) };Rule { Matches { Domain("|paytm.in|") }, Action(Discard) };Rule { Matches { Domain("|247sports.com|") }, Action(Discard) };Rule { Matches { Domain("|servenobid.com|") }, Action(Discard) };Rule { Matches { Domain("|helsinki.fi|") }, Action(Discard) };Rule { Matches { Domain("|akamai-access.com|") }, Action(Discard) };Rule { Matches { Domain("|reliefweb.int|") }, Action(Discard) };Rule { Matches { Domain("|rte.ie|") }, Action(Discard) };Rule { Matches { Domain("|akamaistream.net|") }, Action(Discard) };Rule { Matches { Domain("|vzbi.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-63.com|") }, Action(Discard) };Rule { Matches { Domain("|arcpublishing.com|") }, Action(Discard) };Rule { Matches { Domain("|ghost.org|") }, Action(Discard) };Rule { Matches { Domain("|azlyrics.com|") }, Action(Discard) };Rule { Matches { Domain("|abs-cbnip.tv|") }, Action(Discard) };Rule { Matches { Domain("|pair.com|") }, Action(Discard) };Rule { Matches { Domain("|heytapmobi.com|") }, Action(Discard) };Rule { Matches { Domain("|thetrainline.com|") }, Action(Discard) };Rule { Matches { Domain("|github.blog|") }, Action(Discard) };Rule { Matches { Domain("|d-net.pro|") }, Action(Discard) };Rule { Matches { Domain("|temple.edu|") }, Action(Discard) };Rule { Matches { Domain("|radissonhotels.com|") }, Action(Discard) };Rule { Matches { Domain("|addthisedge.com|") }, Action(Discard) };Rule { Matches { Domain("|9damaogame.net|") }, Action(Discard) };Rule { Matches { Domain("|cgood.ru|") }, Action(Discard) };Rule { Matches { Domain("|mainichi.jp|") }, Action(Discard) };Rule { Matches { Domain("|deltadna.net|") }, Action(Discard) };Rule { Matches { Domain("|gemius.pl|") }, Action(Discard) };Rule { Matches { Domain("|xgroovy.com|") }, Action(Discard) };Rule { Matches { Domain("|vip.com|") }, Action(Discard) };Rule { Matches { Domain("|fcomet.com|") }, Action(Discard) };Rule { Matches { Domain("|vodafone.com|") }, Action(Discard) };Rule { Matches { Domain("|threebit.net|") }, Action(Discard) };Rule { Matches { Domain("|vodafone.pt|") }, Action(Discard) };Rule { Matches { Domain("|ssyoutube.com|") }, Action(Discard) };Rule { Matches { Domain("|westerndigital.com|") }, Action(Discard) };Rule { Matches { Domain("|equifax.com|") }, Action(Discard) };Rule { Matches { Domain("|easyjet.com|") }, Action(Discard) };Rule { Matches { Domain("|zpath.net|") }, Action(Discard) };Rule { Matches { Domain("|lge.com|") }, Action(Discard) };Rule { Matches { Domain("|unixtools.org|") }, Action(Discard) };Rule { Matches { Domain("|oecd-ilibrary.org|") }, Action(Discard) };Rule { Matches { Domain("|fourseasons.com|") }, Action(Discard) };Rule { Matches { Domain("|polimi.it|") }, Action(Discard) };Rule { Matches { Domain("|ky.gov|") }, Action(Discard) };Rule { Matches { Domain("|comicbook.com|") }, Action(Discard) };Rule { Matches { Domain("|arfbiqgapb.com|") }, Action(Discard) };Rule { Matches { Domain("|netafraz.com|") }, Action(Discard) };Rule { Matches { Domain("|theqoo.net|") }, Action(Discard) };Rule { Matches { Domain("|hyprmx.com|") }, Action(Discard) };Rule { Matches { Domain("|yhdmp.cc|") }, Action(Discard) };Rule { Matches { Domain("|aizhan.com|") }, Action(Discard) };Rule { Matches { Domain("|mradx.net|") }, Action(Discard) };Rule { Matches { Domain("|rrdynb.com|") }, Action(Discard) };Rule { Matches { Domain("|cyberark.com|") }, Action(Discard) };Rule { Matches { Domain("|uwindsor.ca|") }, Action(Discard) };Rule { Matches { Domain("|shell.com|") }, Action(Discard) };Rule { Matches { Domain("|owneriq.net|") }, Action(Discard) };Rule { Matches { Domain("|asda.com|") }, Action(Discard) };Rule { Matches { Domain("|bell.ca|") }, Action(Discard) };Rule { Matches { Domain("|hku.hk|") }, Action(Discard) };Rule { Matches { Domain("|autotrader.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|visualcapitalist.com|") }, Action(Discard) };Rule { Matches { Domain("|businessnewsdaily.com|") }, Action(Discard) };Rule { Matches { Domain("|on24.com|") }, Action(Discard) };Rule { Matches { Domain("|azure-api.net|") }, Action(Discard) };Rule { Matches { Domain("|youth.cn|") }, Action(Discard) };Rule { Matches { Domain("|blogimg.jp|") }, Action(Discard) };Rule { Matches { Domain("|hsbc.com|") }, Action(Discard) };Rule { Matches { Domain("|ilbe.com|") }, Action(Discard) };Rule { Matches { Domain("|telmexla.net.co|") }, Action(Discard) };Rule { Matches { Domain("|chime.aws|") }, Action(Discard) };Rule { Matches { Domain("|wb.ru|") }, Action(Discard) };Rule { Matches { Domain("|neea.edu.cn|") }, Action(Discard) };Rule { Matches { Domain("|pbskids.org|") }, Action(Discard) };Rule { Matches { Domain("|eac-front.com|") }, Action(Discard) };Rule { Matches { Domain("|octopus.energy|") }, Action(Discard) };Rule { Matches { Domain("|dayoo.com|") }, Action(Discard) };Rule { Matches { Domain("|jobui.com|") }, Action(Discard) };Rule { Matches { Domain("|apta.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|businessinsider.in|") }, Action(Discard) };Rule { Matches { Domain("|aafp.org|") }, Action(Discard) };Rule { Matches { Domain("|interfax.ru|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-53.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|mi-img.com|") }, Action(Discard) };Rule { Matches { Domain("|firstpost.com|") }, Action(Discard) };Rule { Matches { Domain("|freebitco.in|") }, Action(Discard) };Rule { Matches { Domain("|forgeofempires.com|") }, Action(Discard) };Rule { Matches { Domain("|tomtom.com|") }, Action(Discard) };Rule { Matches { Domain("|stltoday.com|") }, Action(Discard) };Rule { Matches { Domain("|handle.net|") }, Action(Discard) };Rule { Matches { Domain("|onaudience.com|") }, Action(Discard) };Rule { Matches { Domain("|uwo.ca|") }, Action(Discard) };Rule { Matches { Domain("|rutarget.ru|") }, Action(Discard) };Rule { Matches { Domain("|nic.fr|") }, Action(Discard) };Rule { Matches { Domain("|smartasset.com|") }, Action(Discard) };Rule { Matches { Domain("|glosbe.com|") }, Action(Discard) };Rule { Matches { Domain("|system-monitor.com|") }, Action(Discard) };Rule { Matches { Domain("|lilly.com|") }, Action(Discard) };Rule { Matches { Domain("|detroitnews.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-57.net|") }, Action(Discard) };Rule { Matches { Domain("|iz.ru|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-09.net|") }, Action(Discard) };Rule { Matches { Domain("|r00t.cf|") }, Action(Discard) };Rule { Matches { Domain("|kff.org|") }, Action(Discard) };Rule { Matches { Domain("|rmdown.com|") }, Action(Discard) };Rule { Matches { Domain("|grubhub.com|") }, Action(Discard) };Rule { Matches { Domain("|spbtv.com|") }, Action(Discard) };Rule { Matches { Domain("|akc.org|") }, Action(Discard) };Rule { Matches { Domain("|aappublications.org|") }, Action(Discard) };Rule { Matches { Domain("|clickagy.com|") }, Action(Discard) };Rule { Matches { Domain("|datapipe.net|") }, Action(Discard) };Rule { Matches { Domain("|newrepublic.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-58.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-31.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|eeoc.gov|") }, Action(Discard) };Rule { Matches { Domain("|nghttp2.org|") }, Action(Discard) };Rule { Matches { Domain("|freenom.com|") }, Action(Discard) };Rule { Matches { Domain("|buzzoola.com|") }, Action(Discard) };Rule { Matches { Domain("|reurl.cc|") }, Action(Discard) };Rule { Matches { Domain("|fnb.co.za|") }, Action(Discard) };Rule { Matches { Domain("|hostmonster.com|") }, Action(Discard) };Rule { Matches { Domain("|bytelb.com|") }, Action(Discard) };Rule { Matches { Domain("|sitepoint.com|") }, Action(Discard) };Rule { Matches { Domain("|derstandard.at|") }, Action(Discard) };Rule { Matches { Domain("|campaign.gov.uk|") }, Action(Discard) };Rule { Matches { Domain("|directv.com|") }, Action(Discard) };Rule { Matches { Domain("|who.is|") }, Action(Discard) };Rule { Matches { Domain("|asm.org|") }, Action(Discard) };Rule { Matches { Domain("|office365.us|") }, Action(Discard) };Rule { Matches { Domain("|you.com|") }, Action(Discard) };Rule { Matches { Domain("|samsungcloudcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|cults3d.com|") }, Action(Discard) };Rule { Matches { Domain("|orlandosentinel.com|") }, Action(Discard) };Rule { Matches { Domain("|iyf.tv|") }, Action(Discard) };Rule { Matches { Domain("|warnermedia.com|") }, Action(Discard) };Rule { Matches { Domain("|websiteregain.com|") }, Action(Discard) };Rule { Matches { Domain("|ipinfo.io|") }, Action(Discard) };Rule { Matches { Domain("|lancaster.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|akaquill.net|") }, Action(Discard) };Rule { Matches { Domain("|androidauthority.com|") }, Action(Discard) };Rule { Matches { Domain("|brides.com|") }, Action(Discard) };Rule { Matches { Domain("|angel.co|") }, Action(Discard) };Rule { Matches { Domain("|xm.com|") }, Action(Discard) };Rule { Matches { Domain("|kasserver.com|") }, Action(Discard) };Rule { Matches { Domain("|merit.net|") }, Action(Discard) };Rule { Matches { Domain("|superawesome.tv|") }, Action(Discard) };Rule { Matches { Domain("|avclub.com|") }, Action(Discard) };Rule { Matches { Domain("|splunkdev.net|") }, Action(Discard) };Rule { Matches { Domain("|infoseek.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|ironsrc.mobi|") }, Action(Discard) };Rule { Matches { Domain("|libguides.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-15.net|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-32.org|") }, Action(Discard) };Rule { Matches { Domain("|klook.com|") }, Action(Discard) };Rule { Matches { Domain("|au-msedge.net|") }, Action(Discard) };Rule { Matches { Domain("|ebanking-services.com|") }, Action(Discard) };Rule { Matches { Domain("|dickssportinggoods.com|") }, Action(Discard) };Rule { Matches { Domain("|lianjia.com|") }, Action(Discard) };Rule { Matches { Domain("|register.it|") }, Action(Discard) };Rule { Matches { Domain("|infinitecampus.org|") }, Action(Discard) };Rule { Matches { Domain("|winscp.net|") }, Action(Discard) };Rule { Matches { Domain("|onlineaccount.net|") }, Action(Discard) };Rule { Matches { Domain("|tax.gov.ir|") }, Action(Discard) };Rule { Matches { Domain("|wayport.net|") }, Action(Discard) };Rule { Matches { Domain("|pxf.io|") }, Action(Discard) };Rule { Matches { Domain("|cyberciti.biz|") }, Action(Discard) };Rule { Matches { Domain("|hik-connect.com|") }, Action(Discard) };Rule { Matches { Domain("|bp.com|") }, Action(Discard) };Rule { Matches { Domain("|seriouseats.com|") }, Action(Discard) };Rule { Matches { Domain("|loverslab.com|") }, Action(Discard) };Rule { Matches { Domain("|careerbuilder.com|") }, Action(Discard) };Rule { Matches { Domain("|windowsphone.com|") }, Action(Discard) };Rule { Matches { Domain("|paheal.net|") }, Action(Discard) };Rule { Matches { Domain("|unh.edu|") }, Action(Discard) };Rule { Matches { Domain("|myvisualiq.net|") }, Action(Discard) };Rule { Matches { Domain("|helpguide.org|") }, Action(Discard) };Rule { Matches { Domain("|joins.com|") }, Action(Discard) };Rule { Matches { Domain("|tagesspiegel.de|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-14.org|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-11.org|") }, Action(Discard) };Rule { Matches { Domain("|sprinthost.net|") }, Action(Discard) };Rule { Matches { Domain("|ksmobile.com|") }, Action(Discard) };Rule { Matches { Domain("|altavista.com|") }, Action(Discard) };Rule { Matches { Domain("|theplatform.com|") }, Action(Discard) };Rule { Matches { Domain("|rtactivate.com|") }, Action(Discard) };Rule { Matches { Domain("|gaesataigal.uno|") }, Action(Discard) };Rule { Matches { Domain("|h2os.com|") }, Action(Discard) };Rule { Matches { Domain("|elitedaily.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-05.net|") }, Action(Discard) };Rule { Matches { Domain("|openlibrary.org|") }, Action(Discard) };Rule { Matches { Domain("|mediaset.it|") }, Action(Discard) };Rule { Matches { Domain("|delaware.gov|") }, Action(Discard) };Rule { Matches { Domain("|gesetze-im-internet.de|") }, Action(Discard) };Rule { Matches { Domain("|softether-network.net|") }, Action(Discard) };Rule { Matches { Domain("|stern.de|") }, Action(Discard) };Rule { Matches { Domain("|adingo.jp|") }, Action(Discard) };Rule { Matches { Domain("|termsfeed.com|") }, Action(Discard) };Rule { Matches { Domain("|elastic-cloud.com|") }, Action(Discard) };Rule { Matches { Domain("|ht-systems.ru|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-50.net|") }, Action(Discard) };Rule { Matches { Domain("|saraba1st.com|") }, Action(Discard) };Rule { Matches { Domain("|autoblog.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-12.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|haberler.com|") }, Action(Discard) };Rule { Matches { Domain("|wuqianka.top|") }, Action(Discard) };Rule { Matches { Domain("|yandex.by|") }, Action(Discard) };Rule { Matches { Domain("|shopbop.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-27.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|more.tv|") }, Action(Discard) };Rule { Matches { Domain("|bmcx.com|") }, Action(Discard) };Rule { Matches { Domain("|foresee.com|") }, Action(Discard) };Rule { Matches { Domain("|ernet.in|") }, Action(Discard) };Rule { Matches { Domain("|csiro.au|") }, Action(Discard) };Rule { Matches { Domain("|domainnamedns.com|") }, Action(Discard) };Rule { Matches { Domain("|tidaltv.com|") }, Action(Discard) };Rule { Matches { Domain("|splunkcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|sb-cd.com|") }, Action(Discard) };Rule { Matches { Domain("|tt1069.com|") }, Action(Discard) };Rule { Matches { Domain("|xs4all.nl|") }, Action(Discard) };Rule { Matches { Domain("|x-mol.com|") }, Action(Discard) };Rule { Matches { Domain("|sun-sentinel.com|") }, Action(Discard) };Rule { Matches { Domain("|smore.com|") }, Action(Discard) };Rule { Matches { Domain("|userway.org|") }, Action(Discard) };Rule { Matches { Domain("|revolut.com|") }, Action(Discard) };Rule { Matches { Domain("|1377x.to|") }, Action(Discard) };Rule { Matches { Domain("|bitcoin.org|") }, Action(Discard) };Rule { Matches { Domain("|manitu.de|") }, Action(Discard) };Rule { Matches { Domain("|ibiblio.org|") }, Action(Discard) };Rule { Matches { Domain("|blurb.com|") }, Action(Discard) };Rule { Matches { Domain("|eldiario.es|") }, Action(Discard) };Rule { Matches { Domain("|ccleaner.com|") }, Action(Discard) };Rule { Matches { Domain("|nicehash.com|") }, Action(Discard) };Rule { Matches { Domain("|gyazo.com|") }, Action(Discard) };Rule { Matches { Domain("|google.fi|") }, Action(Discard) };Rule { Matches { Domain("|intgdc.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-46.net|") }, Action(Discard) };Rule { Matches { Domain("|bluestacks.com|") }, Action(Discard) };Rule { Matches { Domain("|tudou.com|") }, Action(Discard) };Rule { Matches { Domain("|louvre.fr|") }, Action(Discard) };Rule { Matches { Domain("|cedexis-radar.net|") }, Action(Discard) };Rule { Matches { Domain("|bufferapp.com|") }, Action(Discard) };Rule { Matches { Domain("|fpbns.net|") }, Action(Discard) };Rule { Matches { Domain("|goojara.to|") }, Action(Discard) };Rule { Matches { Domain("|winzip.com|") }, Action(Discard) };Rule { Matches { Domain("|frame.io|") }, Action(Discard) };Rule { Matches { Domain("|tulane.edu|") }, Action(Discard) };Rule { Matches { Domain("|aeroflot.ru|") }, Action(Discard) };Rule { Matches { Domain("|workplace.com|") }, Action(Discard) };Rule { Matches { Domain("|code.org|") }, Action(Discard) };Rule { Matches { Domain("|live-video.net|") }, Action(Discard) };Rule { Matches { Domain("|nrdc.org|") }, Action(Discard) };Rule { Matches { Domain("|euractiv.com|") }, Action(Discard) };Rule { Matches { Domain("|123moviesfree.net|") }, Action(Discard) };Rule { Matches { Domain("|global-e.com|") }, Action(Discard) };Rule { Matches { Domain("|lululemon.com|") }, Action(Discard) };Rule { Matches { Domain("|dailydot.com|") }, Action(Discard) };Rule { Matches { Domain("|fireeyecloud.com|") }, Action(Discard) };Rule { Matches { Domain("|allstate.com|") }, Action(Discard) };Rule { Matches { Domain("|commbank.com.au|") }, Action(Discard) };Rule { Matches { Domain("|hiyobi.me|") }, Action(Discard) };Rule { Matches { Domain("|nfpa.org|") }, Action(Discard) };Rule { Matches { Domain("|qnap.com|") }, Action(Discard) };Rule { Matches { Domain("|expressen.se|") }, Action(Discard) };Rule { Matches { Domain("|google.dk|") }, Action(Discard) };Rule { Matches { Domain("|alaska.gov|") }, Action(Discard) };Rule { Matches { Domain("|softlayer.com|") }, Action(Discard) };Rule { Matches { Domain("|thewrap.com|") }, Action(Discard) };Rule { Matches { Domain("|calm.com|") }, Action(Discard) };Rule { Matches { Domain("|t0x.net|") }, Action(Discard) };Rule { Matches { Domain("|2kcoretech.online|") }, Action(Discard) };Rule { Matches { Domain("|headspace.com|") }, Action(Discard) };Rule { Matches { Domain("|hereapi.com|") }, Action(Discard) };Rule { Matches { Domain("|sudrf.ru|") }, Action(Discard) };Rule { Matches { Domain("|vedcdnlb.com|") }, Action(Discard) };Rule { Matches { Domain("|urbanup.com|") }, Action(Discard) };Rule { Matches { Domain("|olx.pt|") }, Action(Discard) };Rule { Matches { Domain("|thenounproject.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-60.net|") }, Action(Discard) };Rule { Matches { Domain("|payscale.com|") }, Action(Discard) };Rule { Matches { Domain("|aliyundrive.com|") }, Action(Discard) };Rule { Matches { Domain("|openedition.org|") }, Action(Discard) };Rule { Matches { Domain("|beacons.ai|") }, Action(Discard) };Rule { Matches { Domain("|uadns.com|") }, Action(Discard) };Rule { Matches { Domain("|jpmorganchase.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-35.net|") }, Action(Discard) };Rule { Matches { Domain("|ncsl.org|") }, Action(Discard) };Rule { Matches { Domain("|ewg.org|") }, Action(Discard) };Rule { Matches { Domain("|cloud.gov|") }, Action(Discard) };Rule { Matches { Domain("|adtilt.com|") }, Action(Discard) };Rule { Matches { Domain("|securedvisit.com|") }, Action(Discard) };Rule { Matches { Domain("|hawaii.gov|") }, Action(Discard) };Rule { Matches { Domain("|creativemarket.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-50.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|afip.gob.ar|") }, Action(Discard) };Rule { Matches { Domain("|seesaa.net|") }, Action(Discard) };Rule { Matches { Domain("|uisdc.com|") }, Action(Discard) };Rule { Matches { Domain("|countryliving.com|") }, Action(Discard) };Rule { Matches { Domain("|videojs.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-06.org|") }, Action(Discard) };Rule { Matches { Domain("|google.no|") }, Action(Discard) };Rule { Matches { Domain("|service-public.fr|") }, Action(Discard) };Rule { Matches { Domain("|goofy-cdn.com|") }, Action(Discard) };Rule { Matches { Domain("|zee5.com|") }, Action(Discard) };Rule { Matches { Domain("|adac.de|") }, Action(Discard) };Rule { Matches { Domain("|mobilegamestats.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-53.org|") }, Action(Discard) };Rule { Matches { Domain("|digitalframeflow.com|") }, Action(Discard) };Rule { Matches { Domain("|wikispaces.com|") }, Action(Discard) };Rule { Matches { Domain("|airtel.in|") }, Action(Discard) };Rule { Matches { Domain("|scielo.br|") }, Action(Discard) };Rule { Matches { Domain("|pingdom.com|") }, Action(Discard) };Rule { Matches { Domain("|volvocars.com|") }, Action(Discard) };Rule { Matches { Domain("|shadowserver.org|") }, Action(Discard) };Rule { Matches { Domain("|thermofisher.com|") }, Action(Discard) };Rule { Matches { Domain("|visual.ly|") }, Action(Discard) };Rule { Matches { Domain("|open.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|pornhat.com|") }, Action(Discard) };Rule { Matches { Domain("|savvasrealize.com|") }, Action(Discard) };Rule { Matches { Domain("|pornkai.com|") }, Action(Discard) };Rule { Matches { Domain("|greythr.com|") }, Action(Discard) };Rule { Matches { Domain("|tutu.ru|") }, Action(Discard) };Rule { Matches { Domain("|autotrader.com|") }, Action(Discard) };Rule { Matches { Domain("|freedesktop.org|") }, Action(Discard) };Rule { Matches { Domain("|grigorik.com|") }, Action(Discard) };Rule { Matches { Domain("|liberation.fr|") }, Action(Discard) };Rule { Matches { Domain("|etsystatic.com|") }, Action(Discard) };Rule { Matches { Domain("|consensu.org|") }, Action(Discard) };Rule { Matches { Domain("|audacy.com|") }, Action(Discard) };Rule { Matches { Domain("|watchfreejavonline.co|") }, Action(Discard) };Rule { Matches { Domain("|adserv.ai|") }, Action(Discard) };Rule { Matches { Domain("|bmo.com|") }, Action(Discard) };Rule { Matches { Domain("|thescore.com|") }, Action(Discard) };Rule { Matches { Domain("|tmweb.ru|") }, Action(Discard) };Rule { Matches { Domain("|rug.nl|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-11.net|") }, Action(Discard) };Rule { Matches { Domain("|datadoghq-browser-agent.com|") }, Action(Discard) };Rule { Matches { Domain("|cplusplus.com|") }, Action(Discard) };Rule { Matches { Domain("|akahost.net|") }, Action(Discard) };Rule { Matches { Domain("|p-cdn.us|") }, Action(Discard) };Rule { Matches { Domain("|home.kpmg|") }, Action(Discard) };Rule { Matches { Domain("|ysepan.com|") }, Action(Discard) };Rule { Matches { Domain("|exodus.io|") }, Action(Discard) };Rule { Matches { Domain("|betterhelp.com|") }, Action(Discard) };Rule { Matches { Domain("|bl.uk|") }, Action(Discard) };Rule { Matches { Domain("|njav.tv|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-42.net|") }, Action(Discard) };Rule { Matches { Domain("|pinterest.com.mx|") }, Action(Discard) };Rule { Matches { Domain("|joinhandshake.com|") }, Action(Discard) };Rule { Matches { Domain("|soft98.ir|") }, Action(Discard) };Rule { Matches { Domain("|webgo.de|") }, Action(Discard) };Rule { Matches { Domain("|just-eat.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|exhentai.org|") }, Action(Discard) };Rule { Matches { Domain("|tool.lu|") }, Action(Discard) };Rule { Matches { Domain("|axisbank.co.in|") }, Action(Discard) };Rule { Matches { Domain("|telekom.net|") }, Action(Discard) };Rule { Matches { Domain("|asuscomm.com|") }, Action(Discard) };Rule { Matches { Domain("|forticloud.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-54.org|") }, Action(Discard) };Rule { Matches { Domain("|planalto.gov.br|") }, Action(Discard) };Rule { Matches { Domain("|kqzyfj.com|") }, Action(Discard) };Rule { Matches { Domain("|worldwildlife.org|") }, Action(Discard) };Rule { Matches { Domain("|7oc5b1i3v4iu.top|") }, Action(Discard) };Rule { Matches { Domain("|band.us|") }, Action(Discard) };Rule { Matches { Domain("|heroku.com|") }, Action(Discard) };Rule { Matches { Domain("|mobiletulip.com|") }, Action(Discard) };Rule { Matches { Domain("|ameba.jp|") }, Action(Discard) };Rule { Matches { Domain("|thunderbird.net|") }, Action(Discard) };Rule { Matches { Domain("|speakerdeck.com|") }, Action(Discard) };Rule { Matches { Domain("|kampyle.com|") }, Action(Discard) };Rule { Matches { Domain("|bizport.cn|") }, Action(Discard) };Rule { Matches { Domain("|nola.com|") }, Action(Discard) };Rule { Matches { Domain("|hypebeast.com|") }, Action(Discard) };Rule { Matches { Domain("|travelocity.com|") }, Action(Discard) };Rule { Matches { Domain("|freshworks.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-16.org|") }, Action(Discard) };Rule { Matches { Domain("|madrasati.sa|") }, Action(Discard) };Rule { Matches { Domain("|insidehighered.com|") }, Action(Discard) };Rule { Matches { Domain("|uu.se|") }, Action(Discard) };Rule { Matches { Domain("|michaels.com|") }, Action(Discard) };Rule { Matches { Domain("|tuyaeu.com|") }, Action(Discard) };Rule { Matches { Domain("|cylance.com|") }, Action(Discard) };Rule { Matches { Domain("|books.com.tw|") }, Action(Discard) };Rule { Matches { Domain("|aweber.com|") }, Action(Discard) };Rule { Matches { Domain("|distmed.com|") }, Action(Discard) };Rule { Matches { Domain("|finam.ru|") }, Action(Discard) };Rule { Matches { Domain("|googlepages.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-31.net|") }, Action(Discard) };Rule { Matches { Domain("|telenor.dk|") }, Action(Discard) };Rule { Matches { Domain("|akakce.com|") }, Action(Discard) };Rule { Matches { Domain("|360qhcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|64365.com|") }, Action(Discard) };Rule { Matches { Domain("|inews.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|prothomalo.com|") }, Action(Discard) };Rule { Matches { Domain("|enamad.ir|") }, Action(Discard) };Rule { Matches { Domain("|classlink.io|") }, Action(Discard) };Rule { Matches { Domain("|nrk.no|") }, Action(Discard) };Rule { Matches { Domain("|geocities.jp|") }, Action(Discard) };Rule { Matches { Domain("|infusionsoft.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-38.net|") }, Action(Discard) };Rule { Matches { Domain("|iotcplatform.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-49.net|") }, Action(Discard) };Rule { Matches { Domain("|sc.edu|") }, Action(Discard) };Rule { Matches { Domain("|sunporno.com|") }, Action(Discard) };Rule { Matches { Domain("|metoffice.gov.uk|") }, Action(Discard) };Rule { Matches { Domain("|usajobs.gov|") }, Action(Discard) };Rule { Matches { Domain("|drexel.edu|") }, Action(Discard) };Rule { Matches { Domain("|jandan.net|") }, Action(Discard) };Rule { Matches { Domain("|creativebloq.com|") }, Action(Discard) };Rule { Matches { Domain("|mrjav.net|") }, Action(Discard) };Rule { Matches { Domain("|abril.com.br|") }, Action(Discard) };Rule { Matches { Domain("|uni-heidelberg.de|") }, Action(Discard) };Rule { Matches { Domain("|ndr.de|") }, Action(Discard) };Rule { Matches { Domain("|cri.cn|") }, Action(Discard) };Rule { Matches { Domain("|people.cn|") }, Action(Discard) };Rule { Matches { Domain("|amtrak.com|") }, Action(Discard) };Rule { Matches { Domain("|mountain.com|") }, Action(Discard) };Rule { Matches { Domain("|wi.gov|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-55.org|") }, Action(Discard) };Rule { Matches { Domain("|imgbb.com|") }, Action(Discard) };Rule { Matches { Domain("|arbeitsagentur.de|") }, Action(Discard) };Rule { Matches { Domain("|bab.la|") }, Action(Discard) };Rule { Matches { Domain("|tasteofhome.com|") }, Action(Discard) };Rule { Matches { Domain("|wdr.de|") }, Action(Discard) };Rule { Matches { Domain("|vercel.app|") }, Action(Discard) };Rule { Matches { Domain("|desmos.com|") }, Action(Discard) };Rule { Matches { Domain("|aj2396.online|") }, Action(Discard) };Rule { Matches { Domain("|dbw.cn|") }, Action(Discard) };Rule { Matches { Domain("|questdiagnostics.com|") }, Action(Discard) };Rule { Matches { Domain("|org.ru|") }, Action(Discard) };Rule { Matches { Domain("|kriesi.at|") }, Action(Discard) };Rule { Matches { Domain("|cargurus.com|") }, Action(Discard) };Rule { Matches { Domain("|icloud.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|instana.io|") }, Action(Discard) };Rule { Matches { Domain("|diagrams.net|") }, Action(Discard) };Rule { Matches { Domain("|getadblock.com|") }, Action(Discard) };Rule { Matches { Domain("|ontario.ca|") }, Action(Discard) };Rule { Matches { Domain("|truefitcorp.com|") }, Action(Discard) };Rule { Matches { Domain("|walmart.com.mx|") }, Action(Discard) };Rule { Matches { Domain("|sdamgia.ru|") }, Action(Discard) };Rule { Matches { Domain("|oprah.com|") }, Action(Discard) };Rule { Matches { Domain("|bethesda.net|") }, Action(Discard) };Rule { Matches { Domain("|stackdns.com|") }, Action(Discard) };Rule { Matches { Domain("|mcm.ru|") }, Action(Discard) };Rule { Matches { Domain("|banvenez.com|") }, Action(Discard) };Rule { Matches { Domain("|mycdn.me|") }, Action(Discard) };Rule { Matches { Domain("|premierleague.com|") }, Action(Discard) };Rule { Matches { Domain("|dominos.com|") }, Action(Discard) };Rule { Matches { Domain("|motortrend.com|") }, Action(Discard) };Rule { Matches { Domain("|bc.edu|") }, Action(Discard) };Rule { Matches { Domain("|xitongzhijia.net|") }, Action(Discard) };Rule { Matches { Domain("|expediagroup.com|") }, Action(Discard) };Rule { Matches { Domain("|socialmediatoday.com|") }, Action(Discard) };Rule { Matches { Domain("|wrike.com|") }, Action(Discard) };Rule { Matches { Domain("|carrd.co|") }, Action(Discard) };Rule { Matches { Domain("|gitcode.net|") }, Action(Discard) };Rule { Matches { Domain("|lodz.pl|") }, Action(Discard) };Rule { Matches { Domain("|mendeley.com|") }, Action(Discard) };Rule { Matches { Domain("|arin.net|") }, Action(Discard) };Rule { Matches { Domain("|lendingtree.com|") }, Action(Discard) };Rule { Matches { Domain("|yougov.com|") }, Action(Discard) };Rule { Matches { Domain("|datacamp.com|") }, Action(Discard) };Rule { Matches { Domain("|dagbladet.no|") }, Action(Discard) };Rule { Matches { Domain("|hk01.com|") }, Action(Discard) };Rule { Matches { Domain("|weblio.jp|") }, Action(Discard) };Rule { Matches { Domain("|elcomercio.pe|") }, Action(Discard) };Rule { Matches { Domain("|clipchamp.com|") }, Action(Discard) };Rule { Matches { Domain("|skyrock.com|") }, Action(Discard) };Rule { Matches { Domain("|ua.edu|") }, Action(Discard) };Rule { Matches { Domain("|zoho.eu|") }, Action(Discard) };Rule { Matches { Domain("|videoplayerhub.com|") }, Action(Discard) };Rule { Matches { Domain("|kp.org|") }, Action(Discard) };Rule { Matches { Domain("|bayern.de|") }, Action(Discard) };Rule { Matches { Domain("|munich-airport.com|") }, Action(Discard) };Rule { Matches { Domain("|tci.ir|") }, Action(Discard) };Rule { Matches { Domain("|outsideonline.com|") }, Action(Discard) };Rule { Matches { Domain("|vzwwo.com|") }, Action(Discard) };Rule { Matches { Domain("|flippingbook.com|") }, Action(Discard) };Rule { Matches { Domain("|officedepot.com|") }, Action(Discard) };Rule { Matches { Domain("|financialpost.com|") }, Action(Discard) };Rule { Matches { Domain("|dcloudstc.com|") }, Action(Discard) };Rule { Matches { Domain("|europepmc.org|") }, Action(Discard) };Rule { Matches { Domain("|bigthink.com|") }, Action(Discard) };Rule { Matches { Domain("|lordfilm.lu|") }, Action(Discard) };Rule { Matches { Domain("|uvm.edu|") }, Action(Discard) };Rule { Matches { Domain("|seznamzpravy.cz|") }, Action(Discard) };Rule { Matches { Domain("|gravitational.io|") }, Action(Discard) };Rule { Matches { Domain("|rogers.com|") }, Action(Discard) };Rule { Matches { Domain("|retailmenot.com|") }, Action(Discard) };Rule { Matches { Domain("|oanda.com|") }, Action(Discard) };Rule { Matches { Domain("|victoriassecret.com|") }, Action(Discard) };Rule { Matches { Domain("|yospace.com|") }, Action(Discard) };Rule { Matches { Domain("|elecfans.com|") }, Action(Discard) };Rule { Matches { Domain("|sharefile.com|") }, Action(Discard) };Rule { Matches { Domain("|br.de|") }, Action(Discard) };Rule { Matches { Domain("|thebrighttag.com|") }, Action(Discard) };Rule { Matches { Domain("|zeotap.com|") }, Action(Discard) };Rule { Matches { Domain("|osd.mil|") }, Action(Discard) };Rule { Matches { Domain("|case.edu|") }, Action(Discard) };Rule { Matches { Domain("|springeropen.com|") }, Action(Discard) };Rule { Matches { Domain("|jiveip.net|") }, Action(Discard) };Rule { Matches { Domain("|telia.com|") }, Action(Discard) };Rule { Matches { Domain("|digimovie.vip|") }, Action(Discard) };Rule { Matches { Domain("|finviz.com|") }, Action(Discard) };Rule { Matches { Domain("|investors.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-47.net|") }, Action(Discard) };Rule { Matches { Domain("|musescore.com|") }, Action(Discard) };Rule { Matches { Domain("|99designs.com|") }, Action(Discard) };Rule { Matches { Domain("|storify.com|") }, Action(Discard) };Rule { Matches { Domain("|fineartamerica.com|") }, Action(Discard) };Rule { Matches { Domain("|himasoku.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-62.net|") }, Action(Discard) };Rule { Matches { Domain("|discuz.net|") }, Action(Discard) };Rule { Matches { Domain("|mlit.go.jp|") }, Action(Discard) };Rule { Matches { Domain("|paran.com|") }, Action(Discard) };Rule { Matches { Domain("|morganstanley.com|") }, Action(Discard) };Rule { Matches { Domain("|unmsapp.com|") }, Action(Discard) };Rule { Matches { Domain("|laracasts.com|") }, Action(Discard) };Rule { Matches { Domain("|fyber.com|") }, Action(Discard) };Rule { Matches { Domain("|sitesaver.net|") }, Action(Discard) };Rule { Matches { Domain("|blogspot.in|") }, Action(Discard) };Rule { Matches { Domain("|epicurious.com|") }, Action(Discard) };Rule { Matches { Domain("|linkbux.com|") }, Action(Discard) };Rule { Matches { Domain("|credly.com|") }, Action(Discard) };Rule { Matches { Domain("|adscale.de|") }, Action(Discard) };Rule { Matches { Domain("|myfonts.com|") }, Action(Discard) };Rule { Matches { Domain("|yna.co.kr|") }, Action(Discard) };Rule { Matches { Domain("|greenend.org.uk|") }, Action(Discard) };Rule { Matches { Domain("|healthgrades.com|") }, Action(Discard) };Rule { Matches { Domain("|st.com|") }, Action(Discard) };Rule { Matches { Domain("|emb-japan.go.jp|") }, Action(Discard) };Rule { Matches { Domain("|maoyan.com|") }, Action(Discard) };Rule { Matches { Domain("|dynamicyield.com|") }, Action(Discard) };Rule { Matches { Domain("|sap-ag.de|") }, Action(Discard) };Rule { Matches { Domain("|ntu.edu.tw|") }, Action(Discard) };Rule { Matches { Domain("|avangarddsl.ru|") }, Action(Discard) };Rule { Matches { Domain("|inquirer.net|") }, Action(Discard) };Rule { Matches { Domain("|diabetes.org|") }, Action(Discard) };Rule { Matches { Domain("|104.com.tw|") }, Action(Discard) };Rule { Matches { Domain("|infoq.cn|") }, Action(Discard) };Rule { Matches { Domain("|planetminecraft.com|") }, Action(Discard) };Rule { Matches { Domain("|zhaket.com|") }, Action(Discard) };Rule { Matches { Domain("|h3c.com|") }, Action(Discard) };Rule { Matches { Domain("|nami.org|") }, Action(Discard) };Rule { Matches { Domain("|hs-scripts.com|") }, Action(Discard) };Rule { Matches { Domain("|hotwire.com|") }, Action(Discard) };Rule { Matches { Domain("|justpremium.com|") }, Action(Discard) };Rule { Matches { Domain("|sheknows.com|") }, Action(Discard) };Rule { Matches { Domain("|bouncex.net|") }, Action(Discard) };Rule { Matches { Domain("|pewinternet.org|") }, Action(Discard) };Rule { Matches { Domain("|google.com.bd|") }, Action(Discard) };Rule { Matches { Domain("|audrte.com|") }, Action(Discard) };Rule { Matches { Domain("|geogebra.org|") }, Action(Discard) };Rule { Matches { Domain("|zenodo.org|") }, Action(Discard) };Rule { Matches { Domain("|brew.sh|") }, Action(Discard) };Rule { Matches { Domain("|avon.com|") }, Action(Discard) };Rule { Matches { Domain("|busuu.com|") }, Action(Discard) };Rule { Matches { Domain("|uni-muenchen.de|") }, Action(Discard) };Rule { Matches { Domain("|pghub.io|") }, Action(Discard) };Rule { Matches { Domain("|hrzn-nxt.com|") }, Action(Discard) };Rule { Matches { Domain("|argos.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|nspk.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-17.net|") }, Action(Discard) };Rule { Matches { Domain("|ai-lawandorder.com|") }, Action(Discard) };Rule { Matches { Domain("|activtrak.net|") }, Action(Discard) };Rule { Matches { Domain("|itellyou.cn|") }, Action(Discard) };Rule { Matches { Domain("|codeforces.com|") }, Action(Discard) };Rule { Matches { Domain("|jit.si|") }, Action(Discard) };Rule { Matches { Domain("|nutaku.net|") }, Action(Discard) };Rule { Matches { Domain("|hostloc.com|") }, Action(Discard) };Rule { Matches { Domain("|cgtn.com|") }, Action(Discard) };Rule { Matches { Domain("|britishmuseum.org|") }, Action(Discard) };Rule { Matches { Domain("|gucci.com|") }, Action(Discard) };Rule { Matches { Domain("|megagroup.ru|") }, Action(Discard) };Rule { Matches { Domain("|16personalities.com|") }, Action(Discard) };Rule { Matches { Domain("|dnsv2.com|") }, Action(Discard) };Rule { Matches { Domain("|fastly-insights.com|") }, Action(Discard) };Rule { Matches { Domain("|jin115.com|") }, Action(Discard) };Rule { Matches { Domain("|tuyaus.com|") }, Action(Discard) };Rule { Matches { Domain("|pearsoncmg.com|") }, Action(Discard) };Rule { Matches { Domain("|vamu.ru|") }, Action(Discard) };Rule { Matches { Domain("|nv.gov|") }, Action(Discard) };Rule { Matches { Domain("|kia.com|") }, Action(Discard) };Rule { Matches { Domain("|kqed.org|") }, Action(Discard) };Rule { Matches { Domain("|contently.com|") }, Action(Discard) };Rule { Matches { Domain("|poste.it|") }, Action(Discard) };Rule { Matches { Domain("|activemetering.com|") }, Action(Discard) };Rule { Matches { Domain("|yinghuacd.com|") }, Action(Discard) };Rule { Matches { Domain("|kapitalbank.az|") }, Action(Discard) };Rule { Matches { Domain("|blackmagicdesign.com|") }, Action(Discard) };Rule { Matches { Domain("|freeconvert.com|") }, Action(Discard) };Rule { Matches { Domain("|smartnews.net|") }, Action(Discard) };Rule { Matches { Domain("|next.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|takeaway.com|") }, Action(Discard) };Rule { Matches { Domain("|sd.gov|") }, Action(Discard) };Rule { Matches { Domain("|bom.gov.au|") }, Action(Discard) };Rule { Matches { Domain("|themuse.com|") }, Action(Discard) };Rule { Matches { Domain("|jcpenney.com|") }, Action(Discard) };Rule { Matches { Domain("|builtwith.com|") }, Action(Discard) };Rule { Matches { Domain("|ifood.com.br|") }, Action(Discard) };Rule { Matches { Domain("|oath.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-38.org|") }, Action(Discard) };Rule { Matches { Domain("|panopto.com|") }, Action(Discard) };Rule { Matches { Domain("|schneevonmorgen.com|") }, Action(Discard) };Rule { Matches { Domain("|dgdom.net|") }, Action(Discard) };Rule { Matches { Domain("|postermywall.com|") }, Action(Discard) };Rule { Matches { Domain("|coral.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|worldpopulationreview.com|") }, Action(Discard) };Rule { Matches { Domain("|curseforge.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-00.net|") }, Action(Discard) };Rule { Matches { Domain("|skyscanner.com|") }, Action(Discard) };Rule { Matches { Domain("|betsson.com|") }, Action(Discard) };Rule { Matches { Domain("|geotrust.com|") }, Action(Discard) };Rule { Matches { Domain("|hunan.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|tildacdn.com|") }, Action(Discard) };Rule { Matches { Domain("|toggl.com|") }, Action(Discard) };Rule { Matches { Domain("|lgappstv.com|") }, Action(Discard) };Rule { Matches { Domain("|reviewjournal.com|") }, Action(Discard) };Rule { Matches { Domain("|4kporn.xxx|") }, Action(Discard) };Rule { Matches { Domain("|vizio.com|") }, Action(Discard) };Rule { Matches { Domain("|notepad-plus-plus.org|") }, Action(Discard) };Rule { Matches { Domain("|keydisk.ru|") }, Action(Discard) };Rule { Matches { Domain("|ncl.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|fordham.edu|") }, Action(Discard) };Rule { Matches { Domain("|apxns.com|") }, Action(Discard) };Rule { Matches { Domain("|iata.org|") }, Action(Discard) };Rule { Matches { Domain("|qunar.com|") }, Action(Discard) };Rule { Matches { Domain("|sci-hub.st|") }, Action(Discard) };Rule { Matches { Domain("|swissinfo.ch|") }, Action(Discard) };Rule { Matches { Domain("|web.app|") }, Action(Discard) };Rule { Matches { Domain("|cloudflareresolve.com|") }, Action(Discard) };Rule { Matches { Domain("|simcitybuildit.com|") }, Action(Discard) };Rule { Matches { Domain("|wurl.com|") }, Action(Discard) };Rule { Matches { Domain("|kustomerapp.com|") }, Action(Discard) };Rule { Matches { Domain("|ibytedtos.com|") }, Action(Discard) };Rule { Matches { Domain("|odysee.com|") }, Action(Discard) };Rule { Matches { Domain("|wikimapia.org|") }, Action(Discard) };Rule { Matches { Domain("|frontlineeducation.com|") }, Action(Discard) };Rule { Matches { Domain("|chip.de|") }, Action(Discard) };Rule { Matches { Domain("|v0cdn.net|") }, Action(Discard) };Rule { Matches { Domain("|ul.com|") }, Action(Discard) };Rule { Matches { Domain("|inbox.ai|") }, Action(Discard) };Rule { Matches { Domain("|java.net|") }, Action(Discard) };Rule { Matches { Domain("|telekom.hu|") }, Action(Discard) };Rule { Matches { Domain("|flexifunnels.com|") }, Action(Discard) };Rule { Matches { Domain("|readthedocs.org|") }, Action(Discard) };Rule { Matches { Domain("|yhvod.net|") }, Action(Discard) };Rule { Matches { Domain("|logmein.com|") }, Action(Discard) };Rule { Matches { Domain("|traveloka.com|") }, Action(Discard) };Rule { Matches { Domain("|blogtalkradio.com|") }, Action(Discard) };Rule { Matches { Domain("|hotornot.com|") }, Action(Discard) };Rule { Matches { Domain("|gawker.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-24.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|energystar.gov|") }, Action(Discard) };Rule { Matches { Domain("|usu.edu|") }, Action(Discard) };Rule { Matches { Domain("|dynatracelabs.com|") }, Action(Discard) };Rule { Matches { Domain("|telstra.com.au|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-51.net|") }, Action(Discard) };Rule { Matches { Domain("|dc.gov|") }, Action(Discard) };Rule { Matches { Domain("|myfcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|e-taxes.gov.az|") }, Action(Discard) };Rule { Matches { Domain("|lesechos.fr|") }, Action(Discard) };Rule { Matches { Domain("|2ch-c.net|") }, Action(Discard) };Rule { Matches { Domain("|auspost.com.au|") }, Action(Discard) };Rule { Matches { Domain("|mosyle.com|") }, Action(Discard) };Rule { Matches { Domain("|highcpmrevenuenetwork.com|") }, Action(Discard) };Rule { Matches { Domain("|walmart.ca|") }, Action(Discard) };Rule { Matches { Domain("|puma.com|") }, Action(Discard) };Rule { Matches { Domain("|offcn.com|") }, Action(Discard) };Rule { Matches { Domain("|opensuse.org|") }, Action(Discard) };Rule { Matches { Domain("|yodobashi.com|") }, Action(Discard) };Rule { Matches { Domain("|nypl.org|") }, Action(Discard) };Rule { Matches { Domain("|owasp.org|") }, Action(Discard) };Rule { Matches { Domain("|dns.pt|") }, Action(Discard) };Rule { Matches { Domain("|banahosting.com|") }, Action(Discard) };Rule { Matches { Domain("|jwplatform.com|") }, Action(Discard) };Rule { Matches { Domain("|dotmovies.xyz|") }, Action(Discard) };Rule { Matches { Domain("|mobilityware.com|") }, Action(Discard) };Rule { Matches { Domain("|law.com|") }, Action(Discard) };Rule { Matches { Domain("|teenvogue.com|") }, Action(Discard) };Rule { Matches { Domain("|codesandbox.io|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-20.org|") }, Action(Discard) };Rule { Matches { Domain("|geekbang.org|") }, Action(Discard) };Rule { Matches { Domain("|biblehub.com|") }, Action(Discard) };Rule { Matches { Domain("|intel.cn|") }, Action(Discard) };Rule { Matches { Domain("|admitad.com|") }, Action(Discard) };Rule { Matches { Domain("|campaign-archive1.com|") }, Action(Discard) };Rule { Matches { Domain("|pmi.org|") }, Action(Discard) };Rule { Matches { Domain("|techspot.com|") }, Action(Discard) };Rule { Matches { Domain("|sparknotes.com|") }, Action(Discard) };Rule { Matches { Domain("|zhenfanjixie.com|") }, Action(Discard) };Rule { Matches { Domain("|maff.com|") }, Action(Discard) };Rule { Matches { Domain("|ksl.com|") }, Action(Discard) };Rule { Matches { Domain("|securly.com|") }, Action(Discard) };Rule { Matches { Domain("|elstc.co|") }, Action(Discard) };Rule { Matches { Domain("|cnipa.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|cuevana3.it|") }, Action(Discard) };Rule { Matches { Domain("|dailyrecord.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|jalopnik.com|") }, Action(Discard) };Rule { Matches { Domain("|web-hosting.com|") }, Action(Discard) };Rule { Matches { Domain("|myschoolapp.com|") }, Action(Discard) };Rule { Matches { Domain("|state.mn.us|") }, Action(Discard) };Rule { Matches { Domain("|filecr.com|") }, Action(Discard) };Rule { Matches { Domain("|samsungconsent.com|") }, Action(Discard) };Rule { Matches { Domain("|foreignaffairs.com|") }, Action(Discard) };Rule { Matches { Domain("|radiofrance.fr|") }, Action(Discard) };Rule { Matches { Domain("|tubesafari.com|") }, Action(Discard) };Rule { Matches { Domain("|gslbjpmchase.com|") }, Action(Discard) };Rule { Matches { Domain("|vivo.com.br|") }, Action(Discard) };Rule { Matches { Domain("|paris.fr|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-43.org|") }, Action(Discard) };Rule { Matches { Domain("|geocaching.com|") }, Action(Discard) };Rule { Matches { Domain("|nudevista.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-05.org|") }, Action(Discard) };Rule { Matches { Domain("|cableav.tv|") }, Action(Discard) };Rule { Matches { Domain("|avct.cloud|") }, Action(Discard) };Rule { Matches { Domain("|wsimg.com|") }, Action(Discard) };Rule { Matches { Domain("|taoguba.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|edgenuity.com|") }, Action(Discard) };Rule { Matches { Domain("|bsgslb.cn|") }, Action(Discard) };Rule { Matches { Domain("|disquscdn.com|") }, Action(Discard) };Rule { Matches { Domain("|rmit.edu.au|") }, Action(Discard) };Rule { Matches { Domain("|in-addr.cn|") }, Action(Discard) };Rule { Matches { Domain("|nottingham.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|ipsos.com|") }, Action(Discard) };Rule { Matches { Domain("|queensu.ca|") }, Action(Discard) };Rule { Matches { Domain("|playvalorant.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-58.org|") }, Action(Discard) };Rule { Matches { Domain("|hyperwallet.com|") }, Action(Discard) };Rule { Matches { Domain("|cocolog-nifty.com|") }, Action(Discard) };Rule { Matches { Domain("|preply.com|") }, Action(Discard) };Rule { Matches { Domain("|teslamotors.com|") }, Action(Discard) };Rule { Matches { Domain("|bedbathandbeyond.com|") }, Action(Discard) };Rule { Matches { Domain("|august.com|") }, Action(Discard) };Rule { Matches { Domain("|pydata.org|") }, Action(Discard) };Rule { Matches { Domain("|immobilienscout24.de|") }, Action(Discard) };Rule { Matches { Domain("|kth.se|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-48.net|") }, Action(Discard) };Rule { Matches { Domain("|servidoresdns.net|") }, Action(Discard) };Rule { Matches { Domain("|httpwg.org|") }, Action(Discard) };Rule { Matches { Domain("|kolesa.kz|") }, Action(Discard) };Rule { Matches { Domain("|etoro.com|") }, Action(Discard) };Rule { Matches { Domain("|hotpepper.jp|") }, Action(Discard) };Rule { Matches { Domain("|e-planning.net|") }, Action(Discard) };Rule { Matches { Domain("|googlehosted.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-61.org|") }, Action(Discard) };Rule { Matches { Domain("|majestic.com|") }, Action(Discard) };Rule { Matches { Domain("|n11.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-54.net|") }, Action(Discard) };Rule { Matches { Domain("|jrj.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|3ds.com|") }, Action(Discard) };Rule { Matches { Domain("|muni.cz|") }, Action(Discard) };Rule { Matches { Domain("|moveaws.com|") }, Action(Discard) };Rule { Matches { Domain("|k1k.me|") }, Action(Discard) };Rule { Matches { Domain("|d-zone.ca|") }, Action(Discard) };Rule { Matches { Domain("|huffingtonpost.ca|") }, Action(Discard) };Rule { Matches { Domain("|hpdaas.com|") }, Action(Discard) };Rule { Matches { Domain("|kobo.com|") }, Action(Discard) };Rule { Matches { Domain("|liaoxuefeng.com|") }, Action(Discard) };Rule { Matches { Domain("|rferl.org|") }, Action(Discard) };Rule { Matches { Domain("|zeasn.tv|") }, Action(Discard) };Rule { Matches { Domain("|wcostream.net|") }, Action(Discard) };Rule { Matches { Domain("|djangoproject.com|") }, Action(Discard) };Rule { Matches { Domain("|mercadopago.com.br|") }, Action(Discard) };Rule { Matches { Domain("|akagtm.org|") }, Action(Discard) };Rule { Matches { Domain("|globaltimes.cn|") }, Action(Discard) };Rule { Matches { Domain("|benesse.ne.jp|") }, Action(Discard) };Rule { Matches { Domain("|wordcounter.net|") }, Action(Discard) };Rule { Matches { Domain("|dmxleo.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-09.org|") }, Action(Discard) };Rule { Matches { Domain("|espncdn.com|") }, Action(Discard) };Rule { Matches { Domain("|bodybuilding.com|") }, Action(Discard) };Rule { Matches { Domain("|theweek.com|") }, Action(Discard) };Rule { Matches { Domain("|yr.no|") }, Action(Discard) };Rule { Matches { Domain("|unodc.org|") }, Action(Discard) };Rule { Matches { Domain("|irna.ir|") }, Action(Discard) };Rule { Matches { Domain("|gifshow.com|") }, Action(Discard) };Rule { Matches { Domain("|furaffinity.net|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-26.net|") }, Action(Discard) };Rule { Matches { Domain("|snaptube.app|") }, Action(Discard) };Rule { Matches { Domain("|20minutes.fr|") }, Action(Discard) };Rule { Matches { Domain("|synchrony.com|") }, Action(Discard) };Rule { Matches { Domain("|thisisl.com|") }, Action(Discard) };Rule { Matches { Domain("|mytrafficmanagement.com|") }, Action(Discard) };Rule { Matches { Domain("|manuscriptcentral.com|") }, Action(Discard) };Rule { Matches { Domain("|harman.com|") }, Action(Discard) };Rule { Matches { Domain("|guidestar.org|") }, Action(Discard) };Rule { Matches { Domain("|tripadvisor.in|") }, Action(Discard) };Rule { Matches { Domain("|ero-labs.site|") }, Action(Discard) };Rule { Matches { Domain("|trkn.us|") }, Action(Discard) };Rule { Matches { Domain("|foundationapi.com|") }, Action(Discard) };Rule { Matches { Domain("|samsungdm.com|") }, Action(Discard) };Rule { Matches { Domain("|beget.tech|") }, Action(Discard) };Rule { Matches { Domain("|pin.it|") }, Action(Discard) };Rule { Matches { Domain("|jivosite.com|") }, Action(Discard) };Rule { Matches { Domain("|simplecast.com|") }, Action(Discard) };Rule { Matches { Domain("|gn-dns.com|") }, Action(Discard) };Rule { Matches { Domain("|reson8.com|") }, Action(Discard) };Rule { Matches { Domain("|gobankingrates.com|") }, Action(Discard) };Rule { Matches { Domain("|whookroo.com|") }, Action(Discard) };Rule { Matches { Domain("|kansascity.com|") }, Action(Discard) };Rule { Matches { Domain("|courier-journal.com|") }, Action(Discard) };Rule { Matches { Domain("|useinsider.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-22.net|") }, Action(Discard) };Rule { Matches { Domain("|jaavnacsdw.com|") }, Action(Discard) };Rule { Matches { Domain("|linecorp.com|") }, Action(Discard) };Rule { Matches { Domain("|cnmsn.net|") }, Action(Discard) };Rule { Matches { Domain("|ksyna.net|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-34.net|") }, Action(Discard) };Rule { Matches { Domain("|grainger.com|") }, Action(Discard) };Rule { Matches { Domain("|oneindia.com|") }, Action(Discard) };Rule { Matches { Domain("|matchtv.ru|") }, Action(Discard) };Rule { Matches { Domain("|travelpayouts.com|") }, Action(Discard) };Rule { Matches { Domain("|zohopublic.com|") }, Action(Discard) };Rule { Matches { Domain("|list-manage2.com|") }, Action(Discard) };Rule { Matches { Domain("|pc6.com|") }, Action(Discard) };Rule { Matches { Domain("|shipstation.com|") }, Action(Discard) };Rule { Matches { Domain("|msk.ru|") }, Action(Discard) };Rule { Matches { Domain("|alberta.ca|") }, Action(Discard) };Rule { Matches { Domain("|tcgplayer.com|") }, Action(Discard) };Rule { Matches { Domain("|xiaoeknow.com|") }, Action(Discard) };Rule { Matches { Domain("|dnsexit.com|") }, Action(Discard) };Rule { Matches { Domain("|networkworld.com|") }, Action(Discard) };Rule { Matches { Domain("|tcd.ie|") }, Action(Discard) };Rule { Matches { Domain("|rozetka.com.ua|") }, Action(Discard) };Rule { Matches { Domain("|dns-diy.com|") }, Action(Discard) };Rule { Matches { Domain("|sejda.com|") }, Action(Discard) };Rule { Matches { Domain("|dotnxdomain.net|") }, Action(Discard) };Rule { Matches { Domain("|ifood.tv|") }, Action(Discard) };Rule { Matches { Domain("|mango-office.ru|") }, Action(Discard) };Rule { Matches { Domain("|cic.gc.ca|") }, Action(Discard) };Rule { Matches { Domain("|geekwire.com|") }, Action(Discard) };Rule { Matches { Domain("|ala.org|") }, Action(Discard) };Rule { Matches { Domain("|atl-paas.net|") }, Action(Discard) };Rule { Matches { Domain("|dr.dk|") }, Action(Discard) };Rule { Matches { Domain("|androidpolice.com|") }, Action(Discard) };Rule { Matches { Domain("|sciencenews.org|") }, Action(Discard) };Rule { Matches { Domain("|q4web.com|") }, Action(Discard) };Rule { Matches { Domain("|urbanoutfitters.com|") }, Action(Discard) };Rule { Matches { Domain("|charlestonroadregistry.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-17.org|") }, Action(Discard) };Rule { Matches { Domain("|mycimaa.tv|") }, Action(Discard) };Rule { Matches { Domain("|ilfattoquotidiano.it|") }, Action(Discard) };Rule { Matches { Domain("|images-amazon.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-30.net|") }, Action(Discard) };Rule { Matches { Domain("|dedecms.com|") }, Action(Discard) };Rule { Matches { Domain("|nbcuni.com|") }, Action(Discard) };Rule { Matches { Domain("|myflorida.com|") }, Action(Discard) };Rule { Matches { Domain("|psdops.com|") }, Action(Discard) };Rule { Matches { Domain("|bible.com|") }, Action(Discard) };Rule { Matches { Domain("|misp.ru|") }, Action(Discard) };Rule { Matches { Domain("|kickassanime.ro|") }, Action(Discard) };Rule { Matches { Domain("|adelaide.edu.au|") }, Action(Discard) };Rule { Matches { Domain("|storeland.ru|") }, Action(Discard) };Rule { Matches { Domain("|thaudray.com|") }, Action(Discard) };Rule { Matches { Domain("|cryoutcreations.eu|") }, Action(Discard) };Rule { Matches { Domain("|linkedin.cn|") }, Action(Discard) };Rule { Matches { Domain("|myvidster.com|") }, Action(Discard) };Rule { Matches { Domain("|character.ai|") }, Action(Discard) };Rule { Matches { Domain("|tasnimnews.com|") }, Action(Discard) };Rule { Matches { Domain("|laweekly.com|") }, Action(Discard) };Rule { Matches { Domain("|vivox.com|") }, Action(Discard) };Rule { Matches { Domain("|york.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|zoznam.sk|") }, Action(Discard) };Rule { Matches { Domain("|pastelink.net|") }, Action(Discard) };Rule { Matches { Domain("|tvbs.com.tw|") }, Action(Discard) };Rule { Matches { Domain("|bihar.gov.in|") }, Action(Discard) };Rule { Matches { Domain("|kinogo.biz|") }, Action(Discard) };Rule { Matches { Domain("|nolo.com|") }, Action(Discard) };Rule { Matches { Domain("|turner.com|") }, Action(Discard) };Rule { Matches { Domain("|csai.cn|") }, Action(Discard) };Rule { Matches { Domain("|zscaler.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-12.org|") }, Action(Discard) };Rule { Matches { Domain("|verywellfit.com|") }, Action(Discard) };Rule { Matches { Domain("|easports.com|") }, Action(Discard) };Rule { Matches { Domain("|intensedebate.com|") }, Action(Discard) };Rule { Matches { Domain("|philly.com|") }, Action(Discard) };Rule { Matches { Domain("|sexkbj.com|") }, Action(Discard) };Rule { Matches { Domain("|mensjournal.com|") }, Action(Discard) };Rule { Matches { Domain("|vzw.com|") }, Action(Discard) };Rule { Matches { Domain("|jasper.ai|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-27.org|") }, Action(Discard) };Rule { Matches { Domain("|dangdang.com|") }, Action(Discard) };Rule { Matches { Domain("|cqloud.com|") }, Action(Discard) };Rule { Matches { Domain("|smallbiztrends.com|") }, Action(Discard) };Rule { Matches { Domain("|javdb006.com|") }, Action(Discard) };Rule { Matches { Domain("|hs-banner.com|") }, Action(Discard) };Rule { Matches { Domain("|offerup.com|") }, Action(Discard) };Rule { Matches { Domain("|blogfa.com|") }, Action(Discard) };Rule { Matches { Domain("|studfile.net|") }, Action(Discard) };Rule { Matches { Domain("|mofidonline.com|") }, Action(Discard) };Rule { Matches { Domain("|ing.nl|") }, Action(Discard) };Rule { Matches { Domain("|paypalobjects.com|") }, Action(Discard) };Rule { Matches { Domain("|cnmobile.net|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-32.net|") }, Action(Discard) };Rule { Matches { Domain("|hubspotusercontent-na1.net|") }, Action(Discard) };Rule { Matches { Domain("|sascdn.com|") }, Action(Discard) };Rule { Matches { Domain("|funkedigital.de|") }, Action(Discard) };Rule { Matches { Domain("|twittervideodownloader.com|") }, Action(Discard) };Rule { Matches { Domain("|skrbtla.top|") }, Action(Discard) };Rule { Matches { Domain("|es.io|") }, Action(Discard) };Rule { Matches { Domain("|blogspot.com.au|") }, Action(Discard) };Rule { Matches { Domain("|bouncefresh.com|") }, Action(Discard) };Rule { Matches { Domain("|bangkokpost.com|") }, Action(Discard) };Rule { Matches { Domain("|rentalcars.com|") }, Action(Discard) };Rule { Matches { Domain("|hs-analytics.net|") }, Action(Discard) };Rule { Matches { Domain("|gigya.com|") }, Action(Discard) };Rule { Matches { Domain("|com--indeed.com|") }, Action(Discard) };Rule { Matches { Domain("|bostonherald.com|") }, Action(Discard) };Rule { Matches { Domain("|annas-archive.org|") }, Action(Discard) };Rule { Matches { Domain("|starwars.com|") }, Action(Discard) };Rule { Matches { Domain("|cudasvc.com|") }, Action(Discard) };Rule { Matches { Domain("|outbrain.org|") }, Action(Discard) };Rule { Matches { Domain("|dailycaller.com|") }, Action(Discard) };Rule { Matches { Domain("|tapatalk.com|") }, Action(Discard) };Rule { Matches { Domain("|bit.do|") }, Action(Discard) };Rule { Matches { Domain("|jpmorgan.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-01.net|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-07.net|") }, Action(Discard) };Rule { Matches { Domain("|ohio-state.edu|") }, Action(Discard) };Rule { Matches { Domain("|sdsu.edu|") }, Action(Discard) };Rule { Matches { Domain("|vercel.com|") }, Action(Discard) };Rule { Matches { Domain("|daft.sex|") }, Action(Discard) };Rule { Matches { Domain("|deviantart.net|") }, Action(Discard) };Rule { Matches { Domain("|unt.edu|") }, Action(Discard) };Rule { Matches { Domain("|softbank.jp|") }, Action(Discard) };Rule { Matches { Domain("|deseret.com|") }, Action(Discard) };Rule { Matches { Domain("|prevention.com|") }, Action(Discard) };Rule { Matches { Domain("|videotron.ca|") }, Action(Discard) };Rule { Matches { Domain("|thestreameast.to|") }, Action(Discard) };Rule { Matches { Domain("|informationweek.com|") }, Action(Discard) };Rule { Matches { Domain("|perfectgirls.net|") }, Action(Discard) };Rule { Matches { Domain("|peta.org|") }, Action(Discard) };Rule { Matches { Domain("|apptimize.com|") }, Action(Discard) };Rule { Matches { Domain("|1984.is|") }, Action(Discard) };Rule { Matches { Domain("|navify.com|") }, Action(Discard) };Rule { Matches { Domain("|qiita.com|") }, Action(Discard) };Rule { Matches { Domain("|allure.com|") }, Action(Discard) };Rule { Matches { Domain("|sme.sk|") }, Action(Discard) };Rule { Matches { Domain("|futurism.com|") }, Action(Discard) };Rule { Matches { Domain("|athenahealth.com|") }, Action(Discard) };Rule { Matches { Domain("|articulate.com|") }, Action(Discard) };Rule { Matches { Domain("|thepiratebay.org|") }, Action(Discard) };Rule { Matches { Domain("|lmco.com|") }, Action(Discard) };Rule { Matches { Domain("|gumtree.com|") }, Action(Discard) };Rule { Matches { Domain("|bookshop.org|") }, Action(Discard) };Rule { Matches { Domain("|pravda.com.ua|") }, Action(Discard) };Rule { Matches { Domain("|dood.re|") }, Action(Discard) };Rule { Matches { Domain("|nature.org|") }, Action(Discard) };Rule { Matches { Domain("|powerapps.com|") }, Action(Discard) };Rule { Matches { Domain("|templatemonster.com|") }, Action(Discard) };Rule { Matches { Domain("|emptyhammock.com|") }, Action(Discard) };Rule { Matches { Domain("|inven.co.kr|") }, Action(Discard) };Rule { Matches { Domain("|terra.com.br|") }, Action(Discard) };Rule { Matches { Domain("|picd232.xyz|") }, Action(Discard) };Rule { Matches { Domain("|stormstone.top|") }, Action(Discard) };Rule { Matches { Domain("|nordaccount.com|") }, Action(Discard) };Rule { Matches { Domain("|sports.ru|") }, Action(Discard) };Rule { Matches { Domain("|vocabulary.com|") }, Action(Discard) };Rule { Matches { Domain("|symcd.com|") }, Action(Discard) };Rule { Matches { Domain("|keywordtool.io|") }, Action(Discard) };Rule { Matches { Domain("|hujiang.com|") }, Action(Discard) };Rule { Matches { Domain("|indazn.com|") }, Action(Discard) };Rule { Matches { Domain("|126.net|") }, Action(Discard) };Rule { Matches { Domain("|campaign-archive2.com|") }, Action(Discard) };Rule { Matches { Domain("|phpmyadmin.net|") }, Action(Discard) };Rule { Matches { Domain("|hcaptcha.com|") }, Action(Discard) };Rule { Matches { Domain("|japaneseasmr.com|") }, Action(Discard) };Rule { Matches { Domain("|dexerto.com|") }, Action(Discard) };Rule { Matches { Domain("|reason.com|") }, Action(Discard) };Rule { Matches { Domain("|metacafe.com|") }, Action(Discard) };Rule { Matches { Domain("|unily.com|") }, Action(Discard) };Rule { Matches { Domain("|mediawallahscript.com|") }, Action(Discard) };Rule { Matches { Domain("|google.co.nz|") }, Action(Discard) };Rule { Matches { Domain("|ajio.com|") }, Action(Discard) };Rule { Matches { Domain("|nyt.com|") }, Action(Discard) };Rule { Matches { Domain("|kyoto-u.ac.jp|") }, Action(Discard) };Rule { Matches { Domain("|sbermarket.ru|") }, Action(Discard) };Rule { Matches { Domain("|annualreviews.org|") }, Action(Discard) };Rule { Matches { Domain("|vseigru.net|") }, Action(Discard) };Rule { Matches { Domain("|okstate.edu|") }, Action(Discard) };Rule { Matches { Domain("|rioseo.com|") }, Action(Discard) };Rule { Matches { Domain("|newstatesman.com|") }, Action(Discard) };Rule { Matches { Domain("|usi32.com|") }, Action(Discard) };Rule { Matches { Domain("|pipedrive.com|") }, Action(Discard) };Rule { Matches { Domain("|exporntoons.net|") }, Action(Discard) };Rule { Matches { Domain("|manongjc.com|") }, Action(Discard) };Rule { Matches { Domain("|sportbox.ru|") }, Action(Discard) };Rule { Matches { Domain("|ericsson.com|") }, Action(Discard) };Rule { Matches { Domain("|hudl.com|") }, Action(Discard) };Rule { Matches { Domain("|tvn24.pl|") }, Action(Discard) };Rule { Matches { Domain("|umontreal.ca|") }, Action(Discard) };Rule { Matches { Domain("|vfsglobal.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-08.net|") }, Action(Discard) };Rule { Matches { Domain("|appboy.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-34.org|") }, Action(Discard) };Rule { Matches { Domain("|dpbolvw.net|") }, Action(Discard) };Rule { Matches { Domain("|mofa.go.jp|") }, Action(Discard) };Rule { Matches { Domain("|uni-hamburg.de|") }, Action(Discard) };Rule { Matches { Domain("|google.sk|") }, Action(Discard) };Rule { Matches { Domain("|bcebos.com|") }, Action(Discard) };Rule { Matches { Domain("|wzrkt.com|") }, Action(Discard) };Rule { Matches { Domain("|clicktale.net|") }, Action(Discard) };Rule { Matches { Domain("|blueconic.net|") }, Action(Discard) };Rule { Matches { Domain("|instyle.com|") }, Action(Discard) };Rule { Matches { Domain("|marinetraffic.com|") }, Action(Discard) };Rule { Matches { Domain("|xxxnewvideos.com|") }, Action(Discard) };Rule { Matches { Domain("|smotrim.ru|") }, Action(Discard) };Rule { Matches { Domain("|epson.com|") }, Action(Discard) };Rule { Matches { Domain("|letpub.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|drugabuse.gov|") }, Action(Discard) };Rule { Matches { Domain("|fnac.com|") }, Action(Discard) };Rule { Matches { Domain("|btbtt15.com|") }, Action(Discard) };Rule { Matches { Domain("|sporcle.com|") }, Action(Discard) };Rule { Matches { Domain("|rima-tde.net|") }, Action(Discard) };Rule { Matches { Domain("|webassign.net|") }, Action(Discard) };Rule { Matches { Domain("|fsf.org|") }, Action(Discard) };Rule { Matches { Domain("|anandtech.com|") }, Action(Discard) };Rule { Matches { Domain("|mercola.com|") }, Action(Discard) };Rule { Matches { Domain("|cikrf.ru|") }, Action(Discard) };Rule { Matches { Domain("|thedrive.com|") }, Action(Discard) };Rule { Matches { Domain("|yandex-team.ru|") }, Action(Discard) };Rule { Matches { Domain("|mn.co|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-51.org|") }, Action(Discard) };Rule { Matches { Domain("|liveleak.com|") }, Action(Discard) };Rule { Matches { Domain("|worldstarhiphop.com|") }, Action(Discard) };Rule { Matches { Domain("|christies.com|") }, Action(Discard) };Rule { Matches { Domain("|cityu.edu.hk|") }, Action(Discard) };Rule { Matches { Domain("|dns04.com|") }, Action(Discard) };Rule { Matches { Domain("|skribble.de|") }, Action(Discard) };Rule { Matches { Domain("|javhub.net|") }, Action(Discard) };Rule { Matches { Domain("|tdnsvod1.cn|") }, Action(Discard) };Rule { Matches { Domain("|fubo.tv|") }, Action(Discard) };Rule { Matches { Domain("|adultfriendfinder.com|") }, Action(Discard) };Rule { Matches { Domain("|skrb.org|") }, Action(Discard) };Rule { Matches { Domain("|vivo.com|") }, Action(Discard) };Rule { Matches { Domain("|eshkol.io|") }, Action(Discard) };Rule { Matches { Domain("|skribble.pro|") }, Action(Discard) };Rule { Matches { Domain("|rqmob.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-59.net|") }, Action(Discard) };Rule { Matches { Domain("|js.org|") }, Action(Discard) };Rule { Matches { Domain("|auto.ru|") }, Action(Discard) };Rule { Matches { Domain("|ub.edu|") }, Action(Discard) };Rule { Matches { Domain("|canalblog.com|") }, Action(Discard) };Rule { Matches { Domain("|finanzen.net|") }, Action(Discard) };Rule { Matches { Domain("|blacknight.com|") }, Action(Discard) };Rule { Matches { Domain("|customer.io|") }, Action(Discard) };Rule { Matches { Domain("|heritage.org|") }, Action(Discard) };Rule { Matches { Domain("|xsdns.net|") }, Action(Discard) };Rule { Matches { Domain("|wildapricot.org|") }, Action(Discard) };Rule { Matches { Domain("|puffs.com|") }, Action(Discard) };Rule { Matches { Domain("|multiscreensite.com|") }, Action(Discard) };Rule { Matches { Domain("|wdc.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-52.org|") }, Action(Discard) };Rule { Matches { Domain("|plurk.com|") }, Action(Discard) };Rule { Matches { Domain("|sonyentertainmentnetwork.com|") }, Action(Discard) };Rule { Matches { Domain("|janeapp.com|") }, Action(Discard) };Rule { Matches { Domain("|wordfence.com|") }, Action(Discard) };Rule { Matches { Domain("|cdntechone.com|") }, Action(Discard) };Rule { Matches { Domain("|getui.com|") }, Action(Discard) };Rule { Matches { Domain("|oakland.edu|") }, Action(Discard) };Rule { Matches { Domain("|parastorage.com|") }, Action(Discard) };Rule { Matches { Domain("|lightinthebox.com|") }, Action(Discard) };Rule { Matches { Domain("|lucid.app|") }, Action(Discard) };Rule { Matches { Domain("|clockify.me|") }, Action(Discard) };Rule { Matches { Domain("|authorize.net|") }, Action(Discard) };Rule { Matches { Domain("|adobejanus.com|") }, Action(Discard) };Rule { Matches { Domain("|zscaler.net|") }, Action(Discard) };Rule { Matches { Domain("|iaea.org|") }, Action(Discard) };Rule { Matches { Domain("|walesonline.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|parliament.uk|") }, Action(Discard) };Rule { Matches { Domain("|5movierulz.sx|") }, Action(Discard) };Rule { Matches { Domain("|tvguide.com|") }, Action(Discard) };Rule { Matches { Domain("|ucoz.com|") }, Action(Discard) };Rule { Matches { Domain("|ushmm.org|") }, Action(Discard) };Rule { Matches { Domain("|patagonia.com|") }, Action(Discard) };Rule { Matches { Domain("|azure.us|") }, Action(Discard) };Rule { Matches { Domain("|politifact.com|") }, Action(Discard) };Rule { Matches { Domain("|colg.cn|") }, Action(Discard) };Rule { Matches { Domain("|perfectmarket.com|") }, Action(Discard) };Rule { Matches { Domain("|m-pesa.com|") }, Action(Discard) };Rule { Matches { Domain("|goldmansachs.com|") }, Action(Discard) };Rule { Matches { Domain("|hc360.com|") }, Action(Discard) };Rule { Matches { Domain("|saviro.ru|") }, Action(Discard) };Rule { Matches { Domain("|xg4ken.com|") }, Action(Discard) };Rule { Matches { Domain("|sbb.rs|") }, Action(Discard) };Rule { Matches { Domain("|voximplant.com|") }, Action(Discard) };Rule { Matches { Domain("|ytmp3.nu|") }, Action(Discard) };Rule { Matches { Domain("|chingari.io|") }, Action(Discard) };Rule { Matches { Domain("|tau.ac.il|") }, Action(Discard) };Rule { Matches { Domain("|sbermegamarket.ru|") }, Action(Discard) };Rule { Matches { Domain("|matomo.cloud|") }, Action(Discard) };Rule { Matches { Domain("|mmc.com|") }, Action(Discard) };Rule { Matches { Domain("|guidechem.com|") }, Action(Discard) };Rule { Matches { Domain("|scarabresearch.com|") }, Action(Discard) };Rule { Matches { Domain("|southernliving.com|") }, Action(Discard) };Rule { Matches { Domain("|ibtimes.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|kochglobalservices.com|") }, Action(Discard) };Rule { Matches { Domain("|stardewvalleywiki.com|") }, Action(Discard) };Rule { Matches { Domain("|posterous.com|") }, Action(Discard) };Rule { Matches { Domain("|canadapost-postescanada.ca|") }, Action(Discard) };Rule { Matches { Domain("|shopee.cn|") }, Action(Discard) };Rule { Matches { Domain("|frontsrv.com|") }, Action(Discard) };Rule { Matches { Domain("|pnnl.gov|") }, Action(Discard) };Rule { Matches { Domain("|unblog.fr|") }, Action(Discard) };Rule { Matches { Domain("|otnolatrnup.com|") }, Action(Discard) };Rule { Matches { Domain("|lastampa.it|") }, Action(Discard) };Rule { Matches { Domain("|celebjihad.com|") }, Action(Discard) };Rule { Matches { Domain("|mn.gov|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-25.net|") }, Action(Discard) };Rule { Matches { Domain("|sina.com|") }, Action(Discard) };Rule { Matches { Domain("|adliran.ir|") }, Action(Discard) };Rule { Matches { Domain("|eatingwell.com|") }, Action(Discard) };Rule { Matches { Domain("|cloudhub.io|") }, Action(Discard) };Rule { Matches { Domain("|about.google|") }, Action(Discard) };Rule { Matches { Domain("|mysmth.net|") }, Action(Discard) };Rule { Matches { Domain("|swagbucks.com|") }, Action(Discard) };Rule { Matches { Domain("|springerlink.com|") }, Action(Discard) };Rule { Matches { Domain("|sunrise.ch|") }, Action(Discard) };Rule { Matches { Domain("|pbworks.com|") }, Action(Discard) };Rule { Matches { Domain("|flow.com|") }, Action(Discard) };Rule { Matches { Domain("|blogspot.it|") }, Action(Discard) };Rule { Matches { Domain("|themeansar.com|") }, Action(Discard) };Rule { Matches { Domain("|proboards.com|") }, Action(Discard) };Rule { Matches { Domain("|screener.in|") }, Action(Discard) };Rule { Matches { Domain("|ifttt.com|") }, Action(Discard) };Rule { Matches { Domain("|bellsouth.net|") }, Action(Discard) };Rule { Matches { Domain("|lequipe.fr|") }, Action(Discard) };Rule { Matches { Domain("|google.lt|") }, Action(Discard) };Rule { Matches { Domain("|mydlink.com|") }, Action(Discard) };Rule { Matches { Domain("|razerzone.com|") }, Action(Discard) };Rule { Matches { Domain("|georgia.gov|") }, Action(Discard) };Rule { Matches { Domain("|giantbomb.com|") }, Action(Discard) };Rule { Matches { Domain("|ingentaconnect.com|") }, Action(Discard) };Rule { Matches { Domain("|p-n.io|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-03.org|") }, Action(Discard) };Rule { Matches { Domain("|blockchain.com|") }, Action(Discard) };Rule { Matches { Domain("|southampton.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|newsbreak.com|") }, Action(Discard) };Rule { Matches { Domain("|thenetnaija.net|") }, Action(Discard) };Rule { Matches { Domain("|oxfordlearnersdictionaries.com|") }, Action(Discard) };Rule { Matches { Domain("|samsungcloud.tv|") }, Action(Discard) };Rule { Matches { Domain("|iduba.com|") }, Action(Discard) };Rule { Matches { Domain("|worldatlas.com|") }, Action(Discard) };Rule { Matches { Domain("|talent.com|") }, Action(Discard) };Rule { Matches { Domain("|dummies.com|") }, Action(Discard) };Rule { Matches { Domain("|cloudez.io|") }, Action(Discard) };Rule { Matches { Domain("|nh.gov|") }, Action(Discard) };Rule { Matches { Domain("|simonandschuster.com|") }, Action(Discard) };Rule { Matches { Domain("|prava-online.net|") }, Action(Discard) };Rule { Matches { Domain("|motor1.com|") }, Action(Discard) };Rule { Matches { Domain("|gbooking.ru|") }, Action(Discard) };Rule { Matches { Domain("|cablepitch.com|") }, Action(Discard) };Rule { Matches { Domain("|active24.cz|") }, Action(Discard) };Rule { Matches { Domain("|gameloft.com|") }, Action(Discard) };Rule { Matches { Domain("|uc.edu|") }, Action(Discard) };Rule { Matches { Domain("|inria.fr|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-53.net|") }, Action(Discard) };Rule { Matches { Domain("|dstv.com|") }, Action(Discard) };Rule { Matches { Domain("|dongqiudi.com|") }, Action(Discard) };Rule { Matches { Domain("|slackb.com|") }, Action(Discard) };Rule { Matches { Domain("|americanprogress.org|") }, Action(Discard) };Rule { Matches { Domain("|wetter.com|") }, Action(Discard) };Rule { Matches { Domain("|pdfsimpli.com|") }, Action(Discard) };Rule { Matches { Domain("|wwd.com|") }, Action(Discard) };Rule { Matches { Domain("|dolfindns.net|") }, Action(Discard) };Rule { Matches { Domain("|attdns.net|") }, Action(Discard) };Rule { Matches { Domain("|minutemedia-prebid.com|") }, Action(Discard) };Rule { Matches { Domain("|tkqlhce.com|") }, Action(Discard) };Rule { Matches { Domain("|24h.com.vn|") }, Action(Discard) };Rule { Matches { Domain("|blogspot.ru|") }, Action(Discard) };Rule { Matches { Domain("|citationmachine.net|") }, Action(Discard) };Rule { Matches { Domain("|recode.net|") }, Action(Discard) };Rule { Matches { Domain("|getty.edu|") }, Action(Discard) };Rule { Matches { Domain("|mehrnews.com|") }, Action(Discard) };Rule { Matches { Domain("|realpython.com|") }, Action(Discard) };Rule { Matches { Domain("|ezoic.net|") }, Action(Discard) };Rule { Matches { Domain("|vedomosti.ru|") }, Action(Discard) };Rule { Matches { Domain("|xiaojukeji.com|") }, Action(Discard) };Rule { Matches { Domain("|downxia.com|") }, Action(Discard) };Rule { Matches { Domain("|subway.com|") }, Action(Discard) };Rule { Matches { Domain("|tabnine.com|") }, Action(Discard) };Rule { Matches { Domain("|inmarketexchange.com|") }, Action(Discard) };Rule { Matches { Domain("|google.ie|") }, Action(Discard) };Rule { Matches { Domain("|wvu.edu|") }, Action(Discard) };Rule { Matches { Domain("|nbp.pl|") }, Action(Discard) };Rule { Matches { Domain("|pearsonvue.com|") }, Action(Discard) };Rule { Matches { Domain("|av.ru|") }, Action(Discard) };Rule { Matches { Domain("|doppiocdn.com|") }, Action(Discard) };Rule { Matches { Domain("|q4cdn.com|") }, Action(Discard) };Rule { Matches { Domain("|licindia.in|") }, Action(Discard) };Rule { Matches { Domain("|backlinko.com|") }, Action(Discard) };Rule { Matches { Domain("|reflexisinc.com|") }, Action(Discard) };Rule { Matches { Domain("|avid.com|") }, Action(Discard) };Rule { Matches { Domain("|amsterdam.nl|") }, Action(Discard) };Rule { Matches { Domain("|animenewsnetwork.com|") }, Action(Discard) };Rule { Matches { Domain("|haodf.com|") }, Action(Discard) };Rule { Matches { Domain("|mcmaster.ca|") }, Action(Discard) };Rule { Matches { Domain("|blismedia.com|") }, Action(Discard) };Rule { Matches { Domain("|flutter.dev|") }, Action(Discard) };Rule { Matches { Domain("|utwente.nl|") }, Action(Discard) };Rule { Matches { Domain("|cnn.io|") }, Action(Discard) };Rule { Matches { Domain("|588ku.com|") }, Action(Discard) };Rule { Matches { Domain("|pdst.fm|") }, Action(Discard) };Rule { Matches { Domain("|bulbagarden.net|") }, Action(Discard) };Rule { Matches { Domain("|sweepstakessurveytoday.com|") }, Action(Discard) };Rule { Matches { Domain("|dinahosting.com|") }, Action(Discard) };Rule { Matches { Domain("|cpx.to|") }, Action(Discard) };Rule { Matches { Domain("|jdpay.com|") }, Action(Discard) };Rule { Matches { Domain("|virtua.com.br|") }, Action(Discard) };Rule { Matches { Domain("|gamepass.com|") }, Action(Discard) };Rule { Matches { Domain("|sling.com|") }, Action(Discard) };Rule { Matches { Domain("|weddingwire.com|") }, Action(Discard) };Rule { Matches { Domain("|american.edu|") }, Action(Discard) };Rule { Matches { Domain("|ghostery.com|") }, Action(Discard) };Rule { Matches { Domain("|99.com|") }, Action(Discard) };Rule { Matches { Domain("|cash.app|") }, Action(Discard) };Rule { Matches { Domain("|xfreehd.com|") }, Action(Discard) };Rule { Matches { Domain("|lazada.sg|") }, Action(Discard) };Rule { Matches { Domain("|mexicard.com|") }, Action(Discard) };Rule { Matches { Domain("|digid.nl|") }, Action(Discard) };Rule { Matches { Domain("|vz.ru|") }, Action(Discard) };Rule { Matches { Domain("|rainberrytv.com|") }, Action(Discard) };Rule { Matches { Domain("|symfony.com|") }, Action(Discard) };Rule { Matches { Domain("|gfx.ms|") }, Action(Discard) };Rule { Matches { Domain("|archive-it.org|") }, Action(Discard) };Rule { Matches { Domain("|nic.tr|") }, Action(Discard) };Rule { Matches { Domain("|sourcefire.com|") }, Action(Discard) };Rule { Matches { Domain("|camsoda.com|") }, Action(Discard) };Rule { Matches { Domain("|radiotimes.com|") }, Action(Discard) };Rule { Matches { Domain("|tomorrowland.com|") }, Action(Discard) };Rule { Matches { Domain("|eeroup.com|") }, Action(Discard) };Rule { Matches { Domain("|serverbid.com|") }, Action(Discard) };Rule { Matches { Domain("|o2online.de|") }, Action(Discard) };Rule { Matches { Domain("|aarnet.net.au|") }, Action(Discard) };Rule { Matches { Domain("|cloud-fdc.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-50.org|") }, Action(Discard) };Rule { Matches { Domain("|klikbca.com|") }, Action(Discard) };Rule { Matches { Domain("|themehorse.com|") }, Action(Discard) };Rule { Matches { Domain("|hublot.com|") }, Action(Discard) };Rule { Matches { Domain("|pega.st|") }, Action(Discard) };Rule { Matches { Domain("|kraken.com|") }, Action(Discard) };Rule { Matches { Domain("|snap.com|") }, Action(Discard) };Rule { Matches { Domain("|provenexpert.com|") }, Action(Discard) };Rule { Matches { Domain("|airee.ru|") }, Action(Discard) };Rule { Matches { Domain("|cainiao.com|") }, Action(Discard) };Rule { Matches { Domain("|simplisafe.com|") }, Action(Discard) };Rule { Matches { Domain("|bigolive.tv|") }, Action(Discard) };Rule { Matches { Domain("|moovitapp.com|") }, Action(Discard) };Rule { Matches { Domain("|segmento.ru|") }, Action(Discard) };Rule { Matches { Domain("|aspnetcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|dnswl.org|") }, Action(Discard) };Rule { Matches { Domain("|antuit.ai|") }, Action(Discard) };Rule { Matches { Domain("|bitwarden.com|") }, Action(Discard) };Rule { Matches { Domain("|gouv.qc.ca|") }, Action(Discard) };Rule { Matches { Domain("|corel.com|") }, Action(Discard) };Rule { Matches { Domain("|aivencloud.com|") }, Action(Discard) };Rule { Matches { Domain("|ready.gov|") }, Action(Discard) };Rule { Matches { Domain("|rwth-aachen.de|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-42.org|") }, Action(Discard) };Rule { Matches { Domain("|microsoft.us|") }, Action(Discard) };Rule { Matches { Domain("|realclearpolitics.com|") }, Action(Discard) };Rule { Matches { Domain("|anonfiles.com|") }, Action(Discard) };Rule { Matches { Domain("|adap.tv|") }, Action(Discard) };Rule { Matches { Domain("|dailywire.com|") }, Action(Discard) };Rule { Matches { Domain("|doc.gov|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-63.net|") }, Action(Discard) };Rule { Matches { Domain("|opbank.ee|") }, Action(Discard) };Rule { Matches { Domain("|tbs.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|tcs.com|") }, Action(Discard) };Rule { Matches { Domain("|panda.org|") }, Action(Discard) };Rule { Matches { Domain("|epicgames.dev|") }, Action(Discard) };Rule { Matches { Domain("|china.org.cn|") }, Action(Discard) };Rule { Matches { Domain("|zuora.com|") }, Action(Discard) };Rule { Matches { Domain("|alphadnszone.com|") }, Action(Discard) };Rule { Matches { Domain("|freeprivacypolicy.com|") }, Action(Discard) };Rule { Matches { Domain("|500.com|") }, Action(Discard) };Rule { Matches { Domain("|allafrica.com|") }, Action(Discard) };Rule { Matches { Domain("|netfirms.com|") }, Action(Discard) };Rule { Matches { Domain("|shorturl.at|") }, Action(Discard) };Rule { Matches { Domain("|grandviewresearch.com|") }, Action(Discard) };Rule { Matches { Domain("|transcend.io|") }, Action(Discard) };Rule { Matches { Domain("|cq.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|computerhope.com|") }, Action(Discard) };Rule { Matches { Domain("|marieclaire.com|") }, Action(Discard) };Rule { Matches { Domain("|cquotient.com|") }, Action(Discard) };Rule { Matches { Domain("|salary.com|") }, Action(Discard) };Rule { Matches { Domain("|teespring.com|") }, Action(Discard) };Rule { Matches { Domain("|salesloft.com|") }, Action(Discard) };Rule { Matches { Domain("|zscalerthree.net|") }, Action(Discard) };Rule { Matches { Domain("|prreqcroab.icu|") }, Action(Discard) };Rule { Matches { Domain("|netapp.com|") }, Action(Discard) };Rule { Matches { Domain("|1up.health|") }, Action(Discard) };Rule { Matches { Domain("|pinggu.org|") }, Action(Discard) };Rule { Matches { Domain("|zentrick.com|") }, Action(Discard) };Rule { Matches { Domain("|celtra.com|") }, Action(Discard) };Rule { Matches { Domain("|akusherstvo.ru|") }, Action(Discard) };Rule { Matches { Domain("|nngroup.com|") }, Action(Discard) };Rule { Matches { Domain("|zippia.com|") }, Action(Discard) };Rule { Matches { Domain("|rbcroyalbank.com|") }, Action(Discard) };Rule { Matches { Domain("|g-cloud.by|") }, Action(Discard) };Rule { Matches { Domain("|doe.gov|") }, Action(Discard) };Rule { Matches { Domain("|houstonchronicle.com|") }, Action(Discard) };Rule { Matches { Domain("|binomnet.com|") }, Action(Discard) };Rule { Matches { Domain("|meti.go.jp|") }, Action(Discard) };Rule { Matches { Domain("|croc.ru|") }, Action(Discard) };Rule { Matches { Domain("|audacityteam.org|") }, Action(Discard) };Rule { Matches { Domain("|underarmour.com|") }, Action(Discard) };Rule { Matches { Domain("|khaleejtimes.com|") }, Action(Discard) };Rule { Matches { Domain("|html5up.net|") }, Action(Discard) };Rule { Matches { Domain("|kodak.com|") }, Action(Discard) };Rule { Matches { Domain("|pluralsight.com|") }, Action(Discard) };Rule { Matches { Domain("|hacg.mom|") }, Action(Discard) };Rule { Matches { Domain("|pinneytalfourd.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|clarityvoice.net|") }, Action(Discard) };Rule { Matches { Domain("|com4lease.com|") }, Action(Discard) };Rule { Matches { Domain("|dramacool.cr|") }, Action(Discard) };Rule { Matches { Domain("|thediplomat.com|") }, Action(Discard) };Rule { Matches { Domain("|adsymptotic.com|") }, Action(Discard) };Rule { Matches { Domain("|jdoqocy.com|") }, Action(Discard) };Rule { Matches { Domain("|iol.co.za|") }, Action(Discard) };Rule { Matches { Domain("|undertone.com|") }, Action(Discard) };Rule { Matches { Domain("|amazon.sg|") }, Action(Discard) };Rule { Matches { Domain("|ywspj.com|") }, Action(Discard) };Rule { Matches { Domain("|dior.com|") }, Action(Discard) };Rule { Matches { Domain("|ku.dk|") }, Action(Discard) };Rule { Matches { Domain("|icrc.org|") }, Action(Discard) };Rule { Matches { Domain("|pixieset.com|") }, Action(Discard) };Rule { Matches { Domain("|tpnet.pl|") }, Action(Discard) };Rule { Matches { Domain("|magonet.ru|") }, Action(Discard) };Rule { Matches { Domain("|dm.de|") }, Action(Discard) };Rule { Matches { Domain("|time.ir|") }, Action(Discard) };Rule { Matches { Domain("|termly.io|") }, Action(Discard) };Rule { Matches { Domain("|state.co.us|") }, Action(Discard) };Rule { Matches { Domain("|iltalehti.fi|") }, Action(Discard) };Rule { Matches { Domain("|haircode.com|") }, Action(Discard) };Rule { Matches { Domain("|rax.io|") }, Action(Discard) };Rule { Matches { Domain("|sibnet.ru|") }, Action(Discard) };Rule { Matches { Domain("|kwikdns.com|") }, Action(Discard) };Rule { Matches { Domain("|sqlite.org|") }, Action(Discard) };Rule { Matches { Domain("|suning.com|") }, Action(Discard) };Rule { Matches { Domain("|wmo.int|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-15.org|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-46.org|") }, Action(Discard) };Rule { Matches { Domain("|mattel.com|") }, Action(Discard) };Rule { Matches { Domain("|felenasoft.com|") }, Action(Discard) };Rule { Matches { Domain("|barracudacentral.org|") }, Action(Discard) };Rule { Matches { Domain("|glevoloo.com|") }, Action(Discard) };Rule { Matches { Domain("|gigazine.net|") }, Action(Discard) };Rule { Matches { Domain("|ddns.ms|") }, Action(Discard) };Rule { Matches { Domain("|beeg.com|") }, Action(Discard) };Rule { Matches { Domain("|histats.com|") }, Action(Discard) };Rule { Matches { Domain("|imgflip.com|") }, Action(Discard) };Rule { Matches { Domain("|rtl-theme.com|") }, Action(Discard) };Rule { Matches { Domain("|distrokid.com|") }, Action(Discard) };Rule { Matches { Domain("|firetvcaptiveportal.com|") }, Action(Discard) };Rule { Matches { Domain("|mtn.sd|") }, Action(Discard) };Rule { Matches { Domain("|futurelearn.com|") }, Action(Discard) };Rule { Matches { Domain("|thegatewaypundit.com|") }, Action(Discard) };Rule { Matches { Domain("|sltrib.com|") }, Action(Discard) };Rule { Matches { Domain("|mockplus.cn|") }, Action(Discard) };Rule { Matches { Domain("|harvestapp.com|") }, Action(Discard) };Rule { Matches { Domain("|liu.se|") }, Action(Discard) };Rule { Matches { Domain("|brother.com|") }, Action(Discard) };Rule { Matches { Domain("|kantar.com|") }, Action(Discard) };Rule { Matches { Domain("|svt.se|") }, Action(Discard) };Rule { Matches { Domain("|pbc.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|fsk-ees.ru|") }, Action(Discard) };Rule { Matches { Domain("|axs.com|") }, Action(Discard) };Rule { Matches { Domain("|thefappeningblog.com|") }, Action(Discard) };Rule { Matches { Domain("|rahavard365.com|") }, Action(Discard) };Rule { Matches { Domain("|oa.com|") }, Action(Discard) };Rule { Matches { Domain("|google.bg|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-36.org|") }, Action(Discard) };Rule { Matches { Domain("|adafruit.com|") }, Action(Discard) };Rule { Matches { Domain("|videoamp.com|") }, Action(Discard) };Rule { Matches { Domain("|commpass.tv|") }, Action(Discard) };Rule { Matches { Domain("|rdatasrv.net|") }, Action(Discard) };Rule { Matches { Domain("|qmul.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|jusbrasil.com.br|") }, Action(Discard) };Rule { Matches { Domain("|michelin.com|") }, Action(Discard) };Rule { Matches { Domain("|vogue.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|getpublica.com|") }, Action(Discard) };Rule { Matches { Domain("|esteri.it|") }, Action(Discard) };Rule { Matches { Domain("|docdroid.net|") }, Action(Discard) };Rule { Matches { Domain("|st-andrews.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|slack-redir.net|") }, Action(Discard) };Rule { Matches { Domain("|syfy.com|") }, Action(Discard) };Rule { Matches { Domain("|computerweekly.com|") }, Action(Discard) };Rule { Matches { Domain("|wien.gv.at|") }, Action(Discard) };Rule { Matches { Domain("|ihrhls.com|") }, Action(Discard) };Rule { Matches { Domain("|pushy.io|") }, Action(Discard) };Rule { Matches { Domain("|iocnt.net|") }, Action(Discard) };Rule { Matches { Domain("|logitech.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|ballotpedia.org|") }, Action(Discard) };Rule { Matches { Domain("|qh-cdn.com|") }, Action(Discard) };Rule { Matches { Domain("|getcourse.ru|") }, Action(Discard) };Rule { Matches { Domain("|unctad.org|") }, Action(Discard) };Rule { Matches { Domain("|klarnaservices.com|") }, Action(Discard) };Rule { Matches { Domain("|une.net.co|") }, Action(Discard) };Rule { Matches { Domain("|nbcnewyork.com|") }, Action(Discard) };Rule { Matches { Domain("|taylorfrancis.com|") }, Action(Discard) };Rule { Matches { Domain("|bseindia.com|") }, Action(Discard) };Rule { Matches { Domain("|bobvila.com|") }, Action(Discard) };Rule { Matches { Domain("|cdnetworks.net|") }, Action(Discard) };Rule { Matches { Domain("|meethue.com|") }, Action(Discard) };Rule { Matches { Domain("|afreecatv.com|") }, Action(Discard) };Rule { Matches { Domain("|designboom.com|") }, Action(Discard) };Rule { Matches { Domain("|ice.gov|") }, Action(Discard) };Rule { Matches { Domain("|ozone.ru|") }, Action(Discard) };Rule { Matches { Domain("|myroute53.com|") }, Action(Discard) };Rule { Matches { Domain("|dominantroute.com|") }, Action(Discard) };Rule { Matches { Domain("|bloomberglaw.com|") }, Action(Discard) };Rule { Matches { Domain("|openleverancier.com|") }, Action(Discard) };Rule { Matches { Domain("|auburn.edu|") }, Action(Discard) };Rule { Matches { Domain("|proxmox.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-27.net|") }, Action(Discard) };Rule { Matches { Domain("|ilsole24ore.com|") }, Action(Discard) };Rule { Matches { Domain("|coinpayu.com|") }, Action(Discard) };Rule { Matches { Domain("|beget.pro|") }, Action(Discard) };Rule { Matches { Domain("|ufanet.ru|") }, Action(Discard) };Rule { Matches { Domain("|rudderstack.com|") }, Action(Discard) };Rule { Matches { Domain("|berlin.de|") }, Action(Discard) };Rule { Matches { Domain("|hyundai.com|") }, Action(Discard) };Rule { Matches { Domain("|tver.jp|") }, Action(Discard) };Rule { Matches { Domain("|indystar.com|") }, Action(Discard) };Rule { Matches { Domain("|which.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|39.net|") }, Action(Discard) };Rule { Matches { Domain("|userscript.zone|") }, Action(Discard) };Rule { Matches { Domain("|walla.co.il|") }, Action(Discard) };Rule { Matches { Domain("|transfermarkt.de|") }, Action(Discard) };Rule { Matches { Domain("|cuni.cz|") }, Action(Discard) };Rule { Matches { Domain("|braintreegateway.com|") }, Action(Discard) };Rule { Matches { Domain("|jdcache.com|") }, Action(Discard) };Rule { Matches { Domain("|mvnrepository.com|") }, Action(Discard) };Rule { Matches { Domain("|keymachine.de|") }, Action(Discard) };Rule { Matches { Domain("|pantone.com|") }, Action(Discard) };Rule { Matches { Domain("|lgtvsdp.com|") }, Action(Discard) };Rule { Matches { Domain("|nel.goog|") }, Action(Discard) };Rule { Matches { Domain("|omny.fm|") }, Action(Discard) };Rule { Matches { Domain("|mindtools.com|") }, Action(Discard) };Rule { Matches { Domain("|lovetoknow.com|") }, Action(Discard) };Rule { Matches { Domain("|domains-green.com|") }, Action(Discard) };Rule { Matches { Domain("|zscalertwo.net|") }, Action(Discard) };Rule { Matches { Domain("|invisionapp.com|") }, Action(Discard) };Rule { Matches { Domain("|dowjones.com|") }, Action(Discard) };Rule { Matches { Domain("|opensooq.com|") }, Action(Discard) };Rule { Matches { Domain("|express.dhl|") }, Action(Discard) };Rule { Matches { Domain("|admixer.net|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-57.org|") }, Action(Discard) };Rule { Matches { Domain("|jezebel.com|") }, Action(Discard) };Rule { Matches { Domain("|bt.cn|") }, Action(Discard) };Rule { Matches { Domain("|reacciun.ve|") }, Action(Discard) };Rule { Matches { Domain("|lanzouo.com|") }, Action(Discard) };Rule { Matches { Domain("|bcelive.com|") }, Action(Discard) };Rule { Matches { Domain("|sis001.com|") }, Action(Discard) };Rule { Matches { Domain("|flyingcroc.net|") }, Action(Discard) };Rule { Matches { Domain("|worldstar.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-58.net|") }, Action(Discard) };Rule { Matches { Domain("|mercantilbanco.com|") }, Action(Discard) };Rule { Matches { Domain("|iaadd.cn|") }, Action(Discard) };Rule { Matches { Domain("|rarbg.to|") }, Action(Discard) };Rule { Matches { Domain("|msbl.org|") }, Action(Discard) };Rule { Matches { Domain("|aviasales.com|") }, Action(Discard) };Rule { Matches { Domain("|sdu.edu.cn|") }, Action(Discard) };Rule { Matches { Domain("|tu-dresden.de|") }, Action(Discard) };Rule { Matches { Domain("|awwwards.com|") }, Action(Discard) };Rule { Matches { Domain("|rapidshare.com|") }, Action(Discard) };Rule { Matches { Domain("|gleam.io|") }, Action(Discard) };Rule { Matches { Domain("|s-cloud.fi|") }, Action(Discard) };Rule { Matches { Domain("|moviesjoy.to|") }, Action(Discard) };Rule { Matches { Domain("|heavy.com|") }, Action(Discard) };Rule { Matches { Domain("|yes24.com|") }, Action(Discard) };Rule { Matches { Domain("|local.ch|") }, Action(Discard) };Rule { Matches { Domain("|bestwestern.com|") }, Action(Discard) };Rule { Matches { Domain("|queniuiq.com|") }, Action(Discard) };Rule { Matches { Domain("|lpsnmedia.net|") }, Action(Discard) };Rule { Matches { Domain("|samsungelectronics.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-40.org|") }, Action(Discard) };Rule { Matches { Domain("|glpals.com|") }, Action(Discard) };Rule { Matches { Domain("|plista.com|") }, Action(Discard) };Rule { Matches { Domain("|ndmdhs.com|") }, Action(Discard) };Rule { Matches { Domain("|yaplakal.com|") }, Action(Discard) };Rule { Matches { Domain("|wordhippo.com|") }, Action(Discard) };Rule { Matches { Domain("|sonkwo.cn|") }, Action(Discard) };Rule { Matches { Domain("|komiku.id|") }, Action(Discard) };Rule { Matches { Domain("|ritzcarlton.com|") }, Action(Discard) };Rule { Matches { Domain("|edweek.org|") }, Action(Discard) };Rule { Matches { Domain("|popin.cc|") }, Action(Discard) };Rule { Matches { Domain("|nta.go.jp|") }, Action(Discard) };Rule { Matches { Domain("|salesforce-dns.com|") }, Action(Discard) };Rule { Matches { Domain("|ucar.edu|") }, Action(Discard) };Rule { Matches { Domain("|rawstory.com|") }, Action(Discard) };Rule { Matches { Domain("|canadiantire.ca|") }, Action(Discard) };Rule { Matches { Domain("|top-official-app.com|") }, Action(Discard) };Rule { Matches { Domain("|vidible.tv|") }, Action(Discard) };Rule { Matches { Domain("|splunk.com|") }, Action(Discard) };Rule { Matches { Domain("|rome2rio.com|") }, Action(Discard) };Rule { Matches { Domain("|gencat.cat|") }, Action(Discard) };Rule { Matches { Domain("|ksu.edu.sa|") }, Action(Discard) };Rule { Matches { Domain("|unity.cn|") }, Action(Discard) };Rule { Matches { Domain("|wikiru.jp|") }, Action(Discard) };Rule { Matches { Domain("|12377.cn|") }, Action(Discard) };Rule { Matches { Domain("|lancs.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|tonic.to|") }, Action(Discard) };Rule { Matches { Domain("|insee.fr|") }, Action(Discard) };Rule { Matches { Domain("|wannianli8.com|") }, Action(Discard) };Rule { Matches { Domain("|emag.ro|") }, Action(Discard) };Rule { Matches { Domain("|univision.com|") }, Action(Discard) };Rule { Matches { Domain("|motorola.com|") }, Action(Discard) };Rule { Matches { Domain("|ahcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|prxbox.com|") }, Action(Discard) };Rule { Matches { Domain("|petapixel.com|") }, Action(Discard) };Rule { Matches { Domain("|sudani.sd|") }, Action(Discard) };Rule { Matches { Domain("|johnlewis.com|") }, Action(Discard) };Rule { Matches { Domain("|chanel.com|") }, Action(Discard) };Rule { Matches { Domain("|qvc.com|") }, Action(Discard) };Rule { Matches { Domain("|mbalib.com|") }, Action(Discard) };Rule { Matches { Domain("|zozo.jp|") }, Action(Discard) };Rule { Matches { Domain("|sport-express.ru|") }, Action(Discard) };Rule { Matches { Domain("|myasiantv.cc|") }, Action(Discard) };Rule { Matches { Domain("|bms.com|") }, Action(Discard) };Rule { Matches { Domain("|cctld.us|") }, Action(Discard) };Rule { Matches { Domain("|bumlam.com|") }, Action(Discard) };Rule { Matches { Domain("|tennessean.com|") }, Action(Discard) };Rule { Matches { Domain("|uni-koeln.de|") }, Action(Discard) };Rule { Matches { Domain("|lsfilter.com|") }, Action(Discard) };Rule { Matches { Domain("|onetrust.io|") }, Action(Discard) };Rule { Matches { Domain("|a47b.com|") }, Action(Discard) };Rule { Matches { Domain("|unacademy.com|") }, Action(Discard) };Rule { Matches { Domain("|rtl.de|") }, Action(Discard) };Rule { Matches { Domain("|bangmod.cloud|") }, Action(Discard) };Rule { Matches { Domain("|food.com|") }, Action(Discard) };Rule { Matches { Domain("|magentocommerce.com|") }, Action(Discard) };Rule { Matches { Domain("|runnersworld.com|") }, Action(Discard) };Rule { Matches { Domain("|ncaa.com|") }, Action(Discard) };Rule { Matches { Domain("|uab.edu|") }, Action(Discard) };Rule { Matches { Domain("|haproxyedge.net|") }, Action(Discard) };Rule { Matches { Domain("|msdmanuals.com|") }, Action(Discard) };Rule { Matches { Domain("|mangalivre.net|") }, Action(Discard) };Rule { Matches { Domain("|kik.com|") }, Action(Discard) };Rule { Matches { Domain("|foodnetwork.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|itemfix.com|") }, Action(Discard) };Rule { Matches { Domain("|xjtu.edu.cn|") }, Action(Discard) };Rule { Matches { Domain("|wurl.tv|") }, Action(Discard) };Rule { Matches { Domain("|neocities.org|") }, Action(Discard) };Rule { Matches { Domain("|cracked.com|") }, Action(Discard) };Rule { Matches { Domain("|exitgames.com|") }, Action(Discard) };Rule { Matches { Domain("|sysco.com|") }, Action(Discard) };Rule { Matches { Domain("|mewe.com|") }, Action(Discard) };Rule { Matches { Domain("|indiapostgdsonline.gov.in|") }, Action(Discard) };Rule { Matches { Domain("|suny.edu|") }, Action(Discard) };Rule { Matches { Domain("|dowjones.io|") }, Action(Discard) };Rule { Matches { Domain("|jigsy.com|") }, Action(Discard) };Rule { Matches { Domain("|paycomonline.net|") }, Action(Discard) };Rule { Matches { Domain("|av19.org|") }, Action(Discard) };Rule { Matches { Domain("|repec.org|") }, Action(Discard) };Rule { Matches { Domain("|adthrive.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-43.net|") }, Action(Discard) };Rule { Matches { Domain("|superbthemes.com|") }, Action(Discard) };Rule { Matches { Domain("|clck.ru|") }, Action(Discard) };Rule { Matches { Domain("|dyntrk.com|") }, Action(Discard) };Rule { Matches { Domain("|anyflip.com|") }, Action(Discard) };Rule { Matches { Domain("|wikileaks.org|") }, Action(Discard) };Rule { Matches { Domain("|vc.ru|") }, Action(Discard) };Rule { Matches { Domain("|planfix.com|") }, Action(Discard) };Rule { Matches { Domain("|xhcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|tappx.com|") }, Action(Discard) };Rule { Matches { Domain("|beaxy.com|") }, Action(Discard) };Rule { Matches { Domain("|smartclip.net|") }, Action(Discard) };Rule { Matches { Domain("|hackaday.com|") }, Action(Discard) };Rule { Matches { Domain("|worldpay.com|") }, Action(Discard) };Rule { Matches { Domain("|iporntv.net|") }, Action(Discard) };Rule { Matches { Domain("|postimg.org|") }, Action(Discard) };Rule { Matches { Domain("|avaaz.org|") }, Action(Discard) };Rule { Matches { Domain("|tide.com|") }, Action(Discard) };Rule { Matches { Domain("|farpost.ru|") }, Action(Discard) };Rule { Matches { Domain("|nice.org.uk|") }, Action(Discard) };Rule { Matches { Domain("|uct.ac.za|") }, Action(Discard) };Rule { Matches { Domain("|health.gov.au|") }, Action(Discard) };Rule { Matches { Domain("|jobvite.com|") }, Action(Discard) };Rule { Matches { Domain("|mt.gov|") }, Action(Discard) };Rule { Matches { Domain("|ibotta.com|") }, Action(Discard) };Rule { Matches { Domain("|amazonses.com|") }, Action(Discard) };Rule { Matches { Domain("|ja.net|") }, Action(Discard) };Rule { Matches { Domain("|mintegral.net|") }, Action(Discard) };Rule { Matches { Domain("|microchip.com|") }, Action(Discard) };Rule { Matches { Domain("|checkout.com|") }, Action(Discard) };Rule { Matches { Domain("|boe.es|") }, Action(Discard) };Rule { Matches { Domain("|esy.es|") }, Action(Discard) };Rule { Matches { Domain("|haproxy.com|") }, Action(Discard) };Rule { Matches { Domain("|alibabacloud.com|") }, Action(Discard) };Rule { Matches { Domain("|appliedtheory.com|") }, Action(Discard) };Rule { Matches { Domain("|delfi.lt|") }, Action(Discard) };Rule { Matches { Domain("|wnacloud.com|") }, Action(Discard) };Rule { Matches { Domain("|activecampaign.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-62.org|") }, Action(Discard) };Rule { Matches { Domain("|bain.com|") }, Action(Discard) };Rule { Matches { Domain("|apkcombo.com|") }, Action(Discard) };Rule { Matches { Domain("|datatables.net|") }, Action(Discard) };Rule { Matches { Domain("|lokalise.com|") }, Action(Discard) };Rule { Matches { Domain("|unlv.edu|") }, Action(Discard) };Rule { Matches { Domain("|veporno.net|") }, Action(Discard) };Rule { Matches { Domain("|thedrum.com|") }, Action(Discard) };Rule { Matches { Domain("|zscloud.net|") }, Action(Discard) };Rule { Matches { Domain("|spotim.market|") }, Action(Discard) };Rule { Matches { Domain("|lloydsbank.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|pinterest.jp|") }, Action(Discard) };Rule { Matches { Domain("|mailshell.net|") }, Action(Discard) };Rule { Matches { Domain("|healthychildren.org|") }, Action(Discard) };Rule { Matches { Domain("|movavi.com|") }, Action(Discard) };Rule { Matches { Domain("|extremetech.com|") }, Action(Discard) };Rule { Matches { Domain("|depaul.edu|") }, Action(Discard) };Rule { Matches { Domain("|slides.com|") }, Action(Discard) };Rule { Matches { Domain("|metamucil.com|") }, Action(Discard) };Rule { Matches { Domain("|sendgrid.com|") }, Action(Discard) };Rule { Matches { Domain("|honey.io|") }, Action(Discard) };Rule { Matches { Domain("|credit-suisse.com|") }, Action(Discard) };Rule { Matches { Domain("|baidu.hk|") }, Action(Discard) };Rule { Matches { Domain("|dayforcehcm.com|") }, Action(Discard) };Rule { Matches { Domain("|baidu-int.com|") }, Action(Discard) };Rule { Matches { Domain("|civicscience.com|") }, Action(Discard) };Rule { Matches { Domain("|kmail-lists.com|") }, Action(Discard) };Rule { Matches { Domain("|bb.com.br|") }, Action(Discard) };Rule { Matches { Domain("|netlifyglobalcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|mywot.com|") }, Action(Discard) };Rule { Matches { Domain("|manoramaonline.com|") }, Action(Discard) };Rule { Matches { Domain("|nivod.tv|") }, Action(Discard) };Rule { Matches { Domain("|kotak.com|") }, Action(Discard) };Rule { Matches { Domain("|qwant.com|") }, Action(Discard) };Rule { Matches { Domain("|seu.edu.cn|") }, Action(Discard) };Rule { Matches { Domain("|playground.ru|") }, Action(Discard) };Rule { Matches { Domain("|invisioncic.com|") }, Action(Discard) };Rule { Matches { Domain("|faloo.com|") }, Action(Discard) };Rule { Matches { Domain("|smarturl.it|") }, Action(Discard) };Rule { Matches { Domain("|mailtrack.io|") }, Action(Discard) };Rule { Matches { Domain("|pangle.io|") }, Action(Discard) };Rule { Matches { Domain("|solarwinds.com|") }, Action(Discard) };Rule { Matches { Domain("|telecid.ru|") }, Action(Discard) };Rule { Matches { Domain("|ivideon.com|") }, Action(Discard) };Rule { Matches { Domain("|nrel.gov|") }, Action(Discard) };Rule { Matches { Domain("|fetchrewards.com|") }, Action(Discard) };Rule { Matches { Domain("|mastodon.social|") }, Action(Discard) };Rule { Matches { Domain("|photoshelter.com|") }, Action(Discard) };Rule { Matches { Domain("|broadwayworld.com|") }, Action(Discard) };Rule { Matches { Domain("|krakow.pl|") }, Action(Discard) };Rule { Matches { Domain("|nyaa.si|") }, Action(Discard) };Rule { Matches { Domain("|81.cn|") }, Action(Discard) };Rule { Matches { Domain("|kabum.com.br|") }, Action(Discard) };Rule { Matches { Domain("|liftoff-creatives.io|") }, Action(Discard) };Rule { Matches { Domain("|parus-s.ru|") }, Action(Discard) };Rule { Matches { Domain("|oberlo.com|") }, Action(Discard) };Rule { Matches { Domain("|nju.edu.cn|") }, Action(Discard) };Rule { Matches { Domain("|phonearena.com|") }, Action(Discard) };Rule { Matches { Domain("|btbtt12.com|") }, Action(Discard) };Rule { Matches { Domain("|oktacdn.com|") }, Action(Discard) };Rule { Matches { Domain("|itunes.com|") }, Action(Discard) };Rule { Matches { Domain("|studiopress.com|") }, Action(Discard) };Rule { Matches { Domain("|sandai.net|") }, Action(Discard) };Rule { Matches { Domain("|bluecava.com|") }, Action(Discard) };Rule { Matches { Domain("|clickcease.com|") }, Action(Discard) };Rule { Matches { Domain("|rootsoc.com|") }, Action(Discard) };Rule { Matches { Domain("|tp-staging.com|") }, Action(Discard) };Rule { Matches { Domain("|ucm.es|") }, Action(Discard) };Rule { Matches { Domain("|analog.com|") }, Action(Discard) };Rule { Matches { Domain("|vb17123filippaaniketos.pw|") }, Action(Discard) };Rule { Matches { Domain("|postman.co|") }, Action(Discard) };Rule { Matches { Domain("|prts.wiki|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-44.org|") }, Action(Discard) };Rule { Matches { Domain("|yiche.com|") }, Action(Discard) };Rule { Matches { Domain("|axis.com|") }, Action(Discard) };Rule { Matches { Domain("|net-a-porter.com|") }, Action(Discard) };Rule { Matches { Domain("|en25.com|") }, Action(Discard) };Rule { Matches { Domain("|orbitz.com|") }, Action(Discard) };Rule { Matches { Domain("|rdtk.io|") }, Action(Discard) };Rule { Matches { Domain("|vprok.ru|") }, Action(Discard) };Rule { Matches { Domain("|anythinktech.com|") }, Action(Discard) };Rule { Matches { Domain("|uipath.com|") }, Action(Discard) };Rule { Matches { Domain("|bitmart.com|") }, Action(Discard) };Rule { Matches { Domain("|bancodevenezuela.com|") }, Action(Discard) };Rule { Matches { Domain("|getcomposer.org|") }, Action(Discard) };Rule { Matches { Domain("|garena.com|") }, Action(Discard) };Rule { Matches { Domain("|majordomo.ru|") }, Action(Discard) };Rule { Matches { Domain("|yadi.sk|") }, Action(Discard) };Rule { Matches { Domain("|palich.xyz|") }, Action(Discard) };Rule { Matches { Domain("|qlogo.cn|") }, Action(Discard) };Rule { Matches { Domain("|belastingdienst.nl|") }, Action(Discard) };Rule { Matches { Domain("|overleaf.com|") }, Action(Discard) };Rule { Matches { Domain("|tf1.fr|") }, Action(Discard) };Rule { Matches { Domain("|aidouer.net|") }, Action(Discard) };Rule { Matches { Domain("|couchsurfing.com|") }, Action(Discard) };Rule { Matches { Domain("|ixl.com|") }, Action(Discard) };Rule { Matches { Domain("|larksuite.com|") }, Action(Discard) };Rule { Matches { Domain("|cepat.net.id|") }, Action(Discard) };Rule { Matches { Domain("|sonyliv.com|") }, Action(Discard) };Rule { Matches { Domain("|sanook.com|") }, Action(Discard) };Rule { Matches { Domain("|haveibeenpwned.com|") }, Action(Discard) };Rule { Matches { Domain("|drtuber.com|") }, Action(Discard) };Rule { Matches { Domain("|rdw.nl|") }, Action(Discard) };Rule { Matches { Domain("|streamcheck.link|") }, Action(Discard) };Rule { Matches { Domain("|gcs-web.com|") }, Action(Discard) };Rule { Matches { Domain("|exeter.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|google.com.ly|") }, Action(Discard) };Rule { Matches { Domain("|kiplinger.com|") }, Action(Discard) };Rule { Matches { Domain("|gillette.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|verkada.com|") }, Action(Discard) };Rule { Matches { Domain("|eol.cn|") }, Action(Discard) };Rule { Matches { Domain("|sheffield.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|mobfox.com|") }, Action(Discard) };Rule { Matches { Domain("|successfactors.eu|") }, Action(Discard) };Rule { Matches { Domain("|kiwi.com|") }, Action(Discard) };Rule { Matches { Domain("|aaacdn.net|") }, Action(Discard) };Rule { Matches { Domain("|hwccpc.com|") }, Action(Discard) };Rule { Matches { Domain("|pavietnam.net|") }, Action(Discard) };Rule { Matches { Domain("|bose.com|") }, Action(Discard) };Rule { Matches { Domain("|project-limelight.com|") }, Action(Discard) };Rule { Matches { Domain("|kunlungr.com|") }, Action(Discard) };Rule { Matches { Domain("|ravm.tv|") }, Action(Discard) };Rule { Matches { Domain("|dmhy.org|") }, Action(Discard) };Rule { Matches { Domain("|physiology.org|") }, Action(Discard) };Rule { Matches { Domain("|ru.com|") }, Action(Discard) };Rule { Matches { Domain("|bts.gov|") }, Action(Discard) };Rule { Matches { Domain("|freeservers.com|") }, Action(Discard) };Rule { Matches { Domain("|verywellfamily.com|") }, Action(Discard) };Rule { Matches { Domain("|wordtune.com|") }, Action(Discard) };Rule { Matches { Domain("|yuanacg.com|") }, Action(Discard) };Rule { Matches { Domain("|touchtunes.com|") }, Action(Discard) };Rule { Matches { Domain("|deccanherald.com|") }, Action(Discard) };Rule { Matches { Domain("|haproxy.org|") }, Action(Discard) };Rule { Matches { Domain("|abc7.com|") }, Action(Discard) };Rule { Matches { Domain("|arabnews.com|") }, Action(Discard) };Rule { Matches { Domain("|eurosport.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-07.org|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-41.org|") }, Action(Discard) };Rule { Matches { Domain("|cheezburger.com|") }, Action(Discard) };Rule { Matches { Domain("|zdusercontent.com|") }, Action(Discard) };Rule { Matches { Domain("|jisho.org|") }, Action(Discard) };Rule { Matches { Domain("|cjb.net|") }, Action(Discard) };Rule { Matches { Domain("|gutefrage.net|") }, Action(Discard) };Rule { Matches { Domain("|hellomagazine.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-19.org|") }, Action(Discard) };Rule { Matches { Domain("|cifnews.com|") }, Action(Discard) };Rule { Matches { Domain("|beyondtrustcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|citibankonline.com|") }, Action(Discard) };Rule { Matches { Domain("|bluewin.ch|") }, Action(Discard) };Rule { Matches { Domain("|iobit.com|") }, Action(Discard) };Rule { Matches { Domain("|mic.com|") }, Action(Discard) };Rule { Matches { Domain("|vwapps.io|") }, Action(Discard) };Rule { Matches { Domain("|googlesource.com|") }, Action(Discard) };Rule { Matches { Domain("|gettr.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-60.org|") }, Action(Discard) };Rule { Matches { Domain("|prodigygame.com|") }, Action(Discard) };Rule { Matches { Domain("|umt.edu|") }, Action(Discard) };Rule { Matches { Domain("|newsobserver.com|") }, Action(Discard) };Rule { Matches { Domain("|devpost.com|") }, Action(Discard) };Rule { Matches { Domain("|crisp.chat|") }, Action(Discard) };Rule { Matches { Domain("|theringer.com|") }, Action(Discard) };Rule { Matches { Domain("|onlinepbx.ru|") }, Action(Discard) };Rule { Matches { Domain("|yimg.jp|") }, Action(Discard) };Rule { Matches { Domain("|freeimages.com|") }, Action(Discard) };Rule { Matches { Domain("|yottaa.net|") }, Action(Discard) };Rule { Matches { Domain("|fmprc.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|ex.co|") }, Action(Discard) };Rule { Matches { Domain("|gq-magazine.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|lpl.com|") }, Action(Discard) };Rule { Matches { Domain("|adpointrtb.com|") }, Action(Discard) };Rule { Matches { Domain("|shop-pro.jp|") }, Action(Discard) };Rule { Matches { Domain("|esuteru.com|") }, Action(Discard) };Rule { Matches { Domain("|msstate.edu|") }, Action(Discard) };Rule { Matches { Domain("|mobtrakk.com|") }, Action(Discard) };Rule { Matches { Domain("|tineye.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-08.org|") }, Action(Discard) };Rule { Matches { Domain("|uzh.ch|") }, Action(Discard) };Rule { Matches { Domain("|todesk.com|") }, Action(Discard) };Rule { Matches { Domain("|ecfr.gov|") }, Action(Discard) };Rule { Matches { Domain("|la.gov|") }, Action(Discard) };Rule { Matches { Domain("|transportation.gov|") }, Action(Discard) };Rule { Matches { Domain("|downdetector.com|") }, Action(Discard) };Rule { Matches { Domain("|insales.ru|") }, Action(Discard) };Rule { Matches { Domain("|win7zhijia.cn|") }, Action(Discard) };Rule { Matches { Domain("|pcgamesn.com|") }, Action(Discard) };Rule { Matches { Domain("|khabaronline.ir|") }, Action(Discard) };Rule { Matches { Domain("|tes.com|") }, Action(Discard) };Rule { Matches { Domain("|veeam.com|") }, Action(Discard) };Rule { Matches { Domain("|hln.be|") }, Action(Discard) };Rule { Matches { Domain("|gaijin.net|") }, Action(Discard) };Rule { Matches { Domain("|ivoox.com|") }, Action(Discard) };Rule { Matches { Domain("|sbisec.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|mouser.com|") }, Action(Discard) };Rule { Matches { Domain("|adtng.com|") }, Action(Discard) };Rule { Matches { Domain("|rambler-co.ru|") }, Action(Discard) };Rule { Matches { Domain("|prmutv.co|") }, Action(Discard) };Rule { Matches { Domain("|systeme.io|") }, Action(Discard) };Rule { Matches { Domain("|tenten.vn|") }, Action(Discard) };Rule { Matches { Domain("|agah.com|") }, Action(Discard) };Rule { Matches { Domain("|bgr.com|") }, Action(Discard) };Rule { Matches { Domain("|lephaush.net|") }, Action(Discard) };Rule { Matches { Domain("|eltiempo.com|") }, Action(Discard) };Rule { Matches { Domain("|mee.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|google.lv|") }, Action(Discard) };Rule { Matches { Domain("|asus.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|988lifeline.org|") }, Action(Discard) };Rule { Matches { Domain("|health.gov|") }, Action(Discard) };Rule { Matches { Domain("|inkscape.org|") }, Action(Discard) };Rule { Matches { Domain("|mango.com|") }, Action(Discard) };Rule { Matches { Domain("|zoopla.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|jc-gs.com|") }, Action(Discard) };Rule { Matches { Domain("|nzz.ch|") }, Action(Discard) };Rule { Matches { Domain("|versus.com|") }, Action(Discard) };Rule { Matches { Domain("|anteldata.com.uy|") }, Action(Discard) };Rule { Matches { Domain("|cinemablend.com|") }, Action(Discard) };Rule { Matches { Domain("|dantri.com.vn|") }, Action(Discard) };Rule { Matches { Domain("|btbtt11.com|") }, Action(Discard) };Rule { Matches { Domain("|stonybrook.edu|") }, Action(Discard) };Rule { Matches { Domain("|swiftkey.com|") }, Action(Discard) };Rule { Matches { Domain("|olx.ro|") }, Action(Discard) };Rule { Matches { Domain("|renweb.com|") }, Action(Discard) };Rule { Matches { Domain("|tv2.dk|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-33.org|") }, Action(Discard) };Rule { Matches { Domain("|treasuredata.com|") }, Action(Discard) };Rule { Matches { Domain("|bravetense.com|") }, Action(Discard) };Rule { Matches { Domain("|mediaroom.com|") }, Action(Discard) };Rule { Matches { Domain("|edpuzzle.com|") }, Action(Discard) };Rule { Matches { Domain("|nrw.de|") }, Action(Discard) };Rule { Matches { Domain("|google.com.ec|") }, Action(Discard) };Rule { Matches { Domain("|withbuddies.com|") }, Action(Discard) };Rule { Matches { Domain("|cancerresearchuk.org|") }, Action(Discard) };Rule { Matches { Domain("|btsj6.com|") }, Action(Discard) };Rule { Matches { Domain("|tribunnews.com|") }, Action(Discard) };Rule { Matches { Domain("|responsys.net|") }, Action(Discard) };Rule { Matches { Domain("|hubapi.com|") }, Action(Discard) };Rule { Matches { Domain("|heanet.ie|") }, Action(Discard) };Rule { Matches { Domain("|brandsight-dns.com|") }, Action(Discard) };Rule { Matches { Domain("|shape.com|") }, Action(Discard) };Rule { Matches { Domain("|dailytelegraph.com.au|") }, Action(Discard) };Rule { Matches { Domain("|delfi.ee|") }, Action(Discard) };Rule { Matches { Domain("|sweetwater.com|") }, Action(Discard) };Rule { Matches { Domain("|halodoc.com|") }, Action(Discard) };Rule { Matches { Domain("|gta5-mods.com|") }, Action(Discard) };Rule { Matches { Domain("|plusgsm.pl|") }, Action(Discard) };Rule { Matches { Domain("|rakuten-sec.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|manualslib.com|") }, Action(Discard) };Rule { Matches { Domain("|dotesports.com|") }, Action(Discard) };Rule { Matches { Domain("|fudan.edu.cn|") }, Action(Discard) };Rule { Matches { Domain("|maharashtra.gov.in|") }, Action(Discard) };Rule { Matches { Domain("|nikkeibp.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|bravesites.com|") }, Action(Discard) };Rule { Matches { Domain("|andersnoren.se|") }, Action(Discard) };Rule { Matches { Domain("|iqilu.com|") }, Action(Discard) };Rule { Matches { Domain("|webmota.com|") }, Action(Discard) };Rule { Matches { Domain("|soton.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|dynadot.com|") }, Action(Discard) };Rule { Matches { Domain("|newswire.ca|") }, Action(Discard) };Rule { Matches { Domain("|google.by|") }, Action(Discard) };Rule { Matches { Domain("|sxsw.com|") }, Action(Discard) };Rule { Matches { Domain("|ext-twitch.tv|") }, Action(Discard) };Rule { Matches { Domain("|ntt.net|") }, Action(Discard) };Rule { Matches { Domain("|electro-com.ru|") }, Action(Discard) };Rule { Matches { Domain("|zillowstatic.com|") }, Action(Discard) };Rule { Matches { Domain("|modyolo.com|") }, Action(Discard) };Rule { Matches { Domain("|cpmstar.com|") }, Action(Discard) };Rule { Matches { Domain("|goku.to|") }, Action(Discard) };Rule { Matches { Domain("|faselhd.club|") }, Action(Discard) };Rule { Matches { Domain("|ns.se|") }, Action(Discard) };Rule { Matches { Domain("|city-data.com|") }, Action(Discard) };Rule { Matches { Domain("|iflscience.com|") }, Action(Discard) };Rule { Matches { Domain("|adsmoloco.com|") }, Action(Discard) };Rule { Matches { Domain("|bandsintown.com|") }, Action(Discard) };Rule { Matches { Domain("|dealerinspire.com|") }, Action(Discard) };Rule { Matches { Domain("|blog.com|") }, Action(Discard) };Rule { Matches { Domain("|spotifycdn.com|") }, Action(Discard) };Rule { Matches { Domain("|jb51.cc|") }, Action(Discard) };Rule { Matches { Domain("|coveo.com|") }, Action(Discard) };Rule { Matches { Domain("|learnosity.com|") }, Action(Discard) };Rule { Matches { Domain("|doyo.cn|") }, Action(Discard) };Rule { Matches { Domain("|rijksoverheid.nl|") }, Action(Discard) };Rule { Matches { Domain("|seesaawiki.jp|") }, Action(Discard) };Rule { Matches { Domain("|sportradarserving.com|") }, Action(Discard) };Rule { Matches { Domain("|ap.gov.in|") }, Action(Discard) };Rule { Matches { Domain("|ckk.ai|") }, Action(Discard) };Rule { Matches { Domain("|squarespace-cdn.com|") }, Action(Discard) };Rule { Matches { Domain("|pons.com|") }, Action(Discard) };Rule { Matches { Domain("|rocketreach.co|") }, Action(Discard) };Rule { Matches { Domain("|ga.gov|") }, Action(Discard) };Rule { Matches { Domain("|windstream.net|") }, Action(Discard) };Rule { Matches { Domain("|spectator.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|netvigator.com|") }, Action(Discard) };Rule { Matches { Domain("|6pm.com|") }, Action(Discard) };Rule { Matches { Domain("|jobinja.ir|") }, Action(Discard) };Rule { Matches { Domain("|filmweb.pl|") }, Action(Discard) };Rule { Matches { Domain("|555hd2.com|") }, Action(Discard) };Rule { Matches { Domain("|powerreviews.com|") }, Action(Discard) };Rule { Matches { Domain("|gaymaletube.com|") }, Action(Discard) };Rule { Matches { Domain("|clio.com|") }, Action(Discard) };Rule { Matches { Domain("|alphacoders.com|") }, Action(Discard) };Rule { Matches { Domain("|researchnow.com|") }, Action(Discard) };Rule { Matches { Domain("|manta.com|") }, Action(Discard) };Rule { Matches { Domain("|lepoint.fr|") }, Action(Discard) };Rule { Matches { Domain("|voka.tv|") }, Action(Discard) };Rule { Matches { Domain("|mgmresorts.com|") }, Action(Discard) };Rule { Matches { Domain("|sch.gr|") }, Action(Discard) };Rule { Matches { Domain("|mamastar.jp|") }, Action(Discard) };Rule { Matches { Domain("|idrive.com|") }, Action(Discard) };Rule { Matches { Domain("|kanzhun.com|") }, Action(Discard) };Rule { Matches { Domain("|tue.nl|") }, Action(Discard) };Rule { Matches { Domain("|hertz.com|") }, Action(Discard) };Rule { Matches { Domain("|wfp.org|") }, Action(Discard) };Rule { Matches { Domain("|six-group.com|") }, Action(Discard) };Rule { Matches { Domain("|vancouversun.com|") }, Action(Discard) };Rule { Matches { Domain("|realme.com|") }, Action(Discard) };Rule { Matches { Domain("|wetteronline.de|") }, Action(Discard) };Rule { Matches { Domain("|amemv.com|") }, Action(Discard) };Rule { Matches { Domain("|noip.com|") }, Action(Discard) };Rule { Matches { Domain("|limestart.cn|") }, Action(Discard) };Rule { Matches { Domain("|mca.gov.in|") }, Action(Discard) };Rule { Matches { Domain("|us-cert.gov|") }, Action(Discard) };Rule { Matches { Domain("|ithome.com.tw|") }, Action(Discard) };Rule { Matches { Domain("|tiendasplanet.com|") }, Action(Discard) };Rule { Matches { Domain("|20min.ch|") }, Action(Discard) };Rule { Matches { Domain("|bidtheatre.com|") }, Action(Discard) };Rule { Matches { Domain("|sc.gov|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-49.org|") }, Action(Discard) };Rule { Matches { Domain("|choicehotels.com|") }, Action(Discard) };Rule { Matches { Domain("|wallethub.com|") }, Action(Discard) };Rule { Matches { Domain("|karger.com|") }, Action(Discard) };Rule { Matches { Domain("|disa.mil|") }, Action(Discard) };Rule { Matches { Domain("|famethemes.com|") }, Action(Discard) };Rule { Matches { Domain("|flypgs.com|") }, Action(Discard) };Rule { Matches { Domain("|sfsu.edu|") }, Action(Discard) };Rule { Matches { Domain("|lieferando.de|") }, Action(Discard) };Rule { Matches { Domain("|presscustomizr.com|") }, Action(Discard) };Rule { Matches { Domain("|cardekho.com|") }, Action(Discard) };Rule { Matches { Domain("|nuancemobility.net|") }, Action(Discard) };Rule { Matches { Domain("|pytorch.org|") }, Action(Discard) };Rule { Matches { Domain("|archive.ph|") }, Action(Discard) };Rule { Matches { Domain("|santander.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|webfx.com|") }, Action(Discard) };Rule { Matches { Domain("|beatport.com|") }, Action(Discard) };Rule { Matches { Domain("|epochtimes.com|") }, Action(Discard) };Rule { Matches { Domain("|desire2learn.com|") }, Action(Discard) };Rule { Matches { Domain("|jsxrc.com|") }, Action(Discard) };Rule { Matches { Domain("|vam.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|oneplus.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-30.org|") }, Action(Discard) };Rule { Matches { Domain("|nearpod.com|") }, Action(Discard) };Rule { Matches { Domain("|radio-canada.ca|") }, Action(Discard) };Rule { Matches { Domain("|cbinsights.com|") }, Action(Discard) };Rule { Matches { Domain("|hentaimama.io|") }, Action(Discard) };Rule { Matches { Domain("|egihosting.com|") }, Action(Discard) };Rule { Matches { Domain("|doaj.org|") }, Action(Discard) };Rule { Matches { Domain("|ovoenergy.com|") }, Action(Discard) };Rule { Matches { Domain("|voachinese.com|") }, Action(Discard) };Rule { Matches { Domain("|naturalnews.com|") }, Action(Discard) };Rule { Matches { Domain("|hse.gov.uk|") }, Action(Discard) };Rule { Matches { Domain("|loopnet.com|") }, Action(Discard) };Rule { Matches { Domain("|lgdacom.net|") }, Action(Discard) };Rule { Matches { Domain("|eaton.com|") }, Action(Discard) };Rule { Matches { Domain("|liverpoolecho.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|doi.gov|") }, Action(Discard) };Rule { Matches { Domain("|csfd.cz|") }, Action(Discard) };Rule { Matches { Domain("|getepic.com|") }, Action(Discard) };Rule { Matches { Domain("|masahub.net|") }, Action(Discard) };Rule { Matches { Domain("|guzelhosting.com|") }, Action(Discard) };Rule { Matches { Domain("|docker.io|") }, Action(Discard) };Rule { Matches { Domain("|dm.gg|") }, Action(Discard) };Rule { Matches { Domain("|wunderkind.co|") }, Action(Discard) };Rule { Matches { Domain("|boosty.to|") }, Action(Discard) };Rule { Matches { Domain("|connectad.io|") }, Action(Discard) };Rule { Matches { Domain("|rfa.org|") }, Action(Discard) };Rule { Matches { Domain("|steemit.com|") }, Action(Discard) };Rule { Matches { Domain("|boltdns.net|") }, Action(Discard) };Rule { Matches { Domain("|minkatu.com|") }, Action(Discard) };Rule { Matches { Domain("|delltechnologies.com|") }, Action(Discard) };Rule { Matches { Domain("|sc-corp.net|") }, Action(Discard) };Rule { Matches { Domain("|airbus.com|") }, Action(Discard) };Rule { Matches { Domain("|freejobalert.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-25.org|") }, Action(Discard) };Rule { Matches { Domain("|wtop.com|") }, Action(Discard) };Rule { Matches { Domain("|metal-archives.com|") }, Action(Discard) };Rule { Matches { Domain("|nhm.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|arvancdn.ir|") }, Action(Discard) };Rule { Matches { Domain("|dns.ar|") }, Action(Discard) };Rule { Matches { Domain("|thalesgroup.com|") }, Action(Discard) };Rule { Matches { Domain("|harborfreight.com|") }, Action(Discard) };Rule { Matches { Domain("|yesky.com|") }, Action(Discard) };Rule { Matches { Domain("|bitci.com|") }, Action(Discard) };Rule { Matches { Domain("|guru99.com|") }, Action(Discard) };Rule { Matches { Domain("|google.com.qa|") }, Action(Discard) };Rule { Matches { Domain("|penzu.com|") }, Action(Discard) };Rule { Matches { Domain("|ojp.gov|") }, Action(Discard) };Rule { Matches { Domain("|truoptik.com|") }, Action(Discard) };Rule { Matches { Domain("|shonenjumpplus.com|") }, Action(Discard) };Rule { Matches { Domain("|amplify.com|") }, Action(Discard) };Rule { Matches { Domain("|mrtnsvr.com|") }, Action(Discard) };Rule { Matches { Domain("|olx.com.pk|") }, Action(Discard) };Rule { Matches { Domain("|yinzcam.com|") }, Action(Discard) };Rule { Matches { Domain("|olark.com|") }, Action(Discard) };Rule { Matches { Domain("|firstbytedns.net|") }, Action(Discard) };Rule { Matches { Domain("|impact.com|") }, Action(Discard) };Rule { Matches { Domain("|hotlog.ru|") }, Action(Discard) };Rule { Matches { Domain("|etonline.com|") }, Action(Discard) };Rule { Matches { Domain("|poringa.net|") }, Action(Discard) };Rule { Matches { Domain("|ahrq.gov|") }, Action(Discard) };Rule { Matches { Domain("|unibo.it|") }, Action(Discard) };Rule { Matches { Domain("|88htu.com|") }, Action(Discard) };Rule { Matches { Domain("|kinescopecdn.net|") }, Action(Discard) };Rule { Matches { Domain("|fullhdfilmizlesene.pw|") }, Action(Discard) };Rule { Matches { Domain("|easeus.com|") }, Action(Discard) };Rule { Matches { Domain("|playblackdesert.com|") }, Action(Discard) };Rule { Matches { Domain("|babbel.com|") }, Action(Discard) };Rule { Matches { Domain("|protothema.gr|") }, Action(Discard) };Rule { Matches { Domain("|fullerton.edu|") }, Action(Discard) };Rule { Matches { Domain("|freedidi.com|") }, Action(Discard) };Rule { Matches { Domain("|5yju.com|") }, Action(Discard) };Rule { Matches { Domain("|myreadingmanga.info|") }, Action(Discard) };Rule { Matches { Domain("|uberns.com|") }, Action(Discard) };Rule { Matches { Domain("|hbogo.eu|") }, Action(Discard) };Rule { Matches { Domain("|pan666.cn|") }, Action(Discard) };Rule { Matches { Domain("|reaperscans.com|") }, Action(Discard) };Rule { Matches { Domain("|vu.nl|") }, Action(Discard) };Rule { Matches { Domain("|fca.org.uk|") }, Action(Discard) };Rule { Matches { Domain("|f-secure.com|") }, Action(Discard) };Rule { Matches { Domain("|harpercollins.com|") }, Action(Discard) };Rule { Matches { Domain("|primis.tech|") }, Action(Discard) };Rule { Matches { Domain("|ui-dns.de|") }, Action(Discard) };Rule { Matches { Domain("|sumup.com|") }, Action(Discard) };Rule { Matches { Domain("|unr.edu|") }, Action(Discard) };Rule { Matches { Domain("|main.jp|") }, Action(Discard) };Rule { Matches { Domain("|trimble.com|") }, Action(Discard) };Rule { Matches { Domain("|51miz.com|") }, Action(Discard) };Rule { Matches { Domain("|parspack.com|") }, Action(Discard) };Rule { Matches { Domain("|cathaypacific.com|") }, Action(Discard) };Rule { Matches { Domain("|lfstrm.tv|") }, Action(Discard) };Rule { Matches { Domain("|jetblue.com|") }, Action(Discard) };Rule { Matches { Domain("|neimanmarcus.com|") }, Action(Discard) };Rule { Matches { Domain("|cninfo.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|upstream.to|") }, Action(Discard) };Rule { Matches { Domain("|torontosun.com|") }, Action(Discard) };Rule { Matches { Domain("|prismic.io|") }, Action(Discard) };Rule { Matches { Domain("|amazonsilk.com|") }, Action(Discard) };Rule { Matches { Domain("|tdnsdp1.cn|") }, Action(Discard) };Rule { Matches { Domain("|imtwjwoasak.com|") }, Action(Discard) };Rule { Matches { Domain("|mako.co.il|") }, Action(Discard) };Rule { Matches { Domain("|piojm.tech|") }, Action(Discard) };Rule { Matches { Domain("|themoscowtimes.com|") }, Action(Discard) };Rule { Matches { Domain("|jd.hk|") }, Action(Discard) };Rule { Matches { Domain("|airdroid.com|") }, Action(Discard) };Rule { Matches { Domain("|anypointdns.net|") }, Action(Discard) };Rule { Matches { Domain("|google.si|") }, Action(Discard) };Rule { Matches { Domain("|1mg.com|") }, Action(Discard) };Rule { Matches { Domain("|aniworld.to|") }, Action(Discard) };Rule { Matches { Domain("|castbox.fm|") }, Action(Discard) };Rule { Matches { Domain("|catholichealth.net|") }, Action(Discard) };Rule { Matches { Domain("|coremetrics.com|") }, Action(Discard) };Rule { Matches { Domain("|godpvqnszo.com|") }, Action(Discard) };Rule { Matches { Domain("|jwpcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|time.is|") }, Action(Discard) };Rule { Matches { Domain("|extremereach.io|") }, Action(Discard) };Rule { Matches { Domain("|whattoexpect.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-39.org|") }, Action(Discard) };Rule { Matches { Domain("|163jiasu.com|") }, Action(Discard) };Rule { Matches { Domain("|at.ua|") }, Action(Discard) };Rule { Matches { Domain("|kuwo.cn|") }, Action(Discard) };Rule { Matches { Domain("|dnsv3.com|") }, Action(Discard) };Rule { Matches { Domain("|wallst.com|") }, Action(Discard) };Rule { Matches { Domain("|pelisflix2.org|") }, Action(Discard) };Rule { Matches { Domain("|srf.ch|") }, Action(Discard) };Rule { Matches { Domain("|informa.com|") }, Action(Discard) };Rule { Matches { Domain("|buffalonews.com|") }, Action(Discard) };Rule { Matches { Domain("|artsy.net|") }, Action(Discard) };Rule { Matches { Domain("|redcdn.pl|") }, Action(Discard) };Rule { Matches { Domain("|svr-algorix.com|") }, Action(Discard) };Rule { Matches { Domain("|audiomack.com|") }, Action(Discard) };Rule { Matches { Domain("|opbank.lt|") }, Action(Discard) };Rule { Matches { Domain("|sc.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|gsk.com|") }, Action(Discard) };Rule { Matches { Domain("|episerver.net|") }, Action(Discard) };Rule { Matches { Domain("|mtu.edu|") }, Action(Discard) };Rule { Matches { Domain("|infoplease.com|") }, Action(Discard) };Rule { Matches { Domain("|cmoa.jp|") }, Action(Discard) };Rule { Matches { Domain("|searchenginewatch.com|") }, Action(Discard) };Rule { Matches { Domain("|bimiacg4.net|") }, Action(Discard) };Rule { Matches { Domain("|yingjiesheng.com|") }, Action(Discard) };Rule { Matches { Domain("|snowflake.com|") }, Action(Discard) };Rule { Matches { Domain("|deliveryhero.io|") }, Action(Discard) };Rule { Matches { Domain("|mandrillapp.com|") }, Action(Discard) };Rule { Matches { Domain("|finra.org|") }, Action(Discard) };Rule { Matches { Domain("|electrek.co|") }, Action(Discard) };Rule { Matches { Domain("|index-education.net|") }, Action(Discard) };Rule { Matches { Domain("|filehippo.com|") }, Action(Discard) };Rule { Matches { Domain("|iucn.org|") }, Action(Discard) };Rule { Matches { Domain("|theblaze.com|") }, Action(Discard) };Rule { Matches { Domain("|pro-market.net|") }, Action(Discard) };Rule { Matches { Domain("|smu.edu|") }, Action(Discard) };Rule { Matches { Domain("|diplo.de|") }, Action(Discard) };Rule { Matches { Domain("|love4porn.com|") }, Action(Discard) };Rule { Matches { Domain("|che168.com|") }, Action(Discard) };Rule { Matches { Domain("|sgsnssdk.com|") }, Action(Discard) };Rule { Matches { Domain("|getintopc.com|") }, Action(Discard) };Rule { Matches { Domain("|newegg.ca|") }, Action(Discard) };Rule { Matches { Domain("|plannedparenthood.org|") }, Action(Discard) };Rule { Matches { Domain("|brainly.in|") }, Action(Discard) };Rule { Matches { Domain("|ispconfig.org|") }, Action(Discard) };Rule { Matches { Domain("|rtings.com|") }, Action(Discard) };Rule { Matches { Domain("|is.fi|") }, Action(Discard) };Rule { Matches { Domain("|megaphone.fm|") }, Action(Discard) };Rule { Matches { Domain("|wroc.pl|") }, Action(Discard) };Rule { Matches { Domain("|nn.ci|") }, Action(Discard) };Rule { Matches { Domain("|nine.com.au|") }, Action(Discard) };Rule { Matches { Domain("|imagefap.com|") }, Action(Discard) };Rule { Matches { Domain("|sms-activate.org|") }, Action(Discard) };Rule { Matches { Domain("|tu-berlin.de|") }, Action(Discard) };Rule { Matches { Domain("|xb84.cc|") }, Action(Discard) };Rule { Matches { Domain("|blibli.com|") }, Action(Discard) };Rule { Matches { Domain("|ms.gov|") }, Action(Discard) };Rule { Matches { Domain("|dns.ne.jp|") }, Action(Discard) };Rule { Matches { Domain("|mypikpak.com|") }, Action(Discard) };Rule { Matches { Domain("|googlemail.com|") }, Action(Discard) };Rule { Matches { Domain("|player.fm|") }, Action(Discard) };Rule { Matches { Domain("|oxforddictionaries.com|") }, Action(Discard) };Rule { Matches { Domain("|nationwide.com|") }, Action(Discard) };Rule { Matches { Domain("|rev.com|") }, Action(Discard) };Rule { Matches { Domain("|sf.net|") }, Action(Discard) };Rule { Matches { Domain("|elsevierhealth.com|") }, Action(Discard) };Rule { Matches { Domain("|medu.ir|") }, Action(Discard) };Rule { Matches { Domain("|goindigo.in|") }, Action(Discard) };Rule { Matches { Domain("|po-kaki-to.com|") }, Action(Discard) };Rule { Matches { Domain("|asp.net|") }, Action(Discard) };Rule { Matches { Domain("|csun.edu|") }, Action(Discard) };Rule { Matches { Domain("|thehindubusinessline.com|") }, Action(Discard) };Rule { Matches { Domain("|carwale.com|") }, Action(Discard) };Rule { Matches { Domain("|bsgslb.com|") }, Action(Discard) };Rule { Matches { Domain("|americanas.com.br|") }, Action(Discard) };Rule { Matches { Domain("|iiko.it|") }, Action(Discard) };Rule { Matches { Domain("|freefiremobile.com|") }, Action(Discard) };Rule { Matches { Domain("|timesunion.com|") }, Action(Discard) };Rule { Matches { Domain("|pole-emploi.fr|") }, Action(Discard) };Rule { Matches { Domain("|strln.net|") }, Action(Discard) };Rule { Matches { Domain("|helium10.com|") }, Action(Discard) };Rule { Matches { Domain("|wideopenwest.com|") }, Action(Discard) };Rule { Matches { Domain("|telekom.de|") }, Action(Discard) };Rule { Matches { Domain("|doximity-staging.services|") }, Action(Discard) };Rule { Matches { Domain("|best4fuck.com|") }, Action(Discard) };Rule { Matches { Domain("|phncdn.com|") }, Action(Discard) };Rule { Matches { Domain("|sears.com|") }, Action(Discard) };Rule { Matches { Domain("|uv.es|") }, Action(Discard) };Rule { Matches { Domain("|prf.hn|") }, Action(Discard) };Rule { Matches { Domain("|cato.org|") }, Action(Discard) };Rule { Matches { Domain("|baylor.edu|") }, Action(Discard) };Rule { Matches { Domain("|wm.edu|") }, Action(Discard) };Rule { Matches { Domain("|elperiodico.com|") }, Action(Discard) };Rule { Matches { Domain("|brazzers.com|") }, Action(Discard) };Rule { Matches { Domain("|netdna-cdn.com|") }, Action(Discard) };Rule { Matches { Domain("|ku2d3a7pa8mdi.com|") }, Action(Discard) };Rule { Matches { Domain("|nwsource.com|") }, Action(Discard) };Rule { Matches { Domain("|neonova.net|") }, Action(Discard) };Rule { Matches { Domain("|desmoinesregister.com|") }, Action(Discard) };Rule { Matches { Domain("|jumia.com.ng|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-10.org|") }, Action(Discard) };Rule { Matches { Domain("|banki.ru|") }, Action(Discard) };Rule { Matches { Domain("|waveapps.com|") }, Action(Discard) };Rule { Matches { Domain("|luogu.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|mercadopago.com.ar|") }, Action(Discard) };Rule { Matches { Domain("|zhiye.com|") }, Action(Discard) };Rule { Matches { Domain("|opencart.com|") }, Action(Discard) };Rule { Matches { Domain("|lifeomic.com|") }, Action(Discard) };Rule { Matches { Domain("|hackerrank.com|") }, Action(Discard) };Rule { Matches { Domain("|sf-converter.com|") }, Action(Discard) };Rule { Matches { Domain("|ns0.com|") }, Action(Discard) };Rule { Matches { Domain("|videosection.com|") }, Action(Discard) };Rule { Matches { Domain("|ccdi.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|gigaom.com|") }, Action(Discard) };Rule { Matches { Domain("|sixt.com|") }, Action(Discard) };Rule { Matches { Domain("|sucuridns.com|") }, Action(Discard) };Rule { Matches { Domain("|csis.org|") }, Action(Discard) };Rule { Matches { Domain("|auckland.ac.nz|") }, Action(Discard) };Rule { Matches { Domain("|follow.it|") }, Action(Discard) };Rule { Matches { Domain("|hihonor.com|") }, Action(Discard) };Rule { Matches { Domain("|as.me|") }, Action(Discard) };Rule { Matches { Domain("|unbounce.com|") }, Action(Discard) };Rule { Matches { Domain("|newindianexpress.com|") }, Action(Discard) };Rule { Matches { Domain("|pastemagazine.com|") }, Action(Discard) };Rule { Matches { Domain("|fujian.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|vmwservices.com|") }, Action(Discard) };Rule { Matches { Domain("|yuxiweibang.com|") }, Action(Discard) };Rule { Matches { Domain("|dealer.com|") }, Action(Discard) };Rule { Matches { Domain("|pewtrusts.org|") }, Action(Discard) };Rule { Matches { Domain("|eleme.cn|") }, Action(Discard) };Rule { Matches { Domain("|bspb.ru|") }, Action(Discard) };Rule { Matches { Domain("|resetdigital.co|") }, Action(Discard) };Rule { Matches { Domain("|rdsnet.ro|") }, Action(Discard) };Rule { Matches { Domain("|boots.com|") }, Action(Discard) };Rule { Matches { Domain("|wisconsin.gov|") }, Action(Discard) };Rule { Matches { Domain("|news-cdn.site|") }, Action(Discard) };Rule { Matches { Domain("|saksfifthavenue.com|") }, Action(Discard) };Rule { Matches { Domain("|uib.no|") }, Action(Discard) };Rule { Matches { Domain("|3d66.com|") }, Action(Discard) };Rule { Matches { Domain("|sehuatang.org|") }, Action(Discard) };Rule { Matches { Domain("|umbc.edu|") }, Action(Discard) };Rule { Matches { Domain("|superdnsserver.net|") }, Action(Discard) };Rule { Matches { Domain("|leiniao.com|") }, Action(Discard) };Rule { Matches { Domain("|lacounty.gov|") }, Action(Discard) };Rule { Matches { Domain("|sothebys.com|") }, Action(Discard) };Rule { Matches { Domain("|anthropologie.com|") }, Action(Discard) };Rule { Matches { Domain("|teamwork.com|") }, Action(Discard) };Rule { Matches { Domain("|netvibes.com|") }, Action(Discard) };Rule { Matches { Domain("|tritondigital.com|") }, Action(Discard) };Rule { Matches { Domain("|piano.io|") }, Action(Discard) };Rule { Matches { Domain("|nic.ir|") }, Action(Discard) };Rule { Matches { Domain("|dispatch.com|") }, Action(Discard) };Rule { Matches { Domain("|nextmillmedia.com|") }, Action(Discard) };Rule { Matches { Domain("|mtb.com|") }, Action(Discard) };Rule { Matches { Domain("|iterable.com|") }, Action(Discard) };Rule { Matches { Domain("|ato.gov.au|") }, Action(Discard) };Rule { Matches { Domain("|later.com|") }, Action(Discard) };Rule { Matches { Domain("|qtlglb.info|") }, Action(Discard) };Rule { Matches { Domain("|amplifyapp.com|") }, Action(Discard) };Rule { Matches { Domain("|imagevenue.com|") }, Action(Discard) };Rule { Matches { Domain("|eaglecdn.com|") }, Action(Discard) };Rule { Matches { Domain("|qantas.com|") }, Action(Discard) };Rule { Matches { Domain("|thumbtack.com|") }, Action(Discard) };Rule { Matches { Domain("|gogoanime.tel|") }, Action(Discard) };Rule { Matches { Domain("|c-sharpcorner.com|") }, Action(Discard) };Rule { Matches { Domain("|timesnownews.com|") }, Action(Discard) };Rule { Matches { Domain("|imperva.com|") }, Action(Discard) };Rule { Matches { Domain("|rtbf.be|") }, Action(Discard) };Rule { Matches { Domain("|csoonline.com|") }, Action(Discard) };Rule { Matches { Domain("|hu-berlin.de|") }, Action(Discard) };Rule { Matches { Domain("|messefrankfurt.com|") }, Action(Discard) };Rule { Matches { Domain("|familyhandyman.com|") }, Action(Discard) };Rule { Matches { Domain("|pvvstream.pro|") }, Action(Discard) };Rule { Matches { Domain("|giantpanda.com|") }, Action(Discard) };Rule { Matches { Domain("|ncsoft.com|") }, Action(Discard) };Rule { Matches { Domain("|ngui.cc|") }, Action(Discard) };Rule { Matches { Domain("|dns.id|") }, Action(Discard) };Rule { Matches { Domain("|thomann.de|") }, Action(Discard) };Rule { Matches { Domain("|wsj.net|") }, Action(Discard) };Rule { Matches { Domain("|lanzoul.com|") }, Action(Discard) };Rule { Matches { Domain("|ri.gov|") }, Action(Discard) };Rule { Matches { Domain("|dur.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|ebay.it|") }, Action(Discard) };Rule { Matches { Domain("|cruisecritic.net|") }, Action(Discard) };Rule { Matches { Domain("|ufmg.br|") }, Action(Discard) };Rule { Matches { Domain("|uark.edu|") }, Action(Discard) };Rule { Matches { Domain("|eqads.com|") }, Action(Discard) };Rule { Matches { Domain("|jpn.org|") }, Action(Discard) };Rule { Matches { Domain("|marktplaats.nl|") }, Action(Discard) };Rule { Matches { Domain("|wsoversea.com|") }, Action(Discard) };Rule { Matches { Domain("|paypalcorp.com|") }, Action(Discard) };Rule { Matches { Domain("|eonet.ne.jp|") }, Action(Discard) };Rule { Matches { Domain("|jugem.jp|") }, Action(Discard) };Rule { Matches { Domain("|manageengine.com|") }, Action(Discard) };Rule { Matches { Domain("|schneider-electric.com|") }, Action(Discard) };Rule { Matches { Domain("|infineon.com|") }, Action(Discard) };Rule { Matches { Domain("|motor-talk.de|") }, Action(Discard) };Rule { Matches { Domain("|gamerch.com|") }, Action(Discard) };Rule { Matches { Domain("|nitroflare.com|") }, Action(Discard) };Rule { Matches { Domain("|netorn.ru|") }, Action(Discard) };Rule { Matches { Domain("|commondreams.org|") }, Action(Discard) };Rule { Matches { Domain("|thumbzilla.com|") }, Action(Discard) };Rule { Matches { Domain("|pinterest.co.kr|") }, Action(Discard) };Rule { Matches { Domain("|ramseysolutions.com|") }, Action(Discard) };Rule { Matches { Domain("|dnaindia.com|") }, Action(Discard) };Rule { Matches { Domain("|visme.co|") }, Action(Discard) };Rule { Matches { Domain("|ada.org|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-00.org|") }, Action(Discard) };Rule { Matches { Domain("|hostwindsdns.com|") }, Action(Discard) };Rule { Matches { Domain("|ktla.com|") }, Action(Discard) };Rule { Matches { Domain("|a2dns.com|") }, Action(Discard) };Rule { Matches { Domain("|zzzmh.cn|") }, Action(Discard) };Rule { Matches { Domain("|flexjobs.com|") }, Action(Discard) };Rule { Matches { Domain("|azbukavkusa.ru|") }, Action(Discard) };Rule { Matches { Domain("|ana.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|ekatox.com|") }, Action(Discard) };Rule { Matches { Domain("|xaas.systems|") }, Action(Discard) };Rule { Matches { Domain("|bambuser.com|") }, Action(Discard) };Rule { Matches { Domain("|nouvelobs.com|") }, Action(Discard) };Rule { Matches { Domain("|bbcollab.com|") }, Action(Discard) };Rule { Matches { Domain("|limetorrents.lol|") }, Action(Discard) };Rule { Matches { Domain("|zhimg.com|") }, Action(Discard) };Rule { Matches { Domain("|sfr.fr|") }, Action(Discard) };Rule { Matches { Domain("|edf.fr|") }, Action(Discard) };Rule { Matches { Domain("|cbsi.com|") }, Action(Discard) };Rule { Matches { Domain("|secondlife.com|") }, Action(Discard) };Rule { Matches { Domain("|twinrdsyn.com|") }, Action(Discard) };Rule { Matches { Domain("|1x-bet.in|") }, Action(Discard) };Rule { Matches { Domain("|heraldsun.com.au|") }, Action(Discard) };Rule { Matches { Domain("|bundesregierung.de|") }, Action(Discard) };Rule { Matches { Domain("|pdx.edu|") }, Action(Discard) };Rule { Matches { Domain("|jwpltx.com|") }, Action(Discard) };Rule { Matches { Domain("|thepointsguy.com|") }, Action(Discard) };Rule { Matches { Domain("|wonderhowto.com|") }, Action(Discard) };Rule { Matches { Domain("|tripsavvy.com|") }, Action(Discard) };Rule { Matches { Domain("|sexbjcam.com|") }, Action(Discard) };Rule { Matches { Domain("|techopedia.com|") }, Action(Discard) };Rule { Matches { Domain("|shobserver.com|") }, Action(Discard) };Rule { Matches { Domain("|unige.ch|") }, Action(Discard) };Rule { Matches { Domain("|gatesfoundation.org|") }, Action(Discard) };Rule { Matches { Domain("|zjzwfw.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|animedao.to|") }, Action(Discard) };Rule { Matches { Domain("|dns-servers.vn|") }, Action(Discard) };Rule { Matches { Domain("|bstatic.com|") }, Action(Discard) };Rule { Matches { Domain("|fandango.com|") }, Action(Discard) };Rule { Matches { Domain("|htcsense.com|") }, Action(Discard) };Rule { Matches { Domain("|mrse.com.ar|") }, Action(Discard) };Rule { Matches { Domain("|statesman.com|") }, Action(Discard) };Rule { Matches { Domain("|charlotteobserver.com|") }, Action(Discard) };Rule { Matches { Domain("|iconfinder.com|") }, Action(Discard) };Rule { Matches { Domain("|wandou.pro|") }, Action(Discard) };Rule { Matches { Domain("|transunion.com|") }, Action(Discard) };Rule { Matches { Domain("|liberty.edu|") }, Action(Discard) };Rule { Matches { Domain("|pagesperso-orange.fr|") }, Action(Discard) };Rule { Matches { Domain("|ornl.gov|") }, Action(Discard) };Rule { Matches { Domain("|sundaysky.com|") }, Action(Discard) };Rule { Matches { Domain("|kingsgroupgames.com|") }, Action(Discard) };Rule { Matches { Domain("|nga.gov|") }, Action(Discard) };Rule { Matches { Domain("|imolive2.com|") }, Action(Discard) };Rule { Matches { Domain("|pampers.com|") }, Action(Discard) };Rule { Matches { Domain("|wsglb0.info|") }, Action(Discard) };Rule { Matches { Domain("|townnews.com|") }, Action(Discard) };Rule { Matches { Domain("|sony.net|") }, Action(Discard) };Rule { Matches { Domain("|saby.ru|") }, Action(Discard) };Rule { Matches { Domain("|wordwall.net|") }, Action(Discard) };Rule { Matches { Domain("|heavy-r.com|") }, Action(Discard) };Rule { Matches { Domain("|sitejabber.com|") }, Action(Discard) };Rule { Matches { Domain("|cyberlink.com|") }, Action(Discard) };Rule { Matches { Domain("|sharepointonline.com|") }, Action(Discard) };Rule { Matches { Domain("|vietnamnet.vn|") }, Action(Discard) };Rule { Matches { Domain("|malavida.com|") }, Action(Discard) };Rule { Matches { Domain("|samsungpositioning.com|") }, Action(Discard) };Rule { Matches { Domain("|uschamber.com|") }, Action(Discard) };Rule { Matches { Domain("|lookmovie2.to|") }, Action(Discard) };Rule { Matches { Domain("|slideserve.com|") }, Action(Discard) };Rule { Matches { Domain("|hdporncomics.com|") }, Action(Discard) };Rule { Matches { Domain("|golang.org|") }, Action(Discard) };Rule { Matches { Domain("|sunat.gob.pe|") }, Action(Discard) };Rule { Matches { Domain("|queniubg.com|") }, Action(Discard) };Rule { Matches { Domain("|androidcentral.com|") }, Action(Discard) };Rule { Matches { Domain("|wral.com|") }, Action(Discard) };Rule { Matches { Domain("|trafcfy.com|") }, Action(Discard) };Rule { Matches { Domain("|google.co.ma|") }, Action(Discard) };Rule { Matches { Domain("|sytes.net|") }, Action(Discard) };Rule { Matches { Domain("|shopifycdn.com|") }, Action(Discard) };Rule { Matches { Domain("|pushnami.com|") }, Action(Discard) };Rule { Matches { Domain("|happyreturns.com|") }, Action(Discard) };Rule { Matches { Domain("|commonsensemedia.org|") }, Action(Discard) };Rule { Matches { Domain("|roll20.net|") }, Action(Discard) };Rule { Matches { Domain("|design006.com|") }, Action(Discard) };Rule { Matches { Domain("|bayer.com|") }, Action(Discard) };Rule { Matches { Domain("|rai.it|") }, Action(Discard) };Rule { Matches { Domain("|maine.edu|") }, Action(Discard) };Rule { Matches { Domain("|mydnspt.net|") }, Action(Discard) };Rule { Matches { Domain("|slack-imgs.com|") }, Action(Discard) };Rule { Matches { Domain("|zimuku.org|") }, Action(Discard) };Rule { Matches { Domain("|cyberleninka.ru|") }, Action(Discard) };Rule { Matches { Domain("|vrt.be|") }, Action(Discard) };Rule { Matches { Domain("|witanime.com|") }, Action(Discard) };Rule { Matches { Domain("|hentaihaven.xxx|") }, Action(Discard) };Rule { Matches { Domain("|hostpapa.com|") }, Action(Discard) };Rule { Matches { Domain("|sonicwall.com|") }, Action(Discard) };Rule { Matches { Domain("|mysterium.network|") }, Action(Discard) };Rule { Matches { Domain("|spacex.com|") }, Action(Discard) };Rule { Matches { Domain("|xsrv.jp|") }, Action(Discard) };Rule { Matches { Domain("|aspca.org|") }, Action(Discard) };Rule { Matches { Domain("|qafqazinfo.az|") }, Action(Discard) };Rule { Matches { Domain("|nationaltrust.org.uk|") }, Action(Discard) };Rule { Matches { Domain("|planningcenteronline.com|") }, Action(Discard) };Rule { Matches { Domain("|mediafactory.net|") }, Action(Discard) };Rule { Matches { Domain("|myhuaweicloud.com|") }, Action(Discard) };Rule { Matches { Domain("|22.cn|") }, Action(Discard) };Rule { Matches { Domain("|aimtell.com|") }, Action(Discard) };Rule { Matches { Domain("|sgvps.net|") }, Action(Discard) };Rule { Matches { Domain("|kwai.net|") }, Action(Discard) };Rule { Matches { Domain("|top.gg|") }, Action(Discard) };Rule { Matches { Domain("|meb.gov.tr|") }, Action(Discard) };Rule { Matches { Domain("|milb.com|") }, Action(Discard) };Rule { Matches { Domain("|tradeinn.com|") }, Action(Discard) };Rule { Matches { Domain("|az.gov|") }, Action(Discard) };Rule { Matches { Domain("|usask.ca|") }, Action(Discard) };Rule { Matches { Domain("|vudu.com|") }, Action(Discard) };Rule { Matches { Domain("|nextcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|vermont.gov|") }, Action(Discard) };Rule { Matches { Domain("|usm.edu|") }, Action(Discard) };Rule { Matches { Domain("|firstbyte.club|") }, Action(Discard) };Rule { Matches { Domain("|barracudanetworks.com|") }, Action(Discard) };Rule { Matches { Domain("|parivahan.gov.in|") }, Action(Discard) };Rule { Matches { Domain("|tinderops.net|") }, Action(Discard) };Rule { Matches { Domain("|wnacg.com|") }, Action(Discard) };Rule { Matches { Domain("|livenation.com|") }, Action(Discard) };Rule { Matches { Domain("|milenio.com|") }, Action(Discard) };Rule { Matches { Domain("|bloomingdales.com|") }, Action(Discard) };Rule { Matches { Domain("|k12.com|") }, Action(Discard) };Rule { Matches { Domain("|tailwindcss.com|") }, Action(Discard) };Rule { Matches { Domain("|uidapi.com|") }, Action(Discard) };Rule { Matches { Domain("|conicet.gov.ar|") }, Action(Discard) };Rule { Matches { Domain("|adpointbreakrtb.com|") }, Action(Discard) };Rule { Matches { Domain("|iphmx.com|") }, Action(Discard) };Rule { Matches { Domain("|midea.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|bestjavporn.com|") }, Action(Discard) };Rule { Matches { Domain("|cision.com|") }, Action(Discard) };Rule { Matches { Domain("|slashgear.com|") }, Action(Discard) };Rule { Matches { Domain("|crestwhitesmile.com|") }, Action(Discard) };Rule { Matches { Domain("|prntscr.com|") }, Action(Discard) };Rule { Matches { Domain("|goodporn.to|") }, Action(Discard) };Rule { Matches { Domain("|education.com|") }, Action(Discard) };Rule { Matches { Domain("|nar.realtor|") }, Action(Discard) };Rule { Matches { Domain("|eventbrite.ca|") }, Action(Discard) };Rule { Matches { Domain("|phoenixnap.com|") }, Action(Discard) };Rule { Matches { Domain("|sjsu.edu|") }, Action(Discard) };Rule { Matches { Domain("|opm.gov|") }, Action(Discard) };Rule { Matches { Domain("|mailclub.com|") }, Action(Discard) };Rule { Matches { Domain("|keenetic.pro|") }, Action(Discard) };Rule { Matches { Domain("|cincinnati.com|") }, Action(Discard) };Rule { Matches { Domain("|xoom.com|") }, Action(Discard) };Rule { Matches { Domain("|williams-sonoma.com|") }, Action(Discard) };Rule { Matches { Domain("|unity3dusercontent.com|") }, Action(Discard) };Rule { Matches { Domain("|www.gob.mx|") }, Action(Discard) };Rule { Matches { Domain("|siol.net|") }, Action(Discard) };Rule { Matches { Domain("|nso.ru|") }, Action(Discard) };Rule { Matches { Domain("|dbs.com.sg|") }, Action(Discard) };Rule { Matches { Domain("|mymodernmet.com|") }, Action(Discard) };Rule { Matches { Domain("|gameanalytics.com|") }, Action(Discard) };Rule { Matches { Domain("|hostland.ru|") }, Action(Discard) };Rule { Matches { Domain("|lent.az|") }, Action(Discard) };Rule { Matches { Domain("|ndm9.net|") }, Action(Discard) };Rule { Matches { Domain("|renaissance-go.com|") }, Action(Discard) };Rule { Matches { Domain("|rockpapershotgun.com|") }, Action(Discard) };Rule { Matches { Domain("|realtor.ca|") }, Action(Discard) };Rule { Matches { Domain("|afp.ai|") }, Action(Discard) };Rule { Matches { Domain("|cdnwidget.com|") }, Action(Discard) };Rule { Matches { Domain("|hashicorp.com|") }, Action(Discard) };Rule { Matches { Domain("|google.com.ng|") }, Action(Discard) };Rule { Matches { Domain("|ck-ie.com|") }, Action(Discard) };Rule { Matches { Domain("|datingranking.net|") }, Action(Discard) };Rule { Matches { Domain("|csic.es|") }, Action(Discard) };Rule { Matches { Domain("|nudostar.com|") }, Action(Discard) };Rule { Matches { Domain("|mangalib.me|") }, Action(Discard) };Rule { Matches { Domain("|comixology.com|") }, Action(Discard) };Rule { Matches { Domain("|jenkins.io|") }, Action(Discard) };Rule { Matches { Domain("|analvids.com|") }, Action(Discard) };Rule { Matches { Domain("|telerik.com|") }, Action(Discard) };Rule { Matches { Domain("|hrsa.gov|") }, Action(Discard) };Rule { Matches { Domain("|internshala.com|") }, Action(Discard) };Rule { Matches { Domain("|bankofengland.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|motorsport.com|") }, Action(Discard) };Rule { Matches { Domain("|huobi.com|") }, Action(Discard) };Rule { Matches { Domain("|bundestag.de|") }, Action(Discard) };Rule { Matches { Domain("|zohocdn.com|") }, Action(Discard) };Rule { Matches { Domain("|tink.network|") }, Action(Discard) };Rule { Matches { Domain("|lexpress.fr|") }, Action(Discard) };Rule { Matches { Domain("|fetlife.com|") }, Action(Discard) };Rule { Matches { Domain("|toyokeizai.net|") }, Action(Discard) };Rule { Matches { Domain("|iqzone.com|") }, Action(Discard) };Rule { Matches { Domain("|corppn.ru|") }, Action(Discard) };Rule { Matches { Domain("|property24.com|") }, Action(Discard) };Rule { Matches { Domain("|marketplace.org|") }, Action(Discard) };Rule { Matches { Domain("|mailclub.fr|") }, Action(Discard) };Rule { Matches { Domain("|itsfogo.com|") }, Action(Discard) };Rule { Matches { Domain("|gradescope.com|") }, Action(Discard) };Rule { Matches { Domain("|mediaite.com|") }, Action(Discard) };Rule { Matches { Domain("|rarbgmirror.org|") }, Action(Discard) };Rule { Matches { Domain("|most.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|ecobee.com|") }, Action(Discard) };Rule { Matches { Domain("|mynewsdesk.com|") }, Action(Discard) };Rule { Matches { Domain("|k-msedge.net|") }, Action(Discard) };Rule { Matches { Domain("|vzmessages.com|") }, Action(Discard) };Rule { Matches { Domain("|data.gov|") }, Action(Discard) };Rule { Matches { Domain("|hadronid.net|") }, Action(Discard) };Rule { Matches { Domain("|thesimsresource.com|") }, Action(Discard) };Rule { Matches { Domain("|canada.com|") }, Action(Discard) };Rule { Matches { Domain("|umanitoba.ca|") }, Action(Discard) };Rule { Matches { Domain("|9news.com.au|") }, Action(Discard) };Rule { Matches { Domain("|meitu.com|") }, Action(Discard) };Rule { Matches { Domain("|amnh.org|") }, Action(Discard) };Rule { Matches { Domain("|nielsencollections.com|") }, Action(Discard) };Rule { Matches { Domain("|kxting.com|") }, Action(Discard) };Rule { Matches { Domain("|jiandaoyun.com|") }, Action(Discard) };Rule { Matches { Domain("|skybet.com|") }, Action(Discard) };Rule { Matches { Domain("|bhaskar.com|") }, Action(Discard) };Rule { Matches { Domain("|mangareader.to|") }, Action(Discard) };Rule { Matches { Domain("|hsbc.com.hk|") }, Action(Discard) };Rule { Matches { Domain("|o2.pl|") }, Action(Discard) };Rule { Matches { Domain("|jbzd.com.pl|") }, Action(Discard) };Rule { Matches { Domain("|carleton.ca|") }, Action(Discard) };Rule { Matches { Domain("|iplaysoft.com|") }, Action(Discard) };Rule { Matches { Domain("|cognitoforms.com|") }, Action(Discard) };Rule { Matches { Domain("|mui.com|") }, Action(Discard) };Rule { Matches { Domain("|blogspot.jp|") }, Action(Discard) };Rule { Matches { Domain("|videocelebs.net|") }, Action(Discard) };Rule { Matches { Domain("|asianet.co.th|") }, Action(Discard) };Rule { Matches { Domain("|dc-msedge.net|") }, Action(Discard) };Rule { Matches { Domain("|interestingengineering.com|") }, Action(Discard) };Rule { Matches { Domain("|influencermarketinghub.com|") }, Action(Discard) };Rule { Matches { Domain("|guard.io|") }, Action(Discard) };Rule { Matches { Domain("|kiva.org|") }, Action(Discard) };Rule { Matches { Domain("|ekstrabladet.dk|") }, Action(Discard) };Rule { Matches { Domain("|meltwater.com|") }, Action(Discard) };Rule { Matches { Domain("|transparency.org|") }, Action(Discard) };Rule { Matches { Domain("|s2517.com|") }, Action(Discard) };Rule { Matches { Domain("|freshbooks.com|") }, Action(Discard) };Rule { Matches { Domain("|townhall.com|") }, Action(Discard) };Rule { Matches { Domain("|adsbynimbus.com|") }, Action(Discard) };Rule { Matches { Domain("|creativefabrica.com|") }, Action(Discard) };Rule { Matches { Domain("|perimeterx.net|") }, Action(Discard) };Rule { Matches { Domain("|rakuten.ne.jp|") }, Action(Discard) };Rule { Matches { Domain("|nska.net|") }, Action(Discard) };Rule { Matches { Domain("|simplesite.com|") }, Action(Discard) };Rule { Matches { Domain("|fishki.net|") }, Action(Discard) };Rule { Matches { Domain("|avature.net|") }, Action(Discard) };Rule { Matches { Domain("|aligntech.com|") }, Action(Discard) };Rule { Matches { Domain("|ray.com|") }, Action(Discard) };Rule { Matches { Domain("|cloudflare-dns.com|") }, Action(Discard) };Rule { Matches { Domain("|puzztake.com|") }, Action(Discard) };Rule { Matches { Domain("|ivitrack.com|") }, Action(Discard) };Rule { Matches { Domain("|huji.ac.il|") }, Action(Discard) };Rule { Matches { Domain("|json.cn|") }, Action(Discard) };Rule { Matches { Domain("|ginpithed.live|") }, Action(Discard) };Rule { Matches { Domain("|coocan.jp|") }, Action(Discard) };Rule { Matches { Domain("|ensonhaber.com|") }, Action(Discard) };Rule { Matches { Domain("|placed.com|") }, Action(Discard) };Rule { Matches { Domain("|nokta.com|") }, Action(Discard) };Rule { Matches { Domain("|trouble-free.net|") }, Action(Discard) };Rule { Matches { Domain("|dyndns.tv|") }, Action(Discard) };Rule { Matches { Domain("|nespresso.com|") }, Action(Discard) };Rule { Matches { Domain("|europapress.es|") }, Action(Discard) };Rule { Matches { Domain("|ultimatix.net|") }, Action(Discard) };Rule { Matches { Domain("|yourtango.com|") }, Action(Discard) };Rule { Matches { Domain("|plosone.org|") }, Action(Discard) };Rule { Matches { Domain("|tagged.com|") }, Action(Discard) };Rule { Matches { Domain("|zimbra.com|") }, Action(Discard) };Rule { Matches { Domain("|kundelik.kz|") }, Action(Discard) };Rule { Matches { Domain("|wur.nl|") }, Action(Discard) };Rule { Matches { Domain("|ibps.in|") }, Action(Discard) };Rule { Matches { Domain("|theodysseyonline.com|") }, Action(Discard) };Rule { Matches { Domain("|voot.com|") }, Action(Discard) };Rule { Matches { Domain("|trilltrill.jp|") }, Action(Discard) };Rule { Matches { Domain("|dapenti.com|") }, Action(Discard) };Rule { Matches { Domain("|minitool.com|") }, Action(Discard) };Rule { Matches { Domain("|courant.com|") }, Action(Discard) };Rule { Matches { Domain("|world4you.at|") }, Action(Discard) };Rule { Matches { Domain("|utm.edu|") }, Action(Discard) };Rule { Matches { Domain("|jalan.net|") }, Action(Discard) };Rule { Matches { Domain("|bunshun.jp|") }, Action(Discard) };Rule { Matches { Domain("|italent.cn|") }, Action(Discard) };Rule { Matches { Domain("|arm.com|") }, Action(Discard) };Rule { Matches { Domain("|capcut.com|") }, Action(Discard) };Rule { Matches { Domain("|magisto.com|") }, Action(Discard) };Rule { Matches { Domain("|allocine.fr|") }, Action(Discard) };Rule { Matches { Domain("|ezdnscenter.com|") }, Action(Discard) };Rule { Matches { Domain("|alternet.org|") }, Action(Discard) };Rule { Matches { Domain("|basf.com|") }, Action(Discard) };Rule { Matches { Domain("|shopeemobile.com|") }, Action(Discard) };Rule { Matches { Domain("|nsc.ru|") }, Action(Discard) };Rule { Matches { Domain("|cognizant.com|") }, Action(Discard) };Rule { Matches { Domain("|mercadolivre.com|") }, Action(Discard) };Rule { Matches { Domain("|wasabisys.com|") }, Action(Discard) };Rule { Matches { Domain("|supercp.com|") }, Action(Discard) };Rule { Matches { Domain("|gitlab.io|") }, Action(Discard) };Rule { Matches { Domain("|whitepages.com|") }, Action(Discard) };Rule { Matches { Domain("|livedoor.blog|") }, Action(Discard) };Rule { Matches { Domain("|pointmediatracker.com|") }, Action(Discard) };Rule { Matches { Domain("|amebaownd.com|") }, Action(Discard) };Rule { Matches { Domain("|nd.gov|") }, Action(Discard) };Rule { Matches { Domain("|mubi.com|") }, Action(Discard) };Rule { Matches { Domain("|consumeraffairs.com|") }, Action(Discard) };Rule { Matches { Domain("|snssdk.com|") }, Action(Discard) };Rule { Matches { Domain("|ugent.be|") }, Action(Discard) };Rule { Matches { Domain("|sendspace.com|") }, Action(Discard) };Rule { Matches { Domain("|weheartit.com|") }, Action(Discard) };Rule { Matches { Domain("|lapresse.ca|") }, Action(Discard) };Rule { Matches { Domain("|smilewanted.com|") }, Action(Discard) };Rule { Matches { Domain("|helpscout.net|") }, Action(Discard) };Rule { Matches { Domain("|techtudo.com.br|") }, Action(Discard) };Rule { Matches { Domain("|secureworks.com|") }, Action(Discard) };Rule { Matches { Domain("|bluevoyant.com|") }, Action(Discard) };Rule { Matches { Domain("|theync.com|") }, Action(Discard) };Rule { Matches { Domain("|unibe.ch|") }, Action(Discard) };Rule { Matches { Domain("|clevertap-prod.com|") }, Action(Discard) };Rule { Matches { Domain("|rentry.co|") }, Action(Discard) };Rule { Matches { Domain("|voskhod.ru|") }, Action(Discard) };Rule { Matches { Domain("|wappalyzer.com|") }, Action(Discard) };Rule { Matches { Domain("|wri.org|") }, Action(Discard) };Rule { Matches { Domain("|aleks.com|") }, Action(Discard) };Rule { Matches { Domain("|texastribune.org|") }, Action(Discard) };Rule { Matches { Domain("|smooch.io|") }, Action(Discard) };Rule { Matches { Domain("|nc.gov|") }, Action(Discard) };Rule { Matches { Domain("|prom.ua|") }, Action(Discard) };Rule { Matches { Domain("|xandr.com|") }, Action(Discard) };Rule { Matches { Domain("|netcraft.com|") }, Action(Discard) };Rule { Matches { Domain("|dawn-dish.com|") }, Action(Discard) };Rule { Matches { Domain("|servicenow.com|") }, Action(Discard) };Rule { Matches { Domain("|alphapolis.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|e-ns.org|") }, Action(Discard) };Rule { Matches { Domain("|forth.gr|") }, Action(Discard) };Rule { Matches { Domain("|joker.com|") }, Action(Discard) };Rule { Matches { Domain("|onyxna.net|") }, Action(Discard) };Rule { Matches { Domain("|tech-logol.ru|") }, Action(Discard) };Rule { Matches { Domain("|nintendo.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|relay.school|") }, Action(Discard) };Rule { Matches { Domain("|thoughtcatalog.com|") }, Action(Discard) };Rule { Matches { Domain("|1cfresh.com|") }, Action(Discard) };Rule { Matches { Domain("|chinanetcenter.com|") }, Action(Discard) };Rule { Matches { Domain("|bina.az|") }, Action(Discard) };Rule { Matches { Domain("|1r1g.com|") }, Action(Discard) };Rule { Matches { Domain("|up.gov.in|") }, Action(Discard) };Rule { Matches { Domain("|housebeautiful.com|") }, Action(Discard) };Rule { Matches { Domain("|southcn.com|") }, Action(Discard) };Rule { Matches { Domain("|clodo.ru|") }, Action(Discard) };Rule { Matches { Domain("|bootcss.com|") }, Action(Discard) };Rule { Matches { Domain("|sezzle.com|") }, Action(Discard) };Rule { Matches { Domain("|321naturelikefurfuroid.com|") }, Action(Discard) };Rule { Matches { Domain("|gitbooks.io|") }, Action(Discard) };Rule { Matches { Domain("|cookiebot.com|") }, Action(Discard) };Rule { Matches { Domain("|lmgtfy.com|") }, Action(Discard) };Rule { Matches { Domain("|1and1.com|") }, Action(Discard) };Rule { Matches { Domain("|dow.com|") }, Action(Discard) };Rule { Matches { Domain("|paho.org|") }, Action(Discard) };Rule { Matches { Domain("|google.com.do|") }, Action(Discard) };Rule { Matches { Domain("|securecafe.com|") }, Action(Discard) };Rule { Matches { Domain("|zbschools.sg|") }, Action(Discard) };Rule { Matches { Domain("|openculture.com|") }, Action(Discard) };Rule { Matches { Domain("|freeconnect.link|") }, Action(Discard) };Rule { Matches { Domain("|royalcaribbean.com|") }, Action(Discard) };Rule { Matches { Domain("|ubembed.com|") }, Action(Discard) };Rule { Matches { Domain("|keio.ac.jp|") }, Action(Discard) };Rule { Matches { Domain("|money.pl|") }, Action(Discard) };Rule { Matches { Domain("|manutd.com|") }, Action(Discard) };Rule { Matches { Domain("|dailyfx.com|") }, Action(Discard) };Rule { Matches { Domain("|gov.hu|") }, Action(Discard) };Rule { Matches { Domain("|narrativ.com|") }, Action(Discard) };Rule { Matches { Domain("|ludia.net|") }, Action(Discard) };Rule { Matches { Domain("|techlab-cdn.com|") }, Action(Discard) };Rule { Matches { Domain("|uw.edu.pl|") }, Action(Discard) };Rule { Matches { Domain("|tw1.ru|") }, Action(Discard) };Rule { Matches { Domain("|zodgame.xyz|") }, Action(Discard) };Rule { Matches { Domain("|digialm.com|") }, Action(Discard) };Rule { Matches { Domain("|blu-ray.com|") }, Action(Discard) };Rule { Matches { Domain("|nianticlabs.com|") }, Action(Discard) };Rule { Matches { Domain("|humblebundle.com|") }, Action(Discard) };Rule { Matches { Domain("|ccm.net|") }, Action(Discard) };Rule { Matches { Domain("|audubon.org|") }, Action(Discard) };Rule { Matches { Domain("|clinch.co|") }, Action(Discard) };Rule { Matches { Domain("|rs-online.com|") }, Action(Discard) };Rule { Matches { Domain("|embedly.com|") }, Action(Discard) };Rule { Matches { Domain("|printful.com|") }, Action(Discard) };Rule { Matches { Domain("|ralf-kuenzel.de|") }, Action(Discard) };Rule { Matches { Domain("|edwardjones.com|") }, Action(Discard) };Rule { Matches { Domain("|nic.site|") }, Action(Discard) };Rule { Matches { Domain("|elte.hu|") }, Action(Discard) };Rule { Matches { Domain("|linguee.com|") }, Action(Discard) };Rule { Matches { Domain("|networksolutions.com|") }, Action(Discard) };Rule { Matches { Domain("|nbd.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|micstatic.com|") }, Action(Discard) };Rule { Matches { Domain("|intechopen.com|") }, Action(Discard) };Rule { Matches { Domain("|inutomo11.com|") }, Action(Discard) };Rule { Matches { Domain("|westlaw.com|") }, Action(Discard) };Rule { Matches { Domain("|file-upload.com|") }, Action(Discard) };Rule { Matches { Domain("|squidoo.com|") }, Action(Discard) };Rule { Matches { Domain("|springernature.com|") }, Action(Discard) };Rule { Matches { Domain("|yahoo.com.tw|") }, Action(Discard) };Rule { Matches { Domain("|control4.com|") }, Action(Discard) };Rule { Matches { Domain("|sublimetext.com|") }, Action(Discard) };Rule { Matches { Domain("|cupddns.net|") }, Action(Discard) };Rule { Matches { Domain("|caesars.com|") }, Action(Discard) };Rule { Matches { Domain("|1001fonts.com|") }, Action(Discard) };Rule { Matches { Domain("|illuminatelocks.com|") }, Action(Discard) };Rule { Matches { Domain("|newduba.cn|") }, Action(Discard) };Rule { Matches { Domain("|google.com.kw|") }, Action(Discard) };Rule { Matches { Domain("|numbeo.com|") }, Action(Discard) };Rule { Matches { Domain("|alaska.edu|") }, Action(Discard) };Rule { Matches { Domain("|sciencenet.cn|") }, Action(Discard) };Rule { Matches { Domain("|digicertdns.com|") }, Action(Discard) };Rule { Matches { Domain("|playground.xyz|") }, Action(Discard) };Rule { Matches { Domain("|opsgenie.com|") }, Action(Discard) };Rule { Matches { Domain("|hoyolab.com|") }, Action(Discard) };Rule { Matches { Domain("|eljur.ru|") }, Action(Discard) };Rule { Matches { Domain("|appsinnova.com|") }, Action(Discard) };Rule { Matches { Domain("|greatist.com|") }, Action(Discard) };Rule { Matches { Domain("|relap.io|") }, Action(Discard) };Rule { Matches { Domain("|wayne.edu|") }, Action(Discard) };Rule { Matches { Domain("|edupage.org|") }, Action(Discard) };Rule { Matches { Domain("|hkvisa.net|") }, Action(Discard) };Rule { Matches { Domain("|btttag.com|") }, Action(Discard) };Rule { Matches { Domain("|songkick.com|") }, Action(Discard) };Rule { Matches { Domain("|hotelscombined.com|") }, Action(Discard) };Rule { Matches { Domain("|infosys.com|") }, Action(Discard) };Rule { Matches { Domain("|company.site|") }, Action(Discard) };Rule { Matches { Domain("|brassring.com|") }, Action(Discard) };Rule { Matches { Domain("|estadao.com.br|") }, Action(Discard) };Rule { Matches { Domain("|pennlive.com|") }, Action(Discard) };Rule { Matches { Domain("|youradchoices.ca|") }, Action(Discard) };Rule { Matches { Domain("|yoomoney.ru|") }, Action(Discard) };Rule { Matches { Domain("|phoca.cz|") }, Action(Discard) };Rule { Matches { Domain("|thinkprogress.org|") }, Action(Discard) };Rule { Matches { Domain("|guildwars2.com|") }, Action(Discard) };Rule { Matches { Domain("|zegocloud.com|") }, Action(Discard) };Rule { Matches { Domain("|anl.gov|") }, Action(Discard) };Rule { Matches { Domain("|okko.tv|") }, Action(Discard) };Rule { Matches { Domain("|snyk.io|") }, Action(Discard) };Rule { Matches { Domain("|textnow.com|") }, Action(Discard) };Rule { Matches { Domain("|gcu.edu|") }, Action(Discard) };Rule { Matches { Domain("|zety.com|") }, Action(Discard) };Rule { Matches { Domain("|altema.jp|") }, Action(Discard) };Rule { Matches { Domain("|dochub.com|") }, Action(Discard) };Rule { Matches { Domain("|queniuum.com|") }, Action(Discard) };Rule { Matches { Domain("|ns247.net|") }, Action(Discard) };Rule { Matches { Domain("|page.tl|") }, Action(Discard) };Rule { Matches { Domain("|bristol.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|bki-okb.com|") }, Action(Discard) };Rule { Matches { Domain("|jdcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|export.gov|") }, Action(Discard) };Rule { Matches { Domain("|dmzj.com|") }, Action(Discard) };Rule { Matches { Domain("|fiservmobileapps.com|") }, Action(Discard) };Rule { Matches { Domain("|mangago.me|") }, Action(Discard) };Rule { Matches { Domain("|ndrc.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|nybooks.com|") }, Action(Discard) };Rule { Matches { Domain("|usabilla.com|") }, Action(Discard) };Rule { Matches { Domain("|platformaofd.ru|") }, Action(Discard) };Rule { Matches { Domain("|excite.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|ninjarmm.com|") }, Action(Discard) };Rule { Matches { Domain("|influencersgonewild.com|") }, Action(Discard) };Rule { Matches { Domain("|zxzj.pro|") }, Action(Discard) };Rule { Matches { Domain("|soccerway.com|") }, Action(Discard) };Rule { Matches { Domain("|openstax.org|") }, Action(Discard) };Rule { Matches { Domain("|ui-dns.biz|") }, Action(Discard) };Rule { Matches { Domain("|uni-bonn.de|") }, Action(Discard) };Rule { Matches { Domain("|bplaced.net|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-21.org|") }, Action(Discard) };Rule { Matches { Domain("|my.gov.az|") }, Action(Discard) };Rule { Matches { Domain("|birminghammail.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|krone.at|") }, Action(Discard) };Rule { Matches { Domain("|23andme.com|") }, Action(Discard) };Rule { Matches { Domain("|glassboxdigital.io|") }, Action(Discard) };Rule { Matches { Domain("|5axxw.com|") }, Action(Discard) };Rule { Matches { Domain("|republicworld.com|") }, Action(Discard) };Rule { Matches { Domain("|amarujala.com|") }, Action(Discard) };Rule { Matches { Domain("|cybersource.com|") }, Action(Discard) };Rule { Matches { Domain("|dal.ca|") }, Action(Discard) };Rule { Matches { Domain("|meduza.io|") }, Action(Discard) };Rule { Matches { Domain("|usgbc.org|") }, Action(Discard) };Rule { Matches { Domain("|taz.de|") }, Action(Discard) };Rule { Matches { Domain("|kaluzaplatform.net|") }, Action(Discard) };Rule { Matches { Domain("|bestlifeonline.com|") }, Action(Discard) };Rule { Matches { Domain("|in.net|") }, Action(Discard) };Rule { Matches { Domain("|basketball-reference.com|") }, Action(Discard) };Rule { Matches { Domain("|messagingengine.com|") }, Action(Discard) };Rule { Matches { Domain("|artfiles.de|") }, Action(Discard) };Rule { Matches { Domain("|gnavi.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|coolors.co|") }, Action(Discard) };Rule { Matches { Domain("|glip.com|") }, Action(Discard) };Rule { Matches { Domain("|qiman58.com|") }, Action(Discard) };Rule { Matches { Domain("|1cv8update.com|") }, Action(Discard) };Rule { Matches { Domain("|kitco.com|") }, Action(Discard) };Rule { Matches { Domain("|alaskaair.com|") }, Action(Discard) };Rule { Matches { Domain("|angieslist.com|") }, Action(Discard) };Rule { Matches { Domain("|hasbro.com|") }, Action(Discard) };Rule { Matches { Domain("|list.ly|") }, Action(Discard) };Rule { Matches { Domain("|bna.com|") }, Action(Discard) };Rule { Matches { Domain("|flexwebhosting.nl|") }, Action(Discard) };Rule { Matches { Domain("|attentivemobile.com|") }, Action(Discard) };Rule { Matches { Domain("|wikitravel.org|") }, Action(Discard) };Rule { Matches { Domain("|bitbucket.io|") }, Action(Discard) };Rule { Matches { Domain("|syracuse.com|") }, Action(Discard) };Rule { Matches { Domain("|wgu.edu|") }, Action(Discard) };Rule { Matches { Domain("|loupan.com|") }, Action(Discard) };Rule { Matches { Domain("|tznic.or.tz|") }, Action(Discard) };Rule { Matches { Domain("|earnest.com|") }, Action(Discard) };Rule { Matches { Domain("|studyofnet.com|") }, Action(Discard) };Rule { Matches { Domain("|playvids.com|") }, Action(Discard) };Rule { Matches { Domain("|freemake.com|") }, Action(Discard) };Rule { Matches { Domain("|betcity.ru|") }, Action(Discard) };Rule { Matches { Domain("|macmillan.com|") }, Action(Discard) };Rule { Matches { Domain("|moypolk.ru|") }, Action(Discard) };Rule { Matches { Domain("|milanuncios.com|") }, Action(Discard) };Rule { Matches { Domain("|uni-freiburg.de|") }, Action(Discard) };Rule { Matches { Domain("|csusm.edu|") }, Action(Discard) };Rule { Matches { Domain("|publishersweekly.com|") }, Action(Discard) };Rule { Matches { Domain("|tinkoffinsurance.ru|") }, Action(Discard) };Rule { Matches { Domain("|redd.tube|") }, Action(Discard) };Rule { Matches { Domain("|huaweicloud-dns.com|") }, Action(Discard) };Rule { Matches { Domain("|adl.org|") }, Action(Discard) };Rule { Matches { Domain("|rbb24.de|") }, Action(Discard) };Rule { Matches { Domain("|iiilab.com|") }, Action(Discard) };Rule { Matches { Domain("|yallakora.com|") }, Action(Discard) };Rule { Matches { Domain("|airbnb.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|gigabyte.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-01.org|") }, Action(Discard) };Rule { Matches { Domain("|izbirkom.ru|") }, Action(Discard) };Rule { Matches { Domain("|seattlepi.com|") }, Action(Discard) };Rule { Matches { Domain("|optum.com|") }, Action(Discard) };Rule { Matches { Domain("|1cbit.ru|") }, Action(Discard) };Rule { Matches { Domain("|cls.cn|") }, Action(Discard) };Rule { Matches { Domain("|nuro.jp|") }, Action(Discard) };Rule { Matches { Domain("|nii.ac.jp|") }, Action(Discard) };Rule { Matches { Domain("|marxists.org|") }, Action(Discard) };Rule { Matches { Domain("|host-food.ru|") }, Action(Discard) };Rule { Matches { Domain("|mathway.com|") }, Action(Discard) };Rule { Matches { Domain("|williamhill.com|") }, Action(Discard) };Rule { Matches { Domain("|snu.ac.kr|") }, Action(Discard) };Rule { Matches { Domain("|lanl.gov|") }, Action(Discard) };Rule { Matches { Domain("|acx.com|") }, Action(Discard) };Rule { Matches { Domain("|chipotle.com|") }, Action(Discard) };Rule { Matches { Domain("|freehostia.com|") }, Action(Discard) };Rule { Matches { Domain("|ttyuyin.com|") }, Action(Discard) };Rule { Matches { Domain("|stubhub.com|") }, Action(Discard) };Rule { Matches { Domain("|computer.com|") }, Action(Discard) };Rule { Matches { Domain("|mohurd.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|e-monsite.com|") }, Action(Discard) };Rule { Matches { Domain("|anyclip.com|") }, Action(Discard) };Rule { Matches { Domain("|idc.jp|") }, Action(Discard) };Rule { Matches { Domain("|outboundproxy.com|") }, Action(Discard) };Rule { Matches { Domain("|buqkrzbrucz.com|") }, Action(Discard) };Rule { Matches { Domain("|xl720.com|") }, Action(Discard) };Rule { Matches { Domain("|mix.com|") }, Action(Discard) };Rule { Matches { Domain("|feng.com|") }, Action(Discard) };Rule { Matches { Domain("|kajabi.com|") }, Action(Discard) };Rule { Matches { Domain("|fz.fj.cn|") }, Action(Discard) };Rule { Matches { Domain("|playwire.com|") }, Action(Discard) };Rule { Matches { Domain("|viabtc.net|") }, Action(Discard) };Rule { Matches { Domain("|signzy.tech|") }, Action(Discard) };Rule { Matches { Domain("|extole.io|") }, Action(Discard) };Rule { Matches { Domain("|gameinformer.com|") }, Action(Discard) };Rule { Matches { Domain("|decider.com|") }, Action(Discard) };Rule { Matches { Domain("|qut.edu.au|") }, Action(Discard) };Rule { Matches { Domain("|abbott.com|") }, Action(Discard) };Rule { Matches { Domain("|almanac.com|") }, Action(Discard) };Rule { Matches { Domain("|spokeo.com|") }, Action(Discard) };Rule { Matches { Domain("|tensorflow.org|") }, Action(Discard) };Rule { Matches { Domain("|qr-code-generator.com|") }, Action(Discard) };Rule { Matches { Domain("|business.com|") }, Action(Discard) };Rule { Matches { Domain("|kookapp.cn|") }, Action(Discard) };Rule { Matches { Domain("|kmplayer.com|") }, Action(Discard) };Rule { Matches { Domain("|marketscreener.com|") }, Action(Discard) };Rule { Matches { Domain("|juming.com|") }, Action(Discard) };Rule { Matches { Domain("|google.hr|") }, Action(Discard) };Rule { Matches { Domain("|practicalmoneyskills.com|") }, Action(Discard) };Rule { Matches { Domain("|carrierzone.com|") }, Action(Discard) };Rule { Matches { Domain("|hackmd.io|") }, Action(Discard) };Rule { Matches { Domain("|revolve.com|") }, Action(Discard) };Rule { Matches { Domain("|tinypass.com|") }, Action(Discard) };Rule { Matches { Domain("|goodmorningamerica.com|") }, Action(Discard) };Rule { Matches { Domain("|webland.ch|") }, Action(Discard) };Rule { Matches { Domain("|accorhotels.com|") }, Action(Discard) };Rule { Matches { Domain("|blockadsnot.com|") }, Action(Discard) };Rule { Matches { Domain("|soap2day.rs|") }, Action(Discard) };Rule { Matches { Domain("|madou.club|") }, Action(Discard) };Rule { Matches { Domain("|ngtv.io|") }, Action(Discard) };Rule { Matches { Domain("|grafana.com|") }, Action(Discard) };Rule { Matches { Domain("|law360.com|") }, Action(Discard) };Rule { Matches { Domain("|stitchfix.com|") }, Action(Discard) };Rule { Matches { Domain("|showvid.ws|") }, Action(Discard) };Rule { Matches { Domain("|doodlekit.com|") }, Action(Discard) };Rule { Matches { Domain("|cbn.com|") }, Action(Discard) };Rule { Matches { Domain("|plarium.com|") }, Action(Discard) };Rule { Matches { Domain("|govtrack.us|") }, Action(Discard) };Rule { Matches { Domain("|ensighten.com|") }, Action(Discard) };Rule { Matches { Domain("|hao6v.tv|") }, Action(Discard) };Rule { Matches { Domain("|emarsys.net|") }, Action(Discard) };Rule { Matches { Domain("|digiday.com|") }, Action(Discard) };Rule { Matches { Domain("|impactradius-event.com|") }, Action(Discard) };Rule { Matches { Domain("|openwrt.org|") }, Action(Discard) };Rule { Matches { Domain("|2chblog.jp|") }, Action(Discard) };Rule { Matches { Domain("|yadongkorea.org|") }, Action(Discard) };Rule { Matches { Domain("|trusteer.com|") }, Action(Discard) };Rule { Matches { Domain("|logicworks.net|") }, Action(Discard) };Rule { Matches { Domain("|taplytics.com|") }, Action(Discard) };Rule { Matches { Domain("|mof.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|duote.com|") }, Action(Discard) };Rule { Matches { Domain("|dns.tw|") }, Action(Discard) };Rule { Matches { Domain("|dnacdn.net|") }, Action(Discard) };Rule { Matches { Domain("|suspended-domain.com|") }, Action(Discard) };Rule { Matches { Domain("|seesaw.me|") }, Action(Discard) };Rule { Matches { Domain("|pandadoc.com|") }, Action(Discard) };Rule { Matches { Domain("|aad.org|") }, Action(Discard) };Rule { Matches { Domain("|nsdl.com|") }, Action(Discard) };Rule { Matches { Domain("|cambridgeenglish.org|") }, Action(Discard) };Rule { Matches { Domain("|tpgi.com.au|") }, Action(Discard) };Rule { Matches { Domain("|gumtree.com.au|") }, Action(Discard) };Rule { Matches { Domain("|synopsys.com|") }, Action(Discard) };Rule { Matches { Domain("|regulations.gov|") }, Action(Discard) };Rule { Matches { Domain("|businessinsider.com.au|") }, Action(Discard) };Rule { Matches { Domain("|pocket-lint.com|") }, Action(Discard) };Rule { Matches { Domain("|pinterest.net|") }, Action(Discard) };Rule { Matches { Domain("|uwa.edu.au|") }, Action(Discard) };Rule { Matches { Domain("|usebutton.com|") }, Action(Discard) };Rule { Matches { Domain("|internapcdn.net|") }, Action(Discard) };Rule { Matches { Domain("|asianporn.li|") }, Action(Discard) };Rule { Matches { Domain("|faradars.org|") }, Action(Discard) };Rule { Matches { Domain("|autonews.com|") }, Action(Discard) };Rule { Matches { Domain("|torrent.org.cn|") }, Action(Discard) };Rule { Matches { Domain("|grammy.com|") }, Action(Discard) };Rule { Matches { Domain("|ficbook.net|") }, Action(Discard) };Rule { Matches { Domain("|mipn-solutions.net|") }, Action(Discard) };Rule { Matches { Domain("|appinn.com|") }, Action(Discard) };Rule { Matches { Domain("|ipv4only.arpa|") }, Action(Discard) };Rule { Matches { Domain("|hrc.org|") }, Action(Discard) };Rule { Matches { Domain("|mndsrv.com|") }, Action(Discard) };Rule { Matches { Domain("|okcupid.com|") }, Action(Discard) };Rule { Matches { Domain("|aminoapps.com|") }, Action(Discard) };Rule { Matches { Domain("|mailspike.net|") }, Action(Discard) };Rule { Matches { Domain("|extfans.com|") }, Action(Discard) };Rule { Matches { Domain("|trademe.co.nz|") }, Action(Discard) };Rule { Matches { Domain("|aajtak.in|") }, Action(Discard) };Rule { Matches { Domain("|ucloud.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|tongji.edu.cn|") }, Action(Discard) };Rule { Matches { Domain("|lystit.com|") }, Action(Discard) };Rule { Matches { Domain("|imore.com|") }, Action(Discard) };Rule { Matches { Domain("|sabre.com|") }, Action(Discard) };Rule { Matches { Domain("|doubanio.com|") }, Action(Discard) };Rule { Matches { Domain("|hostingradio.ru|") }, Action(Discard) };Rule { Matches { Domain("|uproxx.com|") }, Action(Discard) };Rule { Matches { Domain("|ihost.com|") }, Action(Discard) };Rule { Matches { Domain("|airasia.com|") }, Action(Discard) };Rule { Matches { Domain("|a8.net|") }, Action(Discard) };Rule { Matches { Domain("|managed-vps.net|") }, Action(Discard) };Rule { Matches { Domain("|carmax.com|") }, Action(Discard) };Rule { Matches { Domain("|blogspot.com.br|") }, Action(Discard) };Rule { Matches { Domain("|meetcircle-blue.co|") }, Action(Discard) };Rule { Matches { Domain("|corsair.com|") }, Action(Discard) };Rule { Matches { Domain("|nintendolife.com|") }, Action(Discard) };Rule { Matches { Domain("|larepublica.pe|") }, Action(Discard) };Rule { Matches { Domain("|lexology.com|") }, Action(Discard) };Rule { Matches { Domain("|palantirfoundry.com|") }, Action(Discard) };Rule { Matches { Domain("|etisalatdomains.ae|") }, Action(Discard) };Rule { Matches { Domain("|omegle.com|") }, Action(Discard) };Rule { Matches { Domain("|fotocdn.net|") }, Action(Discard) };Rule { Matches { Domain("|bunnydns.com|") }, Action(Discard) };Rule { Matches { Domain("|cyon.ch|") }, Action(Discard) };Rule { Matches { Domain("|numpy.org|") }, Action(Discard) };Rule { Matches { Domain("|inhostedns.com|") }, Action(Discard) };Rule { Matches { Domain("|techtimes.com|") }, Action(Discard) };Rule { Matches { Domain("|dslavangard.ru|") }, Action(Discard) };Rule { Matches { Domain("|meetcircle-netgear.co|") }, Action(Discard) };Rule { Matches { Domain("|te.eg|") }, Action(Discard) };Rule { Matches { Domain("|levi.com|") }, Action(Discard) };Rule { Matches { Domain("|xinpianchang.com|") }, Action(Discard) };Rule { Matches { Domain("|bestbuy.ca|") }, Action(Discard) };Rule { Matches { Domain("|clutch.co|") }, Action(Discard) };Rule { Matches { Domain("|forgecdn.net|") }, Action(Discard) };Rule { Matches { Domain("|ntnu.no|") }, Action(Discard) };Rule { Matches { Domain("|villagevoice.com|") }, Action(Discard) };Rule { Matches { Domain("|msudrf.ru|") }, Action(Discard) };Rule { Matches { Domain("|academic.ru|") }, Action(Discard) };Rule { Matches { Domain("|jivo.ru|") }, Action(Discard) };Rule { Matches { Domain("|zzux.com|") }, Action(Discard) };Rule { Matches { Domain("|cyol.com|") }, Action(Discard) };Rule { Matches { Domain("|techdns.com.ua|") }, Action(Discard) };Rule { Matches { Domain("|data.gov.uk|") }, Action(Discard) };Rule { Matches { Domain("|thebalancesmb.com|") }, Action(Discard) };Rule { Matches { Domain("|chop.edu|") }, Action(Discard) };Rule { Matches { Domain("|ca-servers.ca|") }, Action(Discard) };Rule { Matches { Domain("|no-ip.org|") }, Action(Discard) };Rule { Matches { Domain("|blm.gov|") }, Action(Discard) };Rule { Matches { Domain("|pymnts.com|") }, Action(Discard) };Rule { Matches { Domain("|democracynow.org|") }, Action(Discard) };Rule { Matches { Domain("|freedownloadmanager.org|") }, Action(Discard) };Rule { Matches { Domain("|torrentfreak.com|") }, Action(Discard) };Rule { Matches { Domain("|zenfolio.com|") }, Action(Discard) };Rule { Matches { Domain("|threatlocker.com|") }, Action(Discard) };Rule { Matches { Domain("|lenreg.ru|") }, Action(Discard) };Rule { Matches { Domain("|jiangsu.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|ladsp.com|") }, Action(Discard) };Rule { Matches { Domain("|hs.fi|") }, Action(Discard) };Rule { Matches { Domain("|constellix.net|") }, Action(Discard) };Rule { Matches { Domain("|belgium.be|") }, Action(Discard) };Rule { Matches { Domain("|cascadeclean.com|") }, Action(Discard) };Rule { Matches { Domain("|fflogs.com|") }, Action(Discard) };Rule { Matches { Domain("|zyxel.com|") }, Action(Discard) };Rule { Matches { Domain("|vingle.net|") }, Action(Discard) };Rule { Matches { Domain("|eamk.pro|") }, Action(Discard) };Rule { Matches { Domain("|schema.org|") }, Action(Discard) };Rule { Matches { Domain("|alipansou.com|") }, Action(Discard) };Rule { Matches { Domain("|boldchat.com|") }, Action(Discard) };Rule { Matches { Domain("|sail-personalize.com|") }, Action(Discard) };Rule { Matches { Domain("|9to5google.com|") }, Action(Discard) };Rule { Matches { Domain("|beyla.site|") }, Action(Discard) };Rule { Matches { Domain("|henan.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|oray.net|") }, Action(Discard) };Rule { Matches { Domain("|sgcc.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|greengeeks.com|") }, Action(Discard) };Rule { Matches { Domain("|wnflb2023.com|") }, Action(Discard) };Rule { Matches { Domain("|ello.co|") }, Action(Discard) };Rule { Matches { Domain("|edgecdn.world|") }, Action(Discard) };Rule { Matches { Domain("|tomsk.ru|") }, Action(Discard) };Rule { Matches { Domain("|onrender.com|") }, Action(Discard) };Rule { Matches { Domain("|portswigger.net|") }, Action(Discard) };Rule { Matches { Domain("|meipian.cn|") }, Action(Discard) };Rule { Matches { Domain("|mirror.xyz|") }, Action(Discard) };Rule { Matches { Domain("|qvdt3feo.com|") }, Action(Discard) };Rule { Matches { Domain("|adguard.com|") }, Action(Discard) };Rule { Matches { Domain("|ebay.es|") }, Action(Discard) };Rule { Matches { Domain("|allbookdown.com|") }, Action(Discard) };Rule { Matches { Domain("|intacct.com|") }, Action(Discard) };Rule { Matches { Domain("|crateandbarrel.com|") }, Action(Discard) };Rule { Matches { Domain("|macpaw.com|") }, Action(Discard) };Rule { Matches { Domain("|wmich.edu|") }, Action(Discard) };Rule { Matches { Domain("|citizensadvice.org.uk|") }, Action(Discard) };Rule { Matches { Domain("|culture.ru|") }, Action(Discard) };Rule { Matches { Domain("|muchong.com|") }, Action(Discard) };Rule { Matches { Domain("|proxad.net|") }, Action(Discard) };Rule { Matches { Domain("|dwcdn.net|") }, Action(Discard) };Rule { Matches { Domain("|tracktor.in|") }, Action(Discard) };Rule { Matches { Domain("|infowars.com|") }, Action(Discard) };Rule { Matches { Domain("|unian.net|") }, Action(Discard) };Rule { Matches { Domain("|zbj.com|") }, Action(Discard) };Rule { Matches { Domain("|adda247.com|") }, Action(Discard) };Rule { Matches { Domain("|template.net|") }, Action(Discard) };Rule { Matches { Domain("|mobilevikings.be|") }, Action(Discard) };Rule { Matches { Domain("|printfriendly.com|") }, Action(Discard) };Rule { Matches { Domain("|leafly.com|") }, Action(Discard) };Rule { Matches { Domain("|hjg58.com|") }, Action(Discard) };Rule { Matches { Domain("|didiglobal.com|") }, Action(Discard) };Rule { Matches { Domain("|mux.com|") }, Action(Discard) };Rule { Matches { Domain("|autozone.com|") }, Action(Discard) };Rule { Matches { Domain("|aepd.es|") }, Action(Discard) };Rule { Matches { Domain("|fbpigeon.com|") }, Action(Discard) };Rule { Matches { Domain("|pinterest.it|") }, Action(Discard) };Rule { Matches { Domain("|j.mp|") }, Action(Discard) };Rule { Matches { Domain("|kongregate.com|") }, Action(Discard) };Rule { Matches { Domain("|yt1s.com|") }, Action(Discard) };Rule { Matches { Domain("|smartinsights.com|") }, Action(Discard) };Rule { Matches { Domain("|bjx.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|bose.io|") }, Action(Discard) };Rule { Matches { Domain("|usvisa-info.com|") }, Action(Discard) };Rule { Matches { Domain("|samqaicongen.com|") }, Action(Discard) };Rule { Matches { Domain("|mailclub.eu|") }, Action(Discard) };Rule { Matches { Domain("|joinmastodon.org|") }, Action(Discard) };Rule { Matches { Domain("|ic.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|onetouch17.info|") }, Action(Discard) };Rule { Matches { Domain("|dotmetrics.net|") }, Action(Discard) };Rule { Matches { Domain("|google.iq|") }, Action(Discard) };Rule { Matches { Domain("|nat.gov.tw|") }, Action(Discard) };Rule { Matches { Domain("|openxcdn.net|") }, Action(Discard) };Rule { Matches { Domain("|wiki.gg|") }, Action(Discard) };Rule { Matches { Domain("|abola.pt|") }, Action(Discard) };Rule { Matches { Domain("|placeit.net|") }, Action(Discard) };Rule { Matches { Domain("|acpjournals.org|") }, Action(Discard) };Rule { Matches { Domain("|wb.com|") }, Action(Discard) };Rule { Matches { Domain("|mikrotik.com|") }, Action(Discard) };Rule { Matches { Domain("|pubnative.net|") }, Action(Discard) };Rule { Matches { Domain("|playfamily.ru|") }, Action(Discard) };Rule { Matches { Domain("|6sc.co|") }, Action(Discard) };Rule { Matches { Domain("|multinex.ru|") }, Action(Discard) };Rule { Matches { Domain("|suicidepreventionlifeline.org|") }, Action(Discard) };Rule { Matches { Domain("|casio.com|") }, Action(Discard) };Rule { Matches { Domain("|surrey.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|macrotrends.net|") }, Action(Discard) };Rule { Matches { Domain("|five9.com|") }, Action(Discard) };Rule { Matches { Domain("|myheritage.com|") }, Action(Discard) };Rule { Matches { Domain("|marcus.com|") }, Action(Discard) };Rule { Matches { Domain("|maturetube.com|") }, Action(Discard) };Rule { Matches { Domain("|deliverimp.com|") }, Action(Discard) };Rule { Matches { Domain("|rogerebert.com|") }, Action(Discard) };Rule { Matches { Domain("|nikkansports.com|") }, Action(Discard) };Rule { Matches { Domain("|aptoide.com|") }, Action(Discard) };Rule { Matches { Domain("|liveramp.com|") }, Action(Discard) };Rule { Matches { Domain("|jianshu.io|") }, Action(Discard) };Rule { Matches { Domain("|squadhelp.com|") }, Action(Discard) };Rule { Matches { Domain("|byteigtm.com|") }, Action(Discard) };Rule { Matches { Domain("|awswaf.com|") }, Action(Discard) };Rule { Matches { Domain("|solocdn.cn|") }, Action(Discard) };Rule { Matches { Domain("|ladbible.com|") }, Action(Discard) };Rule { Matches { Domain("|humoruniv.com|") }, Action(Discard) };Rule { Matches { Domain("|aon.com|") }, Action(Discard) };Rule { Matches { Domain("|townandcountrymag.com|") }, Action(Discard) };Rule { Matches { Domain("|aliway.com|") }, Action(Discard) };Rule { Matches { Domain("|lyst.com|") }, Action(Discard) };Rule { Matches { Domain("|nobitex.ir|") }, Action(Discard) };Rule { Matches { Domain("|nic.xyz|") }, Action(Discard) };Rule { Matches { Domain("|enterprise.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-31.org|") }, Action(Discard) };Rule { Matches { Domain("|ada.gov|") }, Action(Discard) };Rule { Matches { Domain("|snaptik.app|") }, Action(Discard) };Rule { Matches { Domain("|save-insta.com|") }, Action(Discard) };Rule { Matches { Domain("|sdn.cz|") }, Action(Discard) };Rule { Matches { Domain("|myway.com|") }, Action(Discard) };Rule { Matches { Domain("|homeaffairs.gov.au|") }, Action(Discard) };Rule { Matches { Domain("|grabcad.com|") }, Action(Discard) };Rule { Matches { Domain("|monash.edu.au|") }, Action(Discard) };Rule { Matches { Domain("|cos-rd.com|") }, Action(Discard) };Rule { Matches { Domain("|shef.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|uni-frankfurt.de|") }, Action(Discard) };Rule { Matches { Domain("|petco.com|") }, Action(Discard) };Rule { Matches { Domain("|siteorigin.com|") }, Action(Discard) };Rule { Matches { Domain("|awstrack.me|") }, Action(Discard) };Rule { Matches { Domain("|xiaoe-tech.com|") }, Action(Discard) };Rule { Matches { Domain("|infobip.com|") }, Action(Discard) };Rule { Matches { Domain("|wizzair.com|") }, Action(Discard) };Rule { Matches { Domain("|xjishu.com|") }, Action(Discard) };Rule { Matches { Domain("|myminifactory.com|") }, Action(Discard) };Rule { Matches { Domain("|barchart.com|") }, Action(Discard) };Rule { Matches { Domain("|pravda.ru|") }, Action(Discard) };Rule { Matches { Domain("|dns-diy.net|") }, Action(Discard) };Rule { Matches { Domain("|bungie.net|") }, Action(Discard) };Rule { Matches { Domain("|gadgets360.com|") }, Action(Discard) };Rule { Matches { Domain("|sputnik.ru|") }, Action(Discard) };Rule { Matches { Domain("|google.ge|") }, Action(Discard) };Rule { Matches { Domain("|doctolib.fr|") }, Action(Discard) };Rule { Matches { Domain("|fontspace.com|") }, Action(Discard) };Rule { Matches { Domain("|ncr.com|") }, Action(Discard) };Rule { Matches { Domain("|sberbank-tele.com|") }, Action(Discard) };Rule { Matches { Domain("|valuecommerce.com|") }, Action(Discard) };Rule { Matches { Domain("|huorong.cn|") }, Action(Discard) };Rule { Matches { Domain("|1fuli.xyz|") }, Action(Discard) };Rule { Matches { Domain("|homecredit.ru|") }, Action(Discard) };Rule { Matches { Domain("|grist.org|") }, Action(Discard) };Rule { Matches { Domain("|entelchile.net|") }, Action(Discard) };Rule { Matches { Domain("|berlitz.eu|") }, Action(Discard) };Rule { Matches { Domain("|mangafreak.net|") }, Action(Discard) };Rule { Matches { Domain("|shaanxi.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|ungrounded.net|") }, Action(Discard) };Rule { Matches { Domain("|clips4sale.com|") }, Action(Discard) };Rule { Matches { Domain("|mangapark.net|") }, Action(Discard) };Rule { Matches { Domain("|stocktwits.com|") }, Action(Discard) };Rule { Matches { Domain("|wwnorton.com|") }, Action(Discard) };Rule { Matches { Domain("|louisiana.gov|") }, Action(Discard) };Rule { Matches { Domain("|duapps.com|") }, Action(Discard) };Rule { Matches { Domain("|calstatela.edu|") }, Action(Discard) };Rule { Matches { Domain("|kapwing.com|") }, Action(Discard) };Rule { Matches { Domain("|ntv.ru|") }, Action(Discard) };Rule { Matches { Domain("|tnt-ea.com|") }, Action(Discard) };Rule { Matches { Domain("|streamlabs.com|") }, Action(Discard) };Rule { Matches { Domain("|boardhost.com|") }, Action(Discard) };Rule { Matches { Domain("|turbo.az|") }, Action(Discard) };Rule { Matches { Domain("|tpmn.co.kr|") }, Action(Discard) };Rule { Matches { Domain("|expansion.com|") }, Action(Discard) };Rule { Matches { Domain("|mercadolibre.cl|") }, Action(Discard) };Rule { Matches { Domain("|npc.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|jcrew.com|") }, Action(Discard) };Rule { Matches { Domain("|zimbio.com|") }, Action(Discard) };Rule { Matches { Domain("|omnicalculator.com|") }, Action(Discard) };Rule { Matches { Domain("|scu.edu|") }, Action(Discard) };Rule { Matches { Domain("|kazfv.com|") }, Action(Discard) };Rule { Matches { Domain("|kent.edu|") }, Action(Discard) };Rule { Matches { Domain("|gigaset.net|") }, Action(Discard) };Rule { Matches { Domain("|jpush.cn|") }, Action(Discard) };Rule { Matches { Domain("|questionpro.com|") }, Action(Discard) };Rule { Matches { Domain("|abplive.com|") }, Action(Discard) };Rule { Matches { Domain("|instructuremedia.com|") }, Action(Discard) };Rule { Matches { Domain("|ndm9.xyz|") }, Action(Discard) };Rule { Matches { Domain("|nndssk.com|") }, Action(Discard) };Rule { Matches { Domain("|superchatlive.com|") }, Action(Discard) };Rule { Matches { Domain("|radikal.ru|") }, Action(Discard) };Rule { Matches { Domain("|byrdie.com|") }, Action(Discard) };Rule { Matches { Domain("|au.com|") }, Action(Discard) };Rule { Matches { Domain("|eleconomista.es|") }, Action(Discard) };Rule { Matches { Domain("|1stdibs.com|") }, Action(Discard) };Rule { Matches { Domain("|woshika.com|") }, Action(Discard) };Rule { Matches { Domain("|scirp.org|") }, Action(Discard) };Rule { Matches { Domain("|convio.net|") }, Action(Discard) };Rule { Matches { Domain("|comscore.com|") }, Action(Discard) };Rule { Matches { Domain("|podomatic.com|") }, Action(Discard) };Rule { Matches { Domain("|sofi.com|") }, Action(Discard) };Rule { Matches { Domain("|panamericano.com.br|") }, Action(Discard) };Rule { Matches { Domain("|hitel.net|") }, Action(Discard) };Rule { Matches { Domain("|mid.ru|") }, Action(Discard) };Rule { Matches { Domain("|medpagetoday.com|") }, Action(Discard) };Rule { Matches { Domain("|hinative.com|") }, Action(Discard) };Rule { Matches { Domain("|soumu.go.jp|") }, Action(Discard) };Rule { Matches { Domain("|lotteon.com|") }, Action(Discard) };Rule { Matches { Domain("|answerthepublic.com|") }, Action(Discard) };Rule { Matches { Domain("|interpark.com|") }, Action(Discard) };Rule { Matches { Domain("|rb.gy|") }, Action(Discard) };Rule { Matches { Domain("|yaraon-blog.com|") }, Action(Discard) };Rule { Matches { Domain("|daringfireball.net|") }, Action(Discard) };Rule { Matches { Domain("|hosttech.ch|") }, Action(Discard) };Rule { Matches { Domain("|1905.com|") }, Action(Discard) };Rule { Matches { Domain("|snapcraft.io|") }, Action(Discard) };Rule { Matches { Domain("|xfinityhome.com|") }, Action(Discard) };Rule { Matches { Domain("|google.ee|") }, Action(Discard) };Rule { Matches { Domain("|thehartford.com|") }, Action(Discard) };Rule { Matches { Domain("|epizy.com|") }, Action(Discard) };Rule { Matches { Domain("|optinmonster.com|") }, Action(Discard) };Rule { Matches { Domain("|mcmaster.com|") }, Action(Discard) };Rule { Matches { Domain("|yummly.com|") }, Action(Discard) };Rule { Matches { Domain("|didichuxing.com|") }, Action(Discard) };Rule { Matches { Domain("|chalmers.se|") }, Action(Discard) };Rule { Matches { Domain("|fotolia.com|") }, Action(Discard) };Rule { Matches { Domain("|inhabitat.com|") }, Action(Discard) };Rule { Matches { Domain("|getfireshot.com|") }, Action(Discard) };Rule { Matches { Domain("|koreatimes.co.kr|") }, Action(Discard) };Rule { Matches { Domain("|blueapron.com|") }, Action(Discard) };Rule { Matches { Domain("|goftino.com|") }, Action(Discard) };Rule { Matches { Domain("|mathsisfun.com|") }, Action(Discard) };Rule { Matches { Domain("|modb.pro|") }, Action(Discard) };Rule { Matches { Domain("|wpeproxy.com|") }, Action(Discard) };Rule { Matches { Domain("|gammaplatform.com|") }, Action(Discard) };Rule { Matches { Domain("|rtbhouse.com|") }, Action(Discard) };Rule { Matches { Domain("|jdpower.com|") }, Action(Discard) };Rule { Matches { Domain("|muckrack.com|") }, Action(Discard) };Rule { Matches { Domain("|incapsecuredns.net|") }, Action(Discard) };Rule { Matches { Domain("|braze-images.com|") }, Action(Discard) };Rule { Matches { Domain("|streamtape.to|") }, Action(Discard) };Rule { Matches { Domain("|trustwave.com|") }, Action(Discard) };Rule { Matches { Domain("|dirtyship.com|") }, Action(Discard) };Rule { Matches { Domain("|luxuretv.com|") }, Action(Discard) };Rule { Matches { Domain("|ask.fm|") }, Action(Discard) };Rule { Matches { Domain("|wwe.com|") }, Action(Discard) };Rule { Matches { Domain("|mudvod.tv|") }, Action(Discard) };Rule { Matches { Domain("|cumhuriyet.com.tr|") }, Action(Discard) };Rule { Matches { Domain("|stream-io-api.com|") }, Action(Discard) };Rule { Matches { Domain("|jora.xyz|") }, Action(Discard) };Rule { Matches { Domain("|currys.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|mtk.com.tw|") }, Action(Discard) };Rule { Matches { Domain("|newspapers.com|") }, Action(Discard) };Rule { Matches { Domain("|youidomain2.com|") }, Action(Discard) };Rule { Matches { Domain("|hostmed.ru|") }, Action(Discard) };Rule { Matches { Domain("|elfinanciero.com.mx|") }, Action(Discard) };Rule { Matches { Domain("|umu.se|") }, Action(Discard) };Rule { Matches { Domain("|sway.com|") }, Action(Discard) };Rule { Matches { Domain("|associates-amazon.com|") }, Action(Discard) };Rule { Matches { Domain("|skladchina.biz|") }, Action(Discard) };Rule { Matches { Domain("|mydomain.com|") }, Action(Discard) };Rule { Matches { Domain("|boreus.de|") }, Action(Discard) };Rule { Matches { Domain("|mxtoolbox.com|") }, Action(Discard) };Rule { Matches { Domain("|campaignmonitor.com|") }, Action(Discard) };Rule { Matches { Domain("|emc.com|") }, Action(Discard) };Rule { Matches { Domain("|aip.org|") }, Action(Discard) };Rule { Matches { Domain("|yinfans.me|") }, Action(Discard) };Rule { Matches { Domain("|luc.edu|") }, Action(Discard) };Rule { Matches { Domain("|segment.build|") }, Action(Discard) };Rule { Matches { Domain("|f5silverline.com|") }, Action(Discard) };Rule { Matches { Domain("|ariba.com|") }, Action(Discard) };Rule { Matches { Domain("|denofgeek.com|") }, Action(Discard) };Rule { Matches { Domain("|musavat.com|") }, Action(Discard) };Rule { Matches { Domain("|t.cn|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-13.org|") }, Action(Discard) };Rule { Matches { Domain("|chevrolet.com|") }, Action(Discard) };Rule { Matches { Domain("|aliyun-inc.com|") }, Action(Discard) };Rule { Matches { Domain("|oar.net|") }, Action(Discard) };Rule { Matches { Domain("|699pic.com|") }, Action(Discard) };Rule { Matches { Domain("|tokyo.lg.jp|") }, Action(Discard) };Rule { Matches { Domain("|cmegroup.com|") }, Action(Discard) };Rule { Matches { Domain("|hero-wars.com|") }, Action(Discard) };Rule { Matches { Domain("|ardmediathek.de|") }, Action(Discard) };Rule { Matches { Domain("|goibibo.com|") }, Action(Discard) };Rule { Matches { Domain("|threadless.com|") }, Action(Discard) };Rule { Matches { Domain("|matrixreq.com|") }, Action(Discard) };Rule { Matches { Domain("|streamyard.com|") }, Action(Discard) };Rule { Matches { Domain("|oprahdaily.com|") }, Action(Discard) };Rule { Matches { Domain("|ecwcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|gridserver.com|") }, Action(Discard) };Rule { Matches { Domain("|telefonica.com|") }, Action(Discard) };Rule { Matches { Domain("|51credit.com|") }, Action(Discard) };Rule { Matches { Domain("|ngrok.io|") }, Action(Discard) };Rule { Matches { Domain("|lung.org|") }, Action(Discard) };Rule { Matches { Domain("|vodafone-ip.de|") }, Action(Discard) };Rule { Matches { Domain("|queniurc.com|") }, Action(Discard) };Rule { Matches { Domain("|brandmetrics.com|") }, Action(Discard) };Rule { Matches { Domain("|docs.rs|") }, Action(Discard) };Rule { Matches { Domain("|69shu.com|") }, Action(Discard) };Rule { Matches { Domain("|swift.com|") }, Action(Discard) };Rule { Matches { Domain("|fprimecapital.com|") }, Action(Discard) };Rule { Matches { Domain("|screencast.com|") }, Action(Discard) };Rule { Matches { Domain("|appsumo.com|") }, Action(Discard) };Rule { Matches { Domain("|foxitsoftware.com|") }, Action(Discard) };Rule { Matches { Domain("|slashfilm.com|") }, Action(Discard) };Rule { Matches { Domain("|nanjing.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|cat.com|") }, Action(Discard) };Rule { Matches { Domain("|bham.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|calculatorsoup.com|") }, Action(Discard) };Rule { Matches { Domain("|pangle-b.io|") }, Action(Discard) };Rule { Matches { Domain("|facemojikeyboard.com|") }, Action(Discard) };Rule { Matches { Domain("|einnews.com|") }, Action(Discard) };Rule { Matches { Domain("|opensecrets.org|") }, Action(Discard) };Rule { Matches { Domain("|redoxengine.com|") }, Action(Discard) };Rule { Matches { Domain("|gothamist.com|") }, Action(Discard) };Rule { Matches { Domain("|section.io|") }, Action(Discard) };Rule { Matches { Domain("|vxxx.com|") }, Action(Discard) };Rule { Matches { Domain("|kaptcha.com|") }, Action(Discard) };Rule { Matches { Domain("|poynter.org|") }, Action(Discard) };Rule { Matches { Domain("|ipfs.io|") }, Action(Discard) };Rule { Matches { Domain("|sparkfun.com|") }, Action(Discard) };Rule { Matches { Domain("|ad-score.com|") }, Action(Discard) };Rule { Matches { Domain("|clmbtech.com|") }, Action(Discard) };Rule { Matches { Domain("|oocl.com|") }, Action(Discard) };Rule { Matches { Domain("|exeo.app|") }, Action(Discard) };Rule { Matches { Domain("|ligastavok.ru|") }, Action(Discard) };Rule { Matches { Domain("|ucsusa.org|") }, Action(Discard) };Rule { Matches { Domain("|thebalancecareers.com|") }, Action(Discard) };Rule { Matches { Domain("|wibmo.com|") }, Action(Discard) };Rule { Matches { Domain("|renderforest.com|") }, Action(Discard) };Rule { Matches { Domain("|wnd.com|") }, Action(Discard) };Rule { Matches { Domain("|dycdn.com|") }, Action(Discard) };Rule { Matches { Domain("|hihonorcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|panoramio.com|") }, Action(Discard) };Rule { Matches { Domain("|usyd.edu.au|") }, Action(Discard) };Rule { Matches { Domain("|alabama.gov|") }, Action(Discard) };Rule { Matches { Domain("|delft.nl|") }, Action(Discard) };Rule { Matches { Domain("|ralphlauren.com|") }, Action(Discard) };Rule { Matches { Domain("|nordwindairlines.ru|") }, Action(Discard) };Rule { Matches { Domain("|baseball-reference.com|") }, Action(Discard) };Rule { Matches { Domain("|folkd.com|") }, Action(Discard) };Rule { Matches { Domain("|psychiatry.org|") }, Action(Discard) };Rule { Matches { Domain("|audioeye.com|") }, Action(Discard) };Rule { Matches { Domain("|home.ne.jp|") }, Action(Discard) };Rule { Matches { Domain("|subito.it|") }, Action(Discard) };Rule { Matches { Domain("|ciscospark.com|") }, Action(Discard) };Rule { Matches { Domain("|warnermediacdn.com|") }, Action(Discard) };Rule { Matches { Domain("|genome.gov|") }, Action(Discard) };Rule { Matches { Domain("|rnp.br|") }, Action(Discard) };Rule { Matches { Domain("|gomlab.com|") }, Action(Discard) };Rule { Matches { Domain("|servicepipe.ru|") }, Action(Discard) };Rule { Matches { Domain("|porntn.com|") }, Action(Discard) };Rule { Matches { Domain("|mq.edu.au|") }, Action(Discard) };Rule { Matches { Domain("|pajak.go.id|") }, Action(Discard) };Rule { Matches { Domain("|ttu.edu|") }, Action(Discard) };Rule { Matches { Domain("|vedantu.com|") }, Action(Discard) };Rule { Matches { Domain("|palantir.com|") }, Action(Discard) };Rule { Matches { Domain("|telecomsvc.com|") }, Action(Discard) };Rule { Matches { Domain("|movieweb.com|") }, Action(Discard) };Rule { Matches { Domain("|iom.int|") }, Action(Discard) };Rule { Matches { Domain("|getbux.com|") }, Action(Discard) };Rule { Matches { Domain("|paylution.com|") }, Action(Discard) };Rule { Matches { Domain("|infoq.com|") }, Action(Discard) };Rule { Matches { Domain("|upm.es|") }, Action(Discard) };Rule { Matches { Domain("|sport1.de|") }, Action(Discard) };Rule { Matches { Domain("|freeones.com|") }, Action(Discard) };Rule { Matches { Domain("|storyblocks.com|") }, Action(Discard) };Rule { Matches { Domain("|dellin.ru|") }, Action(Discard) };Rule { Matches { Domain("|niche.com|") }, Action(Discard) };Rule { Matches { Domain("|brill.com|") }, Action(Discard) };Rule { Matches { Domain("|blick.ch|") }, Action(Discard) };Rule { Matches { Domain("|udag.de|") }, Action(Discard) };Rule { Matches { Domain("|hsbc.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|certum.pl|") }, Action(Discard) };Rule { Matches { Domain("|hackerone.com|") }, Action(Discard) };Rule { Matches { Domain("|blogspot.nl|") }, Action(Discard) };Rule { Matches { Domain("|gotquestions.org|") }, Action(Discard) };Rule { Matches { Domain("|a1.net|") }, Action(Discard) };Rule { Matches { Domain("|askmen.com|") }, Action(Discard) };Rule { Matches { Domain("|website-files.com|") }, Action(Discard) };Rule { Matches { Domain("|bnl.gov|") }, Action(Discard) };Rule { Matches { Domain("|softwaretestinghelp.com|") }, Action(Discard) };Rule { Matches { Domain("|t-s2-msedge.net|") }, Action(Discard) };Rule { Matches { Domain("|lbdns-streamguys.com|") }, Action(Discard) };Rule { Matches { Domain("|le.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|osf.io|") }, Action(Discard) };Rule { Matches { Domain("|razersynapse.com|") }, Action(Discard) };Rule { Matches { Domain("|nebraska.gov|") }, Action(Discard) };Rule { Matches { Domain("|linuxfoundation.org|") }, Action(Discard) };Rule { Matches { Domain("|ssl.com|") }, Action(Discard) };Rule { Matches { Domain("|youxiaohou.com|") }, Action(Discard) };Rule { Matches { Domain("|fciis.net|") }, Action(Discard) };Rule { Matches { Domain("|so-ups.ru|") }, Action(Discard) };Rule { Matches { Domain("|vidiq.com|") }, Action(Discard) };Rule { Matches { Domain("|pillpack.com|") }, Action(Discard) };Rule { Matches { Domain("|hsadspixel.net|") }, Action(Discard) };Rule { Matches { Domain("|mongabay.com|") }, Action(Discard) };Rule { Matches { Domain("|curalate.com|") }, Action(Discard) };Rule { Matches { Domain("|endgame.com|") }, Action(Discard) };Rule { Matches { Domain("|gocomics.com|") }, Action(Discard) };Rule { Matches { Domain("|ui-dns.org|") }, Action(Discard) };Rule { Matches { Domain("|wdckeystone.com|") }, Action(Discard) };Rule { Matches { Domain("|b-dc-msedge.net|") }, Action(Discard) };Rule { Matches { Domain("|nflximg.com|") }, Action(Discard) };Rule { Matches { Domain("|privatbank.ua|") }, Action(Discard) };Rule { Matches { Domain("|llnl.gov|") }, Action(Discard) };Rule { Matches { Domain("|jdsupra.com|") }, Action(Discard) };Rule { Matches { Domain("|cuevana3.ch|") }, Action(Discard) };Rule { Matches { Domain("|retailrocket.ru|") }, Action(Discard) };Rule { Matches { Domain("|sigmaaldrich.com|") }, Action(Discard) };Rule { Matches { Domain("|xvtest.net|") }, Action(Discard) };Rule { Matches { Domain("|baozimh.com|") }, Action(Discard) };Rule { Matches { Domain("|facecast.net|") }, Action(Discard) };Rule { Matches { Domain("|bnnbloomberg.ca|") }, Action(Discard) };Rule { Matches { Domain("|bitget.com|") }, Action(Discard) };Rule { Matches { Domain("|thredup.com|") }, Action(Discard) };Rule { Matches { Domain("|etymonline.com|") }, Action(Discard) };Rule { Matches { Domain("|forprimeapeon.com|") }, Action(Discard) };Rule { Matches { Domain("|bankofthewest.com|") }, Action(Discard) };Rule { Matches { Domain("|veoh.com|") }, Action(Discard) };Rule { Matches { Domain("|google.ba|") }, Action(Discard) };Rule { Matches { Domain("|queniusy.com|") }, Action(Discard) };Rule { Matches { Domain("|plaid.com|") }, Action(Discard) };Rule { Matches { Domain("|vanguardngr.com|") }, Action(Discard) };Rule { Matches { Domain("|webinar.ru|") }, Action(Discard) };Rule { Matches { Domain("|spoti.fi|") }, Action(Discard) };Rule { Matches { Domain("|mind.org.uk|") }, Action(Discard) };Rule { Matches { Domain("|auswaertiges-amt.de|") }, Action(Discard) };Rule { Matches { Domain("|mypurecloud.com|") }, Action(Discard) };Rule { Matches { Domain("|hikvision.com|") }, Action(Discard) };Rule { Matches { Domain("|34sp.com|") }, Action(Discard) };Rule { Matches { Domain("|uri.edu|") }, Action(Discard) };Rule { Matches { Domain("|safedk.com|") }, Action(Discard) };Rule { Matches { Domain("|piaohua.com|") }, Action(Discard) };Rule { Matches { Domain("|soso.com|") }, Action(Discard) };Rule { Matches { Domain("|masslive.com|") }, Action(Discard) };Rule { Matches { Domain("|postbank.de|") }, Action(Discard) };Rule { Matches { Domain("|bonanza.com|") }, Action(Discard) };Rule { Matches { Domain("|fosshub.com|") }, Action(Discard) };Rule { Matches { Domain("|uceprotect.net|") }, Action(Discard) };Rule { Matches { Domain("|forthnet.gr|") }, Action(Discard) };Rule { Matches { Domain("|masterhost.ru|") }, Action(Discard) };Rule { Matches { Domain("|belfasttelegraph.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|klevu.com|") }, Action(Discard) };Rule { Matches { Domain("|iq.com|") }, Action(Discard) };Rule { Matches { Domain("|whmcs.com|") }, Action(Discard) };Rule { Matches { Domain("|contentstack.io|") }, Action(Discard) };Rule { Matches { Domain("|daraz.com.bd|") }, Action(Discard) };Rule { Matches { Domain("|acsbapp.com|") }, Action(Discard) };Rule { Matches { Domain("|pstatic.net|") }, Action(Discard) };Rule { Matches { Domain("|fastly-masque.net|") }, Action(Discard) };Rule { Matches { Domain("|iciba.com|") }, Action(Discard) };Rule { Matches { Domain("|sainsburys.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|hotukdeals.com|") }, Action(Discard) };Rule { Matches { Domain("|druva.com|") }, Action(Discard) };Rule { Matches { Domain("|indriverapp.com|") }, Action(Discard) };Rule { Matches { Domain("|etoland.co.kr|") }, Action(Discard) };Rule { Matches { Domain("|itsm365.com|") }, Action(Discard) };Rule { Matches { Domain("|vista.com|") }, Action(Discard) };Rule { Matches { Domain("|clamav.net|") }, Action(Discard) };Rule { Matches { Domain("|elderscrollsonline.com|") }, Action(Discard) };Rule { Matches { Domain("|digitgaming.com|") }, Action(Discard) };Rule { Matches { Domain("|swiftserve.com|") }, Action(Discard) };Rule { Matches { Domain("|logitech.io|") }, Action(Discard) };Rule { Matches { Domain("|hltv.org|") }, Action(Discard) };Rule { Matches { Domain("|downyi.com|") }, Action(Discard) };Rule { Matches { Domain("|amplience.net|") }, Action(Discard) };Rule { Matches { Domain("|dc.com|") }, Action(Discard) };Rule { Matches { Domain("|krushmedia.com|") }, Action(Discard) };Rule { Matches { Domain("|wyborcza.pl|") }, Action(Discard) };Rule { Matches { Domain("|google.com.gt|") }, Action(Discard) };Rule { Matches { Domain("|onepeloton.com|") }, Action(Discard) };Rule { Matches { Domain("|tn.gov.in|") }, Action(Discard) };Rule { Matches { Domain("|stylecaster.com|") }, Action(Discard) };Rule { Matches { Domain("|nflxext.com|") }, Action(Discard) };Rule { Matches { Domain("|tongtool.com|") }, Action(Discard) };Rule { Matches { Domain("|ebay.fr|") }, Action(Discard) };Rule { Matches { Domain("|cochrane.org|") }, Action(Discard) };Rule { Matches { Domain("|edutopia.org|") }, Action(Discard) };Rule { Matches { Domain("|uwm.edu|") }, Action(Discard) };Rule { Matches { Domain("|society6.com|") }, Action(Discard) };Rule { Matches { Domain("|hellofresh.com|") }, Action(Discard) };Rule { Matches { Domain("|kahoot.com|") }, Action(Discard) };Rule { Matches { Domain("|webinarjam.com|") }, Action(Discard) };Rule { Matches { Domain("|appmaster.io|") }, Action(Discard) };Rule { Matches { Domain("|eatthis.com|") }, Action(Discard) };Rule { Matches { Domain("|ctrls.in|") }, Action(Discard) };Rule { Matches { Domain("|splice.com|") }, Action(Discard) };Rule { Matches { Domain("|webvenadvdesign.com|") }, Action(Discard) };Rule { Matches { Domain("|ebaystatic.com|") }, Action(Discard) };Rule { Matches { Domain("|unece.org|") }, Action(Discard) };Rule { Matches { Domain("|abc7news.com|") }, Action(Discard) };Rule { Matches { Domain("|dnsgcore.com|") }, Action(Discard) };Rule { Matches { Domain("|graniru.info|") }, Action(Discard) };Rule { Matches { Domain("|cabq.gov|") }, Action(Discard) };Rule { Matches { Domain("|uni-tuebingen.de|") }, Action(Discard) };Rule { Matches { Domain("|notebookcheck.net|") }, Action(Discard) };Rule { Matches { Domain("|online-video-cutter.com|") }, Action(Discard) };Rule { Matches { Domain("|justhost.com|") }, Action(Discard) };Rule { Matches { Domain("|alibaba.ir|") }, Action(Discard) };Rule { Matches { Domain("|exploratorium.edu|") }, Action(Discard) };Rule { Matches { Domain("|slt.lk|") }, Action(Discard) };Rule { Matches { Domain("|bris.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|javlibrary.com|") }, Action(Discard) };Rule { Matches { Domain("|banesconline.com|") }, Action(Discard) };Rule { Matches { Domain("|barclays.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|gnupg.org|") }, Action(Discard) };Rule { Matches { Domain("|fitorf.ru|") }, Action(Discard) };Rule { Matches { Domain("|uoguelph.ca|") }, Action(Discard) };Rule { Matches { Domain("|mamba.ru|") }, Action(Discard) };Rule { Matches { Domain("|besthookupwebsites.org|") }, Action(Discard) };Rule { Matches { Domain("|pirate-bays.net|") }, Action(Discard) };Rule { Matches { Domain("|eklablog.com|") }, Action(Discard) };Rule { Matches { Domain("|die.net|") }, Action(Discard) };Rule { Matches { Domain("|advatravel.com|") }, Action(Discard) };Rule { Matches { Domain("|bath.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|volkskrant.nl|") }, Action(Discard) };Rule { Matches { Domain("|dns-rus.net|") }, Action(Discard) };Rule { Matches { Domain("|snapwidget.com|") }, Action(Discard) };Rule { Matches { Domain("|authorstream.com|") }, Action(Discard) };Rule { Matches { Domain("|chevron.com|") }, Action(Discard) };Rule { Matches { Domain("|mdr.de|") }, Action(Discard) };Rule { Matches { Domain("|aadika.xyz|") }, Action(Discard) };Rule { Matches { Domain("|samr.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|binghamton.edu|") }, Action(Discard) };Rule { Matches { Domain("|flysheep6.com|") }, Action(Discard) };Rule { Matches { Domain("|belkin.com|") }, Action(Discard) };Rule { Matches { Domain("|f5.com|") }, Action(Discard) };Rule { Matches { Domain("|ceskatelevize.cz|") }, Action(Discard) };Rule { Matches { Domain("|sysu.edu.cn|") }, Action(Discard) };Rule { Matches { Domain("|imsbiz.com|") }, Action(Discard) };Rule { Matches { Domain("|findarticles.com|") }, Action(Discard) };Rule { Matches { Domain("|poets.org|") }, Action(Discard) };Rule { Matches { Domain("|boomtrain.com|") }, Action(Discard) };Rule { Matches { Domain("|i18n-pglstatp.com|") }, Action(Discard) };Rule { Matches { Domain("|nflximg.net|") }, Action(Discard) };Rule { Matches { Domain("|techdirt.com|") }, Action(Discard) };Rule { Matches { Domain("|anilist.co|") }, Action(Discard) };Rule { Matches { Domain("|dict.cn|") }, Action(Discard) };Rule { Matches { Domain("|du.edu|") }, Action(Discard) };Rule { Matches { Domain("|thothub.to|") }, Action(Discard) };Rule { Matches { Domain("|googlecode.com|") }, Action(Discard) };Rule { Matches { Domain("|53kf.com|") }, Action(Discard) };Rule { Matches { Domain("|acwing.com|") }, Action(Discard) };Rule { Matches { Domain("|ardc.net|") }, Action(Discard) };Rule { Matches { Domain("|xiaomiyoupin.com|") }, Action(Discard) };Rule { Matches { Domain("|bing.net|") }, Action(Discard) };Rule { Matches { Domain("|financesonline.com|") }, Action(Discard) };Rule { Matches { Domain("|ebaumsworld.com|") }, Action(Discard) };Rule { Matches { Domain("|beatstars.com|") }, Action(Discard) };Rule { Matches { Domain("|abc7chicago.com|") }, Action(Discard) };Rule { Matches { Domain("|3322.net|") }, Action(Discard) };Rule { Matches { Domain("|agilent.com|") }, Action(Discard) };Rule { Matches { Domain("|auone.jp|") }, Action(Discard) };Rule { Matches { Domain("|rockfin.com|") }, Action(Discard) };Rule { Matches { Domain("|lxdns.info|") }, Action(Discard) };Rule { Matches { Domain("|ccgg1.com|") }, Action(Discard) };Rule { Matches { Domain("|aihelp.net|") }, Action(Discard) };Rule { Matches { Domain("|gazzetta.gr|") }, Action(Discard) };Rule { Matches { Domain("|acorns.com|") }, Action(Discard) };Rule { Matches { Domain("|deakin.edu.au|") }, Action(Discard) };Rule { Matches { Domain("|louisville.edu|") }, Action(Discard) };Rule { Matches { Domain("|sctv.ch|") }, Action(Discard) };Rule { Matches { Domain("|cn.ru|") }, Action(Discard) };Rule { Matches { Domain("|wbs-law.de|") }, Action(Discard) };Rule { Matches { Domain("|nau.edu|") }, Action(Discard) };Rule { Matches { Domain("|tribune.com.pk|") }, Action(Discard) };Rule { Matches { Domain("|funnyjunk.com|") }, Action(Discard) };Rule { Matches { Domain("|jutarnji.hr|") }, Action(Discard) };Rule { Matches { Domain("|sharecare.com|") }, Action(Discard) };Rule { Matches { Domain("|nysenate.gov|") }, Action(Discard) };Rule { Matches { Domain("|chicago.gov|") }, Action(Discard) };Rule { Matches { Domain("|material.io|") }, Action(Discard) };Rule { Matches { Domain("|tube8.com|") }, Action(Discard) };Rule { Matches { Domain("|microsoftstream.com|") }, Action(Discard) };Rule { Matches { Domain("|thenational.ae|") }, Action(Discard) };Rule { Matches { Domain("|dvrlists.com|") }, Action(Discard) };Rule { Matches { Domain("|mint.com|") }, Action(Discard) };Rule { Matches { Domain("|niagahoster.com|") }, Action(Discard) };Rule { Matches { Domain("|afrinic.net|") }, Action(Discard) };Rule { Matches { Domain("|axtel.net|") }, Action(Discard) };Rule { Matches { Domain("|avant.si|") }, Action(Discard) };Rule { Matches { Domain("|asics.com|") }, Action(Discard) };Rule { Matches { Domain("|moodysanalytics.com|") }, Action(Discard) };Rule { Matches { Domain("|actblue.com|") }, Action(Discard) };Rule { Matches { Domain("|sierraclub.org|") }, Action(Discard) };Rule { Matches { Domain("|contentmarketinginstitute.com|") }, Action(Discard) };Rule { Matches { Domain("|wellandgood.com|") }, Action(Discard) };Rule { Matches { Domain("|innogames.de|") }, Action(Discard) };Rule { Matches { Domain("|rstudio.com|") }, Action(Discard) };Rule { Matches { Domain("|archives-ouvertes.fr|") }, Action(Discard) };Rule { Matches { Domain("|ibomma.cx|") }, Action(Discard) };Rule { Matches { Domain("|opendemocracy.net|") }, Action(Discard) };Rule { Matches { Domain("|ymaws.com|") }, Action(Discard) };Rule { Matches { Domain("|admhmao.ru|") }, Action(Discard) };Rule { Matches { Domain("|pgatour.com|") }, Action(Discard) };Rule { Matches { Domain("|tennoudai.net|") }, Action(Discard) };Rule { Matches { Domain("|zto.com|") }, Action(Discard) };Rule { Matches { Domain("|walmartdigital.cl|") }, Action(Discard) };Rule { Matches { Domain("|mediamarkt.de|") }, Action(Discard) };Rule { Matches { Domain("|ravelry.com|") }, Action(Discard) };Rule { Matches { Domain("|uchile.cl|") }, Action(Discard) };Rule { Matches { Domain("|onliner.by|") }, Action(Discard) };Rule { Matches { Domain("|gdzwfw.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|llnw.net|") }, Action(Discard) };Rule { Matches { Domain("|mobilefuse.com|") }, Action(Discard) };Rule { Matches { Domain("|rki.de|") }, Action(Discard) };Rule { Matches { Domain("|mountsinai.org|") }, Action(Discard) };Rule { Matches { Domain("|centene.com|") }, Action(Discard) };Rule { Matches { Domain("|fairmont.com|") }, Action(Discard) };Rule { Matches { Domain("|rentcafe.com|") }, Action(Discard) };Rule { Matches { Domain("|gitbook.com|") }, Action(Discard) };Rule { Matches { Domain("|queniuyk.com|") }, Action(Discard) };Rule { Matches { Domain("|bytedns.com|") }, Action(Discard) };Rule { Matches { Domain("|mmstat.com|") }, Action(Discard) };Rule { Matches { Domain("|bizmrg.com|") }, Action(Discard) };Rule { Matches { Domain("|greatschools.org|") }, Action(Discard) };Rule { Matches { Domain("|maxpreps.com|") }, Action(Discard) };Rule { Matches { Domain("|kenh14.vn|") }, Action(Discard) };Rule { Matches { Domain("|lumenlearning.com|") }, Action(Discard) };Rule { Matches { Domain("|europeana.eu|") }, Action(Discard) };Rule { Matches { Domain("|oscars.org|") }, Action(Discard) };Rule { Matches { Domain("|ultradns.info|") }, Action(Discard) };Rule { Matches { Domain("|tv-asahi.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|cashparking.com|") }, Action(Discard) };Rule { Matches { Domain("|mybigcommerce.com|") }, Action(Discard) };Rule { Matches { Domain("|ghostery.net|") }, Action(Discard) };Rule { Matches { Domain("|irondns.net|") }, Action(Discard) };Rule { Matches { Domain("|lgyy.cc|") }, Action(Discard) };Rule { Matches { Domain("|cox.com|") }, Action(Discard) };Rule { Matches { Domain("|thewindowsclub.com|") }, Action(Discard) };Rule { Matches { Domain("|smule.com|") }, Action(Discard) };Rule { Matches { Domain("|downcc.com|") }, Action(Discard) };Rule { Matches { Domain("|hola.com|") }, Action(Discard) };Rule { Matches { Domain("|merkur.de|") }, Action(Discard) };Rule { Matches { Domain("|ulule.com|") }, Action(Discard) };Rule { Matches { Domain("|kapook.com|") }, Action(Discard) };Rule { Matches { Domain("|fujifilm.com|") }, Action(Discard) };Rule { Matches { Domain("|truex.com|") }, Action(Discard) };Rule { Matches { Domain("|on.aws|") }, Action(Discard) };Rule { Matches { Domain("|soom.la|") }, Action(Discard) };Rule { Matches { Domain("|r7.com|") }, Action(Discard) };Rule { Matches { Domain("|e2ma.net|") }, Action(Discard) };Rule { Matches { Domain("|mhanational.org|") }, Action(Discard) };Rule { Matches { Domain("|revenuecat.com|") }, Action(Discard) };Rule { Matches { Domain("|mediapost.com|") }, Action(Discard) };Rule { Matches { Domain("|ziggo.nl|") }, Action(Discard) };Rule { Matches { Domain("|bukalapak.com|") }, Action(Discard) };Rule { Matches { Domain("|fillr.com|") }, Action(Discard) };Rule { Matches { Domain("|churchcenter.com|") }, Action(Discard) };Rule { Matches { Domain("|trade.gov|") }, Action(Discard) };Rule { Matches { Domain("|gusto.com|") }, Action(Discard) };Rule { Matches { Domain("|ktnet.kg|") }, Action(Discard) };Rule { Matches { Domain("|potterybarn.com|") }, Action(Discard) };Rule { Matches { Domain("|concordia.ca|") }, Action(Discard) };Rule { Matches { Domain("|menlosecurity.com|") }, Action(Discard) };Rule { Matches { Domain("|kinderjoycrazyfriendszabawanacalego.com.pl|") }, Action(Discard) };Rule { Matches { Domain("|glassdoor.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|canaryis.com|") }, Action(Discard) };Rule { Matches { Domain("|firstdata.com|") }, Action(Discard) };Rule { Matches { Domain("|vpsvc.com|") }, Action(Discard) };Rule { Matches { Domain("|nexcess.net|") }, Action(Discard) };Rule { Matches { Domain("|yourstory.com|") }, Action(Discard) };Rule { Matches { Domain("|wolt.com|") }, Action(Discard) };Rule { Matches { Domain("|solidworks.com|") }, Action(Discard) };Rule { Matches { Domain("|egais.ru|") }, Action(Discard) };Rule { Matches { Domain("|neu.edu|") }, Action(Discard) };Rule { Matches { Domain("|rytr.me|") }, Action(Discard) };Rule { Matches { Domain("|radio.com|") }, Action(Discard) };Rule { Matches { Domain("|cnnbrasil.com.br|") }, Action(Discard) };Rule { Matches { Domain("|xmission.com|") }, Action(Discard) };Rule { Matches { Domain("|autoteka.ru|") }, Action(Discard) };Rule { Matches { Domain("|renren.com|") }, Action(Discard) };Rule { Matches { Domain("|educative.io|") }, Action(Discard) };Rule { Matches { Domain("|avsee.in|") }, Action(Discard) };Rule { Matches { Domain("|mail-archive.com|") }, Action(Discard) };Rule { Matches { Domain("|wikipedia.com|") }, Action(Discard) };Rule { Matches { Domain("|hosted-by-discourse.com|") }, Action(Discard) };Rule { Matches { Domain("|aralego.com|") }, Action(Discard) };Rule { Matches { Domain("|nyt.net|") }, Action(Discard) };Rule { Matches { Domain("|irishexaminer.com|") }, Action(Discard) };Rule { Matches { Domain("|google.co.cr|") }, Action(Discard) };Rule { Matches { Domain("|publix.com|") }, Action(Discard) };Rule { Matches { Domain("|socialmediaexaminer.com|") }, Action(Discard) };Rule { Matches { Domain("|jma.go.jp|") }, Action(Discard) };Rule { Matches { Domain("|flourish.studio|") }, Action(Discard) };Rule { Matches { Domain("|natlawreview.com|") }, Action(Discard) };Rule { Matches { Domain("|rsf.org|") }, Action(Discard) };Rule { Matches { Domain("|kugou.net|") }, Action(Discard) };Rule { Matches { Domain("|almasryalyoum.com|") }, Action(Discard) };Rule { Matches { Domain("|uottawa.ca|") }, Action(Discard) };Rule { Matches { Domain("|optimole.com|") }, Action(Discard) };Rule { Matches { Domain("|saramin.co.kr|") }, Action(Discard) };Rule { Matches { Domain("|fau.edu|") }, Action(Discard) };Rule { Matches { Domain("|famitsu.com|") }, Action(Discard) };Rule { Matches { Domain("|evraz.com|") }, Action(Discard) };Rule { Matches { Domain("|objectrocket.com|") }, Action(Discard) };Rule { Matches { Domain("|homeip.net|") }, Action(Discard) };Rule { Matches { Domain("|buaa.edu.cn|") }, Action(Discard) };Rule { Matches { Domain("|lawtime.cn|") }, Action(Discard) };Rule { Matches { Domain("|afthemes.com|") }, Action(Discard) };Rule { Matches { Domain("|kongfz.com|") }, Action(Discard) };Rule { Matches { Domain("|fresha.com|") }, Action(Discard) };Rule { Matches { Domain("|incapsula.com|") }, Action(Discard) };Rule { Matches { Domain("|tass.com|") }, Action(Discard) };Rule { Matches { Domain("|aacrjournals.org|") }, Action(Discard) };Rule { Matches { Domain("|elcorteingles.es|") }, Action(Discard) };Rule { Matches { Domain("|shaw.ca|") }, Action(Discard) };Rule { Matches { Domain("|sima-land.ru|") }, Action(Discard) };Rule { Matches { Domain("|oxfam.org|") }, Action(Discard) };Rule { Matches { Domain("|plrm.zone|") }, Action(Discard) };Rule { Matches { Domain("|webhd.cc|") }, Action(Discard) };Rule { Matches { Domain("|goszakup.gov.kz|") }, Action(Discard) };Rule { Matches { Domain("|vidverto.io|") }, Action(Discard) };Rule { Matches { Domain("|ntv.com.tr|") }, Action(Discard) };Rule { Matches { Domain("|nurxxx.mobi|") }, Action(Discard) };Rule { Matches { Domain("|rp-online.de|") }, Action(Discard) };Rule { Matches { Domain("|thriveglobal.com|") }, Action(Discard) };Rule { Matches { Domain("|52poke.com|") }, Action(Discard) };Rule { Matches { Domain("|huawei.ru|") }, Action(Discard) };Rule { Matches { Domain("|aamc.org|") }, Action(Discard) };Rule { Matches { Domain("|musinsa.com|") }, Action(Discard) };Rule { Matches { Domain("|bejson.com|") }, Action(Discard) };Rule { Matches { Domain("|digikey.com|") }, Action(Discard) };Rule { Matches { Domain("|ezoic.com|") }, Action(Discard) };Rule { Matches { Domain("|ulaval.ca|") }, Action(Discard) };Rule { Matches { Domain("|blossomthemes.com|") }, Action(Discard) };Rule { Matches { Domain("|inquisitr.com|") }, Action(Discard) };Rule { Matches { Domain("|nrich.ai|") }, Action(Discard) };Rule { Matches { Domain("|jal.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|moodys.com|") }, Action(Discard) };Rule { Matches { Domain("|bizrate.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|taoa.com|") }, Action(Discard) };Rule { Matches { Domain("|wnyc.org|") }, Action(Discard) };Rule { Matches { Domain("|geotab.com|") }, Action(Discard) };Rule { Matches { Domain("|invideo.io|") }, Action(Discard) };Rule { Matches { Domain("|itainews.com|") }, Action(Discard) };Rule { Matches { Domain("|nuri.net|") }, Action(Discard) };Rule { Matches { Domain("|comenity.net|") }, Action(Discard) };Rule { Matches { Domain("|serverpod.net|") }, Action(Discard) };Rule { Matches { Domain("|vectorstock.com|") }, Action(Discard) };Rule { Matches { Domain("|adcolony.xyz|") }, Action(Discard) };Rule { Matches { Domain("|mindmeister.com|") }, Action(Discard) };Rule { Matches { Domain("|adobecqms.net|") }, Action(Discard) };Rule { Matches { Domain("|forbes.ru|") }, Action(Discard) };Rule { Matches { Domain("|toronto.ca|") }, Action(Discard) };Rule { Matches { Domain("|mini4k.com|") }, Action(Discard) };Rule { Matches { Domain("|nicepage.com|") }, Action(Discard) };Rule { Matches { Domain("|auctollo.com|") }, Action(Discard) };Rule { Matches { Domain("|thoughgaffer.uno|") }, Action(Discard) };Rule { Matches { Domain("|anthem.com|") }, Action(Discard) };Rule { Matches { Domain("|plex.bz|") }, Action(Discard) };Rule { Matches { Domain("|au.dk|") }, Action(Discard) };Rule { Matches { Domain("|godaddysites.com|") }, Action(Discard) };Rule { Matches { Domain("|faucetpay.io|") }, Action(Discard) };Rule { Matches { Domain("|cgpeers.to|") }, Action(Discard) };Rule { Matches { Domain("|ferrari.com|") }, Action(Discard) };Rule { Matches { Domain("|88hd.com|") }, Action(Discard) };Rule { Matches { Domain("|humanesociety.org|") }, Action(Discard) };Rule { Matches { Domain("|visualsoft.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|echosat.net|") }, Action(Discard) };Rule { Matches { Domain("|bolt.com|") }, Action(Discard) };Rule { Matches { Domain("|nationalinterest.org|") }, Action(Discard) };Rule { Matches { Domain("|smtp2go.com|") }, Action(Discard) };Rule { Matches { Domain("|laroza.one|") }, Action(Discard) };Rule { Matches { Domain("|nbrb.by|") }, Action(Discard) };Rule { Matches { Domain("|inet.co.th|") }, Action(Discard) };Rule { Matches { Domain("|hessen.de|") }, Action(Discard) };Rule { Matches { Domain("|rospotrebnadzor.ru|") }, Action(Discard) };Rule { Matches { Domain("|nbcchicago.com|") }, Action(Discard) };Rule { Matches { Domain("|hugedomainsdns.com|") }, Action(Discard) };Rule { Matches { Domain("|destatis.de|") }, Action(Discard) };Rule { Matches { Domain("|mobirise.com|") }, Action(Discard) };Rule { Matches { Domain("|rotld.ro|") }, Action(Discard) };Rule { Matches { Domain("|wacom.com|") }, Action(Discard) };Rule { Matches { Domain("|tubegalore.com|") }, Action(Discard) };Rule { Matches { Domain("|net-line.pro|") }, Action(Discard) };Rule { Matches { Domain("|clearbit.com|") }, Action(Discard) };Rule { Matches { Domain("|tinkercad.com|") }, Action(Discard) };Rule { Matches { Domain("|gbqofs.io|") }, Action(Discard) };Rule { Matches { Domain("|commonapp.org|") }, Action(Discard) };Rule { Matches { Domain("|healthaffairs.org|") }, Action(Discard) };Rule { Matches { Domain("|andbeyond.media|") }, Action(Discard) };Rule { Matches { Domain("|webstaurantstore.com|") }, Action(Discard) };Rule { Matches { Domain("|exdynsrv.com|") }, Action(Discard) };Rule { Matches { Domain("|lyricstranslate.com|") }, Action(Discard) };Rule { Matches { Domain("|pingsafe.live|") }, Action(Discard) };Rule { Matches { Domain("|walmartimages.com|") }, Action(Discard) };Rule { Matches { Domain("|streeteasy.com|") }, Action(Discard) };Rule { Matches { Domain("|hitmotop.com|") }, Action(Discard) };Rule { Matches { Domain("|uni-muenster.de|") }, Action(Discard) };Rule { Matches { Domain("|zadarma.com|") }, Action(Discard) };Rule { Matches { Domain("|logrocket.com|") }, Action(Discard) };Rule { Matches { Domain("|ttlink.com|") }, Action(Discard) };Rule { Matches { Domain("|solemik.com|") }, Action(Discard) };Rule { Matches { Domain("|braintreepayments.com|") }, Action(Discard) };Rule { Matches { Domain("|dazn.com|") }, Action(Discard) };Rule { Matches { Domain("|alimama.com|") }, Action(Discard) };Rule { Matches { Domain("|hearstapps.com|") }, Action(Discard) };Rule { Matches { Domain("|swiggy.com|") }, Action(Discard) };Rule { Matches { Domain("|triblive.com|") }, Action(Discard) };Rule { Matches { Domain("|blip.tv|") }, Action(Discard) };Rule { Matches { Domain("|upf.edu|") }, Action(Discard) };Rule { Matches { Domain("|purewow.com|") }, Action(Discard) };Rule { Matches { Domain("|reolink.com|") }, Action(Discard) };Rule { Matches { Domain("|mlsmatrix.com|") }, Action(Discard) };Rule { Matches { Domain("|game-mode.net|") }, Action(Discard) };Rule { Matches { Domain("|governmentjobs.com|") }, Action(Discard) };Rule { Matches { Domain("|tataidc.co.in|") }, Action(Discard) };Rule { Matches { Domain("|ekangw.net|") }, Action(Discard) };Rule { Matches { Domain("|xiti.com|") }, Action(Discard) };Rule { Matches { Domain("|justetf.com|") }, Action(Discard) };Rule { Matches { Domain("|mackeeper.com|") }, Action(Discard) };Rule { Matches { Domain("|voflix.com|") }, Action(Discard) };Rule { Matches { Domain("|vaticannews.va|") }, Action(Discard) };Rule { Matches { Domain("|dns.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|vg247.com|") }, Action(Discard) };Rule { Matches { Domain("|refinitiv.com|") }, Action(Discard) };Rule { Matches { Domain("|dnszi.com|") }, Action(Discard) };Rule { Matches { Domain("|slickstream.com|") }, Action(Discard) };Rule { Matches { Domain("|movies-watch.com.pk|") }, Action(Discard) };Rule { Matches { Domain("|ngxcld.com|") }, Action(Discard) };Rule { Matches { Domain("|mykronos.com|") }, Action(Discard) };Rule { Matches { Domain("|atptour.com|") }, Action(Discard) };Rule { Matches { Domain("|illumina.com|") }, Action(Discard) };Rule { Matches { Domain("|universityofcalifornia.edu|") }, Action(Discard) };Rule { Matches { Domain("|tmon.co.kr|") }, Action(Discard) };Rule { Matches { Domain("|wmcdp.io|") }, Action(Discard) };Rule { Matches { Domain("|lx100.vip|") }, Action(Discard) };Rule { Matches { Domain("|trafficroots.com|") }, Action(Discard) };Rule { Matches { Domain("|quidco.com|") }, Action(Discard) };Rule { Matches { Domain("|fonts.net|") }, Action(Discard) };Rule { Matches { Domain("|mcx.ru|") }, Action(Discard) };Rule { Matches { Domain("|geo.tv|") }, Action(Discard) };Rule { Matches { Domain("|555dd10.com|") }, Action(Discard) };Rule { Matches { Domain("|samsungrs.com|") }, Action(Discard) };Rule { Matches { Domain("|y8.com|") }, Action(Discard) };Rule { Matches { Domain("|globalsources.com|") }, Action(Discard) };Rule { Matches { Domain("|ncctvgroup.com|") }, Action(Discard) };Rule { Matches { Domain("|charitynavigator.org|") }, Action(Discard) };Rule { Matches { Domain("|hbsrsksy.cn|") }, Action(Discard) };Rule { Matches { Domain("|northjersey.com|") }, Action(Discard) };Rule { Matches { Domain("|edgecast.com|") }, Action(Discard) };Rule { Matches { Domain("|eero.com|") }, Action(Discard) };Rule { Matches { Domain("|vhostgo.com|") }, Action(Discard) };Rule { Matches { Domain("|www.gov.pl|") }, Action(Discard) };Rule { Matches { Domain("|up.pt|") }, Action(Discard) };Rule { Matches { Domain("|szlcsc.com|") }, Action(Discard) };Rule { Matches { Domain("|accaglobal.com|") }, Action(Discard) };Rule { Matches { Domain("|samregion.ru|") }, Action(Discard) };Rule { Matches { Domain("|warframe.com|") }, Action(Discard) };Rule { Matches { Domain("|k-state.edu|") }, Action(Discard) };Rule { Matches { Domain("|asuswebstorage.com|") }, Action(Discard) };Rule { Matches { Domain("|asuransiastra.com|") }, Action(Discard) };Rule { Matches { Domain("|devicetask.com|") }, Action(Discard) };Rule { Matches { Domain("|tpbid.com|") }, Action(Discard) };Rule { Matches { Domain("|litix.io|") }, Action(Discard) };Rule { Matches { Domain("|isbank.com.tr|") }, Action(Discard) };Rule { Matches { Domain("|yjbys.com|") }, Action(Discard) };Rule { Matches { Domain("|krebsonsecurity.com|") }, Action(Discard) };Rule { Matches { Domain("|cbsaavideo.com|") }, Action(Discard) };Rule { Matches { Domain("|panorama9.com|") }, Action(Discard) };Rule { Matches { Domain("|dailyherald.com|") }, Action(Discard) };Rule { Matches { Domain("|ledger.com|") }, Action(Discard) };Rule { Matches { Domain("|sussex.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|typing.com|") }, Action(Discard) };Rule { Matches { Domain("|sarenet.es|") }, Action(Discard) };Rule { Matches { Domain("|sonypictures.com|") }, Action(Discard) };Rule { Matches { Domain("|ldblog.jp|") }, Action(Discard) };Rule { Matches { Domain("|101domain.com|") }, Action(Discard) };Rule { Matches { Domain("|madison.com|") }, Action(Discard) };Rule { Matches { Domain("|volcengine.com|") }, Action(Discard) };Rule { Matches { Domain("|webcontentassessor.com|") }, Action(Discard) };Rule { Matches { Domain("|domestika.org|") }, Action(Discard) };Rule { Matches { Domain("|mayoclinic.com|") }, Action(Discard) };Rule { Matches { Domain("|playbuzz.com|") }, Action(Discard) };Rule { Matches { Domain("|bis.org|") }, Action(Discard) };Rule { Matches { Domain("|mokahr.com|") }, Action(Discard) };Rule { Matches { Domain("|ozbargain.com.au|") }, Action(Discard) };Rule { Matches { Domain("|librarything.com|") }, Action(Discard) };Rule { Matches { Domain("|jwpsrv.com|") }, Action(Discard) };Rule { Matches { Domain("|diva-portal.org|") }, Action(Discard) };Rule { Matches { Domain("|niceincontact.com|") }, Action(Discard) };Rule { Matches { Domain("|edureka.co|") }, Action(Discard) };Rule { Matches { Domain("|walkscore.com|") }, Action(Discard) };Rule { Matches { Domain("|google.jo|") }, Action(Discard) };Rule { Matches { Domain("|principal.com|") }, Action(Discard) };Rule { Matches { Domain("|rakuten-card.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|fuse-cloud.com|") }, Action(Discard) };Rule { Matches { Domain("|leigod.com|") }, Action(Discard) };Rule { Matches { Domain("|maxmind.com|") }, Action(Discard) };Rule { Matches { Domain("|sleepnumber.com|") }, Action(Discard) };Rule { Matches { Domain("|divvy.co|") }, Action(Discard) };Rule { Matches { Domain("|novelupdates.com|") }, Action(Discard) };Rule { Matches { Domain("|ninthdecimal.com|") }, Action(Discard) };Rule { Matches { Domain("|educba.com|") }, Action(Discard) };Rule { Matches { Domain("|donorbox.org|") }, Action(Discard) };Rule { Matches { Domain("|a.co|") }, Action(Discard) };Rule { Matches { Domain("|51test.net|") }, Action(Discard) };Rule { Matches { Domain("|newcastle.edu.au|") }, Action(Discard) };Rule { Matches { Domain("|rockwellcollins.com|") }, Action(Discard) };Rule { Matches { Domain("|mb-cosmos.com|") }, Action(Discard) };Rule { Matches { Domain("|vdsina.ru|") }, Action(Discard) };Rule { Matches { Domain("|transacme.com|") }, Action(Discard) };Rule { Matches { Domain("|nintendo.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|canvaslms.com|") }, Action(Discard) };Rule { Matches { Domain("|kent.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|iyfubh.com|") }, Action(Discard) };Rule { Matches { Domain("|nrf.com|") }, Action(Discard) };Rule { Matches { Domain("|idealo.de|") }, Action(Discard) };Rule { Matches { Domain("|oricon.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|vistaprint.com|") }, Action(Discard) };Rule { Matches { Domain("|interpol.int|") }, Action(Discard) };Rule { Matches { Domain("|iarc.fr|") }, Action(Discard) };Rule { Matches { Domain("|mercadolibre.com.pe|") }, Action(Discard) };Rule { Matches { Domain("|dreamwidth.org|") }, Action(Discard) };Rule { Matches { Domain("|dotvndns.com|") }, Action(Discard) };Rule { Matches { Domain("|hermes.com|") }, Action(Discard) };Rule { Matches { Domain("|in.gr|") }, Action(Discard) };Rule { Matches { Domain("|cityam.com|") }, Action(Discard) };Rule { Matches { Domain("|workday.com|") }, Action(Discard) };Rule { Matches { Domain("|cdnhwc7.com|") }, Action(Discard) };Rule { Matches { Domain("|kunlunar.com|") }, Action(Discard) };Rule { Matches { Domain("|novartis.com|") }, Action(Discard) };Rule { Matches { Domain("|hbomaxcdn.com|") }, Action(Discard) };Rule { Matches { Domain("|amazon.nl|") }, Action(Discard) };Rule { Matches { Domain("|cdw.com|") }, Action(Discard) };Rule { Matches { Domain("|vkuservideo.net|") }, Action(Discard) };Rule { Matches { Domain("|fanniemae.com|") }, Action(Discard) };Rule { Matches { Domain("|zhuaidei.com|") }, Action(Discard) };Rule { Matches { Domain("|punchng.com|") }, Action(Discard) };Rule { Matches { Domain("|ams.org|") }, Action(Discard) };Rule { Matches { Domain("|moodle.com|") }, Action(Discard) };Rule { Matches { Domain("|bkngs.com|") }, Action(Discard) };Rule { Matches { Domain("|petsmart.com|") }, Action(Discard) };Rule { Matches { Domain("|biblestudytools.com|") }, Action(Discard) };Rule { Matches { Domain("|jmu.edu|") }, Action(Discard) };Rule { Matches { Domain("|thomasnet.com|") }, Action(Discard) };Rule { Matches { Domain("|thedailystar.net|") }, Action(Discard) };Rule { Matches { Domain("|shopstyle.com|") }, Action(Discard) };Rule { Matches { Domain("|arkansas.gov|") }, Action(Discard) };Rule { Matches { Domain("|baesystems.com|") }, Action(Discard) };Rule { Matches { Domain("|wbs.legal|") }, Action(Discard) };Rule { Matches { Domain("|paulustanuri.com|") }, Action(Discard) };Rule { Matches { Domain("|assoc-amazon.com|") }, Action(Discard) };Rule { Matches { Domain("|pitchbook.com|") }, Action(Discard) };Rule { Matches { Domain("|swiftycdn.net|") }, Action(Discard) };Rule { Matches { Domain("|wccftech.com|") }, Action(Discard) };Rule { Matches { Domain("|stripes.com|") }, Action(Discard) };Rule { Matches { Domain("|hometalk.com|") }, Action(Discard) };Rule { Matches { Domain("|extendoffice.com|") }, Action(Discard) };Rule { Matches { Domain("|zoosk.com|") }, Action(Discard) };Rule { Matches { Domain("|cootlogix.com|") }, Action(Discard) };Rule { Matches { Domain("|love.ru|") }, Action(Discard) };Rule { Matches { Domain("|freshservice.com|") }, Action(Discard) };Rule { Matches { Domain("|signalr.net|") }, Action(Discard) };Rule { Matches { Domain("|betano.com|") }, Action(Discard) };Rule { Matches { Domain("|pb06e2-resources.com|") }, Action(Discard) };Rule { Matches { Domain("|delfi.lv|") }, Action(Discard) };Rule { Matches { Domain("|setn.com|") }, Action(Discard) };Rule { Matches { Domain("|ruankao.org.cn|") }, Action(Discard) };Rule { Matches { Domain("|factset.com|") }, Action(Discard) };Rule { Matches { Domain("|albany.edu|") }, Action(Discard) };Rule { Matches { Domain("|foxweather.com|") }, Action(Discard) };Rule { Matches { Domain("|wpi.edu|") }, Action(Discard) };Rule { Matches { Domain("|epi.org|") }, Action(Discard) };Rule { Matches { Domain("|reyrey.net|") }, Action(Discard) };Rule { Matches { Domain("|odu.edu|") }, Action(Discard) };Rule { Matches { Domain("|oilprice.com|") }, Action(Discard) };Rule { Matches { Domain("|carilionclinic.org|") }, Action(Discard) };Rule { Matches { Domain("|shopzilla.de|") }, Action(Discard) };Rule { Matches { Domain("|hentaifox.com|") }, Action(Discard) };Rule { Matches { Domain("|intal.uz|") }, Action(Discard) };Rule { Matches { Domain("|tuwien.ac.at|") }, Action(Discard) };Rule { Matches { Domain("|whoer.net|") }, Action(Discard) };Rule { Matches { Domain("|itsupport247.net|") }, Action(Discard) };Rule { Matches { Domain("|stspg-customer.com|") }, Action(Discard) };Rule { Matches { Domain("|kku.ac.th|") }, Action(Discard) };Rule { Matches { Domain("|christianitytoday.com|") }, Action(Discard) };Rule { Matches { Domain("|therealreal.com|") }, Action(Discard) };Rule { Matches { Domain("|bkqs.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|banamex.com|") }, Action(Discard) };Rule { Matches { Domain("|getdropbox.com|") }, Action(Discard) };Rule { Matches { Domain("|samsunghealth.com|") }, Action(Discard) };Rule { Matches { Domain("|b92.net|") }, Action(Discard) };Rule { Matches { Domain("|piktochart.com|") }, Action(Discard) };Rule { Matches { Domain("|charmin.com|") }, Action(Discard) };Rule { Matches { Domain("|fanpop.com|") }, Action(Discard) };Rule { Matches { Domain("|equant.net|") }, Action(Discard) };Rule { Matches { Domain("|rust-lang.org|") }, Action(Discard) };Rule { Matches { Domain("|nmsu.edu|") }, Action(Discard) };Rule { Matches { Domain("|dropboxstatic.com|") }, Action(Discard) };Rule { Matches { Domain("|dtic.mil|") }, Action(Discard) };Rule { Matches { Domain("|synthesia.io|") }, Action(Discard) };Rule { Matches { Domain("|txstate.edu|") }, Action(Discard) };Rule { Matches { Domain("|anaconda.com|") }, Action(Discard) };Rule { Matches { Domain("|pay.gov|") }, Action(Discard) };Rule { Matches { Domain("|alcmpn.com|") }, Action(Discard) };Rule { Matches { Domain("|harley-davidson.com|") }, Action(Discard) };Rule { Matches { Domain("|commerce.gov|") }, Action(Discard) };Rule { Matches { Domain("|e1.ru|") }, Action(Discard) };Rule { Matches { Domain("|star-telegram.com|") }, Action(Discard) };Rule { Matches { Domain("|econsultancy.com|") }, Action(Discard) };Rule { Matches { Domain("|diabetesjournals.org|") }, Action(Discard) };Rule { Matches { Domain("|merckgroup.com|") }, Action(Discard) };Rule { Matches { Domain("|piratbit.fun|") }, Action(Discard) };Rule { Matches { Domain("|lingxing.com|") }, Action(Discard) };Rule { Matches { Domain("|kerala.gov.in|") }, Action(Discard) };Rule { Matches { Domain("|vercel-dns.com|") }, Action(Discard) };Rule { Matches { Domain("|awin.com|") }, Action(Discard) };Rule { Matches { Domain("|pge.com|") }, Action(Discard) };Rule { Matches { Domain("|ig.com.br|") }, Action(Discard) };Rule { Matches { Domain("|auth.gr|") }, Action(Discard) };Rule { Matches { Domain("|incontact.com|") }, Action(Discard) };Rule { Matches { Domain("|family-simulators.io|") }, Action(Discard) };Rule { Matches { Domain("|penguin.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|neostrada.nl|") }, Action(Discard) };Rule { Matches { Domain("|redtubepremium.com|") }, Action(Discard) };Rule { Matches { Domain("|money.com|") }, Action(Discard) };Rule { Matches { Domain("|nutaku.com|") }, Action(Discard) };Rule { Matches { Domain("|crashplan.com|") }, Action(Discard) };Rule { Matches { Domain("|zamzar.com|") }, Action(Discard) };Rule { Matches { Domain("|720yun.com|") }, Action(Discard) };Rule { Matches { Domain("|eftydns.com|") }, Action(Discard) };Rule { Matches { Domain("|project-syndicate.org|") }, Action(Discard) };Rule { Matches { Domain("|onelink.to|") }, Action(Discard) };Rule { Matches { Domain("|siteground.eu|") }, Action(Discard) };Rule { Matches { Domain("|sp-prod.net|") }, Action(Discard) };Rule { Matches { Domain("|serasa.com.br|") }, Action(Discard) };Rule { Matches { Domain("|airbrake.io|") }, Action(Discard) };Rule { Matches { Domain("|konsol.pro|") }, Action(Discard) };Rule { Matches { Domain("|sape.ru|") }, Action(Discard) };Rule { Matches { Domain("|teepublic.com|") }, Action(Discard) };Rule { Matches { Domain("|xhamster2.com|") }, Action(Discard) };Rule { Matches { Domain("|positivepsychology.com|") }, Action(Discard) };Rule { Matches { Domain("|coschedule.com|") }, Action(Discard) };Rule { Matches { Domain("|bovada.lv|") }, Action(Discard) };Rule { Matches { Domain("|guardian.ng|") }, Action(Discard) };Rule { Matches { Domain("|allkpop.com|") }, Action(Discard) };Rule { Matches { Domain("|webnode.page|") }, Action(Discard) };Rule { Matches { Domain("|sans.org|") }, Action(Discard) };Rule { Matches { Domain("|webim.ru|") }, Action(Discard) };Rule { Matches { Domain("|bama.ir|") }, Action(Discard) };Rule { Matches { Domain("|trustedreviews.com|") }, Action(Discard) };Rule { Matches { Domain("|ohsu.edu|") }, Action(Discard) };Rule { Matches { Domain("|corpinter.net|") }, Action(Discard) };Rule { Matches { Domain("|ru.net|") }, Action(Discard) };Rule { Matches { Domain("|2046acg.com|") }, Action(Discard) };Rule { Matches { Domain("|igg.com|") }, Action(Discard) };Rule { Matches { Domain("|vgmlinks.fun|") }, Action(Discard) };Rule { Matches { Domain("|flagcounter.com|") }, Action(Discard) };Rule { Matches { Domain("|ixbt.com|") }, Action(Discard) };Rule { Matches { Domain("|kali.org|") }, Action(Discard) };Rule { Matches { Domain("|appcues.net|") }, Action(Discard) };Rule { Matches { Domain("|researchandmarkets.com|") }, Action(Discard) };Rule { Matches { Domain("|synology.me|") }, Action(Discard) };Rule { Matches { Domain("|nextdoor.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|irecommend.ru|") }, Action(Discard) };Rule { Matches { Domain("|crazypanda.ru|") }, Action(Discard) };Rule { Matches { Domain("|corpnet.pl|") }, Action(Discard) };Rule { Matches { Domain("|ntdm8.com|") }, Action(Discard) };Rule { Matches { Domain("|mext.go.jp|") }, Action(Discard) };Rule { Matches { Domain("|womansday.com|") }, Action(Discard) };Rule { Matches { Domain("|digitaleast.mobi|") }, Action(Discard) };Rule { Matches { Domain("|mponline.gov.in|") }, Action(Discard) };Rule { Matches { Domain("|ishuquge.org|") }, Action(Discard) };Rule { Matches { Domain("|mondaq.com|") }, Action(Discard) };Rule { Matches { Domain("|tiscali.it|") }, Action(Discard) };Rule { Matches { Domain("|earthday.org|") }, Action(Discard) };Rule { Matches { Domain("|odn.ne.jp|") }, Action(Discard) };Rule { Matches { Domain("|calpoly.edu|") }, Action(Discard) };Rule { Matches { Domain("|ulisboa.pt|") }, Action(Discard) };Rule { Matches { Domain("|kissasian.li|") }, Action(Discard) };Rule { Matches { Domain("|dxy.cn|") }, Action(Discard) };Rule { Matches { Domain("|d1xz.net|") }, Action(Discard) };Rule { Matches { Domain("|adorama.com|") }, Action(Discard) };Rule { Matches { Domain("|dydytt.net|") }, Action(Discard) };Rule { Matches { Domain("|urban.org|") }, Action(Discard) };Rule { Matches { Domain("|art19.com|") }, Action(Discard) };Rule { Matches { Domain("|fabric.com|") }, Action(Discard) };Rule { Matches { Domain("|ndsu.edu|") }, Action(Discard) };Rule { Matches { Domain("|jetpack.com|") }, Action(Discard) };Rule { Matches { Domain("|haplat.net|") }, Action(Discard) };Rule { Matches { Domain("|cngold.org|") }, Action(Discard) };Rule { Matches { Domain("|multihost.ru|") }, Action(Discard) };Rule { Matches { Domain("|bazos.sk|") }, Action(Discard) };Rule { Matches { Domain("|ladepeche.fr|") }, Action(Discard) };Rule { Matches { Domain("|selcloud.ru|") }, Action(Discard) };Rule { Matches { Domain("|ycpai.cn|") }, Action(Discard) };Rule { Matches { Domain("|contentful.com|") }, Action(Discard) };Rule { Matches { Domain("|namava.ir|") }, Action(Discard) };Rule { Matches { Domain("|huyatvns.com|") }, Action(Discard) };Rule { Matches { Domain("|bt1207ka.top|") }, Action(Discard) };Rule { Matches { Domain("|ahram.org.eg|") }, Action(Discard) };Rule { Matches { Domain("|doximity.com|") }, Action(Discard) };Rule { Matches { Domain("|ck.page|") }, Action(Discard) };Rule { Matches { Domain("|bloomsbury.com|") }, Action(Discard) };Rule { Matches { Domain("|argentina.gob.ar|") }, Action(Discard) };Rule { Matches { Domain("|food52.com|") }, Action(Discard) };Rule { Matches { Domain("|militarytimes.com|") }, Action(Discard) };Rule { Matches { Domain("|justanswer.com|") }, Action(Discard) };Rule { Matches { Domain("|2k.com|") }, Action(Discard) };Rule { Matches { Domain("|ssllabs.com|") }, Action(Discard) };Rule { Matches { Domain("|cheatsheet.com|") }, Action(Discard) };Rule { Matches { Domain("|pcdn.co|") }, Action(Discard) };Rule { Matches { Domain("|gaytor.rent|") }, Action(Discard) };Rule { Matches { Domain("|tec.mx|") }, Action(Discard) };Rule { Matches { Domain("|gu.se|") }, Action(Discard) };Rule { Matches { Domain("|seattle.gov|") }, Action(Discard) };Rule { Matches { Domain("|irandns.com|") }, Action(Discard) };Rule { Matches { Domain("|zocdoc.com|") }, Action(Discard) };Rule { Matches { Domain("|mikecrm.com|") }, Action(Discard) };Rule { Matches { Domain("|hostelworld.com|") }, Action(Discard) };Rule { Matches { Domain("|mega-wonderful-assurance.net|") }, Action(Discard) };Rule { Matches { Domain("|cdnhwc6.com|") }, Action(Discard) };Rule { Matches { Domain("|ria.com|") }, Action(Discard) };Rule { Matches { Domain("|stnet.ad.jp|") }, Action(Discard) };Rule { Matches { Domain("|chatwork.com|") }, Action(Discard) };Rule { Matches { Domain("|paragonrels.com|") }, Action(Discard) };Rule { Matches { Domain("|ksmobile.net|") }, Action(Discard) };Rule { Matches { Domain("|sap.de|") }, Action(Discard) };Rule { Matches { Domain("|filemoon.sx|") }, Action(Discard) };Rule { Matches { Domain("|flexport.io|") }, Action(Discard) };Rule { Matches { Domain("|peopleperhour.com|") }, Action(Discard) };Rule { Matches { Domain("|amazoncognito.com|") }, Action(Discard) };Rule { Matches { Domain("|codefi.network|") }, Action(Discard) };Rule { Matches { Domain("|anotepad.com|") }, Action(Discard) };Rule { Matches { Domain("|tantanapp.com|") }, Action(Discard) };Rule { Matches { Domain("|brownpapertickets.com|") }, Action(Discard) };Rule { Matches { Domain("|webshots.com|") }, Action(Discard) };Rule { Matches { Domain("|anime-planet.com|") }, Action(Discard) };Rule { Matches { Domain("|ut.ee|") }, Action(Discard) };Rule { Matches { Domain("|quickbase.com|") }, Action(Discard) };Rule { Matches { Domain("|pdf24.org|") }, Action(Discard) };Rule { Matches { Domain("|builtin.com|") }, Action(Discard) };Rule { Matches { Domain("|interactivebrokers.com|") }, Action(Discard) };Rule { Matches { Domain("|stackblitz.com|") }, Action(Discard) };Rule { Matches { Domain("|ipsnews.net|") }, Action(Discard) };Rule { Matches { Domain("|mytheresa.com|") }, Action(Discard) };Rule { Matches { Domain("|abc7ny.com|") }, Action(Discard) };Rule { Matches { Domain("|rokt.com|") }, Action(Discard) };Rule { Matches { Domain("|draxe.com|") }, Action(Discard) };Rule { Matches { Domain("|gohugo.io|") }, Action(Discard) };Rule { Matches { Domain("|trafficfactory.biz|") }, Action(Discard) };Rule { Matches { Domain("|tesla.cn|") }, Action(Discard) };Rule { Matches { Domain("|toppr.com|") }, Action(Discard) };Rule { Matches { Domain("|mofa.gov.sa|") }, Action(Discard) };Rule { Matches { Domain("|evgnet.com|") }, Action(Discard) };Rule { Matches { Domain("|simplypsychology.org|") }, Action(Discard) };Rule { Matches { Domain("|bea.gov|") }, Action(Discard) };Rule { Matches { Domain("|superlib.net|") }, Action(Discard) };Rule { Matches { Domain("|megaupload.com|") }, Action(Discard) };Rule { Matches { Domain("|cspserver.net|") }, Action(Discard) };Rule { Matches { Domain("|d41.co|") }, Action(Discard) };Rule { Matches { Domain("|tdnsdl1.cn|") }, Action(Discard) };Rule { Matches { Domain("|ksycdn.cn|") }, Action(Discard) };Rule { Matches { Domain("|uts.edu.au|") }, Action(Discard) };Rule { Matches { Domain("|optimove.net|") }, Action(Discard) };Rule { Matches { Domain("|turnerapps.com|") }, Action(Discard) };Rule { Matches { Domain("|connman.net|") }, Action(Discard) };Rule { Matches { Domain("|packtpub.com|") }, Action(Discard) };Rule { Matches { Domain("|mts-nn.ru|") }, Action(Discard) };Rule { Matches { Domain("|knightlab.com|") }, Action(Discard) };Rule { Matches { Domain("|tivo.com|") }, Action(Discard) };Rule { Matches { Domain("|changeip.com|") }, Action(Discard) };Rule { Matches { Domain("|haufe.de|") }, Action(Discard) };Rule { Matches { Domain("|deltamath.com|") }, Action(Discard) };Rule { Matches { Domain("|lgucdn.com|") }, Action(Discard) };Rule { Matches { Domain("|eugdpr.org|") }, Action(Discard) };Rule { Matches { Domain("|sellmymobile.com|") }, Action(Discard) };Rule { Matches { Domain("|decrypt.co|") }, Action(Discard) };Rule { Matches { Domain("|hearstnp.com|") }, Action(Discard) };Rule { Matches { Domain("|astm.org|") }, Action(Discard) };Rule { Matches { Domain("|kaskus.co.id|") }, Action(Discard) };Rule { Matches { Domain("|tripadvisor.ca|") }, Action(Discard) };Rule { Matches { Domain("|action-media.ru|") }, Action(Discard) };Rule { Matches { Domain("|cmail20.com|") }, Action(Discard) };Rule { Matches { Domain("|unoadsrv.com|") }, Action(Discard) };Rule { Matches { Domain("|thejakartapost.com|") }, Action(Discard) };Rule { Matches { Domain("|nspk.ru|") }, Action(Discard) };Rule { Matches { Domain("|cybereason.net|") }, Action(Discard) };Rule { Matches { Domain("|theprint.in|") }, Action(Discard) };Rule { Matches { Domain("|patheos.com|") }, Action(Discard) };Rule { Matches { Domain("|queniutc.com|") }, Action(Discard) };Rule { Matches { Domain("|thebase.in|") }, Action(Discard) };Rule { Matches { Domain("|cctld.co|") }, Action(Discard) };Rule { Matches { Domain("|unfpa.org|") }, Action(Discard) };Rule { Matches { Domain("|clubic.com|") }, Action(Discard) };Rule { Matches { Domain("|personio-internal.de|") }, Action(Discard) };Rule { Matches { Domain("|yarnpkg.com|") }, Action(Discard) };Rule { Matches { Domain("|atom.io|") }, Action(Discard) };Rule { Matches { Domain("|ssaa.ir|") }, Action(Discard) };Rule { Matches { Domain("|cdnetdns.net|") }, Action(Discard) };Rule { Matches { Domain("|cairn.info|") }, Action(Discard) };Rule { Matches { Domain("|natwest.com|") }, Action(Discard) };Rule { Matches { Domain("|costco.ca|") }, Action(Discard) };Rule { Matches { Domain("|lamar.edu|") }, Action(Discard) };Rule { Matches { Domain("|secu100.net|") }, Action(Discard) };Rule { Matches { Domain("|adtdp.com|") }, Action(Discard) };Rule { Matches { Domain("|animesonline.cc|") }, Action(Discard) };Rule { Matches { Domain("|cjdropshipping.com|") }, Action(Discard) };Rule { Matches { Domain("|kino-teatr.ru|") }, Action(Discard) };Rule { Matches { Domain("|hiyaapi.com|") }, Action(Discard) };Rule { Matches { Domain("|okdiario.com|") }, Action(Discard) };Rule { Matches { Domain("|qihucdn.com|") }, Action(Discard) };Rule { Matches { Domain("|ttwstatic.com|") }, Action(Discard) };Rule { Matches { Domain("|sanguosha.com|") }, Action(Discard) };Rule { Matches { Domain("|sketch.com|") }, Action(Discard) };Rule { Matches { Domain("|uniregistry.info|") }, Action(Discard) };Rule { Matches { Domain("|unicamp.br|") }, Action(Discard) };Rule { Matches { Domain("|depop.com|") }, Action(Discard) };Rule { Matches { Domain("|surveygizmo.com|") }, Action(Discard) };Rule { Matches { Domain("|lumaops.com|") }, Action(Discard) };Rule { Matches { Domain("|ustr.gov|") }, Action(Discard) };Rule { Matches { Domain("|postimees.ee|") }, Action(Discard) };Rule { Matches { Domain("|cfainstitute.org|") }, Action(Discard) };Rule { Matches { Domain("|fodors.com|") }, Action(Discard) };Rule { Matches { Domain("|hpage.com|") }, Action(Discard) };Rule { Matches { Domain("|pldt.net|") }, Action(Discard) };Rule { Matches { Domain("|thenews.com.pk|") }, Action(Discard) };Rule { Matches { Domain("|vimeopro.com|") }, Action(Discard) };Rule { Matches { Domain("|kongzhong.com|") }, Action(Discard) };Rule { Matches { Domain("|hyros.com|") }, Action(Discard) };Rule { Matches { Domain("|apkmirror.com|") }, Action(Discard) };Rule { Matches { Domain("|ru.nl|") }, Action(Discard) };Rule { Matches { Domain("|exponea.com|") }, Action(Discard) };Rule { Matches { Domain("|robertsspaceindustries.com|") }, Action(Discard) };Rule { Matches { Domain("|ns14.net|") }, Action(Discard) };Rule { Matches { Domain("|zqtk.net|") }, Action(Discard) };Rule { Matches { Domain("|datingmentor.org|") }, Action(Discard) };Rule { Matches { Domain("|sail-horizon.com|") }, Action(Discard) };Rule { Matches { Domain("|uaf.edu|") }, Action(Discard) };Rule { Matches { Domain("|rada.gov.ua|") }, Action(Discard) };Rule { Matches { Domain("|casetext.com|") }, Action(Discard) };Rule { Matches { Domain("|atw.hu|") }, Action(Discard) };Rule { Matches { Domain("|bshare.cn|") }, Action(Discard) };Rule { Matches { Domain("|moz.works|") }, Action(Discard) };Rule { Matches { Domain("|lgtviot.com|") }, Action(Discard) };Rule { Matches { Domain("|acehardware.com|") }, Action(Discard) };Rule { Matches { Domain("|abdn.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|flowus.cn|") }, Action(Discard) };Rule { Matches { Domain("|avma.org|") }, Action(Discard) };Rule { Matches { Domain("|legalzoom.com|") }, Action(Discard) };Rule { Matches { Domain("|sfdc.net|") }, Action(Discard) };Rule { Matches { Domain("|dns.sa|") }, Action(Discard) };Rule { Matches { Domain("|magcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|essence.com|") }, Action(Discard) };Rule { Matches { Domain("|mmechocaptiveportal.com|") }, Action(Discard) };Rule { Matches { Domain("|ddooo.com|") }, Action(Discard) };Rule { Matches { Domain("|dellsupportcenter.com|") }, Action(Discard) };Rule { Matches { Domain("|zadn.vn|") }, Action(Discard) };Rule { Matches { Domain("|queniuuf.com|") }, Action(Discard) };Rule { Matches { Domain("|newsmemory.com|") }, Action(Discard) };Rule { Matches { Domain("|tjupt.org|") }, Action(Discard) };Rule { Matches { Domain("|raspberrypi.com|") }, Action(Discard) };Rule { Matches { Domain("|epolice.ir|") }, Action(Discard) };Rule { Matches { Domain("|mt.co.kr|") }, Action(Discard) };Rule { Matches { Domain("|crystals.ru|") }, Action(Discard) };Rule { Matches { Domain("|kingcounty.gov|") }, Action(Discard) };Rule { Matches { Domain("|pressherald.com|") }, Action(Discard) };Rule { Matches { Domain("|keybase.io|") }, Action(Discard) };Rule { Matches { Domain("|sinacloud.com|") }, Action(Discard) };Rule { Matches { Domain("|tinkoffjournal.ru|") }, Action(Discard) };Rule { Matches { Domain("|redircdn.com|") }, Action(Discard) };Rule { Matches { Domain("|powells.com|") }, Action(Discard) };Rule { Matches { Domain("|flywheelsites.com|") }, Action(Discard) };Rule { Matches { Domain("|ypojie.com|") }, Action(Discard) };Rule { Matches { Domain("|nsc.org|") }, Action(Discard) };Rule { Matches { Domain("|adestra.com|") }, Action(Discard) };Rule { Matches { Domain("|fourpetal.com|") }, Action(Discard) };Rule { Matches { Domain("|ecu.edu|") }, Action(Discard) };Rule { Matches { Domain("|brandeis.edu|") }, Action(Discard) };Rule { Matches { Domain("|t-ipconnect.de|") }, Action(Discard) };Rule { Matches { Domain("|sucuri.net|") }, Action(Discard) };Rule { Matches { Domain("|brandbucket.com|") }, Action(Discard) };Rule { Matches { Domain("|asahi-net.or.jp|") }, Action(Discard) };Rule { Matches { Domain("|fairfaxcounty.gov|") }, Action(Discard) };Rule { Matches { Domain("|nic.cz|") }, Action(Discard) };Rule { Matches { Domain("|maersk.com|") }, Action(Discard) };Rule { Matches { Domain("|signnow.com|") }, Action(Discard) };Rule { Matches { Domain("|awsdns-63.org|") }, Action(Discard) };Rule { Matches { Domain("|locum.ru|") }, Action(Discard) };Rule { Matches { Domain("|dataaps.com|") }, Action(Discard) };Rule { Matches { Domain("|d-53.jp|") }, Action(Discard) };Rule { Matches { Domain("|surf.net|") }, Action(Discard) };Rule { Matches { Domain("|google.com.uy|") }, Action(Discard) };Rule { Matches { Domain("|sodapdf.com|") }, Action(Discard) };Rule { Matches { Domain("|dsers.com|") }, Action(Discard) };Rule { Matches { Domain("|tstdoors.com|") }, Action(Discard) };Rule { Matches { Domain("|themezee.com|") }, Action(Discard) };Rule { Matches { Domain("|jin10.com|") }, Action(Discard) };Rule { Matches { Domain("|filmibeat.com|") }, Action(Discard) };Rule { Matches { Domain("|thrivecart.com|") }, Action(Discard) };Rule { Matches { Domain("|chuangkit.com|") }, Action(Discard) };Rule { Matches { Domain("|enseeiht.fr|") }, Action(Discard) };Rule { Matches { Domain("|ccgateway.net|") }, Action(Discard) };Rule { Matches { Domain("|thisoldhouse.com|") }, Action(Discard) };Rule { Matches { Domain("|forward.com|") }, Action(Discard) };Rule { Matches { Domain("|dfcfw.com|") }, Action(Discard) };Rule { Matches { Domain("|arbitr.ru|") }, Action(Discard) };Rule { Matches { Domain("|iguopin.com|") }, Action(Discard) };Rule { Matches { Domain("|novelpia.com|") }, Action(Discard) };Rule { Matches { Domain("|bdydns.cn|") }, Action(Discard) };Rule { Matches { Domain("|cbo.gov|") }, Action(Discard) };Rule { Matches { Domain("|nbclosangeles.com|") }, Action(Discard) };Rule { Matches { Domain("|stamped.io|") }, Action(Discard) };Rule { Matches { Domain("|ahnlab.com|") }, Action(Discard) };Rule { Matches { Domain("|loreal.com|") }, Action(Discard) };Rule { Matches { Domain("|su.se|") }, Action(Discard) };Rule { Matches { Domain("|gametu.net|") }, Action(Discard) };Rule { Matches { Domain("|sam.gov|") }, Action(Discard) };Rule { Matches { Domain("|matchesfashion.com|") }, Action(Discard) };Rule { Matches { Domain("|onlinehome.us|") }, Action(Discard) };Rule { Matches { Domain("|geetest.com|") }, Action(Discard) };Rule { Matches { Domain("|zxzj.org|") }, Action(Discard) };Rule { Matches { Domain("|files.fm|") }, Action(Discard) };Rule { Matches { Domain("|iupui.edu|") }, Action(Discard) };Rule { Matches { Domain("|popcap.com|") }, Action(Discard) };Rule { Matches { Domain("|cleantechnica.com|") }, Action(Discard) };Rule { Matches { Domain("|niu.edu|") }, Action(Discard) };Rule { Matches { Domain("|hstgr.io|") }, Action(Discard) };Rule { Matches { Domain("|ptc.com|") }, Action(Discard) };Rule { Matches { Domain("|huntington.com|") }, Action(Discard) };Rule { Matches { Domain("|pointtoserver.com|") }, Action(Discard) };Rule { Matches { Domain("|lehigh.edu|") }, Action(Discard) };Rule { Matches { Domain("|dropout.tv|") }, Action(Discard) };Rule { Matches { Domain("|huke88.com|") }, Action(Discard) };Rule { Matches { Domain("|miguvideo.com|") }, Action(Discard) };Rule { Matches { Domain("|justjared.com|") }, Action(Discard) };Rule { Matches { Domain("|rabobank.nl|") }, Action(Discard) };Rule { Matches { Domain("|uni-stuttgart.de|") }, Action(Discard) };Rule { Matches { Domain("|slideplayer.com|") }, Action(Discard) };Rule { Matches { Domain("|on.net|") }, Action(Discard) };Rule { Matches { Domain("|healthsafe-id.com|") }, Action(Discard) };Rule { Matches { Domain("|wikidata.org|") }, Action(Discard) };Rule { Matches { Domain("|mastername.ru|") }, Action(Discard) };Rule { Matches { Domain("|acog.org|") }, Action(Discard) };Rule { Matches { Domain("|asme.org|") }, Action(Discard) };Rule { Matches { Domain("|rp5.ru|") }, Action(Discard) };Rule { Matches { Domain("|datingreviewer.net|") }, Action(Discard) };Rule { Matches { Domain("|ebsco.com|") }, Action(Discard) };Rule { Matches { Domain("|csulb.edu|") }, Action(Discard) };Rule { Matches { Domain("|cra-arc.gc.ca|") }, Action(Discard) };Rule { Matches { Domain("|challonge.com|") }, Action(Discard) };Rule { Matches { Domain("|avvo.com|") }, Action(Discard) };Rule { Matches { Domain("|screwfix.com|") }, Action(Discard) };Rule { Matches { Domain("|google.co.uz|") }, Action(Discard) };Rule { Matches { Domain("|nintendo.de|") }, Action(Discard) };Rule { Matches { Domain("|powtoon.com|") }, Action(Discard) };Rule { Matches { Domain("|jobkorea.co.kr|") }, Action(Discard) };Rule { Matches { Domain("|viafoura.co|") }, Action(Discard) };Rule { Matches { Domain("|bkrtx.com|") }, Action(Discard) };Rule { Matches { Domain("|a9vg.com|") }, Action(Discard) };Rule { Matches { Domain("|psychiatryonline.org|") }, Action(Discard) };Rule { Matches { Domain("|jalbum.net|") }, Action(Discard) };Rule { Matches { Domain("|morningconsult.com|") }, Action(Discard) };Rule { Matches { Domain("|mcgraw-hill.com|") }, Action(Discard) };Rule { Matches { Domain("|runsignup.com|") }, Action(Discard) };Rule { Matches { Domain("|eircom.net|") }, Action(Discard) };Rule { Matches { Domain("|kissmetrics.com|") }, Action(Discard) };Rule { Matches { Domain("|smashwords.com|") }, Action(Discard) };Rule { Matches { Domain("|adb.org|") }, Action(Discard) };Rule { Matches { Domain("|muffingroup.com|") }, Action(Discard) };Rule { Matches { Domain("|flixtor.to|") }, Action(Discard) };Rule { Matches { Domain("|postimages.org|") }, Action(Discard) };Rule { Matches { Domain("|ustraveldocs.com|") }, Action(Discard) };Rule { Matches { Domain("|99brides.com|") }, Action(Discard) };Rule { Matches { Domain("|randomhouse.com|") }, Action(Discard) };Rule { Matches { Domain("|docsend.com|") }, Action(Discard) };Rule { Matches { Domain("|cleartax.in|") }, Action(Discard) };Rule { Matches { Domain("|akamai-cdn-content.com|") }, Action(Discard) };Rule { Matches { Domain("|turkcell.com.tr|") }, Action(Discard) };Rule { Matches { Domain("|labcorp.com|") }, Action(Discard) };Rule { Matches { Domain("|4pda.to|") }, Action(Discard) };Rule { Matches { Domain("|scikit-learn.org|") }, Action(Discard) };Rule { Matches { Domain("|latamairlines.com|") }, Action(Discard) };Rule { Matches { Domain("|timeweb.com|") }, Action(Discard) };Rule { Matches { Domain("|dn.se|") }, Action(Discard) };Rule { Matches { Domain("|remind.com|") }, Action(Discard) };Rule { Matches { Domain("|fotmob.com|") }, Action(Discard) };Rule { Matches { Domain("|adobeconnect.com|") }, Action(Discard) };Rule { Matches { Domain("|seedtag.com|") }, Action(Discard) };Rule { Matches { Domain("|hellosign.com|") }, Action(Discard) };Rule { Matches { Domain("|weedmaps.com|") }, Action(Discard) };Rule { Matches { Domain("|ltmsphrcl.net|") }, Action(Discard) };Rule { Matches { Domain("|cxense.com|") }, Action(Discard) };Rule { Matches { Domain("|9news.com|") }, Action(Discard) };Rule { Matches { Domain("|mmi360.net|") }, Action(Discard) };Rule { Matches { Domain("|calstate.edu|") }, Action(Discard) };Rule { Matches { Domain("|tvline.com|") }, Action(Discard) };Rule { Matches { Domain("|dbankcloud.eu|") }, Action(Discard) };Rule { Matches { Domain("|firebaseapp.com|") }, Action(Discard) };Rule { Matches { Domain("|cardmarket.com|") }, Action(Discard) };Rule { Matches { Domain("|flexport.com|") }, Action(Discard) };Rule { Matches { Domain("|seatgeek.com|") }, Action(Discard) };Rule { Matches { Domain("|wapbold.com|") }, Action(Discard) };Rule { Matches { Domain("|redirectingat.com|") }, Action(Discard) };Rule { Matches { Domain("|snhu.edu|") }, Action(Discard) };Rule { Matches { Domain("|lynda.com|") }, Action(Discard) };Rule { Matches { Domain("|orange.com|") }, Action(Discard) };Rule { Matches { Domain("|palmbeachpost.com|") }, Action(Discard) };Rule { Matches { Domain("|marketsandmarkets.com|") }, Action(Discard) };Rule { Matches { Domain("|24kdh.cn|") }, Action(Discard) };Rule { Matches { Domain("|uow.edu.au|") }, Action(Discard) };Rule { Matches { Domain("|skorozvon.ru|") }, Action(Discard) };Rule { Matches { Domain("|wfaa.com|") }, Action(Discard) };Rule { Matches { Domain("|osano.com|") }, Action(Discard) };Rule { Matches { Domain("|onefootball.com|") }, Action(Discard) };Rule { Matches { Domain("|linux.org|") }, Action(Discard) };Rule { Matches { Domain("|submittable.com|") }, Action(Discard) };Rule { Matches { Domain("|google.tn|") }, Action(Discard) };Rule { Matches { Domain("|kbs.co.kr|") }, Action(Discard) };Rule { Matches { Domain("|ccgp.gov.cn|") }, Action(Discard) };Rule { Matches { Domain("|webopedia.com|") }, Action(Discard) };Rule { Matches { Domain("|imptracking.com|") }, Action(Discard) };Rule { Matches { Domain("|upv.es|") }, Action(Discard) };Rule { Matches { Domain("|ntv.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|dupont.com|") }, Action(Discard) };Rule { Matches { Domain("|joom.com|") }, Action(Discard) };Rule { Matches { Domain("|minergate.com|") }, Action(Discard) };Rule { Matches { Domain("|sharethru.com|") }, Action(Discard) };Rule { Matches { Domain("|bankofchina.com|") }, Action(Discard) };Rule { Matches { Domain("|compass.com|") }, Action(Discard) };Rule { Matches { Domain("|10010.com|") }, Action(Discard) };Rule { Matches { Domain("|bilivideo.com|") }, Action(Discard) };Rule { Matches { Domain("|deadspin.com|") }, Action(Discard) };Rule { Matches { Domain("|phb123.com|") }, Action(Discard) };Rule { Matches { Domain("|thepennyhoarder.com|") }, Action(Discard) };Rule { Matches { Domain("|globalresearch.ca|") }, Action(Discard) };Rule { Matches { Domain("|nec.com|") }, Action(Discard) };Rule { Matches { Domain("|cooboys.com|") }, Action(Discard) };Rule { Matches { Domain("|hdporn92.com|") }, Action(Discard) };Rule { Matches { Domain("|highsnobiety.com|") }, Action(Discard) };Rule { Matches { Domain("|bankcomm.com|") }, Action(Discard) };Rule { Matches { Domain("|net-hosted.com|") }, Action(Discard) };Rule { Matches { Domain("|gemini.com|") }, Action(Discard) };Rule { Matches { Domain("|sentry-cdn.com|") }, Action(Discard) };Rule { Matches { Domain("|symbolab.com|") }, Action(Discard) };Rule { Matches { Domain("|passfixx.com|") }, Action(Discard) };Rule { Matches { Domain("|naiadsystems.com|") }, Action(Discard) };Rule { Matches { Domain("|logicmonitor.com|") }, Action(Discard) };Rule { Matches { Domain("|mysanantonio.com|") }, Action(Discard) };Rule { Matches { Domain("|mixi.jp|") }, Action(Discard) };Rule { Matches { Domain("|slb.com|") }, Action(Discard) };Rule { Matches { Domain("|ivnet.ru|") }, Action(Discard) };Rule { Matches { Domain("|funda.nl|") }, Action(Discard) };Rule { Matches { Domain("|gib.gov.tr|") }, Action(Discard) };Rule { Matches { Domain("|sosial.gov.az|") }, Action(Discard) };Rule { Matches { Domain("|jinshuju.net|") }, Action(Discard) };Rule { Matches { Domain("|xxupdatemovies.com|") }, Action(Discard) };Rule { Matches { Domain("|onecommerce.io|") }, Action(Discard) };Rule { Matches { Domain("|mtsu.edu|") }, Action(Discard) };Rule { Matches { Domain("|2nt.com|") }, Action(Discard) };Rule { Matches { Domain("|adxcel-ec2.com|") }, Action(Discard) };Rule { Matches { Domain("|behave.com|") }, Action(Discard) };Rule { Matches { Domain("|kartra.com|") }, Action(Discard) };Rule { Matches { Domain("|neowin.net|") }, Action(Discard) };Rule { Matches { Domain("|dartsearch.net|") }, Action(Discard) };Rule { Matches { Domain("|xitek.com|") }, Action(Discard) };Rule { Matches { Domain("|survata.com|") }, Action(Discard) };Rule { Matches { Domain("|excite.com|") }, Action(Discard) };Rule { Matches { Domain("|549.tv|") }, Action(Discard) };Rule { Matches { Domain("|trackjs.com|") }, Action(Discard) };Rule { Matches { Domain("|umamusume.net|") }, Action(Discard) };Rule { Matches { Domain("|carousell.sg|") }, Action(Discard) };Rule { Matches { Domain("|dtu.dk|") }, Action(Discard) };Rule { Matches { Domain("|belwue.de|") }, Action(Discard) };Rule { Matches { Domain("|silverchair.com|") }, Action(Discard) };Rule { Matches { Domain("|thothub.lol|") }, Action(Discard) };Rule { Matches { Domain("|act.org|") }, Action(Discard) };Rule { Matches { Domain("|bget.ru|") }, Action(Discard) };Rule { Matches { Domain("|extend.tv|") }, Action(Discard) };Rule { Matches { Domain("|somode.com|") }, Action(Discard) };Rule { Matches { Domain("|nameself.com|") }, Action(Discard) };Rule { Matches { Domain("|pagina12.com.ar|") }, Action(Discard) };Rule { Matches { Domain("|callrail.com|") }, Action(Discard) };Rule { Matches { Domain("|peekvids.com|") }, Action(Discard) };Rule { Matches { Domain("|hometax.go.kr|") }, Action(Discard) };Rule { Matches { Domain("|mjt.lu|") }, Action(Discard) };Rule { Matches { Domain("|nascar.com|") }, Action(Discard) };Rule { Matches { Domain("|adobesc.com|") }, Action(Discard) };Rule { Matches { Domain("|sync.com|") }, Action(Discard) };Rule { Matches { Domain("|businesstoday.in|") }, Action(Discard) };Rule { Matches { Domain("|fortunecity.com|") }, Action(Discard) };Rule { Matches { Domain("|escholarship.org|") }, Action(Discard) };Rule { Matches { Domain("|sep.gob.mx|") }, Action(Discard) };Rule { Matches { Domain("|whatwg.org|") }, Action(Discard) };Rule { Matches { Domain("|comptia.org|") }, Action(Discard) };Rule { Matches { Domain("|pitch.com|") }, Action(Discard) };Rule { Matches { Domain("|channeladvisor.com|") }, Action(Discard) };Rule { Matches { Domain("|annualcreditreport.com|") }, Action(Discard) };Rule { Matches { Domain("|searchspring.io|") }, Action(Discard) };Rule { Matches { Domain("|emol.com|") }, Action(Discard) };Rule { Matches { Domain("|mrpdata.net|") }, Action(Discard) };Rule { Matches { Domain("|nwpu.edu.cn|") }, Action(Discard) };Rule { Matches { Domain("|olx.kz|") }, Action(Discard) };Rule { Matches { Domain("|edgar-online.com|") }, Action(Discard) };Rule { Matches { Domain("|dailynews.com|") }, Action(Discard) };Rule { Matches { Domain("|stfly.me|") }, Action(Discard) };Rule { Matches { Domain("|amcs-tachyon.com|") }, Action(Discard) };Rule { Matches { Domain("|nbcdfw.com|") }, Action(Discard) };Rule { Matches { Domain("|advanced-web-analytics.com|") }, Action(Discard) };Rule { Matches { Domain("|arabseed.ink|") }, Action(Discard) };Rule { Matches { Domain("|lockheedmartin.com|") }, Action(Discard) };Rule { Matches { Domain("|standardbank.co.za|") }, Action(Discard) };Rule { Matches { Domain("|technion.ac.il|") }, Action(Discard) };Rule { Matches { Domain("|mapgenie.io|") }, Action(Discard) };Rule { Matches { Domain("|kunlunso.com|") }, Action(Discard) };Rule { Matches { Domain("|myfreshworks.com|") }, Action(Discard) };Rule { Matches { Domain("|quip.com|") }, Action(Discard) };Rule { Matches { Domain("|honolulu.gov|") }, Action(Discard) };Rule { Matches { Domain("|jamieoliver.com|") }, Action(Discard) };Rule { Matches { Domain("|serverstack.com|") }, Action(Discard) };Rule { Matches { Domain("|ldmnq.com|") }, Action(Discard) };Rule { Matches { Domain("|hookupwebsites.org|") }, Action(Discard) };Rule { Matches { Domain("|appdomain.cloud|") }, Action(Discard) };Rule { Matches { Domain("|oast.live|") }, Action(Discard) };Rule { Matches { Domain("|rd.go.th|") }, Action(Discard) };Rule { Matches { Domain("|kununu.com|") }, Action(Discard) };Rule { Matches { Domain("|thinkgeek.com|") }, Action(Discard) };Rule { Matches { Domain("|comparitech.com|") }, Action(Discard) };Rule { Matches { Domain("|nrc.nl|") }, Action(Discard) };Rule { Matches { Domain("|otter.ai|") }, Action(Discard) };Rule { Matches { Domain("|meteoblue.com|") }, Action(Discard) };Rule { Matches { Domain("|koreaherald.com|") }, Action(Discard) };Rule { Matches { Domain("|paddle.com|") }, Action(Discard) };Rule { Matches { Domain("|kadencewp.com|") }, Action(Discard) };Rule { Matches { Domain("|webstroy.ru|") }, Action(Discard) };Rule { Matches { Domain("|imgbox.com|") }, Action(Discard) };Rule { Matches { Domain("|book123.info|") }, Action(Discard) };Rule { Matches { Domain("|china-channel.com|") }, Action(Discard) };Rule { Matches { Domain("|hextom.com|") }, Action(Discard) };Rule { Matches { Domain("|createsend.com|") }, Action(Discard) };Rule { Matches { Domain("|q.au|") }, Action(Discard) };Rule { Matches { Domain("|europa.eu.int|") }, Action(Discard) };Rule { Matches { Domain("|hclips.com|") }, Action(Discard) };Rule { Matches { Domain("|onlydwy.com|") }, Action(Discard) };Rule { Matches { Domain("|sg-host.com|") }, Action(Discard) };Rule { Matches { Domain("|brunch.co.kr|") }, Action(Discard) };Rule { Matches { Domain("|ndl.go.jp|") }, Action(Discard) };Rule { Matches { Domain("|carnival.com|") }, Action(Discard) };Rule { Matches { Domain("|alchemer.com|") }, Action(Discard) };Rule { Matches { Domain("|rossko.ru|") }, Action(Discard) };Rule { Matches { Domain("|cambly.com|") }, Action(Discard) };Rule { Matches { Domain("|uni-leipzig.de|") }, Action(Discard) };Rule { Matches { Domain("|bdstatic.com|") }, Action(Discard) };Rule { Matches { Domain("|thisismoney.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|publico.es|") }, Action(Discard) };Rule { Matches { Domain("|s-microsoft.com|") }, Action(Discard) };Rule { Matches { Domain("|qlivecdn.com|") }, Action(Discard) };Rule { Matches { Domain("|apollo.io|") }, Action(Discard) };Rule { Matches { Domain("|bunnings.com.au|") }, Action(Discard) };Rule { Matches { Domain("|treas.gov|") }, Action(Discard) };Rule { Matches { Domain("|queniukw.com|") }, Action(Discard) };Rule { Matches { Domain("|ihk.de|") }, Action(Discard) };Rule { Matches { Domain("|vodafone.com.tr|") }, Action(Discard) };Rule { Matches { Domain("|regions.com|") }, Action(Discard) };Rule { Matches { Domain("|wyzecam.com|") }, Action(Discard) };Rule { Matches { Domain("|bosch.com|") }, Action(Discard) };Rule { Matches { Domain("|starplus.com|") }, Action(Discard) };Rule { Matches { Domain("|coches.net|") }, Action(Discard) };Rule { Matches { Domain("|internationalwomensday.com|") }, Action(Discard) };Rule { Matches { Domain("|uxdesign.cc|") }, Action(Discard) };Rule { Matches { Domain("|nbcbayarea.com|") }, Action(Discard) };Rule { Matches { Domain("|metunic.com.tr|") }, Action(Discard) };Rule { Matches { Domain("|dns.nl|") }, Action(Discard) };Rule { Matches { Domain("|orange.es|") }, Action(Discard) };Rule { Matches { Domain("|bancobmg.com.br|") }, Action(Discard) };Rule { Matches { Domain("|365vidz.com|") }, Action(Discard) };Rule { Matches { Domain("|eencloud.com|") }, Action(Discard) };Rule { Matches { Domain("|privacypolicies.com|") }, Action(Discard) };Rule { Matches { Domain("|freshworksapi.com|") }, Action(Discard) };Rule { Matches { Domain("|bad.news|") }, Action(Discard) };Rule { Matches { Domain("|mdnsservice.com|") }, Action(Discard) };Rule { Matches { Domain("|ulan-ude-eg.ru|") }, Action(Discard) };Rule { Matches { Domain("|intergient.com|") }, Action(Discard) };Rule { Matches { Domain("|reactnative.dev|") }, Action(Discard) };Rule { Matches { Domain("|dizibox.tv|") }, Action(Discard) };Rule { Matches { Domain("|picuki.com|") }, Action(Discard) };Rule { Matches { Domain("|abchina.com|") }, Action(Discard) };Rule { Matches { Domain("|centrify.com|") }, Action(Discard) };Rule { Matches { Domain("|twincities.com|") }, Action(Discard) };Rule { Matches { Domain("|ufrj.br|") }, Action(Discard) };Rule { Matches { Domain("|tribuneindia.com|") }, Action(Discard) };Rule { Matches { Domain("|aei.org|") }, Action(Discard) };Rule { Matches { Domain("|newyorkfed.org|") }, Action(Discard) };Rule { Matches { Domain("|pmkisan.gov.in|") }, Action(Discard) };Rule { Matches { Domain("|ttd.net|") }, Action(Discard) };Rule { Matches { Domain("|zipaws.com|") }, Action(Discard) };Rule { Matches { Domain("|bmw.de|") }, Action(Discard) };Rule { Matches { Domain("|mangaread.org|") }, Action(Discard) };Rule { Matches { Domain("|digitalguardian.com|") }, Action(Discard) };Rule { Matches { Domain("|iql.ru|") }, Action(Discard) };Rule { Matches { Domain("|sherwin-williams.com|") }, Action(Discard) };Rule { Matches { Domain("|ambafrance.org|") }, Action(Discard) };Rule { Matches { Domain("|dlink.com|") }, Action(Discard) };Rule { Matches { Domain("|courthousenews.com|") }, Action(Discard) };Rule { Matches { Domain("|gocardless.com|") }, Action(Discard) };Rule { Matches { Domain("|pepsi.com|") }, Action(Discard) };Rule { Matches { Domain("|sfr.net|") }, Action(Discard) };Rule { Matches { Domain("|videonow.ru|") }, Action(Discard) };Rule { Matches { Domain("|wondershare.cn|") }, Action(Discard) };Rule { Matches { Domain("|fdown.net|") }, Action(Discard) };Rule { Matches { Domain("|ni.com|") }, Action(Discard) };Rule { Matches { Domain("|bc.game|") }, Action(Discard) };Rule { Matches { Domain("|mixdrop.co|") }, Action(Discard) };Rule { Matches { Domain("|stjude.org|") }, Action(Discard) };Rule { Matches { Domain("|pdfcoffee.com|") }, Action(Discard) };Rule { Matches { Domain("|dbs.id|") }, Action(Discard) };Rule { Matches { Domain("|coding.net|") }, Action(Discard) };Rule { Matches { Domain("|privacy-center.org|") }, Action(Discard) };Rule { Matches { Domain("|trontv.com|") }, Action(Discard) };Rule { Matches { Domain("|i.ua|") }, Action(Discard) };Rule { Matches { Domain("|qubit.com|") }, Action(Discard) };Rule { Matches { Domain("|dyna-ns.net|") }, Action(Discard) };Rule { Matches { Domain("|taylorandfrancis.com|") }, Action(Discard) };Rule { Matches { Domain("|christianpost.com|") }, Action(Discard) };Rule { Matches { Domain("|globalsecurity.org|") }, Action(Discard) };Rule { Matches { Domain("|interbusiness.it|") }, Action(Discard) };Rule { Matches { Domain("|mooo.com|") }, Action(Discard) };Rule { Matches { Domain("|xsph.ru|") }, Action(Discard) };Rule { Matches { Domain("|evergreen.space|") }, Action(Discard) };Rule { Matches { Domain("|esm1.net|") }, Action(Discard) };Rule { Matches { Domain("|suse.com|") }, Action(Discard) };Rule { Matches { Domain("|cdntip.com|") }, Action(Discard) };Rule { Matches { Domain("|wikaba.com|") }, Action(Discard) };Rule { Matches { Domain("|gogoanimes.org|") }, Action(Discard) };Rule { Matches { Domain("|mdhv.io|") }, Action(Discard) };Rule { Matches { Domain("|fluentcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|aaas.org|") }, Action(Discard) };Rule { Matches { Domain("|juren.tv|") }, Action(Discard) };Rule { Matches { Domain("|mlstatic.com|") }, Action(Discard) };Rule { Matches { Domain("|fastlydns.net|") }, Action(Discard) };Rule { Matches { Domain("|bancoestado.cl|") }, Action(Discard) };Rule { Matches { Domain("|random.org|") }, Action(Discard) };Rule { Matches { Domain("|3h3.com|") }, Action(Discard) };Rule { Matches { Domain("|adglare.net|") }, Action(Discard) };Rule { Matches { Domain("|parsec.app|") }, Action(Discard) };Rule { Matches { Domain("|larazon.es|") }, Action(Discard) };Rule { Matches { Domain("|diyifanwen.com|") }, Action(Discard) };Rule { Matches { Domain("|astrazeneca.com|") }, Action(Discard) };Rule { Matches { Domain("|paystack.com|") }, Action(Discard) };Rule { Matches { Domain("|theinformation.com|") }, Action(Discard) };Rule { Matches { Domain("|circleci.com|") }, Action(Discard) };Rule { Matches { Domain("|cyberghostvpn.com|") }, Action(Discard) };Rule { Matches { Domain("|olx.com|") }, Action(Discard) };Rule { Matches { Domain("|emb-api.com|") }, Action(Discard) };Rule { Matches { Domain("|skrill.com|") }, Action(Discard) };Rule { Matches { Domain("|cumgadbpovr.com|") }, Action(Discard) };Rule { Matches { Domain("|imyfone.com|") }, Action(Discard) };Rule { Matches { Domain("|dice.com|") }, Action(Discard) };Rule { Matches { Domain("|rikunabi.com|") }, Action(Discard) };Rule { Matches { Domain("|urmombl.com|") }, Action(Discard) };Rule { Matches { Domain("|appmedia.jp|") }, Action(Discard) };Rule { Matches { Domain("|hopto.org|") }, Action(Discard) };Rule { Matches { Domain("|ssstik.io|") }, Action(Discard) };Rule { Matches { Domain("|elavon.com|") }, Action(Discard) };Rule { Matches { Domain("|ust.hk|") }, Action(Discard) };Rule { Matches { Domain("|yande.re|") }, Action(Discard) };Rule { Matches { Domain("|imagemagick.org|") }, Action(Discard) };Rule { Matches { Domain("|venngage.com|") }, Action(Discard) };Rule { Matches { Domain("|aao.org|") }, Action(Discard) };Rule { Matches { Domain("|dbankcdn.cn|") }, Action(Discard) };Rule { Matches { Domain("|nysed.gov|") }, Action(Discard) };Rule { Matches { Domain("|moysklad.ru|") }, Action(Discard) };Rule { Matches { Domain("|denic.de|") }, Action(Discard) };Rule { Matches { Domain("|dg-datenschutz.de|") }, Action(Discard) };Rule { Matches { Domain("|maindnstech.com|") }, Action(Discard) };Rule { Matches { Domain("|nextjs.org|") }, Action(Discard) };Rule { Matches { Domain("|homedepot.ca|") }, Action(Discard) };Rule { Matches { Domain("|proofdns.net|") }, Action(Discard) };Rule { Matches { Domain("|cvte.com|") }, Action(Discard) };Rule { Matches { Domain("|ausoafab.net|") }, Action(Discard) };Rule { Matches { Domain("|bolt.eu|") }, Action(Discard) };Rule { Matches { Domain("|hdhub4u.team|") }, Action(Discard) };Rule { Matches { Domain("|ultradns.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|rnz.co.nz|") }, Action(Discard) };Rule { Matches { Domain("|clustrmaps.com|") }, Action(Discard) };Rule { Matches { Domain("|evenue.net|") }, Action(Discard) };Rule { Matches { Domain("|thebrightbeacon.com|") }, Action(Discard) };Rule { Matches { Domain("|uea.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|bibliocommons.com|") }, Action(Discard) };Rule { Matches { Domain("|pornmd.com|") }, Action(Discard) };Rule { Matches { Domain("|osaka-u.ac.jp|") }, Action(Discard) };Rule { Matches { Domain("|england.nhs.uk|") }, Action(Discard) };Rule { Matches { Domain("|inventos.ru|") }, Action(Discard) };Rule { Matches { Domain("|arvixe.com|") }, Action(Discard) };Rule { Matches { Domain("|beckershospitalreview.com|") }, Action(Discard) };Rule { Matches { Domain("|pianyuan.org|") }, Action(Discard) };Rule { Matches { Domain("|check24.de|") }, Action(Discard) };Rule { Matches { Domain("|googlezip.net|") }, Action(Discard) };Rule { Matches { Domain("|hscollectedforms.net|") }, Action(Discard) };Rule { Matches { Domain("|otakudesu.asia|") }, Action(Discard) };Rule { Matches { Domain("|opengroup.org|") }, Action(Discard) };Rule { Matches { Domain("|floridahealth.gov|") }, Action(Discard) };Rule { Matches { Domain("|kanxue.com|") }, Action(Discard) };Rule { Matches { Domain("|ltwebstatic.com|") }, Action(Discard) };Rule { Matches { Domain("|udmserve.net|") }, Action(Discard) };Rule { Matches { Domain("|huaweicloud-dns.cn|") }, Action(Discard) };Rule { Matches { Domain("|the-scientist.com|") }, Action(Discard) };Rule { Matches { Domain("|latercera.com|") }, Action(Discard) };Rule { Matches { Domain("|biggo.com.tw|") }, Action(Discard) };Rule { Matches { Domain("|ad-m.asia|") }, Action(Discard) };Rule { Matches { Domain("|splcenter.org|") }, Action(Discard) };Rule { Matches { Domain("|ihq431.com|") }, Action(Discard) };Rule { Matches { Domain("|dzwww.com|") }, Action(Discard) };Rule { Matches { Domain("|bmwgroup.com|") }, Action(Discard) };Rule { Matches { Domain("|pch.net|") }, Action(Discard) };Rule { Matches { Domain("|force9.net|") }, Action(Discard) };Rule { Matches { Domain("|www.gob.pe|") }, Action(Discard) };Rule { Matches { Domain("|indiapost.gov.in|") }, Action(Discard) };Rule { Matches { Domain("|ruten.com.tw|") }, Action(Discard) };Rule { Matches { Domain("|alistapart.com|") }, Action(Discard) };Rule { Matches { Domain("|oas.org|") }, Action(Discard) };Rule { Matches { Domain("|lgsmartad.com|") }, Action(Discard) };Rule { Matches { Domain("|google.am|") }, Action(Discard) };Rule { Matches { Domain("|tmgcard.com|") }, Action(Discard) };Rule { Matches { Domain("|gitv.tv|") }, Action(Discard) };Rule { Matches { Domain("|adn.com|") }, Action(Discard) };Rule { Matches { Domain("|enmu.edu|") }, Action(Discard) };Rule { Matches { Domain("|nutrition.org|") }, Action(Discard) };Rule { Matches { Domain("|37signals.com|") }, Action(Discard) };Rule { Matches { Domain("|proofdns.com|") }, Action(Discard) };Rule { Matches { Domain("|abc13.com|") }, Action(Discard) };Rule { Matches { Domain("|openvpn.net|") }, Action(Discard) };Rule { Matches { Domain("|hollywoodlife.com|") }, Action(Discard) };Rule { Matches { Domain("|pitaya-clientai.com|") }, Action(Discard) };Rule { Matches { Domain("|r.au|") }, Action(Discard) };Rule { Matches { Domain("|tiancity.com|") }, Action(Discard) };Rule { Matches { Domain("|wpzoom.com|") }, Action(Discard) };Rule { Matches { Domain("|sbdm6.com|") }, Action(Discard) };Rule { Matches { Domain("|shopee.com|") }, Action(Discard) };Rule { Matches { Domain("|iij.ad.jp|") }, Action(Discard) };Rule { Matches { Domain("|recruit.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|webmasters.com|") }, Action(Discard) };Rule { Matches { Domain("|just-eat.es|") }, Action(Discard) };Rule { Matches { Domain("|actu.fr|") }, Action(Discard) };Rule { Matches { Domain("|isi.edu|") }, Action(Discard) };Rule { Matches { Domain("|amp.dev|") }, Action(Discard) };Rule { Matches { Domain("|teamblind.com|") }, Action(Discard) };Rule { Matches { Domain("|regnum.ru|") }, Action(Discard) };Rule { Matches { Domain("|bitcointalk.org|") }, Action(Discard) };Rule { Matches { Domain("|tophat.com|") }, Action(Discard) };Rule { Matches { Domain("|cadenaser.com|") }, Action(Discard) };Rule { Matches { Domain("|rain.com|") }, Action(Discard) };Rule { Matches { Domain("|fgv.br|") }, Action(Discard) };Rule { Matches { Domain("|glulive.com|") }, Action(Discard) };Rule { Matches { Domain("|hightail.com|") }, Action(Discard) };Rule { Matches { Domain("|fornex.com|") }, Action(Discard) };Rule { Matches { Domain("|belta.by|") }, Action(Discard) };Rule { Matches { Domain("|passportindia.gov.in|") }, Action(Discard) };Rule { Matches { Domain("|podio.com|") }, Action(Discard) };Rule { Matches { Domain("|tommy.com|") }, Action(Discard) };Rule { Matches { Domain("|dual-s-msedge.net|") }, Action(Discard) };Rule { Matches { Domain("|getrockerbox.com|") }, Action(Discard) };Rule { Matches { Domain("|hostiservices.com|") }, Action(Discard) };Rule { Matches { Domain("|sparkpostmail.com|") }, Action(Discard) };Rule { Matches { Domain("|nationalrail.co.uk|") }, Action(Discard) };Rule { Matches { Domain("|zoomit.ir|") }, Action(Discard) };Rule { Matches { Domain("|a3cloud.net|") }, Action(Discard) };Rule { Matches { Domain("|barclaycardus.com|") }, Action(Discard) };Rule { Matches { Domain("|de56.com|") }, Action(Discard) };Rule { Matches { Domain("|s.au|") }, Action(Discard) };Rule { Matches { Domain("|southernlinc.com|") }, Action(Discard) };Rule { Matches { Domain("|sportngin.com|") }, Action(Discard) };Rule { Matches { Domain("|liuxue86.com|") }, Action(Discard) };Rule { Matches { Domain("|heraldscotland.com|") }, Action(Discard) };Rule { Matches { Domain("|tuoitre.vn|") }, Action(Discard) };Rule { Matches { Domain("|makezine.com|") }, Action(Discard) };Rule { Matches { Domain("|hoes.tube|") }, Action(Discard) };Rule { Matches { Domain("|monsnode.com|") }, Action(Discard) };Rule { Matches { Domain("|vesti.ru|") }, Action(Discard) };Rule { Matches { Domain("|sift.com|") }, Action(Discard) };Rule { Matches { Domain("|bill.com|") }, Action(Discard) };Rule { Matches { Domain("|thegioididong.com|") }, Action(Discard) };Rule { Matches { Domain("|kuaidi100.com|") }, Action(Discard) };Rule { Matches { Domain("|usccb.org|") }, Action(Discard) };Rule { Matches { Domain("|travelers.com|") }, Action(Discard) };Rule { Matches { Domain("|garenanow.com|") }, Action(Discard) };Rule { Matches { Domain("|valuehost.ru|") }, Action(Discard) };Rule { Matches { Domain("|versatel.net|") }, Action(Discard) };Rule { Matches { Domain("|dygod.net|") }, Action(Discard) };Rule { Matches { Domain("|tcdnlive.com|") }, Action(Discard) };Rule { Matches { Domain("|f2pool.com|") }, Action(Discard) };Rule { Matches { Domain("|companieshouse.gov.uk|") }, Action(Discard) };Rule { Matches { Domain("|fcwei.com|") }, Action(Discard) };Rule { Matches { Domain("|xarth.tv|") }, Action(Discard) };Rule { Matches { Domain("|coolmathgames.com|") }, Action(Discard) };Rule { Matches { Domain("|laptopmag.com|") }, Action(Discard) };Rule { Matches { Domain("|riotpixels.com|") }, Action(Discard) };Rule { Matches { Domain("|pond5.com|") }, Action(Discard) };Rule { Matches { Domain("|aexp.com|") }, Action(Discard) };Rule { Matches { Domain("|care2.com|") }, Action(Discard) };Rule { Matches { Domain("|120ask.com|") }, Action(Discard) };Rule { Matches { Domain("|sponichi.co.jp|") }, Action(Discard) };Rule { Matches { Domain("|owhealth.com|") }, Action(Discard) };Rule { Matches { Domain("|axc.nl|") }, Action(Discard) };Rule { Matches { Domain("|ldplayer.net|") }, Action(Discard) };Rule { Matches { Domain("|abbvie.com|") }, Action(Discard) };Rule { Matches { Domain("|google.lu|") }, Action(Discard) };Rule { Matches { Domain("|mycloud.com|") }, Action(Discard) };Rule { Matches { Domain("|ourcellar.com|") }, Action(Discard) };Rule { Matches { Domain("|qub.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|hundredscultureenjoyed.com|") }, Action(Discard) };Rule { Matches { Domain("|tsdtocl.com|") }, Action(Discard) };Rule { Matches { Domain("|restaurantguru.com|") }, Action(Discard) };Rule { Matches { Domain("|srv53.com|") }, Action(Discard) };Rule { Matches { Domain("|t.au|") }, Action(Discard) };Rule { Matches { Domain("|amadeus.com|") }, Action(Discard) };Rule { Matches { Domain("|swiss.com|") }, Action(Discard) };Rule { Matches { Domain("|tapjoyads.com|") }, Action(Discard) };Rule { Matches { Domain("|sharepoint.us|") }, Action(Discard) };Rule { Matches { Domain("|peakgames.net|") }, Action(Discard) };Rule { Matches { Domain("|aeaweb.org|") }, Action(Discard) };Rule { Matches { Domain("|vhlcentral.com|") }, Action(Discard) };Rule { Matches { Domain("|digbearings.com|") }, Action(Discard) };Rule { Matches { Domain("|cmail19.com|") }, Action(Discard) };Rule { Matches { Domain("|pub.network|") }, Action(Discard) };Rule { Matches { Domain("|1und1.de|") }, Action(Discard) };Rule { Matches { Domain("|yutu.cn|") }, Action(Discard) };Rule { Matches { Domain("|practicaldatacore.com|") }, Action(Discard) };Rule { Matches { Domain("|semana.com|") }, Action(Discard) };Rule { Matches { Domain("|domainer.biz|") }, Action(Discard) };Rule { Matches { Domain("|sber-am.ru|") }, Action(Discard) };Rule { Matches { Domain("|zmags.com|") }, Action(Discard) };Rule { Matches { Domain("|env.go.jp|") }, Action(Discard) };Rule { Matches { Domain("|daaz.com|") }, Action(Discard) };Rule { Matches { Domain("|factcheck.org|") }, Action(Discard) };Rule { Matches { Domain("|kingston.com|") }, Action(Discard) };Rule { Matches { Domain("|nexthink.cloud|") }, Action(Discard) };Rule { Matches { Domain("|smartnews.com|") }, Action(Discard) };Rule { Matches { Domain("|webextension.org|") }, Action(Discard) };Rule { Matches { Domain("|hitc.com|") }, Action(Discard) };Rule { Matches { Domain("|psychologicalscience.org|") }, Action(Discard) };Rule { Matches { Domain("|rappler.com|") }, Action(Discard) };Rule { Matches { Domain("|swarthmore.edu|") }, Action(Discard) };Rule { Matches { Domain("|nikon.com|") }, Action(Discard) };Rule { Matches { Domain("|jabra.com|") }, Action(Discard) };Rule { Matches { Domain("|volcgslb.com|") }, Action(Discard) };Rule { Matches { Domain("|byteimg.com|") }, Action(Discard) };Rule { Matches { Domain("|godotengine.org|") }, Action(Discard) };Rule { Matches { Domain("|viettelidc.com.vn|") }, Action(Discard) };Rule { Matches { Domain("|fansly.com|") }, Action(Discard) };Rule { Matches { Domain("|mirrored.to|") }, Action(Discard) };Rule { Matches { Domain("|siftscience.com|") }, Action(Discard) };Rule { Matches { Domain("|steam-chat.com|") }, Action(Discard) };Rule { Matches { Domain("|emeraldinsight.com|") }, Action(Discard) };Rule { Matches { Domain("|clashofclans.com|") }, Action(Discard) };Rule { Matches { Domain("|narrative.io|") }, Action(Discard) };Rule { Matches { Domain("|freebuf.com|") }, Action(Discard) };Rule { Matches { Domain("|download.com|") }, Action(Discard) };Rule { Matches { Domain("|moddb.com|") }, Action(Discard) };Rule { Matches { Domain("|thehackernews.com|") }, Action(Discard) };Rule { Matches { Domain("|zndns.com|") }, Action(Discard) };Rule { Matches { Domain("|writeablog.net|") }, Action(Discard) };Rule { Matches { Domain("|wykop.pl|") }, Action(Discard) };Rule { Matches { Domain("|rarlab.com|") }, Action(Discard) };Rule { Matches { Domain("|aeon.co|") }, Action(Discard) };Rule { Matches { Domain("|infura.io|") }, Action(Discard) };Rule { Matches { Domain("|macmillanlearning.com|") }, Action(Discard) };Rule { Matches { Domain("|woolworths.com.au|") }, Action(Discard) };Rule { Matches { Domain("|worldremit.com|") }, Action(Discard) };Rule { Matches { Domain("|prlog.org|") }, Action(Discard) };Rule { Matches { Domain("|aalto.fi|") }, Action(Discard) };Rule { Matches { Domain("|s-dc-msedge.net|") }, Action(Discard) };Rule { Matches { Domain("|hostdl.com|") }, Action(Discard) };Rule { Matches { Domain("|swr.de|") }, Action(Discard) };Rule { Matches { Domain("|n4dns.com|") }, Action(Discard) };Rule { Matches { Domain("|swbell.net|") }, Action(Discard) };Rule { Matches { Domain("|tiffany.com|") }, Action(Discard) };Rule { Matches { Domain("|newschool.edu|") }, Action(Discard) };Rule { Matches { Domain("|adaa.org|") }, Action(Discard) };Rule { Matches { Domain("|yebaike.com|") }, Action(Discard) };Rule { Matches { Domain("|ntu.edu.sg|") }, Action(Discard) };Rule { Matches { Domain("|naughtyamerica.com|") }, Action(Discard) };Rule { Matches { Domain("|mediaplex.com|") }, Action(Discard) };Rule { Matches { Domain("|muumuu-domain.com|") }, Action(Discard) };Rule { Matches { Domain("|nsa.gov|") }, Action(Discard) };Rule { Matches { Domain("|cedia.org.ec|") }, Action(Discard) };Rule { Matches { Domain("|freedomhouse.org|") }, Action(Discard) };Rule { Matches { Domain("|7news.com.au|") }, Action(Discard) };Rule { Matches { Domain("|ov1o.com|") }, Action(Discard) };Rule { Matches { Domain("|iprima.cz|") }, Action(Discard) };Rule { Matches { Domain("|gamesindustry.biz|") }, Action(Discard) };Rule { Matches { Domain("|sleazyfork.org|") }, Action(Discard) };Rule { Matches { Domain("|nic.uy|") }, Action(Discard) };Rule { Matches { Domain("|admob.com|") }, Action(Discard) };Rule { Matches { Domain("|jiomart.com|") }, Action(Discard) };Rule { Matches { Domain("|setlist.fm|") }, Action(Discard) };Rule { Matches { Domain("|theadvocate.com|") }, Action(Discard) };Rule { Matches { Domain("|google.cm|") }, Action(Discard) };Rule { Matches { Domain("|recreation.gov|") }, Action(Discard) };Rule { Matches { Domain("|uab.cat|") }, Action(Discard) };Rule { Matches { Domain("|comcastbusiness.net|") }, Action(Discard) };Rule { Matches { Domain("|centrum.cz|") }, Action(Discard) };Rule { Matches { Domain("|newyorklife.com|") }, Action(Discard) };Rule { Matches { Domain("|cat.net.th|") }, Action(Discard) };Rule { Matches { Domain("|garanteprivacy.it|") }, Action(Discard) };Rule { Matches { Domain("|downza.cn|") }, Action(Discard) };Rule { Matches { Domain("|lkt.is|") }, Action(Discard) };Rule { Matches { Domain("|keka.com|") }, Action(Discard) };Rule { Matches { Domain("|theiet.org|") }, Action(Discard) };Rule { Matches { Domain("|uhaul.com|") }, Action(Discard) };Rule { Matches { Domain("|hofstra.edu|") }, Action(Discard) };Rule { Matches { Domain("|tripadvisor.fr|") }, Action(Discard) };Rule { Matches { Domain("|sse.com.cn|") }, Action(Discard) };Rule { Matches { Domain("|fpo.xxx|") }, Action(Discard) };Rule { Matches { Domain("|hi.ru|") }, Action(Discard) };Rule { Matches { Domain("|tecnoblog.net|") }, Action(Discard) };Rule { Matches { Domain("|gfpnet.com|") }, Action(Discard) };Rule { Matches { Domain("|masrawy.com|") }, Action(Discard) };Rule { Matches { Domain("|guitarcenter.com|") }, Action(Discard) };Rule { Matches { Domain("|ntsw.ir|") }, Action(Discard) };Rule { Matches { Domain("|aimatch.net|") }, Action(Discard) };Rule { Matches { Domain("|hsreplay.net|") }, Action(Discard) };Rule { Matches { Domain("|mijndnsserver.nl|") }, Action(Discard) };Rule { Matches { Domain("|waterstones.com|") }, Action(Discard) };Rule { Matches { Domain("|dazeddigital.com|") }, Action(Discard) };Rule { Matches { Domain("|kuaikanmanhua.com|") }, Action(Discard) };Rule { Matches { Domain("|geni.us|") }, Action(Discard) };Rule { Matches { Domain("|qt.io|") }, Action(Discard) };Rule { Matches { Domain("|thepioneerwoman.com|") }, Action(Discard) };Rule { Matches { Domain("|atlanticcouncil.org|") }, Action(Discard) };Rule { Matches { Domain("|cdn-sw.net|") }, Action(Discard) };Rule { Matches { Domain("|solvvy.com|") }, Action(Discard) };Rule { Matches { Domain("|bugutv.net|") }, Action(Discard) };Rule { Matches { Domain("|deutschlandfunk.de|") }, Action(Discard) };Rule { Matches { Domain("|pof.com|") }, Action(Discard) };Rule { Matches { Domain("|a1q7.net|") }, Action(Discard) };Rule { Matches { Domain("|hath.network|") }, Action(Discard) };Rule { Matches { Domain("|breezy.hr|") }, Action(Discard) };Rule { Matches { Domain("|allporncomic.com|") }, Action(Discard) };Rule { Matches { Domain("|zooplus.io|") }, Action(Discard) };Rule { Matches { Domain("|filmfreeway.com|") }, Action(Discard) };Rule { Matches { Domain("|king5.com|") }, Action(Discard) };Rule { Matches { Domain("|eukdns.com|") }, Action(Discard) };Rule { Matches { Domain("|reedsy.com|") }, Action(Discard) };Rule { Matches { Domain("|bg.ac.rs|") }, Action(Discard) };Rule { Matches { Domain("|cntd.ru|") }, Action(Discard) };Rule { Matches { Domain("|sawbrokers.com|") }, Action(Discard) };Rule { Matches { Domain("|alphacdn.net|") }, Action(Discard) };Rule { Matches { Domain("|lightwidget.com|") }, Action(Discard) };Rule { Matches { Domain("|ciceksepeti.com|") }, Action(Discard) };Rule { Matches { Domain("|acsechocaptiveportal.com|") }, Action(Discard) };Rule { Matches { Domain("|medicaldaily.com|") }, Action(Discard) };Rule { Matches { Domain("|usergate.com|") }, Action(Discard) };Rule { Matches { Domain("|inhostedns.net|") }, Action(Discard) };Rule { Matches { Domain("|xhqxmovies.com|") }, Action(Discard) };Rule { Matches { Domain("|goodnotesplatform.com|") }, Action(Discard) };Rule { Matches { Domain("|worldoftanks.eu|") }, Action(Discard) };Rule { Matches { Domain("|cdiscount.com|") }, Action(Discard) };Rule { Matches { Domain("|kaufland.de|") }, Action(Discard) };Rule { Matches { Domain("|nic.ch|") }, Action(Discard) };Rule { Matches { Domain("|paypalinc.com|") }, Action(Discard) };Rule { Matches { Domain("|novotelecom.ru|") }, Action(Discard) };Rule { Matches { Domain("|gameforge.com|") }, Action(Discard) };Rule { Matches { Domain("|zdbb.net|") }, Action(Discard) };Rule { Matches { Domain("|filman.cc|") }, Action(Discard) };Rule { Matches { Domain("|webaim.org|") }, Action(Discard) };Rule { Matches { Domain("|zhiso.top|") }, Action(Discard) };Rule { Matches { Domain("|k2s.cc|") }, Action(Discard) };Rule { Matches { Domain("|volganet.ru|") }, Action(Discard) };Rule { Matches { Domain("|mskcc.org|") }, Action(Discard) };Rule { Matches { Domain("|heb.com|") }, Action(Discard) };Rule { Matches { Domain("|superpages.com|") }, Action(Discard) };Rule { Matches { Domain("|mrporter.com|") }, Action(Discard) };Rule { Matches { Domain("|telkomhosting.com|") }, Action(Discard) };Rule { Matches { Domain("|qatarliving.com|") }, Action(Discard) };Rule { Matches { Domain("|rollbar.com|") }, Action(Discard) };Rule { Matches { Domain("|google.as|") }, Action(Discard) };Rule { Matches { Domain("|bookstack.cn|") }, Action(Discard) };Rule { Matches { Domain("|uni-kiel.de|") }, Action(Discard) };Rule { Matches { Domain("|rover.com|") }, Action(Discard) };Rule { Matches { Domain("|yahoosandbox.com|") }, Action(Discard) };Rule { Matches { Domain("|riskified.com|") }, Action(Discard) };Rule { Matches { Domain("|computer.org|") }, Action(Discard) };Rule { Matches { Domain("|hetaruwg.com|") }, Action(Discard) };Rule { Matches { Domain("|darkreading.com|") }, Action(Discard) };Rule { Matches { Domain("|mawdoo3.com|") }, Action(Discard) };Rule { Matches { Domain("|sphinx-doc.org|") }, Action(Discard) };Rule { Matches { Domain("|io9.com|") }, Action(Discard) };Rule { Matches { Domain("|artofmanliness.com|") }, Action(Discard) };Rule { Matches { Domain("|mturk.com|") }, Action(Discard) };Rule { Matches { Domain("|blog.ir|") }, Action(Discard) };Rule { Matches { Domain("|haqqin.az|") }, Action(Discard) };Rule { Matches { Domain("|donanimhaber.com|") }, Action(Discard) };Rule { Matches { Domain("|pbsg.com|") }, Action(Discard) };Rule { Matches { Domain("|umblr.com|") }, Action(Discard) };Rule { Matches { Domain("|ouedkniss.com|") }, Action(Discard) };Rule { Matches { Domain("|suumo.jp|") }, Action(Discard) };Rule { Matches { Domain("|cvastico.com|") }, Action(Discard) };Rule { Matches { Domain("|qiwi.com|") }, Action(Discard) };Rule { Matches { Domain("|flyfrontier.com|") }, Action(Discard) };Rule { Matches { Domain("|microcenter.com|") }, Action(Discard) };Rule { Matches { Domain("|procore.com|") }, Action(Discard) };Rule { Matches { Domain("|corning.com|") }, Action(Discard) };Rule { Matches { Domain("|mxpnl.com|") }, Action(Discard) };Rule { Matches { Domain("|oast.site|") }, Action(Discard) };Rule { Matches { Domain("|juntadeandalucia.es|") }, Action(Discard) };Rule { Matches { Domain("|super.cz|") }, Action(Discard) };Rule { Matches { Domain("|caf.fr|") }, Action(Discard) };Rule { Matches { Domain("|wikifeet.com|") }, Action(Discard) };Rule { Matches { Domain("|fctg.cloud|") }, Action(Discard) };Rule { Matches { Domain("|osti.gov|") }, Action(Discard) };Rule { Matches { Domain("|hostedemail.com|") }, Action(Discard) };Rule { Matches { Domain("|akwam.cc|") }, Action(Discard) };Rule { Matches { Domain("|betadnszone.com|") }, Action(Discard) };Rule { Matches { Domain("|lk21official.lol|") }, Action(Discard) };Rule { Matches { Domain("|resetera.com|") }, Action(Discard) };Rule { Matches { Domain("|foreflight.com|") }, Action(Discard) };Rule { Matches { Domain("|wfu.edu|") }, Action(Discard) };Rule { Matches { Domain("|lasvegassun.com|") }, Action(Discard) };Rule { Matches { Domain("|keysight.com|") }, Action(Discard) };Rule { Matches { Domain("|bpost.be|") }, Action(Discard) };Rule { Matches { Domain("|ktvu.com|") }, Action(Discard) };Rule { Matches { Domain("|thesprucecrafts.com|") }, Action(Discard) };Rule { Matches { Domain("|uestc.edu.cn|") }, Action(Discard) };Rule { Matches { Domain("|stives.com|") }, Action(Discard) };Rule { Matches { Domain("|myprotein.com|") }, Action(Discard) };Rule { Matches { Domain("|rediris.es|") }, Action(Discard) };Rule { Matches { Domain("|pr0gramm.com|") }, Action(Discard) };Rule { Matches { Domain("|clickmeeting.com|") }, Action(Discard) };Rule { Matches { Domain("|ortb.net|") }, Action(Discard) };Rule { Matches { Domain("|saude.gov.br|") }, Action(Discard) };Rule { Matches { Domain("|uba.ar|") }, Action(Discard) };Rule { Matches { Domain("|stratoserver.net|") }, Action(Discard) };Rule { Matches { Domain("|allevents.in|") }, Action(Discard) };Rule { Matches { Domain("|tkznp.com|") }, Action(Discard) };Rule { Matches { Domain("|peplink.com|") }, Action(Discard) };Rule { Matches { Domain("|brainpop.com|") }, Action(Discard) };Rule { Matches { Domain("|userreport.com|") }, Action(Discard) };Rule { Matches { Domain("|google.com.gh|") }, Action(Discard) };Rule { Matches { Domain("|uta.edu|") }, Action(Discard) };Rule { Matches { Domain("|defybrick.com|") }, Action(Discard) };Rule { Matches { Domain("|umb.edu|") }, Action(Discard) };Rule { Matches { Domain("|cleverreach.com|") }, Action(Discard) };Rule { Matches { Domain("|backblazeb2.com|") }, Action(Discard) };Rule { Matches { Domain("|laowang.vip|") }, Action(Discard) };Rule { Matches { Domain("|kontiki.com|") }, Action(Discard) };Rule { Matches { Domain("|usenix.org|") }, Action(Discard) };Rule { Matches { Domain("|listal.com|") }, Action(Discard) };Rule { Matches { Domain("|elifesciences.org|") }, Action(Discard) };Rule { Matches { Domain("|pcloud.com|") }, Action(Discard) };Rule { Matches { Domain("|alison.com|") }, Action(Discard) };Rule { Matches { Domain("|kicker.de|") }, Action(Discard) };Rule { Matches { Domain("|humana.com|") }, Action(Discard) };Rule { Matches { Domain("|unglobalcompact.org|") }, Action(Discard) };Rule { Matches { Domain("|permkrai.ru|") }, Action(Discard) };Rule { Matches { Domain("|universiteitleiden.nl|") }, Action(Discard) };Rule { Matches { Domain("|uni-lj.si|") }, Action(Discard) };Rule { Matches { Domain("|philstar.com|") }, Action(Discard) };Rule { Matches { Domain("|courtlistener.com|") }, Action(Discard) };Rule { Matches { Domain("|google.com.pr|") }, Action(Discard) };Rule { Matches { Domain("|jqueryui.com|") }, Action(Discard) };Rule { Matches { Domain("|rarbgto.org|") }, Action(Discard) };Rule { Matches { Domain("|scu.edu.cn|") }, Action(Discard) };Rule { Matches { Domain("|compuserve.com|") }, Action(Discard) };Rule { Matches { Domain("|hsn.com|") }, Action(Discard) };Rule { Matches { Domain("|galpic.xyz|") }, Action(Discard) };Rule { Matches { Domain("|blic.rs|") }, Action(Discard) };Rule { Matches { Domain("|fastmail.com|") }, Action(Discard) };Rule { Matches { Domain("|xvideos2.com|") }, Action(Discard) };Rule { Matches { Domain("|angelone.in|") }, Action(Discard) };Rule { Matches { Domain("|qihoo.net|") }, Action(Discard) };Rule { Matches { Domain("|nsset.be|") }, Action(Discard) };Rule { Matches { Domain("|php.cn|") }, Action(Discard) };Rule { Matches { Domain("|ruanyifeng.com|") }, Action(Discard) };Rule { Matches { Domain("|cloudtrax.com|") }, Action(Discard) };Rule { Matches { Domain("|53.com|") }, Action(Discard) };Rule { Matches { Domain("|japantoday.com|") }, Action(Discard) };Rule { Matches { Domain("|ilmeteo.it|") }, Action(Discard) };Rule { Matches { Domain("|in.gov.br|") }, Action(Discard) };Rule { Matches { Domain("|theice.com|") }, Action(Discard) };Rule { Matches { Domain("|db.tt|") }, Action(Discard) };Rule { Matches { Domain("|triara.com|") }, Action(Discard) };Rule { Matches { Domain("|macleans.ca|") }, Action(Discard) };Rule { Matches { Domain("|rbi.org.in|") }, Action(Discard) };Rule { Matches { Domain("|saglik.gov.tr|") }, Action(Discard) };Rule { Matches { Domain("|premier.one|") }, Action(Discard) };Rule { Matches { Domain("|gouvernement.fr|") }, Action(Discard) };Rule { Matches { Domain("|domain.com.au|") }, Action(Discard) };Rule { Matches { Domain("|wcofun.net|") }, Action(Discard) };Rule { Matches { Domain("|rarathemes.com|") }, Action(Discard) };Rule { Matches { Domain("|presearch.com|") }, Action(Discard) };Rule { Matches { Domain("|montrealgazette.com|") }, Action(Discard) };Rule { Matches { Domain("|sixflags.com|") }, Action(Discard) };Rule { Matches { Domain("|aftenposten.no|") }, Action(Discard) };Rule { Matches { Domain("|fr.ru|") }, Action(Discard) };Rule { Matches { Domain("|narkive.com|") }, Action(Discard) };Rule { Matches { Domain("|infor.com|") }, Action(Discard) };Rule { Matches { Domain("|iucnredlist.org|") }, Action(Discard) };Rule { Matches { Domain("|brit.co|") }, Action(Discard) };Rule { Matches { Domain("|techpowerup.com|") }, Action(Discard) };Rule { Matches { Domain("|heureka.cz|") }, Action(Discard) };Rule { Matches { Domain("|dnsedgecenter.com|") }, Action(Discard) };Rule { Matches { Domain("|technolife.ir|") }, Action(Discard) };Rule { Matches { Domain("|liverpool.ac.uk|") }, Action(Discard) };Rule { Matches { Domain("|qservers.net|") }, Action(Discard) };Rule { Matches { Domain("|101.ru|") }, Action(Discard) };Rule { Matches { Domain("|sorare.com|") }, Action(Discard) };Rule { Matches { Domain("|bradesco.com.br|") }, Action(Discard) };Rule { Matches { Domain("|rawkuma.com|") }, Action(Discard) };Rule { Matches { Domain("|cqhot.cn|") }, Action(Discard) };Rule { Matches { Domain("|sinor.ru|") }, Action(Discard) };Rule { Matches { Domain("|deepai.org|") }, Action(Discard) };Rule { Matches { Domain("|stylecraze.com|") }, Action(Discard) };Rule { Matches { Domain("|snappfood.ir|") }, Action(Discard) };Rule { Matches { Domain("|korrespondent.net|") }, Action(Discard) };Rule { Matches { Domain("|hawkhost.com|") }, Action(Discard) };Rule { Matches { Domain("|strn.pl|") }, Action(Discard) };Rule { Matches { Domain("|edgekey88.net|") }, Action(Discard) };Rule { Matches { Domain("|safaricom.co.ke|") }, Action(Discard) };Rule { Matches { Domain("|stores.jp|") }, Action(Discard) };Rule { Matches { Domain("|discourse.cloud|") }, Action(Discard) };Rule { Matches { Domain("|dns.business|") }, Action(Discard) };Rule { Matches { Domain("|affinity.net|") }, Action(Discard) };Rule { Matches { Domain("|starlink.com|") }, Action(Discard) };Rule { Matches { Domain("|sec-ns.de|") }, Action(Discard) };Rule { Matches { Domain("|appen.com|") }, Action(Discard) };Rule { Matches { Domain("|pingan.com|") }, Action(Discard) };Rule { Matches { Domain("|fareharbor.com|") }, Action(Discard) };Rule { Matches { Domain("|gillette.com|") }, Action(Discard) };Rule { Matches { Domain("|soup.io|") }, Action(Discard) };Rule { Matches { Domain("|taxact.com|") }, Action(Discard) };Rule { Matches { Domain("|movistar.es|") }, Action(Discard) };Rule { Matches { Domain("|lesoir.be|") }, Action(Discard) };Rule { Matches { Domain("|nationaltoday.com|") }, Action(Discard) };Rule { Matches { Domain("|fontsquirrel.com|") }, Action(Discard) };Rule { Matches { Domain("|uem.mz|") }, Action(Discard) };Rule { Matches { Domain("|anjixiong.com|") }, Action(Discard) };Rule { Matches { Domain("|bta.net.cn|") }, Action(Discard) };Rule { Matches { Domain("|copyleft.no|") }, Action(Discard) };Rule { Matches { Domain("|nbcwashington.com|") }, Action(Discard) };Rule { Matches { Domain("|mozillazine.org|") }, Action(Discard) };Rule { Matches { Domain("|inkuai.com|") }, Action(Discard) };Rule { Matches { Domain("|tplinkra-ipc.com|") }, Action(Discard) };Rule { Matches { Domain("|trust.org|") }, Action(Discard) };Rule { Matches { Domain("|selcdn.net|") }, Action(Discard) };Rule { Matches { Domain("|gentoo.org|") }, Action(Discard) };Rule { Matches { Domain("|aph.gov.au|") }, Action(Discard) };Rule { Matches { Domain("|wpxhosting.com|") }, Action(Discard) };Rule { Matches { Domain("|queniusz.com|") }, Action(Discard) };Rule { Matches { Domain("|healio.com|") }, Action(Discard) };Rule { Matches { Domain("|audioboom.com|") }, Action(Discard) };Rule { Matches { Domain("|hdzog.com|") }, Action(Discard) };Rule { Matches { Domain("|saasexch.com|") }, Action(Discard) };Rule { Matches { Domain("|dkp-manager.ml|") }, Action(Discard) };Rule { Matches { Domain("|spirit.com|") }, Action(Discard) };Rule { Matches { Domain("|teletype.in|") }, Action(Discard) };Rule { Matches { Domain("|uscg.mil|") }, Action(Discard) };Rule { Matches { Domain("|gamejolt.com|") }, Action(Discard) };Rule { Matches { Domain("|iranserver.com|") }, Action(Discard) };Rule { Matches { Domain("|google.co.ug|") }, Action(Discard) };Rule { Matches { Domain("|firstam.com|") }, Action(Discard) };Rule { Matches { Domain("|keepa.com|") }, Action(Discard) };Rule { Matches { Domain("|dignitymemorial.com|") }, Action(Discard) };Rule { Matches { Domain("|techinasia.com|") }, Action(Discard) };Rule { Matches { Domain("|device9.com|") }, Action(Discard) };Rule { Matches { Domain("|upyun.com|") }, Action(Discard) };Rule { Matches { Domain("|immersivelabs.online|") }, Action(Discard) }; diff --git a/crates/optics/testcases/samples/academic.optic b/crates/optics/testcases/samples/academic.optic new file mode 100644 index 000000000..7420bf83a --- /dev/null +++ b/crates/optics/testcases/samples/academic.optic @@ -0,0 +1,19 @@ +DiscardNonMatching; + +Rule { + Matches { + Domain(".edu|") + } +}; + +Rule { + Matches { + Domain(".ac.uk|") + } +}; + +Rule { + Matches { + Domain("|arxiv.org|") + } +}; \ No newline at end of file diff --git a/crates/optics/testcases/samples/copycats_removal.optic b/crates/optics/testcases/samples/copycats_removal.optic new file mode 100644 index 000000000..bef3490c1 --- /dev/null +++ b/crates/optics/testcases/samples/copycats_removal.optic @@ -0,0 +1,1563 @@ +// Github translations +// source: https://raw.githubusercontent.com/arosh/ublacklist-github-translation/master/uBlacklist.txt +Rule { + Matches { + Site("|bleepcoder.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|githubja.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|gitmemory.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|giters.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|githubmemory.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|githubmate.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|wenyanet.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|issueexplorer.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|opensourcelibs.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|awesomeopensource.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|findbestopensource.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|githubhelp.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|golangrepo.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|gitmemory.cn|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|pythonissues.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|reposhub.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|openprojectrepo.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|gitanswer.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|githubplus.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|pythonrepo.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|bestofcpp.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|github.innominds.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|higithub.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|githublab.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|githubhot.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|issuehint.com|") + }, + Action(Discard) +}; + +// Stackoverflow translations +// source: https://raw.githubusercontent.com/arosh/ublacklist-stackoverflow-translation/master/uBlacklist.txt +Rule { + Matches { + Site("|code-examples.net|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|kotaeta.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|answer-id.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|de-vraag.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|code.i-harness.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|living-sun.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|qastack.jp|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|qastack.ru|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|qastack.it|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|qastack.mx|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|qastack.com.br|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|qastack.info.tr|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|qastack.in.th|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|qastack.com.de|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|qastack.fr|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|qastack.cn|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|qastack.com.ua|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|qastack.co.in|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|qastack.kr|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|qastack.vn|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|qastack.net.bd|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|qa-stack.pl|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|qastack.id|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|coder.work|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|it-swarm-ja.tech|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|it-swarm.jp.net|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|it-swarm-ja.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|webdevqa.jp.net|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|web-dev-qa-db-ja.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|it-swarm-fr.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|web-dev-qa-db-fr.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|codeflow.site|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|codeguides.site|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|overcoder.net|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|coderoad.ru|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|javaer101.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|voidcc.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|siwib.org|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|fluffyfables.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|fixes.pub|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|knews.vip|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|isolution.pro|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|uwenku.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|athabasca-foto.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|zsharp.org|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|projectbackpack.org|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|waymanamechurch.org|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|sunflowercreations.org|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|cfadnc.org|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|fitforlearning.org|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|panaindustrial.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|sierrasummit2005.org|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|theshuggahpies.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|pcbconline.org|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|nuomiphp.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|ubuntu.buildwebhost.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|ubuntuaa.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|debugcn.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|sch22.org|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|gupgallery.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|amuddycup.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|ecnf2016.org|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|softwareuser.asklobster.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|domainelespailles.net|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|ec-europe.org|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|pakostnici.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|try2explore.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|itectec.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|stackovergo.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|faithcov.org|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|noblenaz.org|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|culinarydegree.info|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|qapicks.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|narkive.jp|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|ourladylakes.org|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|intellipaat.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|newbedev.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|codenong.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|routinepanic.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|tousu.in|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|tutorialmore.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|titanwolf.org|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|coderedirect.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|fullstackuser.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|ostack.cn|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|wujigu.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|webdevdesigner.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|ghcc.net|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|developreference.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|semicolonworld.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|tipsfordev.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|qi-u.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|xsprogram.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|stackoom.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|cndgn.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|generacodice.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|stackfinder.jp.net|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|uebu-kaihatsu.jp.net|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|sqlite.in|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|stackguides.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|younggeeks.in|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|answerlib.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|edupro.id|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|stackfinder.ru|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|desenv-web-rp.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|web-dev-qa-db-pt.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|jscodetips.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|5axxw.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|question-it.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|codefaq.info|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|codefaq.ru|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|mediatagtw.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|progi.pro|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|elfishgene.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|sysadminde.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|answacode.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|ask-dev.ru|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|arip-photo.org|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|jablogs.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|jpdebug.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|askcodez.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|iquestion.pro|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|ntcdoon.org|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|programmierfrage.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|microeducate.tech|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|debugko.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|devdreamz.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|catwolf.org|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|1r1g.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|string.quest|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|reddit.fun|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|qa.icopy.site|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|errorsfixing.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|syntaxfix.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|codegrepr.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|quabr.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|serveanswer.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|safehavenpetrescue.org|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|cainiaojiaocheng.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|linuxfixes.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|it-roy-ru.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|web-dev-qa.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|flutterhq.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|dailydevsblog.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|711web.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|binarydevelop.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|so.muouseo.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|coder-solution-es.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|peaku.co|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|learnfk.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|solveforum.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|edureka.co|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|itecnote.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|tagsqa.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|faqcode4u.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|digitrain.ru|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|prograide.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|dovov.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|oomake.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|ajaxhispano.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|codebaoku.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|daplus.net|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|questu.ru|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|itranslater.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|doraprojects.net|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|iteramos.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|faqcodes.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|mejorcodigo.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|anycodings.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|javafixing.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|xstack.us|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|shenghuobao.net|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|overstack.in|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|zaizhele.cn|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|zaizhele.net|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|xstack.ru|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|mlink.in|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|jonic.cn|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|jike.in|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|16892.net|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|vigges.net|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|55276.net|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|ogeek.cn|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|shenzhenjia.net|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|shenzhenjia.cn|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|9ishenzhen.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|vigge.net|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|vigge.cn|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|web-dev-qa-db-fra.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|ape-ask.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|yaoply.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|techhelpnotes.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|wp-qa.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|querythreads.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|appsloveworld.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|dtuto.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|qatop.pythonwood.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|webdevask.com|") + }, + Action(Discard) +}; + + +// Shitty Copy-Paste websites +// source: https://raw.githubusercontent.com/stroobants-dev/ublock-origin-shitty-copies-filter/main/combined-list.txt +Rule { + Matches { + Site("|laravelquestions.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|py4u.net|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|issues-world.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|article.docway.net|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|xiu2.net|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|codehero.jp|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|quabr.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|webdevqa.jp.net|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|exceptionshub.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|pythonwd.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|alwaysemmyhope.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|pretagteam.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|easysavecode.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|stackqna.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|imtqy.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|christfever.in|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|codersatellite.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|coredump.biz|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|farath.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|devbugfix.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|tech.wayne-chu.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|stackify.dev|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|webknox.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|coder-solution-jp.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|jpndev.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|python-stack.de|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|stackfault.net|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|howtofix.io|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|buzzphp.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|askdev.vn|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|quares.ru|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|examplefiles.net|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|codewdw.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|jpcodeqa.com|") + }, + Action(Discard) +}; +Rule { + Matches { + Site("|tutorialguruji.com|") + }, + Action(Discard) +} \ No newline at end of file diff --git a/crates/optics/testcases/samples/devdocs.optic b/crates/optics/testcases/samples/devdocs.optic new file mode 100644 index 000000000..3761d7448 --- /dev/null +++ b/crates/optics/testcases/samples/devdocs.optic @@ -0,0 +1,192 @@ +DiscardNonMatching; + +/* + Some documentation sites from devdocs.io + Please open a PR if you feel like some sites are missing +*/ + +Rule { + Matches { + Site("|developer.mozilla.org|") + } +}; + +Rule { + Matches { + Domain("|docs.rs|") + } +}; + +Rule { + Matches { + Domain("|readthedocs.org|") + } +}; + +Rule { + Matches { + Domain("|cppreference.com|") + } +}; + +Rule { + Matches { + Domain("|python.org|") + } +}; + +Rule { + Matches { + Domain("|pytorch.org|") + } +}; + +Rule { + Matches { + Site("|doc.rust-lang.org|") + } +}; + +Rule { + Matches { + Site("|docs.npmjs.com|") + } +}; + +Rule { + Matches { + Site("|docs.julialang.org|") + } +}; + +Rule { + Matches { + Domain("|kotlinlang.org|") + } +}; + +Rule { + Matches { + Domain("|kubernetes.io|") + } +}; + +Rule { + Matches { + Domain("|latexref.xyz|") + } +}; + +Rule { + Matches { + Domain("|mariadb.com|") + } +}; + +Rule { + Matches { + Domain("|nginx.org|") + } +}; + +Rule { + Matches { + Domain("|nim-lang.org|") + } +}; + +Rule { + Matches { + Domain("|nixos.org|") + } +}; + +Rule { + Matches { + Domain("|nodejs.org|") + } +}; + +Rule { + Matches { + Domain("|numpy.org|") + } +}; + +Rule { + Matches { + Domain("|openjdk.java.net|") + } +}; + +Rule { + Matches { + Domain("|php.net|") + } +}; + +Rule { + Matches { + Domain("|postgresql.org|") + } +}; + +Rule { + Matches { + Domain("|qt.io|") + } +}; + +Rule { + Matches { + Domain("|reactjs.org|") + } +}; + +Rule { + Matches { + Domain("|reactnative.dev|") + } +}; + +Rule { + Matches { + Domain("|redis.io|") + } +}; + +Rule { + Matches { + Domain("|scala-lang.org|") + } +}; + +Rule { + Matches { + Domain("|scikit-learn.org|") + } +}; + +Rule { + Matches { + Domain("|sqlite.org|") + } +}; + +Rule { + Matches { + Domain("|tailwindcss.com|") + } +}; + +Rule { + Matches { + Domain("|typescriptlang.org|") + } +}; + +Rule { + Matches { + Domain("|devdocs.io|") + } +}; \ No newline at end of file diff --git a/crates/optics/testcases/samples/discussions.optic b/crates/optics/testcases/samples/discussions.optic new file mode 100644 index 000000000..f9d29d635 --- /dev/null +++ b/crates/optics/testcases/samples/discussions.optic @@ -0,0 +1,5241 @@ +DiscardNonMatching; + +Rule { + Matches { + Schema("QAPage"), + } +}; + +Rule { + Matches { + Schema("DiscussionForumPosting"), + } +}; + +Rule { + Matches { + Domain("reddit.com"), + Url("comments"), + } +}; + +// source of instances: https://github.com/maltfield/awesome-lemmy-instances +Rule { + Matches { + Site("|lemmy.world|") + } +}; + +Rule { + Matches { + Site("|lemmy.ml|") + } +}; + +Rule { + Matches { + Site("|feddit.de|") + } +}; + +Rule { + Matches { + Site("|sh.itjust.works|") + } +}; + +Rule { + Matches { + Site("|lemmy.one|") + } +}; + +Rule { + Matches { + Site("|lemmynsfw.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.ca|") + } +}; + +Rule { + Matches { + Site("|lemmy.fmhy.ml|") + } +}; + +Rule { + Matches { + Site("|lemm.ee|") + } +}; + +Rule { + Matches { + Site("|lemmy.blahaj.zone|") + } +}; + +Rule { + Matches { + Site("|lemmy.dbzer0.com|") + } +}; + +Rule { + Matches { + Site("|lemmygrad.ml|") + } +}; + +Rule { + Matches { + Site("|programming.dev|") + } +}; + +Rule { + Matches { + Site("|sopuli.xyz|") + } +}; + +Rule { + Matches { + Site("|discuss.tchncs.de|") + } +}; + +Rule { + Matches { + Site("|lemmy.sdf.org|") + } +}; + +Rule { + Matches { + Site("|vlemmy.net|") + } +}; + +Rule { + Matches { + Site("|aussie.zone|") + } +}; + +Rule { + Matches { + Site("|feddit.uk|") + } +}; + +Rule { + Matches { + Site("|startrek.website|") + } +}; + +Rule { + Matches { + Site("|dormi.zone|") + } +}; + +Rule { + Matches { + Site("|feddit.it|") + } +}; + +Rule { + Matches { + Site("|infosec.pub|") + } +}; + +Rule { + Matches { + Site("|pawb.social|") + } +}; + +Rule { + Matches { + Site("|feddit.nl|") + } +}; + +Rule { + Matches { + Site("|lemmy.burger.rodeo|") + } +}; + +Rule { + Matches { + Site("|burggit.moe|") + } +}; + +Rule { + Matches { + Site("|slrpnk.net|") + } +}; + +Rule { + Matches { + Site("|feddit.dk|") + } +}; + +Rule { + Matches { + Site("|lemmy.nz|") + } +}; + +Rule { + Matches { + Site("|mander.xyz|") + } +}; + +Rule { + Matches { + Site("|feddit.cl|") + } +}; + +Rule { + Matches { + Site("|reddthat.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.zip|") + } +}; + +Rule { + Matches { + Site("|latte.isnot.coffee|") + } +}; + +Rule { + Matches { + Site("|szmer.info|") + } +}; + +Rule { + Matches { + Site("|dataterm.digital|") + } +}; + +Rule { + Matches { + Site("|exploding-heads.com|") + } +}; + +Rule { + Matches { + Site("|pathofexile-discuss.com|") + } +}; + +Rule { + Matches { + Site("|monyet.cc|") + } +}; + +Rule { + Matches { + Site("|iusearchlinux.fyi|") + } +}; + +Rule { + Matches { + Site("|yiffit.net|") + } +}; + +Rule { + Matches { + Site("|sub.wetshaving.social|") + } +}; + +Rule { + Matches { + Site("|geddit.social|") + } +}; + +Rule { + Matches { + Site("|lemmyrs.org|") + } +}; + +Rule { + Matches { + Site("|monero.town|") + } +}; + +Rule { + Matches { + Site("|partizle.com|") + } +}; + +Rule { + Matches { + Site("|mtgzone.com|") + } +}; + +Rule { + Matches { + Site("|toast.ooo|") + } +}; + +Rule { + Matches { + Site("|lemmy.studio|") + } +}; + +Rule { + Matches { + Site("|lemmy.click|") + } +}; + +Rule { + Matches { + Site("|lemmy.film|") + } +}; + +Rule { + Matches { + Site("|lemmy.radio|") + } +}; + +Rule { + Matches { + Site("|fanaticus.social|") + } +}; + +Rule { + Matches { + Site("|rammy.site|") + } +}; + +Rule { + Matches { + Site("|lemmy.villa-straylight.social|") + } +}; + +Rule { + Matches { + Site("|lemmy.whynotdrs.org|") + } +}; + +Rule { + Matches { + Site("|ttrpg.network|") + } +}; + +Rule { + Matches { + Site("|lemmy.antemeridiem.xyz|") + } +}; + +Rule { + Matches { + Site("|r-sauna.fi|") + } +}; + +Rule { + Matches { + Site("|lemmy.cafe|") + } +}; + +Rule { + Matches { + Site("|ash1-lem-i1-u4829.vm.elestio.app|") + } +}; + +Rule { + Matches { + Site("|discuss.online|") + } +}; + +Rule { + Matches { + Site("|thegarden.land|") + } +}; + +Rule { + Matches { + Site("|lemmy.spacestation14.com|") + } +}; + +Rule { + Matches { + Site("|bookwormstory.social|") + } +}; + +Rule { + Matches { + Site("|lemmy.eus|") + } +}; + +Rule { + Matches { + Site("|forum.basedcount.com|") + } +}; + +Rule { + Matches { + Site("|possumpat.io|") + } +}; + +Rule { + Matches { + Site("|lemmy.wtf|") + } +}; + +Rule { + Matches { + Site("|thelemmy.club|") + } +}; + +Rule { + Matches { + Site("|lemmy.perthchat.org|") + } +}; + +Rule { + Matches { + Site("|compuverse.uk|") + } +}; + +Rule { + Matches { + Site("|preserve.games|") + } +}; + +Rule { + Matches { + Site("|lemmy.tf|") + } +}; + +Rule { + Matches { + Site("|dmv.social|") + } +}; + +Rule { + Matches { + Site("|lemmy.eco.br|") + } +}; + +Rule { + Matches { + Site("|social.fossware.space|") + } +}; + +Rule { + Matches { + Site("|lemmy.podycust.co.uk|") + } +}; + +Rule { + Matches { + Site("|diggit.xyz|") + } +}; + +Rule { + Matches { + Site("|feddit.ch|") + } +}; + +Rule { + Matches { + Site("|picify.podycust.co.uk|") + } +}; + +Rule { + Matches { + Site("|feddit.nu|") + } +}; + +Rule { + Matches { + Site("|bolha.social|") + } +}; + +Rule { + Matches { + Site("|lemmy.ko4abp.com|") + } +}; + +Rule { + Matches { + Site("|lib.lgbt|") + } +}; + +Rule { + Matches { + Site("|lemmy.kya.moe|") + } +}; + +Rule { + Matches { + Site("|terefere.eu|") + } +}; + +Rule { + Matches { + Site("|lemmyfly.org|") + } +}; + +Rule { + Matches { + Site("|sffa.community|") + } +}; + +Rule { + Matches { + Site("|lemmy.picote.ch|") + } +}; + +Rule { + Matches { + Site("|feddit.ro|") + } +}; + +Rule { + Matches { + Site("|apollo.town|") + } +}; + +Rule { + Matches { + Site("|tucson.social|") + } +}; + +Rule { + Matches { + Site("|aiparadise.moe|") + } +}; + +Rule { + Matches { + Site("|seemel.ink|") + } +}; + +Rule { + Matches { + Site("|eslemmy.es|") + } +}; + +Rule { + Matches { + Site("|poptalk.scrubbles.tech|") + } +}; + +Rule { + Matches { + Site("|lemmy.justin.rs|") + } +}; + +Rule { + Matches { + Site("|booty.world|") + } +}; + +Rule { + Matches { + Site("|lemmy.srv.eco|") + } +}; + +Rule { + Matches { + Site("|group.lt|") + } +}; + +Rule { + Matches { + Site("|lemdit.com|") + } +}; + +Rule { + Matches { + Site("|news.cosocial.ca|") + } +}; + +Rule { + Matches { + Site("|wirebase.org|") + } +}; + +Rule { + Matches { + Site("|crystals.rest|") + } +}; + +Rule { + Matches { + Site("|suppo.fi|") + } +}; + +Rule { + Matches { + Site("|lemmy.blugatch.tube|") + } +}; + +Rule { + Matches { + Site("|baomi.tv|") + } +}; + +Rule { + Matches { + Site("|links.dartboard.social|") + } +}; + +Rule { + Matches { + Site("|lemmy.ptznetwork.org|") + } +}; + +Rule { + Matches { + Site("|notdigg.com|") + } +}; + +Rule { + Matches { + Site("|cubing.social|") + } +}; + +Rule { + Matches { + Site("|fadoverso.pt|") + } +}; + +Rule { + Matches { + Site("|dubvee.org|") + } +}; + +Rule { + Matches { + Site("|digipres.cafe|") + } +}; + +Rule { + Matches { + Site("|fig.systems|") + } +}; + +Rule { + Matches { + Site("|lemmyunchained.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.easfrq.live|") + } +}; + +Rule { + Matches { + Site("|lemmy.bulwarkob.com|") + } +}; + +Rule { + Matches { + Site("|links.rebel.ar|") + } +}; + +Rule { + Matches { + Site("|lemmy.juggler.jp|") + } +}; + +Rule { + Matches { + Site("|lm.bittervets.org|") + } +}; + +Rule { + Matches { + Site("|yall.theatl.social|") + } +}; + +Rule { + Matches { + Site("|lemmy.suchmeme.nl|") + } +}; + +Rule { + Matches { + Site("|derpzilla.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.nexus|") + } +}; + +Rule { + Matches { + Site("|lemmy.onlylans.io|") + } +}; + +Rule { + Matches { + Site("|lm.korako.me|") + } +}; + +Rule { + Matches { + Site("|lemmy.rollenspiel.monster|") + } +}; + +Rule { + Matches { + Site("|wayfarershaven.eu|") + } +}; + +Rule { + Matches { + Site("|outpost.zeuslink.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.graz.social|") + } +}; + +Rule { + Matches { + Site("|bbs.darkwitch.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.4d2.org|") + } +}; + +Rule { + Matches { + Site("|baraza.africa|") + } +}; + +Rule { + Matches { + Site("|lemmy.loomy.li|") + } +}; + +Rule { + Matches { + Site("|centennialstate.social|") + } +}; + +Rule { + Matches { + Site("|weiner.zone|") + } +}; + +Rule { + Matches { + Site("|bbs.9tail.net|") + } +}; + +Rule { + Matches { + Site("|voxpop.social|") + } +}; + +Rule { + Matches { + Site("|lemmy.funami.tech|") + } +}; + +Rule { + Matches { + Site("|skein.city|") + } +}; + +Rule { + Matches { + Site("|quex.cc|") + } +}; + +Rule { + Matches { + Site("|dot.surf|") + } +}; + +Rule { + Matches { + Site("|lemmy.today|") + } +}; + +Rule { + Matches { + Site("|lemmy.reckless.dev|") + } +}; + +Rule { + Matches { + Site("|feddit.pontual.social|") + } +}; + +Rule { + Matches { + Site("|federated.community|") + } +}; + +Rule { + Matches { + Site("|mindshare.space|") + } +}; + +Rule { + Matches { + Site("|lemmy.cock.social|") + } +}; + +Rule { + Matches { + Site("|lemmy.pro|") + } +}; + +Rule { + Matches { + Site("|frig.social|") + } +}; + +Rule { + Matches { + Site("|lemmy.kemomimi.fans|") + } +}; + +Rule { + Matches { + Site("|mylem.my|") + } +}; + +Rule { + Matches { + Site("|goddess.name|") + } +}; + +Rule { + Matches { + Site("|tagpro.lol|") + } +}; + +Rule { + Matches { + Site("|lemmy.jamesj999.co.uk|") + } +}; + +Rule { + Matches { + Site("|prime8s.xyz|") + } +}; + +Rule { + Matches { + Site("|oceanbreeze.earth|") + } +}; + +Rule { + Matches { + Site("|lemmy.roombob.cat|") + } +}; + +Rule { + Matches { + Site("|eviltoast.org|") + } +}; + +Rule { + Matches { + Site("|sub.rdls.dev|") + } +}; + +Rule { + Matches { + Site("|feddit.jp|") + } +}; + +Rule { + Matches { + Site("|keeb.lol|") + } +}; + +Rule { + Matches { + Site("|lemmy.stuart.fun|") + } +}; + +Rule { + Matches { + Site("|lemmy.darmstadt.social|") + } +}; + +Rule { + Matches { + Site("|lemmy.einval.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.themainframe.org|") + } +}; + +Rule { + Matches { + Site("|lm.madiator.cloud|") + } +}; + +Rule { + Matches { + Site("|posta.no|") + } +}; + +Rule { + Matches { + Site("|wizanons.dev|") + } +}; + +Rule { + Matches { + Site("|databend.run|") + } +}; + +Rule { + Matches { + Site("|tabletop.place|") + } +}; + +Rule { + Matches { + Site("|lemmy.wiuf.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.dormedas.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.jpiolho.com|") + } +}; + +Rule { + Matches { + Site("|linkopath.com|") + } +}; + +Rule { + Matches { + Site("|coeus.sbs|") + } +}; + +Rule { + Matches { + Site("|lemmy.avata.social|") + } +}; + +Rule { + Matches { + Site("|whiskers.bim.boats|") + } +}; + +Rule { + Matches { + Site("|lemmy.media|") + } +}; + +Rule { + Matches { + Site("|lemmy.g97.top|") + } +}; + +Rule { + Matches { + Site("|darmok.xyz|") + } +}; + +Rule { + Matches { + Site("|keylog.zip|") + } +}; + +Rule { + Matches { + Site("|lemmy.iys.io|") + } +}; + +Rule { + Matches { + Site("|lem.monster|") + } +}; + +Rule { + Matches { + Site("|normalcity.life|") + } +}; + +Rule { + Matches { + Site("|lolimbeer.com|") + } +}; + +Rule { + Matches { + Site("|bulletintree.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.tebro.fi|") + } +}; + +Rule { + Matches { + Site("|no.lastname.nz|") + } +}; + +Rule { + Matches { + Site("|sowhois.gay|") + } +}; + +Rule { + Matches { + Site("|lemmy.starlightkel.xyz|") + } +}; + +Rule { + Matches { + Site("|lemmy.ninja|") + } +}; + +Rule { + Matches { + Site("|lemmywinks.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.vanoverloop.xyz|") + } +}; + +Rule { + Matches { + Site("|foros.fediverso.gal|") + } +}; + +Rule { + Matches { + Site("|lemmy.coeus.icu|") + } +}; + +Rule { + Matches { + Site("|lemmy.place|") + } +}; + +Rule { + Matches { + Site("|lemmy.wizjenkins.com|") + } +}; + +Rule { + Matches { + Site("|social.dn42.us|") + } +}; + +Rule { + Matches { + Site("|l.roofo.cc|") + } +}; + +Rule { + Matches { + Site("|voltage.vn|") + } +}; + +Rule { + Matches { + Site("|lemmy.piperservers.net|") + } +}; + +Rule { + Matches { + Site("|feddit.nz|") + } +}; + +Rule { + Matches { + Site("|feditown.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.pathoris.de|") + } +}; + +Rule { + Matches { + Site("|lemmy.run|") + } +}; + +Rule { + Matches { + Site("|lemmy.krobier.com|") + } +}; + +Rule { + Matches { + Site("|lm.put.tf|") + } +}; + +Rule { + Matches { + Site("|livy.one|") + } +}; + +Rule { + Matches { + Site("|moot.place|") + } +}; + +Rule { + Matches { + Site("|lemmy.my.id|") + } +}; + +Rule { + Matches { + Site("|lemmy.loungerat.io|") + } +}; + +Rule { + Matches { + Site("|feddi.no|") + } +}; + +Rule { + Matches { + Site("|social.doudp.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.alexland.ca|") + } +}; + +Rule { + Matches { + Site("|shork.online|") + } +}; + +Rule { + Matches { + Site("|lemmyfi.com|") + } +}; + +Rule { + Matches { + Site("|laguna.chat|") + } +}; + +Rule { + Matches { + Site("|lemmy.marud.fr|") + } +}; + +Rule { + Matches { + Site("|communick.news|") + } +}; + +Rule { + Matches { + Site("|narod.city|") + } +}; + +Rule { + Matches { + Site("|links.hackliberty.org|") + } +}; + +Rule { + Matches { + Site("|lemmy.rat.academy|") + } +}; + +Rule { + Matches { + Site("|lemmy.jigoku.us.to|") + } +}; + +Rule { + Matches { + Site("|lemmy.linuxuserspace.show|") + } +}; + +Rule { + Matches { + Site("|orava.dev|") + } +}; + +Rule { + Matches { + Site("|forum.liberatedsystems.co.uk|") + } +}; + +Rule { + Matches { + Site("|sha1.nl|") + } +}; + +Rule { + Matches { + Site("|tslemmy.duckdns.org|") + } +}; + +Rule { + Matches { + Site("|moto.teamswollen.org|") + } +}; + +Rule { + Matches { + Site("|dgngrnder.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.minji.xyz|") + } +}; + +Rule { + Matches { + Site("|social.sour.is|") + } +}; + +Rule { + Matches { + Site("|lemmy.burningboard.net|") + } +}; + +Rule { + Matches { + Site("|nlemmy.nl|") + } +}; + +Rule { + Matches { + Site("|lemmy.bunbi.net|") + } +}; + +Rule { + Matches { + Site("|fenbushi.site|") + } +}; + +Rule { + Matches { + Site("|lef.li|") + } +}; + +Rule { + Matches { + Site("|lm.inu.is|") + } +}; + +Rule { + Matches { + Site("|iboughtthisdomainbecauseithoughtitscheap.uk|") + } +}; + +Rule { + Matches { + Site("|lemmy.ppl.town|") + } +}; + +Rule { + Matches { + Site("|1337lemmy.com|") + } +}; + +Rule { + Matches { + Site("|lsmu.schmurian.xyz|") + } +}; + +Rule { + Matches { + Site("|stanx.page|") + } +}; + +Rule { + Matches { + Site("|melly.0x-ia.moe|") + } +}; + +Rule { + Matches { + Site("|lemmy.mildgrim.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.elmusfire.xyz|") + } +}; + +Rule { + Matches { + Site("|wallstreets.bet|") + } +}; + +Rule { + Matches { + Site("|lem.lyk.pw|") + } +}; + +Rule { + Matches { + Site("|lemmy.jtmn.dev|") + } +}; + +Rule { + Matches { + Site("|lemmy.nilskrau.de|") + } +}; + +Rule { + Matches { + Site("|lemmy.zroot.org|") + } +}; + +Rule { + Matches { + Site("|philly.page|") + } +}; + +Rule { + Matches { + Site("|s.jape.work|") + } +}; + +Rule { + Matches { + Site("|lemmy.pipipopo.pl|") + } +}; + +Rule { + Matches { + Site("|lm.qtt.no|") + } +}; + +Rule { + Matches { + Site("|lemmy.eic.lu|") + } +}; + +Rule { + Matches { + Site("|dendarii.alaeron.com|") + } +}; + +Rule { + Matches { + Site("|civilloquy.com|") + } +}; + +Rule { + Matches { + Site("|parapheum.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.sbs|") + } +}; + +Rule { + Matches { + Site("|federated.ninja|") + } +}; + +Rule { + Matches { + Site("|lemmy.scam-mail.me|") + } +}; + +Rule { + Matches { + Site("|lemmy.cablepick.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.gtfo.social|") + } +}; + +Rule { + Matches { + Site("|ripo.st|") + } +}; + +Rule { + Matches { + Site("|lemmy.xoynq.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.norbz.org|") + } +}; + +Rule { + Matches { + Site("|lemmy.snoot.tube|") + } +}; + +Rule { + Matches { + Site("|lemmy.skillissue.dk|") + } +}; + +Rule { + Matches { + Site("|lemmy.jamestrey.com|") + } +}; + +Rule { + Matches { + Site("|insane.dev|") + } +}; + +Rule { + Matches { + Site("|lemmy.nrd.li|") + } +}; + +Rule { + Matches { + Site("|lemmy.intai.tech|") + } +}; + +Rule { + Matches { + Site("|thechurchofmemes.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.plasmatrap.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.1204.org|") + } +}; + +Rule { + Matches { + Site("|lemmy.remotelab.uk|") + } +}; + +Rule { + Matches { + Site("|invariant-marxism.red|") + } +}; + +Rule { + Matches { + Site("|red.cyberhase.de|") + } +}; + +Rule { + Matches { + Site("|lemmy.scottlabs.io|") + } +}; + +Rule { + Matches { + Site("|lemmy.gamingnight.uy|") + } +}; + +Rule { + Matches { + Site("|www.jrz.city|") + } +}; + +Rule { + Matches { + Site("|lemmy.nerdcore.social|") + } +}; + +Rule { + Matches { + Site("|bluuit.org|") + } +}; + +Rule { + Matches { + Site("|lemmy.funkyfish.cool|") + } +}; + +Rule { + Matches { + Site("|lemmy.trippy.pizza|") + } +}; + +Rule { + Matches { + Site("|techy.news|") + } +}; + +Rule { + Matches { + Site("|lemmy.fromshado.ws|") + } +}; + +Rule { + Matches { + Site("|lemmy.comfysnug.space|") + } +}; + +Rule { + Matches { + Site("|zemmy.cc|") + } +}; + +Rule { + Matches { + Site("|lululemmy.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.timdn.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.sascamooch.com|") + } +}; + +Rule { + Matches { + Site("|labdegato.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.quad442.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.nerdcruft.net|") + } +}; + +Rule { + Matches { + Site("|proit.org|") + } +}; + +Rule { + Matches { + Site("|lemmonade.marbledfennec.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.lukeog.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.tillicumnet.com|") + } +}; + +Rule { + Matches { + Site("|anarch.is|") + } +}; + +Rule { + Matches { + Site("|clatter.eu|") + } +}; + +Rule { + Matches { + Site("|lemmy.staphup.nl|") + } +}; + +Rule { + Matches { + Site("|lemmy.direktoratet.se|") + } +}; + +Rule { + Matches { + Site("|fedibb.ml|") + } +}; + +Rule { + Matches { + Site("|kek.henlo.fi|") + } +}; + +Rule { + Matches { + Site("|nrsk.no|") + } +}; + +Rule { + Matches { + Site("|lemmy.emopolarbear.com|") + } +}; + +Rule { + Matches { + Site("|caint.org|") + } +}; + +Rule { + Matches { + Site("|social.hamington.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.glasgow.social|") + } +}; + +Rule { + Matches { + Site("|lemmy.mlsn.fr|") + } +}; + +Rule { + Matches { + Site("|lm.halfassmart.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.calvss.com|") + } +}; + +Rule { + Matches { + Site("|bigfoot.ninja|") + } +}; + +Rule { + Matches { + Site("|lemmy.pipe01.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.jmtr.org|") + } +}; + +Rule { + Matches { + Site("|fedit.io|") + } +}; + +Rule { + Matches { + Site("|links.lowsec.club|") + } +}; + +Rule { + Matches { + Site("|lemmy.pussthecat.org|") + } +}; + +Rule { + Matches { + Site("|lemmy.link|") + } +}; + +Rule { + Matches { + Site("|lemmy.notdead.net|") + } +}; + +Rule { + Matches { + Site("|hakbox.social|") + } +}; + +Rule { + Matches { + Site("|lemmy.arclight.pro|") + } +}; + +Rule { + Matches { + Site("|mobilemmohub.com|") + } +}; + +Rule { + Matches { + Site("|hammerdown.0fucks.nl|") + } +}; + +Rule { + Matches { + Site("|chat.maiion.com|") + } +}; + +Rule { + Matches { + Site("|lm.melonbread.dev|") + } +}; + +Rule { + Matches { + Site("|lemmy.astheriver.art|") + } +}; + +Rule { + Matches { + Site("|lemmy.havocperil.uk|") + } +}; + +Rule { + Matches { + Site("|lemmy.douwes.co.uk|") + } +}; + +Rule { + Matches { + Site("|lem.serkozh.me|") + } +}; + +Rule { + Matches { + Site("|le.fduck.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.simpl.website|") + } +}; + +Rule { + Matches { + Site("|lemmy.mazurka.xyz|") + } +}; + +Rule { + Matches { + Site("|lemmy.lpcha.im|") + } +}; + +Rule { + Matches { + Site("|lemmy.isamp.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.shwizard.chat|") + } +}; + +Rule { + Matches { + Site("|lemmy.nerdcave.us|") + } +}; + +Rule { + Matches { + Site("|feddit.fun|") + } +}; + +Rule { + Matches { + Site("|hqueue.dev|") + } +}; + +Rule { + Matches { + Site("|lemmony.click|") + } +}; + +Rule { + Matches { + Site("|lucitt.social|") + } +}; + +Rule { + Matches { + Site("|feddit.win|") + } +}; + +Rule { + Matches { + Site("|lemmy.beru.co|") + } +}; + +Rule { + Matches { + Site("|lm.gsk.moe|") + } +}; + +Rule { + Matches { + Site("|animoe.xyz|") + } +}; + +Rule { + Matches { + Site("|lemmy.temporus.me|") + } +}; + +Rule { + Matches { + Site("|lemmy.thanatos.at|") + } +}; + +Rule { + Matches { + Site("|lemmy.philipcristiano.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.l00p.org|") + } +}; + +Rule { + Matches { + Site("|lemmy.vrchat-dev.tech|") + } +}; + +Rule { + Matches { + Site("|endofti.me|") + } +}; + +Rule { + Matches { + Site("|werm.social|") + } +}; + +Rule { + Matches { + Site("|lemmy.fbxl.net|") + } +}; + +Rule { + Matches { + Site("|hoodlem.me|") + } +}; + +Rule { + Matches { + Site("|fanexus.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.morrisherd.com|") + } +}; + +Rule { + Matches { + Site("|r.rosettast0ned.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.mbl.social|") + } +}; + +Rule { + Matches { + Site("|cnvrs.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.dominikoso.me|") + } +}; + +Rule { + Matches { + Site("|local106.com|") + } +}; + +Rule { + Matches { + Site("|lemthony.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.dupper.net|") + } +}; + +Rule { + Matches { + Site("|le.mnau.xyz|") + } +}; + +Rule { + Matches { + Site("|lemmy.wraithsquadrongaming.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.weiser.social|") + } +}; + +Rule { + Matches { + Site("|spgrn.com|") + } +}; + +Rule { + Matches { + Site("|zerobytes.monster|") + } +}; + +Rule { + Matches { + Site("|c.calciumlabs.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.tancomps.net|") + } +}; + +Rule { + Matches { + Site("|demmy.co.uk|") + } +}; + +Rule { + Matches { + Site("|lemmy.doomeer.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.steken.xyz|") + } +}; + +Rule { + Matches { + Site("|lemmy.fwgx.uk|") + } +}; + +Rule { + Matches { + Site("|014450.xyz|") + } +}; + +Rule { + Matches { + Site("|lemmy.pub|") + } +}; + +Rule { + Matches { + Site("|lemmy.fauxreigner.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.fribyte.no|") + } +}; + +Rule { + Matches { + Site("|lemmy.weckhorst.no|") + } +}; + +Rule { + Matches { + Site("|lemmy.songsforno.one|") + } +}; + +Rule { + Matches { + Site("|lemmy.chiisana.net|") + } +}; + +Rule { + Matches { + Site("|nunu.dev|") + } +}; + +Rule { + Matches { + Site("|lemmy.dyslexicjedi.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.deadca.de|") + } +}; + +Rule { + Matches { + Site("|lemmy2.addictmud.org|") + } +}; + +Rule { + Matches { + Site("|lemmywinks.xyz|") + } +}; + +Rule { + Matches { + Site("|lemmy.thepixelproject.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.pcft.eu|") + } +}; + +Rule { + Matches { + Site("|social.poisson.me|") + } +}; + +Rule { + Matches { + Site("|lemmy.stellarvortex.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.mywire.xyz|") + } +}; + +Rule { + Matches { + Site("|greg.city|") + } +}; + +Rule { + Matches { + Site("|lemmy.calebmharper.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.gregw.us|") + } +}; + +Rule { + Matches { + Site("|lemmy.nope.ly|") + } +}; + +Rule { + Matches { + Site("|lemmus.org|") + } +}; + +Rule { + Matches { + Site("|lemmy.amyjnobody.com|") + } +}; + +Rule { + Matches { + Site("|mesita.link|") + } +}; + +Rule { + Matches { + Site("|localghost.org|") + } +}; + +Rule { + Matches { + Site("|acqrs.co.uk|") + } +}; + +Rule { + Matches { + Site("|lemmy.x3i.tech|") + } +}; + +Rule { + Matches { + Site("|lemmy.kagura.eu|") + } +}; + +Rule { + Matches { + Site("|lemmit.xyz|") + } +}; + +Rule { + Matches { + Site("|lemmit.online|") + } +}; + +Rule { + Matches { + Site("|lm.rdbt.no|") + } +}; + +Rule { + Matches { + Site("|lemmy.meli.dev|") + } +}; + +Rule { + Matches { + Site("|algebro.xyz|") + } +}; + +Rule { + Matches { + Site("|lemmy.timwaterhouse.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.kiberness.xyz|") + } +}; + +Rule { + Matches { + Site("|toons.zone|") + } +}; + +Rule { + Matches { + Site("|orzen.games|") + } +}; + +Rule { + Matches { + Site("|lemmy.webgirand.eu|") + } +}; + +Rule { + Matches { + Site("|lemmy.moonling.nl|") + } +}; + +Rule { + Matches { + Site("|lemmyonline.com|") + } +}; + +Rule { + Matches { + Site("|lemmyland.com|") + } +}; + +Rule { + Matches { + Site("|tortoisewrath.com|") + } +}; + +Rule { + Matches { + Site("|mlem.a-smol-cat.fr|") + } +}; + +Rule { + Matches { + Site("|lemmy.comm.social|") + } +}; + +Rule { + Matches { + Site("|jamie.moe|") + } +}; + +Rule { + Matches { + Site("|lemmy.fakecake.org|") + } +}; + +Rule { + Matches { + Site("|snkkis.me|") + } +}; + +Rule { + Matches { + Site("|lm.byteme.social|") + } +}; + +Rule { + Matches { + Site("|lemmy.gross.hosting|") + } +}; + +Rule { + Matches { + Site("|lemmy.tarsis.org|") + } +}; + +Rule { + Matches { + Site("|lemmy.javant.xyz|") + } +}; + +Rule { + Matches { + Site("|feddit.strike23.de|") + } +}; + +Rule { + Matches { + Site("|solstice.etbr.top|") + } +}; + +Rule { + Matches { + Site("|0v0.social|") + } +}; + +Rule { + Matches { + Site("|lemmy.self-hosted.site|") + } +}; + +Rule { + Matches { + Site("|mcr.town|") + } +}; + +Rule { + Matches { + Site("|lemmy.srv0.lol|") + } +}; + +Rule { + Matches { + Site("|popplesburger.hilciferous.nl|") + } +}; + +Rule { + Matches { + Site("|lemmy.lif.ovh|") + } +}; + +Rule { + Matches { + Site("|lemmy.recursed.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.kghorvath.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.devils.house|") + } +}; + +Rule { + Matches { + Site("|versalife.duckdns.org|") + } +}; + +Rule { + Matches { + Site("|upvote.au|") + } +}; + +Rule { + Matches { + Site("|social.cyb3r.dog|") + } +}; + +Rule { + Matches { + Site("|lemmy.0x3d.uk|") + } +}; + +Rule { + Matches { + Site("|rustyshackleford.cfd|") + } +}; + +Rule { + Matches { + Site("|lemmy.dustybeer.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.onitato.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.skl.works|") + } +}; + +Rule { + Matches { + Site("|lemmy.selfip.org|") + } +}; + +Rule { + Matches { + Site("|endlesstalk.org|") + } +}; + +Rule { + Matches { + Site("|lmy.drundo.com.au|") + } +}; + +Rule { + Matches { + Site("|lemmy.eatsleepcode.ca|") + } +}; + +Rule { + Matches { + Site("|lemmings.online|") + } +}; + +Rule { + Matches { + Site("|thegarden-u4873.vm.elestio.app|") + } +}; + +Rule { + Matches { + Site("|jemmy.jeena.net|") + } +}; + +Rule { + Matches { + Site("|sedd.it|") + } +}; + +Rule { + Matches { + Site("|lemmy.6px.eu|") + } +}; + +Rule { + Matches { + Site("|lm.williampuckering.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.pe1uca.dev|") + } +}; + +Rule { + Matches { + Site("|lemmy.cornspace.space|") + } +}; + +Rule { + Matches { + Site("|occult.social|") + } +}; + +Rule { + Matches { + Site("|kleptonix.com|") + } +}; + +Rule { + Matches { + Site("|negativenull.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.dnet.social|") + } +}; + +Rule { + Matches { + Site("|drachennetz.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.littlejth.com|") + } +}; + +Rule { + Matches { + Site("|moose.best|") + } +}; + +Rule { + Matches { + Site("|digitalgoblin.uk|") + } +}; + +Rule { + Matches { + Site("|lemmy.the-goblin.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.pryst.de|") + } +}; + +Rule { + Matches { + Site("|re.tei.li|") + } +}; + +Rule { + Matches { + Site("|links.decafbad.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.hamrick.xyz|") + } +}; + +Rule { + Matches { + Site("|netmonkey.tech|") + } +}; + +Rule { + Matches { + Site("|lemmy.sh|") + } +}; + +Rule { + Matches { + Site("|lemmy.kizaing.ca|") + } +}; + +Rule { + Matches { + Site("|lemmy.sumuun.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.monster|") + } +}; + +Rule { + Matches { + Site("|lemmy.timon.sh|") + } +}; + +Rule { + Matches { + Site("|thaumatur.ge|") + } +}; + +Rule { + Matches { + Site("|xrs.cx|") + } +}; + +Rule { + Matches { + Site("|community.nicfab.it|") + } +}; + +Rule { + Matches { + Site("|lemmy.escapebigtech.info|") + } +}; + +Rule { + Matches { + Site("|lemmyverse.org|") + } +}; + +Rule { + Matches { + Site("|lemmy.thesmokinglounge.club|") + } +}; + +Rule { + Matches { + Site("|lemmy.stark-enterprise.net|") + } +}; + +Rule { + Matches { + Site("|shitposting.monster|") + } +}; + +Rule { + Matches { + Site("|kale.social|") + } +}; + +Rule { + Matches { + Site("|lemmy.schmeisserweb.at|") + } +}; + +Rule { + Matches { + Site("|leby.dev|") + } +}; + +Rule { + Matches { + Site("|lemmy.munsell.io|") + } +}; + +Rule { + Matches { + Site("|lemmy.mlaga97.space|") + } +}; + +Rule { + Matches { + Site("|lemmy.pastwind.top|") + } +}; + +Rule { + Matches { + Site("|mylemmy.win|") + } +}; + +Rule { + Matches { + Site("|lemmy.management|") + } +}; + +Rule { + Matches { + Site("|lemmy.proxmox-lab.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.livesound.world|") + } +}; + +Rule { + Matches { + Site("|lemmy.leafylibrary.uk|") + } +}; + +Rule { + Matches { + Site("|lemmy.schlunker.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.nopro.be|") + } +}; + +Rule { + Matches { + Site("|lemmy.haigner.me|") + } +}; + +Rule { + Matches { + Site("|l.biendeo.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.sebbem.se|") + } +}; + +Rule { + Matches { + Site("|lemmy.austinwadeheller.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.graphics|") + } +}; + +Rule { + Matches { + Site("|lemmy.helvetet.eu|") + } +}; + +Rule { + Matches { + Site("|lemmy.beckmeyer.us|") + } +}; + +Rule { + Matches { + Site("|leddit.minnal.icu|") + } +}; + +Rule { + Matches { + Site("|radiation.party|") + } +}; + +Rule { + Matches { + Site("|lemmy.seifert.id|") + } +}; + +Rule { + Matches { + Site("|fjdk.uk|") + } +}; + +Rule { + Matches { + Site("|lemmy.fail|") + } +}; + +Rule { + Matches { + Site("|lemmy.tr00st.co.uk|") + } +}; + +Rule { + Matches { + Site("|lemmy.jacaranda.club|") + } +}; + +Rule { + Matches { + Site("|lemmy.website|") + } +}; + +Rule { + Matches { + Site("|lemmy.xce.pt|") + } +}; + +Rule { + Matches { + Site("|hc.frorayz.tech|") + } +}; + +Rule { + Matches { + Site("|lemmy.vinodjam.com|") + } +}; + +Rule { + Matches { + Site("|jalim.xyz|") + } +}; + +Rule { + Matches { + Site("|xffxe4.lol|") + } +}; + +Rule { + Matches { + Site("|granitestate.social|") + } +}; + +Rule { + Matches { + Site("|nc.gnzl.cl|") + } +}; + +Rule { + Matches { + Site("|lemmy.zell-mbc.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.uhhoh.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.jasonsanta.xyz|") + } +}; + +Rule { + Matches { + Site("|social.ggbox.fr|") + } +}; + +Rule { + Matches { + Site("|l.bxy.sh|") + } +}; + +Rule { + Matches { + Site("|ascy.mooo.com|") + } +}; + +Rule { + Matches { + Site("|leaf.dance|") + } +}; + +Rule { + Matches { + Site("|lemmy.lucaslower.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.fdvrs.xyz|") + } +}; + +Rule { + Matches { + Site("|l.jugregator.org|") + } +}; + +Rule { + Matches { + Site("|lemmy.cloudhub.social|") + } +}; + +Rule { + Matches { + Site("|omg.qa|") + } +}; + +Rule { + Matches { + Site("|areality.social|") + } +}; + +Rule { + Matches { + Site("|lemmy.gareth.computer|") + } +}; + +Rule { + Matches { + Site("|matts.digital|") + } +}; + +Rule { + Matches { + Site("|lemmy.commodore.social|") + } +}; + +Rule { + Matches { + Site("|forkk.me|") + } +}; + +Rule { + Matches { + Site("|lemmy.chromozone.dev|") + } +}; + +Rule { + Matches { + Site("|community.adiquaints.moe|") + } +}; + +Rule { + Matches { + Site("|discuss.dizl.de|") + } +}; + +Rule { + Matches { + Site("|lemmy.pit.ninja|") + } +}; + +Rule { + Matches { + Site("|bubblesthebunny.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.clueware.org|") + } +}; + +Rule { + Matches { + Site("|lemmy.mb-server.com|") + } +}; + +Rule { + Matches { + Site("|feedly.j-cloud.uk|") + } +}; + +Rule { + Matches { + Site("|lemmy.socdojo.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.serverfail.party|") + } +}; + +Rule { + Matches { + Site("|libreauto.app|") + } +}; + +Rule { + Matches { + Site("|actuallyruben.nl|") + } +}; + +Rule { + Matches { + Site("|typemi.me|") + } +}; + +Rule { + Matches { + Site("|lemmy.helios42.de|") + } +}; + +Rule { + Matches { + Site("|lmmy.tvdl.dev|") + } +}; + +Rule { + Matches { + Site("|rabbitea.rs|") + } +}; + +Rule { + Matches { + Site("|lemmy.k6qw.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.borlax.com|") + } +}; + +Rule { + Matches { + Site("|psychedelia.ink|") + } +}; + +Rule { + Matches { + Site("|lemmy.stormlight.space|") + } +}; + +Rule { + Matches { + Site("|lemmy.dudeami.win|") + } +}; + +Rule { + Matches { + Site("|social.vmdk.ca|") + } +}; + +Rule { + Matches { + Site("|lemmy.benrasich.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.pineapplemachine.com|") + } +}; + +Rule { + Matches { + Site("|www.korzekwa.io|") + } +}; + +Rule { + Matches { + Site("|lemmy.gjz010.com|") + } +}; + +Rule { + Matches { + Site("|biglemmowski.win|") + } +}; + +Rule { + Matches { + Site("|lem.cochrun.xyz|") + } +}; + +Rule { + Matches { + Site("|lemmy.austinite.online|") + } +}; + +Rule { + Matches { + Site("|abstract-scones.crabdance.com|") + } +}; + +Rule { + Matches { + Site("|lem.southcape.social|") + } +}; + +Rule { + Matches { + Site("|lem.simple-gear.com|") + } +}; + +Rule { + Matches { + Site("|meganice.online|") + } +}; + +Rule { + Matches { + Site("|lemmy.bringdaruck.us|") + } +}; + +Rule { + Matches { + Site("|lemmypets.xyz|") + } +}; + +Rule { + Matches { + Site("|lemmy.fediverse.jp|") + } +}; + +Rule { + Matches { + Site("|reddrefuge.com|") + } +}; + +Rule { + Matches { + Site("|lem.elbullazul.com|") + } +}; + +Rule { + Matches { + Site("|femboys.bar|") + } +}; + +Rule { + Matches { + Site("|lemmerz.org|") + } +}; + +Rule { + Matches { + Site("|lemmydeals.com|") + } +}; + +Rule { + Matches { + Site("|lemmybedan.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.fyi|") + } +}; + +Rule { + Matches { + Site("|lemmy.davidfreina.at|") + } +}; + +Rule { + Matches { + Site("|distress.digital|") + } +}; + +Rule { + Matches { + Site("|lemmy.cook.gg|") + } +}; + +Rule { + Matches { + Site("|lemmy.koski.co|") + } +}; + +Rule { + Matches { + Site("|lemmy.dcrich.net|") + } +}; + +Rule { + Matches { + Site("|selfhosted.forum|") + } +}; + +Rule { + Matches { + Site("|lemmy.mixdown.ca|") + } +}; + +Rule { + Matches { + Site("|lemmy.wxbu.de|") + } +}; + +Rule { + Matches { + Site("|lemmy.dekay.se|") + } +}; + +Rule { + Matches { + Site("|links.wageoffsite.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.jpaulus.io|") + } +}; + +Rule { + Matches { + Site("|links.roobre.es|") + } +}; + +Rule { + Matches { + Site("|notlemmy.notawebsite.fr|") + } +}; + +Rule { + Matches { + Site("|hive.atlanten.se|") + } +}; + +Rule { + Matches { + Site("|lemitar.meta1203.com|") + } +}; + +Rule { + Matches { + Site("|thediscussion.site|") + } +}; + +Rule { + Matches { + Site("|lemmy.amxl.com|") + } +}; + +Rule { + Matches { + Site("|syrma.cc|") + } +}; + +Rule { + Matches { + Site("|lemmy.virtim.dev|") + } +}; + +Rule { + Matches { + Site("|l.twos.dev|") + } +}; + +Rule { + Matches { + Site("|lemmy.s9m.xyz|") + } +}; + +Rule { + Matches { + Site("|lemmy.sysctl.io|") + } +}; + +Rule { + Matches { + Site("|lemmy.vepta.org|") + } +}; + +Rule { + Matches { + Site("|lemmy.bradis.me|") + } +}; + +Rule { + Matches { + Site("|eventfrontier.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.jlh.name|") + } +}; + +Rule { + Matches { + Site("|l.nulltext.org|") + } +}; + +Rule { + Matches { + Site("|lemmy.dork.lol|") + } +}; + +Rule { + Matches { + Site("|pwzle.com|") + } +}; + +Rule { + Matches { + Site("|linkage.ds8.zone|") + } +}; + +Rule { + Matches { + Site("|lemmy.aucubin.de|") + } +}; + +Rule { + Matches { + Site("|lemmy.w9r.de|") + } +}; + +Rule { + Matches { + Site("|lemmy.belclayfer.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.zone|") + } +}; + +Rule { + Matches { + Site("|lemmy.nauk.io|") + } +}; + +Rule { + Matches { + Site("|silicon-dragon.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.loutsenhizer.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.vyizis.tech|") + } +}; + +Rule { + Matches { + Site("|lemmy.lylapol.com|") + } +}; + +Rule { + Matches { + Site("|shinobu.cloud|") + } +}; + +Rule { + Matches { + Site("|tezzo.f0rk.pl|") + } +}; + +Rule { + Matches { + Site("|lemmy.game-files.net|") + } +}; + +Rule { + Matches { + Site("|link.fossdle.org|") + } +}; + +Rule { + Matches { + Site("|gonelemmy.xyz|") + } +}; + +Rule { + Matches { + Site("|wilbo.tech|") + } +}; + +Rule { + Matches { + Site("|l.plabs.social|") + } +}; + +Rule { + Matches { + Site("|beer.andma.la|") + } +}; + +Rule { + Matches { + Site("|lemmy.demonoftheday.eu|") + } +}; + +Rule { + Matches { + Site("|lemmy.pwzle.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.zelinsky.dev|") + } +}; + +Rule { + Matches { + Site("|lemmy.mira.pm|") + } +}; + +Rule { + Matches { + Site("|heckoverflow.net|") + } +}; + +Rule { + Matches { + Site("|lme.smn.sh|") + } +}; + +Rule { + Matches { + Site("|culture0.cc|") + } +}; + +Rule { + Matches { + Site("|lemmy.anonion.social|") + } +}; + +Rule { + Matches { + Site("|lemmy.saik0.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.thias.xyz|") + } +}; + +Rule { + Matches { + Site("|lemmy.elest.io|") + } +}; + +Rule { + Matches { + Site("|whata.clusterfsck.com|") + } +}; + +Rule { + Matches { + Site("|aulem.org|") + } +}; + +Rule { + Matches { + Site("|l.vidja.social|") + } +}; + +Rule { + Matches { + Site("|lmmy.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.thetaits.net|") + } +}; + +Rule { + Matches { + Site("|wumbo.buzz|") + } +}; + +Rule { + Matches { + Site("|lemmy.uncomfortable.business|") + } +}; + +Rule { + Matches { + Site("|snuv.win|") + } +}; + +Rule { + Matches { + Site("|lemmy.keychat.org|") + } +}; + +Rule { + Matches { + Site("|lemmy.best|") + } +}; + +Rule { + Matches { + Site("|lemmy-u3.vm.elestio.app|") + } +}; + +Rule { + Matches { + Site("|hyperfair.link|") + } +}; + +Rule { + Matches { + Site("|lemmy.aguiarvieira.pt|") + } +}; + +Rule { + Matches { + Site("|lemmy.itermori.de|") + } +}; + +Rule { + Matches { + Site("|lemmy.pierre-couy.fr|") + } +}; + +Rule { + Matches { + Site("|cigar.cx|") + } +}; + +Rule { + Matches { + Site("|lemmy.help|") + } +}; + +Rule { + Matches { + Site("|lemmy.grygon.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.tanktrace.de|") + } +}; + +Rule { + Matches { + Site("|lm.electrospek.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.matthe815.dev|") + } +}; + +Rule { + Matches { + Site("|lemmy.bloodmoon-network.de|") + } +}; + +Rule { + Matches { + Site("|lm.paradisus.day|") + } +}; + +Rule { + Matches { + Site("|fed.rosssi.co.uk|") + } +}; + +Rule { + Matches { + Site("|lemmy.atheos.org|") + } +}; + +Rule { + Matches { + Site("|thesidewalkends.io|") + } +}; + +Rule { + Matches { + Site("|androiddev.network|") + } +}; + +Rule { + Matches { + Site("|lemmy-ujt-u4842.vm.elestio.app|") + } +}; + +Rule { + Matches { + Site("|leddit.social|") + } +}; + +Rule { + Matches { + Site("|lm.kalinowski.dev|") + } +}; + +Rule { + Matches { + Site("|lemmy.johnpanos.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.kitsuna.net|") + } +}; + +Rule { + Matches { + Site("|thesimplecorner.org|") + } +}; + +Rule { + Matches { + Site("|lemmy.knocknet.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.davidbuckley.ca|") + } +}; + +Rule { + Matches { + Site("|lemmy.coupou.fr|") + } +}; + +Rule { + Matches { + Site("|lemmy.syrasu.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.umainfo.live|") + } +}; + +Rule { + Matches { + Site("|lemmy.rimkus.it|") + } +}; + +Rule { + Matches { + Site("|lem.free.as|") + } +}; + +Rule { + Matches { + Site("|discuss.ntfy.sh|") + } +}; + +Rule { + Matches { + Site("|lemmy.pec0ra.ch|") + } +}; + +Rule { + Matches { + Site("|lemmy.foxden.party|") + } +}; + +Rule { + Matches { + Site("|lemmy.sprawl.club|") + } +}; + +Rule { + Matches { + Site("|lemmy.iswhereits.at|") + } +}; + +Rule { + Matches { + Site("|butts.international|") + } +}; + +Rule { + Matches { + Site("|lmmy.io|") + } +}; + +Rule { + Matches { + Site("|lemmy.schuerz.at|") + } +}; + +Rule { + Matches { + Site("|pasta.faith|") + } +}; + +Rule { + Matches { + Site("|rational-racoon.de|") + } +}; + +Rule { + Matches { + Site("|lemmy.obrell.se|") + } +}; + +Rule { + Matches { + Site("|lemmy.gmprojects.pro|") + } +}; + +Rule { + Matches { + Site("|lemmy.ubergeek77.chat|") + } +}; + +Rule { + Matches { + Site("|lemmy.helheim.net|") + } +}; + +Rule { + Matches { + Site("|lemmit-u4849.vm.elestio.app|") + } +}; + +Rule { + Matches { + Site("|sambaspy.com|") + } +}; + +Rule { + Matches { + Site("|theotter.social|") + } +}; + +Rule { + Matches { + Site("|lemmy.sweevo.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.ch3n2k.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.secnd.me|") + } +}; + +Rule { + Matches { + Site("|ani.social|") + } +}; + +Rule { + Matches { + Site("|stammtisch.hallertau.social|") + } +}; + +Rule { + Matches { + Site("|discuss.jacen.moe|") + } +}; + +Rule { + Matches { + Site("|lemmy.korgen.xyz|") + } +}; + +Rule { + Matches { + Site("|donky.social|") + } +}; + +Rule { + Matches { + Site("|retarded.dev|") + } +}; + +Rule { + Matches { + Site("|lostcheese.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.maples.dev|") + } +}; + +Rule { + Matches { + Site("|lemmy.2kd.de|") + } +}; + +Rule { + Matches { + Site("|neodrain.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.beebl.es|") + } +}; + +Rule { + Matches { + Site("|lemmy.frozeninferno.xyz|") + } +}; + +Rule { + Matches { + Site("|support-futbol-u4947.vm.elestio.app|") + } +}; + +Rule { + Matches { + Site("|support.futbol|") + } +}; + +Rule { + Matches { + Site("|social.nerdhouse.io|") + } +}; + +Rule { + Matches { + Site("|lemmy.cnschn.com|") + } +}; + +Rule { + Matches { + Site("|lm.runnerd.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.friheter.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.hosted.frl|") + } +}; + +Rule { + Matches { + Site("|drak.gg|") + } +}; + +Rule { + Matches { + Site("|lm.suitwaffle.com|") + } +}; + +Rule { + Matches { + Site("|cavy.rocks|") + } +}; + +Rule { + Matches { + Site("|lemmy.smoothbrain.org|") + } +}; + +Rule { + Matches { + Site("|lemmy.scav1.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.perigrine.ca|") + } +}; + +Rule { + Matches { + Site("|lemmy.mrm.one|") + } +}; + +Rule { + Matches { + Site("|lemmy.belegost.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.andiru.de|") + } +}; + +Rule { + Matches { + Site("|iceorchid.net|") + } +}; + +Rule { + Matches { + Site("|einweckglas.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.edgarchirivella.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.karaolidis.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.brief.guru|") + } +}; + +Rule { + Matches { + Site("|lm.curlefry.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.nikore.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.telaax.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.sedimentarymountains.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.azamserver.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.mooo.com|") + } +}; + +Rule { + Matches { + Site("|l.1in1.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.unfiltered.social|") + } +}; + +Rule { + Matches { + Site("|lemmy.modshiftx.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.theonecurly.page|") + } +}; + +Rule { + Matches { + Site("|lemmy.mutation.observer|") + } +}; + +Rule { + Matches { + Site("|lemmy.sietch.online|") + } +}; + +Rule { + Matches { + Site("|lemmy.meridiangrp.co.uk|") + } +}; + +Rule { + Matches { + Site("|feddit.tech|") + } +}; + +Rule { + Matches { + Site("|lemmy.mambastretch.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.fedihub.social|") + } +}; + +Rule { + Matches { + Site("|feddit.pl|") + } +}; + +Rule { + Matches { + Site("|lemmy.l0nax.org|") + } +}; + +Rule { + Matches { + Site("|lemmy.freewilltiger.page|") + } +}; + +Rule { + Matches { + Site("|lemmy.techstache.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.qpixel.pw|") + } +}; + +Rule { + Matches { + Site("|lemmy.pen15.club|") + } +}; + +Rule { + Matches { + Site("|lemmy.safe-internet.org|") + } +}; + +Rule { + Matches { + Site("|lemmy.tario.org|") + } +}; + +Rule { + Matches { + Site("|lemmy.mats.ooo|") + } +}; + +Rule { + Matches { + Site("|lemnt.telaax.com|") + } +}; + +Rule { + Matches { + Site("|glasstower.nl|") + } +}; + +Rule { + Matches { + Site("|p9.wtf|") + } +}; + +Rule { + Matches { + Site("|lemmy.tobyvin.dev|") + } +}; + +Rule { + Matches { + Site("|lemmy.soontm.de|") + } +}; + +Rule { + Matches { + Site("|lemmy.appeine.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.ghostplanet.org|") + } +}; + +Rule { + Matches { + Site("|lemmy.hpost.no|") + } +}; + +Rule { + Matches { + Site("|lemmy.lettucegarden.net|") + } +}; + +Rule { + Matches { + Site("|drlemmy.net|") + } +}; + +Rule { + Matches { + Site("|badblocks.rocks|") + } +}; + +Rule { + Matches { + Site("|scif6.nsalanparty.com|") + } +}; + +Rule { + Matches { + Site("|notlemmy.site|") + } +}; + +Rule { + Matches { + Site("|lemmy.cultimean.group|") + } +}; + +Rule { + Matches { + Site("|lemmy.fucs.io|") + } +}; + +Rule { + Matches { + Site("|lemmy.batlord.org|") + } +}; + +Rule { + Matches { + Site("|lemmy.croc.pw|") + } +}; + +Rule { + Matches { + Site("|fedi.shadowtoot.world|") + } +}; + +Rule { + Matches { + Site("|lemmy.deev.io|") + } +}; + +Rule { + Matches { + Site("|lmmy.ylwsgn.cc|") + } +}; + +Rule { + Matches { + Site("|lemmy.mayes.io|") + } +}; + +Rule { + Matches { + Site("|skwerl.dev|") + } +}; + +Rule { + Matches { + Site("|le-me.xyz|") + } +}; + +Rule { + Matches { + Site("|lemmy.mxh.nu|") + } +}; + +Rule { + Matches { + Site("|lemmy.pxm.nl|") + } +}; + +Rule { + Matches { + Site("|nwdr.club|") + } +}; + +Rule { + Matches { + Site("|discuss.as200950.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.whalesinspace.de|") + } +}; + +Rule { + Matches { + Site("|lemmy.vskr.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.shattervideoisland.com|") + } +}; + +Rule { + Matches { + Site("|opendmz.social|") + } +}; + +Rule { + Matches { + Site("|lemmy.corrigan.xyz|") + } +}; + +Rule { + Matches { + Site("|lemmy.nathaneaston.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.productionservers.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.r6e.dev|") + } +}; + +Rule { + Matches { + Site("|0xdd.org.ru|") + } +}; + +Rule { + Matches { + Site("|lemmy.root6.de|") + } +}; + +Rule { + Matches { + Site("|lemmy.dlgreen.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.fun|") + } +}; + +Rule { + Matches { + Site("|lemmy.freddeliv.me|") + } +}; + +Rule { + Matches { + Site("|lemmy.therhys.co.uk|") + } +}; + +Rule { + Matches { + Site("|thepride.hexodine.com|") + } +}; + +Rule { + Matches { + Site("|talka.live|") + } +}; + +Rule { + Matches { + Site("|lemmy.m1k.cloud|") + } +}; + +Rule { + Matches { + Site("|social.fr4me.io|") + } +}; + +Rule { + Matches { + Site("|lemmy.fredhs.net|") + } +}; + +Rule { + Matches { + Site("|lemmy.rhymelikedi.me|") + } +}; + +Rule { + Matches { + Site("|feddit.at|") + } +}; + +Rule { + Matches { + Site("|purrito.kamartaj.xyz|") + } +}; + +Rule { + Matches { + Site("|bethe.kingofdog.de|") + } +}; + +Rule { + Matches { + Site("|lemmy.kodeklang.social|") + } +}; + +Rule { + Matches { + Site("|dsilo061298.ddns.net|") + } +}; + +Rule { + Matches { + Site("|nonewfriends.club|") + } +}; + +Rule { + Matches { + Site("|soccer.forum|") + } +}; + +Rule { + Matches { + Site("|lemmy.wyattsmith.org|") + } +}; + +Rule { + Matches { + Site("|liminal.southfox.me|") + } +}; + +Rule { + Matches { + Site("|lemmy.brad.ee|") + } +}; + +Rule { + Matches { + Site("|lemmy.mypinghertz.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.gsp8181.co.uk|") + } +}; + +Rule { + Matches { + Site("|surlesworld.com|") + } +}; + +Rule { + Matches { + Site("|lemmyis.fun|") + } +}; + +Rule { + Matches { + Site("|lm.sethp.cc|") + } +}; + +Rule { + Matches { + Site("|lemmy.datatekniker.dev|") + } +}; + +Rule { + Matches { + Site("|lemmy.arun.cloud|") + } +}; + +Rule { + Matches { + Site("|lemmy.barnacles.one|") + } +}; + +Rule { + Matches { + Site("|lemmy.macaddict89.me|") + } +}; + +Rule { + Matches { + Site("|lemmy.holmosapien.com|") + } +}; + +Rule { + Matches { + Site("|feddit.site|") + } +}; + +Rule { + Matches { + Site("|mayheminc.win|") + } +}; + +Rule { + Matches { + Site("|lem.zevs.me|") + } +}; + +Rule { + Matches { + Site("|lemmy.toot.pt|") + } +}; + +Rule { + Matches { + Site("|lemmy.finance|") + } +}; + +Rule { + Matches { + Site("|lemmy.halfbro.xyz|") + } +}; + +Rule { + Matches { + Site("|rlyeh.cc|") + } +}; + +Rule { + Matches { + Site("|lemmy.services.coupou.fr|") + } +}; + +Rule { + Matches { + Site("|ue.reddiverse.umbraluvine.xyz|") + } +}; + +Rule { + Matches { + Site("|mh.znark.us|") + } +}; + +Rule { + Matches { + Site("|gertie.uk|") + } +}; + +Rule { + Matches { + Site("|lemmy.naga.sh|") + } +}; + +Rule { + Matches { + Site("|lemmy.mpcjanssen.nl|") + } +}; + +Rule { + Matches { + Site("|lemmy.neeley.cloud|") + } +}; + +Rule { + Matches { + Site("|overctrl.dbzer0.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.sarcasticdeveloper.com|") + } +}; + +Rule { + Matches { + Site("|l.mathers.fr|") + } +}; + +Rule { + Matches { + Site("|lemmy.rubenernst.dev|") + } +}; + +Rule { + Matches { + Site("|lemmy.dogboy.xyz|") + } +}; + +Rule { + Matches { + Site("|lemmy.jasondove.me|") + } +}; + +Rule { + Matches { + Site("|lemmy.eldarerathis.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.enchanted.social|") + } +}; + +Rule { + Matches { + Site("|sublight.one|") + } +}; + +Rule { + Matches { + Site("|botnet.club|") + } +}; + +Rule { + Matches { + Site("|lemmy.meissners.me|") + } +}; + +Rule { + Matches { + Site("|lemmy.albertoluna.es|") + } +}; + +Rule { + Matches { + Site("|lemmy.zkr.io|") + } +}; + +Rule { + Matches { + Site("|readit.space|") + } +}; + +Rule { + Matches { + Site("|lemmy.ravc.tech|") + } +}; + +Rule { + Matches { + Site("|lemmy.scurry.io|") + } +}; + +Rule { + Matches { + Site("|anime-pub.moe|") + } +}; + +Rule { + Matches { + Site("|lemmy.buller.cc|") + } +}; + +Rule { + Matches { + Site("|lmy.dotcomitsa.website|") + } +}; + +Rule { + Matches { + Site("|lemmy.namwen.me|") + } +}; + +Rule { + Matches { + Site("|lemmy.funkylab.xyz|") + } +}; + +Rule { + Matches { + Site("|lemmygrid.com|") + } +}; + +Rule { + Matches { + Site("|mlemmy.de|") + } +}; + +Rule { + Matches { + Site("|lemmy.flugratte.dev|") + } +}; + +Rule { + Matches { + Site("|feddit.eu|") + } +}; + +Rule { + Matches { + Site("|pootusmaximus.xyz|") + } +}; + +Rule { + Matches { + Site("|lemmy.fap.ie|") + } +}; + +Rule { + Matches { + Site("|lemmy.hellwhore.com|") + } +}; + +Rule { + Matches { + Site("|lemmy.austinvaness.com|") + } +}; diff --git a/crates/optics/testcases/samples/hacker_news.optic b/crates/optics/testcases/samples/hacker_news.optic new file mode 100644 index 000000000..b9486e338 --- /dev/null +++ b/crates/optics/testcases/samples/hacker_news.optic @@ -0,0 +1,37443 @@ +DiscardNonMatching; + +/* + Boost(0) is a no-op ranking wise, but since we discard all non-matching + this will make sure that our queries only search in the sites we want. + If we had specified a boost other than 0 for each site, then our queries + would be significantly slower. + + Likewise the Site("|example.com|") pattern (note the |) allows us to + significantly speedup the queries. + + This way we can specify a lot of sites we only want our searches to match against + but still have fast queries. +*/ + +Rule { + Matches { + Site("|blog.samaltman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|paulgraham.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.rust-lang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.ycombinator.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ciechanow.ski|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|danluu.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kalzumeus.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|signal.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|antirez.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jacquesmattheij.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chris-granger.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|letsencrypt.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|teslamotors.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lore.kernel.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|frame.work|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|righto.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|troyhunt.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sec.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tesla.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|keybase.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blender.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spacex.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|susanjfowler.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eff.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.golang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|matrix.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|openai.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sublimetext.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mtlynch.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.pinboard.in|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|whispersystems.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fabiensanglard.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|drewdevault.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.interviewing.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|github.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|calpaterson.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rachelbythebay.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bellard.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|training.kalzumeus.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jvns.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|daemonology.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ifixit.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tonsky.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|buzzfeednews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|deepmind.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|postgresql.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|krebsonsecurity.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|overreacted.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stratechery.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brave.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lwn.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stephendiehl.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|raganwald.posterous.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bugs.chromium.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|marco.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|words.steveklabnik.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|backblaze.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|robert.ocallahan.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.cryptographyengineering.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|citizenlab.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|propublica.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.benjojo.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|justine.lol|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lists.zx2c4.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|supremecourt.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|idlewords.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jepsen.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zachholman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|githubengineering.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tinyprojects.dev|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|quantamagazine.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tbray.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sqlite.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sivers.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|inkscape.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|deepsouthventures.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.openai.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dcurt.is|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.atom.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ccc.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jeffhuang.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|marc.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|anandtech.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|setosa.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gogameguru.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|patrickcollison.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|daringfireball.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codinghorror.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.chriszacharias.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.priceonomics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|petapixel.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aphyr.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.jupyter.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|josephg.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|candyjapan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|raspberrypi.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.triplebyte.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|web.eecs.utk.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|foundationdb.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|factorio.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brew.sh|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jlongster.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.dustinkirkland.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|daniel.haxx.se|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rethinkdb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|andrewkelley.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theintercept.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lkml.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|justinobeirne.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pine64.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thirtythreeforty.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aclu.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|robertheaton.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|justice.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|startupclass.samaltman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|atlasobscura.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wozniak.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|shkspr.mobi|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wikileaks.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lucumr.pocoo.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|defmacro.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cloudplatform.googleblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gatesnotes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lapcatsoftware.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bunniestudios.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|puri.sm|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|openculture.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spreadprivacy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|37signals.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thedaywefightback.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|asia.nikkei.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.pragmaticengineer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brandur.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|worrydream.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gimp.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gabrielweinberg.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tyler.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|deno.land|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sheddingbikes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pud.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lavabit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.bradfieldcs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|smithsonianmag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|elm-lang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|themacro.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|security.googleblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|voxelquest.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jeffgeerling.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stallman.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.torproject.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cockroachlabs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|earthly.dev|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nullprogram.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|teachyourselfcs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|immersivemath.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fly.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.system76.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|torrentfreak.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|swift.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|plausible.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.timescale.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|elixir-lang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|einaregilsson.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.servo.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brendangregg.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.jessfraz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gwern.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|videolan.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|arp242.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mjg59.dreamwidth.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stavros.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|expeditedssl.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|matt.might.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|flif.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|apenwarr.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|priceonomics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|humbledmba.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|unrealengine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|people.xiph.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|betterexplained.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|al3x.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|deno.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|git.kernel.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|djangoproject.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ruby-lang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|catonmat.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.plover.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|steveblank.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.haschek.at|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.jgc.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|utcc.utoronto.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|protonmail.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stackoverflow.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|feynmanlectures.caltech.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thume.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.google|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|talks.golang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|antipope.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.coinbase.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|freedom.press|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|research.googleblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sneak.berlin|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ferd.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|system76.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jsomers.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nautil.us|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.fogus.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|probablydance.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.stephenwolfram.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.42floors.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thoughtcrime.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|winehq.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|benkuhn.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dev.stephendiehl.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thedrive.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|explainshell.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|krita.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|techdirt.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lists.freebsd.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|axios.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|triplebyte.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.filippo.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|weblog.rubyonrails.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|viewsourcecode.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tjcx.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scottaaronson.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mattkeeter.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|edweissman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|citylab.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ziglang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ffmpeg.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tablix.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|opensource.googleblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lettersofnote.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.pushbullet.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zwischenzugs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.valvesoftware.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|markosaric.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|os.phil-opp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|juliareda.eu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|uspirg.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fasterthanli.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ipfs.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|queue.acm.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|evanmiller.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ejohn.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lcamtuf.coredump.cx|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mango.pdf.zone|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|godotengine.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|justgetflux.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bradfrost.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nim-lang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|simonwillison.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|groklaw.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lithub.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dave.cheney.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|beepb00p.xyz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.fastmail.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|seclists.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hillelwayne.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|filfre.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|oculus.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|graydon2.dreamwidth.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jonathanturner.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jameshfisher.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|julialang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|academictorrents.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|staltz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|openbsd.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|psyche.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.rongarret.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|redblobgames.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dtrace.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|boingboing.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|schneier.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|twobithistory.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tttthis.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|windows93.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ascii.textfiles.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aaronsw.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.chromium.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|daltoncaldwell.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jeffe.cs.illinois.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hookrace.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.garrytan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|leahneukirchen.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|journal.stuffwithstuff.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hanselman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|prog21.dadgum.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|craigmurray.org.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|acko.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|misc-stuff.terraaeon.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.robertelder.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|patrick-breyer.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mainichi.jp|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|notepad-plus-plus.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dolphin-emu.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adriancourreges.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|anishathalye.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|martin.kleppmann.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|buy.louisck.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sandstorm.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.fogcreek.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|panic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|svelte.dev|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|justinkan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ianbicking.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|firstlook.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|foundersatwork.posthaven.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|acoup.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jacobian.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hakibenita.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mothership.sg|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vitavonni.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|palant.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|benhoyt.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|david.li|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|a16z.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|battleforthenet.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|uncrunched.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nullsweep.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wiki.postgresql.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|snellman.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|craigkerstiens.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wikimediafoundation.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eater.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|redditblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aaronkharris.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|qz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tailscale.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codewords.recurse.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bost.ocks.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|norvig.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pluralistic.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|simplethread.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nltimes.nl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jitsi.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|article.gmane.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|qntm.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|iterm2.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|geoff.greer.fm|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|reactjs.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|citusdata.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pastebin.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fast.ai|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|begriffs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lkml.iu.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eclecticlight.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sam.zeloof.xyz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cfenollosa.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stevelosh.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|marctenbosch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thehustle.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brendaneich.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|42floors.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.alexmaccaw.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|martinfowler.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|freedom-to-tinker.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|iphoneincanada.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ir.tesla.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.asmartbear.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gameprogrammingpatterns.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.msdn.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|meteor.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|segment.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|goodnewsnetwork.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|crypto101.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hintjens.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|changelog.complete.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|webkit.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.emacsen.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|boringtechnology.club|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|swombat.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|berthub.eu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|erikbern.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theregister.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|learnpythonthehardway.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dynomight.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|danshipper.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kennethreitz.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jefftk.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|idiallo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.burntsushi.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|roguelazer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|beej.us|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|destroyallsoftware.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eev.ee|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|konklone.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|twilio.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|outsideonline.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chrisstucchio.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|themarkup.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nobelprize.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|samcurry.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|phoboslab.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|media.ccc.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tom.preston-werner.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|iism.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.joinmastodon.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|accc.gov.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ianstormtaylor.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|imperialviolet.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ridiculousfish.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|developers.googleblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theparisreview.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|michaeleisen.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.nuclino.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|universityofcalifornia.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gravitational.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zserge.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|observablehq.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mathoverflow.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joyent.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.kevmod.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.heroku.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|strongtowns.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nextjs.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|icij.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ifixit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|windytan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|servethehome.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|grumpy.website|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bitwarden.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|distill.pub|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|craftinginterpreters.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lord.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eso.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codersnotes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.regehr.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|highscalability.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|toddwschneider.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|slatestarcodex.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cloudflarestatus.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cnx-software.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|statnews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|reneweconomy.com.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jwz.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ncase.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|metzdowd.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|edu.mkrecny.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mastermind.atavist.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|laphamsquarterly.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|therecord.media|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|salon.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|howacarworks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|paulstamatiou.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eloquentjavascript.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nathanmarz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|explained.ai|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|golang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|99percentinvisible.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|restoreprivacy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ycombinator.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joshwcomeau.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|easydns.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.racket-lang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ctrl.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bjk5.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|refactoringui.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|reactos.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|matthias-endler.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.usejournal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|deprocrastination.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.llvm.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.keras.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|markodenic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tirania.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|copetti.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|interviewcake.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|newatlas.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.okcupid.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|smallstep.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|act.eff.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|extremetech.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kottke.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aeon.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.printf.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|johndcook.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|community.letsencrypt.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hashicorp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thewaltdisneycompany.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|haiku-os.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scotthelme.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gamasutra.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cdixon.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|azeria-labs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stevehanov.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|calebporzio.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.erlang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.backblaze.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nymag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.mailgun.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tokio.rs|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|woodgears.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zotero.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zeit.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|realworldtech.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mattcutts.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thecut.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theunderstatement.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|donmelton.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|learncodethehardway.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|element.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thehill.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wattenberger.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|raganwald.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|danshapiro.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|amasci.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.instapaper.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pathsensitive.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sachagreif.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|daedtech.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|phoenixframework.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|avc.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jasmcole.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lemire.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ycombinator.posterous.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|crystal-lang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|flightradar24.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lofibucket.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|agner.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mercurynews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|peteris.rocks|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|haneycodes.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.royalsloth.eu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jeremykun.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|netmarketshare.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|streaming.media.ccc.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scattered-thoughts.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theoutline.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tedunangst.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|siberiantimes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|avherald.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hackaday.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hackerfactor.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|doist.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ai.googleblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|macwright.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cake.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.ptsecurity.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|harpers.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|research.swtch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|khanacademy.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|malwaretech.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chronicle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|michaelnielsen.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|threadreaderapp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lowtechmagazine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thorstenball.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|copy.sh|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|datagubbe.se|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thehftguy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fishshell.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lists.torproject.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wbur.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.inkdrop.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|retool.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aboutamazon.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|randsinrepose.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|inkandswitch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bhorowitz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|keenen.xyz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zachtronics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.elementary.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.waymo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ghostbin.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.cubeofm.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|privacyinternational.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mondaynote.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|swissinfo.ch|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fs.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rosenzweig.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thehackerblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|palant.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|course.fast.ai|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|niemanlab.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|perens.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|matuzo.at|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|yosefk.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|samsaffron.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cs.usfca.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|the-tls.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|erlang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|home.cern|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joelonsoftware.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|clojure.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pi-hole.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|projecteuler.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|coreos.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|slack.engineering|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jenkins.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|libcello.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vivaldi.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.acolyer.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|devever.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|judiciary.house.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|neocities.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vanityfair.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fosdem.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lists.llvm.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|forbrukerradet.no|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alexkras.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|yehudakatz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|politico.eu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fieggen.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fermatslibrary.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|llvm.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codeofhonor.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sandimetz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|beautifulracket.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|solar.lowtechmagazine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rollingstone.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theglobeandmail.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ucsf.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|games.greggman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|robrhinehart.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|evertpot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ryancarson.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|oculusvr.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|reasonablypolymorphic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nybooks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.malwarebytes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sourcehut.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|antonz.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|weavesilk.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|githubstatus.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thenextweb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|squareup.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|teamten.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|minimaxir.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sparkfun.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|seattletimes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|int10h.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cpbotha.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mosaicscience.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cjr.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lareviewofbooks.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theregister.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|phoronix.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|doc.rust-lang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fuchsia.googlesource.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tomanthony.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.ethereum.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|historytoday.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|michaelburge.us|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hackerschool.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|507movements.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|backchannel.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|openssl.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|openwall.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|roslyn.codeplex.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.jazzychad.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|atrium.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cacm.acm.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|firstround.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.erratasec.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.paralleluniverse.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|boz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dmitry.gr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|linuxjournal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bottomupcs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|commoncog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|drmaciver.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lawsofux.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.wesleyac.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sanctum.geek.nz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rarehistoricalphotos.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stephaniehurlburt.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ssh.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sahillavingia.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bleepingcomputer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thejh.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codingnest.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|motorauthority.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kevinlynagh.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|home-assistant.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spritesmods.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|esa.int|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|obsproject.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|1843magazine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|therealkatie.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|christine.website|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aadrake.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zapier.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|diegobasch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lichess.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|collectorsweekly.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kev.inburke.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|matt.sh|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|turkeyblocks.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vitalik.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|themarshallproject.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|usenix.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.docker.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kristoff.it|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|radio.garden|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tholman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gregoryszorc.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|phys.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|prisma.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aprilzero.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.parse.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|borncity.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|grumpygamer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rsms.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bitquabit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|iamnotaprogrammer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chrishateswriting.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|saagarjha.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|supabase.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|me.veekun.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|250bpm.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.gregbrockman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mono-project.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|minimallyminimal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|9to5mac.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|char.gd|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|plumshell.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nixos.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|underjord.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|landoflisp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tnhh.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rapgenius.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.floydhub.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|leafletjs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kqed.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|timharford.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.innerht.ml|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.mecheye.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|about.sourcegraph.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wi-fi.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|4chan.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thedailybeast.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ipp.mpg.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|arstechnica.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.railstutorial.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|inputmag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|labs.detectify.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|undeadly.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tech.channable.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|falkvinge.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|omniref.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|notes.unwieldy.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.newsblur.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mattwarren.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|reason.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ramiro.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nsa.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|japantimes.co.jp|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|twitlonger.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|humblebundle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|publicdomainreview.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.nuclearsecrecy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|qotoqot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pytorch.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|muckrock.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dropbox.tech|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jasondavies.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kite.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|indiehackers.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.detectify.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sixcolors.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.qt.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|quirksmode.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|community.namecheap.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thecodist.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hongkongfp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stephenfry.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|coffeescript.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|major.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|typesetinthefuture.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nayuki.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hscott.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pyvideo.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ai.google|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|michael.stapelberg.ch|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|v8.dev|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|digiday.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thewalrus.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ignorethecode.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thread.gmane.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sciencealert.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|slackhq.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.datawrapper.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|seriouspony.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|musicforprogramming.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|meowni.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|redox-os.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|minnie.tuhs.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|warpspire.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|locusmag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bloombergview.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|damninteresting.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joeyh.name|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|newstatesman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|freebsd.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|andregarzia.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|caddyserver.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kukuruku.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jbkempf.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pharo.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|netblocks.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chromium.googlesource.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|phrack.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codelitt.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|baekdal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ianvisits.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|megaprocessor.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mail-archive.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|privateinternetaccess.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|meltingasphalt.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|juliacomputing.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rein.pk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|osnews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ourworldindata.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.joda.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.stephsmith.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|linusakesson.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|learn.shayhowe.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chrisfenton.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alexdanco.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bert.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|buyforlifeproducts.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adventofcode.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wordsandbuttons.online|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.trailofbits.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|saminiir.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|buttondown.email|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|polygon.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ryanwaggoner.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|media.defense.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wired.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.apnic.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.agilebits.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ar.al|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tomdale.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|doublepulsar.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|keyvalues.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|android-developers.googleblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|startupschool.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|android.googlesource.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thegradient.pub|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|orgmode.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wsws.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|citizenlab.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.notdot.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eduardo.intermeta.com.br|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joreteg.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hopkinsmedicine.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stopa.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rigsomelight.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|docs.djangoproject.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|americanaffairsjournal.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jsfiddle.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|metalevel.at|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|andreasgal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|c9x.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|danieltenner.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|danielcompton.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|netflixtechblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vidarholen.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eli.thegreenplace.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cybernews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.smithsonianmag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rambo.codes|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hackermonthly.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sifive.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|plus.maths.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|incoherency.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|circleci.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|catern.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|penny-arcade.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|howistart.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|middleeasteye.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|unlikekinds.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|videogameschronicle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|roadandtrack.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hyperallergic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.level3.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|os2museum.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|soranews24.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|patshaughnessy.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bill.harding.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.plan99.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gq.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|occrp.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|devonzuegel.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ben-evans.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mediumdifficulty.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fsf.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|learn.sparkfun.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dlang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|templeos.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|code.blender.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|singhkays.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|repubblica.it|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aerofs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lrb.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eng.lyft.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jakearchibald.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.youtube|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.easydns.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|xiph.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|newscientist.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nicolasbize.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lineageos.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|briancallahan.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.ltse.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bryanbraun.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.thea.codes|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|code.mixpanel.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|web.law.duke.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|technologyreview.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.ncsu.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|acsh.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|repl.it|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|roscidus.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.ghost.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|icann.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|digest.bps.org.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nj.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|90percentofeverything.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lars.ingebrigtsen.no|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|harmful.cat-v.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ecma-international.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|engineering.riotgames.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lexaloffle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|en.greatfire.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|karl-voit.at|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fair.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|askamathematician.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|unixism.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rockpapershotgun.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|realdanlyons.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|play0ad.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tedium.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bitcoin.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|loup-vaillant.fr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|getpolarized.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thewire.in|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|melmagazine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sambleckley.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|david.heinemeierhansson.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|secondbreakfast.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|asahi.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nintendo.co.jp|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|annoying.technology|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kiro7.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|markshuttleworth.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|anders.unix.se|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.bitbucket.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.kubernetes.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|devdocs.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|justinjackson.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|corte.si|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kotaku.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cdn.ca9.uscourts.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|forum.dlang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spacecraft.ssl.umd.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|neuralnetworksanddeeplearning.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|politico.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|notamonadtutorial.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|duck.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lg.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vorpus.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|objective-see.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|erlang-solutions.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alexgaynor.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sub.garrytan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|xkcd.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.codinghorror.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wingolog.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pipelinedb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.nelhage.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tonyarcieri.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|geoffreylitt.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|viniciusvacanti.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|magicleap.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|igvita.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chrisdone.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stackshare.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|latacora.singles|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|infoq.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|papersplease.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thepiratebay.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|calnewport.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|krausefx.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.circleci.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.cognitect.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|masswerk.at|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|0x65.dev|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dangerousminds.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|businessweek.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|meta.slashdot.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|john-millikin.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|raptitude.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mersenne.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.reverberate.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alexisohanian.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|electrek.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jeanhsu.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|svelte.technology|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|discuss.ocaml.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nedbatchelder.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|haskellforall.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vole.wtf|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|yurichev.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joel.is|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|yager.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|boilingsteam.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bigmessowires.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fail0verflow.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|beagleboard.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|floridatoday.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|popehat.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.tutorspree.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|daeken.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|techstartups.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wikitribune.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sealedabstract.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|0x46.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|longreads.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dispatch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lists.centos.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adgrok.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mcfunley.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|beginners.re|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joshworth.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|calv.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jdk.java.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|keepassxc.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thepiratebay.se|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|metatalk.metafilter.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gregable.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|newrepublic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cryptome.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|smashcompany.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mixergy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.bolt.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lesswrong.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|recode.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|baremetrics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|idea.popcount.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.nodejs.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dustincurtis.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|capnproto.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|samy.pl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fivethirtyeight.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|babeljs.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|venturebeat.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bartoszmilewski.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|interactivepython.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|feross.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nateberkopec.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bnnbloomberg.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sourcegraph.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dampfkraft.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sockpuppet.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vuejs.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tomshardware.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|go.googlesource.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|every.to|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|community.signalusers.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|features.propublica.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|trigger.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.wolfram.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|globalcitizen.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brennan.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|typescriptlang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.hboeck.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.siftscience.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.jetbrains.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|libcom.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pudding.cool|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|geek.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zedshaw.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|techspot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|popularmechanics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|acesounderglass.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stitcher.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|texasmonthly.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mattmaroon.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gabrielgambetta.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tratt.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.posterous.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|oxide.computer|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|trackchanges.postlight.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codahale.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|emberjs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|applehelpwriter.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|open.buffer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|expatsoftware.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|edgedb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|etherpad.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|firebase.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.thestartuptoolkit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|flynn.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eevblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|balena.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bell-labs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|persuasion.community|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eugeneyan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|80000hours.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zerotier.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|httptoolkit.tech|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ekioh.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cia.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nickcraver.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|simonsfoundation.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|artsy.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tryretool.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bloombergquint.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vas3k.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|100r.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|motherjones.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nasdaq.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bitcointalk.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hackershelf.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|slashcrypto.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tosdr.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fiercebiotech.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|haskell.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tribunemag.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alexeymk.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cs.vu.nl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|caltech.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|azarask.in|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gigaom.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|virtualbox.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|increment.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.janestreet.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|textslashplain.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|planetary.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|allthingsd.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|clojure.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|git.postgresql.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|howtogeek.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.kapeli.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|quickdraw.withgoogle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|discussions.agilebits.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fauna.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.sandstorm.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|openvim.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|waymo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.eladgil.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|projekte.sueddeutsche.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|whytheluckystiff.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|the-paper-trail.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|medium.dave-bailey.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kadavy.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|symbo1ics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|erikrood.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gnome.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|evanjones.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|johnsalvatier.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|notes.eatonphil.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cityobservatory.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|autocar.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.alinelerner.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|a.singlediv.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|city-journal.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.bugsnag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.steveklabnik.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jgc.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|maraoz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|somethingsimilar.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|macro.ycombinator.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|damienkatz.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|moserware.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|elastic.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tenthousandmeters.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fmwconcepts.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|recraigslist.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codingjohnson.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aftenposten.no|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.1password.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|neugierig.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|01.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jalopnik.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mnot.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jmoiron.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bjoern.brembs.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|yieldthought.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.gallup.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|plusbryan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rameznaam.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ij.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hackingdistributed.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aosabook.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fcc.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|multithreaded.stitchfix.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ybrikman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|neh.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|abc.xyz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thecorrespondent.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|techempower.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|letsencrypt.status.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|syncthing.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|torontolife.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|empiricalzeal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brown.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dustri.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|restofworld.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mikeash.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|emacsair.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fossil-scm.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rauchg.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|oregonlive.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|madebyevan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bitbucket.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|justinvincent.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|shape-of-code.coding-guidelines.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hodinkee.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.getprismatic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jeremyaboyd.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pcgamer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tutanota.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|review.chicagobooth.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|programmingisterrible.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zainamro.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|waxy.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hisham.hm|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|foundersatwork.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|neil.computer|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|youmightnotneedjquery.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sparktoro.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|supporters.eff.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|django-rest-framework.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fuse.wikichip.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alexanderell.is|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jetbrains.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rootsofprogress.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.jonlu.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|grafana.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joinpeertube.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|trac.torproject.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kapwing.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jgthms.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lighterra.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bzarg.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|itep.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dood.al|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|seriot.ch|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|go-review.googlesource.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|benjamincongdon.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|coderwall.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|betabeat.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cryto.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.bl.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|b-list.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mailpile.is|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chiark.greenend.org.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|arcfn.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|urbit.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eprint.iacr.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dl.acm.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.sessionstack.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|breck-mckye.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|prospect.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|banksimple.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|practicaltypography.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogmaverick.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|instagram-engineering.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theartofmachinery.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cpushack.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|guzey.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|morrick.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.emojipedia.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|arjunsreedharan.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|superuser.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.fosketts.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|darkpatterns.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ulisp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|herbsutter.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|darkcoding.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|latacora.micro.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|drdobbs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hollywoodreporter.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thestartupfoundry.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.fastmail.fm|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wit.ai|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|devttys0.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|qubes-os.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|robinsloan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|timetobleed.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.jitbit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mrale.ph|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|play.freeciv.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blackhat.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|laforge.gnumonks.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sfchronicle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tutorial.math.lamar.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|holovaty.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cringely.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|folklore.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|linuxvoice.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|papers.ssrn.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brianschrader.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kreci.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nngroup.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jasonshen.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lists.freedesktop.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nodejs.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|graalvm.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dailydot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lbrandy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chemistryworld.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|solipsys.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|layerci.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stellar.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|etherscan.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|macrumors.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vim-adventures.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|macleans.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.appcanary.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|briancarper.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joehewitt.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sfconservancy.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mariovittone.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|500hats.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.tailwindcss.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dilbert.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mewo2.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.getpebble.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|preshing.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|medievalists.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lynalden.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hindenburgresearch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joindiaspora.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chadfowler.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|git.sr.ht|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|science.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|esquire.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|augustl.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|paulrouget.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joelgrus.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|electronjs.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fastmail.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|trixter.oldskool.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|palladiummag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dwmkerr.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blueorigin.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.perl.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|peter.bourgon.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|boats.gitlab.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.usc.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|media.uzh.ch|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rubini.us|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ognjen.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dragonflybsd.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vagrantup.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|reclaimthenet.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.lse.ac.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|threader.app|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pgdash.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|namecheap.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mtgox.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.filepicker.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mullvad.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|m.signalvnoise.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gamerant.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|computerhistory.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bennettnotes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|amnesty.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|quip.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|balsamiq.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|conwaylife.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|quoteinvestigator.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stephanboyer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kkovacs.eu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cs.virginia.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.heapanalytics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|khronos.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|infotrope.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|r6.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|standardnotes.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thanassis.space|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|essential.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|firebase.googleblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theamericanscholar.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mxb.dev|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|moderncrypto.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gresearch.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.rapgenius.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|duartes.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|robinwieruch.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.viktomas.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thenation.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|evilmartians.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|unixsheikh.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lanyrd.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|slowboring.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|seldo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|elischiff.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|arrl.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spacetelescope.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|writing.markchristian.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|elaineou.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.lastpass.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|netzpolitik.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ghuntley.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|knightcolumbia.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|comparitech.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scanlime.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eklitzke.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scala-lang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|obscuritory.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|habitatchronicles.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|giftrocket.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|debugbear.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|makezine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|timkadlec.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|momentjs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|euractiv.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|daniellemorrill.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|writings.stephenwolfram.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gkogan.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|needwant.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|medialens.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.wepay.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dustmop.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|comp.nus.edu.sg|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|remotebase.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|smashingmagazine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kylehalladay.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fosterelli.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|braveclojure.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nomasters.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|reasonstobecheerful.world|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|x264dev.multimedia.cx|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|androidpolice.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ribbonfarm.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jcs.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codusoperandi.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|peternixey.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theplayerstribune.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|basho.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|curiousgnu.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gafferongames.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|idontplaydarts.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|forrestthewoods.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|earthquake.usgs.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.bitpay.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brookings.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|18f.gsa.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|minecraftforum.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lyft.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hhvm.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.wolfire.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nbviewer.ipython.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eenewseurope.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|smh.com.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|yubico.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|larrysanger.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|qualys.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|charlieharrington.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|casual-effects.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.macromates.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|beza1e1.tuxen.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dragan.rocks|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kevq.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.ploeh.dk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spoon-tamago.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|maizure.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|californiaglobe.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|yarchive.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gail.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|snikt.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.plaid.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ebb.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|insomnia.rest|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|biorxiv.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cmdrtaco.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tom7.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|taler.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|docs.rs|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ioccc.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|domainnamewire.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dafoster.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|boringcompany.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bankofengland.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.ntpsec.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|huyenchip.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pganalyze.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bl.ocks.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codeamigo.dev|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.x.company|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|inews.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|talyarkoni.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pijul.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thegatesnotes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bartongeorge.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|arslan.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bytecodealliance.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|journal.paul.querna.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jasonlbaptiste.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sharelatex.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jessesquires.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|iquilezles.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|yeokhengmeng.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|software.rajivprab.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fbi.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sirupsen.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|studyfinds.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rdegges.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cemerick.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cr.openjdk.java.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mapbox.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lihaoyi.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ams.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|oilshell.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|darktable.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|madinamerica.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.scrapinghub.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sheshbabu.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|diveintomark.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|modernfarmer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.ucsc.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rtl-sdr.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|byuu.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bugzilla.gnome.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sfwa.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spinellis.gr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|0pointer.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|learnxinyminutes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|9to5google.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fourmilab.ch|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hynek.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sarahmei.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.piekniewski.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cb.vu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.bloomberglaw.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.darknedgy.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|telegra.ph|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lists.swift.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adit.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thurrott.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|socket.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|maryrosecook.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tomayko.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|netmeister.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|transition.fcc.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|playground.tensorflow.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|macworld.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mahdiyusuf.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nplusonemag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kunle.app|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cheatsheetseries.owasp.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.janestreet.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chromium.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aht.seriouseats.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|arcadeblogger.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lock.cmpxchg8b.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codewithoutrules.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.roboflow.ai|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jolla.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|textfiles.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|landshark.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|syfy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|a1k0n.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thirtybees.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wp.josh.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|community.rapid7.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|variety.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|petekeen.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pragprog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.abevoelker.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|uxdesign.cc|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tomblomfield.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|platformer.news|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|airbnb.design|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|forum.bitcoin.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|victorzhou.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|newcriterion.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.sagemath.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|secret.club|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codebutler.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lambda-the-ultimate.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|universetoday.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vc.gg|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bostonglobe.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|slides.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|openid.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sizovs.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|minimalmac.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pandodaily.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.technet.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tynan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|antipolygraph.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dev.lemmy.ml|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spectator.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cognitivemedium.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cyanogenmod.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codepen.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ianthehenry.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|speakerdeck.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|en.lichess.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|datagenetics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|people.kernel.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ma.tt|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|people.freebsd.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|measuringmeasures.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|catb.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|defn.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fastly.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eetimes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chicagomaroon.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.openbloc.fr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.moertel.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nathanbarry.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bombich.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mojang.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pgbovine.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bicycling.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|perell.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mjtsai.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|softwarebyrob.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fusion.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|beta.observablehq.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lists.gnupg.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gleam.run|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thestar.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|militarytimes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.memsql.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cr.yp.to|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thepointsguy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dinosaurpictures.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|quillette.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|neil.fraser.name|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|www3.nhk.or.jp|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|muppetlabs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.gnome.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|readonlymemory.vg|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.osu.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cgl.uwaterloo.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sebastianmarshall.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|physicstoday.scitation.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|edge.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.bugreplay.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|medrxiv.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|permalink.gmane.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|notechmagazine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.ipfs.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ninjasandrobots.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.johnnovak.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tldr.sh|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|internals.rust-lang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|formidable.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thenounproject.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.earbits.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gamehistory.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|influxdata.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pythonspeed.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|observer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mastodon.social|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|whatever.scalzi.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rietta.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cushionapp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cantorsparadise.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|intelligence.senate.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.nullspace.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|keleshev.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|freethink.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|singularityhub.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|greenteapress.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hazlitt.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zainrizvi.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|welcometothejungle.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joeduffyblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tbbuck.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.fawny.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cyclingtips.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|f-secure.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tweag.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|edri.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brooker.co.za|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|learnyouahaskell.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dmitrysoshnikov.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|frankgroeneveld.nl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|inconvergent.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|editorconfig.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|atom.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mattgemmell.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fastcoexist.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.koehntopp.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|htmx.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|markozivanovic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|number-none.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sequoia-pgp.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tanelpoder.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|prospectmagazine.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bouk.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|courtlistener.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lav.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|landave.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.phusion.nl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nickjanetakis.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stateofjs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hakim.se|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.datomic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|docs.racket-lang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jamie-wong.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mocko.org.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|matasano.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|okigiveup.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|logicmag.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|andrewchen.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|airpair.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cowlark.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|semianalysis.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kk.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|log.nadim.cc|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|collaborativefund.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ventusky.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nintendo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|worldofindie.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jeroenjanssens.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|libreboot.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.roboflow.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pagetable.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eejournal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.sanctum.geek.nz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.elcomsoft.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|judegomila.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cirw.in|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|corner.squareup.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|flightfox.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tip.golang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nzherald.co.nz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wezm.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|crontab.guru|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|degoes.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|investors.modernatx.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|linustechtips.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.tanyakhovanova.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|amandapeyton.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|forumserver.twoplustwo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|belkadan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nicolasgallagher.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|leowid.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.izs.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|electrospaces.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|granta.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.darksky.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|shipilev.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nanex.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|leetcode.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|numfocus.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tomscott.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|trmm.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|marketplace.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codecademy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bit-player.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|postmake.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|journal.standardnotes.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|semantic-ui.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.dshr.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rogerebert.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|web.dev|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bravenewgeek.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|benjiweber.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theinformation.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jmmv.dev|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nycresistor.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|glench.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.kicksend.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|neverworkintheory.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thebillfold.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|superhighway98.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tylerneylon.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thetruesize.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zipcpu.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cs.uni.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bradleytaunt.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scripting.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cybertec-postgresql.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wcvb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dslreports.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|justi.cz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.data.gov.sg|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gutenberg.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sendwithus.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chrismm.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stevecorona.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eager.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|insidesources.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chrisseaton.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|behind-the-enemy-lines.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|commondreams.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tech.marksblogg.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.bitquabit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|utkusen.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lab.hakim.se|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|calacanis.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.metaobject.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.discovermagazine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|flutter.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chriskrycho.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|washingtonmonthly.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nora.codes|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.professorbeekums.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|yro.slashdot.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|noncombatant.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|irrlicht3d.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|analog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|byuu.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|learntemail.sam.today|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|discuss.joelonsoftware.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hamberg.no|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|culture.pl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|godbolt.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|usgamer.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|openmymind.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pgcon.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.insightdatascience.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.mapbox.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|heap.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|openttd.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gazehawk.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.headius.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jquerymobile.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|strlen.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|designfestival.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.kowalczyk.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|natewienert.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.iron.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|optaplanner.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.directededge.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|acm.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|postgres.heroku.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|upguard.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|panix.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|arangodb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ctvnews.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tips.ariyh.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|henrikwarne.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sorbet.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|whattofix.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lukeplant.me.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|areallybadidea.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rednuht.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cappuccino.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.wallaroolabs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|story.californiasunday.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|xato.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thinkfaster.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.algorithmia.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|n-o-d-e.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|talkingquickly.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blamcast.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|opendemocracy.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pixelbeat.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.2ndquadrant.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|klinger.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|invisibleup.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mattgreer.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|georgehart.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gsuiteupdates.googleblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|programming.guide|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|revealnews.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|renderman.pixar.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|swtch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|akkartik.name|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ma.ttias.be|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.freecodecamp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cognitiontoday.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|data.triplebyte.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|unix4lyfe.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|coconut-lang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|discourse.nixos.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|macwright.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|varnish-cache.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.lyft.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|martinrue.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bittersoutherner.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|somebits.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|certsimple.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|calvertjournal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pentestpartners.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wiki.gentoo.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|00f.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|geekwire.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|georgestocker.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|yacoset.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spencerfry.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thenewatlantis.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|j2kun.svbtle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bothsidesofthetable.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thetimes.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|corecursive.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wildml.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|smallcultfollowing.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theartnewspaper.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cdixon.posterous.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|readwriteweb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|planscope.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|allthingsdistributed.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|boston.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.kentcdodds.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brianstorti.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|austinvernon.eth.link|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|residentadvisor.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|documentcloud.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|howardism.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fsharpforfunandprofit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|semiaccurate.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hetzner.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aiweirdness.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bit-101.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|41latitude.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|amnh.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stories.californiasunday.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pxlnv.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|batsov.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gamedev.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gatesfoundation.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|meta.ath0.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|radicle.xyz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gigamonkeys.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thetyee.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ucdavis.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|teenage.engineering|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|approximatelycorrect.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|console.dev|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|qemu.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chadaustin.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|javascript.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|crawshaw.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|minireference.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|0x00sec.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jtaby.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hackernoon.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aem1k.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theatlanticwire.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tennessean.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|graphicallinearalgebra.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jpmens.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eugenewei.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.packagecloud.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zef.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.makezine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|yannesposito.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|apolloinrealtime.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nicole.express|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|docs.browserless.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joshondesign.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aviationweek.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|philip.greenspun.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ariadne.space|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.sia.tech|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cato.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.hipchat.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ruben.verborgh.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|straightdope.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joshbarczak.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aarongreenspan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|changelog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jdlm.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.cleancoder.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kyrobeshay.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|js1k.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|socketsite.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spinics.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|h-online.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|humanwhocodes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|angular.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|digitalcameraworld.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|amd.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scienceblogs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jonathan-cook.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|randomwire.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.crunchydata.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|timeshighereducation.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mihaileric.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|seatgeek.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fanfiction.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thecounter.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|haproxy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|movingfulcrum.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|onstartups.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|noyb.eu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|millionshort.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.sketchapp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tillett.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|community.ui.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adnauseam.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|intoli.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jsoftware.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chicagotribune.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|developer.squareup.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pixelambacht.nl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lambdaschool.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|consumerist.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|reaktor.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.rescuetime.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dustycloud.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|the.exa.website|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adventures.michaelfbryan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.xamarin.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|micahlerner.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|canonical.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scmp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|grantland.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nextplatform.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.netlab.360.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|m.nautil.us|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cell.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cheapskatesguide.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|w3techs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|literaryreview.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|explorabl.es|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.felipe.rs|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|unherd.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|garry.posterous.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|worthdoingbadly.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rob.conery.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|io9.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nolanlawson.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|soundguys.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|starterstory.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.jse.li|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|knowingless.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|decrypt.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|euronews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nirsoft.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|exploringjs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|recurse.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|legacy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|docs.fcc.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|channel9.msdn.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.ksplice.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|valvesoftware.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.netbsd.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hyper.sh|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.waleedkhan.name|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sugru.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|feefighters.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dejanseo.com.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ianww.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.cr.yp.to|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kentnguyen.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jonathanturley.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|snyk.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pluto.jhuapl.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|calendar.perfplanet.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tinyapps.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.evjang.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lightbluetouchpaper.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.arduino.cc|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|psychnewsdaily.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hypercritical.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|0a.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|erowid.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|inklestudios.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.soylent.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fpcomplete.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dmitryfrank.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|red-lang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|parallella.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|habr.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|musictech.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|josephwalla.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hsivonen.fi|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thoughtcatalog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scylladb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stochasticlifestyle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vaibhavsagar.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|searchengineland.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nrk.no|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.app.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mail.openjdk.java.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sciencebulletin.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|paperplanes.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jessenoller.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.hirelite.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bemmu.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adguard.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|protocol.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|redislabs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|coding2learn.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tonywright.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|writing.kemitchell.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|voxeu.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|math.ucr.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gekk.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dwitter.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tomdispatch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|erichgrunewald.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|everydayastronaut.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dashbit.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kroah.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|terrybisson.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ploum.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|explosion.ai|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.repl.it|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|neurosciencenews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|supermemo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|diyphotography.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kcsrk.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.rjmetrics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kakoune.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|saurik.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thetoolsweneed.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|atthis.link|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|softwarepreservation.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kleinbottle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|interrupt.memfault.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|philipwalton.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|foxbusiness.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jrsinclair.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|space.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sachin.posterous.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|khn.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pigdog.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zackkanter.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|informationdiet.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|giantrobotlasers.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|incolumitas.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jeffkreeftmeijer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bostonreview.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|techreport.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|baldurbjarnason.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sicpers.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|write.as|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|everything2.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|typicalprogrammer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.scaleway.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rethrick.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|inference-review.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.23andme.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mikealche.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hashcat.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|madebyloren.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blockchain.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|computerworld.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lauren.vortex.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|commoncrawl.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|svds.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.goodstuff.im|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lhup.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jasonevanish.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nextcity.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nuitka.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dataswamp.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|limpet.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nextjournal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sinews.siam.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.zactownsend.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|m.guardiannews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mazzo.li|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spideroak.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|startribune.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gitbook.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brusselstimes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|benedikt-bitterli.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fedoramagazine.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rte.ie|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|f-droid.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.dwolla.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.trust.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|about.bnef.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|txti.es|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|samizdat.mines.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|murilopereira.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bitcoincharts.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|material.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.rapportive.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|m-cacm.acm.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.halide.cam|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|billthelizard.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|edmunds.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wiki.c2.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thinkvitamin.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ipython.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|panelbear.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stuartsierra.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|clojurescript.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|maps.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dextronet.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|happyassassin.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blockchain.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|realm.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|til.simonwillison.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fingerprintjs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cs-blog.khanacademy.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bay12games.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ginzametrics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.simpleanalytics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|viewfromthewing.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|softwaremaniacs.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.mariadb.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|levels.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|craigmod.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|overcomingbias.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|users.rust-lang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scrimba.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sbnation.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|benswann.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thelocal.dk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pitchfork.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wekeroad.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|animalnewyork.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|beets.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ibiblio.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kernelnewbies.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fullstackreact.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ricostacruz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pointersgonewild.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|512pixels.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.wilshipley.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|devlog.hexops.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sacbee.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|publicbooks.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hforsten.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|okmij.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dataquest.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nocsdegree.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pandas.pydata.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.ezyang.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cs.gmu.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|weblog.raganwald.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pedestrianobservations.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dangrover.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nostarch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|foreignpolicy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|benchmarksgame-team.pages.debian.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scummvm.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theweek.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|status.heroku.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mensjournal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|braythwayt.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|clayallsopp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.japaric.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|linuxuprising.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pando.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nextcloud.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.luap.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|preetamnath.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|loper-os.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mining.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thestartuptoolkit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|exple.tive.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|percona.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tug.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|badassjs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|florentcrivello.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cntraveler.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|postmasculine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blade.nagaokaut.ac.jp|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.demofox.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zeit.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|louwrentius.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jeffwofford.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lists.canonical.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.aboutamazon.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|discourse.haskell.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|marginalrevolution.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|southampton.ac.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wccftech.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.jcoglan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|today.duke.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|forums.swift.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sebastianraschka.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|michaelfogleman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|confluent.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|maa.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|serverfault.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fitzgeraldnick.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|2600.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rustyshelf.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|svnweb.freebsd.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|argmin.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theawl.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|keygen.sh|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|freightwaves.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|randomhacks.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|susam.in|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|exercism.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|trekhleb.dev|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|securelist.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|techrights.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|franciskim.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ergoemacs.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|currentaffairs.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|arc.aiaa.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|youtube.googleblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pulitzer.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|computer.rip|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.dgraph.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.fastforwardlabs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bridgewater.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mycroft.ai|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|open.salon.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.longreads.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nvie.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adamdrake.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cordcuttersnews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kayak.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aiexperiments.withgoogle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.statuspage.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hyperpolyglot.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scaleway.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bennettfeely.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ktvu.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tomsguide.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jitbit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|time.is|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tinyclouds.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gurjeet.singh.im|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.mailgun.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|harry.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|archpaper.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.ycombinator.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|durmonski.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.zorinaq.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.peepcode.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kivy.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|crowdtilt.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wyden.senate.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|watsi.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wolframalpha.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nethack.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tidbits.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theappendix.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fossjobs.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.robinhood.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|realtimerendering.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.theincredibleholk.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ee.ryerson.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|databricks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|defensenews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rcoh.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mijailovic.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gallium.inria.fr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.replit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|learn.adafruit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joelrunyon.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.frizk.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alarmingdevelopment.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|robots.thoughtbot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|includeos.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mrcoles.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|c2.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|whonix.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fivebooks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wilfred.me.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|whydoeseverythingsuck.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pcworld.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bamsoftware.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cs.unm.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|idris-lang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|raspberrypi.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|effectiviology.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|asciiflow.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|philosophically.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alexa.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|algorithmicbotany.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|yasoob.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|varun.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|medievalbooks.nl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kgw.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|junglecoder.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|insideintercom.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|html5rocks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|arxiv-vanity.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|micahflee.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nccgroup.trust|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ashtonkemerling.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|amusingplanet.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lea.verou.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nationalinterest.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lists.webkit.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|opkode.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|michaelgeist.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|exstreamist.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|0xax.gitbooks.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jasoncrawford.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lego.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|discourse.julialang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|open-std.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|indiatoday.in|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|winestockwebdesign.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mobiforge.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|regulations.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|trackinghappiness.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.infinitenegativeutility.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.balsamiq.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|treyhunner.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|beyondloom.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lennyrachitsky.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|raymii.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.amirkhella.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mooreds.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hudsandguis.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|flask.pocoo.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dol.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wololo.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dashes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mortoray.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mediawiki.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|banterly.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|justin.tv|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|koreaherald.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|two-wrongs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|3ders.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|millcomputing.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|remysharp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|magenta.tensorflow.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|techradar.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pushing-pixels.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mymodernmet.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|designyoutrust.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|boards.4chan.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.framebase.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|openwrt.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.codecombat.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|informit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|evilsocket.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|governing.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|masteringemacs.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tomassetti.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gun.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|netlify.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ntsb.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cs.kent.ac.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kernel.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|flyertalk.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|unlimitednovelty.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|math.andrej.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|healeycodes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.jmdawson.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|metaoptimize.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mynorthwest.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|asciinema.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pydanny.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|warisboring.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.serverfault.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|narratively.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|freakonomics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|caixinglobal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|freelists.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|devblog.bu.mp|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mislav.uniqpath.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|heydonworks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|glyph.twistedmatrix.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|paulirish.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vldb.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|squeakland.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|epi.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tryolabs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|willcrichton.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|psmag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|meiert.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ghacks.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|shamusyoung.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zeptobars.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cm.bell-labs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fastcolabs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aging.nautil.us|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hackerone.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|storage.courtlistener.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|danlebrero.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mapzen.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bernsteinbear.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|austinmann.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vinaysahni.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|burakkanber.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mollyrocket.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|feeding.cloud.geek.nz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cliffle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mikeperham.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sequoiacap.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thestranger.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|datacenterdynamics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nongnu.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.pkh.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|debarghyadas.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jborichevskiy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|saturdayeveningpost.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|engineyard.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jeremymikkola.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|the-scientist.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|heterodoxacademy.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|daveceddia.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eighty-twenty.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|itvision.altervista.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|citypages.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|houstonchronicle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|perl.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mcclatchydc.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|over-yonder.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|donatstudios.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|johnmyleswhite.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|samsclass.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|markmaunder.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tauday.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|riscv.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.blazingdb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|garrett.damore.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ilikebigbits.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mediagoblin.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|keithclark.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|reviews.llvm.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|census.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|carbonbrief.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|1000memories.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tommorris.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|csswizardry.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|t3x.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alpinelinux.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.blizzard.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lowendmac.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jakubmarian.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|smackdown.blogsblogsblogs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gamefromscratch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|history.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aps.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bitbashing.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thecreativeindependent.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|filecoin.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|archdaily.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|critter.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.darklang.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|youteam.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|developer.oculus.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|caitlingreen.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stuffin.space|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|logicmatters.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|coindesk.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.checklyhq.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|reifyworks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tensorflow.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|medicalxpress.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cabinetmagazine.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vez.mrsk.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tenderlovemaking.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|timdettmers.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|timesonline.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pdfs.semanticscholar.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|trustwave.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ambrevar.xyz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theroot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tylertringas.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|globenewswire.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|applevis.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|metafilter.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|erickhun.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.wearewizards.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cpj.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|boyter.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|profgalloway.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mentallandscape.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hackertarget.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pyret.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|obdev.at|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mercurial-scm.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|datanitro.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|huffingtonpost.in|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fangpenlin.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|discovermagazine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.documentfoundation.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dotsies.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tails.boum.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|randfishkin.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tomasp.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|taiwannews.com.tw|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|modern-sql.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|carlos.bueno.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kansascity.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cdm.link|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nighthacks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.vrypan.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nyxt.atlas.engineer|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pjreddie.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fury.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.skylight.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kickstarter.engineering|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|darpa.mil|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|psyarxiv.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spottedsun.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|matt.aimonetti.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.dartlang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|musescore.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|flightglobal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theatlanticcities.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|search.cpan.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|p01.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.dantup.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thedailywtf.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|e.foundation|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|toroid.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|forum.sublimetext.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|praxis.fortelabs.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|leostartsup.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|web.cecs.pdx.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ofbrooklyn.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|revk.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rawkes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|furbo.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nickoneill.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|compilers.iecc.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|climatechangenews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|avichal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|healthcaredive.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lucasfcosta.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stevecoast.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dariusforoux.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nzz.ch|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|trac.webkit.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|waze.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|liip.ch|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ericlippert.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|matpalm.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|roshfu.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|factmag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|grafana.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|divio.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cs.huji.ac.il|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gothamist.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ajc.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mathpix.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vulture.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|picolisp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|goldsborough.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|arkadiyt.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|flowingdata.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|grist.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|clusterhq.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|postmarketos.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|monkey.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|coderholic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.silktide.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|docs.house.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nhs.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|insideclimatenews.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|holloway.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|airspacemag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|grsecurity.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kevinrooke.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|engineering.gusto.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.christianperone.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|badscience.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jerf.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vfoley.xyz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dangrossman.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.timac.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nme.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|withblue.ink|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|modernperlbooks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vasilishynkarenka.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|startupboy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thesoundingline.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.kotowicz.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ubuntuvibes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tindie.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|falstad.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alisdair.mcdiarmid.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brennancenter.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theanarchistlibrary.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cftc.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lisp-journey.gitlab.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|namepros.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sahandsaba.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.rstudio.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|neilkakkar.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.nationalpost.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|snopes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brainpickings.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mitmproxy.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.balancedpayments.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|breakingdefense.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jerrygamblin.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|helloerik.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|diogomonica.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|oversight.house.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.yossarian.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tim.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.marcocantu.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stilldrinking.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|troubles.md|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|8bitworkshop.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.watsi.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vatican.va|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gridsagegames.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.wakemate.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eastbaytimes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.eyas.sh|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|agwa.name|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lexfridman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chargen.matasano.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.esa.int|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hackage.haskell.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|askthepilot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hackertourism.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|varianceexplained.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.spark.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|danielmiessler.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.cloudant.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thechangelog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mrdoob.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|saveur.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|moderntreasury.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.suntimes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ironicsans.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.capitalandgrowth.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thisiscolossal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|benchling.engineering|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|symmetrymagazine.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|feld.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|everynoise.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|input.fontbureau.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|factordaily.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|addyosmani.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|reallifemag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|niedzejkob.p4.team|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vercel.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.sesse.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mynoise.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|justingarrison.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cse.buffalo.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jamesgolick.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gnunet.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tampabay.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jide.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|producthabits.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fourhourworkweek.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|refer.ly|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aei.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mentalfloss.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|izbicki.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mathiasbynens.be|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pcjs.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|arcan-fe.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|americamagazine.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mailman.nanog.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mysliderule.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|leonardofed.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sourcetrail.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|linuxfromscratch.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|moot.it|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|popula.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|press.web.cern.ch|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ownyourbits.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|getstream.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dcgross.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|unsupervisedmethods.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|willmcgugan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wiki.tcl-lang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.ircmaxell.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mux.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|irishtimes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dpc.pw|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dusted.codes|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|quanticdev.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|neowin.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chrislord.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.otoro.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thenational.scot|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|inquirer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|modelviewculture.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|info.iet.unipi.it|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|storehouse.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|anfractuosity.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|danwang.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|doxsey.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bugs.ruby-lang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|whyy.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|itch.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|amigalove.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|medium.freecodecamp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.doist.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|swyx.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eidel.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|senrigan.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pvk.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ccs.neu.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lysator.liu.se|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|philcalcado.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lists.dragonflybsd.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theringer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bzg.fr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|crypto.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fibery.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kimonote.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.softpedia.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|successfulsoftware.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.intercom.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|embeddedrelated.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|haveibeenpwned.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.ryotak.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.piston.rs|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joshmitteldorf.scienceblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|reviews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|svpow.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.nahurst.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|engineering.kablamo.com.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.adafruit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|earth.nullschool.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|inventwithpython.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chalkdustmagazine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.objectmentor.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aholme.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dkriesel.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pipeline.corante.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|action.eff.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nand2tetris.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gpfault.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|meshedinsights.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|missiveapp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.sendgrid.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mitadmissions.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|info.meteor.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thewirecutter.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aboveavalon.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|haxe.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|snarky.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.mapillary.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alternet.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|martinheinz.dev|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stevebenjamins.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kuro5hin.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|archlinux.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bennjordan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tromey.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|medlifestyle.news|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hackpad.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zinascii.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thegenesisblock.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rkoutnik.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.angularjs.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|learnyousomeerlang.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.rubymotion.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|berkshirehathaway.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bigstory.ap.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dji.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|momjian.us|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|anderspitman.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ubiquity.acm.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|archive.vector.org.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bitcoinfoundation.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|esr.ibiblio.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|caranddriver.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bristol.ac.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|keacher.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|planet.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|braintreepayments.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|topic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lyx.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hal.inria.fr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.powerdns.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|discovermeteor.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|diveintohtml5.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|danwin.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thingist.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sf.curbed.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|artima.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gregegan.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|veed.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kguttag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|passwordstore.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|patft.uspto.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|luckypeach.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|256kilobytes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kamalmarhubi.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|levels.fyi|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|grubstreet.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kubernetes.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|privpapers.ssrn.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|finledger.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ircv3.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|webtorrent.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|animagraffs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|coinbase.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lifehacker.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.mongodb.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lobe.ai|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.ams.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|psychologicalscience.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|autonews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|google-styleguide.googlecode.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|venomousporridge.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bennorthrop.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.lusis.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|defcon.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|railstips.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|johnwdefeo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|metabase.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jordansmith.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.brokep.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|davnicwil.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|daverupert.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|internalpointers.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.scottnonnenberg.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|webmasters.googleblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|inference.vc|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|white.ucc.asn.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dis.4chan.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mta.openssl.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.sourcerer.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|techtransparencyproject.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|agfundernews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|centauri-dreams.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|portswigger.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tagide.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|flak.tedunangst.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ferrous-systems.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|shapecatcher.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|solovyov.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.pmarca.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|benfrederickson.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|maps.stamen.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.pyston.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.freshdesk.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|radionz.co.nz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stephenmann.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|berkeleyside.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|engineering.zenpayroll.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nadiaeghbal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chartio.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|slidetocode.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ayende.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sixrevisions.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ligo.caltech.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|insider.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|grahamc.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sbcl.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codingvc.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.buoyant.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thisamericanlife.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|livescience.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.udacity.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mint.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|quantstart.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|i3wm.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lugassy.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|renato.athaydes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|john.ankarstrom.se|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|deis.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.travis-ci.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|akshat.posterous.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.danieljanus.pl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lambdassociates.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|paypal-engineering.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|macdaddy.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|homepages.inf.ed.ac.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|isocpp.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|secjuice.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|martinvigo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|osblog.stephenmarz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|business.financialpost.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thetech.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|harvardlawreview.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|leafo.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ckeditor.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|topgear.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thebaffler.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wilwheaton.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|andyadams.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|applidium.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|techspecs.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cafbit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jacobinmag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hueniverse.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tent.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.caranddriver.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|avweb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kieranhealy.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|webrtchacks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|penzba.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|onbeing.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|makeartwithpython.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|storagemojo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chrisnorstrom.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mir.aculo.us|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|automatetheboringstuff.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|doc.cat-v.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|azulsystems.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|shopify.engineering|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|windy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mygengo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|microship.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|isro.gov.in|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|amitness.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|journal.neilgaiman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.longnow.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|developers.lyst.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|threads2.scripting.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|intego.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|abc7news.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ac.els-cdn.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ooni.torproject.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rodneybrooks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|elie.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|metrics.torproject.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scss.tcd.ie|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zdziarski.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.lizzie.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nntp.perl.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|skorks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lastweekinaws.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|projectgus.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thedailymuse.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kernelmag.dailydot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|audubon.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|juretriglav.si|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ias.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|startupsopensourced.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scott.a16z.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|webdistortion.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|my.matterport.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|world.hey.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|freenetproject.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cryptologie.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ewherry.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aaronklein.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|metachris.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|info.ucl.ac.be|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|maritime-executive.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nationalpost.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stu.mp|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lensrentals.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|programmingzen.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|applied-data.science|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|2uo.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|americanscientist.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vault.fbi.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stripes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aralbalkan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|washingtonian.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jamey.thesharps.us|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|visualwebsiteoptimizer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.uw.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.sqlizer.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|workshop.chromeexperiments.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jamieweb.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|royal.pingdom.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|askamanager.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|briarproject.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|everythingsysadmin.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|serokell.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ruslanspivak.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wesmckinney.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.mattbierner.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|asimovinstitute.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|common-lisp.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|u-tokyo.ac.jp|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dailykos.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pagerduty.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|austinkleon.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.last.fm|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.clearbit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.thinkst.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hivelogic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hechingerreport.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fortressofdoors.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kushagragour.in|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ultimatehackingkeyboard.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rushter.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tarsnap.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wtsp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|elementary.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|destevez.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gentoo.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nbviewer.jupyter.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.angular.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|techrepublic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|virgin.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.getspool.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lucidchart.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.readability.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|narrative.ly|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|davidgerard.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tldp.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chillingeffects.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mattbruenig.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|engineering.khanacademy.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aurellem.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mrmoneymustache.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|themetricsystem.rjmetrics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|popey.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|datapointed.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|net.in.tum.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|smbc-comics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.gittip.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rmurphey.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tuhs.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|istartedsomething.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ilyabirman.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|amix.dk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|insidehighered.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|actu.epfl.ch|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|buyforlife.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|staysaasy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|okayhq.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|engineering.mixpanel.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|netresec.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jott.live|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|plot.ly|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|edwardtufte.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|grack.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aeonmagazine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lowlevelbits.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.dotcloud.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|robwalling.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|luajit.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mccormick.cx|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|usehaystack.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|supermemo.guru|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mgba.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|forum.nim-lang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sympa.inria.fr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lists.nongnu.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ds9a.nl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thinkpol.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nrc.nl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|faa.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|smerity.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|omaha.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wweek.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stroustrup.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|heraldsun.com.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wiki.alopex.li|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dartlang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cyclingnews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|minix3.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cryptomuseum.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.sendhub.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|web.williams.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sourceware.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.revolutionanalytics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.feabhas.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rubenerd.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|longnow.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kevinslin.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|testing.googleblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|merbist.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|romancortes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ottverse.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|panopticlick.eff.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|presslabs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|archaeology.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|qt.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rust-lang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|komonews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|redecentralize.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spencerdailey.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ryanbigg.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codeascraft.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|davidsimon.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nodered.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|releases.llvm.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.npmjs.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nothings.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|minecraft.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nber.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|docs.keydb.dev|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|startuplessonslearned.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rtpg.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|c9.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cs.tufts.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|carlschwan.eu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|disneyresearch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kilianvalkhof.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|easylang.online|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|simonschreibt.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|answers.onstartups.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|casetext.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thekidshouldseethis.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.bittorrent.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.deepgram.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|grooveshark.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|matthewrayfield.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.merovius.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|michael-noll.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|detroitnews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chromestatus.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spacy.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.theoldreader.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|larrysummers.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|devo.ps|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jackg.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|leancrew.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.smartdec.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aaronparecki.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eandt.theiet.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lennysnewsletter.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.factual.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|archlinux.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cglab.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.jpalardy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|en.yna.co.kr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|linux.slashdot.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|trevormckendrick.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cmcenroe.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|robertovitillo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|metacademy.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lethain.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|severe-weather.eu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|federalreserve.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|passcode.csmonitor.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chrismorgan.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kurzweilai.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|federalregister.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|carolchen.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|limi.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sijmen.ruwhof.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|winaero.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|techquila.co.in|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theamericanconservative.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|marijnhaverbeke.nl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|swizec.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thebestpageintheuniverse.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|epsilontheory.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|exurbe.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|motortrend.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.seattlepi.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|enlightenment.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|seriouseats.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|appleinsider.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|holistics.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dannyguo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|letsworkshop.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|androidauthority.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|visalist.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|makelinux.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|avikdas.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wiki.freebsd.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pouet.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blocksandfiles.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|docracy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|useit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sapiens.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ccn.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mattblodgett.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|france24.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zacharyburt.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|congress.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|newsroom.mastercard.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|youexec.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pragmaticpineapple.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ruder.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cpomagazine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fontsinuse.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|uscis.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|movio.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|justwatch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|seeedstudio.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|journal.dedasys.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|css-tricks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|radian.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|futurism.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brandon.invergo.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|madebymike.com.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|seomoz.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.invisiblethings.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|greghendershott.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|frankchimero.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dodgycoder.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|txt.fyi|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cisa.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|failory.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jamanetwork.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|objc.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|duo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|futurice.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sifted.eu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|laravel-news.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|archagon.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tinyletter.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.scoutapp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tomorrowcorporation.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.scottlogic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vincit.fi|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hiringlab.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adioso.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|intelligence.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|musicmachinery.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spaceref.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fantasticanachronism.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|calculist.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lizthedeveloper.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|elliotjaystocks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|julian.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|garbagecollected.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|good.is|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|elidedbranches.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|people.gnome.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|goteleport.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rome.ro|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|molily.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|douglas-self.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rubymotion.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|shubhro.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.jim-nielsen.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|deseret.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dallasnews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|purecss.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lowercasecapital.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.getpaint.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|futureofcoding.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ocregister.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|materialize.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|teddziuba.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thelocal.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|webaim.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|firstthings.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|yodaiken.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|goodcheapandfast.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|shirky.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|baltimoresun.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|greaterwrong.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bastian.rieck.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|toastytech.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|raw.githubusercontent.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wealthsimple.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sanfrancisco.cbslocal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.palantir.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|learngitbranching.js.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|arr.am|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|i.blackhat.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lolware.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sherylcanter.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|andrewgelman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pouchdb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|compose.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|work.qz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.itsfoss.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wiki.nikitavoloboev.xyz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|antigonejournal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spectator.us|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stressgrid.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|forums.tigsource.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thenewstack.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.adamsmith.cc|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gallup.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|institutionalinvestor.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lowrisc.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jshakespeare.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nasaspaceflight.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|emacsconf.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scottporad.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cam.ly|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|en.wikibooks.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|boredpanda.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adam.heroku.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|transportevolved.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jamesfriend.com.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kennethreitz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.chewxy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sfexaminer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hitchdev.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|airlineratings.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.dustincurtis.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|andymatuschak.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cs.bham.ac.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|robertputt.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|miamiherald.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.fitbit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.codeship.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|attn.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|paleotronic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cuddly-octo-palm-tree.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|flownet.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sacrideo.us|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|marmelab.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|browser.geekbench.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blairreeves.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thesquareplanet.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thesephist.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|freenas.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kwokchain.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bostinnovation.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|love2d.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|en.people.cn|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.sucuri.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tink.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|developer.palm.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|inessential.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.qt.digia.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cssdeck.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|medium.freecodecamp.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|philly.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nat.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|architecturaldigest.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adactio.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|anvil.works|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|arduino.cc|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.embed.ly|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|anyvite.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eater.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|moxie.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jacquescorbytuech.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|n8n.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|commonsware.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|snoyman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.patricktriest.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|leaf.dragonflybsd.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gamedeveloper.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|decisionsciencenews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|marinetraffic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dallasobserver.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|consumeraffairs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|english.aljazeera.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eng.paxos.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scobleizer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|endler.dev|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|assemblyai.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spaceweatherarchive.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|todayifoundout.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|itprotoday.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lifespan.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pspdfkit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|slackware.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|imba.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.wizsec.jp|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|neal.fun|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|shift.newco.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|c.learncodethehardway.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hosted.ap.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|onebigfluke.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|getmagicnow.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|projects.thestar.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ralfj.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vantage.sh|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|linuxfoundation.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|usefyi.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bingocardcreator.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.robenkleene.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mako.cc|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.frontapp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|virtuallyfun.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|csmonitor.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nintendo.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codon.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sixthtone.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|selectedintelligence.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|elasticsearch.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dwheeler.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kim.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nbcsandiego.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|paragonie.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bostonherald.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mathwithbaddrawings.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|openshot.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.aerofs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chicagomag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.embarcadero.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ispreview.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|twistlock.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lukew.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.efinancialcareers.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|travelandleisure.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.okturtles.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ilsr.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|usb.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dish.andrewsullivan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|likewise.am|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.idonethis.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.talosintelligence.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|garrysub.posterous.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|insinuator.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hypothes.is|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cdt.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|herman.bearblog.dev|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|archiveteam.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|seths.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.internetcases.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|olifro.st|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|commerce.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cosmosmagazine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|onemileatatime.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.cardiogr.am|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nsf.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|michaelfeathers.silvrback.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cardiff.ac.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stuartkhall.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ablogtowatch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|submarinecablemap.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.pandora.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|undark.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|indiestatik.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ldeming.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|shadertoy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.forecast.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thumbtack.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.yoshuawuyts.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|meaningness.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|climatecentral.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|solarianprogrammer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|allenpike.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|prometheus.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zocalopublicsquare.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jsonresume.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ts.data61.csiro.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|downloadsquad.switched.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chris-said.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eurekalert.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nav.al|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|contextis.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alpha.app.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|simon.shimmerproject.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.andyet.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|harvardmagazine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|montrealgazette.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ossblog.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|snazz.xyz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|securethoughts.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dcrainmaker.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cyberscoop.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|engineering.imvu.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zenodo.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nczonline.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|awealthofcommonsense.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jcp.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tabletmag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spritzinc.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pl-enthusiast.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.rtwilson.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|parislemon.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|perimeterx.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.ndepend.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gregreda.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cooper.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|core77.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|paraschopra.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|openspace.sfmoma.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.stephenmarz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.workshape.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ngrok.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|code.flickr.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|superpowered.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cs.tau.ac.il|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|excamera.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bjorn.tipling.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|people.idsia.ch|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|olark.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.sigplan.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|volokh.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|betterprogramming.pub|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|consumerreports.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spin.atomicobject.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|opencv.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.imgtec.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pauladamsmith.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|neosmart.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|reprints.longform.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|xda-developers.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|reefpoints.dockyard.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|benguild.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|naughtycomputer.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kb.cert.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|insidescience.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|op-co.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|roadsandkingdoms.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|netbsd.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lite.cnn.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|redeye.firstround.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|forum.xda-developers.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|posthog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ftp.iza.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|craphound.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rijksmuseum.nl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hipmunk.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fuchsia.dev|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|infrequently.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nationalreview.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|futilitycloset.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hayabusa2.jaxa.jp|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|malisper.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.jwhitham.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bemmu.posterous.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gizmodo.com.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|meyerweb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|novaspivack.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pjrc.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|get.slack.help|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mwi.usma.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aaronstannard.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|messynessychic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|defectivebydesign.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bash.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|venturehacks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thepublicdiscourse.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|browser.engineering|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|peachesnstink.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cs.utah.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|inkstonenews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|privacytools.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brianknapp.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mediaite.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theinquirer.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dhruvonmath.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lucb1e.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hetzner.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|davemart.in|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cryptopals.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|paperswithcode.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.hipmunk.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|citizen428.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|shitpost.plover.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lispcast.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|webofstories.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.northeastern.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|digitalmars.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mysk.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|janestreet.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|francescodilorenzo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|binghamton.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.businessofsoftware.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dougengelbart.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tkainrad.dev|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|machinelearningplus.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|200ok.ch|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|singlelunch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chairnerd.seatgeek.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|govtech.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.mongabay.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|erikmcclure.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pyimagesearch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thejournal.ie|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|christophermeiklejohn.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|csiro.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|maxmasnick.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bitmatica.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bbs.archlinux.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|milapneupane.com.np|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lists.randombit.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tyrrrz.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|avdi.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tuxphones.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wolfstreet.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|klarasystems.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.leahhanson.us|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lua-users.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.tjll.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|massivelyop.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kuow.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chinafile.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|allaboutcircuits.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|physorg.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|altdevblogaday.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codeahoy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|perl.plover.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wpri.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brianchristner.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|yeoman.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|structuredprocrastination.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|galactanet.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alexmuir.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gapingvoid.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|doisinkidney.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jeffknupp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|weblogs.asp.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eclipse.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gmo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|h14s.p5r.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|privatdozent.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|conorpp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dev-blog.apollodata.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bof.nl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|potaroo.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|disneyanimation.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|perspectives.mvdirona.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|digiconomist.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|futhark-lang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.stephanbehnke.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|themillions.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|charlespetzold.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|contrast.ie|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|threatpost.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|diginomica.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|iro.umontreal.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|goodui.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kevinmahoney.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|den.dev|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.danlew.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|insidermag.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eviltrout.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bartwronski.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|laughtonelectronics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|toomas.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|peoplespolicyproject.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kpcb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mcsweeneys.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|weeklystandard.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|therideshareguy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|evhead.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|praeclarum.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rs-online.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.linuxmint.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.soylent.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cabel.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wildbit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zenhabits.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|devblog.avdi.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.phpfog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thetransportpolitic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|forestry.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dabeaz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brightball.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|style.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|elezea.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aarp.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ottawacitizen.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|micropython.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|metamorphblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.jez.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aatishb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|celinehh.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|davidyat.es|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|code.joejag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|washingtonexaminer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|resetera.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|quantum.country|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ahungry.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|elementaryos.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|debuggex.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|planetizen.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eweek.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tatiyants.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|discover.dc.nihr.ac.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|web.cs.ucdavis.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|xmpp.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|electricitymap.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|projects.propublica.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|e-estonia.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.basho.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ungleich.ch|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cassandracapital.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aiyprojects.withgoogle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jwt.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|esri.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gaborcselle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|venam.nixers.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|7pace.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joshmcguigan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|promarket.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tav.espians.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|datastax.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cmyr.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hisutton.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lsub.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alpblog.heroku.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gpuopen.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hakaimagazine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|marcan.st|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|benjaminreinhardt.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adityaravishankar.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alistapart.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|msgpack.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|keionline.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|logicalclocks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|svedic.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|newsroom.unsw.edu.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|commandlinefu.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|clockworkpi.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|typography.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sigarch.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|countbayesie.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.echen.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|groovehq.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|calteches.library.caltech.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rochester.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.bjrn.se|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lawandcrime.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|betashop.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ericsink.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cleantechnica.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|amiunique.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bvckup2.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ieftimov.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ewanvalentine.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|secalerts.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|patrick-wied.at|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pitt.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hothardware.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gridstylesheets.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sciencex.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|developers.slashdot.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.confluent.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|glandium.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|arandomurl.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.nugget.one|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rd.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|slifty.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lighttable.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lurklurk.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|derstandard.at|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lvh.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rs.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eslint.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cucumbertown.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|z.cash|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nanonets.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|crunchgear.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mbuffett.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cybergibbons.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lua.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|monodraw.helftone.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|davidgcohen.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jfrog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|johnkary.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jakobgreenfeld.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|encosia.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|martinkool.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|use-the-index-luke.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|siteanalytics.compete.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|madewithlove.be|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wildlyinaccurate.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.agu.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hnsearch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thevaluable.dev|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cve.mitre.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|r2d3.us|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wsbtv.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|regex101.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fastcodesign.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|waitbutwhy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wrapbootstrap.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|angrystaffofficer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pythonprogramming.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codemirror.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|erthalion.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.wsu.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jmtd.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|businessinsider.com.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|keithschwarz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.testdouble.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rationalconspiracy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.superfeedr.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hn-books.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|techsolidarity.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|annualletter.gatesfoundation.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ardanlabs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|protonvpn.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|winrumors.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|arcticstartup.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.akamai.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|howitactuallyworks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theage.com.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.computerworld.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.artnet.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|yongfook.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ask.metafilter.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.zencoder.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ashfurrow.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rachelandrew.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|natureofcode.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jnd.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cryptoslate.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|electricliterature.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cs.toronto.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|laughingsquid.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.netcraft.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mattfriz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.computerworlduk.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|weblog.jamisbuck.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|particletree.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|loopinsight.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.qualys.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|moz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chalmers.se|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|homepage.ntlworld.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jpost.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|teenvogue.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.bufferapp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pharr.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cforcoding.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mixpanel.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thevintagenews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bdickason.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|immunant.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|madhadron.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vim.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.prototypr.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|webpolicy.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|coding.smashingmagazine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wizardzines.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|itnews.com.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codethinked.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|technologynetworks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.wolframalpha.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.juxt.pro|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|defector.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jamesyu.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dailytech.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|linear.app|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|clerk.house.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|keepachangelog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eng.localytics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|emacsrocks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dassur.ma|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sightline.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gamesradar.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sysdig.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cloudkick.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|devopsu.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|believermag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|unhandledexpression.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|efficiencyiseverything.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|therobotreport.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|howtographql.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|archive.today|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|progrium.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|redfin.engineering|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nexedi.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|home.treasury.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|opensourceconnections.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aras-p.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|battlepenguin.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|solokeys.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alexkyte.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|digitalmusicnews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kenneth.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mywiki.wooledge.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|epic.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|behavioralscientist.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jack.minardi.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zeptobars.ru|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bramcohen.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|frankforce.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|erniemiller.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|robservatory.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|artofmanliness.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|world-nuclear-news.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|openmirage.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|prism-break.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|slab.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|monkeylearn.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|metaredux.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eurogamer.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wisdomination.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|src.chromium.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tudelft.nl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.project-insanity.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hadihariri.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.xot.nl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|andrewchenblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jordan-wright.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|journal.burningman.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.tensorflow.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|standblog.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ant.design|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|overapi.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|suntimes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thecable.foreignpolicy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bestinclass.dk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hn.algolia.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gwillem.gitlab.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|elbenshira.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bankunderground.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|crowdsupply.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lists.linuxfoundation.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|prideout.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|andrewoneverything.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|peterlyons.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vogue.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|future.a16z.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thedotpost.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|davidwalsh.name|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|heise.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|regex.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.jayway.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mattmazur.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|0x80.pl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pine64.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jdh.hamkins.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|openjdk.java.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|code.djangoproject.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|airbnb.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|neatorama.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|intridea.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fastmailstatus.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nas.sr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|danielbmarkham.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.kde.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wordfence.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|quariety.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ritholtz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jasonadriaan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joelcalifa.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cs.umd.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zacharyvoase.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|decisionproblem.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|steamdb.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.chef.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|techraptor.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nanog.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|igoro.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|math.toronto.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tether.to|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adrianmejia.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adblockplus.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|techxplore.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|professional-troublemaker.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|idealab.talkingpointsmemo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nesslabs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nationalgeographic.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|iridakos.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theagilepanda.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.skyliner.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|django-cms.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.path.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|villagevoice.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|somehowmanage.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mnn.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|abovethelaw.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.logrocket.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|apress.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|curbed.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|digitizor.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.lareviewofbooks.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cambus.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.rize.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|2ality.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thedomains.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|examine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|speirs.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cs.brown.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dnalounge.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nbcbayarea.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|macperformanceguide.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gocardless.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|driverless.id|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.l0cal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|labs.ripe.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|britishlibrary.typepad.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|trustedsec.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nicholaswindsorhoward.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wefunder.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|grpc.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|innovationaus.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|algorithmwatch.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kylewritescode.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|doc.ic.ac.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|r-bloggers.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kxan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.shodan.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.couchdb.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.igalia.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adambard.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|xania.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pinboard.in|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lobste.rs|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|interestingengineering.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jcdav.is|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zwbetz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|compellingsciencefiction.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|headmelted.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.itlater.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joystiq.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.loadzero.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|exploringbinary.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|towardsdatascience.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ostif.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cs.ucr.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|transportenvironment.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sciencenews.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.portswigger.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dshipper.posterous.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|abopen.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|realclearscience.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|llnl.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brandmark.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eflorenzano.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ethanzuckerman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|montulli.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dvorak.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|octopart.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ithare.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|isc.sans.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|starling-software.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sedimental.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nitrokey.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fool.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ntietz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thepointmag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|symantec.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.adacore.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.davidtate.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.gitlab.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.dijit.sh|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|boredzo.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bishopfox.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.sproutcore.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nakedcapitalism.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hackaday.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nccgroup.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kansas.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|myfonts.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|databreaches.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|design.google|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bvp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eriwen.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|flightaware.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|us2.campaign-archive1.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|engineering.skroutz.gr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|arcentry.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|redmonk.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jesseduffield.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|foodandwine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vandenoever.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tubetime.us|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|xenbits.xen.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nofilmschool.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joi.ito.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.garlicsim.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|akr.am|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nypl.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|shmuplations.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.statwing.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|boston.conman.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lilium.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|phk.freebsd.dk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|underthehood.meltwater.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|airliners.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gobankingrates.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|maxplanck.nautil.us|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|leandromoreira.com.br|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|24ways.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|federaltimes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|slash7.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|projectrho.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pencil.evolus.vn|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|newfoodeconomy.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|geekosystem.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bengtan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jasonlefkowitz.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|teamtreehouse.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.quarkslab.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|artnome.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.chron.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.close.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lonesysadmin.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lemonde.fr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|guernicamag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.oleganza.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|poetryfoundation.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|archive.computerhistory.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|philzimmermann.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sqlalchemy.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rubyinside.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rjbs.manxome.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lab.simurai.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|shortcutfoo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|asymco.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|johnmathews.eu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.vivekhaldar.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|t3.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|coloradosun.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gamesindustry.biz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|benjoffe.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codeblog.jonskeet.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mattdesl.svbtle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wilshipley.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lunduke.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.documentcloud.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pratt.duke.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|forum.palemoon.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ring.cx|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|healthimaging.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.lawnstarter.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|drorpoleg.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|abajournal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|akitasoftware.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.algolia.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cgit.freedesktop.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|creativegood.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|krypt.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|david-peter.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|markdotto.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tuaw.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jessepollak.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|evasi0n.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|continuum.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|inconshreveable.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|go350.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|newhumanist.org.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thelocal.se|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ldpreload.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.valerieaurora.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tympanus.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gcaptain.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fireeye.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mkdev.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thoughtmaybe.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.lukaszolejnik.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|getmondo.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|open.bufferapp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|forums.macrumors.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scottberkun.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ontwik.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|git-scm.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adafruit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mathjax.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chinalawblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dw.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|udacity.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dianeravitch.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|narrator.ai|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|broadbandnow.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theaircurrent.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bytecellar.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rifters.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mikewest.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|loyaltylobby.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.hut8labs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|metmuseum.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|undo.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.discovery.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hulry.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|greenheartgames.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thehindu.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ably.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chrispenner.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|logodesignlove.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|neocomputer.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|m.motherjones.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ro-che.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ofnumbers.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rdist.root.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.alexellis.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|notebookcheck.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|new.livestream.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sonyaellenmann.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|builtin.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thecritic.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bitworking.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|iwantmyname.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|circleid.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|woboq.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|instructables.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|markmail.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|inverse.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|robinhood.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.tojicode.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|usa.streetsblog.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sanderknape.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|technical.ly|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|trek10.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theprint.in|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|000fff.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|networkworld.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|apps.bostonglobe.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pfrazee.hashbase.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|commentarymagazine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|petewarden.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|exeter.ac.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|statwing.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|unenvironment.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|paintcodeapp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|andreschweighofer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|forums.unrealengine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wikidata.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|draculatheme.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.flightcaster.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vancouversun.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cc.gatech.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|madebymany.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|afp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|huyng.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jeremymorgan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thereformedbroker.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bigocheatsheet.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|matduggan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|deis.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|poolp.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alteredqualia.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|erlang-factory.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|paranoia.dubfire.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cato-at-liberty.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|netflixprize.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|utilitydive.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|olioapps.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rcrowley.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hastebin.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dotnetfoundation.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|platformonomics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alf.nu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|antoinevastel.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|liveweave.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|causal.app|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|liw.fi|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|redis.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|collectiveidea.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|felleisen.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.nobugware.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|windowscentral.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|xobni.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|outage.report|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|justsecurity.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.rfox.eu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|way-cooler.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adamierymenko.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mesosphere.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|meatfighter.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dsc.discovery.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sciencenordic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|uxmovement.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|death.andgravity.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|staffeng.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|godottutorials.pro|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gladwell.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cgpgrey.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|source.opennews.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|unsharpen.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|haseebq.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.diasporafoundation.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pugetsystems.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|roadmap.sh|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rawstory.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nylas.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tunetheweb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|subtraction.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adam.blog.heroku.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gdcvault.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|n26.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|passportindex.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sfweekly.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wiki.csswg.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|remoteok.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|guru3d.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wisdom.weizmann.ac.il|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fred.stlouisfed.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|quantcast.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dspguide.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|monitor.firefox.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|manchester.ac.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ecowatch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|exponents.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ubere.ng|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lists.cs.uiuc.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|erasmatazz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|prestonbyrne.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|andyet.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.getfirebug.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joshtronic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cat-bus.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|oos.moxiecode.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dlo.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|openbazaar.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tumbledry.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ssd.eff.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|worldometers.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|denverpost.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.teambox.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|staff.science.uu.nl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chromium-review.googlesource.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|antoarts.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|redcode.nl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|morningstar.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nomachetejuggling.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ericholscher.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nfx.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kara.allthingsd.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|taptaptap.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rhizome.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|c-faq.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ocweekly.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|yesmagazine.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|boston.cbslocal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sethvargo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|teamliquid.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kn100.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|carsonified.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|makecode.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|leejamesrobinson.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|journals.lww.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|philfreo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fredwu.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|desertsun.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.noctua-software.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|elazzabi.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|camendesign.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spaceflightnow.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cs.uic.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lpalmieri.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|call-with-current-continuation.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pub.gajendra.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|write.privacytools.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.gitprime.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|deepstreamhub.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fosspost.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|staradvertiser.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|daggle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|text.sourcegraph.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pulumi.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|deepstream.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rebol.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|oilprice.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|itsnicethat.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theblackvault.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jeena.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mixnode.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|extremelearning.com.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.crunchbase.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|the-japan-news.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tor.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|graphics.pixar.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|deekit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gkbrk.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jayhuang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lunchbag.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vanschneider.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|seobook.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lfe.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|unitedstatescourts.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|listennotes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|techblog.livingsocial.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogoscoped.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|density.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dbasch.posterous.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|martiancraft.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.meldium.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.codeclimate.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|abtinforouzandeh.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rachelnabors.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zencoder.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|itworld.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.ipinfo.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|popsci.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|autoweek.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bbot.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|crookedtimber.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cultofmac.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|en.wikisource.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kaggle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|librepcb.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nationalobserver.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|skitch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bfilipek.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fee.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|doomworld.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|librivox.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|crispymtn.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nydailynews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brilliantmaps.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tiamat.tsotech.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|npf.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jonathan.bergknoff.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|belitsoft.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.thecybershadow.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.privacytools.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|elifesciences.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nemil.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jsonfeed.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|opendatastructures.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|yifan.lu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sierraclub.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lbatalha.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|libmill.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tricycle.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|seattletimes.nwsource.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|killscreen.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pixeltrue.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|randalolson.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.thijsalkema.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zephoria.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|paulromer.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.gtk.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.flattr.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|seedmagazine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|technosophos.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|monzo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|imperial.ac.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|secretgeek.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|facebook.design|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sachachua.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codesections.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|davidwong.fr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|root.cern.ch|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|indieweb.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.reemer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mrspeaker.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sun-sentinel.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gorban.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bgr.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|0day.work|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.realkinetic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|earther.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|positech.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|onthemedia.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cleveralgorithms.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pixelapse.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|berniesanders.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|a.wholelottanothing.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|events.ccc.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chicagobusiness.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nsl.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|srcco.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|testpilot.firefox.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|noahveltman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jamiequint.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|reverb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pri.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|trustnodes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.mathworks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cncf.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|opensource.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.brown.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|forth.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blockstream.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|getaether.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hooktheory.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|irssi.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jemma.dev|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gittup.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dropboxforum.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.neocities.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aopa.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|math-blog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|meetup.hackernewsdc.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ibtimes.sg|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|curiousrat.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ponylang.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|noisebridge.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|apps.fcc.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eenews.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dhs.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|uu.se|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.streak.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bluishcoder.co.nz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|prolost.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|corgibytes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|grouptalent.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dankaminsky.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.rubbingalcoholic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|paul.copplest.one|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|andrewhy.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|techfounder.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spinroot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|garethrees.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.gedrap.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|oceans.nautil.us|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|autonlab.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kallithea-scm.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|getrevue.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|whatsonweibo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tass.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|paste.lisp.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rollcall.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|reference.wolfram.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kevin.burke.dev|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|decisiondata.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|benbernardblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|usefathom.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pcpro.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|progit.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ffii.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|byrslf.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sigops.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.whoishiring.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mcvuk.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|google.pl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.untogether.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|uh.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fable.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hizook.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ovh.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tedinski.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|entrepreneur.venturebeat.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|c-spanvideo.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|historyextra.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|defenseone.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|volument.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|imaging-resource.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|popupcity.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|skyandtelescope.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|viva64.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|earnestcapital.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jmarbach.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chrisharrison.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jsonline.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tesla-cdn.thron.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|neuroscientistnews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wondersofphysics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lanl.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rfc-editor.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|industrialempathy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|performancejs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|infiniteundo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|heroku.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.lse.epita.fr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lacker.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|timeline.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wiki.blender.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.fugue.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|golem.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pingcap.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|john.onolan.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.mocality.co.ke|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|status.coinbase.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|attejuvonen.fi|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|serversforhackers.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|work.caltech.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fuelyourcoding.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dyn.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.tabini.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|israel21c.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rubyonrails.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|designweek.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|collison.ie|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|evilmadscientist.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|muddylemon.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|agateau.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.miguelgrinberg.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nmap.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theblockcrypto.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|haaretz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codecapsule.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ethz.ch|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.bloomca.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.snapeda.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|evonomics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|www2.macleans.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|composition.al|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|js13kgames.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lists.basho.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sciencenorway.no|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|speaking.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|exceptionnotfound.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thisismynext.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|unchartedterritories.tomaspueyo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|skilled.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thebreakfastpost.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.bumblebeelabs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|materialize.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|haystacksoftware.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.modernmechanix.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|math3ma.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|retractionwatch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|appleoutsider.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dreamsongs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gohugo.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nicolodavis.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|andreykurenkov.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|conversionxl.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|qemu-advent-calendar.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|enfranchisedmind.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ahrefs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spf13.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adamschwartz.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scikit-learn.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lessonsoffailure.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|charlesleifer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zeux.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|iximiuz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kerkour.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|racked.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.morningstar.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hfet.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|enterprisecraftsmanship.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dailynous.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sandiegouniontribune.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|playframework.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|betterhumans.coach.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thomaspark.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mimimatthews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chris.beams.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|whoismcafee.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stlouisfed.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fredrikdeboer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.cerebralab.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|weworkremotely.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|english.yonhapnews.co.kr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.ffwll.ch|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|taoofmac.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nenadseo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|our.status.im|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|justinhileman.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|financemagnates.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|srlabs.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|emacsredux.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|colorforth.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tech.trivago.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rusty.ozlabs.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|unionleader.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|huckmag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|3quarksdaily.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|basicattentiontoken.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stackfield.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|laktek.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|elasticsearch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thomashunter.name|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tapbots.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|shime.sh|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.consumerreports.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alwaysrightinstitute.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|plover.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|oleb.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mymoneyblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.clarifai.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|labs.earthpeople.se|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.greweb.fr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|truthout.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rowetel.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|acha.ninja|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.carlmjohnson.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|programming-journal.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news18.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sam.bluwiki.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|monbiot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rawgit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|foxla.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dvt.name|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|developer.marvel.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lowendtalk.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|docs.celeryproject.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|poststatus.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blockgeeks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|itnext.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.existentialize.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|semiengineering.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|digibarn.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mikemcquaid.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hackflow.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lists.opensuse.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|weblog.rogueamoeba.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|webdesignmuseum.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|garron.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|instadeq.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brisbanetimes.com.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|leanpub.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fendrich.se|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|edn.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|synthtopia.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|michaelbromley.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|refsmmat.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jonbischke.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.kqed.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|xconomy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|timeslive.co.za|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|keithp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.online.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|atariarchives.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wearethemighty.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|heatst.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.wekeroad.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dnainfo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wufoo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zompist.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nbr.co.nz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tomtunguz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.twilio.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nhplace.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|the-digital-reader.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vpri.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bailis.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|maximise.dk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|99designs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|crummy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ibtimes.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|6sqft.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|symkat.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|survata.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|greenwichtime.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|leandomainsearch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|penguindreams.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|windowsteamblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|more-magic.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wundergraph.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stereogum.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|media.defcon.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|physics.aps.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|addedbytes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theconversation.edu.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|carwoo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|swiftbysundell.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bigthink.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nltk.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|atlas.cern|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nyse.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|icyphox.sh|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hypothesis.works|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jacobobryant.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.zappos.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.joellehman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|conal.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dadhacker.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stars.chromeexperiments.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.thousandeyes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|drbunsen.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.tinfoilsecurity.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|landley.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jjbeshara.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|searchenginejournal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|samgentle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mywinamp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|acm.uiuc.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.sfweekly.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theaviationist.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mikealrogers.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|unofficialgoogledatascience.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wildbunny.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vimcasts.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|home.web.cern.ch|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.virginia.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.zawodny.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.mousereeve.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hackernewsbooks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|detexify.kirelabs.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blip.tv|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|goodstuff.im|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|opensignal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|the-pastry-box-project.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|parkerhiggins.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|roughtype.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ecosia.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dougmccune.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lambdaisland.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.8thlight.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|akaptur.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|appneta.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eos.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eia.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|freesoftwaremagazine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.isquaredsoftware.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|effectgames.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|danbirken.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|georgesaines.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cilium.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|luisant.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kde.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gengo.ai|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ask.slashdot.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|inf.ethz.ch|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mv-voice.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|visual6502.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codeofrob.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ludumdare.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bradford-delong.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sidsite.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|persquaremile.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pathdependent.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|marketplacepulse.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.steve.fi|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stefankendall.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|machinelearningmastery.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tomcritchlow.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vqronline.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pmarchive.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.exodusintel.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|icelandmonitor.mbl.is|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|learnui.design|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wisdomandwonder.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gnupg.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|otherhand.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|andyswan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|unikernel.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theappeal.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|multivax.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hilarymason.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|metro.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fxguide.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mail.gnome.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ripe.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|polygraph.cool|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|oonwoye.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|centernetworks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.kenperlin.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ericasadun.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scrapingbee.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mail-index.netbsd.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mikeindustries.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ritsumei.ac.jp|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|typing.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.britishmuseum.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mailbox.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hackety.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|invisible-island.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.minio.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|etymonline.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|founderdating.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|users.softlab.ece.ntua.gr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|read.acloud.guru|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|julian.digital|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ben.balter.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|osc.universityofcalifornia.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|futureoflife.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|multicians.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|allthatsinteresting.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|machinethink.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.denverpost.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mishadoff.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|getfirebug.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dxomark.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mycpu.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|raphkoster.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.doordash.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|paul.kinlan.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sliderulemuseum.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hpcwire.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|flaviocopes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nocomplexity.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|what-if.xkcd.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|healthcareitnews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|turingpi.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|taskwarrior.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|grepular.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nuclearsecrecy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|maxkle.in|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|csd.uwo.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alanhollis.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|splitgraph.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|instapainting.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|taxfoundation.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|delta.chat|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|appft1.uspto.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|leerob.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chrisshort.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.venanti.us|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.cnrs.fr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|500px.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fearlesssalarynegotiation.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|frankmcsherry.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nts.strzibny.name|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|developers.memsql.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sr.ht|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ebiquity.umbc.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.ubc.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dailyherald.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|felixge.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.ayoungprogrammer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|inhabitat.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lifehacker.com.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|science.howstuffworks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cancer.nautil.us|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|appcubby.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|math.utah.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tooslowexception.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|patrickcraig.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|perfectionkills.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ncona.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cnil.fr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|littlebitofcode.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zerodha.tech|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|medicine.wustl.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.socialcops.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ifttt.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.scalyr.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|psypost.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|abcactionnews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.marksweep.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|basecamp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|michael.otacoo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|toucharcade.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adage.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.klipse.tech|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dev.to|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|deadline.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|expressvpn.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zverovich.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bnl.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|discuss.linuxcontainers.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codesketch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|leveragedsellout.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|imore.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|people.inf.ethz.ch|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.smartbear.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ryanflorence.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|createdigitalmusic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nhm.ac.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.hartleybrody.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|futureboy.us|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|windowslatest.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ewontfix.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jng.imagine27.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gogs.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|geoffboeing.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|phillymag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.authy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adamwathan.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|distributionhacks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thinkster.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|terminusdb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|technoblogy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|30hourjobs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ftrain.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|foundation.zurb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.viraptor.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bennesvig.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|expressionsofchange.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.urfix.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lists.x.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|huggingface.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zeuxcg.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vmssoftware.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jimplush.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thereboot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|antimatter15.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.davidecoppola.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kotaku.com.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|3perf.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ryxcommar.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scitechdaily.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rjzaworski.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dolthub.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jperla.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|roberto.open-lab.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tofugu.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|preprints.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.kaggle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|getcarina.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thebarentsobserver.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|improbable.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|type.method.ac|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aleph.se|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lists.macosforge.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zguide.zeromq.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|onethingwell.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gittip.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|newsobserver.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|voat.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|viemu.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|embeddeduse.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ideolalia.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|andrewdumont.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sriramk.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chenhuijing.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|yegor256.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cs.nott.ac.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|trustedreviews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mitxela.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mail.haskell.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|belfasttelegraph.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zackshapiro.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|collectspace.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alchemistowl.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|interfluidity.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mithril.js.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sunboxlabs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mattermark.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ballotpedia.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|r2c.dev|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|goaccess.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|michaelwest.com.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|redsymbol.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|journals.aps.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.gingerlime.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bugsplat.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|datastuff.tech|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cliffc.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|leapmotion.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dom.as|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rickcarlino.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|electronicsweekly.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.mythic-beasts.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.codiqa.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|urbandictionary.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.ericgoldman.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thatcomputerscientist.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|shankman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.uservoice.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|shafyy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|23andme.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thebulletin.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sekao.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|om.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|reacttraining.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|phili.pe|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kamerontanseli.ghost.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|deccanherald.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|recipes.hypotheses.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scotthyoung.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.kraken.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ello.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|asiatimes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.tindie.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|plagiarismtoday.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|the74million.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|analytics.usa.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.jpl-consulting.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gosquared.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|unite.ai|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pastie.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bluetooth.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|heartbeat.fritz.ai|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.liw.fi|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|placesjournal.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|interfacelab.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|programming-motherfucker.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thespacereview.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zippia.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alumnit.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.scienceexchange.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|danielallendeutsch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|learningclojure.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|neo4j.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|insentricity.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|johnhawks.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gist.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|irishexaminer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.runnable.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|technology.stitchfix.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|anyasq.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eigenfoo.xyz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sunlightfoundation.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|makegameswith.us|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wesleytansey.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|startupljackson.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|xprize.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mongodb.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|drive.com.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|crate.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|voice.kadira.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.drewolson.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|slog.thestranger.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|remarkedly.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|artem.krylysov.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|collabora.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|handelsblatt.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dailycamera.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jozefg.bitbucket.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|baus.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|davisr.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ghc.haskell.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|akkshaya.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|boristhebrave.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ootbcomp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|puzzlescript.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mattjibson.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|simpleflying.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|houseoflawandorder.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|abstractions.nautil.us|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scalescale.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ostechnix.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|londonreconnections.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sandro.volpee.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|reghardware.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|shellcheck.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|freep.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cs.hmc.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|post-gazette.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|englishrussia.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|2ton.com.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.err.ee|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|academictimes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|beyondgrep.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lesspenguiny.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tinyhack.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mailgun.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|homepage.divms.uiowa.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|grimoire.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|unicornfree.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|afr.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|routefifty.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nintendolife.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wolfram.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rfi.fr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|talkweb.eu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|elidourado.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|math.uwaterloo.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|industryweek.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|prerender.cloud|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thezdi.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ableton.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kylerush.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hbswk.hbs.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hopesandfears.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mappingignorance.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|code.jsoftware.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thefrailestthing.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.gopheracademy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|threedots.tech|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|robnapier.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.indutny.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cloudonaut.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|techprowd.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|smalldata.tech|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|notebook.drmaciver.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|getpostman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nationalaffairs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|roarmag.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.ezliu.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|engineering.heroku.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|automobilemag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lihautan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aschmann.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ionicframework.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.davidsingleton.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.jessitron.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|orau.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|digesttime.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kswizz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wmpoweruser.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nimbleindustries.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bookforum.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|genode.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|decorrespondent.nl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theorangeduck.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.redfin.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|threema.ch|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.gaborcselle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eastbayexpress.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nilsjuenemann.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ausgamers.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nickkolenda.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|datadome.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|matusiak.eu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|foaas.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|quiverquant.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pennmedicine.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|panamapapers.icij.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rare-technologies.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wusa9.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|exupero.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nodesource.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tryapl.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adamcaudill.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|flexport.engineering|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theneurosphere.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.rice.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.ninlabs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|twistedoakstudios.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|qvault.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ourmachinery.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|linuxatemyram.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.kraih.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.nyaruka.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jeffdechambeau.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|opensoul.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cortes.design|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pawfal.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.typesafe.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.andrewcantino.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|boeing.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.custora.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|naftaliharris.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|javascriptkicks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|the-toast.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cs.rit.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|m.economictimes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vessenes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ineteconomics.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|0fps.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|justcramer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|qualiacomputing.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|improbable.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.dilbert.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|standpointmag.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pixelmator.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|heraldscotland.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|yuzu-emu.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|physicscentral.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|overclock3d.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|crainsnewyork.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|livefreeordichotomize.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lostechies.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|weblog.bocoup.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rechargenews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|weatherspark.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ceylon-lang.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|androidrookies.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nwn.blogs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nathany.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|deepdotweb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pitheringabout.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|steve.yegge.googlepages.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|useronboard.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kjmagnetics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ftp.openbsd.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bogleheads.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|v5.chriskrycho.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jordanmechner.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fare.tunes.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dangermouse.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pdf.yt|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|robbreport.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|insideevs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|logolounge.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ftp.arl.army.mil|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|linux.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|csoonline.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|catapult.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.webkid.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|uwgb.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|girinstud.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adilmoujahid.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rntz.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|smore.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.rthk.hk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|c-span.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|m.stopa.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|opb.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|opendylan.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tailwindcss.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|youtube-creators.googleblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|plosone.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|la.curbed.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gfycat.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pressfreedomfoundation.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tested.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.gruntwork.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|innoq.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|granolashotgun.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bu.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mozillalabs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thinkgrowth.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|soledadpenades.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|snips.ai|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|insightdataengineering.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bugs.webkit.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|serpentine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|crimereads.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|muut.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|deque.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nearform.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|us-cert.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|regexcrossword.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chris-lamb.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|unretrofied.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rsaconference.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nhregister.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cryoshon.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|salon.thefamily.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|leakedsource.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|clicktorelease.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chipworks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hardkernel.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.slashdot.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|top500.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|technicshistory.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|segment.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thebuild.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thistooshallgrow.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alliance.nautil.us|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|slashgeek.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zeroequalsfalse.press|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.zarfhome.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ryanpickren.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theengineer.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|the-magazine.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dennybritz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ben.casnocha.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alexirpan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|siliconvalleywatcher.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chill.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kanoki.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|knowablemagazine.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fun-mooc.fr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|longbets.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|papers.nips.cc|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dyske.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kth.se|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tawheedkader.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|plasmasturm.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.backtype.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|feaneron.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tech.backtype.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|annashipman.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sive.rs|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|keen.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|www1.informatik.uni-erlangen.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ewanleith.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tech.puredanger.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|freshman.tech|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|weakdh.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|boundary.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pcmonk.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wfla.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.adamnash.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|english.martinvarsavsky.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|usv.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|federalnewsnetwork.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theatlas.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|riknieu.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|itwire.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|standalone-sysadmin.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|autoblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pv-magazine-usa.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.andrewvc.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mappingthejourney.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.s-osg.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|erica.biz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|humantransit.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|anaxi.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bedrocklinux.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sina.is|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joachim-breitner.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|o.canada.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|michaelrbernste.in|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|computerworlduk.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tech.newstatesman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|abc7chicago.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bytes.yingw787.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mikekarnj.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|designinstruct.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fsecurify.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|deepsource.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|n-gate.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|25hoursaday.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|global.handelsblatt.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pragli.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|manuel.bernhardt.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.jooq.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|portfolio.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|harpersbazaar.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|snapframework.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hussmanfunds.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|benlog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fluentcpp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|toptal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|openssh.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|timesofisrael.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tomdalling.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stuff.co.nz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|heather.cs.ucdavis.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theincidentaleconomist.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|radiapp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.ramen.is|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|geti2p.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hey.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|33bits.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pressherald.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|staycaffeinated.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|igorkromin.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.northwestern.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|canny.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|modernhealthcare.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|about.google|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ifweassume.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.readme.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bschaatsbergen.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bendyworks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|randywestergren.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|crn.com.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|substack.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|toothycat.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pixelscommander.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thinq.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|huffingtonpost.com.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|depesz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|w2lessons.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mostlymaths.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|putanumonit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|executeprogram.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|computing.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eblong.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|asylum.madhouse-project.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|valerieaurora.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|owasp.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|petition.parliament.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fastml.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nerderati.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nutsvolts.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vine.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|grobmeier.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|coursetro.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rleonardi.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|iq.opengenus.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tech.slashdot.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stanforddaily.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mapd.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theblaze.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codingkaiser.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|techblog.badoo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lawfareblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|taskandpurpose.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|programmingdesignsystems.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|us.pycon.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.kirigin.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.perfectaudience.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mreinhold.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thoughtworks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.frankel.ch|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|deathandtaxesmag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|7news.com.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|keminglabs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|research.securitum.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.nanonets.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|roguelynn.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zenhack.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thelongandshort.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|howtosplitanatom.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|losangeles.cbslocal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|freebsdfoundation.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pqina.nl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ramblemaps.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.httpwatch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|texastribune.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vagosec.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.michielborkent.nl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|desmogblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|informationarchitects.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mpg.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|devcenter.heroku.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.hackerrank.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mailboxapp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|libregraphicsworld.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|honeycomb.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|davidhauser.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|philanthropy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|armstrongeconomics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|techpowerup.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fourweekmba.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|runwayml.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cs.uwaterloo.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jeffarchibald.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|monograph.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jaredforsyth.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rework.withgoogle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|butwhatfor.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|webglfundamentals.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|skepchick.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|t37.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blockstack.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ticalc.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|konghq.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|orlandosentinel.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ansuz.sooke.bc.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|platform.uno|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|i-kh.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thinkingagriculture.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|colorado.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|philipkiely.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theultralinx.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|the-witness.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|woot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.crowdtilt.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|docs.python-guide.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.indextank.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theirrelevantinvestor.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|herman.asia|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|quartzy.qz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|peterbe.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|shakycode.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spectrum.chat|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alugy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|modern.ie|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ilovetypography.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|parametric.press|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.staffjoy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|grahamcluley.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|benediktmeurer.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|loggly.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|typophile.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|themorningnews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.estimote.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nola.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.fanout.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theoreticalminimum.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|serhack.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|digital.nhs.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|investor.yahoo.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gamingonlinux.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|interactions.acm.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codeberg.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|arm.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fedscoop.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eyeondesign.aiga.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vihart.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|webmonkey.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pacifict.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|anaconda.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jamesclear.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|images.guide|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sandofsky.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tessrinearson.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mysqlserverteam.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|virology.ws|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|b.lesseverything.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|forklog.media|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kevinrose.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sankalpjonna.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mathbabe.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nickmchardy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spectrumnews.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fictiv.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|riskbasedsecurity.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|juliagalef.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|medium.learningbyshipping.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|developer.yahoo.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lostbookofsales.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.rainforestqa.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zeldman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|shogan.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.friendfeed.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tech.instacart.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|well-typed.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|madebynathan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dam.brown.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|electrive.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|open.bekk.no|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|launch.is|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mindyourdecisions.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|avc.blogs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|underscore.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|beakerbrowser.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tibleiz.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|learnlayout.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|statescoop.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mkaz.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|khalilstemmler.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pepijndevos.nl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|en.arguman.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dougseven.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hsj.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|washingtoncitypaper.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stefanjudis.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|remotehabits.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pawelurbanek.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mattrogish.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dataorienteddesign.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adapteva.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|waldo.jaquith.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sentient.ai|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cheeaun.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adam.chlipala.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fastmail.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|law.duke.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|uglyduck.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|labs.sentinelone.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|whoisnnamdi.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eagain.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|docs.fedoraproject.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|branchfree.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|howmanypeopleareinspacerightnow.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|devhints.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|http.cat|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aspi.org.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lalo.li|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cyanogenmod.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|math.brown.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|embracethered.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codemanship.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bombthrower.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|open.dgraph.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dlewis.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|infoworld.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.evanweaver.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|webdocs.cs.ualberta.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|runnable.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scienceblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|caterina.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cockeyed.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|garry.tv|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tech.mattmillman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pavelfatin.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.testmunk.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|playnice.ly|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thedriven.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rr-project.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vis4.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|purelyfunctional.tv|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cachestocaches.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|novelr.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|myasmine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hanshq.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|powazek.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mjt.me.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|businessinsider.fr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|benmetcalfe.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cloudant.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|buddycloud.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|devinhelton.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.onedrive.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hackoftheday.securitytube.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.rpi.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kyso.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.cryptoaustralia.org.au|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pixelmonkey.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pandoralive.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lessmilk.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.everyblock.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.keep.network|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dpreview.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.calbucci.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blogs.discovery.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|flic.kr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bostonmagazine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|haydenplanetarium.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lukesmith.xyz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.djy.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|treasury.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|abovethecrowd.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|yogthos.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adn.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eveonline.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.metamorphium.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dannyvankooten.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|creativereview.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.hasura.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dosync.posterous.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|openreview.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.serverdensity.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|manybutfinite.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rbth.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fefe.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mcla.ug|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chem.tufts.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tantek.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|greig.cc|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|xaprb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|badssl.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bbirnbaum.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ruudvanasseldonk.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|softwareatscale.dev|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|heap.engineering|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|norswap.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|reactionwheel.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rasterize.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adlervermillion.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|timeless.judofyr.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|githut.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gadgette.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|frantic.im|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|creativeapplications.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wecode.wepay.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cs.ucdavis.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|data.heapanalytics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.mixergy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sudo.ws|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|simplystatistics.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pbpython.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|techinasia.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scirra.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mrmacintosh.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|omarabid.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|reactkungfu.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|paulbridger.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|globalpost.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|david-smith.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|philipotoole.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|20bits.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kickscondor.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.zdsmith.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|iclarified.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|x-plane.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mirage.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.expensify.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hedgehogreview.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|simple.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.laptopmag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kubuszok.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|whatblag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|insight.kellogg.northwestern.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|skerritt.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|shacknews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hcn.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|desmoinesregister.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|intelligentliving.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nextbigfuture.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|arneswinnen.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bellingcat.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.delicious.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hackthesystem.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.comae.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|altdevblogaday.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|w2.eff.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.dominodatalab.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|burlingtonfreepress.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|betterwebtype.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tech.yipit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|capitolhillseattle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|flyosity.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|juffalow.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alexstjohn.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|awardwinningfjords.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|humanbioscience.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gao.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sci-news.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|teslarati.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|creativedeletion.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hushkit.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sketch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|governmentattic.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|iflscience.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bmwblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|papercups.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|deeplearning4j.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kaiostech.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kdab.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sci-hub.tw|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mobilecrunch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.liangzan.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|paulcavallaro.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|freebsdnews.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cs.dartmouth.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|slashdot.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|beta.theglobeandmail.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|franzoni.eu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|unz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|launch.gust.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mattlakeman.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|us.battle.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vitess.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|parsonsmatt.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sciam.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.inklingmarkets.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|darknetdiaries.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.mixpanel.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.kippt.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.jayfields.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bionic.fullstory.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.reybango.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tasvideos.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nathancunn.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bls.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|slashgear.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|get21stnight.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wadefoster.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.mongohq.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.samwhited.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lukethomas.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|johnmurray.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scpr.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|serverless.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mintpressnews.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|uxdesign.smashingmagazine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dcscience.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|badlogicgames.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kevinwilliampang.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|benjaminmayo.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tonymacx86.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.firedoglake.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gitorious.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|indystar.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nextbigwhat.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vectorized.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fakesteve.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theness.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.zenkit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|consequenceofsound.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|raccoon.onyxbits.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|linaro.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|insights.hpe.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|webflow.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hhs.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.folyo.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.playcanvas.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|oldblog.antirez.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|beekeeperstudio.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|capiche.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cbp.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kapeli.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.sigfpe.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nianticlabs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|econlog.econlib.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bitsofco.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.gyrosco.pe|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.n01se.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|iamwil.posterous.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|minyanville.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jcjc-dev.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|decryptmedia.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alexvermeer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|reddragdiva.dreamwidth.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|anarchogeek.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|truthonthemarket.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|numenta.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|perceptualedge.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|garykessler.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|loopj.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|newteevee.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|morningconsult.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mrmrs.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|springboard.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|computinghistory.org.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ownlocal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wellcomecollection.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|linuxreviews.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|monadical.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gamesfromwithin.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|universal-sci.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|esoteric.codes|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|petermichaud.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|laptopmag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|3news.co.nz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sel4.systems|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|accountingtoday.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|host.madison.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kdenlive.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bitstamp.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stonemaiergames.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ceronman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|airmail.news|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nickwignall.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|develop-online.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brunocalza.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gadgetopia.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|seekingalpha.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jofreeman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|muckandbrass.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vg247.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chetansurpur.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|deislabs.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|philpapers.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rubygems.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|laquadrature.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dheera.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|use.perl.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dannorth.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|orbitalindex.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|historyofyesterday.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|citymetric.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|codecommit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|danlec.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|endlessparentheses.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vrfinal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|the-american-interest.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|elinux.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|immadsnewworld.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kylecordes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ndss-symposium.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|accu.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|americans.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|languagengine.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|al-monitor.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|marksimonson.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|danilocampos.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mathpages.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nakamotoinstitute.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.ionelmc.ro|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|strawpoll.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theweek.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|morningbrew.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ozar.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|9fans.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pythonhosted.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fark.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|techendo.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|downlode.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|upstart.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|extendslogic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theundefeated.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.appsignal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|informationarchitects.jp|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|intrade.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lukasz.langa.pl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|energy.gov|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|talkpython.fm|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|yourbasic.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sachinagarwal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tech.adroll.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bowery.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.sourcing.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bostinno.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jatan.space|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|evrone.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|labs.domipheus.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thrillist.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gizmag.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|danweinreb.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tyk.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mymicrocontroller.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|samharris.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.tildeloop.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|discuss.emberjs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.superuser.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|oliveremberton.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vpnpro.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lastwordonnothing.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stevenf.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cornellsun.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|letoverlambda.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|snapcraft.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fastcocreate.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mixmax.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.goodaudience.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wikitravel.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|elzr.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gerger.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|developer.amazonwebservices.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.postmarkapp.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gamepro.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sencha.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|christianheilmann.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mg.co.za|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|warhistoryonline.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sakurity.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.yalabot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|securityweek.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|myce.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|progressiveapp.store|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|teamblog.supportbee.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|strangelyconsistent.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|themarysue.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|attendly.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|snell-pym.org.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|influxdb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|worksinprogress.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scripps.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dissenter.firedoglake.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|crackstation.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|afar.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hasura.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mtholyoke.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.startifact.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|colourlovers.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gettingmoreawesome.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|themorningnews.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hardcoresoftware.learningbyshipping.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bramlambrecht.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|spacesafetymagazine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|suckless.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|staticgen.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thefader.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|independent.ie|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pivotallabs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|opsian.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|taigeair.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|talkingpointsmemo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|williampross.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|popmotion.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|robb.weblaws.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|globaldev.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pencerw.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|michelenasti.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sourcesort.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|monash.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|haydenjames.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.webb.page|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tcfast.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.fikesfarm.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|telecompaper.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mikegerwitz.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|catless.ncl.ac.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|techflash.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|omis.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|anildash.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|authy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bitterwinter.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.illinois.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|trilema.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nshipster.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|uppy.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|probmods.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|labs.umbrella.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lawyersgunsmoneyblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tech.okcupid.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jseliger.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|openrightsgroup.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zendev.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|deepsense.ai|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|reading.supply|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fullstackpython.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cloudrail.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|crt.sh|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|charity.wtf|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gettingreal.37signals.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.spiderlabs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|javascript.christmas|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ruby-forum.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|crypt.codemancers.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aomedia.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|physics-astronomy.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|av8n.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|signalsandthreads.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|apptorium.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|smarterware.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|toys.lerdorf.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.handcraft.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alex-ionescu.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|team.adzerk.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|trottercashion.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dylanpaulus.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|shiroyasha.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sunlightlabs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|johnbender.us|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|orionmagazine.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|500ish.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eclogiselle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|j00ru.vexillium.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|partow.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zpub.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.usni.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|charemza.name|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gondor.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|starcraft.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sorentwo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thebrowser.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sslmate.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.nearlyfreespeech.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.peer5.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|understandlegacycode.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|www3.imperial.ac.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|marketingland.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|plainsite.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fabcapo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|osohq.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|marc.merlins.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|satyajit.ranjeev.in|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|transcend.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|elweb.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|arqbackup.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|turnkeylinux.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|preciousplastic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stonetemple.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|oeis.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bath.ac.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theodi.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|saucelabs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|educative.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sway.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|datacolada.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|convox.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tokbox.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|review.firstround.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|netmagazine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stanfordalumni.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fox5ny.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|phx.corporate-ir.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gist.githubusercontent.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|welivesecurity.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|linfo.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vikingcodeschool.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|talsraviv.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brainspl.at|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sefsar.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|anmolsarma.in|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mikekohn.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|doc-ok.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|duncandavidson.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|redbullstratos.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lodev.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sqreen.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|weburbanist.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|homelandsecuritynewswire.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|yuiblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mgalligan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|startupsanonymous.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|commentary.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|paidcontent.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.voyage.auto|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.safia.rocks|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pagely.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|huckmagazine.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|amplitude.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|academicvc.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zurb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fogcreek.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pubs.aeaweb.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ochronus.online|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mukulrathi.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tinfoilsecurity.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.intercom.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|counterpointresearch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|caines.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bitmessage.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sameroom.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|grapheneos.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ryanhoover.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ghost.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ably.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dgraph.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pcg-random.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|electronicdesign.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.benjamin-encz.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.apollographql.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|interaktiv.morgenpost.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|neogaf.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jasongullickson.posterous.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lvguowei.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theapeiron.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|insideairbnb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|business-standard.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.chiariglione.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.byu.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ico.org.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|asktog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thelightphone.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|weblog.muledesign.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|functional.christmas|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dendory.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|css-irl.info|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.rubybestpractices.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|buzzsumo.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|edinburghhacklab.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|uc.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|deprogrammaticaipsum.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.teamtreehouse.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|poynter.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.thirdyearmba.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hackingwithswift.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|43folders.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.siliconpublishing.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|psiloveyou.xyz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thenewinquiry.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|grc.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|yle.fi|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|buildzoom.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kmjn.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|miaminewtimes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pipedream.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|xoofx.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|9elements.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|safetyresearch.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|memcached.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|letterstoanewdeveloper.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|viewfromthewing.boardingarea.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nanxiao.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ferrucc.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.mrmeyer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dailycal.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nbcphiladelphia.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ww2.kqed.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nitter.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mathieupassenaud.fr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|uploadvr.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lincolnloop.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gaming.icrontic.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|techvibes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|news.gatech.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|leastauthority.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|find.xyz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rhodesmill.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|authzed.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|agweb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|allegro.tech|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nex-3.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|macaw.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nic.ferrier.me.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|planetscale.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|arshadchowdhury.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adbusters.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|noteflakes.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.ellenchisa.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ajaxian.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|getchip.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dutchnews.nl|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|efavdb.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mabez.dev|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|azul.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bonappetit.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|microconf.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mxb.at|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rancher.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|antoniocangiano.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|modernretail.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.veitheller.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thehistoryblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|javacodegeeks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.stevensanderson.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|foundingfuel.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|simpleprogrammer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sigusr2.net|") + }, + Action(Boost(0)) +} \ No newline at end of file diff --git a/crates/optics/testcases/samples/indieweb_blogroll.optic b/crates/optics/testcases/samples/indieweb_blogroll.optic new file mode 100644 index 000000000..1c211b53c --- /dev/null +++ b/crates/optics/testcases/samples/indieweb_blogroll.optic @@ -0,0 +1,1905 @@ +DiscardNonMatching; +Rule { + Matches { + MicroformatTag("|h-entry|") + }, + Action(Boost(0)) +}; + +Rule { + Matches { + Site("|overcomingbias.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.jim-nielsen.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bix.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.zedas.fr|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gwennseemel.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|duckrowing.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|miskatonic.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|williamgallagher.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|writingball.blogspot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.benjojo.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|simply.jenett.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bellard.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nicktaurojr.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alirezahayati.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aworkinglibrary.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nancyfriedman.typepad.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ruk.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bt.ht|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scottnesbitt.online|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|darice.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alongtheray.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|andregarzia.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cmhb.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|xianblog.wordpress.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|maggiemcneill.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|justine.lol|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mnmlscholar.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dynomight.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tonsky.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|75centralphotography.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hootreview.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|siamorweng.wordpress.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|davidbordwell.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|oceanicwilderness.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zachholman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hearthwilde.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brickexperimentchannel.wordpress.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|charlenewinfred.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thenewleafjournal.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|boffosocko.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kevq.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rollingsteeltent.blogspot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|musingsfromatangledmind.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|miriamsuzanne.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theprivacydad.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|words.steveklabnik.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pepysdiary.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|statmodeling.stat.columbia.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wildmanlife.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rollofnickels.blogspot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|type-writer.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|interconnected.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kwon.nyc|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|seanbonner.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|alittlebitofrest.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|beetleypete.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hiphopisntdead.blogspot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|campegg.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jamierubin.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cheapskatesguide.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.rachelbinx.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adventuretaco.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fullmoonfiberart.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.tobiasrevell.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jeffperry.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theusedlife.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|aows.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.samaltman.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lordmatt.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kristybowen.blogspot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thewrittenaddiction.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|appellationbeer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|eli.li|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.dshr.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|walkingarizona.blogspot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|troyhunt.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|johnpweiss.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sarahavenir.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|junkcharts.typepad.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jacquesmattheij.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gilest.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|goodoptics.wordpress.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|antirez.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|casualoptimist.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|findingcoopersvoice.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ritaottramstad.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rollingexistence.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|themarginalian.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|exilelifestyle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kelake.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|winnielim.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|davesmyth.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|noisydeadlines.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|veronique.ink|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sinclairtrails.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ciechanow.ski|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ethanhein.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|appalachianground.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|50watts.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|velveteenrabbi.blogs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cjchilvers.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hikingdude.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ribbonfarm.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bbbhltz.codeberg.page|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bookandsword.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|harsimony.wordpress.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|inthewilderness.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.acolyer.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|inhab.it|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thenewsprint.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|inthemargins.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|davidrevoy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|piperhaywood.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|morningporch.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|putah-creek.tumblr.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|marginalrevolution.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|profmattstrassler.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bruh.ltd|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dreamvalleyfarmstead.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|minutestomidnight.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stephenfollows.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|acorneredgurl.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|opensourcemusings.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|baldurbjarnason.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kristinberkey-abbott.blogspot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|widowbadass.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|islandinthenet.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lucasdidthis.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|protesilaos.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thevisualchronicle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rasterweb.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jonathanwrotethis.wordpress.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|backreaction.blogspot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|daringfireball.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mpmilestogo.site|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|paulgraham.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mtlynch.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nitinkhanna.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|teachertomsblog.blogspot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|danielsisson.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|derekkedziora.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mavengame.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chrishannah.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|davidffisher.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pxlnv.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hyperborea.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jpkoning.blogspot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|numericcitizen.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cimple.life|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theonlinephotographer.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hermitary.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zettl.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|roadtothesea.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nintil.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|languagelog.ldc.upenn.edu|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|fabiensanglard.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|47nil.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|popagandhi.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cdevroe.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joevancleave.blogspot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|centauri-dreams.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theschoolofthetransferofenergy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|analogoffice.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|drwho.virtadpt.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cubicgarden.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|calpaterson.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|andy-bell.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kickscondor.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|werd.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rusingh.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|righto.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pedestrianobservations.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brewedjourney.blogspot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|refarmer.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thedruidsgarden.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|whatever.scalzi.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ganzeer.today|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|florinpopa.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|gregmorris.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|roytang.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|andrewskurka.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tracydurnell.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|davidduchemin.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dylanharris.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|anniemueller.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bedlamfarm.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lessthan1000followers.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scripting.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|steve-best.github.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thecrow.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|geographicaljourneys.wordpress.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|log.kvl.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|kottke.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wendyprattpoetry.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|vzqk50.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|scholars-stage.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|om.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|wellappointeddesk.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|raymondcamden.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blindjournalist.wordpress.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|hamneggs716.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|robert.winter.ink|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jvt.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chuq.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nhgardensolutions.wordpress.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|verisimilitudes.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|observationalepidemiology.blogspot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|transactionswithbeauty.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|steelthistles.blogspot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|baileysbeerblog.blogspot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|takeonrules.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|disquiet.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|terriwindling.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|shiftinglight.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|siderea.dreamwidth.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rubenerd.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|skullsinthestars.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|marcthiele.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|autodidacts.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|pluralistic.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|danluu.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|photothunk.blogspot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|tmichellemoore.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|robert.ocallahan.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|renpowell.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|schwitzsplinters.blogspot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|notes.ghed.in|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|notesfromtheroad.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joelchrono12.xyz|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bfoliver.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|atlasminor.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adactio.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.thenewoil.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|silverscreenings.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|urbannature.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|david-smith.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|adamenglebright.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|joshwithers.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|summerhillstead.wordpress.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|steelsnowflake.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|going-medieval.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|morrick.me|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|luxagraf.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mudkri.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|theredhandfiles.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thesphinxblog.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|mariovillalobos.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|timapple.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|bottledaux.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|furbo.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|dansinker.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lucybellwood.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|denisebushphoto.wordpress.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|manuelmoreale.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|nomadonline.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.nuclearsecrecy.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|karlcalagan.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|granolashotgun.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|sidewayseye.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lizclimo.tumblr.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|grammarphobia.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jamesg.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|caseyhandmer.wordpress.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rachelbythebay.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|capnaux.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|100r.co|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|stephendiehl.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|krebsonsecurity.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|craigmod.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|simonwillison.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thisdaysportion.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|brainbaking.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|blog.lostartpress.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cultrface.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|iancylkowski.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|diasyrmus.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|typeoff.de|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|darknetdiaries.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|impossiblesongs.blogspot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|swistle.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lkhrs.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ericwbailey.website|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|flameeyes.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|astroanarchy.blogspot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zerokspot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|daverupert.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|austinkleon.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|grahamsisland.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jon.bo|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|somewherein.jp|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|a.wholelottanothing.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lazybear.io|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|thepassivevoice.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|zylstra.org|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|rodneybrooks.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|futurelawyer.typepad.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|colly.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jvns.ca|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|seirdy.one|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|charliebleecker.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|ben-evans.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|shadycharacters.co.uk|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|foodandwineaesthetics.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chris-granger.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|lichvanwinkle.blogspot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|silviamaggidesign.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|jeffgeerling.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|chriscoyier.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|oh.mg|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|heydingus.net|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cyclostationary.blog|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|drewdevault.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|cabel.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|radicalcut.blogspot.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|susanrigetti.com|") + }, + Action(Boost(0)) +}; +Rule { + Matches { + Site("|awhiskandaspoon.com|") + }, + Action(Boost(0)) +}; + diff --git a/crates/optics/testcases/samples/quickstart.optic b/crates/optics/testcases/samples/quickstart.optic new file mode 100644 index 000000000..2fb034436 --- /dev/null +++ b/crates/optics/testcases/samples/quickstart.optic @@ -0,0 +1,201 @@ +// You can get syntax highlighting for this file with the following vscode +// extension: https://marketplace.visualstudio.com/items?itemName=Stract.Optics + +// Optics is a domain-specific language that lets you write small programs to +// influence the search results that gets returned to you from Stract or other +// search engines that supports Optics. The goal of Optics is to give you very +// fine grained control over your own search experience. Let's see how this is +// done. + + +// As you might have guessed, comments can either be line-comments with "//" or +// block-comments "/* ... */". Optics constists of a sequence of rules where +// each rule defines how a particular search result should be altered given that +// they match the specific rule. +Rule { + Matches { + Title("Top * of 2022") + }, + Action(Downrank(3)) +}; +Rule { + Matches { + Url("reddit.com/r/*/comments") + }, + Action(Boost(3)) +}; + +// Let's unwrap what happens in the first two rules. The first rule matches all +// search results where some pattern occurs in the title of the search result. +// The pattern "Top * of 2022" indicates that a matching search result must +// contain the term "top" (non-case-sensitive) followed by any number of +// wildcard terms, which is then followed by the terms "of" and "2022" in +// sequence. This will e.g. match the titles "Top movies of 2022" and "See the +// top tourist attractions of 2022 in Paris". Note that the wildcard can match +// more than one term and that the pattern does not have to be at the beginning +// or end of the title. You can use the special token "|" in a pattern to +// indicate the beginning or end of the title, so the pattern "|Top * of 2022" +// would only match "Top movies of 2022" but not "See the top tourist +// attractions of 2022 in Paris". Patterns also only match entire terms so the +// pattern "an*how" would not match the term "anyhow" but instead "an +// how". + +// The second rule matches search results where the pattern matches the url of +// the result. Both rules specify an action that will be applied to the matching +// results: the first rule downranks these types of listicles whereas the second +// rule boosts reddit comments. The action can either be +// `Action(Boost())`, `Action(Downrank())` or `Action(Discard)` to +// completely discard the result. If no action is specified in a rule it is +// equivalent to `Action(Boost(1))` which will slightly boost a result. + +// You can specify any number of patterns in a `Matches` block. A result will +// only match if it matches all the patterns in the block. As an example, this +// rule will only discard listicles from "esquire.com" but other results from +// the same domain will not be discarded. +Rule { + Matches { + Title("Top * of 2022"), + Domain("esquire.com") + }, + Action(Discard) +}; + +// Currently we support the following match-locations in the `Matches` block: +// - Site +// - Url +// - Domain +// - Title +// - Description +// - Content +// - Schema + +// The most special of these is probably the `Schema` location. This allows you +// to match results that contains specific https://schema.org entities. This is +// also the only match-location where you cannot use the special pattern +// characters "*" and "|". `Schema` only supports simple patterns. The following +// rule boosts all pages that contains the +// https://schema.org/DiscussionForumPosting entity +Rule { + Matches { + Schema("DiscussionForumPosting") + }, + Action(Boost(5)) +}; + +// By default, any search result that does not match the optic would simply not +// have any special action applied to it and the search result's score would be +// unaltered. This behaviour can be changed by specifying `DiscardNonMatching` +DiscardNonMatching; +// Now all search resuts that does not match any of the specified rules will be +// discarded. + + +// The `Rule` block we have looked at so far only alters search results that +// matches the specific rules and leaves other results intact. To explain the +// next part, it will be helpful to know a little bit about how most web search +// engines rank their results. + +// Back in the days when Google launched, it completely disrupted the existing +// search engines by having a lot of technical advantages. One of the most +// ground breaking things they did was the introduction of their core ranking +// algorithm called PageRank. The idea is, that websites that have links from +// other trustworthy websites must themselves be trustworthy. The idea to +// analyze website links and use this for ranking gave Google way better search +// results than their competitors. However, websites quickly realized this and +// started actively building links to their own website, which skews the +// PageRank metric. In essense, websites with a high PageRank are no longer +// guaranteed to be trustworthy but might just be the best websites at link +// building. + +// At Stract we use a similar link based metric called Harmonic Centrality. It +// is calculated by taking the sum of the inverse distances from all other +// websites to a particular website. Imagine site A links to B that then links +// to C. This gives the following normalized centralities +// A ---> B ---> C +// 0 0.33 0.5 + +// While harmonic centrality is believed to be more resistant to link building +// than PageRank, it is still susceptible to it. Both PageRank, Harmonic +// centrality and other link based metrics also suffer from the fact that they +// are not personalized. They create a single global score for each site in the +// webgraph even though different people might find different sites more +// trustworthy than others. + +// Let's now get back from our detour and see what this means for our optics. + +// In optics you have the ability to like and dislike sites. We then use these +// sites This is the same thing that happens whenever you like a search result +// directly in the Stract UI. +Like(Site("news.ycombinator.com")); +Dislike(Site("w3schools.com")); + +// We then boost sites that is linked from the same sites as the ones you like, +// and downrank sites that is linked from the same sites as the ones you +// dislike. The idea is that if you like site A in the following graph you will +// probably also like site B since they both have links from site C. +// C +// / \ +// v v +// A B + +// One thing to note here is that only simple patterns can be used inside +// `Like(Site("..."))` and `Dislike(Site("..."))`. The special tokens "*" and +// "|" will not work here. + +// We have now covered how you can alter the scores of specific search results +// and indicate which sites you like more than others. While harmonic centrality +// plays a large role in the final score of a search result, in reality it is +// actually multiple signals that gets combined to determine the final score for +// each search result. Using the `Ranking` block you can choose to boost +// specific signals. For example, this will the title text signal (bm25_title) +// and host centrality (harmonic centrality for site hostnames) by a factor of +// 10. +Ranking(Signal("bm25_title"), 10); +Ranking(Signal("host_centrality"), 10); + +// Note that different signals might be scaled differently based on the nature +// of how they are calculated, so a higher coefficient does not necesarrily +// result in a larger influence on the final score. Currently we support the +// following signals, but since this list is highly dynamic we encourage you to +// consult the source code +// (https://github.com/StractOrg/stract/blob/main/core/src/ranking/signal.rs) +// for the most up-to-date list and to see how each signal is calculated: +// - bm25 +// - bm25_title +// - bm25_clean_body +// - bm25_stemmed_title +// - bm25_stemmed_clean_body +// - bm25_all_body +// - bm25_url +// - bm25_site +// - bm25_domain +// - bm25_site_no_tokenizer +// - bm25_domain_no_tokenizer +// - bm25_domain_if_homepage +// - bm25_domain_name_if_homepage_no_tokenizer +// - bm25_title_if_homepage +// - bm25_backlink_text +// - bm25_description +// - cross_encoder +// - host_centrality +// - is_homepage +// - fetch_time_ms +// - update_timestamp +// - tracker_score +// - region +// - query_centrality +// - inbound_similarity +// - lambda_mart + +// Changing the ranking is considered an advanced feature and should only be +// used if you know what you are doing. The ranking signals are updated +// frequently and might change in the future without much notice. + + +// Last but not least, when you have developed your optic it can be installed in +// Stract by uploading the Optic to github, and copy the "raw" url into +// https://trystract.com/settings/optics. E.g. the url for this Optic is +// "https://raw.githubusercontent.com/StractOrg/sample-optics/main/quickstart.optic" + +// Alternatively you can host it anywhere that returns a simple plain-text HTTP +// response and is publicly available. \ No newline at end of file diff --git a/crates/optics/testcases/samples/scripts/discussions.py b/crates/optics/testcases/samples/scripts/discussions.py new file mode 100644 index 000000000..ddb363b31 --- /dev/null +++ b/crates/optics/testcases/samples/scripts/discussions.py @@ -0,0 +1,59 @@ +import pandas as pd +import os +from pathlib import Path + +file_path = Path(os.path.realpath(__file__)) + +# csv source: https://github.com/maltfield/awesome-lemmy-instances +df = pd.read_csv( + file_path.parent.parent.joinpath("data").joinpath("awesome-lemmy-instances.csv") +) + +instances = df["Instance"].tolist() + +# hacky but works +urls = [instance.split("](")[1][:-1] for instance in instances] +sites = [url.split("//")[1].split("/")[0] for url in urls] + + +def rule(site): + s = """Rule {{ + Matches {{ + Site("|{0}|") + }} +}};""".format( + site + ) + + return s + + +optic = """DiscardNonMatching; + +Rule { + Matches { + Schema("QAPage"), + } +}; + +Rule { + Matches { + Schema("DiscussionForumPosting"), + } +}; + +Rule { + Matches { + Domain("reddit.com"), + Url("comments"), + } +}; + +""" + +optic += ( + "// source of instances: https://github.com/maltfield/awesome-lemmy-instances\n" +) +optic += "\n\n".join([rule(site) for site in sites]) + +print(optic) diff --git a/justfile b/justfile index 77b677850..a38cf6f36 100644 --- a/justfile +++ b/justfile @@ -33,8 +33,8 @@ export STRACT_CARGO_ARGS := env_var_or_default("STRACT_CARGO_ARGS", "") ./scripts/export_fact_model @configure *ARGS: - just setup {{ARGS}} - just prepare_models + # just setup {{ARGS}} + # just prepare_models RUST_LOG="none,stract=info" just cargo run --release --all-features -- configure {{ARGS}} @setup_python_env: @@ -46,3 +46,17 @@ export STRACT_CARGO_ARGS := env_var_or_default("STRACT_CARGO_ARGS", "") @cargo *ARGS: LIBTORCH="{{justfile_directory()}}/libtorch" LD_LIBRARY_PATH="{{justfile_directory()}}/libtorch/lib" DYLD_LIBRARY_PATH="{{justfile_directory()}}/libtorch/lib" cargo {{ARGS}} + +@bench-compile: + #!/bin/bash + BRANCH=$(git rev-parse --abbrev-ref HEAD) + hyperfine --show-output -w 2 -p 'touch core/src/lib.rs' \ + "git switch main && cargo build -p stract --bin stract" \ + "git switch ${BRANCH} && cargo build -p stract --bin stract" + +@bench-compile-release: + #!/bin/bash + BRANCH=$(git rev-parse --abbrev-ref HEAD) + hyperfine --show-output -w 2 -p 'touch core/src/lib.rs' \ + "git switch main && cargo build -p stract --bin stract --release" \ + "git switch ${BRANCH} && cargo build -p stract --bin stract --release" diff --git a/kuchiki/Cargo.toml b/lib/kuchiki/Cargo.toml similarity index 100% rename from kuchiki/Cargo.toml rename to lib/kuchiki/Cargo.toml diff --git a/kuchiki/LICENSE b/lib/kuchiki/LICENSE similarity index 100% rename from kuchiki/LICENSE rename to lib/kuchiki/LICENSE diff --git a/kuchiki/README.md b/lib/kuchiki/README.md similarity index 100% rename from kuchiki/README.md rename to lib/kuchiki/README.md diff --git a/kuchiki/docs/.nojekyll b/lib/kuchiki/docs/.nojekyll similarity index 100% rename from kuchiki/docs/.nojekyll rename to lib/kuchiki/docs/.nojekyll diff --git a/kuchiki/docs/404.html b/lib/kuchiki/docs/404.html similarity index 100% rename from kuchiki/docs/404.html rename to lib/kuchiki/docs/404.html diff --git a/kuchiki/docs/index.html b/lib/kuchiki/docs/index.html similarity index 100% rename from kuchiki/docs/index.html rename to lib/kuchiki/docs/index.html diff --git a/kuchiki/examples/find_matches.rs b/lib/kuchiki/examples/find_matches.rs similarity index 100% rename from kuchiki/examples/find_matches.rs rename to lib/kuchiki/examples/find_matches.rs diff --git a/kuchiki/examples/stack-overflow.rs b/lib/kuchiki/examples/stack-overflow.rs similarity index 100% rename from kuchiki/examples/stack-overflow.rs rename to lib/kuchiki/examples/stack-overflow.rs diff --git a/kuchiki/src/attributes.rs b/lib/kuchiki/src/attributes.rs similarity index 100% rename from kuchiki/src/attributes.rs rename to lib/kuchiki/src/attributes.rs diff --git a/kuchiki/src/cell_extras.rs b/lib/kuchiki/src/cell_extras.rs similarity index 100% rename from kuchiki/src/cell_extras.rs rename to lib/kuchiki/src/cell_extras.rs diff --git a/kuchiki/src/iter.rs b/lib/kuchiki/src/iter.rs similarity index 100% rename from kuchiki/src/iter.rs rename to lib/kuchiki/src/iter.rs diff --git a/kuchiki/src/lib.rs b/lib/kuchiki/src/lib.rs similarity index 100% rename from kuchiki/src/lib.rs rename to lib/kuchiki/src/lib.rs diff --git a/kuchiki/src/node_data_ref.rs b/lib/kuchiki/src/node_data_ref.rs similarity index 100% rename from kuchiki/src/node_data_ref.rs rename to lib/kuchiki/src/node_data_ref.rs diff --git a/kuchiki/src/parser.rs b/lib/kuchiki/src/parser.rs similarity index 100% rename from kuchiki/src/parser.rs rename to lib/kuchiki/src/parser.rs diff --git a/kuchiki/src/select.rs b/lib/kuchiki/src/select.rs similarity index 100% rename from kuchiki/src/select.rs rename to lib/kuchiki/src/select.rs diff --git a/kuchiki/src/serializer.rs b/lib/kuchiki/src/serializer.rs similarity index 100% rename from kuchiki/src/serializer.rs rename to lib/kuchiki/src/serializer.rs diff --git a/kuchiki/src/tests.rs b/lib/kuchiki/src/tests.rs similarity index 100% rename from kuchiki/src/tests.rs rename to lib/kuchiki/src/tests.rs diff --git a/kuchiki/src/tree.rs b/lib/kuchiki/src/tree.rs similarity index 100% rename from kuchiki/src/tree.rs rename to lib/kuchiki/src/tree.rs diff --git a/kuchiki/test_data/foo.html b/lib/kuchiki/test_data/foo.html similarity index 100% rename from kuchiki/test_data/foo.html rename to lib/kuchiki/test_data/foo.html diff --git a/optics-lsp/Cargo.toml b/optics-lsp/Cargo.toml index 780bbb2c7..805864ec6 100644 --- a/optics-lsp/Cargo.toml +++ b/optics-lsp/Cargo.toml @@ -15,6 +15,6 @@ serde = { version = "1.0.137", features = ["rc", "derive"] } serde-wasm-bindgen = "0.4.5" thiserror = "1.0.31" -optics = { path = "../optics" } +optics = { path = "../crates/optics" } [workspace] diff --git a/optics/build.rs b/optics/build.rs deleted file mode 100644 index ca5c2836d..000000000 --- a/optics/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - lalrpop::process_root().unwrap(); -} diff --git a/optics/testcases/samples b/optics/testcases/samples deleted file mode 160000 index 9bd299a2f..000000000 --- a/optics/testcases/samples +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 9bd299a2f4bfd7803f2549d322279abe97fd3bea From 04317164b24efe31e52654b781e192eb57d8720c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20B=C3=B8ving?= Date: Wed, 18 Oct 2023 17:46:07 +0200 Subject: [PATCH 04/54] Move intmap into a separate crate --- Cargo.lock | 8 ++++++++ Cargo.toml | 1 + crates/core/Cargo.toml | 1 + crates/core/src/lib.rs | 1 - crates/core/src/naive_bayes.rs | 2 +- crates/core/src/ranking/inbound_similarity.rs | 2 +- crates/core/src/similar_sites.rs | 2 +- crates/core/src/webgraph/centrality/betweenness.rs | 6 ++---- crates/core/src/webgraph/mod.rs | 1 - lib/intmap/Cargo.toml | 9 +++++++++ crates/core/src/intmap.rs => lib/intmap/src/lib.rs | 0 11 files changed, 24 insertions(+), 9 deletions(-) create mode 100644 lib/intmap/Cargo.toml rename crates/core/src/intmap.rs => lib/intmap/src/lib.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index 6ddbc6f56..65ef3e41b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1974,6 +1974,13 @@ dependencies = [ "web-sys", ] +[[package]] +name = "intmap" +version = "0.1.0" +dependencies = [ + "serde", +] + [[package]] name = "ipnet" version = "2.8.0" @@ -4242,6 +4249,7 @@ dependencies = [ "image", "indicatif 0.17.7", "insta", + "intmap", "itertools 0.11.0", "kuchiki", "lalrpop", diff --git a/Cargo.toml b/Cargo.toml index 6a1c88a49..c053d2c14 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -43,6 +43,7 @@ http = "0.2.8" image = "0.24.3" indicatif = {version = "0.17.7", features = ["rayon"]} insta = "1.31" +intmap = { path = "lib/intmap" } itertools = "0.11.0" kuchiki = { path = "./lib/kuchiki" } lalrpop = {version = "0.20.0", features = ["lexer"]} diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index c87a66cf7..79820490e 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -52,6 +52,7 @@ hashbrown = {workspace = true} http = {workspace = true} image = {workspace = true} indicatif = {workspace = true} +intmap.workspace = true itertools = {workspace = true} kuchiki = {workspace = true} lalrpop-util = {workspace = true} diff --git a/crates/core/src/lib.rs b/crates/core/src/lib.rs index 7069c4ca3..5060e60c5 100644 --- a/crates/core/src/lib.rs +++ b/crates/core/src/lib.rs @@ -53,7 +53,6 @@ mod image_downloader; mod image_store; mod improvement; pub mod index; -mod intmap; mod kahan_sum; mod kv; mod leaky_queue; diff --git a/crates/core/src/naive_bayes.rs b/crates/core/src/naive_bayes.rs index 729019ba5..cda6dea34 100644 --- a/crates/core/src/naive_bayes.rs +++ b/crates/core/src/naive_bayes.rs @@ -14,8 +14,8 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -use crate::intmap::IntMap; use hashbrown::{HashMap, HashSet}; +use intmap::IntMap; use itertools::Itertools; use std::hash::Hash; diff --git a/crates/core/src/ranking/inbound_similarity.rs b/crates/core/src/ranking/inbound_similarity.rs index dd49abeaa..16f7b7bdb 100644 --- a/crates/core/src/ranking/inbound_similarity.rs +++ b/crates/core/src/ranking/inbound_similarity.rs @@ -22,11 +22,11 @@ use std::{ }; use dashmap::DashMap; +use intmap::{IntMap, IntSet}; use rayon::prelude::ParallelIterator; use serde::{Deserialize, Serialize}; use crate::{ - intmap::{IntMap, IntSet}, webgraph::{NodeID, Webgraph}, Result, }; diff --git a/crates/core/src/similar_sites.rs b/crates/core/src/similar_sites.rs index 7b4568a46..45c75ff57 100644 --- a/crates/core/src/similar_sites.rs +++ b/crates/core/src/similar_sites.rs @@ -14,13 +14,13 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . +use intmap::{IntMap, IntSet}; use std::{cmp::Reverse, collections::BinaryHeap, sync::Arc}; use hashbrown::HashSet; use url::Url; use crate::{ - intmap::{IntMap, IntSet}, ranking::inbound_similarity::InboundSimilarity, webgraph::{Node, NodeID, Webgraph}, webpage::url_ext::UrlExt, diff --git a/crates/core/src/webgraph/centrality/betweenness.rs b/crates/core/src/webgraph/centrality/betweenness.rs index 330bd5638..3991414ef 100644 --- a/crates/core/src/webgraph/centrality/betweenness.rs +++ b/crates/core/src/webgraph/centrality/betweenness.rs @@ -20,12 +20,10 @@ use std::collections::{HashMap, VecDeque}; use indicatif::{ProgressBar, ProgressStyle}; +use intmap::IntMap; use serde::{Deserialize, Serialize}; -use crate::{ - intmap::IntMap, - webgraph::{Node, NodeID, Webgraph}, -}; +use crate::webgraph::{Node, NodeID, Webgraph}; fn calculate(graph: &Webgraph, with_progress: bool) -> (HashMap, i32) { let mut centrality: HashMap = HashMap::new(); diff --git a/crates/core/src/webgraph/mod.rs b/crates/core/src/webgraph/mod.rs index 3be628abd..4d40975ad 100644 --- a/crates/core/src/webgraph/mod.rs +++ b/crates/core/src/webgraph/mod.rs @@ -27,7 +27,6 @@ use url::Url; use utoipa::ToSchema; use crate::executor::Executor; -use crate::intmap; pub mod centrality; mod store; diff --git a/lib/intmap/Cargo.toml b/lib/intmap/Cargo.toml new file mode 100644 index 000000000..2f14e426d --- /dev/null +++ b/lib/intmap/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "intmap" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +serde = { workspace = true, features = ["derive"] } diff --git a/crates/core/src/intmap.rs b/lib/intmap/src/lib.rs similarity index 100% rename from crates/core/src/intmap.rs rename to lib/intmap/src/lib.rs From 1726c684ce322508b1bc6b127a0e5cc732126c09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20B=C3=B8ving?= Date: Wed, 18 Oct 2023 17:54:57 +0200 Subject: [PATCH 05/54] Move leaky_queue into crate --- Cargo.lock | 5 +++++ Cargo.toml | 1 + crates/core/Cargo.toml | 1 + crates/core/src/alice/generate.rs | 2 +- crates/core/src/api/mod.rs | 2 +- crates/core/src/improvement.rs | 3 +-- crates/core/src/lib.rs | 1 - justfile | 5 +++++ lib/leaky_queue/Cargo.toml | 8 ++++++++ .../core/src/leaky_queue.rs => lib/leaky_queue/src/lib.rs | 0 10 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 lib/leaky_queue/Cargo.toml rename crates/core/src/leaky_queue.rs => lib/leaky_queue/src/lib.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index 65ef3e41b..4015be4ae 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2130,6 +2130,10 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" +[[package]] +name = "leaky_queue" +version = "0.1.0" + [[package]] name = "lebe" version = "0.5.2" @@ -4254,6 +4258,7 @@ dependencies = [ "kuchiki", "lalrpop", "lalrpop-util", + "leaky_queue", "libc", "logos", "lz-str", diff --git a/Cargo.toml b/Cargo.toml index c053d2c14..4caf0f4d2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -48,6 +48,7 @@ itertools = "0.11.0" kuchiki = { path = "./lib/kuchiki" } lalrpop = {version = "0.20.0", features = ["lexer"]} lalrpop-util = {version = "0.20.0", features = ["lexer"]} +leaky_queue = { path = "./lib/leaky_queue" } libc = "0.2.142" logos = "0.13.0" lz-str = "0.2.1" diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index 79820490e..3bfd80d99 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -56,6 +56,7 @@ intmap.workspace = true itertools = {workspace = true} kuchiki = {workspace = true} lalrpop-util = {workspace = true} +leaky_queue.workspace = true libc = {workspace = true} logos = {workspace = true} lz-str = {workspace = true} diff --git a/crates/core/src/alice/generate.rs b/crates/core/src/alice/generate.rs index 75f4db58a..a7972a6ae 100644 --- a/crates/core/src/alice/generate.rs +++ b/crates/core/src/alice/generate.rs @@ -17,11 +17,11 @@ use std::{rc::Rc, sync::Arc}; use aes_gcm::{Aes256Gcm, Key}; +use leaky_queue::LeakyQueue; use tch::{IndexOp, Kind, Tensor}; use crate::{ alice::ExecutionState, - leaky_queue::LeakyQueue, llm_utils::{self, ClonableTensor}, }; diff --git a/crates/core/src/api/mod.rs b/crates/core/src/api/mod.rs index 0926c145d..a9ae4577d 100644 --- a/crates/core/src/api/mod.rs +++ b/crates/core/src/api/mod.rs @@ -18,6 +18,7 @@ //! All http requests are handled using axum. use axum::{body::Body, extract, middleware, Router}; +use leaky_queue::LeakyQueue; use tokio::sync::Mutex; use tower_http::compression::CompressionLayer; @@ -30,7 +31,6 @@ use crate::{ member::{Member, Service}, }, improvement::{store_improvements_loop, ImprovementEvent}, - leaky_queue::LeakyQueue, ranking::models::lambdamart::LambdaMART, searcher::api::ApiSearcher, }; diff --git a/crates/core/src/improvement.rs b/crates/core/src/improvement.rs index 439299a75..0c1f3459f 100644 --- a/crates/core/src/improvement.rs +++ b/crates/core/src/improvement.rs @@ -17,14 +17,13 @@ use std::{sync::Arc, time::Duration}; use chrono::{DateTime, Timelike, Utc}; +use leaky_queue::LeakyQueue; use scylla::{prepared_statement::PreparedStatement, SessionBuilder}; use thiserror::Error; use tokio::{sync::Mutex, time}; use url::Url; use uuid::Uuid; -use crate::leaky_queue::LeakyQueue; - #[derive(Debug, Error)] enum Error { #[error("scylla query")] diff --git a/crates/core/src/lib.rs b/crates/core/src/lib.rs index 5060e60c5..435a6060a 100644 --- a/crates/core/src/lib.rs +++ b/crates/core/src/lib.rs @@ -55,7 +55,6 @@ mod improvement; pub mod index; mod kahan_sum; mod kv; -mod leaky_queue; #[cfg(feature = "libtorch")] mod llm_utils; mod metrics; diff --git a/justfile b/justfile index a38cf6f36..6dc7ec72f 100644 --- a/justfile +++ b/justfile @@ -60,3 +60,8 @@ export STRACT_CARGO_ARGS := env_var_or_default("STRACT_CARGO_ARGS", "") hyperfine --show-output -w 2 -p 'touch core/src/lib.rs' \ "git switch main && cargo build -p stract --bin stract --release" \ "git switch ${BRANCH} && cargo build -p stract --bin stract --release" + +@librarify path: + cargo new lib/{{file_stem(path)}} --lib + mv {{path}} lib/{{file_stem(path)}}/src/lib.rs + echo "cargo add -p stract {{file_stem(path)}}" diff --git a/lib/leaky_queue/Cargo.toml b/lib/leaky_queue/Cargo.toml new file mode 100644 index 000000000..8b4b32daa --- /dev/null +++ b/lib/leaky_queue/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "leaky_queue" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/crates/core/src/leaky_queue.rs b/lib/leaky_queue/src/lib.rs similarity index 100% rename from crates/core/src/leaky_queue.rs rename to lib/leaky_queue/src/lib.rs From 5fd765c33bdea095d3c1df21471fb2c803607645 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20B=C3=B8ving?= Date: Wed, 18 Oct 2023 18:05:05 +0200 Subject: [PATCH 06/54] Move sonic into crate --- Cargo.lock | 17 ++++++++++++ Cargo.toml | 1 + crates/core/Cargo.toml | 1 + crates/core/src/api/webgraph.rs | 2 +- crates/core/src/crawler/crawl_db.rs | 11 +++----- crates/core/src/crawler/router.rs | 2 +- crates/core/src/crawler/worker.rs | 2 +- crates/core/src/distributed/mod.rs | 1 - crates/core/src/entrypoint/crawler.rs | 3 +-- crates/core/src/entrypoint/search_server.rs | 4 +-- crates/core/src/entrypoint/webgraph_server.rs | 4 +-- crates/core/src/mapreduce/mod.rs | 2 -- crates/core/src/searcher/distributed.rs | 2 -- lib/sonic/Cargo.toml | 20 ++++++++++++++ .../sonic/mod.rs => lib/sonic/src/lib.rs | 4 +-- .../sonic => lib/sonic/src}/service.rs | 27 ++++++++----------- 16 files changed, 62 insertions(+), 41 deletions(-) create mode 100644 lib/sonic/Cargo.toml rename crates/core/src/distributed/sonic/mod.rs => lib/sonic/src/lib.rs (98%) rename {crates/core/src/distributed/sonic => lib/sonic/src}/service.rs (91%) diff --git a/Cargo.lock b/Cargo.lock index 4015be4ae..64146e81c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4183,6 +4183,22 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "sonic" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "bytemuck", + "proptest", + "proptest-derive", + "serde", + "thiserror", + "tokio", + "tracing", +] + [[package]] name = "spin" version = "0.9.8" @@ -4294,6 +4310,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", + "sonic", "tantivy", "tch", "thiserror", diff --git a/Cargo.toml b/Cargo.toml index 4caf0f4d2..cbe41e605 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -93,6 +93,7 @@ scylla = { git = "https://github.com/scylladb/scylla-rust-driver", rev = "82c1c9 serde = {version = "1.0.137", features = ["rc", "derive"]} serde_json = "1.0.81" serde_urlencoded = "0.7.1" +sonice = { path = "./lib/sonic" } tantivy = {git = "https://github.com/quickwit-oss/tantivy", rev = "182f58cea"} tch = "0.13.0" thiserror = "1.0.31" diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index 3bfd80d99..de508c3f3 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -89,6 +89,7 @@ scylla = {workspace = true} serde = {workspace = true} serde_json = {workspace = true} serde_urlencoded = {workspace = true} +sonic = { version = "0.1.0", path = "../../lib/sonic" } tantivy = {workspace = true} tch = {workspace = true, optional = true} thiserror = {workspace = true} diff --git a/crates/core/src/api/webgraph.rs b/crates/core/src/api/webgraph.rs index bc57c76c5..0ce0ea360 100644 --- a/crates/core/src/api/webgraph.rs +++ b/crates/core/src/api/webgraph.rs @@ -21,7 +21,7 @@ use http::StatusCode; use utoipa::{IntoParams, ToSchema}; use crate::{ - distributed::{cluster::Cluster, member::Service, retry_strategy::ExponentialBackoff, sonic}, + distributed::{cluster::Cluster, member::Service, retry_strategy::ExponentialBackoff}, entrypoint::webgraph_server::GraphLevel, webgraph::{FullEdge, Node}, }; diff --git a/crates/core/src/crawler/crawl_db.rs b/crates/core/src/crawler/crawl_db.rs index 68a29dcca..69778a702 100644 --- a/crates/core/src/crawler/crawl_db.rs +++ b/crates/core/src/crawler/crawl_db.rs @@ -278,12 +278,7 @@ impl UrlStateDbShard { keys.push(key_bytes); } - for (val, (_, url)) in self - .db - .multi_get(keys.into_iter()) - .into_iter() - .zip(urls.iter()) - { + for (val, (_, url)) in self.db.multi_get(keys).into_iter().zip(urls.iter()) { if let Some(val) = val? { let state: UrlState = bincode::deserialize(&val)?; res.insert(url.clone(), state); @@ -385,7 +380,7 @@ impl UrlStateDb { let mut res = HashMap::new(); for shard in &self.shards { - res.extend(shard.multi_get(urls)?.into_iter()); + res.extend(shard.multi_get(urls)?); } Ok(res) @@ -433,7 +428,7 @@ impl DomainStateDb { for (val, domain) in self .db - .multi_get(domain_bytes.into_iter()) + .multi_get(domain_bytes) .into_iter() .zip(domains.iter()) { diff --git a/crates/core/src/crawler/router.rs b/crates/core/src/crawler/router.rs index fa4fcec2e..2c53eec9c 100644 --- a/crates/core/src/crawler/router.rs +++ b/crates/core/src/crawler/router.rs @@ -4,7 +4,7 @@ use std::{net::SocketAddr, time::Duration}; use tokio::sync::Mutex; use crate::{ - distributed::{retry_strategy::ExponentialBackoff, sonic}, + distributed::retry_strategy::ExponentialBackoff, entrypoint::crawler::coordinator::{CoordinatorService, GetJob}, }; diff --git a/crates/core/src/crawler/worker.rs b/crates/core/src/crawler/worker.rs index 0e67ad9cd..a571b082f 100644 --- a/crates/core/src/crawler/worker.rs +++ b/crates/core/src/crawler/worker.rs @@ -33,7 +33,7 @@ use url::Url; use crate::{ config::CrawlerConfig, crawler::MAX_URL_LEN_BYTES, - distributed::{retry_strategy::ExponentialBackoff, sonic}, + distributed::retry_strategy::ExponentialBackoff, entrypoint::crawler::router::{NewJob, RouterService}, warc, webpage::Html, diff --git a/crates/core/src/distributed/mod.rs b/crates/core/src/distributed/mod.rs index 9d64573fa..04b1a33b1 100644 --- a/crates/core/src/distributed/mod.rs +++ b/crates/core/src/distributed/mod.rs @@ -16,4 +16,3 @@ pub mod cluster; pub mod member; pub mod retry_strategy; -pub mod sonic; diff --git a/crates/core/src/entrypoint/crawler.rs b/crates/core/src/entrypoint/crawler.rs index fe3f96e83..adbb21d4f 100644 --- a/crates/core/src/entrypoint/crawler.rs +++ b/crates/core/src/entrypoint/crawler.rs @@ -17,13 +17,12 @@ use std::{net::SocketAddr, sync::Arc}; use serde::{Deserialize, Serialize}; +use sonic::{service::Message, sonic_service}; use crate::{ config, crawler::{self, planner::make_crawl_plan, CrawlCoordinator, Crawler}, - distributed::sonic::{self, service::Message}, kv::rocksdb_store::RocksDbStore, - sonic_service, webgraph::WebgraphBuilder, Result, }; diff --git a/crates/core/src/entrypoint/search_server.rs b/crates/core/src/entrypoint/search_server.rs index b2a85aea1..f266d7e8d 100644 --- a/crates/core/src/entrypoint/search_server.rs +++ b/crates/core/src/entrypoint/search_server.rs @@ -17,6 +17,7 @@ use std::{collections::HashMap, path::Path}; use serde::{Deserialize, Serialize}; +use sonic::sonic_service; use tracing::info; use url::Url; @@ -25,7 +26,6 @@ use crate::{ distributed::{ cluster::Cluster, member::{Member, Service}, - sonic, }, entity_index::EntityIndex, image_store::Image, @@ -36,7 +36,7 @@ use crate::{ models::{lambdamart::LambdaMART, linear::LinearRegression}, }, searcher::{InitialWebsiteResult, LocalSearcher, SearchQuery}, - sonic_service, Result, + Result, }; sonic_service!( diff --git a/crates/core/src/entrypoint/webgraph_server.rs b/crates/core/src/entrypoint/webgraph_server.rs index d77072169..6ea08c73e 100644 --- a/crates/core/src/entrypoint/webgraph_server.rs +++ b/crates/core/src/entrypoint/webgraph_server.rs @@ -20,6 +20,7 @@ use std::sync::Arc; use itertools::Itertools; use serde::Deserialize; use serde::Serialize; +use sonic::{service::Message, sonic_service}; use tracing::info; use url::Url; use utoipa::ToSchema; @@ -28,12 +29,9 @@ use crate::config; use crate::distributed::cluster::Cluster; use crate::distributed::member::Member; use crate::distributed::member::Service; -use crate::distributed::sonic; -use crate::distributed::sonic::service::Message; use crate::ranking::inbound_similarity::InboundSimilarity; use crate::searcher::DistributedSearcher; use crate::similar_sites::SimilarSitesFinder; -use crate::sonic_service; use crate::webgraph::Compression; use crate::webgraph::FullEdge; use crate::webgraph::Node; diff --git a/crates/core/src/mapreduce/mod.rs b/crates/core/src/mapreduce/mod.rs index 9069c1edb..b0043c6fd 100644 --- a/crates/core/src/mapreduce/mod.rs +++ b/crates/core/src/mapreduce/mod.rs @@ -27,8 +27,6 @@ use thiserror::Error; pub use worker::StatelessWorker; pub use worker::Worker; -use crate::distributed::sonic; - pub(crate) type Result = std::result::Result; #[derive(Error, Debug)] diff --git a/crates/core/src/searcher/distributed.rs b/crates/core/src/searcher/distributed.rs index 6199f07aa..8d2746a07 100644 --- a/crates/core/src/searcher/distributed.rs +++ b/crates/core/src/searcher/distributed.rs @@ -32,8 +32,6 @@ use serde::{Deserialize, Serialize}; use thiserror::Error; use url::Url; -use crate::distributed::sonic; - use super::{InitialWebsiteResult, SearchQuery}; const NUM_REPLICA_RETRIES: usize = 3; diff --git a/lib/sonic/Cargo.toml b/lib/sonic/Cargo.toml new file mode 100644 index 000000000..521d9a243 --- /dev/null +++ b/lib/sonic/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "sonic" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +anyhow.workspace = true +async-trait.workspace = true +bincode.workspace = true +bytemuck.workspace = true +serde = { workspace = true, features = ["derive"] } +thiserror.workspace = true +tokio.workspace = true +tracing.workspace = true + +[dev-dependencies] +proptest.workspace = true +proptest-derive.workspace = true diff --git a/crates/core/src/distributed/sonic/mod.rs b/lib/sonic/src/lib.rs similarity index 98% rename from crates/core/src/distributed/sonic/mod.rs rename to lib/sonic/src/lib.rs index 1519e56d9..6d2b20cdd 100644 --- a/crates/core/src/distributed/sonic/mod.rs +++ b/lib/sonic/src/lib.rs @@ -24,7 +24,7 @@ use tokio::{ net::{TcpListener, TcpStream, ToSocketAddrs}, }; -pub(crate) type Result = std::result::Result; +pub type Result = std::result::Result; #[derive(thiserror::Error, Debug)] pub enum Error { @@ -126,7 +126,7 @@ struct Header { } pub struct Server { - pub(super) listener: TcpListener, + listener: TcpListener, marker: PhantomData<(Req, Res)>, } diff --git a/crates/core/src/distributed/sonic/service.rs b/lib/sonic/src/service.rs similarity index 91% rename from crates/core/src/distributed/sonic/service.rs rename to lib/sonic/src/service.rs index 15fa1d4e2..03f4e5d3b 100644 --- a/crates/core/src/distributed/sonic/service.rs +++ b/lib/sonic/src/service.rs @@ -137,8 +137,6 @@ macro_rules! sonic_service { use super::{$service, $($req),*}; - use $crate::distributed::sonic; - #[derive(Debug, Clone, ::serde::Deserialize)] pub enum Request { $($req($req),)* @@ -149,14 +147,14 @@ macro_rules! sonic_service { } #[derive(::serde::Serialize, ::serde::Deserialize)] pub enum Response { - $($req(<$req as sonic::service::Message<$service>>::Response),)* + $($req(<$req as $crate::service::Message<$service>>::Response),)* } $( - impl sonic::service::Wrapper<$service> for $req { + impl $crate::service::Wrapper<$service> for $req { fn wrap_request_ref(req: &Self) -> RequestRef { RequestRef::$req(req) } - fn unwrap_response(res: <$service as sonic::service::Service>::Response) -> Option { + fn unwrap_response(res: <$service as $crate::service::Service>::Response) -> Option { #[allow(irrefutable_let_patterns)] if let Response::$req(value) = res { Some(value) @@ -167,22 +165,22 @@ macro_rules! sonic_service { } )* #[async_trait::async_trait] - impl sonic::service::Service for $service { + impl $crate::service::Service for $service { type Request = Request; type RequestRef<'a> = RequestRef<'a>; type Response = Response; - async fn handle(req: Request, server: &Self) -> sonic::Result { + async fn handle(req: Request, server: &Self) -> $crate::Result { match req { $( - Request::$req(value) => Ok(Response::$req(sonic::service::Message::handle(value, server).await?)), + Request::$req(value) => Ok(Response::$req($crate::service::Message::handle(value, server).await?)), )* } } } impl $service { - pub async fn bind(self, addr: impl ::tokio::net::ToSocketAddrs) -> sonic::Result> { - sonic::service::Server::bind(self, addr).await + pub async fn bind(self, addr: impl ::tokio::net::ToSocketAddrs) -> $crate::Result<$crate::service::Server> { + $crate::service::Server::bind(self, addr).await } } } @@ -193,10 +191,9 @@ macro_rules! sonic_service { mod tests { use proptest::prelude::*; - use std::{marker::PhantomData, net::SocketAddr, sync::atomic::AtomicI32}; + use std::{future::Future, marker::PhantomData, net::SocketAddr, sync::atomic::AtomicI32}; use super::{Server, Service, Wrapper}; - use futures::Future; struct ConnectionBuilder { addr: SocketAddr, @@ -258,8 +255,6 @@ mod tests { use proptest_derive::Arbitrary; use serde::{Deserialize, Serialize}; - use crate::distributed::sonic; - use super::super::Message; pub struct CounterService { @@ -279,7 +274,7 @@ mod tests { impl Message for Change { type Response = i32; - async fn handle(self, server: &CounterService) -> sonic::Result { + async fn handle(self, server: &CounterService) -> crate::Result { let prev = server .counter .fetch_add(self.amount, std::sync::atomic::Ordering::SeqCst); @@ -291,7 +286,7 @@ mod tests { impl Message for Reset { type Response = (); - async fn handle(self, server: &CounterService) -> sonic::Result { + async fn handle(self, server: &CounterService) -> crate::Result { server.counter.store(0, std::sync::atomic::Ordering::SeqCst); Ok(()) } From 04fae0ea8ed3f6a9661ff597f08a04916ba16290 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20B=C3=B8ving?= Date: Wed, 18 Oct 2023 18:18:18 +0200 Subject: [PATCH 07/54] Move some util functions into stdx and tokenizer into a crate --- Cargo.lock | 20 +++++++++ Cargo.toml | 2 + crates/core/Cargo.toml | 2 + crates/core/src/collector.rs | 3 +- crates/core/src/entity_index/mod.rs | 2 +- crates/core/src/inverted_index.rs | 12 +++--- crates/core/src/lib.rs | 41 ------------------- crates/core/src/query/parser.rs | 5 +-- crates/core/src/ranking/signal.rs | 4 +- crates/core/src/schema.rs | 3 +- crates/core/src/searcher/api.rs | 14 ++++--- crates/core/src/simhash.rs | 3 +- crates/core/src/snippet.rs | 2 +- crates/core/src/spell/mod.rs | 4 +- crates/core/src/summarizer.rs | 5 +-- crates/core/src/webpage/mod.rs | 17 ++++---- crates/core/src/webpage/schema_org/mod.rs | 4 +- crates/stdx/Cargo.toml | 8 ++++ crates/stdx/src/lib.rs | 39 ++++++++++++++++++ lib/tokenizer/Cargo.toml | 16 ++++++++ .../tokenizer/src}/add_space_last.rs | 0 .../mod.rs => lib/tokenizer/src/lib.rs | 10 ++--- .../tokenizer/src}/split_preserve.rs | 0 23 files changed, 129 insertions(+), 87 deletions(-) create mode 100644 crates/stdx/Cargo.toml create mode 100644 crates/stdx/src/lib.rs create mode 100644 lib/tokenizer/Cargo.toml rename {crates/core/src/tokenizer => lib/tokenizer/src}/add_space_last.rs (100%) rename crates/core/src/tokenizer/mod.rs => lib/tokenizer/src/lib.rs (98%) rename {crates/core/src/tokenizer => lib/tokenizer/src}/split_preserve.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index 64146e81c..b1cd370d2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4232,6 +4232,10 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "stdx" +version = "0.1.0" + [[package]] name = "stract" version = "0.1.0" @@ -4311,10 +4315,12 @@ dependencies = [ "serde_json", "serde_urlencoded", "sonic", + "stdx", "tantivy", "tch", "thiserror", "tikv-jemallocator", + "tokenizer", "tokenizers", "tokio", "tokio-stream", @@ -4768,6 +4774,20 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +[[package]] +name = "tokenizer" +version = "0.1.0" +dependencies = [ + "itertools 0.11.0", + "logos", + "serde", + "serde_json", + "stdx", + "tantivy", + "url", + "whatlang", +] + [[package]] name = "tokenizers" version = "0.13.4" diff --git a/Cargo.toml b/Cargo.toml index cbe41e605..bdb7eec4b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -94,10 +94,12 @@ serde = {version = "1.0.137", features = ["rc", "derive"]} serde_json = "1.0.81" serde_urlencoded = "0.7.1" sonice = { path = "./lib/sonic" } +stdx = { path = "./crates/stdx" } tantivy = {git = "https://github.com/quickwit-oss/tantivy", rev = "182f58cea"} tch = "0.13.0" thiserror = "1.0.31" tikv-jemallocator = "0.5" +tokenizer = { path = "lib/tokenizer" } tokenizers = "0.13.2" tokio = {version = "1.23.1", features = ["full"]} tokio-stream = "0.1.11" diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index de508c3f3..d64ad4153 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -90,9 +90,11 @@ serde = {workspace = true} serde_json = {workspace = true} serde_urlencoded = {workspace = true} sonic = { version = "0.1.0", path = "../../lib/sonic" } +stdx.workspace = true tantivy = {workspace = true} tch = {workspace = true, optional = true} thiserror = {workspace = true} +tokenizer.workspace = true tokenizers = {workspace = true} tokio = {workspace = true} tokio-stream = {workspace = true} diff --git a/crates/core/src/collector.rs b/crates/core/src/collector.rs index f3737b7e6..1ad7a4b2a 100644 --- a/crates/core/src/collector.rs +++ b/crates/core/src/collector.rs @@ -24,7 +24,6 @@ use tantivy::{ }; use crate::{ - combine_u64s, config::CollectorConfig, fastfield_reader, inverted_index::{DocAddress, WebsitePointer}, @@ -155,7 +154,7 @@ impl TopSegmentCollector { let hash2 = hash.unwrap(); let hash = [hash1, hash2]; - combine_u64s(hash).into() + stdx::combine_u64s(hash).into() } } diff --git a/crates/core/src/entity_index/mod.rs b/crates/core/src/entity_index/mod.rs index 138ff8157..7c16b4f52 100644 --- a/crates/core/src/entity_index/mod.rs +++ b/crates/core/src/entity_index/mod.rs @@ -31,6 +31,7 @@ use tantivy::{ tokenizer::Tokenizer, DocAddress, IndexReader, IndexWriter, Searcher, TantivyDocument, Term, }; +use tokenizer::Normal; use tracing::info; use url::Url; @@ -38,7 +39,6 @@ use crate::{ image_downloader::{ImageDownloadJob, ImageDownloader}, image_store::{EntityImageStore, Image, ImageStore}, kv::{rocksdb_store::RocksDbStore, Kv}, - tokenizer::Normal, Result, }; diff --git a/crates/core/src/inverted_index.rs b/crates/core/src/inverted_index.rs index 9c1450c64..4cbd6a9d5 100644 --- a/crates/core/src/inverted_index.rs +++ b/crates/core/src/inverted_index.rs @@ -33,6 +33,9 @@ use tantivy::merge_policy::NoMergePolicy; use tantivy::schema::{Schema, Value}; use tantivy::tokenizer::TokenizerManager; use tantivy::{IndexReader, IndexWriter, SegmentMeta, TantivyDocument}; +use tokenizer::{ + BigramTokenizer, Identity, JsonField, SiteOperatorUrlTokenizer, Tokenizer, TrigramTokenizer, +}; use url::Url; use crate::collector::{Hashes, MainCollector}; @@ -43,18 +46,15 @@ use crate::query::Query; use crate::ranking::initial::Score; use crate::ranking::pipeline::RankingWebsite; use crate::ranking::SignalAggregator; +use crate::schema::create_schema; use crate::schema::{FastField, Field, TextField, ALL_FIELDS}; use crate::search_ctx::Ctx; +use crate::snippet; use crate::snippet::TextSnippet; -use crate::tokenizer::{ - BigramTokenizer, Identity, JsonField, SiteOperatorUrlTokenizer, TrigramTokenizer, -}; use crate::webgraph::NodeID; use crate::webpage::region::Region; use crate::webpage::{schema_org, Webpage}; use crate::Result; -use crate::{combine_u64s, snippet}; -use crate::{schema::create_schema, tokenizer::Tokenizer}; use std::collections::HashSet; use std::fs; use std::path::Path; @@ -320,7 +320,7 @@ impl InvertedIndex { if id1 == u64::MAX && id2 == u64::MAX { Ok(None) } else { - let id = combine_u64s([id1, id2]); + let id = stdx::combine_u64s([id1, id2]); Ok(Some(id.into())) } } diff --git a/crates/core/src/lib.rs b/crates/core/src/lib.rs index 435a6060a..d7fb285f0 100644 --- a/crates/core/src/lib.rs +++ b/crates/core/src/lib.rs @@ -75,7 +75,6 @@ pub mod spell; mod subdomain_count; #[cfg(feature = "libtorch")] pub mod summarizer; -mod tokenizer; #[allow(unused)] mod ttl_cache; pub mod warc; @@ -164,43 +163,3 @@ fn rand_words(num_words: usize) -> String { res.trim().to_string() } - -fn ceil_char_boundary(str: &str, index: usize) -> usize { - let mut res = index; - - while !str.is_char_boundary(res) && res < str.len() { - res += 1; - } - - res -} - -fn floor_char_boundary(str: &str, index: usize) -> usize { - let mut res = index; - - while !str.is_char_boundary(res) && res > 0 { - res -= 1; - } - - res -} - -pub fn split_u128(num: u128) -> [u64; 2] { - [(num >> 64) as u64, num as u64] -} - -pub fn combine_u64s(nums: [u64; 2]) -> u128 { - ((nums[0] as u128) << 64) | (nums[1] as u128) -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn split_combine_u128() { - for num in 0..10000_u128 { - assert_eq!(combine_u64s(split_u128(num)), num); - } - } -} diff --git a/crates/core/src/query/parser.rs b/crates/core/src/query/parser.rs index c9a478f55..1ef973a0c 100644 --- a/crates/core/src/query/parser.rs +++ b/crates/core/src/query/parser.rs @@ -21,7 +21,6 @@ use tantivy::{ use crate::{ bangs::BANG_PREFIX, - floor_char_boundary, schema::{Field, TextField, ALL_FIELDS}, }; @@ -392,7 +391,7 @@ pub fn parse(query: &str) -> Vec> { continue; } - cur_term_begin = floor_char_boundary(&query, cur_term_begin); + cur_term_begin = stdx::floor_char_boundary(&query, cur_term_begin); if query[cur_term_begin..].starts_with('"') { if let Some(offset) = query[cur_term_begin + 1..].find('"') { @@ -418,7 +417,7 @@ pub fn parse(query: &str) -> Vec> { if cur_term_begin < query.len() { res.push(parse_term( - &query[floor_char_boundary(&query, cur_term_begin)..query.len()], + &query[stdx::floor_char_boundary(&query, cur_term_begin)..query.len()], )); } diff --git a/crates/core/src/ranking/signal.rs b/crates/core/src/ranking/signal.rs index 047e5b447..538a86606 100644 --- a/crates/core/src/ranking/signal.rs +++ b/crates/core/src/ranking/signal.rs @@ -17,7 +17,7 @@ use crate::fastfield_reader::FieldValue; use crate::query::optic::AsSearchableRule; use crate::query::Query; -use crate::{combine_u64s, Result}; +use crate::Result; use crate::{ enum_map::EnumMap, fastfield_reader, @@ -294,7 +294,7 @@ impl Signal { if node_id1 == u64::MAX && node_id2 == u64::MAX { None } else { - let id = combine_u64s([node_id1, node_id2]); + let id = stdx::combine_u64s([node_id1, node_id2]); Some(NodeID::from(id)) } diff --git a/crates/core/src/schema.rs b/crates/core/src/schema.rs index 7aefebdd1..3ef9b1c96 100644 --- a/crates/core/src/schema.rs +++ b/crates/core/src/schema.rs @@ -15,8 +15,7 @@ // along with this program. If not, see . use tantivy::schema::{IndexRecordOption, NumericOptions, TextFieldIndexing, TextOptions}; - -use crate::tokenizer::{ +use tokenizer::{ BigramTokenizer, Identity, JsonField, SiteOperatorUrlTokenizer, Tokenizer, TrigramTokenizer, }; diff --git a/crates/core/src/searcher/api.rs b/crates/core/src/searcher/api.rs index 948d7b508..3c7dc9fee 100644 --- a/crates/core/src/searcher/api.rs +++ b/crates/core/src/searcher/api.rs @@ -40,9 +40,10 @@ use crate::{ bangs::Bangs, collector::BucketCollector, distributed::cluster::Cluster, + query, ranking::{models::lambdamart::LambdaMART, pipeline::RankingPipeline}, + Result, }; -use crate::{ceil_char_boundary, floor_char_boundary, query, Result}; #[cfg(feature = "libtorch")] use crate::{qa_model::QaModel, ranking::models::cross_encoder::CrossEncoderModel}; @@ -542,24 +543,24 @@ fn generate_answer_snippet(body: &str, answer_offset: Range) -> String { if (answer_offset.end - best_start > SNIPPET_LENGTH) || (best_start >= best_end) { if answer_offset.end - answer_offset.start >= SNIPPET_LENGTH { - let end = floor_char_boundary(body, answer_offset.start + SNIPPET_LENGTH); + let end = stdx::floor_char_boundary(body, answer_offset.start + SNIPPET_LENGTH); return "".to_string() + &body[answer_offset.start..end] + ""; } let chars_either_side = (SNIPPET_LENGTH - (answer_offset.end - answer_offset.start)) / 2; - let start = ceil_char_boundary( + let start = stdx::ceil_char_boundary( body, answer_offset .start .checked_sub(chars_either_side) .unwrap_or_default(), ); - let mut end = ceil_char_boundary(body, answer_offset.end + chars_either_side); + let mut end = stdx::ceil_char_boundary(body, answer_offset.end + chars_either_side); if end >= body.len() { - end = floor_char_boundary(body, body.len()); + end = stdx::floor_char_boundary(body, body.len()); } body[start..answer_offset.start].to_string() @@ -574,7 +575,8 @@ fn generate_answer_snippet(body: &str, answer_offset: Range) -> String { + ""; let remaining_chars = SNIPPET_LENGTH - (res.len() - 7); - let end = ceil_char_boundary(body, (remaining_chars + answer_offset.end).min(best_end)); + let end = + stdx::ceil_char_boundary(body, (remaining_chars + answer_offset.end).min(best_end)); res += &body[answer_offset.end..end]; diff --git a/crates/core/src/simhash.rs b/crates/core/src/simhash.rs index 08b275b42..11609e476 100644 --- a/crates/core/src/simhash.rs +++ b/crates/core/src/simhash.rs @@ -18,8 +18,7 @@ use std::{ collections::{hash_map::DefaultHasher, HashMap}, hash::{Hash, Hasher}, }; - -use crate::tokenizer::Tokenizer; +use tokenizer::Tokenizer; pub type HashType = u64; diff --git a/crates/core/src/snippet.rs b/crates/core/src/snippet.rs index 6e80a0a3b..93067f312 100644 --- a/crates/core/src/snippet.rs +++ b/crates/core/src/snippet.rs @@ -15,11 +15,11 @@ // along with this program. If not, see . use std::ops::Range; +use tokenizer::{BigramTokenizer, Normal, Stemmed, Tokenizer, TrigramTokenizer}; use crate::config::SnippetConfig; use crate::query::Query; use crate::spell::sentence_ranges; -use crate::tokenizer::{BigramTokenizer, Normal, Stemmed, Tokenizer, TrigramTokenizer}; use crate::webpage::region::Region; use hashbrown::{HashMap, HashSet}; use utoipa::ToSchema; diff --git a/crates/core/src/spell/mod.rs b/crates/core/src/spell/mod.rs index 6c8008432..10db73e24 100644 --- a/crates/core/src/spell/mod.rs +++ b/crates/core/src/spell/mod.rs @@ -26,10 +26,10 @@ use serde::{Deserialize, Serialize}; use tracing::info; use crate::index::Index; +use crate::query; use crate::query::parser::Term; use crate::schema::TextField; use crate::searcher::SearchQuery; -use crate::{floor_char_boundary, query}; use self::dictionary::DictionaryBuilder; pub use self::dictionary::{Dictionary, DictionaryResult, EditStrategy, LogarithmicEdit}; @@ -91,7 +91,7 @@ pub fn sentence_ranges(text: &str) -> Vec> { .filter(|(_, c)| matches!(c, '.' | '\n' | '?' | '!')) { res.push(last_start..end + 1); - last_start = floor_char_boundary(text, end + 2); + last_start = stdx::floor_char_boundary(text, end + 2); } res diff --git a/crates/core/src/summarizer.rs b/crates/core/src/summarizer.rs index 3a4f5ad3a..6e6d84efb 100644 --- a/crates/core/src/summarizer.rs +++ b/crates/core/src/summarizer.rs @@ -27,7 +27,6 @@ use tch::{IValue, Kind, Tensor}; use tokenizers::{PaddingParams, TruncationParams}; use crate::{ - ceil_char_boundary, llm_utils::{self, ClonableTensor}, spell::word2vec::{Word2Vec, WordVec}, }; @@ -154,7 +153,7 @@ impl<'a> Iterator for OverlappingSents<'a> { self.text = ""; self.prev_end += end; } else { - let next_start = ceil_char_boundary(self.text, next_start + 1); + let next_start = stdx::ceil_char_boundary(self.text, next_start + 1); self.text = &self.text[next_start..]; self.prev_end += next_start; @@ -288,7 +287,7 @@ impl ExtractiveSummarizer { for (a, mut b) in best_passages.into_iter().tuple_windows() { if a.range.end > b.range.start { - b.range.start = ceil_char_boundary(text, a.range.end); + b.range.start = stdx::ceil_char_boundary(text, a.range.end); b.passage = &text[b.range.clone()]; } diff --git a/crates/core/src/webpage/mod.rs b/crates/core/src/webpage/mod.rs index 9487df6be..bb7129c37 100644 --- a/crates/core/src/webpage/mod.rs +++ b/crates/core/src/webpage/mod.rs @@ -14,11 +14,10 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . use crate::{ - ceil_char_boundary, enum_map::EnumSet, prehashed::hash, schema::{FastField, TextField}, - simhash, split_u128, tokenizer, + simhash, webgraph::NodeID, Error, Result, }; @@ -238,7 +237,7 @@ impl Webpage { match &self.node_id { Some(node_id) => { - let [node_id1, node_id2] = split_u128(node_id.bit_128()); + let [node_id1, node_id2] = stdx::split_u128(node_id.bit_128()); doc.add_u64( schema .get_field(Field::Fast(FastField::HostNodeID1).name()) @@ -955,7 +954,7 @@ impl Html { .unwrap_or_default() .find('.') .map(|index| { - &domain.text[..ceil_char_boundary(&domain.text, index).min(domain.text.len())] + &domain.text[..stdx::ceil_char_boundary(&domain.text, index).min(domain.text.len())] }) .unwrap_or_default() .to_string(); @@ -987,16 +986,16 @@ impl Html { }, }; - let site_hash = split_u128(hash(self.url().host_str().unwrap_or_default()).0); + let site_hash = stdx::split_u128(hash(self.url().host_str().unwrap_or_default()).0); let mut url_without_query = self.url().clone(); url_without_query.set_query(None); - let url_without_query_hash = split_u128(hash(url_without_query.as_str()).0); - let url_hash = split_u128(hash(self.url().as_str()).0); + let url_without_query_hash = stdx::split_u128(hash(url_without_query.as_str()).0); + let url_hash = stdx::split_u128(hash(self.url().as_str()).0); - let domain_hash = split_u128(hash(self.url().root_domain().unwrap_or_default()).0); - let title_hash = split_u128(hash(self.title().unwrap_or_default()).0); + let domain_hash = stdx::split_u128(hash(self.url().root_domain().unwrap_or_default()).0); + let title_hash = stdx::split_u128(hash(self.title().unwrap_or_default()).0); for field in &ALL_FIELDS { let tantivy_field = schema diff --git a/crates/core/src/webpage/schema_org/mod.rs b/crates/core/src/webpage/schema_org/mod.rs index 036a4aa76..288e81b59 100644 --- a/crates/core/src/webpage/schema_org/mod.rs +++ b/crates/core/src/webpage/schema_org/mod.rs @@ -18,8 +18,8 @@ use std::collections::HashMap; use kuchiki::NodeRef; use serde::{Deserialize, Serialize}; +use tokenizer::FlattenedJson; -use crate::tokenizer::FlattenedJson; use crate::Result; mod json_ld; @@ -229,7 +229,7 @@ pub(crate) fn flattened_json(schemas: Vec) -> Result { .into_iter() .map(|item| item.into_single_map()) .collect(); - FlattenedJson::new(&single_maps) + Ok(FlattenedJson::new(&single_maps)?) } #[cfg(test)] diff --git a/crates/stdx/Cargo.toml b/crates/stdx/Cargo.toml new file mode 100644 index 000000000..7b13d49d8 --- /dev/null +++ b/crates/stdx/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "stdx" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/crates/stdx/src/lib.rs b/crates/stdx/src/lib.rs new file mode 100644 index 000000000..3c424bc51 --- /dev/null +++ b/crates/stdx/src/lib.rs @@ -0,0 +1,39 @@ +pub fn ceil_char_boundary(str: &str, index: usize) -> usize { + let mut res = index; + + while !str.is_char_boundary(res) && res < str.len() { + res += 1; + } + + res +} + +pub fn floor_char_boundary(str: &str, index: usize) -> usize { + let mut res = index; + + while !str.is_char_boundary(res) && res > 0 { + res -= 1; + } + + res +} + +pub fn split_u128(num: u128) -> [u64; 2] { + [(num >> 64) as u64, num as u64] +} + +pub fn combine_u64s(nums: [u64; 2]) -> u128 { + ((nums[0] as u128) << 64) | (nums[1] as u128) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn split_combine_u128() { + for num in 0..10000_u128 { + assert_eq!(combine_u64s(split_u128(num)), num); + } + } +} diff --git a/lib/tokenizer/Cargo.toml b/lib/tokenizer/Cargo.toml new file mode 100644 index 000000000..2526ab23a --- /dev/null +++ b/lib/tokenizer/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "tokenizer" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +itertools.workspace = true +logos.workspace = true +serde.workspace = true +serde_json.workspace = true +stdx.workspace = true +tantivy.workspace = true +url.workspace = true +whatlang.workspace = true diff --git a/crates/core/src/tokenizer/add_space_last.rs b/lib/tokenizer/src/add_space_last.rs similarity index 100% rename from crates/core/src/tokenizer/add_space_last.rs rename to lib/tokenizer/src/add_space_last.rs diff --git a/crates/core/src/tokenizer/mod.rs b/lib/tokenizer/src/lib.rs similarity index 98% rename from crates/core/src/tokenizer/mod.rs rename to lib/tokenizer/src/lib.rs index ad31a6fd3..07ca632b5 100644 --- a/crates/core/src/tokenizer/mod.rs +++ b/lib/tokenizer/src/lib.rs @@ -23,8 +23,6 @@ use tantivy::tokenizer::{ use whatlang::Lang; -use crate::{ceil_char_boundary, floor_char_boundary}; - use self::{add_space_last::AddSpaceLast, split_preserve::StrSplitPreserve}; mod add_space_last; @@ -478,7 +476,7 @@ fn flatten(val: serde_json::Value) -> Vec { } impl FlattenedJson { - pub fn new(value: &T) -> crate::Result + pub fn new(value: &T) -> serde_json::Result where T: serde::Serialize, { @@ -569,9 +567,11 @@ impl<'a> tantivy::tokenizer::TokenStream for JsonFieldTokenStream<'a> { self.token.offset_from -= 1; self.token.offset_to += 1; - self.token.offset_from = floor_char_boundary(self.text, self.token.offset_from); + self.token.offset_from = + stdx::floor_char_boundary(self.text, self.token.offset_from); self.token.offset_to = - ceil_char_boundary(self.text, self.token.offset_to).min(self.text.len()); + stdx::ceil_char_boundary(self.text, self.token.offset_to) + .min(self.text.len()); } self.token diff --git a/crates/core/src/tokenizer/split_preserve.rs b/lib/tokenizer/src/split_preserve.rs similarity index 100% rename from crates/core/src/tokenizer/split_preserve.rs rename to lib/tokenizer/src/split_preserve.rs From d89da6cf9168a99e512795bd0d21019036999b1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20B=C3=B8ving?= Date: Wed, 18 Oct 2023 18:20:30 +0200 Subject: [PATCH 08/54] update compile benchmark --- justfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/justfile b/justfile index 6dc7ec72f..fa84dcb6b 100644 --- a/justfile +++ b/justfile @@ -50,9 +50,9 @@ export STRACT_CARGO_ARGS := env_var_or_default("STRACT_CARGO_ARGS", "") @bench-compile: #!/bin/bash BRANCH=$(git rev-parse --abbrev-ref HEAD) - hyperfine --show-output -w 2 -p 'touch core/src/lib.rs' \ - "git switch main && cargo build -p stract --bin stract" \ - "git switch ${BRANCH} && cargo build -p stract --bin stract" + hyperfine --show-output -w 2 \ + "git switch main && touch core/src/lib.rs && cargo build -p stract --bin stract" \ + "git switch ${BRANCH} && touch crates/core/src/lib.rs && cargo build -p stract --bin stract" @bench-compile-release: #!/bin/bash From c1b2e72b600aff6fda55ad886cd32b28e7aa3d31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20B=C3=B8ving?= Date: Wed, 18 Oct 2023 18:40:39 +0200 Subject: [PATCH 09/54] Move distributed into crate --- Cargo.lock | 15 +++++++++++++++ Cargo.toml | 1 + crates/core/Cargo.toml | 1 + crates/core/src/api/mod.rs | 8 ++++---- crates/core/src/api/webgraph.rs | 2 +- crates/core/src/config/mod.rs | 2 +- crates/core/src/crawler/router.rs | 6 ++---- crates/core/src/crawler/worker.rs | 2 +- crates/core/src/entrypoint/alice.rs | 8 ++++---- crates/core/src/entrypoint/search_server.rs | 8 ++++---- crates/core/src/entrypoint/webgraph_server.rs | 7 ++++--- crates/core/src/image_downloader.rs | 6 ++---- crates/core/src/lib.rs | 1 - crates/core/src/mapreduce/manager.rs | 2 +- crates/core/src/searcher/api.rs | 2 +- crates/core/src/searcher/distributed.rs | 12 ++++++------ crates/core/src/warc.rs | 2 +- crates/distributed/Cargo.toml | 16 ++++++++++++++++ .../distributed => distributed/src}/cluster.rs | 2 +- .../mod.rs => distributed/src/lib.rs} | 0 .../distributed => distributed/src}/member.rs | 9 ++++++++- .../src}/retry_strategy.rs | 0 22 files changed, 74 insertions(+), 38 deletions(-) create mode 100644 crates/distributed/Cargo.toml rename crates/{core/src/distributed => distributed/src}/cluster.rs (98%) rename crates/{core/src/distributed/mod.rs => distributed/src/lib.rs} (100%) rename crates/{core/src/distributed => distributed/src}/member.rs (86%) rename crates/{core/src/distributed => distributed/src}/retry_strategy.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index b1cd370d2..d424f8723 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1182,6 +1182,20 @@ dependencies = [ "winapi", ] +[[package]] +name = "distributed" +version = "0.1.0" +dependencies = [ + "anyhow", + "chitchat", + "serde", + "serde_json", + "tokio", + "tokio-stream", + "tracing", + "uuid", +] + [[package]] name = "dlv-list" version = "0.3.0" @@ -4261,6 +4275,7 @@ dependencies = [ "crossbeam-channel", "csv", "dashmap", + "distributed", "encoding_rs", "eventsource-stream", "fend-core", diff --git a/Cargo.toml b/Cargo.toml index bdb7eec4b..64c66e407 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,6 +31,7 @@ criterion = "0.5.1" crossbeam-channel = "0.5.6" csv = "1.1.6" dashmap = {version = "5.4.0", features = ["rayon"]} +distributed = { path = "crates/distributed" } encoding_rs = "0.8.31" eventsource-stream = "0.2.3" fend-core = "1.2.2" diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index d64ad4153..d5ed51033 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -41,6 +41,7 @@ clap = {workspace = true} crossbeam-channel = {workspace = true} csv = {workspace = true} dashmap = {workspace = true} +distributed.workspace = true encoding_rs = {workspace = true} eventsource-stream = {workspace = true} fend-core = {workspace = true} diff --git a/crates/core/src/api/mod.rs b/crates/core/src/api/mod.rs index a9ae4577d..b9052afae 100644 --- a/crates/core/src/api/mod.rs +++ b/crates/core/src/api/mod.rs @@ -18,6 +18,10 @@ //! All http requests are handled using axum. use axum::{body::Body, extract, middleware, Router}; +use distributed::{ + cluster::Cluster, + member::{Member, Service}, +}; use leaky_queue::LeakyQueue; use tokio::sync::Mutex; use tower_http::compression::CompressionLayer; @@ -26,10 +30,6 @@ use crate::{ autosuggest::Autosuggest, bangs::Bangs, config::ApiConfig, - distributed::{ - cluster::Cluster, - member::{Member, Service}, - }, improvement::{store_improvements_loop, ImprovementEvent}, ranking::models::lambdamart::LambdaMART, searcher::api::ApiSearcher, diff --git a/crates/core/src/api/webgraph.rs b/crates/core/src/api/webgraph.rs index 0ce0ea360..a1974325b 100644 --- a/crates/core/src/api/webgraph.rs +++ b/crates/core/src/api/webgraph.rs @@ -17,11 +17,11 @@ use std::{net::SocketAddr, sync::Arc, time::Duration}; use axum::{extract, response::IntoResponse, Json}; +use distributed::{cluster::Cluster, member::Service, retry_strategy::ExponentialBackoff}; use http::StatusCode; use utoipa::{IntoParams, ToSchema}; use crate::{ - distributed::{cluster::Cluster, member::Service, retry_strategy::ExponentialBackoff}, entrypoint::webgraph_server::GraphLevel, webgraph::{FullEdge, Node}, }; diff --git a/crates/core/src/config/mod.rs b/crates/core/src/config/mod.rs index 4beb5b63c..5ffa0b385 100644 --- a/crates/core/src/config/mod.rs +++ b/crates/core/src/config/mod.rs @@ -17,7 +17,7 @@ pub mod defaults; use super::Result; -use crate::searcher::ShardId; +use distributed::member::ShardId; use serde::{Deserialize, Serialize}; use std::fs::File; use std::io::{self, BufRead}; diff --git a/crates/core/src/crawler/router.rs b/crates/core/src/crawler/router.rs index 2c53eec9c..a6b4f81fb 100644 --- a/crates/core/src/crawler/router.rs +++ b/crates/core/src/crawler/router.rs @@ -1,12 +1,10 @@ use anyhow::Result; +use distributed::retry_strategy::ExponentialBackoff; use rand::Rng; use std::{net::SocketAddr, time::Duration}; use tokio::sync::Mutex; -use crate::{ - distributed::retry_strategy::ExponentialBackoff, - entrypoint::crawler::coordinator::{CoordinatorService, GetJob}, -}; +use crate::entrypoint::crawler::coordinator::{CoordinatorService, GetJob}; use super::Job; diff --git a/crates/core/src/crawler/worker.rs b/crates/core/src/crawler/worker.rs index a571b082f..0dae6929e 100644 --- a/crates/core/src/crawler/worker.rs +++ b/crates/core/src/crawler/worker.rs @@ -13,6 +13,7 @@ // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . +use distributed::retry_strategy::ExponentialBackoff; use encoding_rs::{Encoding, UTF_8}; use futures::{future::BoxFuture, FutureExt}; use hashbrown::{HashMap, HashSet}; @@ -33,7 +34,6 @@ use url::Url; use crate::{ config::CrawlerConfig, crawler::MAX_URL_LEN_BYTES, - distributed::retry_strategy::ExponentialBackoff, entrypoint::crawler::router::{NewJob, RouterService}, warc, webpage::Html, diff --git a/crates/core/src/entrypoint/alice.rs b/crates/core/src/entrypoint/alice.rs index b217bb197..02a100003 100644 --- a/crates/core/src/entrypoint/alice.rs +++ b/crates/core/src/entrypoint/alice.rs @@ -27,6 +27,10 @@ use axum::{ Router, }; use base64::Engine; +use distributed::{ + cluster::Cluster, + member::{Member, Service}, +}; use tokio::sync::Mutex; use tokio_stream::Stream; use tokio_stream::StreamExt as _; @@ -35,10 +39,6 @@ use tracing::info; use crate::{ alice::{Alice, EncodedEncryptedState, EncryptedState, BASE64_ENGINE}, config::AliceLocalConfig, - distributed::{ - cluster::Cluster, - member::{Member, Service}, - }, ttl_cache::TTLCache, }; diff --git a/crates/core/src/entrypoint/search_server.rs b/crates/core/src/entrypoint/search_server.rs index f266d7e8d..87456dd92 100644 --- a/crates/core/src/entrypoint/search_server.rs +++ b/crates/core/src/entrypoint/search_server.rs @@ -16,6 +16,10 @@ use std::{collections::HashMap, path::Path}; +use distributed::{ + cluster::Cluster, + member::{Member, Service}, +}; use serde::{Deserialize, Serialize}; use sonic::sonic_service; use tracing::info; @@ -23,10 +27,6 @@ use url::Url; use crate::{ config, - distributed::{ - cluster::Cluster, - member::{Member, Service}, - }, entity_index::EntityIndex, image_store::Image, index::Index, diff --git a/crates/core/src/entrypoint/webgraph_server.rs b/crates/core/src/entrypoint/webgraph_server.rs index 6ea08c73e..11804f145 100644 --- a/crates/core/src/entrypoint/webgraph_server.rs +++ b/crates/core/src/entrypoint/webgraph_server.rs @@ -17,6 +17,10 @@ use std::net::SocketAddr; use std::sync::Arc; +use distributed::{ + cluster::Cluster, + member::{Member, Service}, +}; use itertools::Itertools; use serde::Deserialize; use serde::Serialize; @@ -26,9 +30,6 @@ use url::Url; use utoipa::ToSchema; use crate::config; -use crate::distributed::cluster::Cluster; -use crate::distributed::member::Member; -use crate::distributed::member::Service; use crate::ranking::inbound_similarity::InboundSimilarity; use crate::searcher::DistributedSearcher; use crate::similar_sites::SimilarSitesFinder; diff --git a/crates/core/src/image_downloader.rs b/crates/core/src/image_downloader.rs index b187ecefe..dbcdbf0d9 100644 --- a/crates/core/src/image_downloader.rs +++ b/crates/core/src/image_downloader.rs @@ -16,13 +16,11 @@ use futures::StreamExt; use std::{collections::HashSet, hash::Hash, time::Duration}; +use distributed::retry_strategy::ExponentialBackoff; use serde::Serialize; use url::Url; -use crate::{ - distributed::retry_strategy::ExponentialBackoff, - image_store::{Image, ImageStore}, -}; +use crate::image_store::{Image, ImageStore}; #[derive(Clone, Debug)] pub struct ImageDownloadJob diff --git a/crates/core/src/lib.rs b/crates/core/src/lib.rs index d7fb285f0..9bdbe2f0a 100644 --- a/crates/core/src/lib.rs +++ b/crates/core/src/lib.rs @@ -41,7 +41,6 @@ mod collector; pub mod config; pub mod crawler; mod directory; -mod distributed; mod entity_index; mod enum_map; mod executor; diff --git a/crates/core/src/mapreduce/manager.rs b/crates/core/src/mapreduce/manager.rs index 2ebb33260..cd764994a 100644 --- a/crates/core/src/mapreduce/manager.rs +++ b/crates/core/src/mapreduce/manager.rs @@ -1,7 +1,7 @@ use super::{Error, MapReduceConnection, Result, Worker}; use super::{Map, Reduce}; -use crate::distributed::retry_strategy::ExponentialBackoff; use crate::mapreduce::Task; +use distributed::retry_strategy::ExponentialBackoff; use futures::StreamExt; use itertools::Itertools; use serde::de::DeserializeOwned; diff --git a/crates/core/src/searcher/api.rs b/crates/core/src/searcher/api.rs index 3c7dc9fee..66d005f92 100644 --- a/crates/core/src/searcher/api.rs +++ b/crates/core/src/searcher/api.rs @@ -20,6 +20,7 @@ use std::ops::Range; use std::sync::Arc; use std::time::Instant; +use ::distributed::cluster::Cluster; use itertools::{intersperse, Itertools}; use optics::Optic; use url::Url; @@ -39,7 +40,6 @@ use crate::widgets::{Widget, Widgets}; use crate::{ bangs::Bangs, collector::BucketCollector, - distributed::cluster::Cluster, query, ranking::{models::lambdamart::LambdaMART, pipeline::RankingPipeline}, Result, diff --git a/crates/core/src/searcher/distributed.rs b/crates/core/src/searcher/distributed.rs index 8d2746a07..df52f5932 100644 --- a/crates/core/src/searcher/distributed.rs +++ b/crates/core/src/searcher/distributed.rs @@ -15,7 +15,6 @@ // along with this program. If not, see . use crate::{ - distributed::{cluster::Cluster, member::Service, retry_strategy::ExponentialBackoff}, entrypoint::search_server::{self, SearchService}, image_store::Image, inverted_index::{self, RetrievedWebpage}, @@ -25,10 +24,14 @@ use crate::{ use std::{collections::HashMap, net::SocketAddr, sync::Arc, time::Duration}; +use distributed::{ + cluster::Cluster, + member::{Service, ShardId}, + retry_strategy::ExponentialBackoff, +}; use futures::stream::FuturesUnordered; use futures::StreamExt; use rand::seq::SliceRandom; -use serde::{Deserialize, Serialize}; use thiserror::Error; use url::Url; @@ -157,9 +160,6 @@ impl RemoteSearcher { } } -#[derive(Serialize, Deserialize, PartialEq, Eq, Hash, Clone, Debug)] -pub struct ShardId(u64); - pub struct Shard { id: ShardId, replicas: Vec, @@ -176,7 +176,7 @@ impl Shard { } Self { - id: ShardId(id), + id: ShardId::new(id), replicas: parsed_replicas, } } diff --git a/crates/core/src/warc.rs b/crates/core/src/warc.rs index 200429a03..6ba4f4892 100644 --- a/crates/core/src/warc.rs +++ b/crates/core/src/warc.rs @@ -14,8 +14,8 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -use crate::distributed::retry_strategy::ExponentialBackoff; use crate::{config::S3Config, config::WarcSource, Error, Result}; +use distributed::retry_strategy::ExponentialBackoff; use std::collections::BTreeMap; use std::fs::File; use std::io::{BufRead, BufReader, Cursor, Read, Seek, Write}; diff --git a/crates/distributed/Cargo.toml b/crates/distributed/Cargo.toml new file mode 100644 index 000000000..77246c7e5 --- /dev/null +++ b/crates/distributed/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "distributed" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +anyhow.workspace = true +chitchat.workspace = true +serde = { workspace = true, features = ["derive"] } +serde_json.workspace = true +tokio.workspace = true +tokio-stream = "0.1.14" +tracing.workspace = true +uuid.workspace = true diff --git a/crates/core/src/distributed/cluster.rs b/crates/distributed/src/cluster.rs similarity index 98% rename from crates/core/src/distributed/cluster.rs rename to crates/distributed/src/cluster.rs index c5df507a9..24ca9b72a 100644 --- a/crates/core/src/distributed/cluster.rs +++ b/crates/distributed/src/cluster.rs @@ -22,7 +22,7 @@ use tokio::sync::RwLock; use tokio_stream::StreamExt; use tracing::error; -use crate::distributed::member::{Member, Service}; +use crate::member::{Member, Service}; const CLUSTER_ID: &str = "stract-cluster"; const GOSSIP_INTERVAL: Duration = Duration::from_secs(1); diff --git a/crates/core/src/distributed/mod.rs b/crates/distributed/src/lib.rs similarity index 100% rename from crates/core/src/distributed/mod.rs rename to crates/distributed/src/lib.rs diff --git a/crates/core/src/distributed/member.rs b/crates/distributed/src/member.rs similarity index 86% rename from crates/core/src/distributed/member.rs rename to crates/distributed/src/member.rs index d38c75f83..1b86c8e2c 100644 --- a/crates/core/src/distributed/member.rs +++ b/crates/distributed/src/member.rs @@ -18,7 +18,14 @@ use std::net::SocketAddr; use serde::{Deserialize, Serialize}; -use crate::searcher::ShardId; +#[derive(Serialize, Deserialize, PartialEq, Eq, Hash, Clone, Debug)] +pub struct ShardId(u64); + +impl ShardId { + pub fn new(id: u64) -> ShardId { + ShardId(id) + } +} #[derive(Serialize, Deserialize, PartialEq, Eq, Hash, Clone, Debug)] pub enum Service { diff --git a/crates/core/src/distributed/retry_strategy.rs b/crates/distributed/src/retry_strategy.rs similarity index 100% rename from crates/core/src/distributed/retry_strategy.rs rename to crates/distributed/src/retry_strategy.rs From 5e41f0af7f0039d21a8a426bf0934c71471159cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20B=C3=B8ving?= Date: Wed, 18 Oct 2023 18:49:22 +0200 Subject: [PATCH 10/54] Move kv into crate --- Cargo.lock | 10 ++++++++++ Cargo.toml | 1 + crates/core/Cargo.toml | 1 + crates/core/src/crawler/planner.rs | 2 +- crates/core/src/entity_index/mod.rs | 2 +- crates/core/src/entrypoint/centrality.rs | 2 +- crates/core/src/entrypoint/crawler.rs | 2 +- crates/core/src/entrypoint/indexer.rs | 4 ++-- crates/core/src/feed/mod.rs | 2 +- crates/core/src/feed/scheduler.rs | 2 +- crates/core/src/image_store.rs | 2 +- crates/core/src/lib.rs | 1 - crates/core/src/subdomain_count.rs | 2 +- .../core/src/webgraph/centrality/derived_harmonic.rs | 2 +- crates/core/src/webgraph/centrality/mod.rs | 2 +- crates/kv/Cargo.toml | 11 +++++++++++ crates/{core/src/kv/mod.rs => kv/src/lib.rs} | 0 crates/{core/src/kv => kv/src}/rocksdb_store.rs | 2 +- justfile | 7 +++++++ 19 files changed, 43 insertions(+), 14 deletions(-) create mode 100644 crates/kv/Cargo.toml rename crates/{core/src/kv/mod.rs => kv/src/lib.rs} (100%) rename crates/{core/src/kv => kv/src}/rocksdb_store.rs (99%) diff --git a/Cargo.lock b/Cargo.lock index d424f8723..78dc67844 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2100,6 +2100,15 @@ dependencies = [ "thiserror", ] +[[package]] +name = "kv" +version = "0.1.0" +dependencies = [ + "bincode", + "rocksdb", + "serde", +] + [[package]] name = "lalrpop" version = "0.20.0" @@ -4291,6 +4300,7 @@ dependencies = [ "intmap", "itertools 0.11.0", "kuchiki", + "kv", "lalrpop", "lalrpop-util", "leaky_queue", diff --git a/Cargo.toml b/Cargo.toml index 64c66e407..ed34450ce 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -47,6 +47,7 @@ insta = "1.31" intmap = { path = "lib/intmap" } itertools = "0.11.0" kuchiki = { path = "./lib/kuchiki" } +kv = { path = "./crates/kv" } lalrpop = {version = "0.20.0", features = ["lexer"]} lalrpop-util = {version = "0.20.0", features = ["lexer"]} leaky_queue = { path = "./lib/leaky_queue" } diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index d5ed51033..2b03ad9f1 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -56,6 +56,7 @@ indicatif = {workspace = true} intmap.workspace = true itertools = {workspace = true} kuchiki = {workspace = true} +kv.workspace = true lalrpop-util = {workspace = true} leaky_queue.workspace = true libc = {workspace = true} diff --git a/crates/core/src/crawler/planner.rs b/crates/core/src/crawler/planner.rs index 5feff7861..52f1b3ecf 100644 --- a/crates/core/src/crawler/planner.rs +++ b/crates/core/src/crawler/planner.rs @@ -14,6 +14,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . use anyhow::{anyhow, Result}; +use kv::{rocksdb_store::RocksDbStore, Kv}; use rayon::prelude::*; use std::collections::HashMap; use std::{ @@ -27,7 +28,6 @@ use crate::webgraph::centrality::{top_hosts, TopHosts}; use crate::{ config::CrawlPlannerConfig, crawler::{file_queue::FileQueueWriter, Job}, - kv::{rocksdb_store::RocksDbStore, Kv}, webgraph::{NodeID, Webgraph}, }; diff --git a/crates/core/src/entity_index/mod.rs b/crates/core/src/entity_index/mod.rs index 7c16b4f52..10fabfa28 100644 --- a/crates/core/src/entity_index/mod.rs +++ b/crates/core/src/entity_index/mod.rs @@ -23,6 +23,7 @@ use std::{ }; use base64::{prelude::BASE64_STANDARD as BASE64_ENGINE, Engine}; +use kv::{rocksdb_store::RocksDbStore, Kv}; use serde::{Deserialize, Serialize}; use tantivy::{ collector::TopDocs, @@ -38,7 +39,6 @@ use url::Url; use crate::{ image_downloader::{ImageDownloadJob, ImageDownloader}, image_store::{EntityImageStore, Image, ImageStore}, - kv::{rocksdb_store::RocksDbStore, Kv}, Result, }; diff --git a/crates/core/src/entrypoint/centrality.rs b/crates/core/src/entrypoint/centrality.rs index 3e6279bbc..6423e3985 100644 --- a/crates/core/src/entrypoint/centrality.rs +++ b/crates/core/src/entrypoint/centrality.rs @@ -15,10 +15,10 @@ // along with this program. If not, see . use anyhow::Result; +use kv::{rocksdb_store::RocksDbStore, Kv}; use std::{cmp::Reverse, collections::BinaryHeap, fs::File, path::Path}; use crate::{ - kv::{rocksdb_store::RocksDbStore, Kv}, ranking::inbound_similarity::InboundSimilarity, webgraph::{ centrality::{derived_harmonic::DerivedCentrality, harmonic::HarmonicCentrality}, diff --git a/crates/core/src/entrypoint/crawler.rs b/crates/core/src/entrypoint/crawler.rs index adbb21d4f..387a52709 100644 --- a/crates/core/src/entrypoint/crawler.rs +++ b/crates/core/src/entrypoint/crawler.rs @@ -16,13 +16,13 @@ use std::{net::SocketAddr, sync::Arc}; +use kv::rocksdb_store::RocksDbStore; use serde::{Deserialize, Serialize}; use sonic::{service::Message, sonic_service}; use crate::{ config, crawler::{self, planner::make_crawl_plan, CrawlCoordinator, Crawler}, - kv::rocksdb_store::RocksDbStore, webgraph::WebgraphBuilder, Result, }; diff --git a/crates/core/src/entrypoint/indexer.rs b/crates/core/src/entrypoint/indexer.rs index feb7b2241..0cef0690f 100644 --- a/crates/core/src/entrypoint/indexer.rs +++ b/crates/core/src/entrypoint/indexer.rs @@ -26,14 +26,14 @@ use tracing::{debug, info, trace, warn}; use crate::config; use crate::entrypoint::download_all_warc_files; use crate::index::{FrozenIndex, Index}; -use crate::kv::rocksdb_store::RocksDbStore; -use crate::kv::Kv; use crate::mapreduce::{Map, Reduce, Worker}; use crate::ranking::SignalAggregator; use crate::warc::PayloadType; use crate::webgraph::{Node, NodeID, Webgraph, WebgraphBuilder}; use crate::webpage::{safety_classifier, Html, Webpage}; use crate::{human_website_annotations, Result}; +use kv::rocksdb_store::RocksDbStore; +use kv::Kv; pub struct Indexer {} diff --git a/crates/core/src/feed/mod.rs b/crates/core/src/feed/mod.rs index e7e69c28f..87d8502f3 100644 --- a/crates/core/src/feed/mod.rs +++ b/crates/core/src/feed/mod.rs @@ -16,13 +16,13 @@ use std::path::Path; -use crate::tokenizer::{SiteOperatorUrlTokenizer, Tokenizer}; use anyhow::Result; use tantivy::{ query::{PhraseQuery, TermQuery}, schema::{IndexRecordOption, TextFieldIndexing, TextOptions, Value}, tokenizer::Tokenizer as TantivyTokenizer, }; +use tokenizer::{SiteOperatorUrlTokenizer, Tokenizer}; use url::Url; pub mod scheduler; diff --git a/crates/core/src/feed/scheduler.rs b/crates/core/src/feed/scheduler.rs index d6fdf5165..e09de31d6 100644 --- a/crates/core/src/feed/scheduler.rs +++ b/crates/core/src/feed/scheduler.rs @@ -15,10 +15,10 @@ // along with this program. If not, see . use hashbrown::{HashMap, HashSet}; +use kv::rocksdb_store::RocksDbStore; use url::Url; use crate::{ - kv::rocksdb_store::RocksDbStore, webgraph::{ centrality::{top_hosts, TopHosts}, NodeID, Webgraph, diff --git a/crates/core/src/image_store.rs b/crates/core/src/image_store.rs index f36e273bf..59ccf4ccf 100644 --- a/crates/core/src/image_store.rs +++ b/crates/core/src/image_store.rs @@ -14,10 +14,10 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -use crate::kv::{rocksdb_store::RocksDbStore, Kv}; use crate::Result; use image::imageops::FilterType; use image::{DynamicImage, ImageOutputFormat}; +use kv::{rocksdb_store::RocksDbStore, Kv}; use serde::{de, ser::SerializeStruct, Serialize}; use std::io::{Cursor, Read, Seek}; use std::path::Path; diff --git a/crates/core/src/lib.rs b/crates/core/src/lib.rs index 9bdbe2f0a..1e823765e 100644 --- a/crates/core/src/lib.rs +++ b/crates/core/src/lib.rs @@ -53,7 +53,6 @@ mod image_store; mod improvement; pub mod index; mod kahan_sum; -mod kv; #[cfg(feature = "libtorch")] mod llm_utils; mod metrics; diff --git a/crates/core/src/subdomain_count.rs b/crates/core/src/subdomain_count.rs index 5ab10e53c..d91bb8f27 100644 --- a/crates/core/src/subdomain_count.rs +++ b/crates/core/src/subdomain_count.rs @@ -15,10 +15,10 @@ // along with this program. If not, see . use crate::{ - kv::{rocksdb_store::RocksDbStore, Kv}, prehashed::{hash, Prehashed}, webpage::url_ext::UrlExt, }; +use kv::{rocksdb_store::RocksDbStore, Kv}; use std::{collections::HashSet, path::Path}; use url::Url; diff --git a/crates/core/src/webgraph/centrality/derived_harmonic.rs b/crates/core/src/webgraph/centrality/derived_harmonic.rs index 74d8db5d1..b74b1a0df 100644 --- a/crates/core/src/webgraph/centrality/derived_harmonic.rs +++ b/crates/core/src/webgraph/centrality/derived_harmonic.rs @@ -19,12 +19,12 @@ //! derive a centrality measure for the page graph. use anyhow::Result; +use kv::{rocksdb_store::RocksDbStore, Kv}; use rayon::prelude::*; use std::{collections::BTreeMap, path::Path, sync::Mutex}; use crate::{ bloom::BloomFilter, - kv::{rocksdb_store::RocksDbStore, Kv}, webgraph::{NodeID, Webgraph}, }; diff --git a/crates/core/src/webgraph/centrality/mod.rs b/crates/core/src/webgraph/centrality/mod.rs index 68eab2d09..da8c48467 100644 --- a/crates/core/src/webgraph/centrality/mod.rs +++ b/crates/core/src/webgraph/centrality/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -use crate::kv::{rocksdb_store::RocksDbStore, Kv}; +use kv::{rocksdb_store::RocksDbStore, Kv}; use super::NodeID; diff --git a/crates/kv/Cargo.toml b/crates/kv/Cargo.toml new file mode 100644 index 000000000..96a85d510 --- /dev/null +++ b/crates/kv/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "kv" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +bincode.workspace = true +rocksdb.workspace = true +serde.workspace = true diff --git a/crates/core/src/kv/mod.rs b/crates/kv/src/lib.rs similarity index 100% rename from crates/core/src/kv/mod.rs rename to crates/kv/src/lib.rs diff --git a/crates/core/src/kv/rocksdb_store.rs b/crates/kv/src/rocksdb_store.rs similarity index 99% rename from crates/core/src/kv/rocksdb_store.rs rename to crates/kv/src/rocksdb_store.rs index a825799ca..f530a9ae1 100644 --- a/crates/core/src/kv/rocksdb_store.rs +++ b/crates/kv/src/rocksdb_store.rs @@ -22,7 +22,7 @@ use rocksdb::{ }; use serde::{de::DeserializeOwned, Serialize}; -use crate::kv::Kv; +use crate::Kv; pub struct RocksDbStore where diff --git a/justfile b/justfile index fa84dcb6b..81e2ae47b 100644 --- a/justfile +++ b/justfile @@ -61,7 +61,14 @@ export STRACT_CARGO_ARGS := env_var_or_default("STRACT_CARGO_ARGS", "") "git switch main && cargo build -p stract --bin stract --release" \ "git switch ${BRANCH} && cargo build -p stract --bin stract --release" +@crateify path: + cargo new crates/{{file_stem(path)}} --lib + mv {{path}} crates/{{file_stem(path)}}/src/lib.rs + echo {{file_stem(path)}} = { path = '"./crates/{{file_stem(path)}}"' } + echo "cargo add -p stract {{file_stem(path)}}" + @librarify path: cargo new lib/{{file_stem(path)}} --lib mv {{path}} lib/{{file_stem(path)}}/src/lib.rs + echo {{file_stem(path)}} = { path = '"./lib/{{file_stem(path)}}"' } echo "cargo add -p stract {{file_stem(path)}}" From 84ff0793a25cba3f7d9647974fcf5cafd0ae0390 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20B=C3=B8ving?= Date: Wed, 18 Oct 2023 19:04:33 +0200 Subject: [PATCH 11/54] Move image_downloader and image_store into imager crate --- Cargo.lock | 19 +++++++++++ Cargo.toml | 1 + crates/core/Cargo.toml | 1 + crates/core/src/crawler/crawl_db.rs | 6 ++-- crates/core/src/entity_index/mod.rs | 12 +++---- crates/core/src/entrypoint/search_server.rs | 2 +- crates/core/src/index.rs | 2 +- crates/core/src/inverted_index.rs | 2 +- crates/core/src/lib.rs | 34 +------------------ crates/core/src/query/optic.rs | 3 +- crates/core/src/ranking/inbound_similarity.rs | 5 ++- crates/core/src/ranking/optics.rs | 3 +- crates/core/src/searcher/api.rs | 2 +- crates/core/src/searcher/distributed.rs | 2 +- crates/core/src/searcher/local.rs | 2 +- .../src/webgraph/centrality/betweenness.rs | 2 +- .../core/src/webgraph/centrality/harmonic.rs | 6 ++-- crates/core/src/webgraph/mod.rs | 8 ++--- crates/core/src/webgraph/segment.rs | 2 +- crates/core/src/webgraph/store.rs | 4 +-- crates/core/src/webpage/region.rs | 2 +- crates/imager/Cargo.toml | 20 +++++++++++ .../{core => imager}/src/image_downloader.rs | 0 crates/{core => imager}/src/image_store.rs | 30 +++++++++++----- crates/imager/src/lib.rs | 2 ++ crates/stdx/src/lib.rs | 29 ++++++++++++++++ 26 files changed, 125 insertions(+), 76 deletions(-) create mode 100644 crates/imager/Cargo.toml rename crates/{core => imager}/src/image_downloader.rs (100%) rename crates/{core => imager}/src/image_store.rs (90%) create mode 100644 crates/imager/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 78dc67844..19e6aeae0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1895,6 +1895,24 @@ dependencies = [ "tiff", ] +[[package]] +name = "imager" +version = "0.1.0" +dependencies = [ + "bincode", + "distributed", + "futures", + "image", + "kv", + "reqwest", + "serde", + "stdx", + "thiserror", + "tokio", + "tracing", + "url", +] + [[package]] name = "indexmap" version = "1.9.3" @@ -4295,6 +4313,7 @@ dependencies = [ "hashbrown 0.14.1", "http", "image", + "imager", "indicatif 0.17.7", "insta", "intmap", diff --git a/Cargo.toml b/Cargo.toml index ed34450ce..a3c002608 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,6 +42,7 @@ half = {version = "2.2.1", features = ["serde"]} hashbrown = {version = "0.14.0", features = ["serde", "rkyv"]} http = "0.2.8" image = "0.24.3" +imager = { path = "./crates/imager" } indicatif = {version = "0.17.7", features = ["rayon"]} insta = "1.31" intmap = { path = "lib/intmap" } diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index 2b03ad9f1..6f032b774 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -52,6 +52,7 @@ half = {workspace = true} hashbrown = {workspace = true} http = {workspace = true} image = {workspace = true} +imager.workspace = true indicatif = {workspace = true} intmap.workspace = true itertools = {workspace = true} diff --git a/crates/core/src/crawler/crawl_db.rs b/crates/core/src/crawler/crawl_db.rs index 69778a702..bd9441dbc 100644 --- a/crates/core/src/crawler/crawl_db.rs +++ b/crates/core/src/crawler/crawl_db.rs @@ -660,8 +660,6 @@ impl CrawlDb { #[cfg(test)] mod tests { - use crate::gen_temp_path; - use super::*; fn insert_seed_urls(urls: &[Url], db: &mut CrawlDb) { @@ -705,7 +703,7 @@ mod tests { #[test] fn simple_politeness() { - let mut db = CrawlDb::open(gen_temp_path()).unwrap(); + let mut db = CrawlDb::open(stdx::gen_temp_path()).unwrap(); let urls = vec![Url::parse("https://example.com").unwrap()]; insert_seed_urls(&urls, &mut db); @@ -727,7 +725,7 @@ mod tests { #[test] fn get_all_urls() { - let mut db = CrawlDb::open(gen_temp_path()).unwrap(); + let mut db = CrawlDb::open(stdx::gen_temp_path()).unwrap(); let urls = vec![ Url::parse("https://a.com").unwrap(), diff --git a/crates/core/src/entity_index/mod.rs b/crates/core/src/entity_index/mod.rs index 10fabfa28..47e126eb3 100644 --- a/crates/core/src/entity_index/mod.rs +++ b/crates/core/src/entity_index/mod.rs @@ -23,6 +23,10 @@ use std::{ }; use base64::{prelude::BASE64_STANDARD as BASE64_ENGINE, Engine}; +use imager::{ + image_downloader::{ImageDownloadJob, ImageDownloader}, + image_store::{EntityImageStore, Image, ImageStore}, +}; use kv::{rocksdb_store::RocksDbStore, Kv}; use serde::{Deserialize, Serialize}; use tantivy::{ @@ -36,11 +40,7 @@ use tokenizer::Normal; use tracing::info; use url::Url; -use crate::{ - image_downloader::{ImageDownloadJob, ImageDownloader}, - image_store::{EntityImageStore, Image, ImageStore}, - Result, -}; +use crate::Result; use self::entity::{Entity, Link, Span}; pub(crate) mod entity; @@ -486,7 +486,7 @@ mod tests { #[test] fn stopwords_title_ignored() { - let mut index = EntityIndex::open(crate::gen_temp_path()).unwrap(); + let mut index = EntityIndex::open(stdx::gen_temp_path()).unwrap(); index.insert(Entity { title: "the ashes".to_string(), diff --git a/crates/core/src/entrypoint/search_server.rs b/crates/core/src/entrypoint/search_server.rs index 87456dd92..311cc5d00 100644 --- a/crates/core/src/entrypoint/search_server.rs +++ b/crates/core/src/entrypoint/search_server.rs @@ -20,6 +20,7 @@ use distributed::{ cluster::Cluster, member::{Member, Service}, }; +use imager::image_store::Image; use serde::{Deserialize, Serialize}; use sonic::sonic_service; use tracing::info; @@ -28,7 +29,6 @@ use url::Url; use crate::{ config, entity_index::EntityIndex, - image_store::Image, index::Index, inverted_index::{self, RetrievedWebpage}, ranking::{ diff --git a/crates/core/src/index.rs b/crates/core/src/index.rs index 8da18312e..ca32d25ae 100644 --- a/crates/core/src/index.rs +++ b/crates/core/src/index.rs @@ -79,7 +79,7 @@ impl Index { #[cfg(test)] pub fn temporary() -> Result { - let path = crate::gen_temp_path(); + let path = stdx::gen_temp_path(); Self::open(path) } diff --git a/crates/core/src/inverted_index.rs b/crates/core/src/inverted_index.rs index 4cbd6a9d5..e1cb16fa7 100644 --- a/crates/core/src/inverted_index.rs +++ b/crates/core/src/inverted_index.rs @@ -198,7 +198,7 @@ impl InvertedIndex { #[cfg(test)] pub fn temporary() -> Result { - let path = crate::gen_temp_path(); + let path = stdx::gen_temp_path(); Self::open(path) } diff --git a/crates/core/src/lib.rs b/crates/core/src/lib.rs index 1e823765e..78f4d3bc1 100644 --- a/crates/core/src/lib.rs +++ b/crates/core/src/lib.rs @@ -23,9 +23,6 @@ #![allow(clippy::cast_precision_loss)] #![allow(clippy::missing_errors_doc)] -use std::path::PathBuf; -use thiserror::Error; - pub mod entrypoint; mod inverted_index; @@ -48,8 +45,6 @@ mod fastfield_reader; pub mod feed; mod human_website_annotations; pub mod hyperloglog; -mod image_downloader; -mod image_store; mod improvement; pub mod index; mod kahan_sum; @@ -80,7 +75,7 @@ pub mod webgraph; pub mod webpage; mod widgets; -#[derive(Error, Debug)] +#[derive(thiserror::Error, Debug)] pub enum Error { #[error("Failed to parse WARC file")] WarcParse(&'static str), @@ -115,33 +110,6 @@ pub enum Error { pub(crate) type Result = std::result::Result; -// taken from https://docs.rs/sled/0.34.7/src/sled/config.rs.html#445 -pub fn gen_temp_path() -> PathBuf { - use std::sync::atomic::{AtomicUsize, Ordering}; - use std::time::SystemTime; - - static SALT_COUNTER: AtomicUsize = AtomicUsize::new(0); - - let seed = SALT_COUNTER.fetch_add(1, Ordering::SeqCst) as u128; - - let now = SystemTime::now() - .duration_since(SystemTime::UNIX_EPOCH) - .unwrap() - .as_nanos() - << 48; - - let pid = u128::from(std::process::id()); - - let salt = (pid << 16) + now + seed; - - if cfg!(target_os = "linux") { - // use shared memory for temporary linux files - format!("/dev/shm/pagecache.tmp.{salt}").into() - } else { - std::env::temp_dir().join(format!("pagecache.tmp.{salt}")) - } -} - #[cfg(test)] fn rand_words(num_words: usize) -> String { use rand::{distributions::Alphanumeric, Rng}; diff --git a/crates/core/src/query/optic.rs b/crates/core/src/query/optic.rs index 4433ebaea..c6a6eec99 100644 --- a/crates/core/src/query/optic.rs +++ b/crates/core/src/query/optic.rs @@ -236,7 +236,6 @@ mod tests { use optics::{Optic, SiteRankings}; use crate::{ - gen_temp_path, index::Index, ranking::inbound_similarity::InboundSimilarity, searcher::{LocalSearcher, SearchQuery}, @@ -623,7 +622,7 @@ mod tests { let mut index = Index::temporary().expect("Unable to open index"); let mut writer = WebgraphWriter::new( - gen_temp_path(), + stdx::gen_temp_path(), crate::executor::Executor::single_thread(), crate::webgraph::Compression::default(), ); diff --git a/crates/core/src/ranking/inbound_similarity.rs b/crates/core/src/ranking/inbound_similarity.rs index 16f7b7bdb..913e08084 100644 --- a/crates/core/src/ranking/inbound_similarity.rs +++ b/crates/core/src/ranking/inbound_similarity.rs @@ -217,7 +217,6 @@ mod tests { use optics::SiteRankings; use crate::{ - gen_temp_path, index::Index, rand_words, searcher::{LocalSearcher, SearchQuery}, @@ -230,7 +229,7 @@ mod tests { #[test] fn it_favors_liked_sites() { let mut wrt = WebgraphWriter::new( - gen_temp_path(), + stdx::gen_temp_path(), crate::executor::Executor::single_thread(), crate::webgraph::Compression::default(), ); @@ -259,7 +258,7 @@ mod tests { #[test] fn it_ranks_search_results() { let mut wrt = WebgraphWriter::new( - crate::gen_temp_path(), + stdx::gen_temp_path(), crate::executor::Executor::single_thread(), crate::webgraph::Compression::default(), ); diff --git a/crates/core/src/ranking/optics.rs b/crates/core/src/ranking/optics.rs index e9f18f76b..5c2da76e3 100644 --- a/crates/core/src/ranking/optics.rs +++ b/crates/core/src/ranking/optics.rs @@ -19,7 +19,6 @@ mod tests { use optics::SiteRankings; use crate::{ - gen_temp_path, index::Index, ranking::inbound_similarity::InboundSimilarity, searcher::{LocalSearcher, SearchQuery}, @@ -33,7 +32,7 @@ mod tests { let mut index = Index::temporary().expect("Unable to open index"); let mut wrt = WebgraphWriter::new( - gen_temp_path(), + stdx::gen_temp_path(), crate::executor::Executor::single_thread(), crate::webgraph::Compression::default(), ); diff --git a/crates/core/src/searcher/api.rs b/crates/core/src/searcher/api.rs index 66d005f92..cc47c1c6e 100644 --- a/crates/core/src/searcher/api.rs +++ b/crates/core/src/searcher/api.rs @@ -21,13 +21,13 @@ use std::sync::Arc; use std::time::Instant; use ::distributed::cluster::Cluster; +use imager::image_store::Image; use itertools::{intersperse, Itertools}; use optics::Optic; use url::Url; use crate::bangs::{Bang, BangHit}; use crate::config::{ApiConfig, ApiThresholds, CollectorConfig}; -use crate::image_store::Image; use crate::inverted_index::RetrievedWebpage; #[cfg(not(feature = "libtorch"))] use crate::ranking::models::cross_encoder::DummyCrossEncoder; diff --git a/crates/core/src/searcher/distributed.rs b/crates/core/src/searcher/distributed.rs index df52f5932..0417609c0 100644 --- a/crates/core/src/searcher/distributed.rs +++ b/crates/core/src/searcher/distributed.rs @@ -16,7 +16,6 @@ use crate::{ entrypoint::search_server::{self, SearchService}, - image_store::Image, inverted_index::{self, RetrievedWebpage}, ranking::pipeline::{AsRankingWebsite, RankingWebsite}, Result, @@ -31,6 +30,7 @@ use distributed::{ }; use futures::stream::FuturesUnordered; use futures::StreamExt; +use imager::image_store::Image; use rand::seq::SliceRandom; use thiserror::Error; use url::Url; diff --git a/crates/core/src/searcher/local.rs b/crates/core/src/searcher/local.rs index 481d603fb..1f254c6e8 100644 --- a/crates/core/src/searcher/local.rs +++ b/crates/core/src/searcher/local.rs @@ -17,13 +17,13 @@ use std::collections::HashMap; use std::sync::Arc; +use imager::image_store::Image; use tantivy::schema::Value; use tantivy::TantivyDocument; use url::Url; use crate::config::{CollectorConfig, SnippetConfig}; use crate::entity_index::{EntityIndex, EntityMatch}; -use crate::image_store::Image; use crate::index::Index; use crate::inverted_index::RetrievedWebpage; use crate::query::Query; diff --git a/crates/core/src/webgraph/centrality/betweenness.rs b/crates/core/src/webgraph/centrality/betweenness.rs index 3991414ef..36bcd0998 100644 --- a/crates/core/src/webgraph/centrality/betweenness.rs +++ b/crates/core/src/webgraph/centrality/betweenness.rs @@ -168,7 +168,7 @@ mod tests { fn create_path_graph(n: usize) -> Webgraph { let mut writer = WebgraphWriter::new( - crate::gen_temp_path(), + stdx::gen_temp_path(), crate::executor::Executor::single_thread(), crate::webgraph::Compression::default(), ); diff --git a/crates/core/src/webgraph/centrality/harmonic.rs b/crates/core/src/webgraph/centrality/harmonic.rs index 3b1d55f6f..c5a0fc2b9 100644 --- a/crates/core/src/webgraph/centrality/harmonic.rs +++ b/crates/core/src/webgraph/centrality/harmonic.rs @@ -216,7 +216,7 @@ mod tests { fn test_graph() -> Webgraph { let mut writer = WebgraphWriter::new( - crate::gen_temp_path(), + stdx::gen_temp_path(), crate::executor::Executor::single_thread(), crate::webgraph::Compression::default(), ); @@ -231,7 +231,7 @@ mod tests { #[test] fn host_harmonic_centrality() { let mut writer = WebgraphWriter::new( - crate::gen_temp_path(), + stdx::gen_temp_path(), crate::executor::Executor::single_thread(), crate::webgraph::Compression::default(), ); @@ -339,7 +339,7 @@ mod tests { let centrality = HarmonicCentrality::calculate(&graph); let mut other = WebgraphWriter::new( - crate::gen_temp_path(), + stdx::gen_temp_path(), crate::executor::Executor::single_thread(), crate::webgraph::Compression::default(), ); diff --git a/crates/core/src/webgraph/mod.rs b/crates/core/src/webgraph/mod.rs index 4d40975ad..cd851c711 100644 --- a/crates/core/src/webgraph/mod.rs +++ b/crates/core/src/webgraph/mod.rs @@ -836,7 +836,7 @@ mod test { // D let mut graph = WebgraphWriter::new( - crate::gen_temp_path(), + stdx::gen_temp_path(), Executor::single_thread(), Compression::default(), ); @@ -898,7 +898,7 @@ mod test { (Node::from("G"), Node::from("H"), String::new()), ] { let mut wrt = WebgraphWriter::new( - crate::gen_temp_path(), + stdx::gen_temp_path(), Executor::single_thread(), Compression::default(), ); @@ -927,7 +927,7 @@ mod test { (Node::from("C"), Node::from("A"), String::new()), ] { let mut wrt = WebgraphWriter::new( - crate::gen_temp_path(), + stdx::gen_temp_path(), Executor::single_thread(), Compression::default(), ); @@ -969,7 +969,7 @@ mod test { #[test] fn cap_label_length() { let mut writer = WebgraphWriter::new( - crate::gen_temp_path(), + stdx::gen_temp_path(), Executor::single_thread(), Compression::default(), ); diff --git a/crates/core/src/webgraph/segment.rs b/crates/core/src/webgraph/segment.rs index 715d8671d..093457c77 100644 --- a/crates/core/src/webgraph/segment.rs +++ b/crates/core/src/webgraph/segment.rs @@ -165,7 +165,7 @@ mod test { // 1─────►2◄┘ let mut writer = SegmentWriter::open( - crate::gen_temp_path(), + stdx::gen_temp_path(), "test".to_string(), Compression::default(), ); diff --git a/crates/core/src/webgraph/store.rs b/crates/core/src/webgraph/store.rs index bd9711ca1..32a97dfe7 100644 --- a/crates/core/src/webgraph/store.rs +++ b/crates/core/src/webgraph/store.rs @@ -601,7 +601,7 @@ mod tests { #[test] fn test_insert() { let kv: EdgeStoreWriter = EdgeStoreWriter::open( - crate::gen_temp_path().join("test-segment"), + stdx::gen_temp_path().join("test-segment"), Compression::default(), false, ); @@ -635,7 +635,7 @@ mod tests { #[test] fn test_reversed() { let kv: EdgeStoreWriter = EdgeStoreWriter::open( - crate::gen_temp_path().join("test-segment"), + stdx::gen_temp_path().join("test-segment"), Compression::default(), true, ); diff --git a/crates/core/src/webpage/region.rs b/crates/core/src/webpage/region.rs index ef4c10fa2..4fa4caaa8 100644 --- a/crates/core/src/webpage/region.rs +++ b/crates/core/src/webpage/region.rs @@ -215,7 +215,7 @@ impl RegionCount { #[cfg(test)] mod tests { - use crate::gen_temp_path; + use stdx::gen_temp_path; use super::*; diff --git a/crates/imager/Cargo.toml b/crates/imager/Cargo.toml new file mode 100644 index 000000000..11d5298d3 --- /dev/null +++ b/crates/imager/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "imager" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +bincode.workspace = true +distributed.workspace = true +futures.workspace = true +image.workspace = true +kv.workspace = true +reqwest.workspace = true +serde = { workspace = true, features = ["derive"] } +stdx.workspace = true +thiserror.workspace = true +tokio.workspace = true +tracing.workspace = true +url.workspace = true diff --git a/crates/core/src/image_downloader.rs b/crates/imager/src/image_downloader.rs similarity index 100% rename from crates/core/src/image_downloader.rs rename to crates/imager/src/image_downloader.rs diff --git a/crates/core/src/image_store.rs b/crates/imager/src/image_store.rs similarity index 90% rename from crates/core/src/image_store.rs rename to crates/imager/src/image_store.rs index 59ccf4ccf..f879b0936 100644 --- a/crates/core/src/image_store.rs +++ b/crates/imager/src/image_store.rs @@ -14,14 +14,24 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -use crate::Result; use image::imageops::FilterType; -use image::{DynamicImage, ImageOutputFormat}; +use image::{DynamicImage, ImageError, ImageOutputFormat}; use kv::{rocksdb_store::RocksDbStore, Kv}; use serde::{de, ser::SerializeStruct, Serialize}; use std::io::{Cursor, Read, Seek}; use std::path::Path; +#[derive(thiserror::Error, Debug)] +pub enum Error { + #[error("image was not of format: {format:?}")] + InvalidImageFormat { + source: ImageError, + format: image::ImageFormat, + }, +} + +pub type Result = std::result::Result; + #[derive(PartialEq, Debug, Clone)] pub struct Image(DynamicImage); @@ -184,14 +194,18 @@ impl Image { { Ok(Self(img)) } else { - Ok(Self(image::load_from_memory_with_format( - &bytes, - image::ImageFormat::Png, - )?)) + Ok(Self( + image::load_from_memory_with_format(&bytes, image::ImageFormat::Png).map_err( + |source| Error::InvalidImageFormat { + source, + format: image::ImageFormat::Png, + }, + )?, + )) } } - pub(crate) fn as_raw_bytes(&self) -> Vec { + pub fn as_raw_bytes(&self) -> Vec { let mut cursor = Cursor::new(Vec::new()); self.0 .write_to(&mut cursor, ImageOutputFormat::Png) @@ -233,7 +247,7 @@ mod tests { ImageBuffer::from_pixel(2, 2, image::Rgb::([u16::MAX, u16::MAX, u16::MAX])).into(), ); let key = "test".to_string(); - let mut store = BaseImageStore::open(crate::gen_temp_path()); + let mut store = BaseImageStore::open(stdx::gen_temp_path()); assert_eq!(store.get(&key), None); store.insert(key.clone(), image.clone()); diff --git a/crates/imager/src/lib.rs b/crates/imager/src/lib.rs new file mode 100644 index 000000000..2b3d663e4 --- /dev/null +++ b/crates/imager/src/lib.rs @@ -0,0 +1,2 @@ +pub mod image_downloader; +pub mod image_store; diff --git a/crates/stdx/src/lib.rs b/crates/stdx/src/lib.rs index 3c424bc51..134ffd7ca 100644 --- a/crates/stdx/src/lib.rs +++ b/crates/stdx/src/lib.rs @@ -1,3 +1,32 @@ +use std::path::PathBuf; + +// taken from https://docs.rs/sled/0.34.7/src/sled/config.rs.html#445 +pub fn gen_temp_path() -> PathBuf { + use std::sync::atomic::{AtomicUsize, Ordering}; + use std::time::SystemTime; + + static SALT_COUNTER: AtomicUsize = AtomicUsize::new(0); + + let seed = SALT_COUNTER.fetch_add(1, Ordering::SeqCst) as u128; + + let now = SystemTime::now() + .duration_since(SystemTime::UNIX_EPOCH) + .unwrap() + .as_nanos() + << 48; + + let pid = u128::from(std::process::id()); + + let salt = (pid << 16) + now + seed; + + if cfg!(target_os = "linux") { + // use shared memory for temporary linux files + format!("/dev/shm/pagecache.tmp.{salt}").into() + } else { + std::env::temp_dir().join(format!("pagecache.tmp.{salt}")) + } +} + pub fn ceil_char_boundary(str: &str, index: usize) -> usize { let mut res = index; From a1c5e544bb89fb86f06ffe1d26c98bc1c53ee4b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20B=C3=B8ving?= Date: Wed, 18 Oct 2023 19:16:02 +0200 Subject: [PATCH 12/54] Move entity_index into a crate --- Cargo.lock | 22 ++++++++++++++++++ Cargo.toml | 1 + crates/core/Cargo.toml | 1 + crates/core/src/api/docs.rs | 4 ++-- crates/core/src/entrypoint/entity.rs | 14 +++++------ crates/core/src/entrypoint/search_server.rs | 2 +- crates/core/src/lib.rs | 1 - crates/core/src/search_prettifier/entity.rs | 4 ++-- crates/core/src/searcher/local.rs | 2 +- crates/core/src/searcher/mod.rs | 2 +- crates/entity_index/Cargo.toml | 23 +++++++++++++++++++ .../src}/entity.rs | 3 ++- .../mod.rs => entity_index/src/lib.rs} | 16 +++++++++---- crates/imager/src/image_store.rs | 13 ++--------- crates/imager/src/lib.rs | 11 +++++++++ 15 files changed, 87 insertions(+), 32 deletions(-) create mode 100644 crates/entity_index/Cargo.toml rename crates/{core/src/entity_index => entity_index/src}/entity.rs (98%) rename crates/{core/src/entity_index/mod.rs => entity_index/src/lib.rs} (97%) diff --git a/Cargo.lock b/Cargo.lock index 19e6aeae0..a73ad32fe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1253,6 +1253,27 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "entity_index" +version = "0.1.0" +dependencies = [ + "base64 0.21.4", + "bincode", + "imager", + "itertools 0.11.0", + "kv", + "md5", + "parse_wiki_text", + "serde", + "stdx", + "tantivy", + "thiserror", + "tokenizer", + "tracing", + "url", + "utoipa", +] + [[package]] name = "equivalent" version = "1.0.1" @@ -4304,6 +4325,7 @@ dependencies = [ "dashmap", "distributed", "encoding_rs", + "entity_index", "eventsource-stream", "fend-core", "flate2", diff --git a/Cargo.toml b/Cargo.toml index a3c002608..99e752cf6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,6 +33,7 @@ csv = "1.1.6" dashmap = {version = "5.4.0", features = ["rayon"]} distributed = { path = "crates/distributed" } encoding_rs = "0.8.31" +entity_index = { path = "./crates/entity_index" } eventsource-stream = "0.2.3" fend-core = "1.2.2" flate2 = "1.0.28" diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index 6f032b774..9e1d2e266 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -43,6 +43,7 @@ csv = {workspace = true} dashmap = {workspace = true} distributed.workspace = true encoding_rs = {workspace = true} +entity_index.workspace = true eventsource-stream = {workspace = true} fend-core = {workspace = true} flate2 = {workspace = true} diff --git a/crates/core/src/api/docs.rs b/crates/core/src/api/docs.rs index 2984c83b2..0712ff70d 100644 --- a/crates/core/src/api/docs.rs +++ b/crates/core/src/api/docs.rs @@ -55,8 +55,8 @@ use utoipa_swagger_ui::SwaggerUi; crate::snippet::TextSnippetFragment, crate::snippet::TextSnippetFragmentKind, - crate::entity_index::entity::EntitySnippet, - crate::entity_index::entity::EntitySnippetFragment, + entity_index::entity::EntitySnippet, + entity_index::entity::EntitySnippetFragment, crate::bangs::UrlWrapper, diff --git a/crates/core/src/entrypoint/entity.rs b/crates/core/src/entrypoint/entity.rs index 14a8267a1..5aa8c2ee9 100644 --- a/crates/core/src/entrypoint/entity.rs +++ b/crates/core/src/entrypoint/entity.rs @@ -14,19 +14,17 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . +use entity_index::{ + entity::{Entity, Paragraph, Span, WikiNodeExt}, + EntityIndex, +}; use std::{ collections::{BTreeMap, HashSet}, fs::File, io::{BufRead, BufReader}, }; -use crate::{ - entity_index::{ - entity::{Entity, Paragraph, Span, WikiNodeExt}, - EntityIndex, - }, - Result, -}; +use crate::Result; use bzip2::bufread::MultiBzDecoder; use itertools::Itertools; @@ -291,7 +289,7 @@ impl EntityBuilder { #[cfg(test)] mod tests { - use crate::entity_index::entity::EntitySnippet; + use entity_index::entity::EntitySnippet; use super::*; diff --git a/crates/core/src/entrypoint/search_server.rs b/crates/core/src/entrypoint/search_server.rs index 311cc5d00..3cd18b1fc 100644 --- a/crates/core/src/entrypoint/search_server.rs +++ b/crates/core/src/entrypoint/search_server.rs @@ -20,6 +20,7 @@ use distributed::{ cluster::Cluster, member::{Member, Service}, }; +use entity_index::EntityIndex; use imager::image_store::Image; use serde::{Deserialize, Serialize}; use sonic::sonic_service; @@ -28,7 +29,6 @@ use url::Url; use crate::{ config, - entity_index::EntityIndex, index::Index, inverted_index::{self, RetrievedWebpage}, ranking::{ diff --git a/crates/core/src/lib.rs b/crates/core/src/lib.rs index 78f4d3bc1..ec747570f 100644 --- a/crates/core/src/lib.rs +++ b/crates/core/src/lib.rs @@ -38,7 +38,6 @@ mod collector; pub mod config; pub mod crawler; mod directory; -mod entity_index; mod enum_map; mod executor; mod fastfield_reader; diff --git a/crates/core/src/search_prettifier/entity.rs b/crates/core/src/search_prettifier/entity.rs index 1d0e310cb..14de78d54 100644 --- a/crates/core/src/search_prettifier/entity.rs +++ b/crates/core/src/search_prettifier/entity.rs @@ -19,7 +19,7 @@ use itertools::Itertools; use serde::{Deserialize, Serialize}; use utoipa::ToSchema; -use crate::entity_index::{ +use entity_index::{ entity::{EntitySnippet, Span}, EntityMatch, }; @@ -100,7 +100,7 @@ fn maybe_prettify_entity_date(value: &str) -> Option { #[cfg(test)] mod tests { - use crate::entity_index::entity::Link; + use entity_index::entity::Link; use super::*; diff --git a/crates/core/src/searcher/local.rs b/crates/core/src/searcher/local.rs index 1f254c6e8..ac89b128b 100644 --- a/crates/core/src/searcher/local.rs +++ b/crates/core/src/searcher/local.rs @@ -23,7 +23,6 @@ use tantivy::TantivyDocument; use url::Url; use crate::config::{CollectorConfig, SnippetConfig}; -use crate::entity_index::{EntityIndex, EntityMatch}; use crate::index::Index; use crate::inverted_index::RetrievedWebpage; use crate::query::Query; @@ -41,6 +40,7 @@ use crate::spell::Spell; use crate::webgraph::Node; use crate::webpage::region::Region; use crate::{inverted_index, Error, Result}; +use entity_index::{EntityIndex, EntityMatch}; use super::WebsitesResult; use super::{InitialWebsiteResult, SearchQuery}; diff --git a/crates/core/src/searcher/mod.rs b/crates/core/src/searcher/mod.rs index 592d25521..f22b59e3b 100644 --- a/crates/core/src/searcher/mod.rs +++ b/crates/core/src/searcher/mod.rs @@ -19,6 +19,7 @@ pub mod distributed; pub mod local; pub use distributed::*; +use entity_index::EntityMatch; pub use local::*; use optics::{Optic, SiteRankings}; use serde::{Deserialize, Serialize}; @@ -27,7 +28,6 @@ use utoipa::ToSchema; use crate::{ bangs::BangHit, config::defaults, - entity_index::EntityMatch, ranking::pipeline::RankingWebsite, search_prettifier::{ DisplayedAnswer, DisplayedSidebar, DisplayedWebpage, HighlightedSpellCorrection, diff --git a/crates/entity_index/Cargo.toml b/crates/entity_index/Cargo.toml new file mode 100644 index 000000000..3ada80a22 --- /dev/null +++ b/crates/entity_index/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "entity_index" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +base64.workspace = true +bincode.workspace = true +imager.workspace = true +itertools.workspace = true +kv.workspace = true +md5.workspace = true +parse_wiki_text.workspace = true +serde.workspace = true +stdx.workspace = true +tantivy.workspace = true +thiserror.workspace = true +tokenizer.workspace = true +tracing.workspace = true +url.workspace = true +utoipa.workspace = true diff --git a/crates/core/src/entity_index/entity.rs b/crates/entity_index/src/entity.rs similarity index 98% rename from crates/core/src/entity_index/entity.rs rename to crates/entity_index/src/entity.rs index 8ff853129..a6d9d7847 100644 --- a/crates/core/src/entity_index/entity.rs +++ b/crates/entity_index/src/entity.rs @@ -214,7 +214,8 @@ impl EntitySnippet { EntitySnippet { fragments } } - #[cfg(test)] + // TODO: re-add this when we have moved the rest of entity here + // #[cfg(test)] pub fn to_md(&self, strip_href_prefix: Option<&str>) -> String { self.fragments .iter() diff --git a/crates/core/src/entity_index/mod.rs b/crates/entity_index/src/lib.rs similarity index 97% rename from crates/core/src/entity_index/mod.rs rename to crates/entity_index/src/lib.rs index 47e126eb3..28ccb89ff 100644 --- a/crates/core/src/entity_index/mod.rs +++ b/crates/entity_index/src/lib.rs @@ -40,10 +40,18 @@ use tokenizer::Normal; use tracing::info; use url::Url; -use crate::Result; - use self::entity::{Entity, Link, Span}; -pub(crate) mod entity; +pub mod entity; + +#[derive(thiserror::Error, Debug)] +pub enum Error { + #[error("io error")] + Io(#[from] std::io::Error), + #[error("tantivy error")] + Tantivy(#[from] tantivy::error::TantivyError), +} + +pub type Result = std::result::Result; pub struct EntityIndex { image_store: EntityImageStore, @@ -181,7 +189,7 @@ impl EntityIndex { path.as_ref().join("attribute_occurrences"), )); - let stopwords: HashSet = include_str!("../../stopwords/English.txt") + let stopwords: HashSet = include_str!("../../core/stopwords/English.txt") .lines() .take(50) .map(str::to_ascii_lowercase) diff --git a/crates/imager/src/image_store.rs b/crates/imager/src/image_store.rs index f879b0936..ad5f98a3e 100644 --- a/crates/imager/src/image_store.rs +++ b/crates/imager/src/image_store.rs @@ -15,22 +15,13 @@ // along with this program. If not, see . use image::imageops::FilterType; -use image::{DynamicImage, ImageError, ImageOutputFormat}; +use image::{DynamicImage, ImageOutputFormat}; use kv::{rocksdb_store::RocksDbStore, Kv}; use serde::{de, ser::SerializeStruct, Serialize}; use std::io::{Cursor, Read, Seek}; use std::path::Path; -#[derive(thiserror::Error, Debug)] -pub enum Error { - #[error("image was not of format: {format:?}")] - InvalidImageFormat { - source: ImageError, - format: image::ImageFormat, - }, -} - -pub type Result = std::result::Result; +use crate::{Error, Result}; #[derive(PartialEq, Debug, Clone)] pub struct Image(DynamicImage); diff --git a/crates/imager/src/lib.rs b/crates/imager/src/lib.rs index 2b3d663e4..5ae5464d5 100644 --- a/crates/imager/src/lib.rs +++ b/crates/imager/src/lib.rs @@ -1,2 +1,13 @@ pub mod image_downloader; pub mod image_store; + +#[derive(thiserror::Error, Debug)] +pub enum Error { + #[error("image was not of format: {format:?}")] + InvalidImageFormat { + source: image::ImageError, + format: image::ImageFormat, + }, +} + +pub type Result = std::result::Result; From deff2c8a0261d13f9b6b49387fafcdf1f5dab5f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20B=C3=B8ving?= Date: Wed, 18 Oct 2023 19:23:36 +0200 Subject: [PATCH 13/54] Move more of entity code into entity_indexer --- Cargo.lock | 3 ++ crates/core/src/entrypoint/mod.rs | 3 +- crates/core/src/search_prettifier/entity.rs | 40 ---------------- crates/entity_index/Cargo.toml | 5 ++ .../entity.rs => entity_index/src/builder.rs} | 14 +++--- crates/entity_index/src/entity.rs | 46 ++++++++++++++++++- crates/entity_index/src/lib.rs | 1 + optics/testcases/samples | 1 + 8 files changed, 62 insertions(+), 51 deletions(-) rename crates/{core/src/entrypoint/entity.rs => entity_index/src/builder.rs} (98%) create mode 160000 optics/testcases/samples diff --git a/Cargo.lock b/Cargo.lock index a73ad32fe..f982d359d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1259,11 +1259,14 @@ version = "0.1.0" dependencies = [ "base64 0.21.4", "bincode", + "bzip2", "imager", + "insta", "itertools 0.11.0", "kv", "md5", "parse_wiki_text", + "quick-xml 0.30.0", "serde", "stdx", "tantivy", diff --git a/crates/core/src/entrypoint/mod.rs b/crates/core/src/entrypoint/mod.rs index 230da23a0..dd45624a6 100644 --- a/crates/core/src/entrypoint/mod.rs +++ b/crates/core/src/entrypoint/mod.rs @@ -24,7 +24,6 @@ mod centrality; pub mod configure; pub mod crawler; pub mod dmoz_parser; -mod entity; pub mod indexer; pub mod safety_classifier; pub mod search_server; @@ -32,7 +31,7 @@ mod webgraph; pub mod webgraph_server; pub use centrality::Centrality; -pub use entity::EntityIndexer; +pub use entity_index::builder::EntityIndexer; pub use indexer::Indexer; use tracing::{debug, log::error}; pub use webgraph::Webgraph; diff --git a/crates/core/src/search_prettifier/entity.rs b/crates/core/src/search_prettifier/entity.rs index 14de78d54..7bec4ad53 100644 --- a/crates/core/src/search_prettifier/entity.rs +++ b/crates/core/src/search_prettifier/entity.rs @@ -100,48 +100,8 @@ fn maybe_prettify_entity_date(value: &str) -> Option { #[cfg(test)] mod tests { - use entity_index::entity::Link; - use super::*; - #[test] - fn simple_link_to_html() { - assert_eq!( - EntitySnippet::from_span( - &Span { - text: "some text with a link".to_string(), - links: vec![Link { - start: 5, - end: 9, - target: "text article".to_string() - }] - }, - 10000 - ) - .to_md(None), - "some [text](https://en.wikipedia.org/wiki/text_article) with a link".to_string() - ); - } - - #[test] - fn truncated_link_to_html() { - assert_eq!( - EntitySnippet::from_span( - &Span { - text: "some text".to_string(), - links: vec![Link { - start: 5, - end: 9, - target: "text article".to_string() - }] - }, - 7 - ) - .to_md(None), - "some [te](https://en.wikipedia.org/wiki/text_article)...".to_string() - ); - } - #[test] fn einstein_date() { assert_eq!( diff --git a/crates/entity_index/Cargo.toml b/crates/entity_index/Cargo.toml index 3ada80a22..d0fbbdd0e 100644 --- a/crates/entity_index/Cargo.toml +++ b/crates/entity_index/Cargo.toml @@ -8,11 +8,13 @@ edition = "2021" [dependencies] base64.workspace = true bincode.workspace = true +bzip2.workspace = true imager.workspace = true itertools.workspace = true kv.workspace = true md5.workspace = true parse_wiki_text.workspace = true +quick-xml = "0.30.0" serde.workspace = true stdx.workspace = true tantivy.workspace = true @@ -21,3 +23,6 @@ tokenizer.workspace = true tracing.workspace = true url.workspace = true utoipa.workspace = true + +[dev-dependencies] +insta.workspace = true diff --git a/crates/core/src/entrypoint/entity.rs b/crates/entity_index/src/builder.rs similarity index 98% rename from crates/core/src/entrypoint/entity.rs rename to crates/entity_index/src/builder.rs index 5aa8c2ee9..faab05c7d 100644 --- a/crates/core/src/entrypoint/entity.rs +++ b/crates/entity_index/src/builder.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -use entity_index::{ +use crate::{ entity::{Entity, Paragraph, Span, WikiNodeExt}, EntityIndex, }; @@ -289,7 +289,7 @@ impl EntityBuilder { #[cfg(test)] mod tests { - use entity_index::entity::EntitySnippet; + use crate::entity::EntitySnippet; use super::*; @@ -367,7 +367,7 @@ mod tests { fn aristotle() { check_abstract( "Aristotle", - include_str!("../../testcases/entity/aristotle.txt"), + include_str!("../../core/testcases/entity/aristotle.txt"), expect!(@r###" Title: Aristotle Image: Some("Aristotle Altemps Inv8575.jpg") @@ -435,7 +435,7 @@ mod tests { fn barack_obama() { check_abstract( "Barack Obama", - include_str!("../../testcases/entity/obama.txt"), + include_str!("../../core/testcases/entity/obama.txt"), expect!(@r###" Title: Barack Obama Image: Some("President Barack Obama.jpg") @@ -498,7 +498,7 @@ mod tests { fn algorithm() { check_abstract( "Algorithm", - include_str!("../../testcases/entity/algorithm.txt"), + include_str!("../../core/testcases/entity/algorithm.txt"), expect!(@r###" Title: Algorithm Image: None @@ -519,7 +519,7 @@ mod tests { fn andre() { check_abstract( "Andre", - include_str!("../../testcases/entity/andre.txt"), + include_str!("../../core/testcases/entity/andre.txt"), expect!(@r###" Title: Andre Image: Some("Andre Agassi (2011).jpg") @@ -579,7 +579,7 @@ mod tests { fn skip_disambiguation_pages() { assert!(EntityBuilder { title: "Test".to_string(), - text: include_str!("../../testcases/entity/disambiguation.txt").to_string(), + text: include_str!("../../core/testcases/entity/disambiguation.txt").to_string(), } .build() .is_none()); diff --git a/crates/entity_index/src/entity.rs b/crates/entity_index/src/entity.rs index a6d9d7847..d6ee5ed6a 100644 --- a/crates/entity_index/src/entity.rs +++ b/crates/entity_index/src/entity.rs @@ -214,8 +214,7 @@ impl EntitySnippet { EntitySnippet { fragments } } - // TODO: re-add this when we have moved the rest of entity here - // #[cfg(test)] + #[cfg(test)] pub fn to_md(&self, strip_href_prefix: Option<&str>) -> String { self.fragments .iter() @@ -246,3 +245,46 @@ impl<'a> From<&[Node<'a>]> for Span { span } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn simple_link_to_html() { + assert_eq!( + EntitySnippet::from_span( + &Span { + text: "some text with a link".to_string(), + links: vec![Link { + start: 5, + end: 9, + target: "text article".to_string() + }] + }, + 10000 + ) + .to_md(None), + "some [text](https://en.wikipedia.org/wiki/text_article) with a link".to_string() + ); + } + + #[test] + fn truncated_link_to_html() { + assert_eq!( + EntitySnippet::from_span( + &Span { + text: "some text".to_string(), + links: vec![Link { + start: 5, + end: 9, + target: "text article".to_string() + }] + }, + 7 + ) + .to_md(None), + "some [te](https://en.wikipedia.org/wiki/text_article)...".to_string() + ); + } +} diff --git a/crates/entity_index/src/lib.rs b/crates/entity_index/src/lib.rs index 28ccb89ff..a8f9a9d0c 100644 --- a/crates/entity_index/src/lib.rs +++ b/crates/entity_index/src/lib.rs @@ -41,6 +41,7 @@ use tracing::info; use url::Url; use self::entity::{Entity, Link, Span}; +pub mod builder; pub mod entity; #[derive(thiserror::Error, Debug)] diff --git a/optics/testcases/samples b/optics/testcases/samples new file mode 160000 index 000000000..28af28128 --- /dev/null +++ b/optics/testcases/samples @@ -0,0 +1 @@ +Subproject commit 28af28128c4ecb0dcf484bde26865e569888d7ad From 7651af00fe1fb32666e8a9909a6a652a30a08e63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20B=C3=B8ving?= Date: Wed, 18 Oct 2023 20:09:06 +0200 Subject: [PATCH 14/54] Remove unused deps using cargo-udeps --- Cargo.lock | 81 ---------------------------------------- crates/core/Cargo.toml | 6 --- crates/imager/Cargo.toml | 2 +- crates/optics/Cargo.toml | 3 +- optics-lsp/Cargo.lock | 12 +----- 5 files changed, 3 insertions(+), 101 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f982d359d..c2ff73f45 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -191,17 +191,6 @@ dependencies = [ "term", ] -[[package]] -name = "async-channel" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" -dependencies = [ - "concurrent-queue", - "event-listener", - "futures-core", -] - [[package]] name = "async-compression" version = "0.4.4" @@ -343,27 +332,6 @@ dependencies = [ "tower-service", ] -[[package]] -name = "axum-extra" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ab90e7b70bea63a153137162affb6a0bce26b584c24a4c7885509783e2cf30b" -dependencies = [ - "axum", - "axum-core", - "bytes", - "futures-util", - "http", - "http-body", - "mime", - "pin-project-lite", - "serde", - "tokio", - "tower", - "tower-layer", - "tower-service", -] - [[package]] name = "axum-macros" version = "0.3.8" @@ -800,15 +768,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" -[[package]] -name = "concurrent-queue" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "console" version = "0.15.7" @@ -1302,23 +1261,6 @@ dependencies = [ "cc", ] -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "eventsource-stream" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74fef4569247a5f429d9156b9d0a2599914385dd189c539334c625d8099d90ab" -dependencies = [ - "futures-core", - "nom", - "pin-project-lite", -] - [[package]] name = "exr" version = "1.6.4" @@ -2345,12 +2287,6 @@ dependencies = [ "hashbrown 0.14.1", ] -[[package]] -name = "lz-str" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39f3d72d77227090eed75ea331285a53726e78374a1f357ff5757702c23c70cc" - [[package]] name = "lz4-sys" version = "1.9.4" @@ -2476,16 +2412,6 @@ version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" -[[package]] -name = "memmap" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "memmap2" version = "0.9.0" @@ -2861,7 +2787,6 @@ dependencies = [ name = "optics" version = "0.1.0" dependencies = [ - "itertools 0.11.0", "lalrpop", "lalrpop-util", "logos", @@ -4307,11 +4232,9 @@ version = "0.1.0" dependencies = [ "aes-gcm", "anyhow", - "async-channel", "async-stream", "async-trait", "axum", - "axum-extra", "axum-macros", "base64 0.21.4", "bincode", @@ -4329,7 +4252,6 @@ dependencies = [ "distributed", "encoding_rs", "entity_index", - "eventsource-stream", "fend-core", "flate2", "fst", @@ -4340,7 +4262,6 @@ dependencies = [ "image", "imager", "indicatif 0.17.7", - "insta", "intmap", "itertools 0.11.0", "kuchiki", @@ -4350,11 +4271,9 @@ dependencies = [ "leaky_queue", "libc", "logos", - "lz-str", "lz4_flex", "maplit", "md5", - "memmap", "memmap2", "mime", "min-max-heap", diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index 9e1d2e266..5ee7b5f1a 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -23,11 +23,9 @@ path = "src/main.rs" [dependencies] aes-gcm = {workspace = true} anyhow = {workspace = true} -async-channel = {workspace = true} async-stream = {workspace = true} async-trait = {workspace = true} axum = {workspace = true} -axum-extra = {workspace = true} axum-macros = {workspace = true} base64 = {workspace = true} bincode = {workspace = true} @@ -44,7 +42,6 @@ dashmap = {workspace = true} distributed.workspace = true encoding_rs = {workspace = true} entity_index.workspace = true -eventsource-stream = {workspace = true} fend-core = {workspace = true} flate2 = {workspace = true} fst = {workspace = true} @@ -63,10 +60,8 @@ lalrpop-util = {workspace = true} leaky_queue.workspace = true libc = {workspace = true} logos = {workspace = true} -lz-str = {workspace = true} lz4_flex = {workspace = true} md5 = {workspace = true} -memmap = {workspace = true} memmap2 = {workspace = true} mime = {workspace = true} min-max-heap = {workspace = true} @@ -121,7 +116,6 @@ lalrpop = {workspace = true} [dev-dependencies] criterion = {workspace = true} -insta = {workspace = true} maplit = {workspace = true} proptest = {workspace = true} proptest-derive = {workspace = true} diff --git a/crates/imager/Cargo.toml b/crates/imager/Cargo.toml index 11d5298d3..3c8e9aef6 100644 --- a/crates/imager/Cargo.toml +++ b/crates/imager/Cargo.toml @@ -12,7 +12,7 @@ futures.workspace = true image.workspace = true kv.workspace = true reqwest.workspace = true -serde = { workspace = true, features = ["derive"] } +serde.workspace = true stdx.workspace = true thiserror.workspace = true tokio.workspace = true diff --git a/crates/optics/Cargo.toml b/crates/optics/Cargo.toml index 3ecf105a9..41ef82274 100644 --- a/crates/optics/Cargo.toml +++ b/crates/optics/Cargo.toml @@ -7,10 +7,9 @@ edition = "2021" thiserror = { workspace = true } lalrpop-util = { workspace = true } once_cell = { workspace = true } -itertools = { workspace = true } logos = { workspace = true } serde = { workspace = true } utoipa = { workspace = true } [build-dependencies] -lalrpop = { workspace = true } \ No newline at end of file +lalrpop = { workspace = true } diff --git a/optics-lsp/Cargo.lock b/optics-lsp/Cargo.lock index be4d1259c..5d0986e67 100644 --- a/optics-lsp/Cargo.lock +++ b/optics-lsp/Cargo.lock @@ -246,15 +246,6 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "1.0.6" @@ -281,7 +272,7 @@ dependencies = [ "diff", "ena", "is-terminal", - "itertools 0.10.5", + "itertools", "lalrpop-util", "petgraph", "pico-args", @@ -400,7 +391,6 @@ checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" name = "optics" version = "0.1.0" dependencies = [ - "itertools 0.11.0", "lalrpop", "lalrpop-util", "logos", From b2980ced6d14f1a616ad26eab21b4501ba299153 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20B=C3=B8ving?= Date: Wed, 18 Oct 2023 20:24:51 +0200 Subject: [PATCH 15/54] Move warc downloading into a sperate file --- crates/core/src/entrypoint/mod.rs | 133 +++++++++++++++++++++++++++++- 1 file changed, 132 insertions(+), 1 deletion(-) diff --git a/crates/core/src/entrypoint/mod.rs b/crates/core/src/entrypoint/mod.rs index dd45624a6..d4b572a73 100644 --- a/crates/core/src/entrypoint/mod.rs +++ b/crates/core/src/entrypoint/mod.rs @@ -49,7 +49,7 @@ fn download_all_warc_files<'a>( warc_paths.into_iter().filter_map(|warc_path| { debug!("downloading warc file {}", &warc_path); - let res = WarcFile::download(source, &warc_path); + let res = warc_download::download(source, &warc_path); if let Err(err) = res { error!("error while downloading: {:?}", err); @@ -61,3 +61,134 @@ fn download_all_warc_files<'a>( Some(res.unwrap()) }) } + +mod warc_download { + use std::{ + fs::File, + io::{BufReader, Cursor, Read, Seek, Write}, + path::Path, + thread::sleep, + time::Duration, + }; + + use distributed::retry_strategy::ExponentialBackoff; + use tracing::{debug, trace}; + + use crate::{ + config::{S3Config, WarcSource}, + warc::WarcFile, + Error, Result, + }; + + pub(super) fn download(source: &WarcSource, warc_path: &str) -> Result { + let mut cursor = Cursor::new(Vec::new()); + download_into_buf(source, warc_path, &mut cursor)?; + cursor.rewind()?; + + let mut buf = Vec::new(); + cursor.read_to_end(&mut buf)?; + + Ok(WarcFile::new(buf)) + } + + fn download_into_buf( + source: &WarcSource, + warc_path: &str, + buf: &mut W, + ) -> Result<()> { + for dur in ExponentialBackoff::from_millis(10) + .with_limit(Duration::from_secs(30)) + .take(35) + { + let res = match source.clone() { + WarcSource::HTTP(config) => download_from_http(warc_path, config.base_url, buf), + WarcSource::Local(config) => load_from_folder(warc_path, &config.folder, buf), + WarcSource::S3(config) => download_from_s3(warc_path, &config, buf), + }; + + if res.is_ok() { + return Ok(()); + } else { + trace!("Error {:?}", res); + } + + debug!("warc download failed: {:?}", res.err().unwrap()); + debug!("retrying in {} ms", dur.as_millis()); + + sleep(dur); + } + + Err(Error::DownloadFailed.into()) + } + + fn load_from_folder(name: &str, folder: &str, buf: &mut W) -> Result<()> { + let f = File::open(Path::new(folder).join(name))?; + let mut reader = BufReader::new(f); + + buf.rewind()?; + + std::io::copy(&mut reader, buf)?; + + Ok(()) + } + + fn download_from_http( + warc_path: &str, + base_url: String, + buf: &mut W, + ) -> Result<()> { + let mut url = base_url; + if !url.ends_with('/') { + url += "/"; + } + url += warc_path; + + let client = reqwest::blocking::ClientBuilder::new() + .tcp_keepalive(None) + .pool_idle_timeout(Duration::from_secs(30 * 60)) + .timeout(Duration::from_secs(30 * 60)) + .connect_timeout(Duration::from_secs(30 * 60)) + .build()?; + let res = client.get(url).send()?; + + if res.status().as_u16() != 200 { + return Err(Error::DownloadFailed.into()); + } + + let bytes = res.bytes()?; + + buf.rewind()?; + std::io::copy(&mut &bytes[..], buf)?; + + Ok(()) + } + + fn download_from_s3( + warc_path: &str, + config: &S3Config, + buf: &mut W, + ) -> Result<()> { + let bucket = s3::Bucket::new( + &config.bucket, + s3::Region::Custom { + region: "".to_string(), + endpoint: config.endpoint.clone(), + }, + s3::creds::Credentials { + access_key: Some(config.access_key.clone()), + secret_key: Some(config.secret_key.clone()), + security_token: None, + session_token: None, + expiration: None, + }, + )? + .with_path_style() + .with_request_timeout(Duration::from_secs(30 * 60)); + + let res = bucket.get_object_blocking(warc_path)?; + + buf.write_all(res.bytes())?; + + Ok(()) + } +} From 7fc3e9d2570b4888a306ab70b727812a480cdf19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20B=C3=B8ving?= Date: Wed, 18 Oct 2023 20:32:48 +0200 Subject: [PATCH 16/54] Move warc into a crate --- Cargo.lock | 13 ++ Cargo.toml | 1 + crates/core/Cargo.toml | 1 + crates/core/src/crawler/mod.rs | 2 +- crates/core/src/crawler/warc_writer.rs | 5 +- crates/core/src/crawler/worker.rs | 1 - crates/core/src/entrypoint/indexer.rs | 5 +- crates/core/src/entrypoint/mod.rs | 5 +- crates/core/src/lib.rs | 5 +- crates/warc/Cargo.toml | 16 ++ crates/{core/src/warc.rs => warc/src/lib.rs} | 181 +++---------------- 11 files changed, 67 insertions(+), 168 deletions(-) create mode 100644 crates/warc/Cargo.toml rename crates/{core/src/warc.rs => warc/src/lib.rs} (78%) diff --git a/Cargo.lock b/Cargo.lock index c2ff73f45..f5f9bd34f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4321,6 +4321,7 @@ dependencies = [ "utoipa", "utoipa-swagger-ui", "uuid", + "warc", "whatlang", ] @@ -5286,6 +5287,18 @@ dependencies = [ "try-lock", ] +[[package]] +name = "warc" +version = "0.1.0" +dependencies = [ + "chrono", + "encoding_rs", + "flate2", + "proptest", + "proptest-derive", + "thiserror", +] + [[package]] name = "wasi" version = "0.9.0+wasi-snapshot-preview1" diff --git a/Cargo.toml b/Cargo.toml index 99e752cf6..8adf1b098 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -116,6 +116,7 @@ urlencoding = "2.1.2" utoipa = {version = "4.0.0", features = ["axum_extras"]} utoipa-swagger-ui = {version = "4.0.0", features = ["axum"]} uuid = "1.1.2" +warc = { path = "./crates/warc" } whatlang = "0.16.0" [profile.test.package] diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index 5ee7b5f1a..caf17d3ba 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -106,6 +106,7 @@ urlencoding = {workspace = true} utoipa = {workspace = true} utoipa-swagger-ui = {workspace = true} uuid = {workspace = true} +warc.workspace = true whatlang = {workspace = true} [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/crates/core/src/crawler/mod.rs b/crates/core/src/crawler/mod.rs index aae8416bd..9aced2eee 100644 --- a/crates/core/src/crawler/mod.rs +++ b/crates/core/src/crawler/mod.rs @@ -20,7 +20,7 @@ use hashbrown::HashMap; use url::Url; -use crate::{config::CrawlerConfig, warc, webpage::url_ext::UrlExt}; +use crate::{config::CrawlerConfig, webpage::url_ext::UrlExt}; use self::{warc_writer::WarcWriter, worker::WorkerThread}; diff --git a/crates/core/src/crawler/warc_writer.rs b/crates/core/src/crawler/warc_writer.rs index a2b06e541..88a5f75f2 100644 --- a/crates/core/src/crawler/warc_writer.rs +++ b/crates/core/src/crawler/warc_writer.rs @@ -16,10 +16,7 @@ use std::time::Duration; -use crate::{ - config::{self, S3Config}, - warc, -}; +use crate::config::{self, S3Config}; use super::{CrawlDatum, Result}; diff --git a/crates/core/src/crawler/worker.rs b/crates/core/src/crawler/worker.rs index 0dae6929e..e0342eafb 100644 --- a/crates/core/src/crawler/worker.rs +++ b/crates/core/src/crawler/worker.rs @@ -35,7 +35,6 @@ use crate::{ config::CrawlerConfig, crawler::MAX_URL_LEN_BYTES, entrypoint::crawler::router::{NewJob, RouterService}, - warc, webpage::Html, }; diff --git a/crates/core/src/entrypoint/indexer.rs b/crates/core/src/entrypoint/indexer.rs index 0cef0690f..ed7c3b316 100644 --- a/crates/core/src/entrypoint/indexer.rs +++ b/crates/core/src/entrypoint/indexer.rs @@ -19,21 +19,20 @@ use std::path::Path; use std::thread; use itertools::Itertools; +use kv::{rocksdb_store::RocksDbStore, Kv}; use serde::{Deserialize, Serialize}; use tokio::pin; use tracing::{debug, info, trace, warn}; +use warc::PayloadType; use crate::config; use crate::entrypoint::download_all_warc_files; use crate::index::{FrozenIndex, Index}; use crate::mapreduce::{Map, Reduce, Worker}; use crate::ranking::SignalAggregator; -use crate::warc::PayloadType; use crate::webgraph::{Node, NodeID, Webgraph, WebgraphBuilder}; use crate::webpage::{safety_classifier, Html, Webpage}; use crate::{human_website_annotations, Result}; -use kv::rocksdb_store::RocksDbStore; -use kv::Kv; pub struct Indexer {} diff --git a/crates/core/src/entrypoint/mod.rs b/crates/core/src/entrypoint/mod.rs index d4b572a73..014a68ddf 100644 --- a/crates/core/src/entrypoint/mod.rs +++ b/crates/core/src/entrypoint/mod.rs @@ -34,9 +34,10 @@ pub use centrality::Centrality; pub use entity_index::builder::EntityIndexer; pub use indexer::Indexer; use tracing::{debug, log::error}; +use warc::WarcFile; pub use webgraph::Webgraph; -use crate::{config, warc::WarcFile}; +use crate::config; fn download_all_warc_files<'a>( warc_paths: &'a [String], @@ -73,10 +74,10 @@ mod warc_download { use distributed::retry_strategy::ExponentialBackoff; use tracing::{debug, trace}; + use warc::WarcFile; use crate::{ config::{S3Config, WarcSource}, - warc::WarcFile, Error, Result, }; diff --git a/crates/core/src/lib.rs b/crates/core/src/lib.rs index ec747570f..3545559e2 100644 --- a/crates/core/src/lib.rs +++ b/crates/core/src/lib.rs @@ -69,15 +69,14 @@ mod subdomain_count; pub mod summarizer; #[allow(unused)] mod ttl_cache; -pub mod warc; pub mod webgraph; pub mod webpage; mod widgets; #[derive(thiserror::Error, Debug)] pub enum Error { - #[error("Failed to parse WARC file")] - WarcParse(&'static str), + #[error("WARC error")] + Warc(#[from] warc::Error), #[error("Encountered an empty required field ({0}) when converting to tantivy")] EmptyField(&'static str), diff --git a/crates/warc/Cargo.toml b/crates/warc/Cargo.toml new file mode 100644 index 000000000..91cbd894a --- /dev/null +++ b/crates/warc/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "warc" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +chrono.workspace = true +encoding_rs = "0.8.33" +flate2.workspace = true +thiserror.workspace = true + +[dev-dependencies] +proptest.workspace = true +proptest-derive.workspace = true diff --git a/crates/core/src/warc.rs b/crates/warc/src/lib.rs similarity index 78% rename from crates/core/src/warc.rs rename to crates/warc/src/lib.rs index 6ba4f4892..918c99707 100644 --- a/crates/core/src/warc.rs +++ b/crates/warc/src/lib.rs @@ -14,8 +14,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -use crate::{config::S3Config, config::WarcSource, Error, Result}; -use distributed::retry_strategy::ExponentialBackoff; +// use crate::{Error, Result}; use std::collections::BTreeMap; use std::fs::File; use std::io::{BufRead, BufReader, Cursor, Read, Seek, Write}; @@ -30,7 +29,15 @@ use flate2::Compression; #[cfg(test)] use proptest_derive::Arbitrary; -use tracing::{debug, trace}; +#[derive(thiserror::Error, Debug)] +pub enum Error { + #[error("IO error")] + Io(#[from] std::io::Error), + #[error("Failed to parse WARC file")] + Parse(&'static str), +} + +pub type Result = std::result::Result; pub struct WarcFile { bytes: Vec, @@ -84,122 +91,6 @@ impl WarcFile { num_reads: 0, } } - - pub(crate) fn download(source: &WarcSource, warc_path: &str) -> Result { - let mut cursor = Cursor::new(Vec::new()); - Self::download_into_buf(source, warc_path, &mut cursor)?; - cursor.rewind()?; - - let mut buf = Vec::new(); - cursor.read_to_end(&mut buf)?; - - Ok(Self::new(buf)) - } - - pub(crate) fn download_into_buf( - source: &WarcSource, - warc_path: &str, - buf: &mut W, - ) -> Result<()> { - for dur in ExponentialBackoff::from_millis(10) - .with_limit(Duration::from_secs(30)) - .take(35) - { - let res = match source.clone() { - WarcSource::HTTP(config) => { - WarcFile::download_from_http(warc_path, config.base_url, buf) - } - WarcSource::Local(config) => { - WarcFile::load_from_folder(warc_path, &config.folder, buf) - } - WarcSource::S3(config) => WarcFile::download_from_s3(warc_path, &config, buf), - }; - - if res.is_ok() { - return Ok(()); - } else { - trace!("Error {:?}", res); - } - - debug!("warc download failed: {:?}", res.err().unwrap()); - debug!("retrying in {} ms", dur.as_millis()); - - sleep(dur); - } - - Err(Error::DownloadFailed.into()) - } - - fn load_from_folder(name: &str, folder: &str, buf: &mut W) -> Result<()> { - let f = File::open(Path::new(folder).join(name))?; - let mut reader = BufReader::new(f); - - buf.rewind()?; - - std::io::copy(&mut reader, buf)?; - - Ok(()) - } - - fn download_from_http( - warc_path: &str, - base_url: String, - buf: &mut W, - ) -> Result<()> { - let mut url = base_url; - if !url.ends_with('/') { - url += "/"; - } - url += warc_path; - - let client = reqwest::blocking::ClientBuilder::new() - .tcp_keepalive(None) - .pool_idle_timeout(Duration::from_secs(30 * 60)) - .timeout(Duration::from_secs(30 * 60)) - .connect_timeout(Duration::from_secs(30 * 60)) - .build()?; - let res = client.get(url).send()?; - - if res.status().as_u16() != 200 { - return Err(Error::DownloadFailed.into()); - } - - let bytes = res.bytes()?; - - buf.rewind()?; - std::io::copy(&mut &bytes[..], buf)?; - - Ok(()) - } - - fn download_from_s3( - warc_path: &str, - config: &S3Config, - buf: &mut W, - ) -> Result<()> { - let bucket = s3::Bucket::new( - &config.bucket, - s3::Region::Custom { - region: "".to_string(), - endpoint: config.endpoint.clone(), - }, - s3::creds::Credentials { - access_key: Some(config.access_key.clone()), - secret_key: Some(config.secret_key.clone()), - security_token: None, - session_token: None, - expiration: None, - }, - )? - .with_path_style() - .with_request_timeout(Duration::from_secs(30 * 60)); - - let res = bucket.get_object_blocking(warc_path)?; - - buf.write_all(res.bytes())?; - - Ok(()) - } } #[derive(Debug)] @@ -229,7 +120,7 @@ impl Request { url: record .header .get("WARC-TARGET-URI") - .ok_or(Error::WarcParse("No target url"))? + .ok_or(Error::Parse("No target url"))? .to_owned(), }) } @@ -254,7 +145,7 @@ impl FromStr for PayloadType { "application/pdf" => Ok(Self::Pdf), "application/rss" => Ok(Self::Rss), "application/atom" => Ok(Self::Atom), - _ => Err(Error::WarcParse("Unknown payload type")), + _ => Err(Error::Parse("Unknown payload type")), } } } @@ -283,7 +174,7 @@ impl Response { let (_header, content) = content .split_once("\r\n\r\n") - .ok_or(Error::WarcParse("Invalid http body"))?; + .ok_or(Error::Parse("Invalid http body"))?; Ok(Self { body: content.to_string(), @@ -313,13 +204,15 @@ impl Metadata { line.pop(); // remove colon let key = line; if key == "fetchTimeMs" { - let fetch_time_ms = value.parse::()?; + let fetch_time_ms = value + .parse::() + .map_err(|_| Error::Parse("failed to parse 'fetchTimeMs'"))?; return Ok(Self { fetch_time_ms }); } } } - Err(Error::WarcParse("Failed to parse metadata").into()) + Err(Error::Parse("Failed to parse metadata")) } } @@ -343,7 +236,7 @@ impl RecordIterator { rtrim(&mut version); if !version.to_uppercase().starts_with("WARC/1.") { - return Some(Err(Error::WarcParse("Unknown WARC version").into())); + return Some(Err(Error::Parse("Unknown WARC version"))); } let mut header = BTreeMap::::new(); @@ -376,23 +269,18 @@ impl RecordIterator { header.insert(key.to_ascii_uppercase(), value); } else { - return Some(Err(Error::WarcParse( - "All header lines must contain a colon", - ) - .into())); + return Some(Err(Error::Parse("All header lines must contain a colon"))); } } let content_len = header.get("CONTENT-LENGTH"); if content_len.is_none() { - return Some(Err(Error::WarcParse("Record has no content-length").into())); + return Some(Err(Error::Parse("Record has no content-length"))); } let content_len = content_len.unwrap().parse::(); if content_len.is_err() { - return Some(Err( - Error::WarcParse("Could not parse content length").into() - )); + return Some(Err(Error::Parse("Could not parse content length"))); } let content_len = content_len.unwrap(); @@ -407,7 +295,7 @@ impl RecordIterator { } if linefeed != [13, 10, 13, 10] { - return Some(Err(Error::WarcParse("Invalid record ending").into())); + return Some(Err(Error::Parse("Invalid record ending"))); } let record = RawWarcRecord { header, content }; @@ -456,17 +344,11 @@ impl Iterator for RecordIterator { match response.header.get("WARC-TYPE") { Some(warc_type) => { if warc_type.as_str() != "response" { - return Some(Err(Error::WarcParse( - "Expected response, got something else", - ) - .into())); + return Some(Err(Error::Parse("Expected response, got something else"))); } } None => { - return Some(Err(Error::WarcParse( - "Expected response, got something else", - ) - .into())); + return Some(Err(Error::Parse("Expected response, got something else"))); } } @@ -483,27 +365,18 @@ impl Iterator for RecordIterator { match metadata.header.get("WARC-TYPE") { Some(warc_type) => { if warc_type.as_str() != "metadata" { - return Some(Err(Error::WarcParse( - "Expected metadata, got something else", - ) - .into())); + return Some(Err(Error::Parse("Expected metadata, got something else"))); } } None => { - return Some(Err(Error::WarcParse( - "Expected metadata, got something else", - ) - .into())); + return Some(Err(Error::Parse("Expected metadata, got something else"))); } } let metadata = Metadata::from_raw(metadata); if request.is_err() || response.is_err() || metadata.is_err() { - return Some(Err(Error::WarcParse( - "Request, response or metadata is error", - ) - .into())); + return Some(Err(Error::Parse("Request, response or metadata is error"))); } let request = request.unwrap(); From 73ba297e998a541f96f453ab98afa0f9d16120cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20B=C3=B8ving?= Date: Wed, 18 Oct 2023 23:01:28 +0200 Subject: [PATCH 17/54] Move hyperloglog into a crate --- Cargo.lock | 8 ++++++++ Cargo.toml | 1 + crates/core/Cargo.toml | 1 + crates/core/src/api/user_count.rs | 2 +- crates/core/src/crawler/site_graph.rs | 3 ++- crates/core/src/lib.rs | 1 - crates/core/src/webgraph/centrality/harmonic.rs | 2 +- crates/hyperloglog/Cargo.toml | 9 +++++++++ .../{core/src/hyperloglog.rs => hyperloglog/src/lib.rs} | 0 9 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 crates/hyperloglog/Cargo.toml rename crates/{core/src/hyperloglog.rs => hyperloglog/src/lib.rs} (100%) diff --git a/Cargo.lock b/Cargo.lock index f5f9bd34f..c247e219b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1793,6 +1793,13 @@ dependencies = [ "tokio-native-tls", ] +[[package]] +name = "hyperloglog" +version = "0.1.0" +dependencies = [ + "serde", +] + [[package]] name = "iana-time-zone" version = "0.1.57" @@ -4259,6 +4266,7 @@ dependencies = [ "half 2.3.1", "hashbrown 0.14.1", "http", + "hyperloglog", "image", "imager", "indicatif 0.17.7", diff --git a/Cargo.toml b/Cargo.toml index 8adf1b098..de7279f0f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,6 +42,7 @@ futures = "0.3.21" half = {version = "2.2.1", features = ["serde"]} hashbrown = {version = "0.14.0", features = ["serde", "rkyv"]} http = "0.2.8" +hyperloglog = { path = "./crates/hyperloglog" } image = "0.24.3" imager = { path = "./crates/imager" } indicatif = {version = "0.17.7", features = ["rayon"]} diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index caf17d3ba..ff28023e3 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -49,6 +49,7 @@ futures = {workspace = true} half = {workspace = true} hashbrown = {workspace = true} http = {workspace = true} +hyperloglog.workspace = true image = {workspace = true} imager.workspace = true indicatif = {workspace = true} diff --git a/crates/core/src/api/user_count.rs b/crates/core/src/api/user_count.rs index 96cdc3f7d..efc621d38 100644 --- a/crates/core/src/api/user_count.rs +++ b/crates/core/src/api/user_count.rs @@ -18,11 +18,11 @@ use std::sync::Arc; use anyhow::{anyhow, Result}; use chrono::{NaiveDateTime, Utc}; +use hyperloglog::HyperLogLog; use ring::rand::SecureRandom; use ring::{digest, pbkdf2, rand}; use std::sync::Mutex; -use crate::hyperloglog::HyperLogLog; use crate::metrics::Counter; pub trait Frequency: Clone + Copy + Default { diff --git a/crates/core/src/crawler/site_graph.rs b/crates/core/src/crawler/site_graph.rs index b13a1cffb..35581e963 100644 --- a/crates/core/src/crawler/site_graph.rs +++ b/crates/core/src/crawler/site_graph.rs @@ -17,9 +17,10 @@ //! In-memory graph that the worker constructs for the site during crawl. use hashbrown::{HashMap, HashSet}; +use hyperloglog::HyperLogLog; use url::Url; -use crate::{hyperloglog::HyperLogLog, kahan_sum::KahanSum}; +use crate::kahan_sum::KahanSum; #[derive(Clone, Debug, PartialEq, Eq, Hash)] pub struct Node { diff --git a/crates/core/src/lib.rs b/crates/core/src/lib.rs index 3545559e2..2f3f2e0cf 100644 --- a/crates/core/src/lib.rs +++ b/crates/core/src/lib.rs @@ -43,7 +43,6 @@ mod executor; mod fastfield_reader; pub mod feed; mod human_website_annotations; -pub mod hyperloglog; mod improvement; pub mod index; mod kahan_sum; diff --git a/crates/core/src/webgraph/centrality/harmonic.rs b/crates/core/src/webgraph/centrality/harmonic.rs index c5a0fc2b9..4f053e52a 100644 --- a/crates/core/src/webgraph/centrality/harmonic.rs +++ b/crates/core/src/webgraph/centrality/harmonic.rs @@ -22,10 +22,10 @@ use std::{ use std::sync::atomic::Ordering; use crate::bloom::BloomFilter; +use hyperloglog::HyperLogLog; use tracing::info; use crate::{ - hyperloglog::HyperLogLog, kahan_sum::KahanSum, webgraph::{NodeID, Webgraph}, }; diff --git a/crates/hyperloglog/Cargo.toml b/crates/hyperloglog/Cargo.toml new file mode 100644 index 000000000..f3e73815f --- /dev/null +++ b/crates/hyperloglog/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "hyperloglog" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +serde = { workspace = true, features = ["derive"] } diff --git a/crates/core/src/hyperloglog.rs b/crates/hyperloglog/src/lib.rs similarity index 100% rename from crates/core/src/hyperloglog.rs rename to crates/hyperloglog/src/lib.rs From a80632ceecc026b52d51bff847ee4980acedc65e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20B=C3=B8ving?= Date: Thu, 19 Oct 2023 08:12:10 +0200 Subject: [PATCH 18/54] Move webgraph and executor into two crates --- Cargo.lock | 41 +++++++++++++++ Cargo.toml | 5 +- crates/core/Cargo.toml | 4 +- crates/core/benches/build-similarity.rs | 3 +- crates/core/benches/harmonic-centrality.rs | 2 +- crates/core/benches/hyperloglog.rs | 2 +- crates/core/benches/similar-sites.rs | 6 +-- crates/core/examples/crawldb_insert.rs | 52 ------------------- crates/core/examples/print_inbound_links.rs | 6 +-- crates/core/examples/print_similar_sites.rs | 2 +- crates/core/src/api/docs.rs | 22 ++++---- crates/core/src/api/webgraph.rs | 6 +-- crates/core/src/crawler/file_queue.rs | 4 +- crates/core/src/crawler/planner.rs | 6 ++- crates/core/src/crawler/site_graph.rs | 3 +- crates/core/src/entrypoint/centrality.rs | 12 ++--- crates/core/src/entrypoint/crawler.rs | 2 +- crates/core/src/entrypoint/indexer.rs | 2 +- crates/core/src/entrypoint/webgraph.rs | 6 +-- crates/core/src/entrypoint/webgraph_server.rs | 6 +-- crates/core/src/feed/mod.rs | 2 +- crates/core/src/feed/scheduler.rs | 12 ++--- crates/core/src/index.rs | 2 +- crates/core/src/inverted_index.rs | 2 +- crates/core/src/lib.rs | 4 -- crates/core/src/main.rs | 2 +- crates/core/src/query/optic.rs | 6 +-- crates/core/src/ranking/inbound_similarity.rs | 16 +++--- crates/core/src/ranking/optics.rs | 6 +-- crates/core/src/ranking/query_centrality.rs | 2 +- crates/core/src/ranking/signal.rs | 2 +- crates/core/src/searcher/local.rs | 4 +- crates/core/src/similar_sites.rs | 7 +-- crates/core/src/webpage/mod.rs | 5 +- crates/executor/Cargo.toml | 13 +++++ .../src/executor.rs => executor/src/lib.rs} | 17 +++--- crates/webgraph/Cargo.toml | 32 ++++++++++++ crates/{core => webgraph}/src/bloom.rs | 0 .../src}/centrality/betweenness.rs | 8 +-- .../src}/centrality/derived_harmonic.rs | 5 +- .../src}/centrality/harmonic.rs | 19 +++---- .../src}/centrality/mod.rs | 0 crates/{core => webgraph}/src/kahan_sum.rs | 0 .../webgraph/mod.rs => webgraph/src/lib.rs} | 7 +-- .../src/webgraph => webgraph/src}/segment.rs | 2 +- .../src/webgraph => webgraph/src}/store.rs | 2 +- 46 files changed, 193 insertions(+), 176 deletions(-) delete mode 100644 crates/core/examples/crawldb_insert.rs create mode 100644 crates/executor/Cargo.toml rename crates/{core/src/executor.rs => executor/src/lib.rs} (93%) create mode 100644 crates/webgraph/Cargo.toml rename crates/{core => webgraph}/src/bloom.rs (100%) rename crates/{core/src/webgraph => webgraph/src}/centrality/betweenness.rs (96%) rename crates/{core/src/webgraph => webgraph/src}/centrality/derived_harmonic.rs (98%) rename crates/{core/src/webgraph => webgraph/src}/centrality/harmonic.rs (96%) rename crates/{core/src/webgraph => webgraph/src}/centrality/mod.rs (100%) rename crates/{core => webgraph}/src/kahan_sum.rs (100%) rename crates/{core/src/webgraph/mod.rs => webgraph/src/lib.rs} (99%) rename crates/{core/src/webgraph => webgraph/src}/segment.rs (99%) rename crates/{core/src/webgraph => webgraph/src}/store.rs (99%) diff --git a/Cargo.lock b/Cargo.lock index c247e219b..ff9c7421e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1261,6 +1261,17 @@ dependencies = [ "cc", ] +[[package]] +name = "executor" +version = "0.1.0" +dependencies = [ + "crossbeam-channel", + "num_cpus", + "rayon", + "thiserror", + "tracing", +] + [[package]] name = "exr" version = "1.6.4" @@ -4259,6 +4270,7 @@ dependencies = [ "distributed", "encoding_rs", "entity_index", + "executor", "fend-core", "flate2", "fst", @@ -4330,6 +4342,7 @@ dependencies = [ "utoipa-swagger-ui", "uuid", "warc", + "webgraph", "whatlang", ] @@ -5408,6 +5421,34 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webgraph" +version = "0.1.0" +dependencies = [ + "anyhow", + "bincode", + "bitvec", + "executor", + "hyperloglog", + "indicatif 0.17.7", + "intmap", + "itertools 0.11.0", + "kv", + "lz4_flex", + "maplit", + "md5", + "memmap2", + "rayon", + "rocksdb", + "serde", + "serde_json", + "stdx", + "tracing", + "url", + "utoipa", + "uuid", +] + [[package]] name = "weezl" version = "0.1.7" diff --git a/Cargo.toml b/Cargo.toml index de7279f0f..7baa435c9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,6 +35,7 @@ distributed = { path = "crates/distributed" } encoding_rs = "0.8.31" entity_index = { path = "./crates/entity_index" } eventsource-stream = "0.2.3" +executor = { path = "./crates/executor" } fend-core = "1.2.2" flate2 = "1.0.28" fst = {version = "0.4.7", features = ["levenshtein"]} @@ -98,7 +99,7 @@ scylla = { git = "https://github.com/scylladb/scylla-rust-driver", rev = "82c1c9 serde = {version = "1.0.137", features = ["rc", "derive"]} serde_json = "1.0.81" serde_urlencoded = "0.7.1" -sonice = { path = "./lib/sonic" } +sonic = { path = "./lib/sonic" } stdx = { path = "./crates/stdx" } tantivy = {git = "https://github.com/quickwit-oss/tantivy", rev = "182f58cea"} tch = "0.13.0" @@ -118,7 +119,9 @@ utoipa = {version = "4.0.0", features = ["axum_extras"]} utoipa-swagger-ui = {version = "4.0.0", features = ["axum"]} uuid = "1.1.2" warc = { path = "./crates/warc" } +webgraph = { path = "./crates/webgraph" } whatlang = "0.16.0" + [profile.test.package] flate2.opt-level = 3 diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index ff28023e3..b5e88b4f4 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -42,6 +42,7 @@ dashmap = {workspace = true} distributed.workspace = true encoding_rs = {workspace = true} entity_index.workspace = true +executor.workspace = true fend-core = {workspace = true} flate2 = {workspace = true} fst = {workspace = true} @@ -89,7 +90,7 @@ scylla = {workspace = true} serde = {workspace = true} serde_json = {workspace = true} serde_urlencoded = {workspace = true} -sonic = { version = "0.1.0", path = "../../lib/sonic" } +sonic.workspace = true stdx.workspace = true tantivy = {workspace = true} tch = {workspace = true, optional = true} @@ -108,6 +109,7 @@ utoipa = {workspace = true} utoipa-swagger-ui = {workspace = true} uuid = {workspace = true} warc.workspace = true +webgraph.workspace = true whatlang = {workspace = true} [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/crates/core/benches/build-similarity.rs b/crates/core/benches/build-similarity.rs index fbac03c15..0696d7ee4 100644 --- a/crates/core/benches/build-similarity.rs +++ b/crates/core/benches/build-similarity.rs @@ -1,5 +1,6 @@ use criterion::{criterion_group, criterion_main, Criterion}; -use stract::{ranking::inbound_similarity::InboundSimilarity, webgraph::WebgraphBuilder}; +use stract::ranking::inbound_similarity::InboundSimilarity; +use webgraph::WebgraphBuilder; const WEBGRAPH_PATH: &str = "data/webgraph"; diff --git a/crates/core/benches/harmonic-centrality.rs b/crates/core/benches/harmonic-centrality.rs index 33a6393d2..1ca932496 100644 --- a/crates/core/benches/harmonic-centrality.rs +++ b/crates/core/benches/harmonic-centrality.rs @@ -1,5 +1,5 @@ use criterion::{criterion_group, criterion_main, Criterion}; -use stract::webgraph::{centrality::harmonic::HarmonicCentrality, WebgraphBuilder}; +use webgraph::{centrality::harmonic::HarmonicCentrality, WebgraphBuilder}; const WEBGRAPH_PATH: &str = "data/webgraph"; diff --git a/crates/core/benches/hyperloglog.rs b/crates/core/benches/hyperloglog.rs index 2a1ca1d5b..cc341db43 100644 --- a/crates/core/benches/hyperloglog.rs +++ b/crates/core/benches/hyperloglog.rs @@ -1,5 +1,5 @@ use criterion::{criterion_group, criterion_main, Criterion}; -use stract::hyperloglog::HyperLogLog; +use hyperloglog::HyperLogLog; pub fn criterion_benchmark(c: &mut Criterion) { c.bench_function("Hyperloglog", |b| { diff --git a/crates/core/benches/similar-sites.rs b/crates/core/benches/similar-sites.rs index 9f1bf9fde..190c20267 100644 --- a/crates/core/benches/similar-sites.rs +++ b/crates/core/benches/similar-sites.rs @@ -1,10 +1,8 @@ use std::sync::Arc; use criterion::{criterion_group, criterion_main, Criterion}; -use stract::{ - ranking::inbound_similarity::InboundSimilarity, similar_sites::SimilarSitesFinder, - webgraph::WebgraphBuilder, -}; +use stract::{ranking::inbound_similarity::InboundSimilarity, similar_sites::SimilarSitesFinder}; +use webgraph::WebgraphBuilder; const WEBGRAPH_PATH: &str = "data/webgraph"; const INBOUND_SIMILARITY_PATH: &str = "data/centrality/inbound_similarity"; diff --git a/crates/core/examples/crawldb_insert.rs b/crates/core/examples/crawldb_insert.rs deleted file mode 100644 index 2639cf3ca..000000000 --- a/crates/core/examples/crawldb_insert.rs +++ /dev/null @@ -1,52 +0,0 @@ -use anyhow::Result; -use hashbrown::HashMap; -use stract::crawler::{crawl_db::CrawlDb, Domain, UrlString, UrlToInsert}; - -fn random_domains() -> Vec { - let mut domains = Vec::new(); - - for i in 0..1024 { - domains.push(format!("domain-{}", i)); - } - - domains -} - -fn random_urls(domain: &str) -> Vec { - let mut urls = Vec::new(); - - for i in 0..256 { - urls.push(format!("https://{domain}/{i}")); - } - - urls -} - -fn main() -> Result<()> { - let mut db = CrawlDb::open("data/crawldb")?; - - loop { - let domains = random_domains(); - - let mut urls = HashMap::new(); - - for domain in &domains { - let rand_urls = random_urls(domain); - - urls.insert( - Domain::from(domain.clone()), - rand_urls - .into_iter() - .map(|url| UrlToInsert { - url: UrlString(url), - weight: 1.0, - }) - .collect(), - ); - } - - let start = std::time::Instant::now(); - db.insert_urls(urls)?; - println!("inserted in {:?}", start.elapsed()); - } -} diff --git a/crates/core/examples/print_inbound_links.rs b/crates/core/examples/print_inbound_links.rs index dccdddd2d..1244b61e8 100644 --- a/crates/core/examples/print_inbound_links.rs +++ b/crates/core/examples/print_inbound_links.rs @@ -14,10 +14,8 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -use stract::{ - ranking::inbound_similarity::InboundSimilarity, - webgraph::{Node, WebgraphBuilder}, -}; +use stract::ranking::inbound_similarity::InboundSimilarity; +use webgraph::{Node, WebgraphBuilder}; pub fn main() { let graph = WebgraphBuilder::new("data/webgraph").open(); diff --git a/crates/core/examples/print_similar_sites.rs b/crates/core/examples/print_similar_sites.rs index fac809c69..6acb307a5 100644 --- a/crates/core/examples/print_similar_sites.rs +++ b/crates/core/examples/print_similar_sites.rs @@ -17,8 +17,8 @@ use stract::{ ranking::inbound_similarity::InboundSimilarity, similar_sites::{ScoredNode, SimilarSitesFinder}, - webgraph::WebgraphBuilder, }; +use webgraph::WebgraphBuilder; fn print_nodes(nodes: &[ScoredNode]) { for (i, node) in nodes.iter().enumerate() { diff --git a/crates/core/src/api/docs.rs b/crates/core/src/api/docs.rs index 0712ff70d..c386ff22f 100644 --- a/crates/core/src/api/docs.rs +++ b/crates/core/src/api/docs.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -use super::{autosuggest, explore, search, sites, summarize, webgraph}; +use super::{autosuggest, explore, search, sites, summarize}; use axum::Router; use utoipa::{Modify, OpenApi}; use utoipa_swagger_ui::SwaggerUi; @@ -23,12 +23,12 @@ use utoipa_swagger_ui::SwaggerUi; #[openapi( paths( search::api, - webgraph::host::similar, - webgraph::host::knows, - webgraph::host::ingoing_hosts, - webgraph::host::outgoing_hosts, - webgraph::page::ingoing_pages, - webgraph::page::outgoing_pages, + super::webgraph::host::similar, + super::webgraph::host::knows, + super::webgraph::host::ingoing_hosts, + super::webgraph::host::outgoing_hosts, + super::webgraph::page::ingoing_pages, + super::webgraph::page::outgoing_pages, autosuggest::route, summarize::summarize_route, sites::sites_export_optic, @@ -74,8 +74,8 @@ use utoipa_swagger_ui::SwaggerUi; crate::bangs::BangHit, crate::bangs::Bang, - webgraph::host::SimilarSitesParams, - webgraph::KnowsSite, + super::webgraph::host::SimilarSitesParams, + super::webgraph::KnowsSite, crate::entrypoint::webgraph_server::ScoredSite, autosuggest::Suggestion, @@ -83,8 +83,8 @@ use utoipa_swagger_ui::SwaggerUi; sites::SitesExportOpticParams, explore::ExploreExportOpticParams, - crate::webgraph::Node, - crate::webgraph::FullEdge, + webgraph::Node, + webgraph::FullEdge, ), ), modifiers(&ApiModifier), diff --git a/crates/core/src/api/webgraph.rs b/crates/core/src/api/webgraph.rs index a1974325b..208a15f1c 100644 --- a/crates/core/src/api/webgraph.rs +++ b/crates/core/src/api/webgraph.rs @@ -20,11 +20,9 @@ use axum::{extract, response::IntoResponse, Json}; use distributed::{cluster::Cluster, member::Service, retry_strategy::ExponentialBackoff}; use http::StatusCode; use utoipa::{IntoParams, ToSchema}; +use webgraph::{FullEdge, Node}; -use crate::{ - entrypoint::webgraph_server::GraphLevel, - webgraph::{FullEdge, Node}, -}; +use crate::entrypoint::webgraph_server::GraphLevel; use super::State; diff --git a/crates/core/src/crawler/file_queue.rs b/crates/core/src/crawler/file_queue.rs index 92883dae1..30094a6f8 100644 --- a/crates/core/src/crawler/file_queue.rs +++ b/crates/core/src/crawler/file_queue.rs @@ -184,7 +184,7 @@ mod tests { #[test] fn simple() { - let mut writer = FileQueueWriter::new(crate::gen_temp_path()).unwrap(); + let mut writer = FileQueueWriter::new(stdx::gen_temp_path()).unwrap(); writer.push("Hello".to_string()).unwrap(); writer.push("World".to_string()).unwrap(); @@ -201,7 +201,7 @@ mod tests { fn prop(data: Vec) { let expected = data.clone(); - let mut writer = FileQueueWriter::new(crate::gen_temp_path()).unwrap(); + let mut writer = FileQueueWriter::new(stdx::gen_temp_path()).unwrap(); for item in data { writer.push(item).unwrap(); diff --git a/crates/core/src/crawler/planner.rs b/crates/core/src/crawler/planner.rs index 52f1b3ecf..39c6656c1 100644 --- a/crates/core/src/crawler/planner.rs +++ b/crates/core/src/crawler/planner.rs @@ -23,12 +23,14 @@ use std::{ sync::{atomic::AtomicUsize, Mutex}, }; use url::Url; +use webgraph::{ + centrality::{top_hosts, TopHosts}, + NodeID, Webgraph, +}; -use crate::webgraph::centrality::{top_hosts, TopHosts}; use crate::{ config::CrawlPlannerConfig, crawler::{file_queue::FileQueueWriter, Job}, - webgraph::{NodeID, Webgraph}, }; use super::Domain; diff --git a/crates/core/src/crawler/site_graph.rs b/crates/core/src/crawler/site_graph.rs index 35581e963..61fc25761 100644 --- a/crates/core/src/crawler/site_graph.rs +++ b/crates/core/src/crawler/site_graph.rs @@ -19,8 +19,7 @@ use hashbrown::{HashMap, HashSet}; use hyperloglog::HyperLogLog; use url::Url; - -use crate::kahan_sum::KahanSum; +use webgraph::kahan_sum::KahanSum; #[derive(Clone, Debug, PartialEq, Eq, Hash)] pub struct Node { diff --git a/crates/core/src/entrypoint/centrality.rs b/crates/core/src/entrypoint/centrality.rs index 6423e3985..da764e17f 100644 --- a/crates/core/src/entrypoint/centrality.rs +++ b/crates/core/src/entrypoint/centrality.rs @@ -17,15 +17,13 @@ use anyhow::Result; use kv::{rocksdb_store::RocksDbStore, Kv}; use std::{cmp::Reverse, collections::BinaryHeap, fs::File, path::Path}; - -use crate::{ - ranking::inbound_similarity::InboundSimilarity, - webgraph::{ - centrality::{derived_harmonic::DerivedCentrality, harmonic::HarmonicCentrality}, - Node, WebgraphBuilder, - }, +use webgraph::{ + centrality::{derived_harmonic::DerivedCentrality, harmonic::HarmonicCentrality}, + Node, WebgraphBuilder, }; +use crate::ranking::inbound_similarity::InboundSimilarity; + fn store_csv>(data: Vec<(Node, f64)>, output: P) { let csv_file = File::options() .write(true) diff --git a/crates/core/src/entrypoint/crawler.rs b/crates/core/src/entrypoint/crawler.rs index 387a52709..775703386 100644 --- a/crates/core/src/entrypoint/crawler.rs +++ b/crates/core/src/entrypoint/crawler.rs @@ -19,11 +19,11 @@ use std::{net::SocketAddr, sync::Arc}; use kv::rocksdb_store::RocksDbStore; use serde::{Deserialize, Serialize}; use sonic::{service::Message, sonic_service}; +use webgraph::WebgraphBuilder; use crate::{ config, crawler::{self, planner::make_crawl_plan, CrawlCoordinator, Crawler}, - webgraph::WebgraphBuilder, Result, }; diff --git a/crates/core/src/entrypoint/indexer.rs b/crates/core/src/entrypoint/indexer.rs index ed7c3b316..e2899924f 100644 --- a/crates/core/src/entrypoint/indexer.rs +++ b/crates/core/src/entrypoint/indexer.rs @@ -24,13 +24,13 @@ use serde::{Deserialize, Serialize}; use tokio::pin; use tracing::{debug, info, trace, warn}; use warc::PayloadType; +use webgraph::{Node, NodeID, Webgraph, WebgraphBuilder}; use crate::config; use crate::entrypoint::download_all_warc_files; use crate::index::{FrozenIndex, Index}; use crate::mapreduce::{Map, Reduce, Worker}; use crate::ranking::SignalAggregator; -use crate::webgraph::{Node, NodeID, Webgraph, WebgraphBuilder}; use crate::webpage::{safety_classifier, Html, Webpage}; use crate::{human_website_annotations, Result}; diff --git a/crates/core/src/entrypoint/webgraph.rs b/crates/core/src/entrypoint/webgraph.rs index 69a6f7d51..6e6100325 100644 --- a/crates/core/src/entrypoint/webgraph.rs +++ b/crates/core/src/entrypoint/webgraph.rs @@ -18,7 +18,6 @@ use crate::{ config::{self, WebgraphConstructConfig}, entrypoint::download_all_warc_files, mapreduce::Worker, - webgraph::{self, Node, WebgraphWriter}, webpage::Html, Result, }; @@ -27,6 +26,7 @@ use serde::{Deserialize, Serialize}; use std::{fs, path::Path}; use tokio::pin; use tracing::{info, trace}; +use webgraph::{Node, WebgraphWriter}; #[derive(Debug, Serialize, Deserialize, Clone)] struct GraphPointer { @@ -69,7 +69,7 @@ pub struct Job { pub fn open_host_graph_writer>(path: P) -> webgraph::WebgraphWriter { WebgraphWriter::new( path, - crate::executor::Executor::single_thread(), + executor::Executor::single_thread(), webgraph::Compression::Lz4, ) } @@ -77,7 +77,7 @@ pub fn open_host_graph_writer>(path: P) -> webgraph::WebgraphWrit pub fn open_page_graph_writer>(path: P) -> webgraph::WebgraphWriter { WebgraphWriter::new( path, - crate::executor::Executor::single_thread(), + executor::Executor::single_thread(), webgraph::Compression::Lz4, ) } diff --git a/crates/core/src/entrypoint/webgraph_server.rs b/crates/core/src/entrypoint/webgraph_server.rs index 11804f145..1e39346d5 100644 --- a/crates/core/src/entrypoint/webgraph_server.rs +++ b/crates/core/src/entrypoint/webgraph_server.rs @@ -28,16 +28,12 @@ use sonic::{service::Message, sonic_service}; use tracing::info; use url::Url; use utoipa::ToSchema; +use webgraph::{Compression, FullEdge, Node, Webgraph, WebgraphBuilder}; use crate::config; use crate::ranking::inbound_similarity::InboundSimilarity; use crate::searcher::DistributedSearcher; use crate::similar_sites::SimilarSitesFinder; -use crate::webgraph::Compression; -use crate::webgraph::FullEdge; -use crate::webgraph::Node; -use crate::webgraph::Webgraph; -use crate::webgraph::WebgraphBuilder; use crate::Result; #[derive(serde::Serialize, serde::Deserialize, ToSchema)] diff --git a/crates/core/src/feed/mod.rs b/crates/core/src/feed/mod.rs index 87d8502f3..9f719d759 100644 --- a/crates/core/src/feed/mod.rs +++ b/crates/core/src/feed/mod.rs @@ -190,7 +190,7 @@ mod tests { #[test] fn feed_index() { - let mut index = FeedIndex::open(crate::gen_temp_path()).unwrap(); + let mut index = FeedIndex::open(stdx::gen_temp_path()).unwrap(); let a = Feed { url: Url::parse("https://a.com/feed.xml").unwrap(), diff --git a/crates/core/src/feed/scheduler.rs b/crates/core/src/feed/scheduler.rs index e09de31d6..496caa2c1 100644 --- a/crates/core/src/feed/scheduler.rs +++ b/crates/core/src/feed/scheduler.rs @@ -17,15 +17,13 @@ use hashbrown::{HashMap, HashSet}; use kv::rocksdb_store::RocksDbStore; use url::Url; - -use crate::{ - webgraph::{ - centrality::{top_hosts, TopHosts}, - NodeID, Webgraph, - }, - webpage::url_ext::UrlExt, +use webgraph::{ + centrality::{top_hosts, TopHosts}, + NodeID, Webgraph, }; +use crate::webpage::url_ext::UrlExt; + use super::{Feed, FeedIndex}; #[derive(Debug, Clone, PartialEq, Eq, Hash)] diff --git a/crates/core/src/index.rs b/crates/core/src/index.rs index ca32d25ae..062f91da7 100644 --- a/crates/core/src/index.rs +++ b/crates/core/src/index.rs @@ -23,6 +23,7 @@ use serde::{Deserialize, Serialize}; use tantivy::schema::Schema; use tantivy::tokenizer::TokenizerManager; use url::Url; +use webgraph::NodeID; use crate::collector::MainCollector; use crate::directory::{self, DirEntry}; @@ -30,7 +31,6 @@ use crate::inverted_index::{self, InvertedIndex}; use crate::query::Query; use crate::search_ctx::Ctx; use crate::subdomain_count::SubdomainCounter; -use crate::webgraph::NodeID; use crate::webpage::region::{Region, RegionCount}; use crate::webpage::Webpage; use crate::Result; diff --git a/crates/core/src/inverted_index.rs b/crates/core/src/inverted_index.rs index e1cb16fa7..cb3a1d507 100644 --- a/crates/core/src/inverted_index.rs +++ b/crates/core/src/inverted_index.rs @@ -37,6 +37,7 @@ use tokenizer::{ BigramTokenizer, Identity, JsonField, SiteOperatorUrlTokenizer, Tokenizer, TrigramTokenizer, }; use url::Url; +use webgraph::NodeID; use crate::collector::{Hashes, MainCollector}; use crate::config::SnippetConfig; @@ -51,7 +52,6 @@ use crate::schema::{FastField, Field, TextField, ALL_FIELDS}; use crate::search_ctx::Ctx; use crate::snippet; use crate::snippet::TextSnippet; -use crate::webgraph::NodeID; use crate::webpage::region::Region; use crate::webpage::{schema_org, Webpage}; use crate::Result; diff --git a/crates/core/src/lib.rs b/crates/core/src/lib.rs index 2f3f2e0cf..ece3d16d8 100644 --- a/crates/core/src/lib.rs +++ b/crates/core/src/lib.rs @@ -33,19 +33,16 @@ pub mod alice; mod api; mod autosuggest; mod bangs; -mod bloom; mod collector; pub mod config; pub mod crawler; mod directory; mod enum_map; -mod executor; mod fastfield_reader; pub mod feed; mod human_website_annotations; mod improvement; pub mod index; -mod kahan_sum; #[cfg(feature = "libtorch")] mod llm_utils; mod metrics; @@ -68,7 +65,6 @@ mod subdomain_count; pub mod summarizer; #[allow(unused)] mod ttl_cache; -pub mod webgraph; pub mod webpage; mod widgets; diff --git a/crates/core/src/main.rs b/crates/core/src/main.rs index 9876fcdd5..ad1c042f9 100644 --- a/crates/core/src/main.rs +++ b/crates/core/src/main.rs @@ -20,13 +20,13 @@ use std::fs; use std::path::Path; use stract::config; use stract::entrypoint::autosuggest_scrape::{self, Gl}; +use webgraph::WebgraphBuilder; #[cfg(feature = "dev")] use stract::entrypoint::configure; use stract::entrypoint::indexer::IndexPointer; use stract::entrypoint::{self, api, safety_classifier, search_server, webgraph_server}; -use stract::webgraph::WebgraphBuilder; use tracing_subscriber::prelude::*; #[cfg(not(target_env = "msvc"))] diff --git a/crates/core/src/query/optic.rs b/crates/core/src/query/optic.rs index c6a6eec99..584e311bc 100644 --- a/crates/core/src/query/optic.rs +++ b/crates/core/src/query/optic.rs @@ -234,12 +234,12 @@ impl AsTantivyQuery for Matching { #[cfg(test)] mod tests { use optics::{Optic, SiteRankings}; + use webgraph::{Node, WebgraphWriter}; use crate::{ index::Index, ranking::inbound_similarity::InboundSimilarity, searcher::{LocalSearcher, SearchQuery}, - webgraph::{Node, WebgraphWriter}, webpage::{Html, Webpage}, }; @@ -623,8 +623,8 @@ mod tests { let mut writer = WebgraphWriter::new( stdx::gen_temp_path(), - crate::executor::Executor::single_thread(), - crate::webgraph::Compression::default(), + executor::Executor::single_thread(), + webgraph::Compression::default(), ); writer.insert( diff --git a/crates/core/src/ranking/inbound_similarity.rs b/crates/core/src/ranking/inbound_similarity.rs index 913e08084..5e17b7af4 100644 --- a/crates/core/src/ranking/inbound_similarity.rs +++ b/crates/core/src/ranking/inbound_similarity.rs @@ -25,11 +25,9 @@ use dashmap::DashMap; use intmap::{IntMap, IntSet}; use rayon::prelude::ParallelIterator; use serde::{Deserialize, Serialize}; +use webgraph::{NodeID, Webgraph}; -use crate::{ - webgraph::{NodeID, Webgraph}, - Result, -}; +use crate::Result; use super::bitvec_similarity; @@ -215,12 +213,12 @@ impl InboundSimilarity { #[cfg(test)] mod tests { use optics::SiteRankings; + use webgraph::{Node, WebgraphWriter}; use crate::{ index::Index, rand_words, searcher::{LocalSearcher, SearchQuery}, - webgraph::{Node, WebgraphWriter}, webpage::{Html, Webpage}, }; @@ -230,8 +228,8 @@ mod tests { fn it_favors_liked_sites() { let mut wrt = WebgraphWriter::new( stdx::gen_temp_path(), - crate::executor::Executor::single_thread(), - crate::webgraph::Compression::default(), + executor::Executor::single_thread(), + webgraph::Compression::default(), ); wrt.insert(Node::from("a.com"), Node::from("b.com"), String::new()); @@ -259,8 +257,8 @@ mod tests { fn it_ranks_search_results() { let mut wrt = WebgraphWriter::new( stdx::gen_temp_path(), - crate::executor::Executor::single_thread(), - crate::webgraph::Compression::default(), + executor::Executor::single_thread(), + webgraph::Compression::default(), ); wrt.insert(Node::from("b.com"), Node::from("a.com"), String::new()); diff --git a/crates/core/src/ranking/optics.rs b/crates/core/src/ranking/optics.rs index 5c2da76e3..ddadb98a5 100644 --- a/crates/core/src/ranking/optics.rs +++ b/crates/core/src/ranking/optics.rs @@ -17,12 +17,12 @@ #[cfg(test)] mod tests { use optics::SiteRankings; + use webgraph::{Node, WebgraphWriter}; use crate::{ index::Index, ranking::inbound_similarity::InboundSimilarity, searcher::{LocalSearcher, SearchQuery}, - webgraph::{Node, WebgraphWriter}, webpage::{Html, Webpage}, }; const CONTENT: &str = "this is the best example website ever this is the best example website ever this is the best example website ever this is the best example website ever this is the best example website ever this is the best example website ever"; @@ -33,8 +33,8 @@ mod tests { let mut wrt = WebgraphWriter::new( stdx::gen_temp_path(), - crate::executor::Executor::single_thread(), - crate::webgraph::Compression::default(), + executor::Executor::single_thread(), + webgraph::Compression::default(), ); wrt.insert( diff --git a/crates/core/src/ranking/query_centrality.rs b/crates/core/src/ranking/query_centrality.rs index 1551b826b..a7fa381ee 100644 --- a/crates/core/src/ranking/query_centrality.rs +++ b/crates/core/src/ranking/query_centrality.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -use crate::webgraph::NodeID; +use webgraph::NodeID; use super::inbound_similarity; diff --git a/crates/core/src/ranking/signal.rs b/crates/core/src/ranking/signal.rs index 538a86606..09bd26026 100644 --- a/crates/core/src/ranking/signal.rs +++ b/crates/core/src/ranking/signal.rs @@ -22,7 +22,6 @@ use crate::{ enum_map::EnumMap, fastfield_reader, schema::{FastField, TextField}, - webgraph::NodeID, webpage::Webpage, }; use optics::ast::RankingTarget; @@ -37,6 +36,7 @@ use tantivy::query::{Query as _, Scorer}; use tantivy::tokenizer::Tokenizer; use thiserror::Error; use utoipa::ToSchema; +use webgraph::NodeID; use tantivy::DocSet; use tantivy::{DocId, Postings}; diff --git a/crates/core/src/searcher/local.rs b/crates/core/src/searcher/local.rs index ac89b128b..96a8c96d4 100644 --- a/crates/core/src/searcher/local.rs +++ b/crates/core/src/searcher/local.rs @@ -17,10 +17,12 @@ use std::collections::HashMap; use std::sync::Arc; +use entity_index::{EntityIndex, EntityMatch}; use imager::image_store::Image; use tantivy::schema::Value; use tantivy::TantivyDocument; use url::Url; +use webgraph::Node; use crate::config::{CollectorConfig, SnippetConfig}; use crate::index::Index; @@ -37,10 +39,8 @@ use crate::schema::TextField; use crate::search_ctx::Ctx; use crate::search_prettifier::{DisplayedEntity, DisplayedWebpage, HighlightedSpellCorrection}; use crate::spell::Spell; -use crate::webgraph::Node; use crate::webpage::region::Region; use crate::{inverted_index, Error, Result}; -use entity_index::{EntityIndex, EntityMatch}; use super::WebsitesResult; use super::{InitialWebsiteResult, SearchQuery}; diff --git a/crates/core/src/similar_sites.rs b/crates/core/src/similar_sites.rs index 45c75ff57..c9a1a6640 100644 --- a/crates/core/src/similar_sites.rs +++ b/crates/core/src/similar_sites.rs @@ -16,15 +16,12 @@ use intmap::{IntMap, IntSet}; use std::{cmp::Reverse, collections::BinaryHeap, sync::Arc}; +use webgraph::{Node, NodeID, Webgraph}; use hashbrown::HashSet; use url::Url; -use crate::{ - ranking::inbound_similarity::InboundSimilarity, - webgraph::{Node, NodeID, Webgraph}, - webpage::url_ext::UrlExt, -}; +use crate::{ranking::inbound_similarity::InboundSimilarity, webpage::url_ext::UrlExt}; #[derive(serde::Serialize, serde::Deserialize, Debug)] pub struct ScoredNode { diff --git a/crates/core/src/webpage/mod.rs b/crates/core/src/webpage/mod.rs index bb7129c37..666432ff4 100644 --- a/crates/core/src/webpage/mod.rs +++ b/crates/core/src/webpage/mod.rs @@ -17,9 +17,7 @@ use crate::{ enum_map::EnumSet, prehashed::hash, schema::{FastField, TextField}, - simhash, - webgraph::NodeID, - Error, Result, + simhash, Error, Result, }; use chrono::{DateTime, FixedOffset, Utc}; use itertools::Itertools; @@ -31,6 +29,7 @@ use tantivy::{ TantivyDocument, }; use url::Url; +use webgraph::NodeID; use whatlang::Lang; mod just_text; diff --git a/crates/executor/Cargo.toml b/crates/executor/Cargo.toml new file mode 100644 index 000000000..8d7d5c780 --- /dev/null +++ b/crates/executor/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "executor" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +crossbeam-channel.workspace = true +num_cpus.workspace = true +rayon.workspace = true +thiserror.workspace = true +tracing.workspace = true diff --git a/crates/core/src/executor.rs b/crates/executor/src/lib.rs similarity index 93% rename from crates/core/src/executor.rs rename to crates/executor/src/lib.rs index 597ae0697..03cad4fd1 100644 --- a/crates/core/src/executor.rs +++ b/crates/executor/src/lib.rs @@ -14,11 +14,19 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -use crate::{Error, Result}; - use crossbeam_channel::unbounded; use rayon::{ThreadPool, ThreadPoolBuilder}; +#[derive(thiserror::Error, Debug)] +pub enum Error { + #[error("At least one of the scheduled jobs failed")] + AtLeastOneOfTheScheduledJobsFailed, + #[error("Rayon thread pool error")] + Rayon(#[from] rayon::ThreadPoolBuildError), +} + +pub type Result = std::result::Result; + pub enum Executor { #[allow(unused)] SingleThread, @@ -88,10 +96,7 @@ impl Executor { let results: Vec = result_placeholders.into_iter().flatten().collect(); if results.len() != num_jobs { - return Err(Error::InternalError( - "At least one of the scheduled jobs failed.".to_string(), - ) - .into()); + return Err(Error::AtLeastOneOfTheScheduledJobsFailed); } Ok(results) diff --git a/crates/webgraph/Cargo.toml b/crates/webgraph/Cargo.toml new file mode 100644 index 000000000..59ef5a74b --- /dev/null +++ b/crates/webgraph/Cargo.toml @@ -0,0 +1,32 @@ +[package] +name = "webgraph" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +anyhow.workspace = true +bincode.workspace = true +bitvec.workspace = true +executor = { version = "0.1.0", path = "../executor" } +hyperloglog.workspace = true +indicatif.workspace = true +intmap.workspace = true +itertools.workspace = true +kv.workspace = true +lz4_flex.workspace = true +md5.workspace = true +memmap2.workspace = true +rayon.workspace = true +rocksdb.workspace = true +serde = { workspace = true, features = ["derive"] } +serde_json.workspace = true +stdx.workspace = true +tracing.workspace = true +url.workspace = true +utoipa.workspace = true +uuid.workspace = true + +[dev-dependencies] +maplit.workspace = true diff --git a/crates/core/src/bloom.rs b/crates/webgraph/src/bloom.rs similarity index 100% rename from crates/core/src/bloom.rs rename to crates/webgraph/src/bloom.rs diff --git a/crates/core/src/webgraph/centrality/betweenness.rs b/crates/webgraph/src/centrality/betweenness.rs similarity index 96% rename from crates/core/src/webgraph/centrality/betweenness.rs rename to crates/webgraph/src/centrality/betweenness.rs index 36bcd0998..093c0d919 100644 --- a/crates/core/src/webgraph/centrality/betweenness.rs +++ b/crates/webgraph/src/centrality/betweenness.rs @@ -23,7 +23,7 @@ use indicatif::{ProgressBar, ProgressStyle}; use intmap::IntMap; use serde::{Deserialize, Serialize}; -use crate::webgraph::{Node, NodeID, Webgraph}; +use crate::{Node, NodeID, Webgraph}; fn calculate(graph: &Webgraph, with_progress: bool) -> (HashMap, i32) { let mut centrality: HashMap = HashMap::new(); @@ -162,15 +162,15 @@ impl Betweenness { mod tests { use maplit::hashmap; - use crate::webgraph::WebgraphWriter; + use crate::WebgraphWriter; use super::*; fn create_path_graph(n: usize) -> Webgraph { let mut writer = WebgraphWriter::new( stdx::gen_temp_path(), - crate::executor::Executor::single_thread(), - crate::webgraph::Compression::default(), + executor::Executor::single_thread(), + crate::Compression::default(), ); for i in 0..n - 1 { diff --git a/crates/core/src/webgraph/centrality/derived_harmonic.rs b/crates/webgraph/src/centrality/derived_harmonic.rs similarity index 98% rename from crates/core/src/webgraph/centrality/derived_harmonic.rs rename to crates/webgraph/src/centrality/derived_harmonic.rs index b74b1a0df..eb6ba8930 100644 --- a/crates/core/src/webgraph/centrality/derived_harmonic.rs +++ b/crates/webgraph/src/centrality/derived_harmonic.rs @@ -23,10 +23,7 @@ use kv::{rocksdb_store::RocksDbStore, Kv}; use rayon::prelude::*; use std::{collections::BTreeMap, path::Path, sync::Mutex}; -use crate::{ - bloom::BloomFilter, - webgraph::{NodeID, Webgraph}, -}; +use crate::{bloom::BloomFilter, NodeID, Webgraph}; struct BloomMap { map: Vec>, diff --git a/crates/core/src/webgraph/centrality/harmonic.rs b/crates/webgraph/src/centrality/harmonic.rs similarity index 96% rename from crates/core/src/webgraph/centrality/harmonic.rs rename to crates/webgraph/src/centrality/harmonic.rs index 4f053e52a..ed146d8bb 100644 --- a/crates/core/src/webgraph/centrality/harmonic.rs +++ b/crates/webgraph/src/centrality/harmonic.rs @@ -25,10 +25,7 @@ use crate::bloom::BloomFilter; use hyperloglog::HyperLogLog; use tracing::info; -use crate::{ - kahan_sum::KahanSum, - webgraph::{NodeID, Webgraph}, -}; +use crate::{kahan_sum::KahanSum, NodeID, Webgraph}; const HYPERLOGLOG_COUNTERS: usize = 64; @@ -192,7 +189,7 @@ impl HarmonicCentrality { #[cfg(test)] mod tests { use super::*; - use crate::webgraph::{Node, WebgraphWriter}; + use crate::{Node, WebgraphWriter}; fn test_edges() -> Vec<(Node, Node, String)> { // ┌────┐ @@ -217,8 +214,8 @@ mod tests { fn test_graph() -> Webgraph { let mut writer = WebgraphWriter::new( stdx::gen_temp_path(), - crate::executor::Executor::single_thread(), - crate::webgraph::Compression::default(), + executor::Executor::single_thread(), + crate::Compression::default(), ); for (from, to, label) in test_edges() { @@ -232,8 +229,8 @@ mod tests { fn host_harmonic_centrality() { let mut writer = WebgraphWriter::new( stdx::gen_temp_path(), - crate::executor::Executor::single_thread(), - crate::webgraph::Compression::default(), + executor::Executor::single_thread(), + crate::Compression::default(), ); writer.insert( @@ -340,8 +337,8 @@ mod tests { let mut other = WebgraphWriter::new( stdx::gen_temp_path(), - crate::executor::Executor::single_thread(), - crate::webgraph::Compression::default(), + executor::Executor::single_thread(), + crate::Compression::default(), ); for (from, to, label) in test_edges() { diff --git a/crates/core/src/webgraph/centrality/mod.rs b/crates/webgraph/src/centrality/mod.rs similarity index 100% rename from crates/core/src/webgraph/centrality/mod.rs rename to crates/webgraph/src/centrality/mod.rs diff --git a/crates/core/src/kahan_sum.rs b/crates/webgraph/src/kahan_sum.rs similarity index 100% rename from crates/core/src/kahan_sum.rs rename to crates/webgraph/src/kahan_sum.rs diff --git a/crates/core/src/webgraph/mod.rs b/crates/webgraph/src/lib.rs similarity index 99% rename from crates/core/src/webgraph/mod.rs rename to crates/webgraph/src/lib.rs index cd851c711..f6d55a5b8 100644 --- a/crates/core/src/webgraph/mod.rs +++ b/crates/webgraph/src/lib.rs @@ -13,6 +13,7 @@ // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . +mod bloom; mod segment; use std::collections::{BTreeMap, BinaryHeap}; @@ -22,13 +23,13 @@ use std::path::Path; use std::sync::Arc; use std::{cmp, fs}; +use executor::Executor; use rayon::prelude::*; use url::Url; use utoipa::ToSchema; -use crate::executor::Executor; - pub mod centrality; +pub mod kahan_sum; mod store; use self::segment::{Segment, SegmentWriter}; @@ -992,7 +993,7 @@ mod test { #[test] fn edges_by_host() { let mut writer = WebgraphWriter::new( - crate::gen_temp_path(), + stdx::gen_temp_path(), Executor::single_thread(), Compression::default(), ); diff --git a/crates/core/src/webgraph/segment.rs b/crates/webgraph/src/segment.rs similarity index 99% rename from crates/core/src/webgraph/segment.rs rename to crates/webgraph/src/segment.rs index 093457c77..21647ea63 100644 --- a/crates/core/src/webgraph/segment.rs +++ b/crates/webgraph/src/segment.rs @@ -151,7 +151,7 @@ impl Segment { #[cfg(test)] mod test { - use crate::webgraph::FullNodeID; + use crate::FullNodeID; use super::*; diff --git a/crates/core/src/webgraph/store.rs b/crates/webgraph/src/store.rs similarity index 99% rename from crates/core/src/webgraph/store.rs rename to crates/webgraph/src/store.rs index 32a97dfe7..b9d979e30 100644 --- a/crates/core/src/webgraph/store.rs +++ b/crates/webgraph/src/store.rs @@ -594,7 +594,7 @@ impl EdgeStore { #[cfg(test)] mod tests { - use crate::webgraph::FullNodeID; + use crate::FullNodeID; use super::*; From 167dc3b1a2c5d32a5738acf9ca2445956fe59f49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20B=C3=B8ving?= Date: Thu, 19 Oct 2023 08:17:35 +0200 Subject: [PATCH 19/54] Move enum_map and intmap into stdx --- Cargo.lock | 12 +++--------- Cargo.toml | 1 - crates/core/Cargo.toml | 1 - crates/core/src/fastfield_reader.rs | 6 ++---- crates/core/src/lib.rs | 1 - crates/core/src/naive_bayes.rs | 2 +- crates/core/src/ranking/inbound_similarity.rs | 2 +- crates/core/src/ranking/models/lambdamart.rs | 6 ++---- crates/core/src/ranking/models/linear.rs | 2 +- crates/core/src/ranking/pipeline.rs | 2 +- crates/core/src/ranking/signal.rs | 2 +- crates/core/src/similar_sites.rs | 2 +- crates/core/src/webpage/mod.rs | 2 +- crates/stdx/Cargo.toml | 1 + crates/{core => stdx}/src/enum_map.rs | 0 lib/intmap/src/lib.rs => crates/stdx/src/intmap.rs | 0 crates/stdx/src/lib.rs | 3 +++ crates/webgraph/Cargo.toml | 1 - crates/webgraph/src/centrality/betweenness.rs | 2 +- crates/webgraph/src/lib.rs | 1 + lib/intmap/Cargo.toml | 9 --------- 21 files changed, 20 insertions(+), 38 deletions(-) rename crates/{core => stdx}/src/enum_map.rs (100%) rename lib/intmap/src/lib.rs => crates/stdx/src/intmap.rs (100%) delete mode 100644 lib/intmap/Cargo.toml diff --git a/Cargo.lock b/Cargo.lock index ff9c7421e..2748e7a81 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1990,13 +1990,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "intmap" -version = "0.1.0" -dependencies = [ - "serde", -] - [[package]] name = "ipnet" version = "2.8.0" @@ -4243,6 +4236,9 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "stdx" version = "0.1.0" +dependencies = [ + "serde", +] [[package]] name = "stract" @@ -4282,7 +4278,6 @@ dependencies = [ "image", "imager", "indicatif 0.17.7", - "intmap", "itertools 0.11.0", "kuchiki", "kv", @@ -5431,7 +5426,6 @@ dependencies = [ "executor", "hyperloglog", "indicatif 0.17.7", - "intmap", "itertools 0.11.0", "kv", "lz4_flex", diff --git a/Cargo.toml b/Cargo.toml index 7baa435c9..a79941f08 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -48,7 +48,6 @@ image = "0.24.3" imager = { path = "./crates/imager" } indicatif = {version = "0.17.7", features = ["rayon"]} insta = "1.31" -intmap = { path = "lib/intmap" } itertools = "0.11.0" kuchiki = { path = "./lib/kuchiki" } kv = { path = "./crates/kv" } diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index b5e88b4f4..89cefd66e 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -54,7 +54,6 @@ hyperloglog.workspace = true image = {workspace = true} imager.workspace = true indicatif = {workspace = true} -intmap.workspace = true itertools = {workspace = true} kuchiki = {workspace = true} kv.workspace = true diff --git a/crates/core/src/fastfield_reader.rs b/crates/core/src/fastfield_reader.rs index 0fa273e11..19384296d 100644 --- a/crates/core/src/fastfield_reader.rs +++ b/crates/core/src/fastfield_reader.rs @@ -16,12 +16,10 @@ use std::{collections::HashMap, sync::Arc}; +use stdx::enum_map::EnumMap; use tantivy::{columnar::ColumnValues, DocId, SegmentId}; -use crate::{ - enum_map::EnumMap, - schema::{DataType, FastField, ALL_FIELDS}, -}; +use crate::schema::{DataType, FastField, ALL_FIELDS}; #[derive(Default, Clone)] struct InnerFastFieldReader { diff --git a/crates/core/src/lib.rs b/crates/core/src/lib.rs index ece3d16d8..e7fbb4046 100644 --- a/crates/core/src/lib.rs +++ b/crates/core/src/lib.rs @@ -37,7 +37,6 @@ mod collector; pub mod config; pub mod crawler; mod directory; -mod enum_map; mod fastfield_reader; pub mod feed; mod human_website_annotations; diff --git a/crates/core/src/naive_bayes.rs b/crates/core/src/naive_bayes.rs index cda6dea34..78c08b8cb 100644 --- a/crates/core/src/naive_bayes.rs +++ b/crates/core/src/naive_bayes.rs @@ -15,9 +15,9 @@ // along with this program. If not, see . use hashbrown::{HashMap, HashSet}; -use intmap::IntMap; use itertools::Itertools; use std::hash::Hash; +use stdx::intmap::IntMap; /// Laplace smoothing factor const ALPHA: f32 = 1.0; diff --git a/crates/core/src/ranking/inbound_similarity.rs b/crates/core/src/ranking/inbound_similarity.rs index 5e17b7af4..6a7f55ac0 100644 --- a/crates/core/src/ranking/inbound_similarity.rs +++ b/crates/core/src/ranking/inbound_similarity.rs @@ -22,9 +22,9 @@ use std::{ }; use dashmap::DashMap; -use intmap::{IntMap, IntSet}; use rayon::prelude::ParallelIterator; use serde::{Deserialize, Serialize}; +use stdx::intmap::{IntMap, IntSet}; use webgraph::{NodeID, Webgraph}; use crate::Result; diff --git a/crates/core/src/ranking/models/lambdamart.rs b/crates/core/src/ranking/models/lambdamart.rs index 2a8019ae5..1502acfdb 100644 --- a/crates/core/src/ranking/models/lambdamart.rs +++ b/crates/core/src/ranking/models/lambdamart.rs @@ -15,11 +15,9 @@ // along with this program. If not, see . use std::{path::Path, str::FromStr}; +use stdx::enum_map::EnumMap; -use crate::{ - enum_map::EnumMap, - ranking::{signal, Signal}, -}; +use crate::ranking::{signal, Signal}; type Result = std::result::Result; diff --git a/crates/core/src/ranking/models/linear.rs b/crates/core/src/ranking/models/linear.rs index 81ed458e9..e9fdc482f 100644 --- a/crates/core/src/ranking/models/linear.rs +++ b/crates/core/src/ranking/models/linear.rs @@ -17,8 +17,8 @@ use std::fs::File; use std::io::BufReader; use std::{collections::HashMap, path::Path}; +use stdx::enum_map::EnumMap; -use crate::enum_map::EnumMap; use crate::ranking::Signal; use crate::Result; diff --git a/crates/core/src/ranking/pipeline.rs b/crates/core/src/ranking/pipeline.rs index e952bb1bc..427c48ff6 100644 --- a/crates/core/src/ranking/pipeline.rs +++ b/crates/core/src/ranking/pipeline.rs @@ -17,11 +17,11 @@ use std::sync::Arc; use serde::{Deserialize, Serialize}; +use stdx::enum_map::EnumMap; use crate::{ collector::{self, BucketCollector}, config::CollectorConfig, - enum_map::EnumMap, inverted_index::WebsitePointer, searcher::SearchQuery, Result, diff --git a/crates/core/src/ranking/signal.rs b/crates/core/src/ranking/signal.rs index 09bd26026..028f80ef6 100644 --- a/crates/core/src/ranking/signal.rs +++ b/crates/core/src/ranking/signal.rs @@ -19,7 +19,6 @@ use crate::query::optic::AsSearchableRule; use crate::query::Query; use crate::Result; use crate::{ - enum_map::EnumMap, fastfield_reader, schema::{FastField, TextField}, webpage::Webpage, @@ -30,6 +29,7 @@ use serde::{Deserialize, Serialize}; use std::cell::RefCell; use std::str::FromStr; use std::sync::Arc; +use stdx::enum_map::EnumMap; use tantivy::fieldnorm::FieldNormReader; use tantivy::postings::SegmentPostings; use tantivy::query::{Query as _, Scorer}; diff --git a/crates/core/src/similar_sites.rs b/crates/core/src/similar_sites.rs index c9a1a6640..ca9d83b93 100644 --- a/crates/core/src/similar_sites.rs +++ b/crates/core/src/similar_sites.rs @@ -14,8 +14,8 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -use intmap::{IntMap, IntSet}; use std::{cmp::Reverse, collections::BinaryHeap, sync::Arc}; +use stdx::intmap::{IntMap, IntSet}; use webgraph::{Node, NodeID, Webgraph}; use hashbrown::HashSet; diff --git a/crates/core/src/webpage/mod.rs b/crates/core/src/webpage/mod.rs index 666432ff4..f4bc204c9 100644 --- a/crates/core/src/webpage/mod.rs +++ b/crates/core/src/webpage/mod.rs @@ -14,7 +14,6 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . use crate::{ - enum_map::EnumSet, prehashed::hash, schema::{FastField, TextField}, simhash, Error, Result, @@ -24,6 +23,7 @@ use itertools::Itertools; use kuchiki::{iter::NodeEdge, traits::TendrilSink, NodeRef}; use regex::Regex; use std::{collections::HashMap, panic, str::FromStr}; +use stdx::enum_map::EnumSet; use tantivy::{ tokenizer::{PreTokenizedString, Tokenizer}, TantivyDocument, diff --git a/crates/stdx/Cargo.toml b/crates/stdx/Cargo.toml index 7b13d49d8..ebda234b1 100644 --- a/crates/stdx/Cargo.toml +++ b/crates/stdx/Cargo.toml @@ -6,3 +6,4 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +serde = { workspace = true, features = ["derive"] } diff --git a/crates/core/src/enum_map.rs b/crates/stdx/src/enum_map.rs similarity index 100% rename from crates/core/src/enum_map.rs rename to crates/stdx/src/enum_map.rs diff --git a/lib/intmap/src/lib.rs b/crates/stdx/src/intmap.rs similarity index 100% rename from lib/intmap/src/lib.rs rename to crates/stdx/src/intmap.rs diff --git a/crates/stdx/src/lib.rs b/crates/stdx/src/lib.rs index 134ffd7ca..33f1b2375 100644 --- a/crates/stdx/src/lib.rs +++ b/crates/stdx/src/lib.rs @@ -1,3 +1,6 @@ +pub mod enum_map; +pub mod intmap; + use std::path::PathBuf; // taken from https://docs.rs/sled/0.34.7/src/sled/config.rs.html#445 diff --git a/crates/webgraph/Cargo.toml b/crates/webgraph/Cargo.toml index 59ef5a74b..0cec5f240 100644 --- a/crates/webgraph/Cargo.toml +++ b/crates/webgraph/Cargo.toml @@ -12,7 +12,6 @@ bitvec.workspace = true executor = { version = "0.1.0", path = "../executor" } hyperloglog.workspace = true indicatif.workspace = true -intmap.workspace = true itertools.workspace = true kv.workspace = true lz4_flex.workspace = true diff --git a/crates/webgraph/src/centrality/betweenness.rs b/crates/webgraph/src/centrality/betweenness.rs index 093c0d919..4262cc541 100644 --- a/crates/webgraph/src/centrality/betweenness.rs +++ b/crates/webgraph/src/centrality/betweenness.rs @@ -20,8 +20,8 @@ use std::collections::{HashMap, VecDeque}; use indicatif::{ProgressBar, ProgressStyle}; -use intmap::IntMap; use serde::{Deserialize, Serialize}; +use stdx::intmap::IntMap; use crate::{Node, NodeID, Webgraph}; diff --git a/crates/webgraph/src/lib.rs b/crates/webgraph/src/lib.rs index f6d55a5b8..fb9543adc 100644 --- a/crates/webgraph/src/lib.rs +++ b/crates/webgraph/src/lib.rs @@ -25,6 +25,7 @@ use std::{cmp, fs}; use executor::Executor; use rayon::prelude::*; +use stdx::intmap; use url::Url; use utoipa::ToSchema; diff --git a/lib/intmap/Cargo.toml b/lib/intmap/Cargo.toml deleted file mode 100644 index 2f14e426d..000000000 --- a/lib/intmap/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "intmap" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -serde = { workspace = true, features = ["derive"] } From 67f2c4ccbf7ed7f49caabf7f86a49a5459f6f4f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20B=C3=B8ving?= Date: Thu, 19 Oct 2023 08:25:18 +0200 Subject: [PATCH 20/54] Move schema into a crate --- Cargo.lock | 10 ++++++++++ Cargo.toml | 1 + crates/core/Cargo.toml | 1 + crates/core/src/collector.rs | 3 +-- crates/core/src/inverted_index.rs | 6 +++--- crates/core/src/lib.rs | 2 -- crates/core/src/query/mod.rs | 2 +- crates/core/src/query/optic.rs | 3 +-- crates/core/src/query/parser.rs | 6 ++---- crates/core/src/query/pattern_query.rs | 11 +++++------ crates/core/src/ranking/initial.rs | 2 +- crates/core/src/ranking/mod.rs | 4 ++-- crates/core/src/ranking/signal.rs | 17 +++++++---------- crates/core/src/search_ctx.rs | 2 +- crates/core/src/searcher/local.rs | 2 +- crates/core/src/spell/mod.rs | 2 +- crates/core/src/webpage/mod.rs | 12 ++++-------- crates/schema/Cargo.toml | 11 +++++++++++ crates/{core => schema}/src/fastfield_reader.rs | 2 +- .../{core/src/schema.rs => schema/src/lib.rs} | 2 ++ 20 files changed, 56 insertions(+), 45 deletions(-) create mode 100644 crates/schema/Cargo.toml rename crates/{core => schema}/src/fastfield_reader.rs (98%) rename crates/{core/src/schema.rs => schema/src/lib.rs} (99%) diff --git a/Cargo.lock b/Cargo.lock index 2748e7a81..017b6db47 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3842,6 +3842,15 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "schema" +version = "0.1.0" +dependencies = [ + "stdx", + "tantivy", + "tokenizer", +] + [[package]] name = "scoped-tls" version = "1.0.1" @@ -4313,6 +4322,7 @@ dependencies = [ "rust-s3", "rust-stemmers", "safetensors", + "schema", "scylla", "serde", "serde_json", diff --git a/Cargo.toml b/Cargo.toml index a79941f08..1ce874a28 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -94,6 +94,7 @@ rusqlite = {version = "0.29.0", features = [ rust-s3 = {version = "0.33.0", features = ["blocking", "tokio"]} rust-stemmers = "1.2.0" safetensors = "0.3.1" +schema = { path = "./crates/schema" } scylla = { git = "https://github.com/scylladb/scylla-rust-driver", rev = "82c1c99f0ff86509f9dd1e649ecdaddc5a3660cf" } serde = {version = "1.0.137", features = ["rc", "derive"]} serde_json = "1.0.81" diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index 89cefd66e..1f850a540 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -85,6 +85,7 @@ rocksdb = {workspace = true} rust-s3 = {workspace = true} rust-stemmers = {workspace = true} safetensors = {workspace = true} +schema.workspace = true scylla = {workspace = true} serde = {workspace = true} serde_json = {workspace = true} diff --git a/crates/core/src/collector.rs b/crates/core/src/collector.rs index 1ad7a4b2a..b1e1ddcb9 100644 --- a/crates/core/src/collector.rs +++ b/crates/core/src/collector.rs @@ -17,6 +17,7 @@ use std::{collections::HashMap, sync::Arc}; use min_max_heap::MinMaxHeap; +use schema::{fastfield_reader, FastField}; use serde::{Deserialize, Serialize}; use tantivy::{ collector::{Collector, ScoreSegmentTweaker, ScoreTweaker, SegmentCollector}, @@ -25,11 +26,9 @@ use tantivy::{ use crate::{ config::CollectorConfig, - fastfield_reader, inverted_index::{DocAddress, WebsitePointer}, prehashed::Prehashed, ranking::initial::{InitialScoreTweaker, Score}, - schema::FastField, simhash, }; diff --git a/crates/core/src/inverted_index.rs b/crates/core/src/inverted_index.rs index cb3a1d507..82f2b471f 100644 --- a/crates/core/src/inverted_index.rs +++ b/crates/core/src/inverted_index.rs @@ -26,6 +26,9 @@ //! This allows us to perform more advanced queries than just term lookups, //! but the principle is the same. use chrono::NaiveDateTime; +use schema::{ + create_schema, fastfield_reader::FastFieldReader, FastField, Field, TextField, ALL_FIELDS, +}; use serde::{Deserialize, Serialize}; use tantivy::collector::Count; use tantivy::directory::MmapDirectory; @@ -41,14 +44,11 @@ use webgraph::NodeID; use crate::collector::{Hashes, MainCollector}; use crate::config::SnippetConfig; -use crate::fastfield_reader::FastFieldReader; use crate::query::shortcircuit::ShortCircuitQuery; use crate::query::Query; use crate::ranking::initial::Score; use crate::ranking::pipeline::RankingWebsite; use crate::ranking::SignalAggregator; -use crate::schema::create_schema; -use crate::schema::{FastField, Field, TextField, ALL_FIELDS}; use crate::search_ctx::Ctx; use crate::snippet; use crate::snippet::TextSnippet; diff --git a/crates/core/src/lib.rs b/crates/core/src/lib.rs index e7fbb4046..f009e3113 100644 --- a/crates/core/src/lib.rs +++ b/crates/core/src/lib.rs @@ -37,7 +37,6 @@ mod collector; pub mod config; pub mod crawler; mod directory; -mod fastfield_reader; pub mod feed; mod human_website_annotations; mod improvement; @@ -51,7 +50,6 @@ pub mod prehashed; mod qa_model; mod query; pub mod ranking; -mod schema; mod search_ctx; mod search_prettifier; pub mod searcher; diff --git a/crates/core/src/query/mod.rs b/crates/core/src/query/mod.rs index c1066cc61..e703ac6c6 100644 --- a/crates/core/src/query/mod.rs +++ b/crates/core/src/query/mod.rs @@ -18,13 +18,13 @@ use crate::{ inverted_index::InvertedIndex, query::parser::TermCompound, ranking::SignalCoefficient, - schema::{Field, TextField}, search_ctx::Ctx, searcher::SearchQuery, webpage::{region::Region, safety_classifier}, Result, }; use optics::{Optic, SiteRankings}; +use schema::{Field, TextField}; use std::collections::HashMap; use tantivy::query::{BooleanQuery, Occur, QueryClone, TermQuery}; diff --git a/crates/core/src/query/optic.rs b/crates/core/src/query/optic.rs index 584e311bc..800280aea 100644 --- a/crates/core/src/query/optic.rs +++ b/crates/core/src/query/optic.rs @@ -16,13 +16,12 @@ use itertools::Itertools; use optics::{Action, MatchLocation, Matching, Optic, Rule}; +use schema::{fastfield_reader::FastFieldReader, TextField}; use tantivy::{ query::{BooleanQuery, Occur, QueryClone}, schema::Schema, }; -use crate::{fastfield_reader::FastFieldReader, schema::TextField}; - use super::{const_query::ConstQuery, pattern_query::PatternQuery, union::UnionQuery}; pub trait AsTantivyQuery { diff --git a/crates/core/src/query/parser.rs b/crates/core/src/query/parser.rs index 1ef973a0c..de1df9ce7 100644 --- a/crates/core/src/query/parser.rs +++ b/crates/core/src/query/parser.rs @@ -14,15 +14,13 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . +use schema::{Field, TextField, ALL_FIELDS}; use tantivy::{ query::{BooleanQuery, Occur, PhraseQuery, TermQuery}, tokenizer::Tokenizer, }; -use crate::{ - bangs::BANG_PREFIX, - schema::{Field, TextField, ALL_FIELDS}, -}; +use crate::bangs::BANG_PREFIX; #[derive(Debug, Clone)] pub struct TermCompound { diff --git a/crates/core/src/query/pattern_query.rs b/crates/core/src/query/pattern_query.rs index 751b3051e..346d4e333 100644 --- a/crates/core/src/query/pattern_query.rs +++ b/crates/core/src/query/pattern_query.rs @@ -17,6 +17,10 @@ use std::sync::Arc; use optics::PatternPart; +use schema::{ + fastfield_reader::{self, FastFieldReader}, + FastField, Field, TextField, ALL_FIELDS, +}; use tantivy::{ fieldnorm::FieldNormReader, postings::SegmentPostings, @@ -26,12 +30,7 @@ use tantivy::{ DocId, DocSet, Postings, Score, SegmentReader, TantivyError, TERMINATED, }; -use crate::{ - fastfield_reader::{self, FastFieldReader}, - query::intersection::Intersection, - ranking::bm25::Bm25Weight, - schema::{FastField, Field, TextField, ALL_FIELDS}, -}; +use crate::{query::intersection::Intersection, ranking::bm25::Bm25Weight}; #[derive(Clone)] pub struct PatternQuery { diff --git a/crates/core/src/ranking/initial.rs b/crates/core/src/ranking/initial.rs index beece4c0f..ff9b533d8 100644 --- a/crates/core/src/ranking/initial.rs +++ b/crates/core/src/ranking/initial.rs @@ -14,8 +14,8 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -use crate::fastfield_reader::FastFieldReader; use chrono::Utc; +use schema::fastfield_reader::FastFieldReader; use serde::{Deserialize, Serialize}; use tantivy::collector::{ScoreSegmentTweaker, ScoreTweaker}; use tantivy::{DocId, SegmentReader}; diff --git a/crates/core/src/ranking/mod.rs b/crates/core/src/ranking/mod.rs index 01a9a5dfe..d3dbcb185 100644 --- a/crates/core/src/ranking/mod.rs +++ b/crates/core/src/ranking/mod.rs @@ -25,11 +25,11 @@ pub mod query_centrality; pub mod signal; use initial::InitialScoreTweaker; +use schema::fastfield_reader::FastFieldReader; use crate::{ collector::{MainCollector, MaxDocsConsidered, TopDocs}, config::CollectorConfig, - fastfield_reader::FastFieldReader, search_ctx::Ctx, searcher::NUM_RESULTS_PER_PAGE, webpage::region::Region, @@ -441,7 +441,7 @@ mod tests { fetch_time_ms: 500, page_centrality: 0.0, pre_computed_score: 0.0, - + node_id: None, dmoz_description: None, safety_classification: None, diff --git a/crates/core/src/ranking/signal.rs b/crates/core/src/ranking/signal.rs index 028f80ef6..94a6bdc54 100644 --- a/crates/core/src/ranking/signal.rs +++ b/crates/core/src/ranking/signal.rs @@ -14,17 +14,17 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -use crate::fastfield_reader::FieldValue; -use crate::query::optic::AsSearchableRule; -use crate::query::Query; -use crate::Result; use crate::{ - fastfield_reader, - schema::{FastField, TextField}, + query::{optic::AsSearchableRule, Query}, webpage::Webpage, + Result, }; use optics::ast::RankingTarget; use optics::Optic; +use schema::{ + fastfield_reader::{self, FieldValue}, + FastField, TextField, FLOAT_SCALING, +}; use serde::{Deserialize, Serialize}; use std::cell::RefCell; use std::str::FromStr; @@ -41,10 +41,7 @@ use webgraph::NodeID; use tantivy::DocSet; use tantivy::{DocId, Postings}; -use crate::{ - schema::FLOAT_SCALING, - webpage::region::{Region, RegionCount}, -}; +use crate::webpage::region::{Region, RegionCount}; use super::bm25::Bm25Weight; use super::models::linear::LinearRegression; diff --git a/crates/core/src/search_ctx.rs b/crates/core/src/search_ctx.rs index 2bb3af570..12e289e4c 100644 --- a/crates/core/src/search_ctx.rs +++ b/crates/core/src/search_ctx.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -use crate::fastfield_reader::FastFieldReader; +use schema::fastfield_reader::FastFieldReader; #[derive(Clone)] pub struct Ctx { diff --git a/crates/core/src/searcher/local.rs b/crates/core/src/searcher/local.rs index 96a8c96d4..bb1f32e80 100644 --- a/crates/core/src/searcher/local.rs +++ b/crates/core/src/searcher/local.rs @@ -19,6 +19,7 @@ use std::sync::Arc; use entity_index::{EntityIndex, EntityMatch}; use imager::image_store::Image; +use schema::TextField; use tantivy::schema::Value; use tantivy::TantivyDocument; use url::Url; @@ -35,7 +36,6 @@ use crate::ranking::models::lambdamart::LambdaMART; use crate::ranking::models::linear::LinearRegression; use crate::ranking::pipeline::{RankingPipeline, RankingWebsite}; use crate::ranking::{query_centrality, Ranker, Signal, SignalAggregator, ALL_SIGNALS}; -use crate::schema::TextField; use crate::search_ctx::Ctx; use crate::search_prettifier::{DisplayedEntity, DisplayedWebpage, HighlightedSpellCorrection}; use crate::spell::Spell; diff --git a/crates/core/src/spell/mod.rs b/crates/core/src/spell/mod.rs index 10db73e24..2dd795670 100644 --- a/crates/core/src/spell/mod.rs +++ b/crates/core/src/spell/mod.rs @@ -22,13 +22,13 @@ pub mod word2vec; use std::ops::Range; use itertools::intersperse; +use schema::TextField; use serde::{Deserialize, Serialize}; use tracing::info; use crate::index::Index; use crate::query; use crate::query::parser::Term; -use crate::schema::TextField; use crate::searcher::SearchQuery; use self::dictionary::DictionaryBuilder; diff --git a/crates/core/src/webpage/mod.rs b/crates/core/src/webpage/mod.rs index f4bc204c9..e6833a855 100644 --- a/crates/core/src/webpage/mod.rs +++ b/crates/core/src/webpage/mod.rs @@ -13,15 +13,12 @@ // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -use crate::{ - prehashed::hash, - schema::{FastField, TextField}, - simhash, Error, Result, -}; +use crate::{prehashed::hash, simhash, Error, Result}; use chrono::{DateTime, FixedOffset, Utc}; use itertools::Itertools; use kuchiki::{iter::NodeEdge, traits::TendrilSink, NodeRef}; use regex::Regex; +use schema::{FastField, Field, TextField, ALL_FIELDS, FLOAT_SCALING}; use std::{collections::HashMap, panic, str::FromStr}; use stdx::enum_map::EnumSet; use tantivy::{ @@ -38,8 +35,6 @@ pub mod safety_classifier; pub mod schema_org; pub mod url_ext; -use crate::schema::{Field, ALL_FIELDS, FLOAT_SCALING}; - use self::{ just_text::{JustText, Paragraph}, region::Region, @@ -1575,7 +1570,8 @@ pub type Meta = HashMap; mod tests { // TODO: make test macro to test both dom parsers - use crate::{schema::create_schema, webpage::url_ext::UrlExt}; + use crate::webpage::url_ext::UrlExt; + use schema::create_schema; use super::*; diff --git a/crates/schema/Cargo.toml b/crates/schema/Cargo.toml new file mode 100644 index 000000000..d886a7fc9 --- /dev/null +++ b/crates/schema/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "schema" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +stdx.workspace = true +tantivy.workspace = true +tokenizer.workspace = true diff --git a/crates/core/src/fastfield_reader.rs b/crates/schema/src/fastfield_reader.rs similarity index 98% rename from crates/core/src/fastfield_reader.rs rename to crates/schema/src/fastfield_reader.rs index 19384296d..70e41d351 100644 --- a/crates/core/src/fastfield_reader.rs +++ b/crates/schema/src/fastfield_reader.rs @@ -19,7 +19,7 @@ use std::{collections::HashMap, sync::Arc}; use stdx::enum_map::EnumMap; use tantivy::{columnar::ColumnValues, DocId, SegmentId}; -use crate::schema::{DataType, FastField, ALL_FIELDS}; +use crate::{DataType, FastField, ALL_FIELDS}; #[derive(Default, Clone)] struct InnerFastFieldReader { diff --git a/crates/core/src/schema.rs b/crates/schema/src/lib.rs similarity index 99% rename from crates/core/src/schema.rs rename to crates/schema/src/lib.rs index 3ef9b1c96..c7d0ec740 100644 --- a/crates/core/src/schema.rs +++ b/crates/schema/src/lib.rs @@ -14,6 +14,8 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . +pub mod fastfield_reader; + use tantivy::schema::{IndexRecordOption, NumericOptions, TextFieldIndexing, TextOptions}; use tokenizer::{ BigramTokenizer, Identity, JsonField, SiteOperatorUrlTokenizer, Tokenizer, TrigramTokenizer, From 4f846847afecf9c3ecff2ee0f8e4b622f08fd39d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20B=C3=B8ving?= Date: Thu, 19 Oct 2023 08:28:16 +0200 Subject: [PATCH 21/54] Move prehashed into stdx --- Cargo.lock | 1 + crates/core/src/collector.rs | 2 +- crates/core/src/lib.rs | 1 - crates/core/src/ranking/pipeline.rs | 6 ++---- crates/core/src/subdomain_count.rs | 6 ++---- crates/core/src/webpage/mod.rs | 4 ++-- crates/stdx/Cargo.toml | 1 + crates/stdx/src/lib.rs | 1 + crates/{core => stdx}/src/prehashed.rs | 0 9 files changed, 10 insertions(+), 12 deletions(-) rename crates/{core => stdx}/src/prehashed.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index 017b6db47..6cf5baeb5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4246,6 +4246,7 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" name = "stdx" version = "0.1.0" dependencies = [ + "md5", "serde", ] diff --git a/crates/core/src/collector.rs b/crates/core/src/collector.rs index b1e1ddcb9..c4c777dc8 100644 --- a/crates/core/src/collector.rs +++ b/crates/core/src/collector.rs @@ -19,6 +19,7 @@ use std::{collections::HashMap, sync::Arc}; use min_max_heap::MinMaxHeap; use schema::{fastfield_reader, FastField}; use serde::{Deserialize, Serialize}; +use stdx::prehashed::Prehashed; use tantivy::{ collector::{Collector, ScoreSegmentTweaker, ScoreTweaker, SegmentCollector}, DocId, SegmentOrdinal, SegmentReader, @@ -27,7 +28,6 @@ use tantivy::{ use crate::{ config::CollectorConfig, inverted_index::{DocAddress, WebsitePointer}, - prehashed::Prehashed, ranking::initial::{InitialScoreTweaker, Score}, simhash, }; diff --git a/crates/core/src/lib.rs b/crates/core/src/lib.rs index f009e3113..475136e47 100644 --- a/crates/core/src/lib.rs +++ b/crates/core/src/lib.rs @@ -45,7 +45,6 @@ pub mod index; mod llm_utils; mod metrics; pub mod naive_bayes; -pub mod prehashed; #[cfg(feature = "libtorch")] mod qa_model; mod query; diff --git a/crates/core/src/ranking/pipeline.rs b/crates/core/src/ranking/pipeline.rs index 427c48ff6..715a437e8 100644 --- a/crates/core/src/ranking/pipeline.rs +++ b/crates/core/src/ranking/pipeline.rs @@ -394,12 +394,10 @@ impl RankingPipeline { #[cfg(test)] mod tests { use itertools::Itertools; + use stdx::prehashed::Prehashed; use crate::ranking::models::cross_encoder::DummyCrossEncoder; - use crate::{ - collector::Hashes, inverted_index::DocAddress, prehashed::Prehashed, - ranking::initial::Score, - }; + use crate::{collector::Hashes, inverted_index::DocAddress, ranking::initial::Score}; use super::*; diff --git a/crates/core/src/subdomain_count.rs b/crates/core/src/subdomain_count.rs index d91bb8f27..753ef9793 100644 --- a/crates/core/src/subdomain_count.rs +++ b/crates/core/src/subdomain_count.rs @@ -14,12 +14,10 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -use crate::{ - prehashed::{hash, Prehashed}, - webpage::url_ext::UrlExt, -}; +use crate::webpage::url_ext::UrlExt; use kv::{rocksdb_store::RocksDbStore, Kv}; use std::{collections::HashSet, path::Path}; +use stdx::prehashed::{hash, Prehashed}; use url::Url; pub struct SubdomainCounter { diff --git a/crates/core/src/webpage/mod.rs b/crates/core/src/webpage/mod.rs index e6833a855..803d84d39 100644 --- a/crates/core/src/webpage/mod.rs +++ b/crates/core/src/webpage/mod.rs @@ -13,14 +13,14 @@ // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -use crate::{prehashed::hash, simhash, Error, Result}; +use crate::{simhash, Error, Result}; use chrono::{DateTime, FixedOffset, Utc}; use itertools::Itertools; use kuchiki::{iter::NodeEdge, traits::TendrilSink, NodeRef}; use regex::Regex; use schema::{FastField, Field, TextField, ALL_FIELDS, FLOAT_SCALING}; use std::{collections::HashMap, panic, str::FromStr}; -use stdx::enum_map::EnumSet; +use stdx::{enum_map::EnumSet, prehashed::hash}; use tantivy::{ tokenizer::{PreTokenizedString, Tokenizer}, TantivyDocument, diff --git a/crates/stdx/Cargo.toml b/crates/stdx/Cargo.toml index ebda234b1..6c56b6a19 100644 --- a/crates/stdx/Cargo.toml +++ b/crates/stdx/Cargo.toml @@ -6,4 +6,5 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +md5.workspace = true serde = { workspace = true, features = ["derive"] } diff --git a/crates/stdx/src/lib.rs b/crates/stdx/src/lib.rs index 33f1b2375..de8c3d3b1 100644 --- a/crates/stdx/src/lib.rs +++ b/crates/stdx/src/lib.rs @@ -1,5 +1,6 @@ pub mod enum_map; pub mod intmap; +pub mod prehashed; use std::path::PathBuf; diff --git a/crates/core/src/prehashed.rs b/crates/stdx/src/prehashed.rs similarity index 100% rename from crates/core/src/prehashed.rs rename to crates/stdx/src/prehashed.rs From 1a67c6136e5f5058fc21f13c908a413fdd3f5392 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20B=C3=B8ving?= Date: Thu, 19 Oct 2023 08:30:54 +0200 Subject: [PATCH 22/54] Move simhash into a crate --- Cargo.lock | 9 +++++++++ Cargo.toml | 1 + crates/core/Cargo.toml | 1 + crates/core/src/collector.rs | 1 - crates/core/src/lib.rs | 1 - crates/core/src/webpage/mod.rs | 2 +- crates/simhash/Cargo.toml | 10 ++++++++++ crates/{core/src/simhash.rs => simhash/src/lib.rs} | 0 8 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 crates/simhash/Cargo.toml rename crates/{core/src/simhash.rs => simhash/src/lib.rs} (100%) diff --git a/Cargo.lock b/Cargo.lock index 6cf5baeb5..b045051e1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4120,6 +4120,14 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" +[[package]] +name = "simhash" +version = "0.1.0" +dependencies = [ + "tantivy", + "tokenizer", +] + [[package]] name = "similar" version = "2.3.0" @@ -4328,6 +4336,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", + "simhash", "sonic", "stdx", "tantivy", diff --git a/Cargo.toml b/Cargo.toml index 1ce874a28..b998d9285 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -99,6 +99,7 @@ scylla = { git = "https://github.com/scylladb/scylla-rust-driver", rev = "82c1c9 serde = {version = "1.0.137", features = ["rc", "derive"]} serde_json = "1.0.81" serde_urlencoded = "0.7.1" +simhash = { path = "./crates/simhash" } sonic = { path = "./lib/sonic" } stdx = { path = "./crates/stdx" } tantivy = {git = "https://github.com/quickwit-oss/tantivy", rev = "182f58cea"} diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index 1f850a540..559022af1 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -90,6 +90,7 @@ scylla = {workspace = true} serde = {workspace = true} serde_json = {workspace = true} serde_urlencoded = {workspace = true} +simhash.workspace = true sonic.workspace = true stdx.workspace = true tantivy = {workspace = true} diff --git a/crates/core/src/collector.rs b/crates/core/src/collector.rs index c4c777dc8..fb40ad115 100644 --- a/crates/core/src/collector.rs +++ b/crates/core/src/collector.rs @@ -29,7 +29,6 @@ use crate::{ config::CollectorConfig, inverted_index::{DocAddress, WebsitePointer}, ranking::initial::{InitialScoreTweaker, Score}, - simhash, }; pub type MainCollector = TweakedScoreTopCollector; diff --git a/crates/core/src/lib.rs b/crates/core/src/lib.rs index 475136e47..a0de69498 100644 --- a/crates/core/src/lib.rs +++ b/crates/core/src/lib.rs @@ -52,7 +52,6 @@ pub mod ranking; mod search_ctx; mod search_prettifier; pub mod searcher; -mod simhash; pub mod similar_sites; mod snippet; pub mod spell; diff --git a/crates/core/src/webpage/mod.rs b/crates/core/src/webpage/mod.rs index 803d84d39..c61b0a143 100644 --- a/crates/core/src/webpage/mod.rs +++ b/crates/core/src/webpage/mod.rs @@ -13,7 +13,7 @@ // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -use crate::{simhash, Error, Result}; +use crate::{Error, Result}; use chrono::{DateTime, FixedOffset, Utc}; use itertools::Itertools; use kuchiki::{iter::NodeEdge, traits::TendrilSink, NodeRef}; diff --git a/crates/simhash/Cargo.toml b/crates/simhash/Cargo.toml new file mode 100644 index 000000000..a6efdfcaf --- /dev/null +++ b/crates/simhash/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "simhash" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +tantivy.workspace = true +tokenizer.workspace = true diff --git a/crates/core/src/simhash.rs b/crates/simhash/src/lib.rs similarity index 100% rename from crates/core/src/simhash.rs rename to crates/simhash/src/lib.rs From 7c034b3dff463e002aacec57fcb405b547b06b18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20B=C3=B8ving?= Date: Thu, 19 Oct 2023 08:34:15 +0200 Subject: [PATCH 23/54] Move naive-bayes into a crate --- Cargo.lock | 11 +++++++++++ Cargo.toml | 1 + crates/core/Cargo.toml | 1 + crates/core/benches/naive-bayes.rs | 1 - crates/core/src/lib.rs | 1 - crates/core/src/webpage/safety_classifier.rs | 1 - crates/naive_bayes/Cargo.toml | 12 ++++++++++++ .../src/naive_bayes.rs => naive_bayes/src/lib.rs} | 0 8 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 crates/naive_bayes/Cargo.toml rename crates/{core/src/naive_bayes.rs => naive_bayes/src/lib.rs} (100%) diff --git a/Cargo.lock b/Cargo.lock index b045051e1..0b07414c0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2526,6 +2526,16 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9380db4c04d219ac5c51d14996bbf2c2e9a15229771b53f8671eb6c83cf44df" +[[package]] +name = "naive_bayes" +version = "0.1.0" +dependencies = [ + "hashbrown 0.14.1", + "itertools 0.11.0", + "serde", + "stdx", +] + [[package]] name = "nanorand" version = "0.7.0" @@ -4310,6 +4320,7 @@ dependencies = [ "memmap2", "mime", "min-max-heap", + "naive_bayes", "num_cpus", "once_cell", "optics", diff --git a/Cargo.toml b/Cargo.toml index b998d9285..39e9f964f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -64,6 +64,7 @@ memmap = "0.7.0" memmap2 = "0.9.0" mime = "0.3.17" min-max-heap = "1.3.0" +naive_bayes = { path = "./crates/naive_bayes" } num_cpus = "1.15.0" once_cell = "1.13.1" optics = { path = "./crates/optics" } diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index 559022af1..3344dd08d 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -66,6 +66,7 @@ md5 = {workspace = true} memmap2 = {workspace = true} mime = {workspace = true} min-max-heap = {workspace = true} +naive_bayes.workspace = true num_cpus = {workspace = true} once_cell = {workspace = true} optics = {workspace = true} diff --git a/crates/core/benches/naive-bayes.rs b/crates/core/benches/naive-bayes.rs index 7d55c7b27..6b271a20e 100644 --- a/crates/core/benches/naive-bayes.rs +++ b/crates/core/benches/naive-bayes.rs @@ -1,6 +1,5 @@ use criterion::{criterion_group, criterion_main, Criterion}; use rand::seq::SliceRandom; -use stract::naive_bayes; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)] enum Label { diff --git a/crates/core/src/lib.rs b/crates/core/src/lib.rs index a0de69498..d957f91d7 100644 --- a/crates/core/src/lib.rs +++ b/crates/core/src/lib.rs @@ -44,7 +44,6 @@ pub mod index; #[cfg(feature = "libtorch")] mod llm_utils; mod metrics; -pub mod naive_bayes; #[cfg(feature = "libtorch")] mod qa_model; mod query; diff --git a/crates/core/src/webpage/safety_classifier.rs b/crates/core/src/webpage/safety_classifier.rs index d4de713c8..0e1b356f8 100644 --- a/crates/core/src/webpage/safety_classifier.rs +++ b/crates/core/src/webpage/safety_classifier.rs @@ -19,7 +19,6 @@ use std::path::Path; use itertools::Itertools; -use crate::naive_bayes; use crate::Result; const MAX_NUM_WORDS: usize = 100; diff --git a/crates/naive_bayes/Cargo.toml b/crates/naive_bayes/Cargo.toml new file mode 100644 index 000000000..e662a418f --- /dev/null +++ b/crates/naive_bayes/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "naive_bayes" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +hashbrown.workspace = true +itertools.workspace = true +serde = { workspace = true, features = ["derive"] } +stdx.workspace = true diff --git a/crates/core/src/naive_bayes.rs b/crates/naive_bayes/src/lib.rs similarity index 100% rename from crates/core/src/naive_bayes.rs rename to crates/naive_bayes/src/lib.rs From a0d3b36cc3afc684de021ac6f40a472ae7b60413 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20B=C3=B8ving?= Date: Thu, 19 Oct 2023 08:50:54 +0200 Subject: [PATCH 24/54] Move webpage into a crate --- Cargo.lock | 32 +++++++ Cargo.toml | 1 + crates/core/Cargo.toml | 1 + crates/core/src/api/docs.rs | 2 +- crates/core/src/api/search.rs | 2 +- crates/core/src/crawler/mod.rs | 3 +- crates/core/src/crawler/worker.rs | 2 +- crates/core/src/entrypoint/indexer.rs | 2 +- .../core/src/entrypoint/safety_classifier.rs | 2 +- crates/core/src/entrypoint/webgraph.rs | 2 +- crates/core/src/feed/scheduler.rs | 3 +- crates/core/src/index.rs | 6 +- crates/core/src/inverted_index.rs | 5 +- crates/core/src/lib.rs | 1 - crates/core/src/query/mod.rs | 12 +-- crates/core/src/query/optic.rs | 2 +- crates/core/src/ranking/inbound_similarity.rs | 2 +- crates/core/src/ranking/mod.rs | 4 +- crates/core/src/ranking/optics.rs | 2 +- crates/core/src/ranking/signal.rs | 7 +- crates/core/src/search_prettifier/mod.rs | 2 +- .../src/search_prettifier/stack_overflow.rs | 7 +- crates/core/src/searcher/local.rs | 8 +- crates/core/src/searcher/mod.rs | 2 +- crates/core/src/snippet.rs | 4 +- crates/core/src/subdomain_count.rs | 2 +- crates/webpage/Cargo.toml | 35 +++++++ .../src/webpage => webpage/src}/just_text.rs | 92 +++++++++---------- .../src/webpage/mod.rs => webpage/src/lib.rs} | 82 +++++++++++++---- .../src/webpage => webpage/src}/region.rs | 6 +- .../src}/safety_classifier.rs | 4 +- .../src}/schema_org/json_ld.rs | 2 +- .../src}/schema_org/microdata.rs | 12 +-- .../webpage => webpage/src}/schema_org/mod.rs | 10 +- .../src/webpage => webpage/src}/url_ext.rs | 4 +- 35 files changed, 238 insertions(+), 127 deletions(-) create mode 100644 crates/webpage/Cargo.toml rename crates/{core/src/webpage => webpage/src}/just_text.rs (88%) rename crates/{core/src/webpage/mod.rs => webpage/src/lib.rs} (97%) rename crates/{core/src/webpage => webpage/src}/region.rs (97%) rename crates/{core/src/webpage => webpage/src}/safety_classifier.rs (97%) rename crates/{core/src/webpage => webpage/src}/schema_org/json_ld.rs (98%) rename crates/{core/src/webpage => webpage/src}/schema_org/microdata.rs (99%) rename crates/{core/src/webpage => webpage/src}/schema_org/mod.rs (97%) rename crates/{core/src/webpage => webpage/src}/url_ext.rs (96%) diff --git a/Cargo.lock b/Cargo.lock index 0b07414c0..979d22218 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4369,6 +4369,7 @@ dependencies = [ "uuid", "warc", "webgraph", + "webpage", "whatlang", ] @@ -5474,6 +5475,37 @@ dependencies = [ "uuid", ] +[[package]] +name = "webpage" +version = "0.1.0" +dependencies = [ + "anyhow", + "bincode", + "chrono", + "csv", + "itertools 0.11.0", + "kuchiki", + "maplit", + "naive_bayes", + "once_cell", + "publicsuffix", + "regex", + "rust-stemmers", + "schema", + "serde", + "serde_json", + "simhash", + "stdx", + "tantivy", + "thiserror", + "tokenizer", + "tracing", + "url", + "utoipa", + "webgraph", + "whatlang", +] + [[package]] name = "weezl" version = "0.1.7" diff --git a/Cargo.toml b/Cargo.toml index 39e9f964f..997f7ae08 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -122,6 +122,7 @@ utoipa-swagger-ui = {version = "4.0.0", features = ["axum"]} uuid = "1.1.2" warc = { path = "./crates/warc" } webgraph = { path = "./crates/webgraph" } +webpage = { path = "./crates/webpage" } whatlang = "0.16.0" diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index 3344dd08d..3fe8b77bc 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -112,6 +112,7 @@ utoipa-swagger-ui = {workspace = true} uuid = {workspace = true} warc.workspace = true webgraph.workspace = true +webpage.workspace = true whatlang = {workspace = true} [target.'cfg(not(target_env = "msvc"))'.dependencies] diff --git a/crates/core/src/api/docs.rs b/crates/core/src/api/docs.rs index c386ff22f..05f73c2b7 100644 --- a/crates/core/src/api/docs.rs +++ b/crates/core/src/api/docs.rs @@ -36,7 +36,7 @@ use utoipa_swagger_ui::SwaggerUi; ), components( schemas( - crate::webpage::region::Region, + webpage::region::Region, optics::SiteRankings, search::ApiSearchQuery, search::ApiSearchResult, diff --git a/crates/core/src/api/search.rs b/crates/core/src/api/search.rs index 41b1e46fe..9638b987d 100644 --- a/crates/core/src/api/search.rs +++ b/crates/core/src/api/search.rs @@ -19,6 +19,7 @@ use http::StatusCode; use optics::{Optic, SiteRankings}; use std::sync::Arc; use utoipa::ToSchema; +use webpage::region::Region; use axum::Json; use axum_macros::debug_handler; @@ -26,7 +27,6 @@ use axum_macros::debug_handler; use crate::{ bangs::BangHit, searcher::{self, SearchQuery, SearchResult, WebsitesResult}, - webpage::region::Region, }; use super::State; diff --git a/crates/core/src/crawler/mod.rs b/crates/core/src/crawler/mod.rs index 9aced2eee..bd5ca7023 100644 --- a/crates/core/src/crawler/mod.rs +++ b/crates/core/src/crawler/mod.rs @@ -19,8 +19,9 @@ use std::{collections::VecDeque, sync::Arc, time::Duration}; use hashbrown::HashMap; use url::Url; +use webpage::url_ext::UrlExt; -use crate::{config::CrawlerConfig, webpage::url_ext::UrlExt}; +use crate::config::CrawlerConfig; use self::{warc_writer::WarcWriter, worker::WorkerThread}; diff --git a/crates/core/src/crawler/worker.rs b/crates/core/src/crawler/worker.rs index e0342eafb..35717f9e0 100644 --- a/crates/core/src/crawler/worker.rs +++ b/crates/core/src/crawler/worker.rs @@ -30,12 +30,12 @@ use std::{ }; use url::Url; +use webpage::Html; use crate::{ config::CrawlerConfig, crawler::MAX_URL_LEN_BYTES, entrypoint::crawler::router::{NewJob, RouterService}, - webpage::Html, }; use super::{ diff --git a/crates/core/src/entrypoint/indexer.rs b/crates/core/src/entrypoint/indexer.rs index e2899924f..02ec70589 100644 --- a/crates/core/src/entrypoint/indexer.rs +++ b/crates/core/src/entrypoint/indexer.rs @@ -25,13 +25,13 @@ use tokio::pin; use tracing::{debug, info, trace, warn}; use warc::PayloadType; use webgraph::{Node, NodeID, Webgraph, WebgraphBuilder}; +use webpage::{safety_classifier, Html, Webpage}; use crate::config; use crate::entrypoint::download_all_warc_files; use crate::index::{FrozenIndex, Index}; use crate::mapreduce::{Map, Reduce, Worker}; use crate::ranking::SignalAggregator; -use crate::webpage::{safety_classifier, Html, Webpage}; use crate::{human_website_annotations, Result}; pub struct Indexer {} diff --git a/crates/core/src/entrypoint/safety_classifier.rs b/crates/core/src/entrypoint/safety_classifier.rs index e3ddd37dd..f8edf7800 100644 --- a/crates/core/src/entrypoint/safety_classifier.rs +++ b/crates/core/src/entrypoint/safety_classifier.rs @@ -17,7 +17,7 @@ use rand::seq::SliceRandom; use tracing::info; -use crate::{webpage, Result}; +use crate::Result; use std::path::Path; const TEST_SIZE: f64 = 0.2; diff --git a/crates/core/src/entrypoint/webgraph.rs b/crates/core/src/entrypoint/webgraph.rs index 6e6100325..05ce8fc3b 100644 --- a/crates/core/src/entrypoint/webgraph.rs +++ b/crates/core/src/entrypoint/webgraph.rs @@ -18,7 +18,6 @@ use crate::{ config::{self, WebgraphConstructConfig}, entrypoint::download_all_warc_files, mapreduce::Worker, - webpage::Html, Result, }; use itertools::Itertools; @@ -27,6 +26,7 @@ use std::{fs, path::Path}; use tokio::pin; use tracing::{info, trace}; use webgraph::{Node, WebgraphWriter}; +use webpage::Html; #[derive(Debug, Serialize, Deserialize, Clone)] struct GraphPointer { diff --git a/crates/core/src/feed/scheduler.rs b/crates/core/src/feed/scheduler.rs index 496caa2c1..250e31fd2 100644 --- a/crates/core/src/feed/scheduler.rs +++ b/crates/core/src/feed/scheduler.rs @@ -21,8 +21,7 @@ use webgraph::{ centrality::{top_hosts, TopHosts}, NodeID, Webgraph, }; - -use crate::webpage::url_ext::UrlExt; +use webpage::url_ext::UrlExt; use super::{Feed, FeedIndex}; diff --git a/crates/core/src/index.rs b/crates/core/src/index.rs index 062f91da7..92cc1fadf 100644 --- a/crates/core/src/index.rs +++ b/crates/core/src/index.rs @@ -24,6 +24,10 @@ use tantivy::schema::Schema; use tantivy::tokenizer::TokenizerManager; use url::Url; use webgraph::NodeID; +use webpage::{ + region::{Region, RegionCount}, + Webpage, +}; use crate::collector::MainCollector; use crate::directory::{self, DirEntry}; @@ -31,8 +35,6 @@ use crate::inverted_index::{self, InvertedIndex}; use crate::query::Query; use crate::search_ctx::Ctx; use crate::subdomain_count::SubdomainCounter; -use crate::webpage::region::{Region, RegionCount}; -use crate::webpage::Webpage; use crate::Result; const INVERTED_INDEX_SUBFOLDER_NAME: &str = "inverted_index"; diff --git a/crates/core/src/inverted_index.rs b/crates/core/src/inverted_index.rs index 82f2b471f..371e81dff 100644 --- a/crates/core/src/inverted_index.rs +++ b/crates/core/src/inverted_index.rs @@ -41,6 +41,7 @@ use tokenizer::{ }; use url::Url; use webgraph::NodeID; +use webpage::{region::Region, schema_org, Webpage}; use crate::collector::{Hashes, MainCollector}; use crate::config::SnippetConfig; @@ -52,8 +53,6 @@ use crate::ranking::SignalAggregator; use crate::search_ctx::Ctx; use crate::snippet; use crate::snippet::TextSnippet; -use crate::webpage::region::Region; -use crate::webpage::{schema_org, Webpage}; use crate::Result; use std::collections::HashSet; use std::fs; @@ -655,11 +654,11 @@ impl From for RetrievedWebpage { #[cfg(test)] mod tests { use maplit::hashmap; + use webpage::Html; use crate::{ ranking::{Ranker, SignalAggregator}, searcher::SearchQuery, - webpage::Html, }; use super::*; diff --git a/crates/core/src/lib.rs b/crates/core/src/lib.rs index d957f91d7..7edc35f29 100644 --- a/crates/core/src/lib.rs +++ b/crates/core/src/lib.rs @@ -59,7 +59,6 @@ mod subdomain_count; pub mod summarizer; #[allow(unused)] mod ttl_cache; -pub mod webpage; mod widgets; #[derive(thiserror::Error, Debug)] diff --git a/crates/core/src/query/mod.rs b/crates/core/src/query/mod.rs index e703ac6c6..4a9c09c28 100644 --- a/crates/core/src/query/mod.rs +++ b/crates/core/src/query/mod.rs @@ -15,18 +15,14 @@ // along with this program. If not, see . use crate::{ - inverted_index::InvertedIndex, - query::parser::TermCompound, - ranking::SignalCoefficient, - search_ctx::Ctx, - searcher::SearchQuery, - webpage::{region::Region, safety_classifier}, - Result, + inverted_index::InvertedIndex, query::parser::TermCompound, ranking::SignalCoefficient, + search_ctx::Ctx, searcher::SearchQuery, Result, }; use optics::{Optic, SiteRankings}; use schema::{Field, TextField}; use std::collections::HashMap; use tantivy::query::{BooleanQuery, Occur, QueryClone, TermQuery}; +use webpage::{region::Region, safety_classifier}; mod const_query; pub mod intersection; @@ -243,8 +239,8 @@ mod tests { index::Index, rand_words, searcher::{LocalSearcher, SearchQuery}, - webpage::Webpage, }; + use webpage::Webpage; use super::*; diff --git a/crates/core/src/query/optic.rs b/crates/core/src/query/optic.rs index 800280aea..1d76e222a 100644 --- a/crates/core/src/query/optic.rs +++ b/crates/core/src/query/optic.rs @@ -234,12 +234,12 @@ impl AsTantivyQuery for Matching { mod tests { use optics::{Optic, SiteRankings}; use webgraph::{Node, WebgraphWriter}; + use webpage::{Html, Webpage}; use crate::{ index::Index, ranking::inbound_similarity::InboundSimilarity, searcher::{LocalSearcher, SearchQuery}, - webpage::{Html, Webpage}, }; const CONTENT: &str = "this is the best example website ever this is the best example website ever this is the best example website ever this is the best example website ever this is the best example website ever this is the best example website ever"; diff --git a/crates/core/src/ranking/inbound_similarity.rs b/crates/core/src/ranking/inbound_similarity.rs index 6a7f55ac0..47906f5dc 100644 --- a/crates/core/src/ranking/inbound_similarity.rs +++ b/crates/core/src/ranking/inbound_similarity.rs @@ -214,12 +214,12 @@ impl InboundSimilarity { mod tests { use optics::SiteRankings; use webgraph::{Node, WebgraphWriter}; + use webpage::{Html, Webpage}; use crate::{ index::Index, rand_words, searcher::{LocalSearcher, SearchQuery}, - webpage::{Html, Webpage}, }; use super::*; diff --git a/crates/core/src/ranking/mod.rs b/crates/core/src/ranking/mod.rs index d3dbcb185..c103a831d 100644 --- a/crates/core/src/ranking/mod.rs +++ b/crates/core/src/ranking/mod.rs @@ -26,13 +26,13 @@ pub mod signal; use initial::InitialScoreTweaker; use schema::fastfield_reader::FastFieldReader; +use webpage::region::Region; use crate::{ collector::{MainCollector, MaxDocsConsidered, TopDocs}, config::CollectorConfig, search_ctx::Ctx, searcher::NUM_RESULTS_PER_PAGE, - webpage::region::Region, }; pub use self::signal::*; @@ -133,11 +133,11 @@ impl Ranker { mod tests { use optics::Optic; + use webpage::{Html, Webpage}; use crate::{ index::Index, searcher::{LocalSearcher, SearchQuery}, - webpage::{Html, Webpage}, }; const CONTENT: &str = "this is the best example website ever this is the best example website ever this is the best example website ever this is the best example website ever this is the best example website ever this is the best example website ever"; diff --git a/crates/core/src/ranking/optics.rs b/crates/core/src/ranking/optics.rs index ddadb98a5..ad06db598 100644 --- a/crates/core/src/ranking/optics.rs +++ b/crates/core/src/ranking/optics.rs @@ -18,12 +18,12 @@ mod tests { use optics::SiteRankings; use webgraph::{Node, WebgraphWriter}; + use webpage::{Html, Webpage}; use crate::{ index::Index, ranking::inbound_similarity::InboundSimilarity, searcher::{LocalSearcher, SearchQuery}, - webpage::{Html, Webpage}, }; const CONTENT: &str = "this is the best example website ever this is the best example website ever this is the best example website ever this is the best example website ever this is the best example website ever this is the best example website ever"; diff --git a/crates/core/src/ranking/signal.rs b/crates/core/src/ranking/signal.rs index 94a6bdc54..77b6d9562 100644 --- a/crates/core/src/ranking/signal.rs +++ b/crates/core/src/ranking/signal.rs @@ -16,7 +16,6 @@ use crate::{ query::{optic::AsSearchableRule, Query}, - webpage::Webpage, Result, }; use optics::ast::RankingTarget; @@ -37,12 +36,14 @@ use tantivy::tokenizer::Tokenizer; use thiserror::Error; use utoipa::ToSchema; use webgraph::NodeID; +use webpage::{ + region::{Region, RegionCount}, + Webpage, +}; use tantivy::DocSet; use tantivy::{DocId, Postings}; -use crate::webpage::region::{Region, RegionCount}; - use super::bm25::Bm25Weight; use super::models::linear::LinearRegression; use super::{inbound_similarity, query_centrality}; diff --git a/crates/core/src/search_prettifier/mod.rs b/crates/core/src/search_prettifier/mod.rs index d238da155..687d3002a 100644 --- a/crates/core/src/search_prettifier/mod.rs +++ b/crates/core/src/search_prettifier/mod.rs @@ -23,13 +23,13 @@ use chrono::{NaiveDateTime, Utc}; use serde::{Deserialize, Serialize}; use url::Url; use utoipa::ToSchema; +use webpage::url_ext::UrlExt; use crate::{ inverted_index::RetrievedWebpage, ranking::{Signal, SignalScore}, snippet::TextSnippet, spell::{self, CorrectionTerm}, - webpage::url_ext::UrlExt, }; pub use self::stack_overflow::{create_stackoverflow_sidebar, CodeOrText}; diff --git a/crates/core/src/search_prettifier/stack_overflow.rs b/crates/core/src/search_prettifier/stack_overflow.rs index da9e59f0b..9caa18524 100644 --- a/crates/core/src/search_prettifier/stack_overflow.rs +++ b/crates/core/src/search_prettifier/stack_overflow.rs @@ -17,12 +17,9 @@ use serde::{Deserialize, Serialize}; use url::Url; use utoipa::ToSchema; +use webpage::schema_org::{self, Item, OneOrMany, Property}; -use crate::{ - inverted_index::RetrievedWebpage, - webpage::schema_org::{self, Item, OneOrMany, Property}, - Error, -}; +use crate::{inverted_index::RetrievedWebpage, Error}; use super::{DisplayedSidebar, Snippet}; use crate::Result; diff --git a/crates/core/src/searcher/local.rs b/crates/core/src/searcher/local.rs index bb1f32e80..d3f4047d7 100644 --- a/crates/core/src/searcher/local.rs +++ b/crates/core/src/searcher/local.rs @@ -24,6 +24,7 @@ use tantivy::schema::Value; use tantivy::TantivyDocument; use url::Url; use webgraph::Node; +use webpage::region::Region; use crate::config::{CollectorConfig, SnippetConfig}; use crate::index::Index; @@ -39,7 +40,6 @@ use crate::ranking::{query_centrality, Ranker, Signal, SignalAggregator, ALL_SIG use crate::search_ctx::Ctx; use crate::search_prettifier::{DisplayedEntity, DisplayedWebpage, HighlightedSpellCorrection}; use crate::spell::Spell; -use crate::webpage::region::Region; use crate::{inverted_index, Error, Result}; use super::WebsitesResult; @@ -415,10 +415,8 @@ impl LocalSearcher { #[cfg(test)] mod tests { - use crate::{ - searcher::NUM_RESULTS_PER_PAGE, - webpage::{Html, Webpage}, - }; + use crate::searcher::NUM_RESULTS_PER_PAGE; + use webpage::{Html, Webpage}; use super::*; diff --git a/crates/core/src/searcher/mod.rs b/crates/core/src/searcher/mod.rs index f22b59e3b..a5b123667 100644 --- a/crates/core/src/searcher/mod.rs +++ b/crates/core/src/searcher/mod.rs @@ -24,6 +24,7 @@ pub use local::*; use optics::{Optic, SiteRankings}; use serde::{Deserialize, Serialize}; use utoipa::ToSchema; +use webpage::region::Region; use crate::{ bangs::BangHit, @@ -33,7 +34,6 @@ use crate::{ DisplayedAnswer, DisplayedSidebar, DisplayedWebpage, HighlightedSpellCorrection, }, spell::Correction, - webpage::region::Region, widgets::Widget, }; diff --git a/crates/core/src/snippet.rs b/crates/core/src/snippet.rs index 93067f312..3f2f51762 100644 --- a/crates/core/src/snippet.rs +++ b/crates/core/src/snippet.rs @@ -16,11 +16,11 @@ use std::ops::Range; use tokenizer::{BigramTokenizer, Normal, Stemmed, Tokenizer, TrigramTokenizer}; +use webpage::region::Region; use crate::config::SnippetConfig; use crate::query::Query; use crate::spell::sentence_ranges; -use crate::webpage::region::Region; use hashbrown::{HashMap, HashSet}; use utoipa::ToSchema; @@ -333,8 +333,8 @@ mod tests { index::Index, search_prettifier::Snippet, searcher::{LocalSearcher, SearchQuery}, - webpage::Webpage, }; + use webpage::Webpage; const TEST_TEXT: &str = r#"Rust is a systems programming language sponsored by Mozilla which describes it as a "safe, concurrent, practical language", supporting functional and diff --git a/crates/core/src/subdomain_count.rs b/crates/core/src/subdomain_count.rs index 753ef9793..6da8eba57 100644 --- a/crates/core/src/subdomain_count.rs +++ b/crates/core/src/subdomain_count.rs @@ -14,11 +14,11 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -use crate::webpage::url_ext::UrlExt; use kv::{rocksdb_store::RocksDbStore, Kv}; use std::{collections::HashSet, path::Path}; use stdx::prehashed::{hash, Prehashed}; use url::Url; +use webpage::url_ext::UrlExt; pub struct SubdomainCounter { inner: Box>>, diff --git a/crates/webpage/Cargo.toml b/crates/webpage/Cargo.toml new file mode 100644 index 000000000..a2935cfc0 --- /dev/null +++ b/crates/webpage/Cargo.toml @@ -0,0 +1,35 @@ +[package] +name = "webpage" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +anyhow.workspace = true +bincode.workspace = true +chrono.workspace = true +csv.workspace = true +itertools.workspace = true +kuchiki.workspace = true +naive_bayes.workspace = true +once_cell.workspace = true +publicsuffix.workspace = true +regex.workspace = true +rust-stemmers = "1.2.0" +schema.workspace = true +serde.workspace = true +serde_json.workspace = true +simhash.workspace = true +stdx.workspace = true +tantivy.workspace = true +thiserror.workspace = true +tokenizer.workspace = true +tracing.workspace = true +url.workspace = true +utoipa.workspace = true +webgraph.workspace = true +whatlang.workspace = true + +[dev-dependencies] +maplit.workspace = true diff --git a/crates/core/src/webpage/just_text.rs b/crates/webpage/src/just_text.rs similarity index 88% rename from crates/core/src/webpage/just_text.rs rename to crates/webpage/src/just_text.rs index 0aebd97c0..158d94de6 100644 --- a/crates/core/src/webpage/just_text.rs +++ b/crates/webpage/src/just_text.rs @@ -90,52 +90,52 @@ macro_rules! include_stopwords { static STOPWORDS: once_cell::sync::Lazy>> = once_cell::sync::Lazy::new(|| { include_stopwords!( - "../../stopwords/Afrikaans.txt" => Lang::Afr, - "../../stopwords/Arabic.txt" => Lang::Ara, - "../../stopwords/Armenian.txt" => Lang::Hye, - "../../stopwords/Azerbaijani.txt" => Lang::Aze, - "../../stopwords/Belarusian.txt" => Lang::Bel, - "../../stopwords/Bengali.txt" => Lang::Ben, - "../../stopwords/Bulgarian.txt" => Lang::Bul, - "../../stopwords/Catalan.txt" => Lang::Cat, - "../../stopwords/Croatian.txt" => Lang::Hrv, - "../../stopwords/Czech.txt" => Lang::Ces, - "../../stopwords/Danish.txt" => Lang::Dan, - "../../stopwords/Dutch.txt" => Lang::Nld, - "../../stopwords/English.txt" => Lang::Eng, - "../../stopwords/Esperanto.txt" => Lang::Epo, - "../../stopwords/Estonian.txt" => Lang::Est, - "../../stopwords/Finnish.txt" => Lang::Fin, - "../../stopwords/French.txt" => Lang::Fra, - "../../stopwords/Georgian.txt" => Lang::Kat, - "../../stopwords/German.txt" => Lang::Deu, - "../../stopwords/Greek.txt" => Lang::Ell, - "../../stopwords/Gujarati.txt" => Lang::Guj, - "../../stopwords/Hebrew.txt" => Lang::Heb, - "../../stopwords/Hindi.txt" => Lang::Hin, - "../../stopwords/Hungarian.txt" => Lang::Hun, - "../../stopwords/Indonesian.txt" => Lang::Ind, - "../../stopwords/Italian.txt" => Lang::Ita, - "../../stopwords/Javanese.txt" => Lang::Jav, - "../../stopwords/Kannada.txt" => Lang::Kan, - "../../stopwords/Korean.txt" => Lang::Kor, - "../../stopwords/Latin.txt" => Lang::Lat, - "../../stopwords/Latvian.txt" => Lang::Lav, - "../../stopwords/Lithuanian.txt" => Lang::Lit, - "../../stopwords/Macedonian.txt" => Lang::Mkd, - "../../stopwords/Malayalam.txt" => Lang::Mal, - "../../stopwords/Marathi.txt" => Lang::Mar, - "../../stopwords/Nepali.txt" => Lang::Nep, - "../../stopwords/Persian.txt" => Lang::Pes, - "../../stopwords/Polish.txt" => Lang::Pol, - "../../stopwords/Portuguese.txt" => Lang::Por, - "../../stopwords/Romanian.txt" => Lang::Ron, - "../../stopwords/Russian.txt" => Lang::Rus, - "../../stopwords/Serbian.txt" => Lang::Srp, - "../../stopwords/Slovak.txt" => Lang::Slk, - "../../stopwords/Slovenian.txt" => Lang::Slv, - "../../stopwords/Spanish.txt" => Lang::Spa, - "../../stopwords/Japanese.txt" => Lang::Jpn + "../../core/stopwords/Afrikaans.txt" => Lang::Afr, + "../../core/stopwords/Arabic.txt" => Lang::Ara, + "../../core/stopwords/Armenian.txt" => Lang::Hye, + "../../core/stopwords/Azerbaijani.txt" => Lang::Aze, + "../../core/stopwords/Belarusian.txt" => Lang::Bel, + "../../core/stopwords/Bengali.txt" => Lang::Ben, + "../../core/stopwords/Bulgarian.txt" => Lang::Bul, + "../../core/stopwords/Catalan.txt" => Lang::Cat, + "../../core/stopwords/Croatian.txt" => Lang::Hrv, + "../../core/stopwords/Czech.txt" => Lang::Ces, + "../../core/stopwords/Danish.txt" => Lang::Dan, + "../../core/stopwords/Dutch.txt" => Lang::Nld, + "../../core/stopwords/English.txt" => Lang::Eng, + "../../core/stopwords/Esperanto.txt" => Lang::Epo, + "../../core/stopwords/Estonian.txt" => Lang::Est, + "../../core/stopwords/Finnish.txt" => Lang::Fin, + "../../core/stopwords/French.txt" => Lang::Fra, + "../../core/stopwords/Georgian.txt" => Lang::Kat, + "../../core/stopwords/German.txt" => Lang::Deu, + "../../core/stopwords/Greek.txt" => Lang::Ell, + "../../core/stopwords/Gujarati.txt" => Lang::Guj, + "../../core/stopwords/Hebrew.txt" => Lang::Heb, + "../../core/stopwords/Hindi.txt" => Lang::Hin, + "../../core/stopwords/Hungarian.txt" => Lang::Hun, + "../../core/stopwords/Indonesian.txt" => Lang::Ind, + "../../core/stopwords/Italian.txt" => Lang::Ita, + "../../core/stopwords/Javanese.txt" => Lang::Jav, + "../../core/stopwords/Kannada.txt" => Lang::Kan, + "../../core/stopwords/Korean.txt" => Lang::Kor, + "../../core/stopwords/Latin.txt" => Lang::Lat, + "../../core/stopwords/Latvian.txt" => Lang::Lav, + "../../core/stopwords/Lithuanian.txt" => Lang::Lit, + "../../core/stopwords/Macedonian.txt" => Lang::Mkd, + "../../core/stopwords/Malayalam.txt" => Lang::Mal, + "../../core/stopwords/Marathi.txt" => Lang::Mar, + "../../core/stopwords/Nepali.txt" => Lang::Nep, + "../../core/stopwords/Persian.txt" => Lang::Pes, + "../../core/stopwords/Polish.txt" => Lang::Pol, + "../../core/stopwords/Portuguese.txt" => Lang::Por, + "../../core/stopwords/Romanian.txt" => Lang::Ron, + "../../core/stopwords/Russian.txt" => Lang::Rus, + "../../core/stopwords/Serbian.txt" => Lang::Srp, + "../../core/stopwords/Slovak.txt" => Lang::Slk, + "../../core/stopwords/Slovenian.txt" => Lang::Slv, + "../../core/stopwords/Spanish.txt" => Lang::Spa, + "../../core/stopwords/Japanese.txt" => Lang::Jpn ) }); diff --git a/crates/core/src/webpage/mod.rs b/crates/webpage/src/lib.rs similarity index 97% rename from crates/core/src/webpage/mod.rs rename to crates/webpage/src/lib.rs index c61b0a143..ee8f6138f 100644 --- a/crates/core/src/webpage/mod.rs +++ b/crates/webpage/src/lib.rs @@ -13,7 +13,6 @@ // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -use crate::{Error, Result}; use chrono::{DateTime, FixedOffset, Utc}; use itertools::Itertools; use kuchiki::{iter::NodeEdge, traits::TendrilSink, NodeRef}; @@ -41,6 +40,54 @@ use self::{ url_ext::UrlExt, }; +#[derive(thiserror::Error, Debug)] +pub enum Error { + #[error("Encountered an empty required field ({0}) when converting to tantivy")] + EmptyField(&'static str), + + // #[error("Parsing error")] + // ParsingError(String), + + // #[error("Failed to download warc files after all retries")] + // DownloadFailed, + + // #[error("Query cannot be completely empty")] + // EmptyQuery, + #[error("Unknown region")] + UnknownRegion, + + // #[error("Unknown CLI option")] + // UnknownCLIOption, + + // #[error("The stackoverflow schema was not structured as expected")] + // InvalidStackoverflowSchema, + + // #[error("Internal error")] + // InternalError(String), + #[error("IO error")] + Io(#[from] std::io::Error), + + #[error("JSON error")] + Json(#[from] serde_json::Error), + + #[error("URL parse error")] + Url(#[from] url::ParseError), + + #[error("CSV error")] + Csv(#[from] csv::Error), + + #[error("Bincode error")] + Bincode(#[from] bincode::Error), + + #[error("Unknown webpage robots meta tag")] + UnknownRobotsMetaTag, + + #[error("Unknown microformat")] + UnknownMicroformat, +} + +pub type Result = std::result::Result; + pub static URL_REGEX: once_cell::sync::Lazy = once_cell::sync::Lazy::new(|| { Regex::new(r"(((http|ftp|https):/{2})+(([0-9a-z_-]+\.)+(aero|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mn|mn|mo|mp|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|nom|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ra|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw|arpa)(:[0-9]+)?((/([~0-9a-zA-Z\#\+%@\./_-]+))?(\?[0-9a-zA-Z\+%@/&\[\];=_-]+)?)?))\b").unwrap() }); @@ -123,7 +170,8 @@ pub struct Webpage { } impl Webpage { - #[cfg(test)] + // TODO: I needed to make this for all targets due to #[cfg(test)] not being exported + // #[cfg(test)] pub fn new(html: &str, url: &str) -> Result { let html = Html::parse(html, url)?; @@ -284,13 +332,13 @@ enum RobotsMeta { } impl FromStr for RobotsMeta { - type Err = anyhow::Error; + type Err = Error; fn from_str(s: &str) -> Result { match s { "noindex" => Ok(RobotsMeta::NoIndex), "nofollow" => Ok(RobotsMeta::NoFollow), - _ => Err(Error::UnknownRobotsMetaTag.into()), + _ => Err(Error::UnknownRobotsMetaTag), } } } @@ -341,7 +389,7 @@ impl From for usize { } impl TryFrom for Microformat { - type Error = anyhow::Error; + type Error = Error; fn try_from(value: usize) -> Result { match value { @@ -351,7 +399,7 @@ impl TryFrom for Microformat { 3 => Ok(Microformat::HRecipe), 4 => Ok(Microformat::HReview), 5 => Ok(Microformat::HProduct), - _ => Err(anyhow::anyhow!("Unknown microformat")), + _ => Err(Error::UnknownMicroformat), } } } @@ -384,7 +432,8 @@ impl Html { Ok(html) } - #[cfg(test)] + // TODO: I needed to make this for all targets due to #[cfg(test)] not being exported + // #[cfg(test)] pub fn set_clean_text(&mut self, text: String) { self.clean_text = Some(text); } @@ -842,7 +891,7 @@ impl Html { let title = self.title(); if title.is_none() { - return Err(Error::EmptyField("title").into()); + return Err(Error::EmptyField("title")); } let title = title.unwrap(); @@ -853,7 +902,7 @@ impl Html { let all_text = self.all_text(); if all_text.is_none() { - return Err(Error::EmptyField("all body").into()); + return Err(Error::EmptyField("all body")); } let all_text = all_text.unwrap(); @@ -1570,7 +1619,7 @@ pub type Meta = HashMap; mod tests { // TODO: make test macro to test both dom parsers - use crate::webpage::url_ext::UrlExt; + use crate::url_ext::UrlExt; use schema::create_schema; use super::*; @@ -1752,7 +1801,7 @@ mod tests { #[test] fn hard_parsing() { let webpage = Html::parse( - include_str!("../../testcases/parsing/yasudaya.html"), + include_str!("../../core/testcases/parsing/yasudaya.html"), "https://example.com", ) .unwrap(); @@ -1764,7 +1813,7 @@ mod tests { assert!(!webpage.all_text().unwrap().is_empty()); let webpage = Html::parse( - include_str!("../../testcases/parsing/5390001.html"), + include_str!("../../core/testcases/parsing/5390001.html"), "https://example.com", ) .unwrap(); @@ -1776,7 +1825,7 @@ mod tests { assert!(!webpage.all_text().unwrap().is_empty()); let webpage = Html::parse( - include_str!("../../testcases/parsing/77p2p-7.live-105.html"), + include_str!("../../core/testcases/parsing/77p2p-7.live-105.html"), "https://example.com", ) .unwrap(); @@ -1791,7 +1840,7 @@ mod tests { #[test] fn reddit_comments() { let webpage = Html::parse( - include_str!("../../testcases/parsing/reddit.html"), + include_str!("../../core/testcases/parsing/reddit.html"), "https://reddit.com/", ) .unwrap(); @@ -1807,7 +1856,7 @@ mod tests { #[test] fn out_of_bounds_str() { let webpage = Html::parse( - include_str!("../../testcases/parsing/byte_index_out_of_bounds.html"), + include_str!("../../core/testcases/parsing/byte_index_out_of_bounds.html"), "https://example.com", ) .unwrap(); @@ -2269,7 +2318,8 @@ mod tests { #[test] fn stackoverflow_question_has_clean_text() { - let stackoverflow = include_str!("../../testcases/schema_org/stackoverflow_with_code.html"); + let stackoverflow = + include_str!("../../core/testcases/schema_org/stackoverflow_with_code.html"); let html = Html::parse(stackoverflow, "https://www.example.com").unwrap(); assert!(html.clean_text().is_some()); diff --git a/crates/core/src/webpage/region.rs b/crates/webpage/src/region.rs similarity index 97% rename from crates/core/src/webpage/region.rs rename to crates/webpage/src/region.rs index 4fa4caaa8..2d01c02e3 100644 --- a/crates/core/src/webpage/region.rs +++ b/crates/webpage/src/region.rs @@ -89,7 +89,7 @@ impl Region { "ger" => Ok(Region::Germany), "spa" => Ok(Region::Spain), "us" => Ok(Region::US), - _ => Err(Error::UnknownRegion.into()), + _ => Err(Error::UnknownRegion), } } @@ -101,9 +101,9 @@ impl Region { whatlang::Lang::Fra => Ok(Region::France), whatlang::Lang::Deu => Ok(Region::Germany), whatlang::Lang::Dan => Ok(Region::Denmark), - _ => Err(Error::UnknownRegion.into()), + _ => Err(Error::UnknownRegion), }, - None => Err(Error::UnknownRegion.into()), + None => Err(Error::UnknownRegion), } } diff --git a/crates/core/src/webpage/safety_classifier.rs b/crates/webpage/src/safety_classifier.rs similarity index 97% rename from crates/core/src/webpage/safety_classifier.rs rename to crates/webpage/src/safety_classifier.rs index 0e1b356f8..db36e3665 100644 --- a/crates/core/src/webpage/safety_classifier.rs +++ b/crates/webpage/src/safety_classifier.rs @@ -77,7 +77,7 @@ fn normalize(text: &str) -> String { .to_lowercase() } -pub fn page_text(page: &crate::webpage::Webpage) -> String { +pub fn page_text(page: &crate::Webpage) -> String { page.html.title().unwrap_or_default() + " " + page.html.clean_text().cloned().unwrap_or_default().as_str() @@ -120,7 +120,7 @@ impl Model { self.pipeline.predict(&text) } - pub fn predict(&self, page: &crate::webpage::Webpage) -> naive_bayes::Prediction