Example #1
0
    def build_file_train_model_produce_output(
            self, feature_names, n_gram_length, sentiment_processor, spotter,
            golden_saliency_by_entid_by_docid, dexter_dataset,
            wikipedia_dataset):
        feature_filename = FileLocations.get_dropbox_intermediate_path(
        ) + 'sentiment_simple_ngram_' + str(n_gram_length) + '.txt'
        document_to_feature_converter = SimpleSentiment(
            sentiment_processor, n_gram_length=n_gram_length)

        model_filename = FileLocations.get_dropbox_intermediate_path(
        ) + 'simple_sentiment_model_ngram_' + str(n_gram_length) + '.pickle'

        tosent_converter = SimpleGBRT(model_filename)
        test_docid_set = set(Const.TESTSET_DOCID_LIST)
        train_docid_set = set(Const.TRAINSET_DOCID_LIST)
        salience_by_entity_by_doc_id = smb.build_output_using_dexter_dataset(
            spotter, golden_saliency_by_entid_by_docid, feature_filename,
            document_to_feature_converter, tosent_converter, test_docid_set,
            train_docid_set)
        # if not os.path.isfile(model_filename):
        # build model
        self.train_model(feature_filename, feature_names, dexter_dataset,
                         wikipedia_dataset, model_filename)

        trc = TrecReferenceCreator()
        prefix = str(n_gram_length) + '_n_gram_x_temp'
        trc.create_results_file(salience_by_entity_by_doc_id, prefix)
        report, ndcg, trec_by_id = trc.get_report(
            FileLocations.get_dropbox_intermediate_path() +
            'trec_ground_truth.txt', prefix)
        trc.logger.info('\nTrec Eval Results:\n%s', report)

        return salience_by_entity_by_doc_id, ndcg, trec_by_id
Example #2
0
    def get_ndcg_and_trec_eval(self, feature_filename, model_filename, feature_names, docid_set, wikipediaDataset , dexterDataset, per_document_ndcg):
        self.logger.info('loading model %s', model_filename)

        with open(model_filename, 'rb') as handle:
            model = pickle.load(handle)

        salience_by_entity_by_doc_id = self.get_salience_by_entity_by_doc_id(feature_filename, model, docid_set, feature_names, dexterDataset,
                                                    wikipediaDataset, filter_for_interesting=False)

        trc = TrecReferenceCreator()
        prefix = 'model_runner_x_temp'
        trc.create_results_file(salience_by_entity_by_doc_id, prefix)
        overall_report, overall_ndcg, overall_trec_val_by_name = trc.get_report(FileLocations.get_dropbox_intermediate_path() + 'trec_ground_truth.txt', prefix)


        ndcg_by_docid = {}
        trec_val_by_name_by_docid = {}
        if per_document_ndcg:
            skipped = []
            for docid in docid_set:
                salience_by_entity_by_doc_id_b = {}
                if docid in salience_by_entity_by_doc_id:
                    salience_by_entity_by_doc_id_b[docid] = salience_by_entity_by_doc_id[docid]
                    trc = TrecReferenceCreator()
                    prefix = 'model_runner_x_temp'
                    trc.create_results_file(salience_by_entity_by_doc_id_b, prefix)
                    report, ndcg, trec_val_by_name = trc.get_report(FileLocations.get_dropbox_intermediate_path() + 'trec_ground_truth.txt', prefix)
                    trc.logger.info('\nTrec Eval Results:\n%s', report)
                    ndcg_by_docid[docid] = ndcg
                    trec_val_by_name_by_docid[docid] = trec_val_by_name
                else:
                    self.logger.warning('No data for docid %d, skipping',docid)
                    skipped.append(docid)
            self.logger.info('per doc ndcg : %s ', ndcg_by_docid)
            self.logger.info('skipped in the per doc ndcg : %s ', skipped)

        trc.logger.info('\n_____________________________________\nTrec Eval Results Overall:\n%s', overall_report)

        return overall_ndcg, ndcg_by_docid, overall_trec_val_by_name, trec_val_by_name_by_docid
Example #3
0
    def create_reference_file(self, zero_less_than_2):

        # load the data
        dd = DatasetDexter()
        document_list = dd.get_dexter_dataset(
            path=FileLocations.get_dropbox_dexter_path())

        results = ''
        # process the data
        result_count = 0
        doc_count = 0

        for document in document_list:
            data = json.loads(document)
            saliency_by_ent_id_golden = self.extract_saliency_by_ent_id_golden(
                data)
            docid = data['docId']

            sorted_list = self.get_ordered_list_from_dictionary(
                saliency_by_ent_id_golden)

            for item in sorted_list:
                entity_id = item[0]
                salience = item[1]
                if zero_less_than_2:
                    if salience < 2.0:
                        salience = 0.0
                results = results + str(docid) + ' 0 ' + str(
                    entity_id) + ' ' + str(salience) + '\n'
                result_count += 1

            self.logger.info('Documents Processed %d Entities Processed %d ',
                             doc_count, result_count)
            doc_count += 1

        fn = FileLocations.get_dropbox_intermediate_path(
        ) + "trec_ground_truth.txt"
        self.logger.info('writing to %s ', fn)
        file = open(fn, "w")
        file.write(results)
        file.close()
Example #4
0
from sellibrary.text_file_loader import join_feature_matrix

from sellibrary.text_file_loader import load_feature_matrix
from sellibrary.locations import FileLocations
from sellibrary.sel.dexter_dataset import DatasetDexter
from sellibrary.wiki.wikipedia_datasets import WikipediaDataset
from sellibrary.filter_only_golden import FilterGolden
from sellibrary.util.const import Const

if __name__ == "__main__":

    const = Const()
    dropbox_intermediate_path = FileLocations.get_dropbox_intermediate_path()

    file_A_feature_names = const.get_sel_feature_names()
    filename_A = dropbox_intermediate_path + 'wp/wp.txt'

    file_B_feature_names = const.sent_feature_names
    filename_B = dropbox_intermediate_path + 'wp_sentiment_simple.txt'  #'base_tf_simple_v2.txt'

    output_filename = dropbox_intermediate_path + 'wp_joined.txt'  #'joined_sel_sent_and_tf.txt'

    # Load File A
    X1, y1, docid_array1, entity_id_array1 = load_feature_matrix(
        feature_filename=filename_A,
        feature_names=file_A_feature_names,
        entity_id_index=1,
        y_feature_index=2,
        first_feature_index=4,
        number_features_per_line=len(file_A_feature_names) + 4,
        tmp_filename='/tmp/temp_conversion_file.txt')
                s = '%d %d 0 0 [ %f ]' % (docid, entity_id, sent)
                self.logger.info(s)
                file_contents = file_contents + s + '\n'

        file = open(output_filename, "w")
        file.write(file_contents)
        file.close()

        self.logger.info('processing complete')

    # def train_and_save_model(self, filename):
    #     spotter = SpotlightCachingSpotter(False)
    #     afinn_filename = '../sellibrary/resources/AFINN-111.txt'
    #     sentiment_processor = SentimentProcessor()
    #     self.train_model_using_dexter_dataset(sentiment_processor, spotter, afinn_filename)
    #     sentiment_processor.save_model(filename)
    #     return sentiment_processor


if __name__ == "__main__":
    filename = FileLocations.get_dropbox_intermediate_path(
    ) + 'sentiment.pickle'

    dexter_feeder = DexterFeeder()
    spotter = SpotlightCachingSpotter(False)
    sentiment_processor = SentimentProcessor()
    sentiment_processor.load_model(filename)

    dexter_feeder.dexter_dataset_sentiment(sentiment_processor, spotter,
                                           '/tmp/sentiment_output.txt')
Example #6
0
import logging
from sklearn.ensemble import GradientBoostingRegressor
from sellibrary.gbrt import GBRTWrapper
from sellibrary.text_file_loader import load_feature_matrix
from sellibrary.filter_only_golden import FilterGolden
from sellibrary.sel.dexter_dataset import DatasetDexter
from sellibrary.wiki.wikipedia_datasets import WikipediaDataset

from sellibrary.locations import FileLocations
INTERMEDIATE_PATH = FileLocations.get_dropbox_intermediate_path()

# setup logging

handler = logging.StreamHandler()
handler.setFormatter(
    logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s'))
logger = logging.getLogger(__name__)
logger.addHandler(handler)
logger.propagate = False
logger.setLevel(logging.INFO)

feature_names = [
    'v1_graph_size', 'v1_graph_diameter', 'v1_node_degree',
    'v1_degree_mean_median_ratio', 'v1_out_degree_mean_median_ratio',
    'v1_degree_mean_median_ratio', 'v1_farness', 'v1_closeness',
    'v1_centrality', 'v1_minus_low_relatedness_graph_size',
    'v1_minus_low_relatedness_graph_diameter',
    'v1_minus_low_relatedness_node_degree',
    'v1_minus_low_relatedness_degree_mean_median_ratio',
    'v1_minus_low_relatedness_out_degree_mean_median_ratio',
    'v1_minus_low_relatedness_degree_mean_median_ratio',
            self.logger.info('%s %d', docid, new_id)
            cmd = '/usr/bin/sed'

            param1 = '-i'
            param2 = ".old"
            param3 = "'s/" + docid + "/" + str(new_id) + "/g'"
            param4 = filename

            self.logger.info('%s %s %s %s %s', cmd, param1, param2, param3,
                             param4)
            full_cmd = cmd + ' ' + param1 + ' ' + param2 + ' ' + param3 + ' ' + param4
            process = subprocess.Popen(full_cmd,
                                       shell=True,
                                       stdout=subprocess.PIPE)
            process.wait()
            self.logger.info('return code %d ', process.returncode)


if __name__ == "__main__":

    # greps all the documents in the corpus against an ID list to build a file. This
    # file needs to be manually copied to the washingtonpost directory
    app = WashingtonPostSedder()
    app.replace_docid_articles(FileLocations.get_dropbox_intermediate_path() +
                               'wp/wp_minus_0.txt')
    app.replace_docid_articles(FileLocations.get_dropbox_intermediate_path() +
                               'wp_sentiment_simple.txt')
    app.replace_docid_articles(FileLocations.get_dropbox_intermediate_path() +
                               'wp_base_tf_simple_v2.txt')
                                       verbose=0,
                                       warm_start=False)

        forest = forest.fit(X_train, y_train)

        print('oob score ' + str(forest.oob_score_))
        with open(model_filename, 'wb') as handle:
            pickle.dump(forest, handle, protocol=pickle.HIGHEST_PROTOCOL)


if __name__ == "__main__":

    use_dexter_dataset = False
    use_wahington_post_dataset = True
    output_filename = 'base_tf_simple_v2.txt'
    model_filename = FileLocations.get_dropbox_intermediate_path(
    ) + 'simple_tf.pickle'
    train_model = False
    filter_for_interesting = False
    train_docid_set = None  # == ALL - filtered later
    train_docid_set = set(Const.TRAINSET_DOCID_LIST).union(
        Const.TESTSET_DOCID_LIST)
    report_docid_set = None  #set(Const.TESTSET_DOCID_LIST).union(Const.TRAINSET_DOCID_LIST) # filters the outputfile - add Train data to get a full output files

    if (use_wahington_post_dataset):
        output_filename = 'wp_' + output_filename
    output_filename = FileLocations.get_dropbox_intermediate_path(
    ) + output_filename

    document_to_feature_converter = DocToTermFreqConverter()
    handler = logging.StreamHandler()
    handler.setFormatter(
Example #9
0
        return salience_by_entity_by_doc_id



if __name__ == "__main__":

    min_docid = int(sys.argv[1])
    max_docid = int(sys.argv[2])
    break_early = False
    if len(sys.argv) >= 4:
        break_early = sys.argv[3].lower() == 'break_early'
        if break_early:
            SelModelBuilder.logger.warning('Break early is set to True')


    filename = FileLocations.get_dropbox_intermediate_path() + 'sel.pickle'
    build_model = False
    aws_util = AWSUtil()
    smb = SelModelBuilder()


    # if build_model:
    #     sentiment_processor = smb.train_and_save_model(filename)
    # else:
    #     sentiment_processor = SentimentProcessor()
    #     sentiment_processor.load_model(filename)

    dd = smb.get_dexter_datset()
    wikipediaDataset = WikipediaDataset()
    document_list = dd.get_dexter_dataset(path=FileLocations.get_dropbox_dexter_path())
    spotter = GoldenSpotter(document_list, wikipediaDataset)
                        file.write('\n')

                    sentiment = features_by_entity_id[entity_id][0]
                    salience_by_entity_by_doc_id[docid][entity_id] = sentiment
                    self.logger.debug('sent %f', sentiment)

        if file is not None:
            file.close()
            self.logger.info('written to %s', output_filename)
        self.logger.info('processing complete')

        return salience_by_entity_by_doc_id


if __name__ == "__main__":
    filename = FileLocations.get_dropbox_intermediate_path(
    ) + 'sentiment.pickle'
    smb = PWModelBuilder()

    sentiment_processor = SentimentProcessor()
    sentiment_processor.load_model(filename)

    phrase = ' one iraq three'
    # sent = sentiment_processor.get_doc_sentiment(phrase)
    # print(sent, phrase)

    smb.get_feature_list(sentiment_processor, ' one iraq three')
    smb.get_feature_list(sentiment_processor, 'abandon')
    smb.get_feature_list(sentiment_processor, 'outstanding')
    smb.get_feature_list(sentiment_processor, 'appeases')
    smb.get_feature_list(sentiment_processor, 'superb')
    smb.get_feature_list(sentiment_processor, 'prick')
Example #11
0
        'freq in last 3 sentences of body ',  # 4
        'freq in title ',  # 4
        'one occurrence capitalised',  # 5
        'maximum fraction of uppercase letters',  # 6
        'average spot length in words',  # 8.1 :
        'average spot length in characters',  # 8.2 :
        'is in title',  # 11 :
        'unambiguous entity frequency',  # 14 : 1 entity frequency feature
        'entity in_degree in wikipeada',  # 20 :
        'entity out_degree in wikipeada',  # 20 :
        'entity degree in wikipeada',  # 20 :
        'document length',  # 22 :
    ]

    X, y, docid_array, entity_id_array = load_feature_matrix(
        feature_filename=FileLocations.get_dropbox_intermediate_path() + 'dexter_fset_02__1_to_604_light_output_all.txt',
        feature_names=feature_names,
        entity_id_index=1,
        y_feature_index=2, first_feature_index=4, number_features_per_line=27,
        tmp_filename='/tmp/temp_conversion_file.txt'
    )

    # train only on records we have a golden salience for
    fg = FilterGolden()
    X2, y2, docid2, entityid2 = fg.get_only_golden_rows(X, y, docid_array, entity_id_array, dexterDataset= , wikipediaDataset=)

    wrapper = GBRTWrapper()

    splitter = DataSplitter()

    wrapper.train_model(X2, y2, entityid2, 0, n_estimators=40)
from sellibrary.locations import FileLocations
from sellibrary.sel.dexter_dataset import DatasetDexter
from sellibrary.sentiment.sentiment import SentimentProcessor
from sellibrary.wiki.wikipedia_datasets import WikipediaDataset
from sellibrary.converters.tosentiment.simple_gbrt import SimpleGBRT
from sellibrary.converters.tosentiment.sel_features_to_sentiment import SelFeatToSent
from sellibrary.trec.trec_util import TrecReferenceCreator
from sellibrary.util.s3_util import AWSUtil
from sellibrary.main.main_build_sel_model import SelModelBuilder


if __name__ == "__main__":
    min_number = int(sys.argv[1])
    max_number = int(sys.argv[2])

    filename = FileLocations.get_dropbox_intermediate_path() + 'sel.pickle'
    build_model = False
    break_early = False
    aws_util = AWSUtil()
    smb = SelModelBuilder()


    # if build_model:
    #     sentiment_processor = smb.train_and_save_model(filename)
    # else:
    #     sentiment_processor = SentimentProcessor()
    #     sentiment_processor.load_model(filename)

    dd = smb.get_dexter_datset()
    wikipediaDataset = WikipediaDataset()
Example #13
0
                salience_by_entity_by_doc_id[docid][entity_id] = sentiment

                self.logger.info('sent %f', sentiment)

        if file is not None:
            file.close()
            self.logger.info('written to %s', output_filename)
        self.logger.info('processing complete')

        return salience_by_entity_by_doc_id


if __name__ == "__main__":

    filename = FileLocations.get_dropbox_intermediate_path(
    ) + 'sentiment.pickle'
    tosent_converter = SimpleGBRT(
        FileLocations.get_dropbox_intermediate_path() +
        'simple_sentiment_GradientBoostingRegressor.pickle')
    build_model = False
    output_filename = FileLocations.get_dropbox_intermediate_path(
    ) + 'wp_sentiment_simple.txt'
    use_dexter_dataset = False
    use_wshington_post_dataset = True

    smb = SentimentModelBuilder()

    if build_model:
        sentiment_processor = smb.train_and_save_model(filename)
    else:
        sentiment_processor = SentimentProcessor()
Example #14
0
File: const.py Project: dwanev/SEL
class Const:
    light_feature_names = [
        'min_normalised_position',  # 1
        'max_normalised_position',  # 1
        'mean_normalised_position',  # 1
        'normalised_position_std_dev',  # 1
        'norm_first_position_within_first 3 sentences',  # 2
        'norm first positon within body middle',  # 2
        'norm_first_position_within last 3 sentences',  # 2
        'normed first position within title',  # 2
        'averaged normed position within sentences',  # 3
        'freq in first 3 sentences of body ',  # 4
        'freq in middle of body ',  # 4
        'freq in last 3 sentences of body ',  # 4
        'freq in title ',  # 4
        'one occurrence capitalised',  # 5
        'maximum fraction of uppercase letters',  # 6
        'average spot length in words',  # 8.1 :
        'average spot length in characters',  # 8.2 :
        'is in title',  # 11 :
        'unambiguous entity frequency',  # 14 : 1 entity frequency feature
        'entity in_degree in wikipeada',  # 20 :
        'entity out_degree in wikipeada',  # 20 :
        'entity degree in wikipeada',  # 20 :
        'document length',  # 22 :
    ]

    heavy_feature_names = [
        'v1_graph_size', 'v1_graph_diameter', 'v1_node_degree',
        'v1_degree_mean_median_ratio', 'v1_out_degree_mean_median_ratio',
        'v1_degree_mean_median_ratio', 'v1_farness', 'v1_closeness',
        'v1_centrality', 'v1_minus_low_relatedness_graph_size',
        'v1_minus_low_relatedness_graph_diameter',
        'v1_minus_low_relatedness_node_degree',
        'v1_minus_low_relatedness_degree_mean_median_ratio',
        'v1_minus_low_relatedness_out_degree_mean_median_ratio',
        'v1_minus_low_relatedness_degree_mean_median_ratio',
        'v1_minus_low_relatedness_farness',
        'v1_minus_low_relatedness_closeness',
        'v1_minus_low_relatedness_centrality', 'v0_graph_size',
        'v0_graph_diameter', 'v0_node_degree', 'v0_degree_mean_median_ratio',
        'v0_out_degree_mean_median_ratio', 'v0_degree_mean_median_ratio',
        'v0_farness', 'v0_closeness', 'v0_centrality',
        'v0_minus_low_relatedness_graph_size',
        'v0_minus_low_relatedness_graph_diameter',
        'v0_minus_low_relatedness_node_degree',
        'v0_minus_low_relatedness_degree_mean_median_ratio',
        'v0_minus_low_relatedness_out_degree_mean_median_ratio',
        'v0_minus_low_relatedness_degree_mean_median_ratio',
        'v0_minus_low_relatedness_farness',
        'v0_minus_low_relatedness_closeness',
        'v0_minus_low_relatedness_centrality'
    ]

    tf_feature_names = ['doc_freg', 'title_freq', 'body_freq']

    def get_sel_feature_names(self):
        l = []
        l.extend(Const.light_feature_names)
        l.extend(Const.heavy_feature_names)
        return l

    INTERMEDIATE_PATH = FileLocations.get_dropbox_intermediate_path()
    TEMP_PATH = FileLocations.get_temp_path()

    sent_feature_names = [
        'title_sentiment_ngram_20', 'title_neg_sent_ngram_20',
        'title_pos_sent_ngram_20', 'body_sentiment_ngram_20',
        'body_neg_sent_ngram_20', 'body_pos_sent_ngram_20'
    ]

    def get_joined_feature_names(self):
        l = []
        l.extend(self.get_sel_feature_names())
        l.extend(self.sent_feature_names)
        return l

    def get_joined_sel_sent_and_tf_feature_names(self):
        l = []
        l.extend(self.get_sel_feature_names())
        l.extend(self.sent_feature_names)
        l.extend(self.tf_feature_names)
        return l

    efficient_1_feature_names = [
        'freq in first 3 sentences of body ', 'title_freq', 'freq in title ',
        'norm_first_position_within_first 3 sentences',
        'normed first position within title', 'title_sentiment_ngram_20',
        'title_neg_sent_ngram_20', 'title_pos_sent_ngram_20',
        'normalised_position_std_dev', 'min_normalised_position',
        'norm first positon within body middle', 'freq in middle of body ',
        'body_neg_sent_ngram_20', 'body_sentiment_ngram_20',
        'body_pos_sent_ngram_20', 'max_normalised_position',
        'mean_normalised_position',
        'norm_first_position_within last 3 sentences',
        'freq in last 3 sentences of body ',
        'averaged normed position within sentences',
        'entity out_degree in wikipeada', 'average spot length in words',
        'average spot length in characters', 'unambiguous entity frequency',
        'entity degree in wikipeada', 'document length'
    ]

    efficient_2_feature_names = [
        'freq in first 3 sentences of body ', 'title_freq', 'freq in title ',
        'norm_first_position_within_first 3 sentences',
        'normed first position within title', 'title_sentiment_ngram_20',
        'title_neg_sent_ngram_20', 'title_pos_sent_ngram_20',
        'normalised_position_std_dev', 'min_normalised_position',
        'norm first positon within body middle', 'freq in middle of body ',
        'body_neg_sent_ngram_20', 'body_sentiment_ngram_20',
        'body_pos_sent_ngram_20', 'max_normalised_position',
        'mean_normalised_position',
        'norm_first_position_within last 3 sentences',
        'freq in last 3 sentences of body ',
        'averaged normed position within sentences',
        'entity out_degree in wikipeada', 'average spot length in words',
        'average spot length in characters', 'unambiguous entity frequency',
        'entity degree in wikipeada', 'document length', 'v0_node_degree',
        'v0_closeness', 'v0_centrality', 'v0_farness',
        'v0_minus_low_relatedness_node_degree',
        'v0_minus_low_relatedness_farness',
        'v0_minus_low_relatedness_closeness',
        'v0_minus_low_relatedness_centrality', 'entity in_degree in wikipeada',
        'v0_graph_diameter', 'v0_minus_low_relatedness_graph_size',
        'v0_minus_low_relatedness_graph_diameter',
        'v0_minus_low_relatedness_degree_mean_median_ratio', 'v0_graph_size',
        'v0_degree_mean_median_ratio', 'v0_out_degree_mean_median_ratio',
        'v0_minus_low_relatedness_out_degree_mean_median_ratio'
    ]

    TRAINSET_DOCID_LIST = [
        1, 2, 4, 6, 7, 9, 10, 11, 12, 13, 16, 17, 22, 24, 26, 27, 28, 29, 31,
        34, 36, 37, 38, 40, 41, 43, 44, 49, 54, 56, 57, 60, 62, 63, 71, 75, 78,
        81, 86, 87, 89, 90, 91, 93, 94, 96, 98, 99, 101, 103, 108, 109, 110,
        113, 114, 115, 116, 118, 123, 124, 125, 126, 136, 141, 144, 145, 148,
        149, 150, 151, 153, 154, 155, 156, 157, 158, 159, 162, 163, 165, 166,
        167, 170, 171, 172, 173, 174, 175, 178, 179, 182, 184, 189, 190, 191,
        195, 196, 204, 206, 207, 208, 209, 210, 213, 217, 218, 219, 221, 222,
        226, 229, 235, 236, 238, 241, 242, 245, 246, 247, 250, 254, 256, 257,
        262, 265, 266, 267, 268, 270, 271, 272, 274, 275, 278, 283, 284, 285,
        288, 290, 291, 294, 299, 301, 302, 308, 315, 317, 323, 327, 329, 330,
        331, 332, 333, 338, 341, 530, 532, 534, 540, 541, 543, 544, 545, 548,
        551, 552, 553, 561, 568, 569, 570, 572, 573, 574, 577, 578, 582, 583,
        587, 588, 592, 594, 596, 597, 600, 601, 603, 604
    ]

    TESTSET_DOCID_LIST = [
        3, 5, 8, 14, 18, 20, 21, 23, 25, 30, 32, 33, 35, 39, 42, 45, 46, 50,
        51, 52, 53, 55, 58, 64, 66, 68, 70, 72, 73, 74, 76, 77, 80, 82, 83, 84,
        85, 88, 95, 100, 104, 105, 106, 107, 111, 112, 119, 127, 129, 131, 132,
        133, 134, 137, 138, 139, 140, 146, 160, 161, 168, 169, 177, 180, 181,
        183, 185, 186, 187, 188, 192, 193, 194, 197, 198, 199, 200, 202, 203,
        205, 211, 212, 214, 215, 216, 223, 224, 225, 227, 228, 230, 232, 233,
        234, 237, 239, 240, 243, 244, 248, 249, 251, 252, 253, 255, 258, 259,
        260, 261, 263, 264, 269, 273, 276, 277, 279, 280, 281, 282, 289, 292,
        293, 295, 296, 298, 300, 303, 304, 305, 306, 307, 311, 312, 313, 314,
        316, 318, 319, 320, 321, 324, 325, 326, 334, 336, 337, 339, 340, 527,
        528, 531, 536, 538, 542, 546, 550, 555, 560, 562, 566, 567, 571, 575,
        576, 579, 580, 581, 586, 589, 590, 591, 593, 595, 598, 599, 602
    ]

    DOCID_BY_REASONBLE_ENTITY = {
        9282173: [
            1, 32, 66, 85, 95, 106, 107, 108, 126, 136, 149, 154, 155, 157,
            160, 177, 188, 191, 209, 210, 217, 279, 329, 579, 582, 583
        ],
        6705064: [
            1, 32, 66, 85, 95, 106, 107, 108, 126, 136, 149, 154, 155, 157,
            160, 177, 188, 191, 209, 210, 217, 279, 329, 579, 582, 583
        ],
        31717: [
            1, 4, 17, 26, 30, 34, 40, 45, 46, 52, 54, 68, 83, 86, 99, 109, 111,
            113, 124, 132, 134, 136, 144, 146, 158, 159, 165, 170, 175, 179,
            181, 182, 187, 188, 189, 195, 199, 205, 209, 210, 211, 227, 242,
            255, 256, 260, 277, 279, 285, 292, 293, 301, 311, 315, 327, 333,
            337, 530, 534, 540, 542, 543, 544, 568, 578, 580, 586, 591, 595,
            600, 602
        ],
        5843419: [
            1, 11, 26, 34, 40, 49, 52, 56, 66, 71, 86, 96, 98, 104, 106, 109,
            127, 132, 134, 136, 141, 146, 159, 166, 172, 173, 174, 186, 189,
            195, 198, 199, 203, 205, 207, 209, 210, 227, 260, 282, 292, 301,
            306, 329, 333, 536, 542
        ],
        10545: [
            1, 11, 26, 34, 40, 49, 52, 56, 66, 71, 86, 96, 98, 104, 106, 109,
            127, 132, 134, 136, 141, 146, 159, 166, 172, 173, 174, 186, 189,
            195, 198, 199, 203, 205, 207, 209, 210, 227, 260, 282, 292, 301,
            306, 329, 333, 536, 542
        ],
        21785: [1, 8, 16, 36, 51, 592],
        6984: [1, 2],
        57654: [1, 34, 44],
        14653: [
            1, 33, 34, 36, 44, 77, 85, 90, 106, 107, 136, 156, 157, 160, 188,
            191, 196, 209, 211, 228, 329, 581
        ],
        31956: [
            1, 10, 14, 34, 40, 44, 52, 66, 72, 75, 154, 155, 163, 209, 294,
            313, 327, 333
        ],
        9239: [
            1, 11, 44, 73, 83, 96, 106, 109, 136, 150, 159, 165, 166, 167, 171,
            205, 259, 284, 292, 326, 542, 592
        ],
        11867: [
            1, 34, 49, 98, 103, 109, 116, 124, 125, 127, 132, 136, 165, 166,
            177, 191, 195, 210, 248, 292, 329, 333, 542, 599, 602
        ],
        11833: [
            1, 34, 49, 98, 103, 109, 116, 124, 125, 127, 132, 136, 165, 166,
            177, 191, 195, 210, 248, 292, 329, 333, 542, 599, 602
        ],
        9317: [
            1, 6, 26, 34, 49, 50, 71, 73, 95, 116, 125, 127, 139, 191, 198,
            199, 245, 255, 282, 316
        ],
        32293: [1, 2, 36, 141, 154, 175, 330],
        3434750: [
            1, 3, 5, 6, 8, 16, 24, 25, 30, 31, 33, 34, 36, 38, 40, 42, 44, 45,
            51, 52, 53, 56, 57, 58, 60, 62, 64, 66, 74, 75, 77, 80, 81, 83, 85,
            87, 89, 90, 91, 94, 95, 98, 100, 101, 104, 105, 106, 107, 109, 110,
            111, 112, 113, 119, 123, 124, 126, 132, 133, 134, 136, 140, 141,
            145, 150, 151, 154, 155, 156, 157, 159, 161, 162, 168, 172, 174,
            177, 178, 180, 181, 182, 184, 185, 188, 190, 193, 194, 195, 197,
            198, 204, 206, 207, 209, 210, 211, 214, 215, 216, 222, 223, 227,
            228, 230, 235, 239, 242, 245, 248, 251, 255, 257, 258, 259, 261,
            266, 267, 275, 279, 281, 282, 284, 289, 290, 294, 298, 299, 300,
            301, 302, 305, 307, 308, 314, 315, 318, 319, 321, 324, 325, 326,
            330, 332, 338, 340, 341, 531, 536, 545, 548, 560, 562, 566, 568,
            569, 572, 573, 574, 575, 577, 578, 579, 586, 587, 589, 592, 601,
            602
        ],
        951976: [
            1, 3, 5, 6, 8, 16, 24, 25, 30, 31, 33, 34, 36, 38, 40, 42, 44, 45,
            51, 52, 53, 56, 57, 58, 60, 62, 64, 66, 74, 75, 77, 80, 81, 83, 85,
            87, 89, 90, 91, 94, 95, 98, 100, 101, 104, 105, 106, 107, 109, 110,
            111, 112, 113, 119, 123, 124, 126, 132, 133, 134, 136, 140, 141,
            145, 150, 151, 154, 155, 156, 157, 159, 161, 162, 168, 172, 174,
            177, 178, 180, 181, 182, 184, 185, 188, 190, 193, 194, 195, 197,
            198, 204, 206, 207, 209, 210, 211, 214, 215, 216, 222, 223, 227,
            228, 230, 235, 239, 242, 245, 248, 251, 255, 257, 258, 259, 261,
            266, 267, 275, 279, 281, 282, 284, 289, 290, 294, 298, 299, 300,
            301, 302, 305, 307, 308, 314, 315, 318, 319, 321, 324, 325, 326,
            330, 332, 338, 340, 341, 531, 536, 545, 548, 560, 562, 566, 568,
            569, 572, 573, 574, 575, 577, 578, 579, 586, 587, 589, 592, 601,
            602
        ],
        183895: [2, 5, 81],
        18998750: [2, 29, 64, 70, 148, 163, 203, 241, 262, 548, 569],
        7502981: [2, 29, 64, 70, 148, 163, 203, 241, 262, 548, 569],
        3414021: [
            2, 9, 33, 34, 35, 42, 44, 45, 57, 60, 75, 80, 87, 90, 107, 109,
            111, 112, 134, 150, 285, 548, 601
        ],
        24113: [2, 75, 190, 214, 575],
        158177: [2, 5, 8, 16, 36, 40, 66, 111, 123, 141, 154, 155],
        147301: [3, 87, 194, 574],
        5122699: [3, 321, 569],
        822290: [3, 321, 569],
        19468510: [
            3, 9, 55, 57, 60, 81, 87, 112, 119, 161, 178, 190, 194, 204, 206,
            223, 251, 275, 302, 304, 569, 574
        ],
        667130: [
            3, 9, 55, 57, 60, 81, 87, 112, 119, 161, 178, 190, 194, 204, 206,
            223, 251, 275, 302, 304, 569, 574
        ],
        5043544: [
            3, 9, 42, 55, 57, 60, 80, 81, 87, 112, 118, 119, 161, 178, 185,
            190, 194, 204, 206, 214, 223, 251, 266, 302, 325, 574
        ],
        4479450: [
            3, 9, 42, 55, 57, 60, 80, 81, 87, 112, 118, 119, 161, 178, 185,
            190, 194, 204, 206, 214, 223, 251, 266, 302, 325, 574
        ],
        9316:
        [4, 54, 113, 144, 165, 215, 235, 256, 292, 530, 534, 572, 596, 600],
        42622: [4, 337],
        737: [
            5, 45, 46, 56, 74, 85, 91, 111, 124, 168, 193, 211, 259, 288, 577,
            587, 595
        ],
        14034: [5, 555],
        7701: [5, 6, 534, 555],
        19457: [5, 90],
        22713: [5, 56],
        31756: [5, 13, 55, 87, 118, 258, 279, 304, 568, 574],
        3383: [6, 172, 173, 174, 219, 245, 265, 324, 333, 531, 589, 593],
        18951905: [6, 173, 177, 215, 219, 246, 531, 589],
        13774: [7, 138, 183, 285],
        29810: [7, 35, 55, 129, 138, 175, 183, 204, 285, 528, 604],
        21255: [8, 16, 41, 51, 62, 74, 75, 85, 90, 94, 134, 274, 294],
        5405: [
            8, 14, 40, 41, 44, 51, 52, 53, 62, 75, 84, 90, 94, 109, 124, 134,
            165, 186, 193, 210, 268, 294, 307, 324, 326, 333, 599
        ],
        27019:
        [8, 21, 22, 29, 41, 53, 62, 72, 73, 134, 145, 182, 215, 294, 561],
        47948: [8, 41, 94, 294],
        15573: [
            8, 14, 22, 51, 53, 62, 64, 72, 75, 98, 124, 163, 180, 182, 227,
            243, 264, 295, 326, 592
        ],
        15554: [
            8, 14, 22, 51, 53, 62, 64, 72, 75, 98, 124, 163, 180, 182, 227,
            243, 264, 295, 326, 592
        ],
        689: [8, 106, 109, 592],
        18933066: [9, 24, 39, 138, 239, 323],
        33127: [9, 208],
        33057: [9, 74, 87, 279, 307, 325, 592],
        24909346:
        [9, 42, 57, 87, 112, 118, 161, 185, 190, 194, 251, 266, 275, 296, 574],
        367653:
        [9, 42, 57, 87, 112, 118, 161, 185, 190, 194, 251, 266, 275, 296, 574],
        32070: [
            9, 57, 74, 80, 87, 112, 119, 161, 178, 185, 190, 194, 214, 251,
            266, 275, 296, 325, 574
        ],
        16844: [10, 72, 76],
        5042916: [
            10, 74, 78, 98, 100, 106, 109, 115, 124, 137, 153, 171, 180, 182,
            186, 197, 208, 211, 219, 245, 254, 255, 301, 311, 312, 332, 538,
            545, 583, 587, 590, 598
        ],
        2274514: [
            10, 74, 78, 98, 100, 106, 109, 115, 124, 137, 153, 171, 180, 182,
            186, 197, 208, 211, 219, 245, 254, 255, 301, 311, 312, 332, 538,
            545, 583, 587, 590, 598
        ],
        8210131: [10, 34, 111, 114, 116, 208, 209, 214, 223, 290],
        2320018: [10, 34, 111, 114, 116, 208, 209, 214, 223, 290],
        31769: [
            10, 16, 34, 36, 37, 42, 44, 66, 72, 76, 95, 104, 116, 126, 154,
            155, 157, 160, 163, 180, 181, 191, 198, 200, 202, 209, 211, 227,
            255, 301, 313, 326, 327, 333, 548, 578, 579, 583, 586, 587
        ],
        31957: [10, 72, 191, 586],
        26667: [
            11, 98, 106, 159, 172, 177, 198, 199, 205, 207, 212, 218, 219, 255,
            311, 531
        ],
        19390: [11, 94],
        19382: [11, 94],
        25391: [
            11, 23, 30, 40, 52, 62, 75, 86, 90, 95, 99, 103, 124, 126, 136,
            139, 141, 150, 160, 162, 167, 171, 177, 181, 188, 195, 210, 245,
            278, 293, 294, 324, 333, 545, 586, 587, 588, 589, 593
        ],
        10577: [11, 46, 86, 96, 98, 127, 216, 337],
        10536: [11, 46, 86, 96, 98, 127, 216, 337],
        31750: [11, 50, 86, 125, 131, 139, 148, 156, 536, 586, 587, 588, 589],
        1328236: [12, 64],
        13270: [12, 51, 295, 300],
        195149: [12, 75],
        28679: [12, 269],
        1359407: [12, 269],
        23814944: [12, 269, 295],
        10106: [12, 64, 269, 295],
        14580: [12, 318],
        31737: [13, 42, 185, 275, 566],
        18949836: [13, 113, 133],
        18603746: [14, 41, 84, 94, 165],
        2113134: [14, 41, 84, 94, 165],
        154099: [16, 274],
        7987684: [16, 592],
        208463: [16, 228],
        5183633: [16, 204, 330, 573],
        4913064: [17, 98, 180, 576],
        812333: [17, 98, 180, 576],
        4689709: [17, 111],
        3890799: [17, 111],
        11125639: [17, 70, 86, 156, 279, 329, 551, 569],
        9271636: [17, 70, 86, 156, 279, 329, 551, 569],
        4689264: [
            17, 22, 98, 106, 111, 115, 159, 177, 179, 180, 182, 184, 212, 238,
            255, 293, 311, 315, 538, 546, 552, 553, 555, 570, 571, 576, 603
        ],
        15043: [18, 162, 171, 224, 258, 270, 271, 278, 323, 545, 593],
        16642: [18, 43, 171, 278, 293, 545, 589, 593],
        406573: [18, 171],
        14532: [
            18, 49, 70, 71, 89, 159, 181, 182, 198, 212, 292, 308, 317, 337,
            341, 560, 572, 592
        ],
        14482: [
            18, 49, 70, 71, 89, 159, 181, 182, 198, 212, 292, 308, 317, 337,
            341, 560, 572, 592
        ],
        9792: [18, 224],
        18426568: [
            18, 81, 129, 162, 171, 184, 224, 236, 252, 258, 270, 271, 278, 303,
            545, 593, 599
        ],
        525884: [
            18, 81, 129, 162, 171, 184, 224, 236, 252, 258, 270, 271, 278, 303,
            545, 593, 599
        ],
        10363: [18, 43, 129, 171, 599],
        19331: [20, 252, 258],
        38930: [20, 252],
        21837: [21, 314],
        2478598: [21, 247, 254, 561],
        1010187: [23, 99, 103],
        15624: [23, 93, 191, 598],
        5211: [23, 82],
        5067: [23, 82],
        19004: [23, 103, 324],
        8282374: [24, 138, 263, 268],
        3073412: [24, 138, 263, 268],
        303: [24, 57],
        25453500: [24, 103, 184, 544, 545, 593],
        1137594: [24, 103, 184, 544, 545, 593],
        21076367: [24, 25, 35, 138, 197],
        987125: [24, 25, 35, 138, 197],
        15660: [24, 25, 39, 165],
        18130: [24, 35, 105, 138, 194],
        11969: [24, 35],
        5042481: [25, 39, 53, 85, 90, 193, 548],
        13373: [25, 39, 198, 200, 202, 312],
        17867:
        [26, 34, 54, 82, 101, 144, 260, 277, 311, 542, 546, 572, 591, 597],
        9974: [26, 73, 245, 282],
        18247224: [26, 591],
        3301347: [26, 68, 95, 578, 601],
        1204298: [26, 68, 95, 578, 601],
        9581: [26, 166],
        22989: [26, 82, 132, 173, 174, 542],
        38152: [27, 78],
        31816: [28, 163],
        27421: [28, 55, 76, 85, 90, 116, 134, 196, 200, 216],
        605837: [28, 55, 76, 116, 134],
        17320: [28, 76],
        683270: [28, 76],
        18935732: [29, 64, 140, 251, 260, 266, 586, 595],
        3742592: [29, 64, 140, 251, 260, 266, 586, 595],
        19344654:
        [29, 46, 54, 60, 123, 146, 170, 294, 543, 567, 580, 581, 601],
        1317868: [29, 46, 54, 60, 123, 146, 170, 294, 543, 567, 580, 581, 601],
        19159283: [29, 41, 62, 561],
        23070: [30, 62, 295, 334],
        4921404: [30, 103],
        58353: [31, 190],
        18450: [31, 257],
        33209: [32, 108],
        206984: [32, 149, 582],
        1114732: [32, 88, 107, 108, 154, 155, 157, 583],
        848569: [32, 95, 149, 154],
        12047: [32, 95, 108, 154, 155, 157, 160, 217, 329],
        56472: [32, 149, 329, 583],
        2944: [32, 582],
        7515849: [33, 40, 77, 82, 85, 90, 116, 160, 327, 329, 568, 569],
        43998: [33, 274],
        7515928: [
            33, 42, 45, 60, 80, 85, 87, 91, 111, 116, 144, 187, 276, 279, 315,
            317
        ],
        645042: [34, 118, 132, 192, 300, 324, 333, 532],
        21838: [34, 118, 132, 192, 300, 324, 333, 532],
        14984: [34, 36, 37, 44, 52, 94, 188, 209, 331],
        7907317: [34, 36, 44, 85, 91, 157, 175, 188, 191, 209],
        243433: [34, 183],
        22107: [34, 37, 44, 52, 209],
        55866: [34, 36, 37],
        102226: [34, 123, 266, 566],
        171776: [34, 37, 339],
        17416221: [36, 101, 115, 215, 219, 578],
        2397252: [36, 101, 115, 215, 219, 578],
        26230922: [37, 339],
        1464426: [37, 339],
        22158: [37, 188, 228],
        14539: [38, 316, 336],
        1092923: [38, 73, 133, 282],
        19001: [38, 73, 96, 254, 282, 320, 324],
        188213: [38, 282],
        3966054: [39, 53, 57, 84, 159, 219, 324, 572, 589],
        5468: [39, 100, 151],
        22576: [41, 240, 311],
        8238258: [41, 45],
        19068: [41, 94],
        367785: [42, 266],
        14640471: [43, 129, 258],
        9995267: [43, 129, 258],
        180638: [43, 171, 593],
        72671: [44, 103, 195],
        22468: [45, 157],
        22462: [45, 157],
        1921: [45, 85, 104, 157, 193, 259, 541],
        23235: [45, 126, 193, 235, 299, 330, 577],
        194200: [46, 68],
        14531: [46, 219],
        21241: [46, 125, 126, 167, 182, 216, 219, 279, 590],
        17514: [46, 125, 127],
        17508: [46, 125, 127],
        5573: [49, 240],
        12108:
        [49, 70, 71, 84, 86, 89, 127, 136, 167, 199, 215, 217, 240, 317],
        76972: [49, 96, 125, 127, 180, 181, 246, 255, 279],
        3415: [49, 125, 127, 136, 180],
        27338: [49, 83, 96, 125, 127, 199, 215],
        26964606: [49, 125, 127, 205],
        19260: [50, 217],
        18717338: [50, 106, 112, 148, 161, 190, 194, 223, 272, 324, 325, 573],
        151486: [50, 106, 112, 148, 161, 190, 194, 223, 272, 324, 325, 573],
        585629: [50, 131],
        1102876: [50, 148],
        624: [51, 221, 251, 296],
        37555: [52, 592],
        385653: [52, 85, 91, 175, 188],
        5407: [
            53, 55, 87, 118, 169, 178, 214, 223, 225, 236, 241, 275, 283, 298,
            308, 318, 334
        ],
        25734: [53, 151],
        21148:
        [53, 71, 96, 106, 116, 151, 166, 182, 198, 218, 219, 243, 292, 317],
        22997: [53, 167],
        13828: [54, 170, 601],
        32113: [54, 146, 277, 601],
        10396793: [55, 191],
        166573: [55, 191],
        1645518: [55, 178, 230, 298],
        32432: [55, 114, 168, 197, 321],
        21133: [56, 68, 150, 327, 333],
        30635: [56, 68, 193, 530],
        766900: [57, 87, 178, 206, 574],
        22199: [57, 87, 208, 221],
        343949: [58, 232],
        14533: [
            58, 105, 109, 126, 182, 196, 232, 233, 234, 272, 299, 313, 318,
            324, 333
        ],
        2377: [58, 105, 234],
        4723094: [60, 276],
        17349325: [60, 321, 575],
        778814: [60, 321, 575],
        2346975: [62, 72, 104, 126, 181, 200, 202, 227, 578],
        40203: [63, 162, 236, 323],
        31161: [64, 269, 295],
        14579: [64, 104, 106, 116, 156, 182, 269, 534],
        17771: [66, 77, 88, 123, 124, 203, 228, 333],
        2195263: [66, 88, 123],
        13919: [66, 106, 123, 160],
        738: [70, 193],
        5593: [71, 83, 160],
        26748: [71, 98, 124, 166, 177, 205, 245, 308],
        147575: [71, 83, 86, 96, 126, 127, 192, 205, 313],
        23033: [71, 127, 159, 198, 205, 219, 263, 313],
        162415: [72, 76, 104, 126],
        3524766: [74, 113, 133],
        21780: [74, 241],
        10634933: [76, 163, 200, 202],
        7255748: [76, 163, 200, 202],
        5488: [76, 216],
        52593: [76, 200, 202, 203],
        440244: [77, 276],
        349303: [77, 82, 107, 156, 180, 196, 228, 234, 551],
        32759: [77, 251],
        149536: [78, 598],
        717: [78, 115],
        24135: [78, 587],
        3392: [78, 137],
        241547: [78, 583, 587, 598],
        145422: [80, 251, 298],
        62273: [81, 249],
        408971: [81, 178],
        70896: [81, 222, 326],
        17633: [82, 91, 200, 217, 316, 317, 327, 333, 341],
        51884: [82, 154, 316, 339, 560],
        13831: [82, 307, 546],
        8087628: [
            82, 101, 107, 136, 154, 157, 160, 196, 217, 228, 316, 317, 326,
            329, 330, 339, 560, 579
        ],
        30188: [82, 200, 240],
        108956: [82, 107, 114, 118, 298],
        6037917: [82, 93, 106, 108, 157, 163, 234, 299, 339],
        14478: [82, 93, 106, 108, 157, 163, 234, 299, 339],
        3343: [83, 93, 116, 125, 145, 159, 166, 171, 205, 219, 542, 592],
        5058739: [83, 182, 212, 216, 219, 551, 590],
        13275: [83, 125, 127, 148, 195, 199, 245, 262],
        22936: [83, 125, 127, 131, 134, 150, 167, 195, 210, 240, 245],
        77745: [84, 165],
        29265: [86, 177, 240],
        268796: [88, 123],
        37428: [88, 203, 568],
        48830: [89, 101, 222],
        48767: [89, 101, 222],
        3138: [89, 101, 253],
        34399: [90, 216, 527],
        202354: [90, 249],
        32817: [90, 99, 103, 589],
        53029: [91, 200, 217, 316, 317, 333],
        606848: [93, 219, 337, 538],
        7365: [93, 219, 337, 538],
        3708: [93, 199, 542],
        24150: [95, 586],
        19323: [95, 106, 107, 196, 228, 315, 583],
        232595: [95, 108, 154, 583],
        13913: [95, 108, 155, 160],
        26769: [96, 106],
        21383: [100, 156, 163, 196, 215, 538],
        64646: [100, 101, 115, 137, 311],
        141010: [100, 587],
        22218: [100, 115, 208],
        18618509: [101, 536],
        1134798: [101, 536],
        3080: [101, 329],
        557007: [104, 125, 134, 141, 172, 195],
        358: [104, 215, 327],
        5334607: [106, 196, 202, 216],
        304: [106, 196, 202, 216],
        30128: [106, 134, 318],
        211583: [107, 248, 568],
        16043: [108, 149],
        13404: [109, 156, 180, 192, 213, 229],
        27956: [110, 253, 579],
        18859: [110, 119, 208, 604],
        18746: [110, 119, 208, 604],
        30395: [110, 230, 572],
        21134: [110, 298],
        43715: [110, 114, 134, 136, 284],
        301237: [110, 114],
        21216: [110, 266, 289],
        380965: [111, 238],
        1726480: [112, 223],
        49728: [113, 133, 169, 241, 298, 561],
        5043192: [114, 134, 175, 195, 209, 211, 330],
        14849: [114, 145, 208],
        18858: [114, 306],
        18752: [114, 306],
        534366: [
            114, 134, 150, 154, 161, 168, 175, 181, 184, 185, 190, 193, 194,
            211, 222, 228, 258, 284, 298, 300, 302, 307, 313, 548, 568, 574,
            578, 579, 592
        ],
        21883824: [114, 129, 221, 302, 304, 536],
        16972533: [114, 129, 221, 302, 304, 536],
        1930: [114, 572, 604],
        1944: [115, 246, 555],
        22219: [115, 137],
        17391: [116, 124],
        11127: [118, 175, 206, 532],
        30680: [123, 149, 281, 305, 332, 573],
        13076: [124, 181, 187, 195],
        28222445: [125, 127],
        26830: [125, 127, 159],
        5321: [125, 134, 150, 590],
        25445: [125, 127, 177, 198],
        17675: [125, 127, 150],
        8504: [126, 192],
        46530: [126, 316],
        19137: [127, 255, 316],
        17515: [127, 159, 166, 205],
        57180: [129, 221, 302, 304],
        14998012: [132, 173],
        9299498: [132, 173],
        105927: [132, 542],
        3970: [132, 568],
        183050: [133, 602],
        18856: [133, 602],
        154549: [133, 602],
        255317: [138, 239, 263],
        53846: [138, 239],
        48768: [139, 141],
        376738: [139, 141],
        3162905: [139, 141, 150, 181, 195, 210],
        5399: [140, 221],
        21883857: [140, 208, 562],
        25433: [140, 573],
        4492: [144, 279],
        69328: [145, 207, 228],
        6886: [145, 208],
        10093: [146, 542],
        19344515: [146, 279, 281, 332, 543, 580, 596],
        9444919: [146, 279, 281, 332, 543, 580, 596],
        270673: [146, 158, 280, 534, 580, 597, 602],
        9472: [148, 166, 560],
        3209047: [149, 582],
        48569: [149, 210],
        74656: [149, 583],
        7954867: [153, 312],
        27358: [156, 163, 167, 199, 200, 216, 255, 318],
        188171: [156, 255],
        26994: [158, 273, 280, 291, 543, 597],
        6321: [158, 602],
        68736: [158, 273],
        23332: [161, 208, 604],
        375219: [161, 190],
        7279897: [162, 168, 548, 575],
        60154: [163, 199],
        3354: [165, 247],
        23440: [167, 186, 268],
        457235: [168, 595],
        7930: [168, 251],
        11955: [168, 184],
        845943: [168, 204, 284],
        17450998: [169, 225, 298],
        92656: [169, 219, 225, 566, 604],
        9988187: [169, 253, 281, 332, 527, 542, 553, 574, 586, 594, 598],
        664: [171, 224],
        656316: [171, 545],
        27278: [172, 200, 202],
        20740978: [172, 204, 274, 284],
        164939: [172, 173],
        89260: [173, 561],
        698: [173, 174, 239, 263],
        25936: [173, 174],
        1173018: [173, 263, 281, 292, 588],
        23042123: [173, 174],
        21840: [174, 248, 561],
        275895: [174, 203],
        275894: [174, 203],
        844215: [175, 188],
        167378: [179, 212],
        164910: [179, 212],
        2441596: [179, 212],
        33583: [180, 196],
        59755: [181, 587],
        662: [183, 184, 303],
        52382: [183, 567],
        51983: [184, 552],
        25473: [184, 306, 567],
        185232: [185, 566],
        32927: [187, 191, 306, 319, 597],
        240390: [189, 264],
        240378: [189, 264],
        3460: [193, 263],
        4278615: [193, 548],
        19291: [196, 207, 228, 560],
        21650: [197, 267],
        187749: [200, 202, 203],
        20518076: [204, 575],
        6190562: [204, 575],
        25226624: [206, 574],
        18950756: [207, 568],
        151210: [210, 307],
        419342: [211, 578, 586, 600],
        397335: [213, 229],
        60961: [214, 550],
        33166: [218, 587],
        31843: [219, 581],
        22754875: [222, 251, 288, 296],
        18110: [223, 257, 283, 572],
        496028: [224, 270, 271],
        189209: [224, 270, 271],
        81326: [224, 323],
        31666: [225, 604],
        950939: [225, 604],
        209014: [225, 604],
        32090: [227, 341],
        11121: [227, 575, 579],
        7515964: [228, 579],
        51299: [232, 233],
        5807337: [232, 233],
        19189: [234, 259, 299, 318],
        20629: [234, 299],
        13882056: [235, 530, 540],
        18453: [238, 246, 546, 570],
        314742: [238, 570],
        761469: [238, 546],
        556739: [238, 570],
        61565: [238, 570],
        171629: [238, 553],
        165705: [238, 546, 570],
        21638: [238, 555],
        1495: [238, 246],
        59051: [238, 555],
        21927: [238, 570],
        25027868: [239, 263],
        10568: [240, 527, 531, 581],
        856: [241, 305, 338],
        25970423: [241, 247, 254],
        25868376: [241, 247, 254],
        7412236: [241, 305],
        1563047: [241, 305],
        18933277: [243, 568],
        21654: [246, 555],
        66936: [246, 604],
        33613: [246, 555, 594],
        38300245: [247, 254],
        12610483: [247, 254],
        62028: [251, 259, 579],
        791: [258, 536],
        21710449: [261, 267],
        1467805: [261, 267, 289],
        425483: [261, 267],
        6941088: [261, 267],
        1314336: [261, 267],
        2019005: [261, 267],
        1637067: [261, 267],
        18600829: [261, 267, 289],
        16716: [261, 594],
        2148196: [261, 267],
        166791: [261, 267],
        1102404: [261, 267, 289],
        173900: [269, 295],
        631494: [269, 295],
        21175: [270, 271],
        11616263: [270, 271, 323],
        28238: [270, 271, 323],
        38458: [270, 271, 323],
        25059577: [270, 271, 323],
        13256: [270, 271],
        5829815: [270, 271, 323],
        211518: [272, 324],
        226426: [273, 291],
        3356: [274, 284, 578],
        8690: [275, 284, 298],
        7529378: [277, 288, 312, 324, 332, 552, 561, 576, 579],
        5949664: [277, 288, 312, 324, 332, 552, 561, 576, 579],
        8877168: [279, 281, 288, 321],
        2701987: [280, 543],
        21234593: [280, 543],
        14339416: [280, 543],
        97089: [281, 318],
        26033941: [281, 288, 546],
        26709: [283, 573],
        19831: [285, 579],
        2844938: [288, 324],
        80949: [288, 595],
        47737: [289, 572, 576],
        495724: [294, 341],
        6466: [298, 303],
        21830215: [302, 304],
        87956: [302, 304],
        5600374: [302, 304, 594],
        7954455: [305, 337],
        22489: [308, 604],
        26811621: [308, 604],
        7515890: [315, 568],
        31232: [316, 317],
        204114: [316, 317, 327, 333, 341],
        294894: [324, 573],
        416551: [327, 341],
        161041: [327, 586],
        6293: [327, 330, 339],
        18879: [331, 532],
        354236: [337, 339],
        23797577: [341, 580, 596],
        286989: [528, 566],
        33983258: [530, 577],
        1236283: [530, 577],
        2176142: [531, 581],
        11049: [531, 581],
        17306237: [546, 553, 576],
        23551054: [546, 555],
        497961: [552, 603],
        81215: [552, 553, 555],
        192093: [553, 576],
        16619: [571, 592],
        21492751: [578, 579],
        5173624: [578, 579],
        43983: [579, 582],
        88314: [586, 587, 588, 589, 590],
        2311504: [586, 587, 588, 589, 590],
        38201760: [586, 587, 588, 589],
        216355: [591, 600],
        25423: [596, 598]
    }